<?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>212458</bug_id>
          
          <creation_ts>2020-05-28 01:44:36 -0700</creation_ts>
          <short_desc>CodeGenerator should use DOMAttributeGetterSetter when it is DOMAttribute</short_desc>
          <delta_ts>2020-06-06 19:54:58 -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>Animations</component>
          <version>Safari 13</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philip Jägenstedt">philip</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>cdumez</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>graouts</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mjs</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656789</commentid>
    <comment_count>0</comment_count>
      <attachid>400435</attachid>
    <who name="Philip Jägenstedt">philip</who>
    <bug_when>2020-05-28 01:44:36 -0700</bug_when>
    <thetext>Created attachment 400435
crash log

This is a report for the problem discovered in https://github.com/mdittmer/web-apis/issues/94.

Safari version: 13.1.1 (15609.2.9.1.2)

I found and have attached ~/Library/Logs/DiagnosticReports/com.apple.WebKit.WebContent_2020-05-28-104123_foolip-macbookpro.crash.

I will attach the standalone repro case separately.

It doesn&apos;t repro in STP and it also doesn&apos;t repro when running with Web Inspector open.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1656790</commentid>
    <comment_count>1</comment_count>
      <attachid>400436</attachid>
    <who name="Philip Jägenstedt">philip</who>
    <bug_when>2020-05-28 01:44:55 -0700</bug_when>
    <thetext>Created attachment 400436
standalone repro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657204</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-29 03:33:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/63754110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659933</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-06 03:39:33 -0700</bug_when>
    <thetext>Reproduced. Looking!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659943</commentid>
    <comment_count>4</comment_count>
      <attachid>401252</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-06 05:48:44 -0700</bug_when>
    <thetext>Created attachment 401252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659946</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-06 06:03:53 -0700</bug_when>
    <thetext>I need to update bindings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659947</commentid>
    <comment_count>6</comment_count>
      <attachid>401253</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-06 06:05:59 -0700</bug_when>
    <thetext>Created attachment 401253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659956</commentid>
    <comment_count>7</comment_count>
      <attachid>401253</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-06 07:28:33 -0700</bug_when>
    <thetext>Comment on attachment 401253
Patch

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

r=me

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4341
&gt; +                    push(@implContent, &quot;        putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().&quot; . $attributeName . &quot;PublicName(), CustomGetterSetter::create(vm, $getter, $setter), attributesForStructure($jscAttributes));\n&quot;);

Can you also add a bindings test case for this?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4467
&gt; +        if (IsAcceleratedDOMAttribute($interface, $attribute)) {

Can you add bindings test for these 2 cases as well?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4487
&gt; +        if (IsAcceleratedDOMAttribute($interface, $attribute)) {

Is it possible to add a bindings test for these 2 cases of PrivateName DOMAttributeGetterSetter and CustomGetterSetter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660022</commentid>
    <comment_count>8</comment_count>
      <attachid>401253</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-06 19:14:21 -0700</bug_when>
    <thetext>Comment on attachment 401253
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4341
&gt;&gt; +                    push(@implContent, &quot;        putDirectCustomAccessor(vm, static_cast&lt;JSVMClientData*&gt;(vm.clientData)-&gt;builtinNames().&quot; . $attributeName . &quot;PublicName(), CustomGetterSetter::create(vm, $getter, $setter), attributesForStructure($jscAttributes));\n&quot;);
&gt; 
&gt; Can you also add a bindings test case for this?

Added.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4467
&gt;&gt; +        if (IsAcceleratedDOMAttribute($interface, $attribute)) {
&gt; 
&gt; Can you add bindings test for these 2 cases as well?

It turned out that this never happens. I&apos;ve added assertion.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4487
&gt;&gt; +        if (IsAcceleratedDOMAttribute($interface, $attribute)) {
&gt; 
&gt; Is it possible to add a bindings test for these 2 cases of PrivateName DOMAttributeGetterSetter and CustomGetterSetter?

It turned out that this never happens. I&apos;ve added assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660024</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-06 19:54:58 -0700</bug_when>
    <thetext>Committed r262693: &lt;https://trac.webkit.org/changeset/262693&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>400435</attachid>
            <date>2020-05-28 01:44:36 -0700</date>
            <delta_ts>2020-05-28 01:44:36 -0700</delta_ts>
            <desc>crash log</desc>
            <filename>com.apple.WebKit.WebContent_2020-05-28-104123_foolip-macbookpro.crash</filename>
            <type>text/plain</type>
            <size>122573</size>
            <attacher name="Philip Jägenstedt">philip</attacher>
            
              <data encoding="base64">UHJvY2VzczogICAgICAgICAgICAgICBjb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQgWzE3Nzk5
XQpQYXRoOiAgICAgICAgICAgICAgICAgIC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dlYktp
dC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9YUENTZXJ2aWNlcy9jb20uYXBwbGUuV2ViS2l0LldlYkNv
bnRlbnQueHBjL0NvbnRlbnRzL01hY09TL2NvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudApJZGVu
dGlmaWVyOiAgICAgICAgICAgIGNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudApWZXJzaW9uOiAg
ICAgICAgICAgICAgIDE1NjA5ICgxNTYwOS4yLjkuMS4yKQpCdWlsZCBJbmZvOiAgICAgICAgICAg
IFdlYktpdDItNzYwOTAwMjAwOTAwMTAwMn41CkNvZGUgVHlwZTogICAgICAgICAgICAgWDg2LTY0
IChOYXRpdmUpClBhcmVudCBQcm9jZXNzOiAgICAgICAgPz8/IFsxXQpSZXNwb25zaWJsZTogICAg
ICAgICAgIFNhZmFyaSBbMjM5N10KVXNlciBJRDogICAgICAgICAgICAgICAzOTAwNzQKCkRhdGUv
VGltZTogICAgICAgICAgICAgMjAyMC0wNS0yOCAxMDo0MToyMS42NjkgKzAyMDAKT1MgVmVyc2lv
bjogICAgICAgICAgICBNYWMgT1MgWCAxMC4xNS41ICgxOUY5NikKUmVwb3J0IFZlcnNpb246ICAg
ICAgICAxMgpCcmlkZ2UgT1MgVmVyc2lvbjogICAgIDQuNSAoMTdQNTI5MCkKQW5vbnltb3VzIFVV
SUQ6ICAgICAgICBGQzdCNjlDRS1BQzk1LUVFQjktRTc2RC1DNkExRUFDRDEzQkMKClNsZWVwL1dh
a2UgVVVJRDogICAgICAgNzRGRUVBN0UtMUFFNy00MzZBLUFBNTMtMUY1NTVBNjQ1Q0Y5CgpUaW1l
IEF3YWtlIFNpbmNlIEJvb3Q6IDYwMDAgc2Vjb25kcwpUaW1lIFNpbmNlIFdha2U6ICAgICAgIDUx
MDAgc2Vjb25kcwoKU3lzdGVtIEludGVncml0eSBQcm90ZWN0aW9uOiBlbmFibGVkCgpDcmFzaGVk
IFRocmVhZDogICAgICAgIDAgIERpc3BhdGNoIHF1ZXVlOiBjb20uYXBwbGUubWFpbi10aHJlYWQK
CkV4Y2VwdGlvbiBUeXBlOiAgICAgICAgRVhDX0JBRF9BQ0NFU1MgKFNJR1NFR1YpCkV4Y2VwdGlv
biBDb2RlczogICAgICAgRVhDX0kzODZfR1BGTFQKRXhjZXB0aW9uIE5vdGU6ICAgICAgICBFWENf
Q09SUFNFX05PVElGWQoKVGVybWluYXRpb24gU2lnbmFsOiAgICBTZWdtZW50YXRpb24gZmF1bHQ6
IDExClRlcm1pbmF0aW9uIFJlYXNvbjogICAgTmFtZXNwYWNlIFNJR05BTCwgQ29kZSAweGIKVGVy
bWluYXRpbmcgUHJvY2VzczogICBleGMgaGFuZGxlciBbMTc3OTldCgpBcHBsaWNhdGlvbiBTcGVj
aWZpYyBJbmZvcm1hdGlvbjoKZHlsZDMgbW9kZQpCdW5kbGUgY29udHJvbGxlciBjbGFzczoKQnJv
d3NlckJ1bmRsZUNvbnRyb2xsZXIKIAoKVGhyZWFkIDAgQ3Jhc2hlZDo6IERpc3BhdGNoIHF1ZXVl
OiBjb20uYXBwbGUubWFpbi10aHJlYWQKMCAgIGNvbS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAg
IAkweDAwMDA3ZmZmNDMzODAyNGMgSlNDOjpKU1ZhbHVlIFdlYkNvcmU6OndyYXA8V2ViQ29yZTo6
QW5pbWF0aW9uVGltZWxpbmU+KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBXZWJDb3JlOjpKU0RPTUds
b2JhbE9iamVjdCosIFdlYkNvcmU6OkFuaW1hdGlvblRpbWVsaW5lJikgKyAyNTIKMSAgIGNvbS5h
cHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzdjNmM4YTAgSlNDOjpKU09iamVj
dDo6Z2V0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlByb3BlcnR5TmFtZSkgY29uc3QgKyAx
NTY4CjIgICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3OGM5Yzhi
IG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nICsgMjk5CjMgICA/Pz8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAJMHgwMDAwMzFlMTBmNjU1ZjQwIDAgKyA1NDg0MjY5NTcwNDM4NAo0ICAg
Pz8/ICAgICAgICAgICAgICAgICAgICAgICAgICAgCTB4MDAwMDMxZTEwZjYwZTRhNSAwICsgNTQ4
NDI2OTU0MTA4NTMKNSAgID8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAwMDAzMWUx
MGY2NTdmMGUgMCArIDU0ODQyNjk1NzEyNTI2CjYgICA/Pz8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAJMHgwMDAwMzFlMTBmNjA0NWI3IDAgKyA1NDg0MjY5NTM3MDE2Nwo3ICAgPz8/ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCTB4MDAwMDMxZTEwZjY0ZDRhYSAwICsgNTQ4NDI2OTU2Njg5
MDYKOCAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzc0OWNjNmYg
dm1FbnRyeVRvSmF2YVNjcmlwdCArIDIwMAo5ICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAg
ICAgCTB4MDAwMDdmZmYzN2E5NjJmNSBKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU09iamVjdCosIEpTQzo6Q2FsbFR5cGUsIEpTQzo6Q2Fs
bERhdGEgY29uc3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6QXJnTGlzdCBjb25zdCYpICsgNTQ5CjEw
ICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3YzdhMGFkIEpTQzo6
Y2FsbChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkNhbGxUeXBlLCBK
U0M6OkNhbGxEYXRhIGNvbnN0JiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkFyZ0xpc3QgY29uc3QmKSAr
IDQ1CjExICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3ZDFlYmVj
IEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkNhbGxGcmFtZSopICsgNzMyCjEyICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJ
MHgwMDAwN2ZmZjM3NDljZDlhIHZtRW50cnlUb05hdGl2ZSArIDIxMAoxMyAgY29tLmFwcGxlLkph
dmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzN2E5NjM0MiBKU0M6OkludGVycHJldGVyOjpl
eGVjdXRlQ2FsbChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU09iamVjdCosIEpTQzo6Q2Fs
bFR5cGUsIEpTQzo6Q2FsbERhdGEgY29uc3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6QXJnTGlzdCBj
b25zdCYpICsgNjI2CjE0ICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2Zm
ZjM3YzdhMmNkIEpTQzo6cHJvZmlsZWRDYWxsKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlBy
b2ZpbGluZ1JlYXNvbiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkNhbGxUeXBlLCBKU0M6OkNhbGxEYXRh
IGNvbnN0JiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkFyZ0xpc3QgY29uc3QmLCBXVEY6Ok5ha2VkUHRy
PEpTQzo6RXhjZXB0aW9uPiYpICsgMTU3CjE1ICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAg
ICAJMHgwMDAwN2ZmZjQzM2I4YTU0IFdlYkNvcmU6OkpTRXhlY1N0YXRlOjpwcm9maWxlZENhbGwo
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6UHJvZmlsaW5nUmVhc29uLCBKU0M6OkpTVmFsdWUs
IEpTQzo6Q2FsbFR5cGUsIEpTQzo6Q2FsbERhdGEgY29uc3QmLCBKU0M6OkpTVmFsdWUsIEpTQzo6
QXJnTGlzdCBjb25zdCYsIFdURjo6TmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JikgKyAxMDAKMTYg
IGNvbS5hcHBsZS5XZWJDb3JlICAgICAgICAgICAgIAkweDAwMDA3ZmZmNDMzYjg4ZDIgV2ViQ29y
ZTo6U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6SlNWYWx1ZSwgV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYp
ICsgNTYyCjE3ICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAJMHgwMDAwN2ZmZjQzM2I4
NDc2IFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6ZXhlY3V0ZShXZWJDb3JlOjpEb2N1bWVudCYp
ICsgMTY2CjE4ICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAJMHgwMDAwN2ZmZjQyM2U3
ZGQ5IFdlYkNvcmU6OkRPTVRpbWVyOjpmaXJlZCgpICsgNzc3CjE5ICBjb20uYXBwbGUuV2ViQ29y
ZSAgICAgICAgICAgICAJMHgwMDAwN2ZmZjQzYzdjMzQzIFdURjo6RGV0YWlsOjpDYWxsYWJsZVdy
YXBwZXI8V2ViQ29yZTo6VGhyZWFkVGltZXJzOjpzZXRTaGFyZWRUaW1lcihXZWJDb3JlOjpTaGFy
ZWRUaW1lciopOjokXzcsIHZvaWQ+OjpjYWxsKCkgKyAyMjcKMjAgIGNvbS5hcHBsZS5XZWJDb3Jl
ICAgICAgICAgICAgIAkweDAwMDA3ZmZmNDIyZjFiYmYgV2ViQ29yZTo6dGltZXJGaXJlZChfX0NG
UnVuTG9vcFRpbWVyKiwgdm9pZCopICsgMzEKMjEgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAg
ICAgIAkweDAwMDA3ZmZmMzM4ZGM4ODkgX19DRlJVTkxPT1BfSVNfQ0FMTElOR19PVVRfVE9fQV9U
SU1FUl9DQUxMQkFDS19GVU5DVElPTl9fICsgMjAKMjIgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlv
biAgICAgIAkweDAwMDA3ZmZmMzM4ZGMzZWYgX19DRlJ1bkxvb3BEb1RpbWVyICsgODU5CjIzICBj
b20uYXBwbGUuQ29yZUZvdW5kYXRpb24gICAgICAJMHgwMDAwN2ZmZjMzOGRiZWQ3IF9fQ0ZSdW5M
b29wRG9UaW1lcnMgKyAzMjIKMjQgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAgICAgIAkweDAw
MDA3ZmZmMzM4YzBjN2EgX19DRlJ1bkxvb3BSdW4gKyAxODcxCjI1ICBjb20uYXBwbGUuQ29yZUZv
dW5kYXRpb24gICAgICAJMHgwMDAwN2ZmZjMzOGJmZWNlIENGUnVuTG9vcFJ1blNwZWNpZmljICsg
NDYyCjI2ICBjb20uYXBwbGUuRm91bmRhdGlvbiAgICAgICAgICAJMHgwMDAwN2ZmZjM1ZjU4MWM4
IC1bTlNSdW5Mb29wKE5TUnVuTG9vcCkgcnVuTW9kZTpiZWZvcmVEYXRlOl0gKyAyMTIKMjcgIGNv
bS5hcHBsZS5Gb3VuZGF0aW9uICAgICAgICAgIAkweDAwMDA3ZmZmMzYwMGFjNmYgLVtOU1J1bkxv
b3AoTlNSdW5Mb29wKSBydW5dICsgNzYKMjggIGxpYnhwYy5keWxpYiAgICAgICAgICAgICAgICAg
IAkweDAwMDA3ZmZmNmRiMGE1MWEgX3hwY19vYmpjX21haW4uY29sZC40ICsgNDkKMjkgIGxpYnhw
Yy5keWxpYiAgICAgICAgICAgICAgICAgIAkweDAwMDA3ZmZmNmRiMGE0NjAgX3hwY19vYmpjX21h
aW4gKyA1NTkKMzAgIGxpYnhwYy5keWxpYiAgICAgICAgICAgICAgICAgIAkweDAwMDA3ZmZmNmRi
MDlmOTMgeHBjX21haW4gKyAzNzcKMzEgIGNvbS5hcHBsZS5XZWJLaXQgICAgICAgICAgICAgIAkw
eDAwMDA3ZmZmNDQ5NDVmM2EgV2ViS2l0OjpYUENTZXJ2aWNlTWFpbihpbnQsIGNoYXIgY29uc3Qq
KikgKyA1MzkKMzIgIGxpYmR5bGQuZHlsaWIgICAgICAgICAgICAgICAgIAkweDAwMDA3ZmZmNmQ4
YmNjYzkgc3RhcnQgKyAxCgpUaHJlYWQgMToKMCAgIGxpYnN5c3RlbV9wdGhyZWFkLmR5bGliICAg
ICAgIAkweDAwMDA3ZmZmNmRhYmNiNjggc3RhcnRfd3F0aHJlYWQgKyAwCgpUaHJlYWQgMjoKMCAg
IGxpYnN5c3RlbV9wdGhyZWFkLmR5bGliICAgICAgIAkweDAwMDA3ZmZmNmRhYmNiNjggc3RhcnRf
d3F0aHJlYWQgKyAwCgpUaHJlYWQgMzo6IEphdmFTY3JpcHRDb3JlIGJtYWxsb2Mgc2NhdmVuZ2Vy
CjAgICBsaWJzeXN0ZW1fa2VybmVsLmR5bGliICAgICAgICAJMHgwMDAwN2ZmZjZkYTAwODgyIF9f
cHN5bmNoX2N2d2FpdCArIDEwCjEgICBsaWJzeXN0ZW1fcHRocmVhZC5keWxpYiAgICAgICAJMHgw
MDAwN2ZmZjZkYWMxNDI1IF9wdGhyZWFkX2NvbmRfd2FpdCArIDY5OAoyICAgbGliYysrLjEuZHls
aWIgICAgICAgICAgICAgICAgCTB4MDAwMDdmZmY2YWI5MDYyMyBzdGQ6Ol9fMTo6Y29uZGl0aW9u
X3ZhcmlhYmxlOjpfX2RvX3RpbWVkX3dhaXQoc3RkOjpfXzE6OnVuaXF1ZV9sb2NrPHN0ZDo6X18x
OjptdXRleD4mLCBzdGQ6Ol9fMTo6Y2hyb25vOjp0aW1lX3BvaW50PHN0ZDo6X18xOjpjaHJvbm86
OnN5c3RlbV9jbG9jaywgc3RkOjpfXzE6OmNocm9ubzo6ZHVyYXRpb248bG9uZyBsb25nLCBzdGQ6
Ol9fMTo6cmF0aW88MWwsIDEwMDAwMDAwMDBsPiA+ID4pICsgOTMKMyAgIGNvbS5hcHBsZS5KYXZh
U2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzgwYzBiZTUgYm1hbGxvYzo6U2NhdmVuZ2VyOjp0
aHJlYWRSdW5Mb29wKCkgKyA3NDEKNCAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgIAkw
eDAwMDA3ZmZmMzgwYzA1ZjkgYm1hbGxvYzo6U2NhdmVuZ2VyOjp0aHJlYWRFbnRyeVBvaW50KGJt
YWxsb2M6OlNjYXZlbmdlciopICsgOQo1ICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAg
CTB4MDAwMDdmZmYzODBjMmNkNyB2b2lkKiBzdGQ6Ol9fMTo6X190aHJlYWRfcHJveHk8c3RkOjpf
XzE6OnR1cGxlPHN0ZDo6X18xOjp1bmlxdWVfcHRyPHN0ZDo6X18xOjpfX3RocmVhZF9zdHJ1Y3Qs
IHN0ZDo6X18xOjpkZWZhdWx0X2RlbGV0ZTxzdGQ6Ol9fMTo6X190aHJlYWRfc3RydWN0PiA+LCB2
b2lkICgqKShibWFsbG9jOjpTY2F2ZW5nZXIqKSwgYm1hbGxvYzo6U2NhdmVuZ2VyKj4gPih2b2lk
KikgKyAzOQo2ICAgbGlic3lzdGVtX3B0aHJlYWQuZHlsaWIgICAgICAgCTB4MDAwMDdmZmY2ZGFj
MTEwOSBfcHRocmVhZF9zdGFydCArIDE0OAo3ICAgbGlic3lzdGVtX3B0aHJlYWQuZHlsaWIgICAg
ICAgCTB4MDAwMDdmZmY2ZGFiY2I4YiB0aHJlYWRfc3RhcnQgKyAxNQoKVGhyZWFkIDQ6CjAgICBs
aWJzeXN0ZW1fcHRocmVhZC5keWxpYiAgICAgICAJMHgwMDAwN2ZmZjZkYWJjYjY4IHN0YXJ0X3dx
dGhyZWFkICsgMAoKVGhyZWFkIDU6CjAgICBsaWJzeXN0ZW1fcHRocmVhZC5keWxpYiAgICAgICAJ
MHgwMDAwN2ZmZjZkYWJjYjY4IHN0YXJ0X3dxdGhyZWFkICsgMAoKVGhyZWFkIDY6OiBXZWJDb3Jl
OiBTY3JvbGxpbmcKMCAgIGxpYnN5c3RlbV9rZXJuZWwuZHlsaWIgICAgICAgIAkweDAwMDA3ZmZm
NmQ5ZmRkZmEgbWFjaF9tc2dfdHJhcCArIDEwCjEgICBsaWJzeXN0ZW1fa2VybmVsLmR5bGliICAg
ICAgICAJMHgwMDAwN2ZmZjZkOWZlMTcwIG1hY2hfbXNnICsgNjAKMiAgIGNvbS5hcHBsZS5Db3Jl
Rm91bmRhdGlvbiAgICAgIAkweDAwMDA3ZmZmMzM4YzFmODUgX19DRlJ1bkxvb3BTZXJ2aWNlTWFj
aFBvcnQgKyAyNDcKMyAgIGNvbS5hcHBsZS5Db3JlRm91bmRhdGlvbiAgICAgIAkweDAwMDA3ZmZm
MzM4YzBhNTIgX19DRlJ1bkxvb3BSdW4gKyAxMzE5CjQgICBjb20uYXBwbGUuQ29yZUZvdW5kYXRp
b24gICAgICAJMHgwMDAwN2ZmZjMzOGJmZWNlIENGUnVuTG9vcFJ1blNwZWNpZmljICsgNDYyCjUg
ICBjb20uYXBwbGUuQ29yZUZvdW5kYXRpb24gICAgICAJMHgwMDAwN2ZmZjMzOTQ4NTE5IENGUnVu
TG9vcFJ1biArIDQwCjYgICBjb20uYXBwbGUuV2ViQ29yZSAgICAgICAgICAgICAJMHgwMDAwN2Zm
ZjQyMzJlOTljIFdlYkNvcmU6OlNjcm9sbGluZ1RocmVhZDo6aW5pdGlhbGl6ZVJ1bkxvb3AoKSAr
IDI1Mgo3ICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzODA2OGU0
ZiBXVEY6OlRocmVhZDo6ZW50cnlQb2ludChXVEY6OlRocmVhZDo6TmV3VGhyZWFkQ29udGV4dCop
ICsgMjIzCjggICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3MTM1
ZGY5IFdURjo6d3RmVGhyZWFkRW50cnlQb2ludCh2b2lkKikgKyA5CjkgICBsaWJzeXN0ZW1fcHRo
cmVhZC5keWxpYiAgICAgICAJMHgwMDAwN2ZmZjZkYWMxMTA5IF9wdGhyZWFkX3N0YXJ0ICsgMTQ4
CjEwICBsaWJzeXN0ZW1fcHRocmVhZC5keWxpYiAgICAgICAJMHgwMDAwN2ZmZjZkYWJjYjhiIHRo
cmVhZF9zdGFydCArIDE1CgpUaHJlYWQgNzoKMCAgIGxpYnN5c3RlbV9wdGhyZWFkLmR5bGliICAg
ICAgIAkweDAwMDA3ZmZmNmRhYmNiNjggc3RhcnRfd3F0aHJlYWQgKyAwCgpUaHJlYWQgODo6IEpJ
VCBXb3JrbGlzdCBIZWxwZXIgVGhyZWFkCjAgICBsaWJzeXN0ZW1fa2VybmVsLmR5bGliICAgICAg
ICAJMHgwMDAwN2ZmZjZkYTAwODgyIF9fcHN5bmNoX2N2d2FpdCArIDEwCjEgICBsaWJzeXN0ZW1f
cHRocmVhZC5keWxpYiAgICAgICAJMHgwMDAwN2ZmZjZkYWMxNDI1IF9wdGhyZWFkX2NvbmRfd2Fp
dCArIDY5OAoyICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzODA0
ZTU2NiBXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5SW1wbCh2b2lkIGNvbnN0Kiwg
V1RGOjpTY29wZWRMYW1iZGE8Ym9vbCAoKT4gY29uc3QmLCBXVEY6OlNjb3BlZExhbWJkYTx2b2lk
ICgpPiBjb25zdCYsIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGNvbnN0JikgKyAzNzAy
CjMgICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3OTg5YTQ1IGJv
b2wgV1RGOjpDb25kaXRpb246OndhaXRVbnRpbDxXVEY6OkxvY2s+KFdURjo6TG9jayYsIFdURjo6
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGNvbnN0JikgKyAxNjUKNCAgIGNvbS5hcHBsZS5KYXZh
U2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzgwMjM3Y2EgV1RGOjpEZXRhaWw6OkNhbGxhYmxl
V3JhcHBlcjxXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQoV1RGOjpBYnN0cmFjdExvY2tlciBj
b25zdCYpOjokXzAsIHZvaWQ+OjpjYWxsKCkgKyAzMTQKNSAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0
Q29yZSAgICAgIAkweDAwMDA3ZmZmMzgwNjhlNGYgV1RGOjpUaHJlYWQ6OmVudHJ5UG9pbnQoV1RG
OjpUaHJlYWQ6Ok5ld1RocmVhZENvbnRleHQqKSArIDIyMwo2ICAgY29tLmFwcGxlLkphdmFTY3Jp
cHRDb3JlICAgICAgCTB4MDAwMDdmZmYzNzEzNWRmOSBXVEY6Ond0ZlRocmVhZEVudHJ5UG9pbnQo
dm9pZCopICsgOQo3ICAgbGlic3lzdGVtX3B0aHJlYWQuZHlsaWIgICAgICAgCTB4MDAwMDdmZmY2
ZGFjMTEwOSBfcHRocmVhZF9zdGFydCArIDE0OAo4ICAgbGlic3lzdGVtX3B0aHJlYWQuZHlsaWIg
ICAgICAgCTB4MDAwMDdmZmY2ZGFiY2I4YiB0aHJlYWRfc3RhcnQgKyAxNQoKVGhyZWFkIDk6OiBE
RkcgV29ya2xpc3QgV29ya2VyIFRocmVhZAowICAgbGlic3lzdGVtX2tlcm5lbC5keWxpYiAgICAg
ICAgCTB4MDAwMDdmZmY2ZGEwMDg4MiBfX3BzeW5jaF9jdndhaXQgKyAxMAoxICAgbGlic3lzdGVt
X3B0aHJlYWQuZHlsaWIgICAgICAgCTB4MDAwMDdmZmY2ZGFjMTQyNSBfcHRocmVhZF9jb25kX3dh
aXQgKyA2OTgKMiAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzgw
NGU1NjYgV1RGOjpQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseUltcGwodm9pZCBjb25zdCos
IFdURjo6U2NvcGVkTGFtYmRhPGJvb2wgKCk+IGNvbnN0JiwgV1RGOjpTY29wZWRMYW1iZGE8dm9p
ZCAoKT4gY29uc3QmLCBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBjb25zdCYpICsgMzcw
MgozICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzNzk4OWE0NSBi
b29sIFdURjo6Q29uZGl0aW9uOjp3YWl0VW50aWw8V1RGOjpMb2NrPihXVEY6OkxvY2smLCBXVEY6
OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBjb25zdCYpICsgMTY1CjQgICBjb20uYXBwbGUuSmF2
YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM4MDIzN2NhIFdURjo6RGV0YWlsOjpDYWxsYWJs
ZVdyYXBwZXI8V1RGOjpBdXRvbWF0aWNUaHJlYWQ6OnN0YXJ0KFdURjo6QWJzdHJhY3RMb2NrZXIg
Y29uc3QmKTo6JF8wLCB2b2lkPjo6Y2FsbCgpICsgMzE0CjUgICBjb20uYXBwbGUuSmF2YVNjcmlw
dENvcmUgICAgICAJMHgwMDAwN2ZmZjM4MDY4ZTRmIFdURjo6VGhyZWFkOjplbnRyeVBvaW50KFdU
Rjo6VGhyZWFkOjpOZXdUaHJlYWRDb250ZXh0KikgKyAyMjMKNiAgIGNvbS5hcHBsZS5KYXZhU2Ny
aXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzcxMzVkZjkgV1RGOjp3dGZUaHJlYWRFbnRyeVBvaW50
KHZvaWQqKSArIDkKNyAgIGxpYnN5c3RlbV9wdGhyZWFkLmR5bGliICAgICAgIAkweDAwMDA3ZmZm
NmRhYzExMDkgX3B0aHJlYWRfc3RhcnQgKyAxNDgKOCAgIGxpYnN5c3RlbV9wdGhyZWFkLmR5bGli
ICAgICAgIAkweDAwMDA3ZmZmNmRhYmNiOGIgdGhyZWFkX3N0YXJ0ICsgMTUKClRocmVhZCAxMDo6
IERGRyBXb3JrbGlzdCBXb3JrZXIgVGhyZWFkCjAgICBsaWJzeXN0ZW1fa2VybmVsLmR5bGliICAg
ICAgICAJMHgwMDAwN2ZmZjZkYTAwODgyIF9fcHN5bmNoX2N2d2FpdCArIDEwCjEgICBsaWJzeXN0
ZW1fcHRocmVhZC5keWxpYiAgICAgICAJMHgwMDAwN2ZmZjZkYWMxNDI1IF9wdGhyZWFkX2NvbmRf
d2FpdCArIDY5OAoyICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYz
ODA0ZTU2NiBXVEY6OlBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5SW1wbCh2b2lkIGNvbnN0
KiwgV1RGOjpTY29wZWRMYW1iZGE8Ym9vbCAoKT4gY29uc3QmLCBXVEY6OlNjb3BlZExhbWJkYTx2
b2lkICgpPiBjb25zdCYsIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGNvbnN0JikgKyAz
NzAyCjMgICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3OTg5YTQ1
IGJvb2wgV1RGOjpDb25kaXRpb246OndhaXRVbnRpbDxXVEY6OkxvY2s+KFdURjo6TG9jayYsIFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlIGNvbnN0JikgKyAxNjUKNCAgIGNvbS5hcHBsZS5K
YXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzgwMjM3Y2EgV1RGOjpEZXRhaWw6OkNhbGxh
YmxlV3JhcHBlcjxXVEY6OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQoV1RGOjpBYnN0cmFjdExvY2tl
ciBjb25zdCYpOjokXzAsIHZvaWQ+OjpjYWxsKCkgKyAzMTQKNSAgIGNvbS5hcHBsZS5KYXZhU2Ny
aXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzgwNjhlNGYgV1RGOjpUaHJlYWQ6OmVudHJ5UG9pbnQo
V1RGOjpUaHJlYWQ6Ok5ld1RocmVhZENvbnRleHQqKSArIDIyMwo2ICAgY29tLmFwcGxlLkphdmFT
Y3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzNzEzNWRmOSBXVEY6Ond0ZlRocmVhZEVudHJ5UG9p
bnQodm9pZCopICsgOQo3ICAgbGlic3lzdGVtX3B0aHJlYWQuZHlsaWIgICAgICAgCTB4MDAwMDdm
ZmY2ZGFjMTEwOSBfcHRocmVhZF9zdGFydCArIDE0OAo4ICAgbGlic3lzdGVtX3B0aHJlYWQuZHls
aWIgICAgICAgCTB4MDAwMDdmZmY2ZGFiY2I4YiB0aHJlYWRfc3RhcnQgKyAxNQoKVGhyZWFkIDEx
OjogRlRMIFdvcmtsaXN0IFdvcmtlciBUaHJlYWQKMCAgIGxpYnN5c3RlbV9rZXJuZWwuZHlsaWIg
ICAgICAgIAkweDAwMDA3ZmZmNmRhMDA4ODIgX19wc3luY2hfY3Z3YWl0ICsgMTAKMSAgIGxpYnN5
c3RlbV9wdGhyZWFkLmR5bGliICAgICAgIAkweDAwMDA3ZmZmNmRhYzE0MjUgX3B0aHJlYWRfY29u
ZF93YWl0ICsgNjk4CjIgICBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2Zm
ZjM4MDRlNTY2IFdURjo6UGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHlJbXBsKHZvaWQgY29u
c3QqLCBXVEY6OlNjb3BlZExhbWJkYTxib29sICgpPiBjb25zdCYsIFdURjo6U2NvcGVkTGFtYmRh
PHZvaWQgKCk+IGNvbnN0JiwgV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgY29uc3QmKSAr
IDM3MDIKMyAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzc5ODlh
NDUgYm9vbCBXVEY6OkNvbmRpdGlvbjo6d2FpdFVudGlsPFdURjo6TG9jaz4oV1RGOjpMb2NrJiwg
V1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUgY29uc3QmKSArIDE2NQo0ICAgY29tLmFwcGxl
LkphdmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzODAyMzdjYSBXVEY6OkRldGFpbDo6Q2Fs
bGFibGVXcmFwcGVyPFdURjo6QXV0b21hdGljVGhyZWFkOjpzdGFydChXVEY6OkFic3RyYWN0TG9j
a2VyIGNvbnN0Jik6OiRfMCwgdm9pZD46OmNhbGwoKSArIDMxNAo1ICAgY29tLmFwcGxlLkphdmFT
Y3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzODA2OGU0ZiBXVEY6OlRocmVhZDo6ZW50cnlQb2lu
dChXVEY6OlRocmVhZDo6TmV3VGhyZWFkQ29udGV4dCopICsgMjIzCjYgICBjb20uYXBwbGUuSmF2
YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM3MTM1ZGY5IFdURjo6d3RmVGhyZWFkRW50cnlQ
b2ludCh2b2lkKikgKyA5CjcgICBsaWJzeXN0ZW1fcHRocmVhZC5keWxpYiAgICAgICAJMHgwMDAw
N2ZmZjZkYWMxMTA5IF9wdGhyZWFkX3N0YXJ0ICsgMTQ4CjggICBsaWJzeXN0ZW1fcHRocmVhZC5k
eWxpYiAgICAgICAJMHgwMDAwN2ZmZjZkYWJjYjhiIHRocmVhZF9zdGFydCArIDE1CgpUaHJlYWQg
MTI6OiBGVEwgV29ya2xpc3QgV29ya2VyIFRocmVhZAowICAgbGlic3lzdGVtX2tlcm5lbC5keWxp
YiAgICAgICAgCTB4MDAwMDdmZmY2ZGEwMDg4MiBfX3BzeW5jaF9jdndhaXQgKyAxMAoxICAgbGli
c3lzdGVtX3B0aHJlYWQuZHlsaWIgICAgICAgCTB4MDAwMDdmZmY2ZGFjMTQyNSBfcHRocmVhZF9j
b25kX3dhaXQgKyA2OTgKMiAgIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3
ZmZmMzgwNGU1NjYgV1RGOjpQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseUltcGwodm9pZCBj
b25zdCosIFdURjo6U2NvcGVkTGFtYmRhPGJvb2wgKCk+IGNvbnN0JiwgV1RGOjpTY29wZWRMYW1i
ZGE8dm9pZCAoKT4gY29uc3QmLCBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBjb25zdCYp
ICsgMzcwMgozICAgY29tLmFwcGxlLkphdmFTY3JpcHRDb3JlICAgICAgCTB4MDAwMDdmZmYzNzk4
OWE0NSBib29sIFdURjo6Q29uZGl0aW9uOjp3YWl0VW50aWw8V1RGOjpMb2NrPihXVEY6OkxvY2sm
LCBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSBjb25zdCYpICsgMTY1CjQgICBjb20uYXBw
bGUuSmF2YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM4MDIzN2NhIFdURjo6RGV0YWlsOjpD
YWxsYWJsZVdyYXBwZXI8V1RGOjpBdXRvbWF0aWNUaHJlYWQ6OnN0YXJ0KFdURjo6QWJzdHJhY3RM
b2NrZXIgY29uc3QmKTo6JF8wLCB2b2lkPjo6Y2FsbCgpICsgMzE0CjUgICBjb20uYXBwbGUuSmF2
YVNjcmlwdENvcmUgICAgICAJMHgwMDAwN2ZmZjM4MDY4ZTRmIFdURjo6VGhyZWFkOjplbnRyeVBv
aW50KFdURjo6VGhyZWFkOjpOZXdUaHJlYWRDb250ZXh0KikgKyAyMjMKNiAgIGNvbS5hcHBsZS5K
YXZhU2NyaXB0Q29yZSAgICAgIAkweDAwMDA3ZmZmMzcxMzVkZjkgV1RGOjp3dGZUaHJlYWRFbnRy
eVBvaW50KHZvaWQqKSArIDkKNyAgIGxpYnN5c3RlbV9wdGhyZWFkLmR5bGliICAgICAgIAkweDAw
MDA3ZmZmNmRhYzExMDkgX3B0aHJlYWRfc3RhcnQgKyAxNDgKOCAgIGxpYnN5c3RlbV9wdGhyZWFk
LmR5bGliICAgICAgIAkweDAwMDA3ZmZmNmRhYmNiOGIgdGhyZWFkX3N0YXJ0ICsgMTUKClRocmVh
ZCAwIGNyYXNoZWQgd2l0aCBYODYgVGhyZWFkIFN0YXRlICg2NC1iaXQpOgogIHJheDogMHgwMDAw
MDAwMjljN2U4ZGUwICByYng6IDB4MDAwMDAwMDAwMDAwMDAwMCAgcmN4OiAweDAwMDAwMDAwMDAw
MDAwMGYgIHJkeDogMHgwMDAwMDAwMDAwMDAwMDBkCiAgcmRpOiAweDAwMDAwMDAwZDM0MDAwYjcg
IHJzaTogMHgwMDAwMDAwMDAwMDAwMDAwICByYnA6IDB4MDAwMDdmZmVlN2U0ZjAyMCAgcnNwOiAw
eDAwMDA3ZmZlZTdlNGVmYzAKICAgcjg6IDB4MDAwMDAwMDI5YWUwOTAwMCAgIHI5OiAweDAwMDAw
MDAyOTljNzNhMDAgIHIxMDogMHgwMDAwMDAwMjk5ZWYxODY4ICByMTE6IDB4MDAwMDdmZmYzNzhj
OWI2MAogIHIxMjogMHhmZmZmMDAwMDAwMDAwMDAwICByMTM6IDB4MDAwMDAwMDI5YWUwOTAwMCAg
cjE0OiAweDAwMDAwMDAyOTllZjE4NjggIHIxNTogMHgwMDAwMDAwMjk5ZmY3MDMwCiAgcmlwOiAw
eDAwMDA3ZmZmNDMzODAyNGMgIHJmbDogMHgwMDAwMDAwMDAwMDEwMjQ2ICBjcjI6IDB4MDAwMDAw
MTgwNmRhODAwMAogIApMb2dpY2FsIENQVTogICAgIDQKRXJyb3IgQ29kZTogICAgICAweDAwMDAw
MDAwClRyYXAgTnVtYmVyOiAgICAgMTMKCgpCaW5hcnkgSW1hZ2VzOgogICAgICAgMHgxMDdkYWUw
MDAgLSAgICAgICAgMHgxMDdkYWVmZmYgIGNvbS5hcHBsZS5XZWJLaXQuV2ViQ29udGVudCAoMTU2
MDkgLSAxNTYwOS4yLjkuMS4yKSA8MjNFOTZDQzItNDlDRS0zODgzLTk4RTItQ0M4QUQ4NzY4QTE3
PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
WFBDU2VydmljZXMvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50LnhwYy9Db250ZW50cy9NYWNP
Uy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQKICAgICAgIDB4MTA4M2JhMDAwIC0gICAgICAg
IDB4MTA4NDRiZWZmICBkeWxkICg3NTAuNSkgPDI2MzQ2RjRDLUIxOEUtMzFBMS05OTY0LTMwNzM2
MjE0RjFCRj4gL3Vzci9saWIvZHlsZAogICAgICAgMHgyOWFkOGMwMDAgLSAgICAgICAgMHgyOWFk
OGYwNDcgIGxpYm9iamMtdHJhbXBvbGluZXMuZHlsaWIgKDc4Ny4xKSA8ODIxMkIzNTQtQTEwNi0z
ODA2LUEwMjItQTYwRjJCMkZBNUM5PiAvdXNyL2xpYi9saWJvYmpjLXRyYW1wb2xpbmVzLmR5bGli
CiAgICAweDdmZmYyNmQxZDAwMCAtICAgICAweDdmZmYyNmY5ZGZmMiAgY29tLmFwcGxlLkFNRFJh
ZGVvblg1MDAwTVRMRHJpdmVyICgzLjkuMTUgLSAzLjAuOSkgPDRBRkVGNDI2LTI2NTQtM0IzRi04
QzMyLUU3RjkzRUM3MkYwMT4gL1N5c3RlbS9MaWJyYXJ5L0V4dGVuc2lvbnMvQU1EUmFkZW9uWDUw
MDBNVExEcml2ZXIuYnVuZGxlL0NvbnRlbnRzL01hY09TL0FNRFJhZGVvblg1MDAwTVRMRHJpdmVy
CiAgICAweDdmZmYyYzI0MjAwMCAtICAgICAweDdmZmYyYzY0MWZmMSAgY29tLmFwcGxlLmRyaXZl
ci5BcHBsZUludGVsS0JMR3JhcGhpY3NNVExEcml2ZXIgKDE0LjYuMTggLSAxNC4wLjYpIDxFQjEz
RjY5Qy03MTM4LTMyNTMtQjk3RC1DQzA5OTlCRjYzQzI+IC9TeXN0ZW0vTGlicmFyeS9FeHRlbnNp
b25zL0FwcGxlSW50ZWxLQkxHcmFwaGljc01UTERyaXZlci5idW5kbGUvQ29udGVudHMvTWFjT1Mv
QXBwbGVJbnRlbEtCTEdyYXBoaWNzTVRMRHJpdmVyCiAgICAweDdmZmYyZjBlMTAwMCAtICAgICAw
eDdmZmYyZjJkY2ZmYiAgY29tLmFwcGxlLmF2Zm91bmRhdGlvbiAoMi4wIC0gMTg1MC4yKSA8NDgy
MEYxNjUtNUUyMC0zMTIwLTkxM0QtQzA0N0ZEQjY4MzkyPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9BVkZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQVZGb3VuZGF0aW9uCiAgICAw
eDdmZmYyZjJkZDAwMCAtICAgICAweDdmZmYyZjNhOWZmZSAgY29tLmFwcGxlLmF1ZGlvLkFWRkF1
ZGlvICgxLjAgLSA0MTUuNzIpIDxDMEZFNjkyNi1GOEU2LTMzOUEtOUQxMS1DNkUzQkVFNjg4QkY+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FWRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9GcmFtZXdvcmtzL0FWRkF1ZGlvLmZyYW1ld29yay9WZXJzaW9ucy9BL0FWRkF1ZGlvCiAg
ICAweDdmZmYyZjNhYjAwMCAtICAgICAweDdmZmYyZjRjOGZmNiAgY29tLmFwcGxlLkFWS2l0ICgx
LjEgLSA2MDAuMikgPDk3NjRCQjE1LTgxRTAtMzJGRC05REM0LUYyMjE4OEI4RkUyOT4gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvQVZLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQVZLaXQKICAg
IDB4N2ZmZjJmNGM5MDAwIC0gICAgIDB4N2ZmZjJmNGM5ZmZmICBjb20uYXBwbGUuQWNjZWxlcmF0
ZSAoMS4xMSAtIEFjY2VsZXJhdGUgMS4xMSkgPDU2REZGNzE1LTZBNEUtMzIzMS1CRENDLUEzNDhC
Q0IwNTA0Nz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9BY2NlbGVyYXRlCiAgICAweDdmZmYyZjRjYTAwMCAtICAgICAweDdmZmYyZjRl
MGZlZiAgbGliQ0dJbnRlcmZhY2VzLmR5bGliICg1MjQuMi4xKSA8QTQyM0Y5MzItQzA0NC0zQ0VC
LUJGMjAtQkY0Q0IzMjMzNjFFPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRl
LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvdkltYWdlLmZyYW1ld29yay9WZXJzaW9u
cy9BL0xpYnJhcmllcy9saWJDR0ludGVyZmFjZXMuZHlsaWIKICAgIDB4N2ZmZjJmNGUxMDAwIC0g
ICAgIDB4N2ZmZjJmYjM3ZmZmICBjb20uYXBwbGUudkltYWdlICg4LjEgLSA1MjQuMi4xKSA8MTdD
OTNBQjktMTYyNS0zRkRCLTk4NTEtQzVFNzdCQkUzNDI4PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvdkltYWdlLmZy
YW1ld29yay9WZXJzaW9ucy9BL3ZJbWFnZQogICAgMHg3ZmZmMmZiMzgwMDAgLSAgICAgMHg3ZmZm
MmZkOWZmZjcgIGxpYkJMQVMuZHlsaWIgKDEzMDMuNjAuMSkgPENCQzI4QkU0LTNDNzgtM0FFRC05
NTY1LTBENjI1MjUxRDEyMT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL3ZlY0xpYi5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9saWJCTEFTLmR5bGliCiAgICAweDdmZmYyZmRhMDAwMCAtICAgICAweDdmZmYzMDI3M2ZlZiAg
bGliQk5OUy5keWxpYiAoMTQ0LjEwMC4yKSA8OEQ2NTM2NzgtMUY5Qi0zNjcwLUFBRTItNDZERkI4
RDM3NjQzPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yay9W
ZXJzaW9ucy9BL0ZyYW1ld29ya3MvdmVjTGliLmZyYW1ld29yay9WZXJzaW9ucy9BL2xpYkJOTlMu
ZHlsaWIKICAgIDB4N2ZmZjMwMjc0MDAwIC0gICAgIDB4N2ZmZjMwNjBmZmZmICBsaWJMQVBBQ0su
ZHlsaWIgKDEzMDMuNjAuMSkgPEY4RTlEMDgxLTdDNjAtMzJFQy1BNDdELTJEMzBDQUQ3M0M1Rj4g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9GcmFtZXdvcmtzL3ZlY0xpYi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9saWJMQVBBQ0suZHlsaWIK
ICAgIDB4N2ZmZjMwNjEwMDAwIC0gICAgIDB4N2ZmZjMwNjI1ZmVjICBsaWJMaW5lYXJBbGdlYnJh
LmR5bGliICgxMzAzLjYwLjEpIDxEMkMxQUNFQS0yQjZBLTMzOUEtOUVFQi02MkE3NkNDOTJDQkU+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvRnJhbWV3b3Jrcy92ZWNMaWIuZnJhbWV3b3JrL1ZlcnNpb25zL0EvbGliTGluZWFyQWxnZWJy
YS5keWxpYgogICAgMHg3ZmZmMzA2MjYwMDAgLSAgICAgMHg3ZmZmMzA2MmJmZjMgIGxpYlF1YWRy
YXR1cmUuZHlsaWIgKDcpIDwzMTEyQzk3Ny04MzA2LTMxOTAtODMxMy0wMUE5NTJCN0YzQ0Y+IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
RnJhbWV3b3Jrcy92ZWNMaWIuZnJhbWV3b3JrL1ZlcnNpb25zL0EvbGliUXVhZHJhdHVyZS5keWxp
YgogICAgMHg3ZmZmMzA2MmMwMDAgLSAgICAgMHg3ZmZmMzA2OWNmZmYgIGxpYlNwYXJzZS5keWxp
YiAoMTAzKSA8NDA1MTBCRjktOTlBNy0zMTU1LUE4MUQtNkRFNUEwQzczRURDPiAvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29y
a3MvdmVjTGliLmZyYW1ld29yay9WZXJzaW9ucy9BL2xpYlNwYXJzZS5keWxpYgogICAgMHg3ZmZm
MzA2OWQwMDAgLSAgICAgMHg3ZmZmMzA2YWZmZWYgIGxpYlNwYXJzZUJMQVMuZHlsaWIgKDEzMDMu
NjAuMSkgPDNDMTA2NkFCLTIwRDUtMzhEMi1CMUYyLTcwQTAzREU3NkQwQj4gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQWNjZWxlcmF0ZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtz
L3ZlY0xpYi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9saWJTcGFyc2VCTEFTLmR5bGliCiAgICAweDdm
ZmYzMDZiMDAwMCAtICAgICAweDdmZmYzMDg4N2ZkNyAgbGlidkRTUC5keWxpYiAoNzM1LjEyMS4x
KSA8NzQ3MDJFMkUtRUQwNS0zNzY1LUIxOEMtNjRCRUZGNjJCNTE3PiAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvdmVj
TGliLmZyYW1ld29yay9WZXJzaW9ucy9BL2xpYnZEU1AuZHlsaWIKICAgIDB4N2ZmZjMwODg4MDAw
IC0gICAgIDB4N2ZmZjMwOTRhZmVmICBsaWJ2TWlzYy5keWxpYiAoNzM1LjEyMS4xKSA8MTM3NTU4
QkYtNTAzRC0zQTZFLTk2REMtQTE4MUUzRkIzMUZGPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9BY2NlbGVyYXRlLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvdmVjTGliLmZyYW1l
d29yay9WZXJzaW9ucy9BL2xpYnZNaXNjLmR5bGliCiAgICAweDdmZmYzMDk0YjAwMCAtICAgICAw
eDdmZmYzMDk0YmZmZiAgY29tLmFwcGxlLkFjY2VsZXJhdGUudmVjTGliICgzLjExIC0gdmVjTGli
IDMuMTEpIDxEN0U4RTQwMC0zNUM4LTMxNzQtOTk1Ni04RDFCNDgzNjIwREE+IC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0FjY2VsZXJhdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jr
cy92ZWNMaWIuZnJhbWV3b3JrL1ZlcnNpb25zL0EvdmVjTGliCiAgICAweDdmZmYzMDk0YzAwMCAt
ICAgICAweDdmZmYzMDlhYmZmMCAgY29tLmFwcGxlLkFjY291bnRzICgxMTMgLSAxMTMpIDwwNTEw
Qzg5My1GMUYyLTM4QjItQjNBQS1BMzBEQjJGNUI2ODg+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL0FjY291bnRzLmZyYW1ld29yay9WZXJzaW9ucy9BL0FjY291bnRzCiAgICAweDdmZmYzMDlh
ZDAwMCAtICAgICAweDdmZmYzMGFmNGZmYiAgY29tLmFwcGxlLkFkZHJlc3NCb29rLmZyYW1ld29y
ayAoMTEuMCAtIDI0MjEuMjYpIDw0NzczNEFGMy1CRDY1LTNFRDUtQkM2NC02ODk0RDI1QTZCN0U+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FkZHJlc3NCb29rLmZyYW1ld29yay9WZXJzaW9u
cy9BL0FkZHJlc3NCb29rCiAgICAweDdmZmYzMGFmNTAwMCAtICAgICAweDdmZmYzMThiNWZmZCAg
Y29tLmFwcGxlLkFwcEtpdCAoNi45IC0gMTg5NC41MC4xMDMpIDw2MTI2OUI4Qy1DNDMyLTMzNUYt
ODg5NC1COTVDMjM1QTQxQTU+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcEtpdC5mcmFt
ZXdvcmsvVmVyc2lvbnMvQy9BcHBLaXQKICAgIDB4N2ZmZjMxOTA1MDAwIC0gICAgIDB4N2ZmZjMx
OTA1ZmZmICBjb20uYXBwbGUuQXBwbGljYXRpb25TZXJ2aWNlcyAoNDggLSA1MCkgPEVFQzczNjk0
LTFBMzctM0MxNC1BODM5LTY5OTFFMkJEODY1NT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
QXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9BcHBsaWNhdGlvblNlcnZp
Y2VzCiAgICAweDdmZmYzMTkwNjAwMCAtICAgICAweDdmZmYzMTk3MWZmZiAgY29tLmFwcGxlLkFw
cGxpY2F0aW9uU2VydmljZXMuQVRTICgzNzcgLSA0OTMuMC40LjEpIDxBNjkxMkM0QS01NUNDLTM3
MDEtQkFDQS1FNjM0MjNCOTk0ODE+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0
aW9uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9BVFMuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvQVRTCiAgICAweDdmZmYzMWEwYTAwMCAtICAgICAweDdmZmYzMWE0OGZmMCAg
bGliRm9udFJlZ2lzdHJ5LmR5bGliICgyNzQuMC41LjEpIDxBNzhBNzg2OS1DOTZDLTNBRDYtQTAz
OC1ERTU0MTYzOUJCNjA+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9BVFMuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvUmVzb3VyY2VzL2xpYkZvbnRSZWdpc3RyeS5keWxpYgogICAgMHg3ZmZmMzFhYTMwMDAg
LSAgICAgMHg3ZmZmMzFhZDJmZmYgIGNvbS5hcHBsZS5BVFNVSSAoMS4wIC0gMSkgPDRCM0MyMjAx
LURCQjMtMzUyQy05MzZCLTlDNDIzMTIyRUZGNj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
QXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0FUU1VJ
LmZyYW1ld29yay9WZXJzaW9ucy9BL0FUU1VJCiAgICAweDdmZmYzMWFkMzAwMCAtICAgICAweDdm
ZmYzMWFkN2ZmYiAgY29tLmFwcGxlLkNvbG9yU3luY0xlZ2FjeSAoNC4xMy4wIC0gMSkgPDQ3RDQy
Q0RFLTJFOUEtM0FGNi05MzY1LTFCRkQxMTg5MTk2Qj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0Nv
bG9yU3luY0xlZ2FjeS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db2xvclN5bmNMZWdhY3kKICAgIDB4
N2ZmZjMxYjcxMDAwIC0gICAgIDB4N2ZmZjMxYmM4ZmZhICBjb20uYXBwbGUuSElTZXJ2aWNlcyAo
MS4yMiAtIDY3NS4xKSA8MjczNDkyRTMtRkYwRi0zQThBLUE4M0YtMEYxMUY5OUI1RjI2PiAvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9WZXJz
aW9ucy9BL0ZyYW1ld29ya3MvSElTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9ISVNlcnZp
Y2VzCiAgICAweDdmZmYzMWJjOTAwMCAtICAgICAweDdmZmYzMWJkN2ZmZiAgY29tLmFwcGxlLkxh
bmdBbmFseXNpcyAoMS43LjAgLSAxLjcuMCkgPERBMTc1MzIzLTVCRTMtM0M1NC05MkQ0LUExNzFB
NEEwNjdFNj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0xhbmdBbmFseXNpcy5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9MYW5nQW5hbHlzaXMKICAgIDB4N2ZmZjMxYmQ4MDAwIC0gICAgIDB4N2ZmZjMxYzFk
ZmZhICBjb20uYXBwbGUucHJpbnQuZnJhbWV3b3JrLlByaW50Q29yZSAoMTUuNCAtIDUxNi4yKSA8
OTlBRUJDREItMkRDQS0zQTEzLTkwNkYtN0YwRDc5NjJCMDAyPiAvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29y
a3MvUHJpbnRDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL1ByaW50Q29yZQogICAgMHg3ZmZmMzFj
MWUwMDAgLSAgICAgMHg3ZmZmMzFjMjhmZjcgIGNvbS5hcHBsZS5RRCAoNC4wIC0gNDEzKSA8RDJF
MURDODAtRDI2Ri0zNTA4LUJCQTUtQjhBRTdFRDZDQjBFPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3Mv
UUQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUUQKICAgIDB4N2ZmZjMxYzI5MDAwIC0gICAgIDB4N2Zm
ZjMxYzM2ZmZjICBjb20uYXBwbGUuc3BlZWNoLnN5bnRoZXNpcy5mcmFtZXdvcmsgKDkuMC4yNCAt
IDkuMC4yNCkgPDgyM0MwREU3LTEzNTEtM0IzOS04RjA2LUFCNUZDQUQyQzg3ND4gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9GcmFtZXdvcmtzL1NwZWVjaFN5bnRoZXNpcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TcGVlY2hT
eW50aGVzaXMKICAgIDB4N2ZmZjMxYzM3MDAwIC0gICAgIDB4N2ZmZjMxZDE4ZmZhICBjb20uYXBw
bGUuYXVkaW8udG9vbGJveC5BdWRpb1Rvb2xib3ggKDEuMTQgLSAxLjE0KSA8NzU2NTFGMEEtRjJD
RS0zRjY4LUI4NkEtRTY2Qjg4MTVEQ0Y0PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BdWRp
b1Rvb2xib3guZnJhbWV3b3JrL1ZlcnNpb25zL0EvQXVkaW9Ub29sYm94CiAgICAweDdmZmYzMWQx
YTAwMCAtICAgICAweDdmZmYzMWQxYWZmZiAgY29tLmFwcGxlLmF1ZGlvLnVuaXRzLkF1ZGlvVW5p
dCAoMS4xNCAtIDEuMTQpIDxFNTFEQ0IzQy1DRjRGLTMyMEItQUM4Ni1ENDQ1RTMwQzA4OTE+IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVW5pdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9B
dWRpb1VuaXQKICAgIDB4N2ZmZjMxZTRkMDAwIC0gICAgIDB4N2ZmZjMxZTViZmZjICBjb20uYXBw
bGUuQXV0aGVudGljYXRpb25TZXJ2aWNlcyAoMTIuMCAtIDEuMCkgPDUxMDM5ODE3LTI1OTctMzNF
Ri04MENFLTZCMDEyODA4QTAwOT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXV0aGVudGlj
YXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9BdXRoZW50aWNhdGlvblNlcnZpY2Vz
CiAgICAweDdmZmYzMjBiMDAwMCAtICAgICAweDdmZmYzMjQzZWZmZCAgY29tLmFwcGxlLkNGTmV0
d29yayAoMTEyNiAtIDExMjYpIDxCQjhGNEM2My0xMEI4LTNBQ0QtODRDRi1ENERDRkE5MjQ1REQ+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NGTmV0d29yay5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9DRk5ldHdvcmsKICAgIDB4N2ZmZjMyNGJhMDAwIC0gICAgIDB4N2ZmZjMyNGJhZmZmICBjb20u
YXBwbGUuQ2FyYm9uICgxNjAgLSAxNjIpIDw0RjFGNjBDQi02QzFFLTNENzktODMyRS04RDYwNjYw
MUYyODI+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9DYXJib24KICAgIDB4N2ZmZjMyNGJiMDAwIC0gICAgIDB4N2ZmZjMyNGJlZmYzICBjb20u
YXBwbGUuQ29tbW9uUGFuZWxzICgxLjIuNiAtIDEwMSkgPDMzM0JCRjU1LUFGMjMtM0I5OS1BOUZG
LTc5MDYxNzVCOTQwNj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1ld29y
ay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvQ29tbW9uUGFuZWxzLmZyYW1ld29yay9WZXJzaW9ucy9B
L0NvbW1vblBhbmVscwogICAgMHg3ZmZmMzI0YmYwMDAgLSAgICAgMHg3ZmZmMzI3YjNmZjMgIGNv
bS5hcHBsZS5ISVRvb2xib3ggKDIuMS4xIC0gOTk0LjYpIDw1QzQ0QUNBNy1EMTU4LTNGOUItOEY4
OC0wNDc3NTEwRDQ0RkE+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL0hJVG9vbGJveC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9I
SVRvb2xib3gKICAgIDB4N2ZmZjMyN2I0MDAwIC0gICAgIDB4N2ZmZjMyN2I3ZmYzICBjb20uYXBw
bGUuaGVscCAoMS4zLjggLSA3MSkgPDRCMjcwMUEwLTg4MTMtMzVGOC04MkY4LTY3NkIxODREMTVD
ND4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1ld29yay9WZXJzaW9ucy9B
L0ZyYW1ld29ya3MvSGVscC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9IZWxwCiAgICAweDdmZmYzMjdi
ODAwMCAtICAgICAweDdmZmYzMjdiZGZmNyAgY29tLmFwcGxlLkltYWdlQ2FwdHVyZSAoOS4wIC0g
MTYwMC42MC40LjIpIDwyMDg3MkEyRC1DQkY5LTM4RTYtQkQxNi1DMUQzODcxMjA2NTE+IC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdv
cmtzL0ltYWdlQ2FwdHVyZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JbWFnZUNhcHR1cmUKICAgIDB4
N2ZmZjMyN2JlMDAwIC0gICAgIDB4N2ZmZjMyN2JlZmZmICBjb20uYXBwbGUuaW5rLmZyYW1ld29y
ayAoMTAuMTUgLSAyMjcpIDw1QjYwRkRERS1ENjBFLTMyNkItQkQzRC02RUE1RkExQ0JCNzY+IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFt
ZXdvcmtzL0luay5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JbmsKICAgIDB4N2ZmZjMyN2JmMDAwIC0g
ICAgIDB4N2ZmZjMyN2Q5ZmZhICBjb20uYXBwbGUub3BlbnNjcmlwdGluZyAoMS43IC0gMTg1LjEp
IDxFNTlGODkzQi0xQTczLTMwOTgtODkyNC03OTIyN0VDOTc4N0U+IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL09wZW5TY3Jp
cHRpbmcuZnJhbWV3b3JrL1ZlcnNpb25zL0EvT3BlblNjcmlwdGluZwogICAgMHg3ZmZmMzI3ZmEw
MDAgLSAgICAgMHg3ZmZmMzI3ZmFmZmYgIGNvbS5hcHBsZS5wcmludC5mcmFtZXdvcmsuUHJpbnQg
KDE1IC0gMjcxKSA8MDdDNTBCRjYtMjIyMi0zNzY5LUE1QjgtNzlEN0Y5OTYxODNGPiAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jr
cy9QcmludC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9QcmludAogICAgMHg3ZmZmMzI3ZmIwMDAgLSAg
ICAgMHg3ZmZmMzI3ZmRmZjcgIGNvbS5hcHBsZS5zZWN1cml0eWhpICg5LjAgLSA1NTAwOCkgPEQ3
MDE3RDVBLTQyMDYtM0UyRi05RjhFLTBGOTMyNDIyQ0E4Nz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQ2FyYm9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvU2VjdXJpdHlISS5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9TZWN1cml0eUhJCiAgICAweDdmZmYzMjdmZTAwMCAtICAgICAw
eDdmZmYzMjgwNGZmZiAgY29tLmFwcGxlLnNwZWVjaC5yZWNvZ25pdGlvbi5mcmFtZXdvcmsgKDYu
MC4zIC0gNi4wLjMpIDwxMTg4RTY0My05NjdDLTMzNEUtQkMxQS02MEEwRjgyQzY3RTU+IC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdv
cmtzL1NwZWVjaFJlY29nbml0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL1NwZWVjaFJlY29nbml0
aW9uCiAgICAweDdmZmYzMjgwNTAwMCAtICAgICAweDdmZmYzMjk5ZGZmYSAgY29tLmFwcGxlLmNs
b3Vka2l0LkNsb3VkS2l0ICg4NjcgLSA4NjcpIDxDNjhDMzc2RS1FMkNGLTM0RkUtQkMxRi1CMjU0
MjMzRjk4MEQ+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Nsb3VkS2l0LmZyYW1ld29yay9W
ZXJzaW9ucy9BL0Nsb3VkS2l0CiAgICAweDdmZmYzMjk5ZTAwMCAtICAgICAweDdmZmYzMjk5ZWZm
ZiAgY29tLmFwcGxlLkNvY29hICg2LjExIC0gMjMpIDw4NzQyNkMzQS03QzZDLTM5RDAtOTA1Qy1D
NTkxQjk5NzAyOUU+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvY29hLmZyYW1ld29yay9W
ZXJzaW9ucy9BL0NvY29hCiAgICAweDdmZmYzMjlhYzAwMCAtICAgICAweDdmZmYzMmFhMmZmZiAg
Y29tLmFwcGxlLkNvbG9yU3luYyAoNC4xMy4wIC0gMzM5NC45KSA8NjE2OThBN0ItQkI4Qy0zODkx
LTk1NDctNzAzRkY4NDY3MUE4PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db2xvclN5bmMu
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29sb3JTeW5jCiAgICAweDdmZmYzMmI5NDAwMCAtICAgICAw
eDdmZmYzMmNjZGZmNiAgY29tLmFwcGxlLmNvbnRhY3RzICgxLjAgLSAzNDU1LjE4KSA8M0FFOEM4
ODItQkZENC0zREEwLTgyNUUtRDg1NjA2MjNFNjNBPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9Db250YWN0cy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db250YWN0cwogICAgMHg3ZmZmMzJjY2Uw
MDAgLSAgICAgMHg3ZmZmMzJkOGNmZmQgIGNvbS5hcHBsZS5Db250YWN0c1VJICgxMS4wIC0gMjQy
MS4yNikgPDRFNkE2QUExLUY0NTQtM0NBQi1CNEFCLTgwMDlBRjMzNUM0NT4gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQ29udGFjdHNVSS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db250YWN0c1VJ
CiAgICAweDdmZmYzMmQ4ZDAwMCAtICAgICAweDdmZmYzMzI5NmZmYiAgY29tLmFwcGxlLmF1ZGlv
LkNvcmVBdWRpbyAoNS4wIC0gNS4wKSA8NjJCRUU0QjctOEEyNi0zOTUxLTlENzgtNEUxOTM2MTdB
RjdBPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlQXVkaW8uZnJhbWV3b3JrL1ZlcnNp
b25zL0EvQ29yZUF1ZGlvCiAgICAweDdmZmYzMzJlOTAwMCAtICAgICAweDdmZmYzMzMyMWZmZiAg
Y29tLmFwcGxlLkNvcmVCbHVldG9vdGggKDEuMCAtIDEpIDw2QkM3Rjg2My00NDk1LTM3MUYtQkM1
NC01NDNFNUNGRTE2NjU+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVCbHVldG9vdGgu
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZUJsdWV0b290aAogICAgMHg3ZmZmMzMzMjIwMDAgLSAg
ICAgMHg3ZmZmMzM3MGNmZTggIGNvbS5hcHBsZS5Db3JlRGF0YSAoMTIwIC0gOTc3LjMpIDxEOTAy
QTJFMy0xRDBBLTM5OTUtOTc0RS1BNTI2OTc2RTU3MzU+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL0NvcmVEYXRhLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVEYXRhCiAgICAweDdmZmYzMzcw
ZDAwMCAtICAgICAweDdmZmYzMzgzZGZmZSAgY29tLmFwcGxlLkNvcmVEaXNwbGF5ICgxLjAgLSAx
ODYuNi4xMikgPEVBNzRDQzQ2LTg3MTUtM0I5MC05NUU4LTQ1OTREMkYwQ0M4QT4gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvQ29yZURpc3BsYXkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZURp
c3BsYXkKICAgIDB4N2ZmZjMzODNlMDAwIC0gICAgIDB4N2ZmZjMzY2JkZmZiICBjb20uYXBwbGUu
Q29yZUZvdW5kYXRpb24gKDYuOSAtIDE2NzYuMTA1KSA8NkFGOEIzQ0MtQkMzRi0zODY5LUI5RkIt
MUQ4ODE0MjIzNjRFPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlRm91bmRhdGlvbi5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlRm91bmRhdGlvbgogICAgMHg3ZmZmMzNjYmYwMDAgLSAg
ICAgMHg3ZmZmMzQzMzNmZjggIGNvbS5hcHBsZS5Db3JlR3JhcGhpY3MgKDIuMCAtIDEzNTUuMTcp
IDxFMUNFMzkxOS1GMzZCLTMwOUYtODlCQS03OUYzNkRDODEyNUU+IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0NvcmVHcmFwaGljcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlR3JhcGhpY3MK
ICAgIDB4N2ZmZjM0MzQxMDAwIC0gICAgIDB4N2ZmZjM0NjljZmYwICBjb20uYXBwbGUuQ29yZUlt
YWdlICgxNS4wLjAgLSA5NDAuOSkgPDQ0RjY4RThDLTMxNUEtMzJBNi1CQjE5LTdGMjRDMDBBQjM0
Nz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUltYWdlLmZyYW1ld29yay9WZXJzaW9u
cy9BL0NvcmVJbWFnZQogICAgMHg3ZmZmMzQ2OWQwMDAgLSAgICAgMHg3ZmZmMzQ3MDZmZjAgIGNv
bS5hcHBsZS5jb3JlbG9jYXRpb24gKDIzOTQuMC4yMiAtIDIzOTQuMC4yMikgPEIxRTMzODJBLTYy
RUQtMzZGMC1BQjg2LUY0NkQ3QjdGRjlBRT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29y
ZUxvY2F0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVMb2NhdGlvbgogICAgMHg3ZmZmMzQ3
NWEwMDAgLSAgICAgMHg3ZmZmMzRhNWNmZjIgIGNvbS5hcHBsZS5Db3JlTUwgKDEuMCAtIDEpIDww
NjU5ODkwNS1CQTVCLTNEODktOTkyMS0zOUM2RDU4ODlERDk+IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0NvcmVNTC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlTUwKICAgIDB4N2ZmZjM0YTVk
MDAwIC0gICAgIDB4N2ZmZjM0YjM4ZmZjICBjb20uYXBwbGUuQ29yZU1lZGlhICgxLjAgLSAyNjIw
LjExLjQwLjIpIDwwRjQ5MDEwMS1FRDMwLTMxODktQjA5OS1FMjQ3QjYzNjFBMEI+IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVNZWRpYS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlTWVk
aWEKICAgIDB4N2ZmZjM0YjM5MDAwIC0gICAgIDB4N2ZmZjM0YjliZmZlICBjb20uYXBwbGUuQ29y
ZU1lZGlhSU8gKDEwMDAuMCAtIDUxMjUuNikgPEE1ODBFQjIwLUNERUItMzdGNS04QjQxLUQ5ODRF
QTdDMkU3NT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZU1lZGlhSU8uZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvQ29yZU1lZGlhSU8KICAgIDB4N2ZmZjM0YzI1MDAwIC0gICAgIDB4N2ZmZjM0
YzI1ZmZmICBjb20uYXBwbGUuQ29yZVNlcnZpY2VzICgxMDY5LjI0IC0gMTA2OS4yNCkgPEQ5RjZB
QjQwLTEwRUMtMzY4Mi1BOTY5LTg1NTYwRTJFNDc2OD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVTZXJ2aWNlcwogICAgMHg3
ZmZmMzRjMjYwMDAgLSAgICAgMHg3ZmZmMzRjYWJmZmYgIGNvbS5hcHBsZS5BRSAoODM4LjEgLSA4
MzguMSkgPDVGMjZEQTlCLUZCMkUtM0FGOC05NjRCLTYzQkQ2NjcxQ0YxMj4gL1N5c3RlbS9MaWJy
YXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29y
a3MvQUUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQUUKICAgIDB4N2ZmZjM0Y2FjMDAwIC0gICAgIDB4
N2ZmZjM0ZjhkZmY3ICBjb20uYXBwbGUuQ29yZVNlcnZpY2VzLkNhcmJvbkNvcmUgKDEyMTcgLSAx
MjE3KSA8ODAyMkFGNDctQUE5OS0zNzg2LUIwODYtMTQxRDg0RjAwMzg3PiAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jr
cy9DYXJib25Db3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0NhcmJvbkNvcmUKICAgIDB4N2ZmZjM0
ZjhlMDAwIC0gICAgIDB4N2ZmZjM0ZmRiZmZkICBjb20uYXBwbGUuRGljdGlvbmFyeVNlcnZpY2Vz
ICgxLjIgLSAzMjMuNikgPEMwRjM4MzBDLUE0QzYtMzA0Ni05QTZBLURFMUI1RDQ0OEMyQz4gL1N5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9B
L0ZyYW1ld29ya3MvRGljdGlvbmFyeVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0RpY3Rp
b25hcnlTZXJ2aWNlcwogICAgMHg3ZmZmMzRmZGMwMDAgLSAgICAgMHg3ZmZmMzRmZTRmZjcgIGNv
bS5hcHBsZS5Db3JlU2VydmljZXMuRlNFdmVudHMgKDEyNjguMTAwLjEgLSAxMjY4LjEwMC4xKSA8
RTRCMkNBRjItMTIwMy0zMzVGLTk5NzEtMTI3OENCNkUyQUUwPiAvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9GU0V2
ZW50cy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GU0V2ZW50cwogICAgMHg3ZmZmMzRmZTUwMDAgLSAg
ICAgMHg3ZmZmMzUyMWZmZjYgIGNvbS5hcHBsZS5MYXVuY2hTZXJ2aWNlcyAoMTA2OS4yNCAtIDEw
NjkuMjQpIDwyRTBBRDIyOC1CMUNDLTM2NDUtOTFFRS1FQjdGNDZGMjE0N0I+IC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdv
cmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0xhdW5jaFNlcnZpY2VzCiAg
ICAweDdmZmYzNTIyMDAwMCAtICAgICAweDdmZmYzNTJiOGZmMSAgY29tLmFwcGxlLk1ldGFkYXRh
ICgxMC43LjAgLSAyMDc2LjYpIDxDODAzNEU4NC03REQ0LTM0QjktOUNERi0xNkEwNTAzMkZGMzk+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9GcmFtZXdvcmtzL01ldGFkYXRhLmZyYW1ld29yay9WZXJzaW9ucy9BL01ldGFkYXRhCiAg
ICAweDdmZmYzNTJiOTAwMCAtICAgICAweDdmZmYzNTJlNmZmZiAgY29tLmFwcGxlLkNvcmVTZXJ2
aWNlcy5PU1NlcnZpY2VzICgxMDY5LjI0IC0gMTA2OS4yNCkgPDcyRkRFQTUyLTc2MDctMzc0NS1B
QzQzLTYzMEQ4MDk2MjA5OT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2Vz
LmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvT1NTZXJ2aWNlcy5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9PU1NlcnZpY2VzCiAgICAweDdmZmYzNTJlNzAwMCAtICAgICAweDdmZmYzNTM0ZWZm
ZiAgY29tLmFwcGxlLlNlYXJjaEtpdCAoMS40LjEgLSAxLjQuMSkgPDA4NkVCNURGLUEyRUMtMzM0
Mi04MDI4LUNBNzk5NkJFNUNCMj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZp
Y2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZyYW1ld29ya3MvU2VhcmNoS2l0LmZyYW1ld29yay9W
ZXJzaW9ucy9BL1NlYXJjaEtpdAogICAgMHg3ZmZmMzUzNGYwMDAgLSAgICAgMHg3ZmZmMzUzNzNm
ZjUgIGNvbS5hcHBsZS5jb3Jlc2VydmljZXMuU2hhcmVkRmlsZUxpc3QgKDEzMS40IC0gMTMxLjQp
IDxBRTMzM0RBMi1DMjc5LTM3NTEtOEMxNS1COTYzRTU4RUU2MUU+IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL1No
YXJlZEZpbGVMaXN0LmZyYW1ld29yay9WZXJzaW9ucy9BL1NoYXJlZEZpbGVMaXN0CiAgICAweDdm
ZmYzNTM3NDAwMCAtICAgICAweDdmZmYzNTNlNWZmZiAgY29tLmFwcGxlLkNvcmVTcG90bGlnaHQg
KDEuMCAtIDIwNzYuNikgPEE3MjJGNzIzLTI2QTAtMzA1RC05NkQ5LTZDQ0U3QTBENzVBMT4gL1N5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNwb3RsaWdodC5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9Db3JlU3BvdGxpZ2h0CiAgICAweDdmZmYzNTVkMDAwMCAtICAgICAweDdmZmYzNTY5N2ZmYyAg
Y29tLmFwcGxlLkNvcmVUZWxlcGhvbnkgKDExMyAtIDc1NjAuMSkgPEJBQzZFRUE5LTg5QTAtM0Qw
My1CRTBCLUM2NUEzODM4QzlEMD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVRlbGVw
aG9ueS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlVGVsZXBob255CiAgICAweDdmZmYzNTY5ODAw
MCAtICAgICAweDdmZmYzNTg0ZmZmYyAgY29tLmFwcGxlLkNvcmVUZXh0ICg2NDMuMS41LjEgLSA2
NDMuMS41LjEpIDw3MTVGRTNGNy1FOEZCLTM5OTctODVBMC0zQUIyODM5RjZDMzA+IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0NvcmVUZXh0LmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVUZXh0
CiAgICAweDdmZmYzNTg1MDAwMCAtICAgICAweDdmZmYzNTg5NGZmYiAgY29tLmFwcGxlLkNvcmVW
aWRlbyAoMS44IC0gMzQ0LjMpIDxBMjAwQUZDNy0yQ0IyLTMwQ0QtOEIyQS0xMjY5Q0E2NEEyOUI+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVWaWRlby5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9Db3JlVmlkZW8KICAgIDB4N2ZmZjM1ODk1MDAwIC0gICAgIDB4N2ZmZjM1OTIyZmZjICBjb20u
YXBwbGUuZnJhbWV3b3JrLkNvcmVXTEFOICgxMy4wIC0gMTYwMS4yKSA8ODU1RTUxQUEtREYzQS0z
QkI5LUE0RjAtNjg4MEQ0MkI4NzYyPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlV0xB
Ti5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlV0xBTgogICAgMHg3ZmZmMzU5NTkwMDAgLSAgICAg
MHg3ZmZmMzU5OTlmZjUgIGNvbS5hcHBsZS5DcnlwdG9Ub2tlbktpdCAoMS4wIC0gMSkgPDk4NEFE
NjdGLTFDNTYtMzc0RC05Q0VCLTg4MTZFNTNCMzE5Mz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ3J5cHRvVG9rZW5LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ3J5cHRvVG9rZW5LaXQKICAg
IDB4N2ZmZjM1YWRlMDAwIC0gICAgIDB4N2ZmZjM1YWU5ZmY3ICBjb20uYXBwbGUuRGlyZWN0b3J5
U2VydmljZS5GcmFtZXdvcmsgKDEwLjE1IC0gMjIwLjQwLjEpIDwwNkQ5OEZEMC03OTZGLTM1NkYt
QjQ5Mi1BNkQ4RjNENUJFQzA+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0RpcmVjdG9yeVNl
cnZpY2UuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRGlyZWN0b3J5U2VydmljZQogICAgMHg3ZmZmMzVh
ZWEwMDAgLSAgICAgMHg3ZmZmMzViOTRmZjAgIGNvbS5hcHBsZS5EaXNjUmVjb3JkaW5nICg5LjAu
MyAtIDkwMzAuNC41KSA8RDkwMzNEREEtRTRDOC0zNkZCLUFFNjAtNEVGNjZGNEYxRjlFPiAvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9EaXNjUmVjb3JkaW5nLmZyYW1ld29yay9WZXJzaW9ucy9B
L0Rpc2NSZWNvcmRpbmcKICAgIDB4N2ZmZjM1YmI5MDAwIC0gICAgIDB4N2ZmZjM1YmJmZmZmICBj
b20uYXBwbGUuRGlza0FyYml0cmF0aW9uICgyLjcgLSAyLjcpIDw1MkU3RDE4MS0yQTE4LTM3Q0Qt
QjI0Ri1BQTMyRTkzRjdBNjk+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Rpc2tBcmJpdHJh
dGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9EaXNrQXJiaXRyYXRpb24KICAgIDB4N2ZmZjM1YmU0
MDAwIC0gICAgIDB4N2ZmZjM1ZDkxZmZjICBjb20uYXBwbGUuaWNhbC5FdmVudEtpdCAoMy4wIC0g
MTM3MC41LjEpIDxGNDk2NDJDQS0wQzhELTM5MDQtQTY1RC1FMDc0RUMxODA2QjA+IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL0V2ZW50S2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0V2ZW50S2l0
CiAgICAweDdmZmYzNWRiMjAwMCAtICAgICAweDdmZmYzNWVlMGZmNiAgY29tLmFwcGxlLkZpbGVQ
cm92aWRlciAoMzA0LjEgLSAzMDQuMSkgPDU4RDY0MjM2LTk0N0UtM0U2QS04NUU2LUM2NkFFRjlF
MEVFMD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRmlsZVByb3ZpZGVyLmZyYW1ld29yay9W
ZXJzaW9ucy9BL0ZpbGVQcm92aWRlcgogICAgMHg3ZmZmMzVlZjgwMDAgLSAgICAgMHg3ZmZmMzYy
YmRmZmYgIGNvbS5hcHBsZS5Gb3VuZGF0aW9uICg2LjkgLSAxNjc2LjEwNSkgPDFGQTI4QkFCLTcy
OTYtM0EwOS04RTFFLUU2MkE3RDIzM0RCOD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91
bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQy9Gb3VuZGF0aW9uCiAgICAweDdmZmYzNjMyYTAw
MCAtICAgICAweDdmZmYzNjM3YWZmNyAgY29tLmFwcGxlLkdTUyAoNC4wIC0gMi4wKSA8NEUyNDFD
MDAtNDJBNS0zNTcyLTk0MzAtRDk1MEZCQjdBNEEwPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9HU1MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvR1NTCiAgICAweDdmZmYzNjRiNzAwMCAtICAgICAw
eDdmZmYzNjVjYmZmMyAgY29tLmFwcGxlLkJsdWV0b290aCAoNy4wLjUgLSA3LjAuNWY2KSA8NTg5
N0MzNjgtOTY3NC0zRTM0LUIxNDQtRkZCMDZBMkRGMzdCPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9JT0JsdWV0b290aC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0JsdWV0b290aAogICAgMHg3
ZmZmMzY2MzEwMDAgLSAgICAgMHg3ZmZmMzY2ZDVmZjMgIGNvbS5hcHBsZS5mcmFtZXdvcmsuSU9L
aXQgKDIuMC4yIC0gMTcyNi4xMjEuMSkgPEEwRjU0NzI1LTAzNkYtMzI3OS1BNDZFLUMyQUJEQkZE
NDc5Qj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvSU9LaXQKICAgIDB4N2ZmZjM2NmQ3MDAwIC0gICAgIDB4N2ZmZjM2NmU4ZmZiICBjb20uYXBw
bGUuSU9TdXJmYWNlICgyNjkuMTEgLSAyNjkuMTEpIDxEM0NDMkFBMS00QUUyLTMwRUUtQTlEQi1D
MDRDQ0FBODhBREU+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPU3VyZmFjZS5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9JT1N1cmZhY2UKICAgIDB4N2ZmZjM2NzA2MDAwIC0gICAgIDB4N2ZmZjM2
NzY2ZmY3ICBjb20uYXBwbGUuSW1hZ2VDYXB0dXJlQ29yZSAoMS4wIC0gMTYwMC42MC40LjIpIDw4
QkExMTI4NC02NkEwLTM1NjctQTEzQy03MkFEMUNDMEMyRUE+IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL0ltYWdlQ2FwdHVyZUNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSW1hZ2VDYXB0dXJl
Q29yZQogICAgMHg3ZmZmMzY3NjcwMDAgLSAgICAgMHg3ZmZmMzY4YzNmZmUgIGNvbS5hcHBsZS5J
bWFnZUlPLmZyYW1ld29yayAoMy4zLjAgLSAxOTc2LjYpIDw1QjRDMkUwNC05MTYxLTNDODItQTdG
Qi1GNEQ1MUUzQzFFMTA+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3
b3JrL1ZlcnNpb25zL0EvSW1hZ2VJTwogICAgMHg3ZmZmMzY4YzQwMDAgLSAgICAgMHg3ZmZmMzY4
YzdmZmYgIGxpYkdJRi5keWxpYiAoMTk3Ni42KSA8M0IyNkVFMUMtQzU3MC0zMDVDLUE5QTMtRUE2
MkQyRjJFN0I4PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1ld29yay9W
ZXJzaW9ucy9BL1Jlc291cmNlcy9saWJHSUYuZHlsaWIKICAgIDB4N2ZmZjM2OGM4MDAwIC0gICAg
IDB4N2ZmZjM2OTgxZmZmICBsaWJKUDIuZHlsaWIgKDE5NzYuNikgPEVCNEU0RTA5LUREODEtM0U2
Qi1BNTEzLTM2NjdFODEwQUVGMz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSW1hZ2VJTy5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9SZXNvdXJjZXMvbGliSlAyLmR5bGliCiAgICAweDdmZmYzNjk4
MjAwMCAtICAgICAweDdmZmYzNjlhNWZlMyAgbGliSlBFRy5keWxpYiAoMTk3Ni42KSA8OUQ3RkFD
NTUtODVBNi0zNEFCLTlGMjYtMEJDQTM4MUU4Q0U3PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9JbWFnZUlPLmZyYW1ld29yay9WZXJzaW9ucy9BL1Jlc291cmNlcy9saWJKUEVHLmR5bGliCiAg
ICAweDdmZmYzNmMyMTAwMCAtICAgICAweDdmZmYzNmMzYmZlZiAgbGliUG5nLmR5bGliICgxOTc2
LjYpIDw0ODg2QTFGOC1FOUNBLTM4RjItQkYyRi0xRkNBMURGREQxQzk+IC9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzL2xpYlBu
Zy5keWxpYgogICAgMHg3ZmZmMzZjM2MwMDAgLSAgICAgMHg3ZmZmMzZjM2RmZmYgIGxpYlJhZGlh
bmNlLmR5bGliICgxOTc2LjYpIDxGQTc1OUQzMy0xMzFBLTMzQjgtOTQzRS0zMjQwOUYxNjI3Mzg+
IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ltYWdlSU8uZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
UmVzb3VyY2VzL2xpYlJhZGlhbmNlLmR5bGliCiAgICAweDdmZmYzNmMzZTAwMCAtICAgICAweDdm
ZmYzNmM4N2ZmZiAgbGliVElGRi5keWxpYiAoMTk3Ni42KSA8RTk5OTRCRjgtNkNGNS0zNDIyLUI0
RkQtQTE0REMzOTBFRjEyPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbWFnZUlPLmZyYW1l
d29yay9WZXJzaW9ucy9BL1Jlc291cmNlcy9saWJUSUZGLmR5bGliCiAgICAweDdmZmYzNmM5YzAw
MCAtICAgICAweDdmZmYzNmM5ZmZmZSAgY29tLmFwcGxlLmlDaGF0Lkluc3RhbnRNZXNzYWdlICg4
LjAgLSA1NTAxKSA8Qzc5QUZEQTktOTNFQy0zODc0LTlDMTUtQjAwOTc0MkIwODcwPiAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9JbnN0YW50TWVzc2FnZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9J
bnN0YW50TWVzc2FnZQogICAgMHg3ZmZmMzZjYTAwMDAgLSAgICAgMHg3ZmZmMzcxMmZmZjggIGNv
bS5hcHBsZS5JbnRlbnRzICgxLjAgLSAxKSA8RUE0RUVFODQtRDMzNy0zQzU5LTlDMDItMjYxMjA1
Q0EwNEU3PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JbnRlbnRzLmZyYW1ld29yay9WZXJz
aW9ucy9BL0ludGVudHMKICAgIDB4N2ZmZjM3MTMyMDAwIC0gICAgIDB4N2ZmZjM4MWQyZmU5ICBj
b20uYXBwbGUuSmF2YVNjcmlwdENvcmUgKDE1NjA5IC0gMTU2MDkuMi45LjEuMikgPDYyMTU4REZC
LUMyNTAtM0ExOC1BRTUyLTYyOTY1NDRBRUE0Mz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
SmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSmF2YVNjcmlwdENvcmUKICAgIDB4
N2ZmZjM4MWU5MDAwIC0gICAgIDB4N2ZmZjM4MWZiZmYzICBjb20uYXBwbGUuS2VyYmVyb3MgKDMu
MCAtIDEpIDxBRTBFNTZDQS1EOTI0LTNDQzgtQkJBQS04QzZFRUMzMDM4QkU+IC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0tlcmJlcm9zLmZyYW1ld29yay9WZXJzaW9ucy9BL0tlcmJlcm9zCiAg
ICAweDdmZmYzODFmYzAwMCAtICAgICAweDdmZmYzODFmY2ZmZiAgbGliSGVpbWRhbFByb3h5LmR5
bGliICg3NykgPEE5NzBDN0E4LTdDQ0QtMzcwMS1BNDU5LTA3OEJENUU4RkU0RT4gL1N5c3RlbS9M
aWJyYXJ5L0ZyYW1ld29ya3MvS2VyYmVyb3MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTGlicmFyaWVz
L2xpYkhlaW1kYWxQcm94eS5keWxpYgogICAgMHg3ZmZmMzgxZmQwMDAgLSAgICAgMHg3ZmZmMzgy
MzNmZjcgIGNvbS5hcHBsZS5MREFQRnJhbWV3b3JrICgyLjQuMjggLSAxOTQuNSkgPDRDRkI2MzUx
LTUzQjktMzZBRi1CNjU0LUFFNjM2QkJDMzYxQT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
TERBUC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9MREFQCiAgICAweDdmZmYzODI1NTAwMCAtICAgICAw
eDdmZmYzODMxN2ZmNiAgY29tLmFwcGxlLkxpbmtQcmVzZW50YXRpb24gKDExOSAtIDExOS4xOCkg
PDM1RDFCNjBELUZDRjAtM0YyMi05MEM3LUFGRDcyMUNGRUU0Qz4gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvTGlua1ByZXNlbnRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9MaW5rUHJlc2Vu
dGF0aW9uCiAgICAweDdmZmYzODMxODAwMCAtICAgICAweDdmZmYzODMzM2ZmMSAgY29tLmFwcGxl
LkxvY2FsQXV0aGVudGljYXRpb24uRGFlbW9uVXRpbHMgKDEuMCAtIDY5My4xMjAuMSkgPERERTcw
QTI0LUIwNEEtM0Y4MS1COUExLUNDRjkwQTI1OEUzMD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvTG9jYWxBdXRoZW50aWNhdGlvbi5mcmFtZXdvcmsvU3VwcG9ydC9EYWVtb25VdGlscy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9EYWVtb25VdGlscwogICAgMHg3ZmZmMzgzNDcwMDAgLSAgICAgMHg3
ZmZmMzgzNjlmZmMgIGNvbS5hcHBsZS5Db3JlQXV0aGVudGljYXRpb24uU2hhcmVkVXRpbHMgKDEu
MCAtIDY5My4xMjAuMSkgPDY2NzM0MzU3LTU0MDktMzYzRC1BQjU1LUMwMjMzQ0E2NjA1Nj4gL1N5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTG9jYWxBdXRoZW50aWNhdGlvbi5mcmFtZXdvcmsvU3Vw
cG9ydC9TaGFyZWRVdGlscy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TaGFyZWRVdGlscwogICAgMHg3
ZmZmMzgzNmEwMDAgLSAgICAgMHg3ZmZmMzgzODBmZmUgIGNvbS5hcHBsZS5Mb2NhbEF1dGhlbnRp
Y2F0aW9uICgxLjAgLSA2OTMuMTIwLjEpIDw1QkQ2MTg5Ri04QUQ0LTMxQzgtQjk1NC03RURCMzg2
NDhFRTc+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0xvY2FsQXV0aGVudGljYXRpb24uZnJh
bWV3b3JrL1ZlcnNpb25zL0EvTG9jYWxBdXRoZW50aWNhdGlvbgogICAgMHg3ZmZmMzgzODEwMDAg
LSAgICAgMHg3ZmZmMzg1OGNmZjggIGNvbS5hcHBsZS5NYXBLaXQgKDEuMCAtIDIwOTYuMjQuMTAu
MjkuNDQpIDxCRjU4QzkyRS0wQzFDLTM4MjUtQjg2My1BOEE0MzgyOTE5MTc+IC9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL01hcEtpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NYXBLaXQKICAgIDB4
N2ZmZjM4NThlMDAwIC0gICAgIDB4N2ZmZjM4NTk4ZmZiICBjb20uYXBwbGUuTWVkaWFBY2Nlc3Np
YmlsaXR5ICgxLjAgLSAxMjUuMSkgPERCRjQwQTEyLTY1QTYtMzNFNC04MzlDLTI5MjYwMEI3RDkx
MD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTWVkaWFBY2Nlc3NpYmlsaXR5LmZyYW1ld29y
ay9WZXJzaW9ucy9BL01lZGlhQWNjZXNzaWJpbGl0eQogICAgMHg3ZmZmMzg1OTkwMDAgLSAgICAg
MHg3ZmZmMzg1YWJmZmEgIGNvbS5hcHBsZS5NZWRpYUxpYnJhcnkgKDEuNi4yIC0gNzg3KSA8NjA0
NjU4NTctM0E0Ny0zMDIxLTgyRTgtQjBDMDg3QzlDNjhGPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9NZWRpYUxpYnJhcnkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTWVkaWFMaWJyYXJ5CiAgICAw
eDdmZmYzODVhYzAwMCAtICAgICAweDdmZmYzODY2M2ZmNyAgY29tLmFwcGxlLk1lZGlhUGxheWVy
ICgxLjAgLSAxLjApIDwwQ0UyNjU2Mi01RDg3LTMxRDItQTU1OC02NDFFMDgyMkJDNkY+IC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL01lZGlhUGxheWVyLmZyYW1ld29yay9WZXJzaW9ucy9BL01l
ZGlhUGxheWVyCiAgICAweDdmZmYzODY2NDAwMCAtICAgICAweDdmZmYzOGRiMWZmNSAgY29tLmFw
cGxlLk1lZGlhVG9vbGJveCAoMS4wIC0gMjYyMC4xMS40MC4yKSA8NDBGMTZBRjYtNzlEMS0zQzJF
LTk3NkMtRTdFNzg3MEE0RUY5PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZWRpYVRvb2xi
b3guZnJhbWV3b3JrL1ZlcnNpb25zL0EvTWVkaWFUb29sYm94CiAgICAweDdmZmYzOGRiMzAwMCAt
ICAgICAweDdmZmYzOGU3ZGZmNyAgY29tLmFwcGxlLk1ldGFsICgyMTIuNyAtIDIxMi43KSA8Q0M3
QkY3MTUtMTQyQi0zQzJBLTgxQUQtMEUzNTY5MzIzMEYyPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9NZXRhbC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NZXRhbAogICAgMHg3ZmZmMzhlN2YwMDAg
LSAgICAgMHg3ZmZmMzhlOTlmZjUgIGNvbS5hcHBsZS5NZXRhbEtpdCAoMTQxLjIgLSAxNDEuMikg
PDgxNjJBRkI2LTMyN0MtM0JFMS1BRUY3LTJCRUE5OTlCMURGQj4gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvTWV0YWxLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTWV0YWxLaXQKICAgIDB4N2Zm
ZjM4ZTlhMDAwIC0gICAgIDB4N2ZmZjM4ZWQ3ZmY3ICBjb20uYXBwbGUuTWV0YWxQZXJmb3JtYW5j
ZVNoYWRlcnMuTVBTQ29yZSAoMS4wIC0gMSkgPDUyMDg5MzI1LUVDOTctM0VFRC1BQkIzLTlCMzlF
QzBCRDQyOT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTWV0YWxQZXJmb3JtYW5jZVNoYWRl
cnMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTVBTQ29yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NUFND
b3JlCiAgICAweDdmZmYzOGVkODAwMCAtICAgICAweDdmZmYzOGY2MmZlMiAgY29tLmFwcGxlLk1l
dGFsUGVyZm9ybWFuY2VTaGFkZXJzLk1QU0ltYWdlICgxLjAgLSAxKSA8OUU0MzRFQTAtNkJDQS0z
OTAzLUI4ODItQ0VCNjk3MzBBNjNCPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZXRhbFBl
cmZvcm1hbmNlU2hhZGVycy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9NUFNJbWFnZS5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9NUFNJbWFnZQogICAgMHg3ZmZmMzhmNjMwMDAgLSAgICAgMHg3ZmZmMzhmODhm
ZjQgIGNvbS5hcHBsZS5NZXRhbFBlcmZvcm1hbmNlU2hhZGVycy5NUFNNYXRyaXggKDEuMCAtIDEp
IDxFREQ2QzNBNS1FMjMxLTNGQjEtQjRENC00NTc0MkFGQjlBNEU+IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL01ldGFsUGVyZm9ybWFuY2VTaGFkZXJzLmZyYW1ld29yay9GcmFtZXdvcmtzL01Q
U01hdHJpeC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NUFNNYXRyaXgKICAgIDB4N2ZmZjM4Zjg5MDAw
IC0gICAgIDB4N2ZmZjM4ZjllZmZiICBjb20uYXBwbGUuTWV0YWxQZXJmb3JtYW5jZVNoYWRlcnMu
TVBTTkRBcnJheSAoMS4wIC0gMSkgPEM1QTJCODY1LTVDRTItM0U1RC04NDUyLTU0NjM5RkNCMDk1
ND4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTWV0YWxQZXJmb3JtYW5jZVNoYWRlcnMuZnJh
bWV3b3JrL0ZyYW1ld29ya3MvTVBTTkRBcnJheS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NUFNOREFy
cmF5CiAgICAweDdmZmYzOGY5ZjAwMCAtICAgICAweDdmZmYzOTBmZGZmYyAgY29tLmFwcGxlLk1l
dGFsUGVyZm9ybWFuY2VTaGFkZXJzLk1QU05ldXJhbE5ldHdvcmsgKDEuMCAtIDEpIDw0N0NDREJB
Qy01ODQzLTM2NkEtQTY4Qy02RTg4NTFEMDg2NUQ+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtz
L01ldGFsUGVyZm9ybWFuY2VTaGFkZXJzLmZyYW1ld29yay9GcmFtZXdvcmtzL01QU05ldXJhbE5l
dHdvcmsuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTVBTTmV1cmFsTmV0d29yawogICAgMHg3ZmZmMzkw
ZmUwMDAgLSAgICAgMHg3ZmZmMzkxNGRmZjQgIGNvbS5hcHBsZS5NZXRhbFBlcmZvcm1hbmNlU2hh
ZGVycy5NUFNSYXlJbnRlcnNlY3RvciAoMS4wIC0gMSkgPDMwMkJERjhFLUIwMEEtMzEyMy1BNkM0
LUUyNjJCNzUxM0NGNj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTWV0YWxQZXJmb3JtYW5j
ZVNoYWRlcnMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTVBTUmF5SW50ZXJzZWN0b3IuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvTVBTUmF5SW50ZXJzZWN0b3IKICAgIDB4N2ZmZjM5MTRlMDAwIC0gICAgIDB4
N2ZmZjM5MTRmZmY1ICBjb20uYXBwbGUuTWV0YWxQZXJmb3JtYW5jZVNoYWRlcnMuTWV0YWxQZXJm
b3JtYW5jZVNoYWRlcnMgKDEuMCAtIDEpIDwxNEY4NEI0Mi05REEyLTM5QTEtODFCNC02NjZCODAy
MDUyMEM+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL01ldGFsUGVyZm9ybWFuY2VTaGFkZXJz
LmZyYW1ld29yay9WZXJzaW9ucy9BL01ldGFsUGVyZm9ybWFuY2VTaGFkZXJzCiAgICAweDdmZmYz
YTE5YzAwMCAtICAgICAweDdmZmYzYTFkNWZmNSAgY29tLmFwcGxlLk5hdHVyYWxMYW5ndWFnZSAo
MS4wIC0gNTcpIDwzM0I3QTUyQS0xMTYyLTMzNjgtOUM1NC1CQkU3NDFDNkVEQUQ+IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL05hdHVyYWxMYW5ndWFnZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9O
YXR1cmFsTGFuZ3VhZ2UKICAgIDB4N2ZmZjNhMWQ2MDAwIC0gICAgIDB4N2ZmZjNhMWUyZmZlICBj
b20uYXBwbGUuTmV0RlMgKDYuMCAtIDQuMCkgPEFDNzRFNkE0LTZFOUItM0FCMS05NTc3LTgyNzdG
OEEzRURFMD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTmV0RlMuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvTmV0RlMKICAgIDB4N2ZmZjNhMWUzMDAwIC0gICAgIDB4N2ZmZjNhMzNhZmYzICBjb20u
YXBwbGUuTmV0d29yayAoMS4wIC0gMSkgPEI1QjhFOTk5LUJCQ0MtM0RFRi04ODgxLThGRkY2OUY4
RUM0Qj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvTmV0d29yay5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9OZXR3b3JrCiAgICAweDdmZmYzYTMzYjAwMCAtICAgICAweDdmZmYzYTU5YWZmNSAgY29t
LmFwcGxlLk5ldHdvcmtFeHRlbnNpb24gKDEuMCAtIDEpIDw0NDZEMEQzNi1FOEY4LTNGMkMtQjMy
Qi01QzM2MzAxNzdGQkM+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL05ldHdvcmtFeHRlbnNp
b24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvTmV0d29ya0V4dGVuc2lvbgogICAgMHg3ZmZmM2NkNmIw
MDAgLSAgICAgMHg3ZmZmM2NkYzNmZmYgIGNvbS5hcHBsZS5vcGVuY2wgKDMuNSAtIDMuNSkgPDlC
MTAxRDQwLUVBNzktM0MwRC1CN0FFLUEzRjE4MDk0QjJENz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvT3BlbkNMLmZyYW1ld29yay9WZXJzaW9ucy9BL09wZW5DTAogICAgMHg3ZmZmM2NkYzQw
MDAgLSAgICAgMHg3ZmZmM2NkZTBmZmYgIGNvbS5hcHBsZS5DRk9wZW5EaXJlY3RvcnkgKDEwLjE1
IC0gMjIwLjQwLjEpIDxCRkMzMkVCRS1EOTVDLTMyNjctQjk1Qy01Q0VFRkQxODlFQTY+IC9TeXN0
ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5EaXJlY3RvcnkuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
RnJhbWV3b3Jrcy9DRk9wZW5EaXJlY3RvcnkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ0ZPcGVuRGly
ZWN0b3J5CiAgICAweDdmZmYzY2RlMTAwMCAtICAgICAweDdmZmYzY2RlY2ZmZCAgY29tLmFwcGxl
Lk9wZW5EaXJlY3RvcnkgKDEwLjE1IC0gMjIwLjQwLjEpIDw3NkEyMEJCQS03NzVGLTNFMTctQUIw
Ri1GRURGQ0RDRTA3MTY+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5EaXJlY3Rvcnku
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvT3BlbkRpcmVjdG9yeQogICAgMHg3ZmZmM2Q3NTIwMDAgLSAg
ICAgMHg3ZmZmM2Q3NTRmZmYgIGxpYkNWTVNQbHVnaW5TdXBwb3J0LmR5bGliICgxNy4xMC4yMikg
PEFBRTA3RTBDLTRCMjgtMzY0Qi1BN0Q5LTAyOEM3Q0QxNDk1ND4gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvT3BlbkdMLmZyYW1ld29yay9WZXJzaW9ucy9BL0xpYnJhcmllcy9saWJDVk1TUGx1
Z2luU3VwcG9ydC5keWxpYgogICAgMHg3ZmZmM2Q3NTUwMDAgLSAgICAgMHg3ZmZmM2Q3NWFmZmYg
IGxpYkNvcmVGU0NhY2hlLmR5bGliICgxNzYuMTUpIDw2MDlDNURGQy05QTk3LTM0NEQtQkJDNy1F
MEIwOEQ4NjJDNjM+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9MaWJyYXJpZXMvbGliQ29yZUZTQ2FjaGUuZHlsaWIKICAgIDB4N2ZmZjNkNzVi
MDAwIC0gICAgIDB4N2ZmZjNkNzVmZmZmICBsaWJDb3JlVk1DbGllbnQuZHlsaWIgKDE3Ni4xNSkg
PDhGOEREMjdGLUFDN0MtMzk4RC1BOEUzLTM5NkYxNTI4RTMxNz4gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvT3BlbkdMLmZyYW1ld29yay9WZXJzaW9ucy9BL0xpYnJhcmllcy9saWJDb3JlVk1D
bGllbnQuZHlsaWIKICAgIDB4N2ZmZjNkNzYwMDAwIC0gICAgIDB4N2ZmZjNkNzY4ZmY3ICBsaWJH
RlhTaGFyZWQuZHlsaWIgKDE3LjEwLjIyKSA8RDA2NDlBQjUtNTMzMS0zMjhELTgxNDEtRTVBNkYw
NkQ0QUQ3PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvTGlicmFyaWVzL2xpYkdGWFNoYXJlZC5keWxpYgogICAgMHg3ZmZmM2Q3NjkwMDAgLSAg
ICAgMHg3ZmZmM2Q3NzNmZmYgIGxpYkdMLmR5bGliICgxNy4xMC4yMikgPDExNkREQkY3LUQ3MjUt
M0I4Qy1CRDBCLUEyMUI3NThGRTQyMT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvT3BlbkdM
LmZyYW1ld29yay9WZXJzaW9ucy9BL0xpYnJhcmllcy9saWJHTC5keWxpYgogICAgMHg3ZmZmM2Q3
NzQwMDAgLSAgICAgMHg3ZmZmM2Q3YThmZjcgIGxpYkdMSW1hZ2UuZHlsaWIgKDE3LjEwLjIyKSA8
MkIzMTRDNzYtQzdFNi0zQUM1LTkxNTctNzBCMDUyOUMxRjlCPiAvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTGlicmFyaWVzL2xpYkdMSW1hZ2Uu
ZHlsaWIKICAgIDB4N2ZmZjNkOTNlMDAwIC0gICAgIDB4N2ZmZjNkOTdhZmZmICBsaWJHTFUuZHls
aWIgKDE3LjEwLjIyKSA8QjI5RjczQjItQjVBOS0zQzM4LUFGNzctMzUxMTczRDJFM0RCPiAvU3lz
dGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTGlicmFy
aWVzL2xpYkdMVS5keWxpYgogICAgMHg3ZmZmM2UzYjYwMDAgLSAgICAgMHg3ZmZmM2UzYzVmZjcg
IGNvbS5hcHBsZS5vcGVuZ2wgKDE3LjEwLjIyIC0gMTcuMTAuMjIpIDxENUJGMzJBOC0yRTBBLTM0
NUQtODBBMy03Q0E3QzJDRjc0OEQ+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL09wZW5HTC5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9PcGVuR0wKICAgIDB4N2ZmZjNlNTc3MDAwIC0gICAgIDB4N2Zm
ZjNlNjZhZmYwICBjb20uYXBwbGUuUERGS2l0ICgxLjAgLSA4MzUuNykgPDM0Njg4MUQ4LTNFMDkt
Mzc4Ny1CODc3LTYyODREMUQzQjI0QT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUERGS2l0
LmZyYW1ld29yay9WZXJzaW9ucy9BL1BERktpdAogICAgMHg3ZmZmM2U2NmIwMDAgLSAgICAgMHg3
ZmZmM2U3ODJmZjkgIGNvbS5hcHBsZS5QZW5jaWxLaXQgKDEuMCAtIDEpIDxBRDNDNkQ4Ni0xN0Q2
LTM1QTMtQUU1Qy1CRURCODcyMTk3QkY+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1BlbmNp
bEtpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9QZW5jaWxLaXQKICAgIDB4N2ZmZjNlYTIzMDAwIC0g
ICAgIDB4N2ZmZjNlYTI5ZmY2ICBjb20uYXBwbGUuUHVzaEtpdCAoMS4wIC0gMSkgPEI0RTQ1MzY2
LThDNTEtMzI0OC1CREFGLTJFQ0ZFOTRENTM3OD4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mv
UHVzaEtpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9QdXNoS2l0CiAgICAweDdmZmYzZWI0YTAwMCAt
ICAgICAweDdmZmYzZWQ5MGZmNyAgY29tLmFwcGxlLmltYWdlS2l0ICgzLjAgLSAxMDgxKSA8RjBB
RDhENzEtRDZCRS0zQUJDLTlCNUYtOTM4MjVGM0Y5NkIxPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9RdWFydHouZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9JbWFnZUtpdC5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9JbWFnZUtpdAogICAgMHg3ZmZmM2VkOTEwMDAgLSAgICAgMHg3ZmZm
M2YyNTBmZmYgIGNvbS5hcHBsZS5RdWFydHpDb21wb3NlciAoNS4xIC0gMzc4KSA8MzUxNDQyQjMt
OTJDMS0zMEZCLUI1QkMtRTY0NzU5Q0NBNUZDPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9R
dWFydHouZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9RdWFydHpDb21wb3Nlci5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9RdWFydHpDb21wb3NlcgogICAgMHg3ZmZmM2YyNTEwMDAgLSAgICAg
MHg3ZmZmM2YyNzZmZmMgIGNvbS5hcHBsZS5xdWFydHpmaWx0ZXJzICgxLjEwLjAgLSBUYWcpIDxG
NDkxQ0I0Ni0zODM3LTM1MjUtQUUzMS0yM0VCODk2OTJCQTE+IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL1F1YXJ0ekZpbHRl
cnMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUXVhcnR6RmlsdGVycwogICAgMHg3ZmZmM2YyNzcwMDAg
LSAgICAgMHg3ZmZmM2YzODFmZjcgIGNvbS5hcHBsZS5RdWlja0xvb2tVSUZyYW1ld29yayAoNS4w
IC0gOTA2LjIpIDw3MzFBMUY1Ny0yMDY0LTM5NDEtODIzRS0yRDIzQkQxRDlDQjE+IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtz
L1F1aWNrTG9va1VJLmZyYW1ld29yay9WZXJzaW9ucy9BL1F1aWNrTG9va1VJCiAgICAweDdmZmYz
ZjM4MjAwMCAtICAgICAweDdmZmYzZjM4MmZmZiAgY29tLmFwcGxlLnF1YXJ0emZyYW1ld29yayAo
MS41IC0gMjMpIDxFMjM2OEFBRi01QjAxLTMyOEYtOUQ1RC05MDg5Q0JCOUM4RkE+IC9TeXN0ZW0v
TGlicmFyeS9GcmFtZXdvcmtzL1F1YXJ0ei5mcmFtZXdvcmsvVmVyc2lvbnMvQS9RdWFydHoKICAg
IDB4N2ZmZjNmMzgzMDAwIC0gICAgIDB4N2ZmZjNmNjA1ZmY5ICBjb20uYXBwbGUuUXVhcnR6Q29y
ZSAoMS4xMSAtIDg0MS4yKSA8NDQ0RTZGMjItREZBNi0zOTFCLUI1MUYtQTk2QUU2OUU1MjREPiAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9B
L1F1YXJ0ekNvcmUKICAgIDB4N2ZmZjNmNjA2MDAwIC0gICAgIDB4N2ZmZjNmNjVmZmY1ICBjb20u
YXBwbGUuUXVpY2tMb29rRnJhbWV3b3JrICg1LjAgLSA5MDYuMikgPEU2RjI1RDU2LUUwMDMtM0Iz
Qi04NTFCLTE1NjZDMTMyRTAwNj4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVpY2tMb29r
LmZyYW1ld29yay9WZXJzaW9ucy9BL1F1aWNrTG9vawogICAgMHg3ZmZmM2Y2NjAwMDAgLSAgICAg
MHg3ZmZmM2Y2OTVmZmMgIGNvbS5hcHBsZS5RdWlja0xvb2tUaHVtYm5haWxpbmcgKDEuMCAtIDEp
IDw0NjkyMDFBNC1DODdBLTMzNUYtOTFDMS04MTA1NUNGODk4NDQ+IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL1F1aWNrTG9va1RodW1ibmFpbGluZy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9RdWlj
a0xvb2tUaHVtYm5haWxpbmcKICAgIDB4N2ZmZjNmYjY2MDAwIC0gICAgIDB4N2ZmZjNmYjdlZmYw
ICBjb20uYXBwbGUuU2FmYXJpU2VydmljZXMuZnJhbWV3b3JrICgxNTYwOSAtIDE1NjA5LjIuOS4x
LjIpIDxEQkI1OERGMS0zREEyLTM1NTgtQjE4NS1CN0RBQUIwMDUxMTM+IC9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL1NhZmFyaVNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL1NhZmFyaVNl
cnZpY2VzCiAgICAweDdmZmY0MDE4NjAwMCAtICAgICAweDdmZmY0MDRjZmZmMSAgY29tLmFwcGxl
LnNlY3VyaXR5ICg3LjAgLSA1OTMwNi4xMjAuNykgPEFFQTMzNDY0LTE1MDctMzZGMS04Q0FFLUE4
NkVCNzg3RjlCNT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvU2VjdXJpdHkuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvU2VjdXJpdHkKICAgIDB4N2ZmZjQwNGQwMDAwIC0gICAgIDB4N2ZmZjQwNTU4
ZmZiICBjb20uYXBwbGUuc2VjdXJpdHlmb3VuZGF0aW9uICg2LjAgLSA1NTIzNi42MC4xKSA8Nzky
ODlGRTEtQ0I1Ri0zQkVGLUEzM0YtMTFBMjlBOTNBNjgxPiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9TZWN1cml0eUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvU2VjdXJpdHlGb3Vu
ZGF0aW9uCiAgICAweDdmZmY0MDU1OTAwMCAtICAgICAweDdmZmY0MDU4NmZmNyAgY29tLmFwcGxl
LnNlY3VyaXR5aW50ZXJmYWNlICgxMC4wIC0gNTUxMzkuMTIwLjEpIDxDQkMxQ0M1Qi02QzI0LTM4
NDMtOTM1Ri0wNTI3NjdGQkI2OUQ+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1NlY3VyaXR5
SW50ZXJmYWNlLmZyYW1ld29yay9WZXJzaW9ucy9BL1NlY3VyaXR5SW50ZXJmYWNlCiAgICAweDdm
ZmY0MDU4NzAwMCAtICAgICAweDdmZmY0MDU4YmZmOCAgY29tLmFwcGxlLnhwYy5TZXJ2aWNlTWFu
YWdlbWVudCAoMS4wIC0gMSkgPDQxOTREMjlELUYwRDQtMzNGOC04MzlBLUQwM0M2QzYyRDhEQj4g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvU2VydmljZU1hbmFnZW1lbnQuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvU2VydmljZU1hbmFnZW1lbnQKICAgIDB4N2ZmZjQwNThjMDAwIC0gICAgIDB4N2Zm
ZjQwNWRjZmZlICBjb20uYXBwbGUuc29jaWFsZC5Tb2NpYWwgKDYwOSkgPDkwQTA5NjlGLUM5QTEt
MzdDMC04QkM5LUQ1MTQwRDgwOEREMz4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvU29jaWFs
LmZyYW1ld29yay9WZXJzaW9ucy9BL1NvY2lhbAogICAgMHg3ZmZmNDEyMzcwMDAgLSAgICAgMHg3
ZmZmNDEyYTVmZjcgIGNvbS5hcHBsZS5TeXN0ZW1Db25maWd1cmF0aW9uICgxLjE5IC0gMS4xOSkg
PDBDRjg3MjZBLUJFNDEtM0UwNy1CODk1LUZCQzQ0Qjc1NDUwRT4gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvU3lzdGVtQ29uZmlndXJhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TeXN0ZW1D
b25maWd1cmF0aW9uCiAgICAweDdmZmY0MTQ2ZTAwMCAtICAgICAweDdmZmY0MTRhM2ZmMiAgY29t
LmFwcGxlLlVzZXJOb3RpZmljYXRpb25zICgxLjAgLSA/Pz8pIDw3NzM0ODZCMy03NDgzLTMxOTYt
QTU2OC1CMEVEMTQ5M0UwNUE+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1VzZXJOb3RpZmlj
YXRpb25zLmZyYW1ld29yay9WZXJzaW9ucy9BL1VzZXJOb3RpZmljYXRpb25zCiAgICAweDdmZmY0
MTRhNTAwMCAtICAgICAweDdmZmY0MTUyM2ZmNyAgY29tLmFwcGxlLlZpZGVvU3Vic2NyaWJlckFj
Y291bnQuVmlkZW9TdWJzY3JpYmVyQWNjb3VudEZyYW1ld29yayAoMS4wIC0gMzMxLjYwLjQpIDw1
MzIyODJDOS05QzRBLTNBRDktQkRCQi02MjA3NEI2MkI3NDA+IC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1ZpZGVvU3Vic2NyaWJlckFjY291bnQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvVmlkZW9T
dWJzY3JpYmVyQWNjb3VudAogICAgMHg3ZmZmNDE1MjQwMDAgLSAgICAgMHg3ZmZmNDE4YTdmZjQg
IGNvbS5hcHBsZS5WaWRlb1Rvb2xib3ggKDEuMCAtIDI2MjAuMTEuNDAuMikgPDUzRTBEODUyLTYx
Q0EtMzRGRS05QTlCLTc4ODcwOEFERTQ5NT4gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvVmlk
ZW9Ub29sYm94LmZyYW1ld29yay9WZXJzaW9ucy9BL1ZpZGVvVG9vbGJveAogICAgMHg3ZmZmNDE4
YTgwMDAgLSAgICAgMHg3ZmZmNDFiMmJmZmYgIGNvbS5hcHBsZS5WTiAoMy4wLjk3IC0gMy4wLjk3
KSA8QTU2QjEzRDItNUUwMi0zNTUyLTkxRjQtNUNCQUYyREU1MTY1PiAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9WaXNpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvVmlzaW9uCiAgICAweDdmZmY0
MWI0OTAwMCAtICAgICAweDdmZmY0MjJlNmZmZiAgbGlid2VicnRjLmR5bGliICg3NjA5LjIuOS4x
LjIpIDw2MDQ3QjdEQS0xRjc5LTM1RDYtQjY1Qi1GOTM2QjBFMzg5RUU+IC9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL1dlYkNv
cmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9saWJ3ZWJydGMuZHlsaWIKICAgIDB4
N2ZmZjQyMmU3MDAwIC0gICAgIDB4N2ZmZjQ0NTQ4ZmY0ICBjb20uYXBwbGUuV2ViQ29yZSAoMTU2
MDkgLSAxNTYwOS4yLjkuMS4yKSA8MDZCMDY2NDQtMDdGOS0zRDA5LUE1MEUtRjE0RDcwRkY2Njcw
PiAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9XZWJLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
RnJhbWV3b3Jrcy9XZWJDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL1dlYkNvcmUKICAgIDB4N2Zm
ZjQ0NTQ5MDAwIC0gICAgIDB4N2ZmZjQ0NzU1ZmZjICBjb20uYXBwbGUuV2ViS2l0TGVnYWN5ICgx
NTYwOSAtIDE1NjA5LjIuOS4xLjIpIDw3NTgwRUYxQi1GNDNCLTM1MzItOTM0MC1BQjIwMzQwRDA4
NTA+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9GcmFtZXdvcmtzL1dlYktpdExlZ2FjeS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9XZWJLaXRMZWdh
Y3kKICAgIDB4N2ZmZjQ0NzU2MDAwIC0gICAgIDB4N2ZmZjQ0ZTU3ZmZhICBjb20uYXBwbGUuV2Vi
S2l0ICgxNTYwOSAtIDE1NjA5LjIuOS4xLjIpIDw1MTQ4QTRFMi0wQzVBLTNERkQtOEEwMi02NzZE
N0NDNkVENEY+IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9XZWJLaXQKICAgIDB4N2ZmZjQ0Zjg5MDAwIC0gICAgIDB4N2ZmZjQ0ZmRlZmYwICBj
b20uYXBwbGUuQU9TQWNjb3VudHMgKDEuMy4xIC0gMTU1KSA8RjdFRThDOTctRDQzNS0zOTRGLTg4
N0MtQUQ3OTk2ODFFRTZDPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQU9TQWNj
b3VudHMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQU9TQWNjb3VudHMKICAgIDB4N2ZmZjQ0ZmUxMDAw
IC0gICAgIDB4N2ZmZjQ1MGY0ZmY4ICBjb20uYXBwbGUuQU9TS2l0ICgxLjA3IC0gMjc3KSA8NTlF
MDI0NkEtRDlGRS0zMDI4LUIzOEYtNERFMzY1QkZCRDc0PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvQU9TS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0FPU0tpdAogICAgMHg3ZmZm
NDUwZjUwMDAgLSAgICAgMHg3ZmZmNDUwZjVmZmIgIGNvbS5hcHBsZS5BT1NNaWdyYXRlICgxLjAg
LSAxKSA8Q0Y0QTVEOTQtRUMyMi0zRTc0LUIyOTUtQzhGMzhGQTVFM0VCPiAvU3lzdGVtL0xpYnJh
cnkvUHJpdmF0ZUZyYW1ld29ya3MvQU9TTWlncmF0ZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9BT1NN
aWdyYXRlCiAgICAweDdmZmY0NTIwNjAwMCAtICAgICAweDdmZmY0NTJjYmZmNyAgY29tLmFwcGxl
LkFQRlMgKDE0MTIuMTIwLjIgLSAxNDEyLjEyMC4yKSA8MUU4RkQ1MTEtRkRDNC0zMUEyLUFDREUt
RUI1MTkyMDMyQkM2PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQVBGUy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9BUEZTCiAgICAweDdmZmY0NTkxMjAwMCAtICAgICAweDdmZmY0NTkx
ZGZmYyAgY29tLmFwcGxlLmFjY2Vzc2liaWxpdHkuQVhDb3JlVXRpbGl0aWVzICgxLjAgLSAxKSA8
OUUwMzY3RTYtNkE0Ri0zMUZFLUE0OTMtOUYzREY3NTEwQ0EwPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvQVhDb3JlVXRpbGl0aWVzLmZyYW1ld29yay9WZXJzaW9ucy9BL0FYQ29y
ZVV0aWxpdGllcwogICAgMHg3ZmZmNDVjMTYwMDAgLSAgICAgMHg3ZmZmNDVjYzdmZmUgIGNvbS5h
cHBsZS5hY2NvdW50cy5BY2NvdW50c0RhZW1vbiAoMTEzIC0gMTEzKSA8MkMyNzVGQ0YtMjFBQi0z
QzQxLUIzNDctM0NGMURDNDVGOEQzPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
QWNjb3VudHNEYWVtb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQWNjb3VudHNEYWVtb24KICAgIDB4
N2ZmZjQ2MjZhMDAwIC0gICAgIDB4N2ZmZjQ2M2JmZmYwICBjb20uYXBwbGUuQWRkcmVzc0Jvb2su
Y29yZSAoMS4wIC0gMSkgPDg3QjlFMzMxLTQ5RTEtMzYwNy1CODEzLUU2QzdDMEMzOTU3OT4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0FkZHJlc3NCb29rQ29yZS5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9BZGRyZXNzQm9va0NvcmUKICAgIDB4N2ZmZjQ2M2RiMDAwIC0gICAgIDB4N2Zm
ZjQ2M2RjZmYxICBjb20uYXBwbGUuQWdncmVnYXRlRGljdGlvbmFyeSAoMS4wIC0gMSkgPEI5MDdD
RTdBLTAxMjItM0U2My1CRjM5LTBBMjQyQjBERDdDND4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVG
cmFtZXdvcmtzL0FnZ3JlZ2F0ZURpY3Rpb25hcnkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQWdncmVn
YXRlRGljdGlvbmFyeQogICAgMHg3ZmZmNDY4MmEwMDAgLSAgICAgMHg3ZmZmNDY5NzVmZjUgIGNv
bS5hcHBsZS5Bbm5vdGF0aW9uS2l0ICgxLjAgLSAzMjUuOSkgPEU5QjBGNzRCLUNCMTYtM0UwNy05
MDE1LThDQkYxNThFQjA4RD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Fubm90
YXRpb25LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQW5ub3RhdGlvbktpdAogICAgMHg3ZmZmNDY5
NzYwMDAgLSAgICAgMHg3ZmZmNDY5OTNmZjQgIGNvbS5hcHBsZS5BcHBDb250YWluZXIgKDQuMCAt
IDQ0OC4xMDAuNikgPDlDMkQwMDY1LTlCMzgtM0QxQy1BMDkwLTQ2RjEyOUExQjNDQT4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0FwcENvbnRhaW5lci5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9BcHBDb250YWluZXIKICAgIDB4N2ZmZjQ2OTk0MDAwIC0gICAgIDB4N2ZmZjQ2OWI0ZmZm
ICBjb20uYXBwbGUuQXBwU1NPICgxLjAgLSAxKSA8ODM3RjA1ODYtMTM2NS0zNDg3LUE5NzktMDgw
MEQwOUQ4QjM2PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXBwU1NPLmZyYW1l
d29yay9WZXJzaW9ucy9BL0FwcFNTTwogICAgMHg3ZmZmNDY5ZTgwMDAgLSAgICAgMHg3ZmZmNDY5
ZjZmZjcgIGNvbS5hcHBsZS5BcHBTYW5kYm94ICg0LjAgLSA0NDguMTAwLjYpIDw3REFCNThCMS04
MTc2LTNGQjAtQTdCMC04QTM4RTExOEU5MEI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9BcHBTYW5kYm94LmZyYW1ld29yay9WZXJzaW9ucy9BL0FwcFNhbmRib3gKICAgIDB4N2Zm
ZjQ2ZGUwMDAwIC0gICAgIDB4N2ZmZjQ2ZTQ1ZmY3ICBjb20uYXBwbGUuQXBwU3VwcG9ydCAoMS4w
LjAgLSAyOSkgPEI5RjUyNTA5LTI0MUEtM0MxNy1BOTA3LTg4RkQ4OUY2MEFGQj4gL1N5c3RlbS9M
aWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0FwcFN1cHBvcnQuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
QXBwU3VwcG9ydAogICAgMHg3ZmZmNDZlNDYwMDAgLSAgICAgMHg3ZmZmNDZlNzBmZjYgIGNvbS5h
cHBsZS5BcHBTdXBwb3J0VUkgKDEuMCAtIDMyLjQpIDw2NUExNzcwMC0xQzM2LTNDN0QtODlGMS1E
Mjk4MTdCMzU2QkQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9BcHBTdXBwb3J0
VUkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQXBwU3VwcG9ydFVJCiAgICAweDdmZmY0NmU3MTAwMCAt
ICAgICAweDdmZmY0NmU5NWZmYiAgY29tLmFwcGxlLmZyYW1ld29yay5BcHBsZTgwMjExICgxMy4w
IC0gMTYxMC4xKSA8QjRCODBDRDYtQjM4RS0zNzQ4LUIzMEItNTA4OENDRTlBN0E4PiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXBwbGU4MDIxMS5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9BcHBsZTgwMjExCiAgICAweDdmZmY0NmU5NjAwMCAtICAgICAweDdmZmY0NmZjOWZmMyAgY29t
LmFwcGxlLkFwcGxlQWNjb3VudCAoMS4wIC0gMS4wKSA8QjBBQjI0RTQtQjRFMi0zMUFELTkyNDAt
MDg3NTNDMzg4NzRGPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXBwbGVBY2Nv
dW50LmZyYW1ld29yay9WZXJzaW9ucy9BL0FwcGxlQWNjb3VudAogICAgMHg3ZmZmNDcxNTMwMDAg
LSAgICAgMHg3ZmZmNDcxNjJmZDcgIGNvbS5hcHBsZS5BcHBsZUZTQ29tcHJlc3Npb24gKDExOS4x
MDAuMSAtIDEuMCkgPDJFNzVDRjUxLUI2OTMtMzI3NS05QTRGLTQwNTcxRDQ4NzQ1RT4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0FwcGxlRlNDb21wcmVzc2lvbi5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9BcHBsZUZTQ29tcHJlc3Npb24KICAgIDB4N2ZmZjQ3MjYxMDAwIC0gICAgIDB4
N2ZmZjQ3MjZjZmY3ICBjb20uYXBwbGUuQXBwbGVJREF1dGhTdXBwb3J0ICgxLjAgLSAxKSA8RjQ2
NTE2NTQtRTI0Ri0zQkY0LThEREYtOEY5MUU1MjE5QkE0PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvQXBwbGVJREF1dGhTdXBwb3J0LmZyYW1ld29yay9WZXJzaW9ucy9BL0FwcGxl
SURBdXRoU3VwcG9ydAogICAgMHg3ZmZmNDcyNmQwMDAgLSAgICAgMHg3ZmZmNDcyYWRmZjEgIGNv
bS5hcHBsZS5BcHBsZUlEU1NPQXV0aGVudGljYXRpb24gKDEuMCAtIDEpIDw3QUJEMkYwRi1BRUY0
LTMyRkQtQjNERS04NzRCREI0OUY5NTM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9BcHBsZUlEU1NPQXV0aGVudGljYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQXBwbGVJRFNT
T0F1dGhlbnRpY2F0aW9uCiAgICAweDdmZmY0NzJhZTAwMCAtICAgICAweDdmZmY0NzJmNmZmNyAg
Y29tLmFwcGxlLkFwcGxlSlBFRyAoMS4wIC0gMSkgPDQ2NTVGRjcwLTk3NzItM0Q3Qy04MTU5LTVB
NUU1NkM5Rjg0Qj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0FwcGxlSlBFRy5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9BcHBsZUpQRUcKICAgIDB4N2ZmZjQ3MmY3MDAwIC0gICAgIDB4
N2ZmZjQ3MzA3ZmY3ICBjb20uYXBwbGUuQXBwbGVMREFQICgxMC4xNSAtIDUyKSA8MENCRDZDMUQt
QjA4My0zODU4LTk4OEUtRjlCM0UwM0NBNzQwPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvQXBwbGVMREFQLmZyYW1ld29yay9WZXJzaW9ucy9BL0FwcGxlTERBUAogICAgMHg3ZmZm
NDczMDgwMDAgLSAgICAgMHg3ZmZmNDc2YWNmZmQgIGNvbS5hcHBsZS5BcHBsZU1lZGlhU2Vydmlj
ZXMgKDEuMCAtIDEpIDw1NDcyNkMxMy01REEzLTNGMEYtQTYzOC1FRUMwMjhCRTVCM0E+IC9TeXN0
ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9BcHBsZU1lZGlhU2VydmljZXMuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvQXBwbGVNZWRpYVNlcnZpY2VzCiAgICAweDdmZmY0NzZhZDAwMCAtICAgICAw
eDdmZmY0NzZiOGZmYyAgY29tLmFwcGxlLkFwcGxlTWVkaWFTZXJ2aWNlc1VJICgxLjAgLSAxKSA8
MENFQUVCQUQtRjBCMi0zNTY0LTg3NTctRDE1RUVGMEQyM0Q4PiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvQXBwbGVNZWRpYVNlcnZpY2VzVUkuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
QXBwbGVNZWRpYVNlcnZpY2VzVUkKICAgIDB4N2ZmZjQ3NmI5MDAwIC0gICAgIDB4N2ZmZjQ3NmRm
ZmZiICBjb20uYXBwbGUuYXBzLmZyYW1ld29yayAoNC4wIC0gNC4wKSA8MzRGMEY5OTEtMkQwRi0z
Mzc2LUI1QjItQkRFRDIxMDg1NTJBPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
QXBwbGVQdXNoU2VydmljZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9BcHBsZVB1c2hTZXJ2aWNlCiAg
ICAweDdmZmY0NzZlMDAwMCAtICAgICAweDdmZmY0NzZlNGZmNyAgY29tLmFwcGxlLkFwcGxlU1JQ
ICg1LjAgLSAxKSA8QjY4M0FENTUtQTEyMS0zMURELTlBODctM0EzMUMzNUZFQUJGPiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXBwbGVTUlAuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
QXBwbGVTUlAKICAgIDB4N2ZmZjQ3NmU1MDAwIC0gICAgIDB4N2ZmZjQ3NzA3ZmZmICBjb20uYXBw
bGUuYXBwbGVzYXVjZSAoMS4wIC0gMTYuMjUpIDwzM0I2NkI3MS02NEE0LTM2NUQtOTk1My1FMDU0
NUU2OUE1RTc+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9BcHBsZVNhdWNlLmZy
YW1ld29yay9WZXJzaW9ucy9BL0FwcGxlU2F1Y2UKICAgIDB4N2ZmZjQ3N2M2MDAwIC0gICAgIDB4
N2ZmZjQ3N2M5ZmZiICBjb20uYXBwbGUuQXBwbGVTeXN0ZW1JbmZvICgzLjEuNSAtIDMuMS41KSA8
OTI1ODBFRTMtNzRCRi0zNDg4LTkwRUQtQzhFQkQ3QTFCNEMzPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvQXBwbGVTeXN0ZW1JbmZvLmZyYW1ld29yay9WZXJzaW9ucy9BL0FwcGxl
U3lzdGVtSW5mbwogICAgMHg3ZmZmNDc3Y2EwMDAgLSAgICAgMHg3ZmZmNDc4MWFmZjcgIGNvbS5h
cHBsZS5BcHBsZVZBRnJhbWV3b3JrICg2LjEuMiAtIDYuMS4yKSA8MzlDMzU4M0QtQzgyNC0zMTY4
LUI2N0EtNDk4NDg3RkQwM0Q5PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXBw
bGVWQS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9BcHBsZVZBCiAgICAweDdmZmY0Nzg2MzAwMCAtICAg
ICAweDdmZmY0Nzg3MmZmOSAgY29tLmFwcGxlLkFzc2VydGlvblNlcnZpY2VzICgxLjAgLSAyMjMu
MTAwLjMxKSA8NDc4RDIwMDQtOUI4NC0zQUU5LTlBMEItMEEwQjY4RUQwMjhGPiAvU3lzdGVtL0xp
YnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXNzZXJ0aW9uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvQXNzZXJ0aW9uU2VydmljZXMKICAgIDB4N2ZmZjQ3ZGI0MDAwIC0gICAgIDB4N2ZmZjQ4
MWFmZmY4ICBjb20uYXBwbGUuYXVkaW8uQXVkaW9SZXNvdXJjZUFyYml0cmF0aW9uICgxLjAgLSAx
KSA8OUFCRkU0MUEtRkQwMS0zMTExLUJBNzMtRDJERDFCRjk2NTI1PiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvQXVkaW9SZXNvdXJjZUFyYml0cmF0aW9uLmZyYW1ld29yay9WZXJz
aW9ucy9BL0F1ZGlvUmVzb3VyY2VBcmJpdHJhdGlvbgogICAgMHg3ZmZmNDg0MDUwMDAgLSAgICAg
MHg3ZmZmNDg2NDVmZTAgIGNvbS5hcHBsZS5hdWRpby5BdWRpb1Rvb2xib3hDb3JlICgxLjAgLSAx
MTA0Ljg0KSA8RkExN0U4OTItNkExQS0zMDlELTk1QzctMzBBQ0ZDNDQzMTlDPiAvU3lzdGVtL0xp
YnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQXVkaW9Ub29sYm94Q29yZS5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9BdWRpb1Rvb2xib3hDb3JlCiAgICAweDdmZmY0ODY0OTAwMCAtICAgICAweDdmZmY0ODc2
NWZmMCAgY29tLmFwcGxlLkF1dGhLaXQgKDEuMCAtIDEpIDwzNzVDMzg4Ni01NDMwLTNDMDItQkQy
Qy00MjQ0QkY0OTBBQkE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9BdXRoS2l0
LmZyYW1ld29yay9WZXJzaW9ucy9BL0F1dGhLaXQKICAgIDB4N2ZmZjQ4NzY2MDAwIC0gICAgIDB4
N2ZmZjQ4ODAxZmZkICBjb20uYXBwbGUuQXV0aEtpdFVJICgxLjAgLSAxKSA8RjMyMkI2MTYtMTk3
Ri0zNTcxLTkxMkMtNDVEQTc3REM3MjQ0PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29y
a3MvQXV0aEtpdFVJLmZyYW1ld29yay9WZXJzaW9ucy9BL0F1dGhLaXRVSQogICAgMHg3ZmZmNDg5
MGIwMDAgLSAgICAgMHg3ZmZmNDg5MjFmZjggIGNvbS5hcHBsZS5CYWNrQm9hcmRTZXJ2aWNlcyAo
MS4wIC0gMS4wKSA8MEY1M0M1NjYtQkIxMC0zQ0IxLThGN0MtNENBRUVFMkRCREYzPiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQmFja0JvYXJkU2VydmljZXMuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvQmFja0JvYXJkU2VydmljZXMKICAgIDB4N2ZmZjQ4OTIyMDAwIC0gICAgIDB4N2Zm
ZjQ4OTJiZmY3ICBjb20uYXBwbGUuY29yZXNlcnZpY2VzLkJhY2tncm91bmRUYXNrTWFuYWdlbWVu
dCAoMS4wIC0gMTA0KSA8RjA3MEY0NDAtMjdBQi0zRkNGLTk2MDItRjI3OEMzMzJDQTAxPiAvU3lz
dGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQmFja2dyb3VuZFRhc2tNYW5hZ2VtZW50LmZy
YW1ld29yay9WZXJzaW9ucy9BL0JhY2tncm91bmRUYXNrTWFuYWdlbWVudAogICAgMHg3ZmZmNDg5
MmMwMDAgLSAgICAgMHg3ZmZmNDg5Y2RmZjUgIGNvbS5hcHBsZS5iYWNrdXAuZnJhbWV3b3JrICgx
LjExLjUgLSAxMjk4LjUuMTApIDw2MzdDQTM4OS02MjdBLTM2NUMtOThDMi1EMjk3QzQ3RDZFRTM+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9CYWNrdXAuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvQmFja3VwCiAgICAweDdmZmY0ODljZTAwMCAtICAgICAweDdmZmY0OGE1YWZmNiAgY29t
LmFwcGxlLkJhc2VCb2FyZCAoNDY2LjMgLSA0NjYuMykgPDE3MThBNDFBLTk5MjMtM0ZEMC05NkI4
LTgyMzc2RTE1M0QyNz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Jhc2VCb2Fy
ZC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9CYXNlQm9hcmQKICAgIDB4N2ZmZjQ4YTc5MDAwIC0gICAg
IDB4N2ZmZjQ4YTdmZmZhICBjb20uYXBwbGUuQmV6ZWxTZXJ2aWNlc0ZXICgzMzYgLSAzMzYpIDxB
QTAyNDRGNS1FNzdBLTM4QjUtOEE0RC1BQ0ZENTE2QzM4NTU+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9CZXplbFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0JlemVsU2Vy
dmljZXMKICAgIDB4N2ZmZjQ4YTgwMDAwIC0gICAgIDB4N2ZmZjQ4YTgyZmYwICBjb20uYXBwbGUu
QmlvS2l0QWdnRExpYnJhcnkgKDEuMCAtIDEpIDwwMzQ0NDc4My0wOUJCLTMxNzAtQThDMC1GREVE
RUQ0ODhFQjc+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9CaW9LaXRBZ2dELmZy
YW1ld29yay9WZXJzaW9ucy9BL0Jpb0tpdEFnZ0QKICAgIDB4N2ZmZjQ4YTgzMDAwIC0gICAgIDB4
N2ZmZjQ4YWJkZmY2ICBjb20uYXBwbGUuQmlvbWV0cmljS2l0ICgxLjAgLSAxODcuMTAwLjYpIDxD
NzIzMDdFNS0yNTVFLTM5QkMtOUVBMC01NUU0ODVBQkQ5NjI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9CaW9tZXRyaWNLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQmlvbWV0cmlj
S2l0CiAgICAweDdmZmY0OGIyYjAwMCAtICAgICAweDdmZmY0OGI1YmZmYSAgY29tLmFwcGxlLkJv
YXJkU2VydmljZXMgKDEuMCAtIDQ2Ni4zKSA8RkMwODMzMDMtQUQ5RC0zQ0JCLUE0QkEtQTlCQUZE
MjI0QjFCPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQm9hcmRTZXJ2aWNlcy5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9Cb2FyZFNlcnZpY2VzCiAgICAweDdmZmY0OGI1YzAwMCAtICAg
ICAweDdmZmY0OGI5OGZmNyAgY29tLmFwcGxlLmJvbSAoMTQuMCAtIDIxOS4yKSA8NTg2RjFEOUMt
MjNCMC0zRjM4LTlDNUItNzI4RTlERDhCOTUzPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvQm9tLmZyYW1ld29yay9WZXJzaW9ucy9BL0JvbQogICAgMHg3ZmZmNDhjOTYwMDAgLSAg
ICAgMHg3ZmZmNDhjOWRmZjIgIGNvbS5hcHBsZS5CcmlkZ2VPU1NvZnR3YXJlVXBkYXRlICgxLjAg
LSAxKSA8OTZDRDJENEQtMzU1RC0zMjUxLTlBOEItMUMwMjI0NzU4NUYzPiAvU3lzdGVtL0xpYnJh
cnkvUHJpdmF0ZUZyYW1ld29ya3MvQnJpZGdlT1NTb2Z0d2FyZVVwZGF0ZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9CcmlkZ2VPU1NvZnR3YXJlVXBkYXRlCiAgICAweDdmZmY0OGM5ZTAwMCAtICAgICAw
eDdmZmY0OGNhOGZmNyAgY29tLmFwcGxlLkJyaWRnZVhQQyAoMS4wIC0gMzcpIDxBRTg0NUFFRi01
N0VELTM3NzktOTM4NC0wNEQ5NkU5RDUyMjQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9CcmlkZ2VYUEMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQnJpZGdlWFBDCiAgICAweDdmZmY0
OGNiNjAwMCAtICAgICAweDdmZmY0OGNlZGZmNSAgY29tLmFwcGxlLkMyICgxLjMgLSA0OTUpIDw0
QzYyNENEQi1DMkE4LTMwMzktQkM0NS0yMjRGQjg2NzE5Njk+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9DMi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9DMgogICAgMHg3ZmZmNDhkZjAw
MDAgLSAgICAgMHg3ZmZmNDhlMThmZmMgIGNvbS5hcHBsZS5DYWNoZURlbGV0ZSAoMS4wIC0gMSkg
PDBDMDZEN0NDLUJGODYtMzM1MC05RDkwLTg4QTkyMkMyOENGMT4gL1N5c3RlbS9MaWJyYXJ5L1By
aXZhdGVGcmFtZXdvcmtzL0NhY2hlRGVsZXRlLmZyYW1ld29yay9WZXJzaW9ucy9BL0NhY2hlRGVs
ZXRlCiAgICAweDdmZmY0OGUxOTAwMCAtICAgICAweDdmZmY0OGU3M2ZmMiAgY29tLmFwcGxlLkNh
bERBViAoOC4wIC0gNzkwLjQuMSkgPDM0QUEzRDg2LTkxQTEtMzdEQy1BRDI0LUQ5NjdFMTJGNzQ5
RD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NhbERBVi5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9DYWxEQVYKICAgIDB4N2ZmZjQ5MDIzMDAwIC0gICAgIDB4N2ZmZjQ5MDRlZmZmICBj
b20uYXBwbGUuQ2FsZW5kYXJBZ2VudExpbmsgKDguMCAtIDI1MCkgPDAxNTk4MDg2LUNFQTgtMzVE
NS1BRTE0LUY1MTY2Rjc3Q0E4MT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Nh
bGVuZGFyQWdlbnRMaW5rLmZyYW1ld29yay9WZXJzaW9ucy9BL0NhbGVuZGFyQWdlbnRMaW5rCiAg
ICAweDdmZmY0OTA2NzAwMCAtICAgICAweDdmZmY0OTBkZmZmNiAgY29tLmFwcGxlLkNhbGVuZGFy
Rm91bmRhdGlvbiAoOC4wIC0gMTE0MC41LjEpIDxENjc1QUE2MC00OUQ4LTNBMDItOTNENi01NTJB
OTMxNURGQjc+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9DYWxlbmRhckZvdW5k
YXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ2FsZW5kYXJGb3VuZGF0aW9uCiAgICAweDdmZmY0
OTExNjAwMCAtICAgICAweDdmZmY0OTQwZWZmZSAgY29tLmFwcGxlLkNhbGVuZGFyUGVyc2lzdGVu
Y2UgKDguMCAtIDEwNDAuNS4xKSA8NEEzRkQwRUItOTAwOC0zQ0MzLUExNkItMkU2RDBGRjEwMkVF
PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ2FsZW5kYXJQZXJzaXN0ZW5jZS5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9DYWxlbmRhclBlcnNpc3RlbmNlCiAgICAweDdmZmY0OTY2YTAw
MCAtICAgICAweDdmZmY0OTZhY2ZmMSAgY29tLmFwcGxlLkNhdGFseXN0ICgxLjAgLSA2LjEpIDwx
NTQyQzQ1OC0zNTE4LTMyMzEtQUM2My02M0I3RjhCNkJBMzA+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9DYXRhbHlzdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9DYXRhbHlzdAogICAg
MHg3ZmZmNDk2YWQwMDAgLSAgICAgMHg3ZmZmNDk2YmVmZjEgIGNvbS5hcHBsZS5mcmFtZXdvcmsu
Y3RjYXRlZ29yaWVzICgxLjAgLSA1LjcpIDw3RkEyRDE3Qy03QUE0LTM0NjYtQjBFOS1BNkUwRTk4
QkI4RDY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9DYXRlZ29yaWVzLmZyYW1l
d29yay9WZXJzaW9ucy9BL0NhdGVnb3JpZXMKICAgIDB4N2ZmZjQ5NzE3MDAwIC0gICAgIDB4N2Zm
ZjQ5NzY2ZmZmICBjb20uYXBwbGUuQ2h1bmtpbmdMaWJyYXJ5ICgzMDcgLSAzMDcpIDwzMkUwRjFB
MS05REQ2LTNCNTItOTFDMi05MzY0MzA0MUFBNjA+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJh
bWV3b3Jrcy9DaHVua2luZ0xpYnJhcnkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ2h1bmtpbmdMaWJy
YXJ5CiAgICAweDdmZmY0OTc2NzAwMCAtICAgICAweDdmZmY0OTdkNGZmNyAgY29tLmFwcGxlLkNs
YXNzS2l0ICgxLjIgLSAxNDUuNS4xNCkgPDBDRUNFOTM5LTdFMDQtMzQyMC04MUQ5LTdCMEZFQzAx
QzgyMj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NsYXNzS2l0LmZyYW1ld29y
ay9WZXJzaW9ucy9BL0NsYXNzS2l0CiAgICAweDdmZmY0OThjMDAwMCAtICAgICAweDdmZmY0OTk0
YmZmOCAgY29tLmFwcGxlLkNsb3VkRG9jcyAoMS4wIC0gNjk4LjE0KSA8NENGRjBERjAtOEE4OS0z
REFELThBMDctQTIwOEZEREQxNjNCPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
Q2xvdWREb2NzLmZyYW1ld29yay9WZXJzaW9ucy9BL0Nsb3VkRG9jcwogICAgMHg3ZmZmNGEzMDkw
MDAgLSAgICAgMHg3ZmZmNGEzMWJmZjggIGNvbS5hcHBsZS5DbG91ZFBob3RvU2VydmljZXNDb25m
aWd1cmF0aW9uICg1LjAgLSAxNTEuMTkuMTUwKSA8RTlFMjk3NUQtMDE0OC0zOTcxLTk1NzAtRUM3
MzE2NTMwQUNGPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ2xvdWRQaG90b1Nl
cnZpY2VzQ29uZmlndXJhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9DbG91ZFBob3RvU2Vydmlj
ZXNDb25maWd1cmF0aW9uCiAgICAweDdmZmY0YTMxYzAwMCAtICAgICAweDdmZmY0YTMzYmZmMiAg
Y29tLmFwcGxlLkNsb3VkU2VydmljZXMgKDEuMCAtIDM4NC4xMjEuMSkgPDJBNDI2NTJBLUYyQjYt
MzZBRi05QTAyLThFQkFBOUY3RDg0MT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
L0Nsb3VkU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ2xvdWRTZXJ2aWNlcwogICAgMHg3
ZmZmNGE1OWYwMDAgLSAgICAgMHg3ZmZmNGE2MDBmZjkgIGNvbS5hcHBsZS5Db21tZXJjZUtpdCAo
MS4yLjAgLSA3MDkuNi41KSA8M0FGNjU1MjUtMTYwRi0zQkI5LUI2N0UtNjEwMzdFMjgwMjg0PiAv
U3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29tbWVyY2VLaXQuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvQ29tbWVyY2VLaXQKICAgIDB4N2ZmZjRhNjAxMDAwIC0gICAgIDB4N2ZmZjRhNjBj
ZmY1ICBjb20uYXBwbGUuQ29tbWVyY2VDb3JlICgxLjAgLSA3MDkuNi41KSA8RjRGNTAxNjgtMTdG
NC0zRjgyLTk0MEQtQzgxNTNERjg5OTc5PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29y
a3MvQ29tbWVyY2VLaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9Db21tZXJjZUNv
cmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29tbWVyY2VDb3JlCiAgICAweDdmZmY0YTYwZDAwMCAt
ICAgICAweDdmZmY0YTYxZGZmYiAgY29tLmFwcGxlLkNvbW1vbkF1dGggKDQuMCAtIDIuMCkgPDkx
RUM4M0I1LTg1N0QtM0Q0Ri05M0IxLUFBRDdFMEUwMjlEOD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZh
dGVGcmFtZXdvcmtzL0NvbW1vbkF1dGguZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29tbW9uQXV0aAog
ICAgMHg3ZmZmNGE2MzEwMDAgLSAgICAgMHg3ZmZmNGE2NDhmZmYgIGNvbS5hcHBsZS5jb21tb251
dGlsaXRpZXMgKDguMCAtIDkwMCkgPDEyQzZERUU1LTE3NDAtMzlBNS05NzExLTZGODE1QzZENzdC
RD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvbW1vblV0aWxpdGllcy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9Db21tb25VdGlsaXRpZXMKICAgIDB4N2ZmZjRhNjQ5MDAwIC0gICAg
IDB4N2ZmZjRhNjRkZmZhICBjb20uYXBwbGUuY29tbXVuaWNhdGlvbnNmaWx0ZXIgKDEwLjAgLSAx
MDAwKSA8MDZDMTBDQ0UtNDUzRS0zRUE2LUFEREEtMjIyMDQ4MzFGNzc1PiAvU3lzdGVtL0xpYnJh
cnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29tbXVuaWNhdGlvbnNGaWx0ZXIuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvQ29tbXVuaWNhdGlvbnNGaWx0ZXIKICAgIDB4N2ZmZjRhNjY3MDAwIC0gICAgIDB4N2Zm
ZjRhNzg3ZmY2ICBjb20uYXBwbGUuQ29uZmlndXJhdGlvbkVuZ2luZU1vZGVsICgxLjAgLSAzMi40
KSA8NDc2Rjc0RTQtNEQxOC0zNzdFLTgzRDItODZFRDA0MTgyNTU2PiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvQ29uZmlndXJhdGlvbkVuZ2luZU1vZGVsLmZyYW1ld29yay9WZXJz
aW9ucy9BL0NvbmZpZ3VyYXRpb25FbmdpbmVNb2RlbAogICAgMHg3ZmZmNGE3ODgwMDAgLSAgICAg
MHg3ZmZmNGE4MGJmZjEgIGNvbS5hcHBsZS5mcmFtZXdvcmsuQ29uZmlndXJhdGlvblByb2ZpbGVz
ICgxMi4yIC0gMTI4NikgPEU2OUM0ODFCLTI4RTktMzA0NC04QjdELThGNDczQURFRDIwMj4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvbmZpZ3VyYXRpb25Qcm9maWxlcy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9Db25maWd1cmF0aW9uUHJvZmlsZXMKICAgIDB4N2ZmZjRhOGRjMDAw
IC0gICAgIDB4N2ZmZjRhOTE4ZmZhICBjb20uYXBwbGUuY29udGFjdHMuQ29udGFjdHNBdXRvY29t
cGxldGUgKDEuMCAtIDExMzgpIDxFOUY5M0Q5Qy1GNTJCLTNEREUtQkU2RC1CM0ZGODcwMTBGRjk+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Db250YWN0c0F1dG9jb21wbGV0ZS5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9Db250YWN0c0F1dG9jb21wbGV0ZQogICAgMHg3ZmZmNGE5MmMw
MDAgLSAgICAgMHg3ZmZmNGE5NDNmZmEgIGNvbS5hcHBsZS5jb250YWN0cy5kb25hdGlvbiAoMS4w
IC0gMSkgPDAyNkZEOEIwLUMxRUUtMzRENy04OTQyLTYwQTMzNDdCOTZGMz4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvbnRhY3RzRG9uYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25z
L0EvQ29udGFjdHNEb25hdGlvbgogICAgMHg3ZmZmNGE5NDkwMDAgLSAgICAgMHg3ZmZmNGE5Y2Rm
ZjEgIGNvbS5hcHBsZS5BZGRyZXNzQm9vay5Db250YWN0c0ZvdW5kYXRpb24gKDguMCAtIDExMTgu
OCkgPERDQzkxN0I5LURBQ0ItMzYxNS1BMDJDLUJGMjU4MjMyNTkwMT4gL1N5c3RlbS9MaWJyYXJ5
L1ByaXZhdGVGcmFtZXdvcmtzL0NvbnRhY3RzRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9Db250YWN0c0ZvdW5kYXRpb24KICAgIDB4N2ZmZjRhOWNlMDAwIC0gICAgIDB4N2ZmZjRhYTBi
ZmYwICBjb20uYXBwbGUuY29udGFjdHMuQ29udGFjdHNQZXJzaXN0ZW5jZSAoMS4wIC0gMzQ1NS4x
OCkgPEE3N0FBNTU0LTM0MEItMzQ3OC1BMTZFLUYxRkQwQzFERDA4Qj4gL1N5c3RlbS9MaWJyYXJ5
L1ByaXZhdGVGcmFtZXdvcmtzL0NvbnRhY3RzUGVyc2lzdGVuY2UuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvQ29udGFjdHNQZXJzaXN0ZW5jZQogICAgMHg3ZmZmNGFhMGMwMDAgLSAgICAgMHg3ZmZmNGFh
N2ZmZjUgIGNvbS5hcHBsZS5Db250YWN0cy5Db250YWN0c1VJQ29yZSAoMS4wIC0gOTk5LjkuOSkg
PEM3RTk1QzFGLTExRTYtMzY5QS1CQTgyLThBOUI3RUFGNzJBQT4gL1N5c3RlbS9MaWJyYXJ5L1By
aXZhdGVGcmFtZXdvcmtzL0NvbnRhY3RzVUlDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvbnRh
Y3RzVUlDb3JlCiAgICAweDdmZmY0YWMyZDAwMCAtICAgICAweDdmZmY0YWMzYWZmMSAgY29tLmFw
cGxlLnNpcmkuY29udGV4dC5Db250ZXh0S2l0ICgxLjAgLSAxKSA8ODIwQTREQjItNjczMi0zQzU5
LTg5QjYtQzUyOUQ0NjM4NkJGPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29u
dGV4dEtpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db250ZXh0S2l0CiAgICAweDdmZmY0YWQ0YzAw
MCAtICAgICAweDdmZmY0YjEyMWZjOCAgY29tLmFwcGxlLkNvcmVBVUMgKDI4My4wLjAgLSAyODMu
MC4wKSA8QkE5NTIyRTUtOTVEMC0zMEQwLUJFRjQtNjkxQ0VCNTEwMzVCPiAvU3lzdGVtL0xpYnJh
cnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29yZUFVQy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlQVVD
CiAgICAweDdmZmY0YjEyMjAwMCAtICAgICAweDdmZmY0YjE0ZmZmNyAgY29tLmFwcGxlLkNvcmVB
VkNIRCAoNi4xLjAgLSA2MTAwLjQuMSkgPDE0RkM1NDlCLTg2QkQtMzk2QS1CMDNFLTZGNTIxOTQ4
Mjk0Mz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVBVkNIRC5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9Db3JlQVZDSEQKICAgIDB4N2ZmZjRiMTcyMDAwIC0gICAgIDB4N2ZmZjRi
MTkxZmZjICBjb20uYXBwbGUuYW5hbHl0aWNzZCAoMS4wIC0gMSkgPDAzODRDRDU3LTFBM0UtMzk3
QS1COUY2LTE5NzYxQTE0QTdEND4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Nv
cmVBbmFseXRpY3MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZUFuYWx5dGljcwogICAgMHg3ZmZm
NGIyOWEwMDAgLSAgICAgMHg3ZmZmNGIzMTBmZjcgIGNvbS5hcHBsZS5jb3JlYnJpZ2h0bmVzcyAo
MS4wIC0gMSkgPDg4QzhCRTcxLTg2RDctMzBBOC05QzA5LTAwMDcyRDkzNzk4RD4gL1N5c3RlbS9M
aWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVCcmlnaHRuZXNzLmZyYW1ld29yay9WZXJzaW9u
cy9BL0NvcmVCcmlnaHRuZXNzCiAgICAweDdmZmY0YjQwYTAwMCAtICAgICAweDdmZmY0YjQ5YmZm
ZSAgY29tLmFwcGxlLmNvcmVkYXYgKDEuMC4xIC0gODcwLjQuMSkgPDdBQjdBQ0NDLUU2MDctMzVG
Ri1BQzg1LTZDQkVCNjNCRjkzOT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Nv
cmVEQVYuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZURBVgogICAgMHg3ZmZmNGI0OWMwMDAgLSAg
ICAgMHg3ZmZmNGI0YTdmZjcgIGNvbS5hcHBsZS5mcmFtZXdvcmtzLkNvcmVEYWVtb24gKDEuMyAt
IDEuMykgPDhGOEU1ODZELUMxNTMtM0FCQS04OEI3LTZDRUM3RjQ3NkYwRT4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVEYWVtb24uZnJhbWV3b3JrL1ZlcnNpb25zL0IvQ29y
ZURhZW1vbgogICAgMHg3ZmZmNGI0YTgwMDAgLSAgICAgMHg3ZmZmNGI2YjNmZjEgIGNvbS5hcHBs
ZS5Db3JlRHVldCAoMS4wIC0gMSkgPEM5MzNFRTk5LUQ3RDItMzJGOC04Qjk2LTkzOEEwRkI2MTJG
Qj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVEdWV0LmZyYW1ld29yay9W
ZXJzaW9ucy9BL0NvcmVEdWV0CiAgICAweDdmZmY0YjZiNDAwMCAtICAgICAweDdmZmY0YjcwMWZm
MyAgY29tLmFwcGxlLmNvcmVkdWV0Y29udGV4dCAoMS4wIC0gMSkgPDY0RkQ2REJBLTg5RTMtMzRG
Qy1BNzU4LTMyNDBENDczN0Y3NT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Nv
cmVEdWV0Q29udGV4dC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlRHVldENvbnRleHQKICAgIDB4
N2ZmZjRiNzAyMDAwIC0gICAgIDB4N2ZmZjRiNzEyZmZlICBjb20uYXBwbGUuQ29yZUR1ZXREYWVt
b25Qcm90b2NvbCAoMS4wIC0gMSkgPDAwRDNFNzY4LUNCQkYtMzZERS1COEQ4LTIxOEY3QjU2MkY2
Rj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVEdWV0RGFlbW9uUHJvdG9j
b2wuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZUR1ZXREYWVtb25Qcm90b2NvbAogICAgMHg3ZmZm
NGI3MTUwMDAgLSAgICAgMHg3ZmZmNGI3MTdmZmYgIGNvbS5hcHBsZS5Db3JlRHVldERlYnVnTG9n
Z2luZyAoMS4wIC0gMSkgPERCRTE3Rjg2LTU5RDYtMzY4RC1BRUYxLTRCREY4NUQyRTczNT4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVEdWV0RGVidWdMb2dnaW5nLmZyYW1l
d29yay9WZXJzaW9ucy9BL0NvcmVEdWV0RGVidWdMb2dnaW5nCiAgICAweDdmZmY0YjcyODAwMCAt
ICAgICAweDdmZmY0YjczOGZmMyAgY29tLmFwcGxlLkNvcmVFbW9qaSAoMS4wIC0gMTA3LjEpIDxD
RENDQjRCMC1COThGLTM4RTgtOTU2OC1DODEzMjBFNzU2RUI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9Db3JlRW1vamkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZUVtb2ppCiAg
ICAweDdmZmY0YjczOTAwMCAtICAgICAweDdmZmY0Yjc1MGZmOCAgY29tLmFwcGxlLkNvcmVGb2xs
b3dVcC1PU1ggKDEuMCAtIDEpIDxDMzNCNkM3My1COEIxLTNERjktQkNBNC1EQzUwNUUxRTQ2Mjc+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Db3JlRm9sbG93VXAuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvQ29yZUZvbGxvd1VwCiAgICAweDdmZmY0YjhlZTAwMCAtICAgICAweDdmZmY0
YmEzYmZmZiAgY29tLmFwcGxlLkNvcmVIYW5kd3JpdGluZyAoMTYxIC0gMS4yKSA8N0Y2QkFBQkUt
NzFEMC0zNEY2LTg3NkQtQzZDNTMzMzFCNUYzPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvQ29yZUhhbmR3cml0aW5nLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVIYW5kd3JpdGlu
ZwogICAgMHg3ZmZmNGJkNzgwMDAgLSAgICAgMHg3ZmZmNGJkZTJmZjAgIGNvbS5hcHBsZS5Db3Jl
TkxQICgxLjAgLSAyMTMpIDw0MEZDNDZEMi04NDRDLTMyODItQThFNC02OUREODI3RjA1QzU+IC9T
eXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Db3JlTkxQLmZyYW1ld29yay9WZXJzaW9u
cy9BL0NvcmVOTFAKICAgIDB4N2ZmZjRjMGEwMDAwIC0gICAgIDB4N2ZmZjRjMGE0ZmZiICBjb20u
YXBwbGUuQ29yZU9wdGltaXphdGlvbiAoMS4wIC0gMSkgPDVCM0FBODFBLUY4REYtMzY4OC04NUZD
LTlBOTUxNzcyMERBNz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVPcHRp
bWl6YXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZU9wdGltaXphdGlvbgogICAgMHg3ZmZm
NGMwYTUwMDAgLSAgICAgMHg3ZmZmNGMxMmRmZmUgIGNvbS5hcHBsZS5Db3JlUERGICg0LjAgLSA1
MTguNC4xKSA8OThGMzlENDQtMDI4Qi0zNzE0LUFDNzYtMDg4NEQwOERENkNGPiAvU3lzdGVtL0xp
YnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29yZVBERi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3Jl
UERGCiAgICAweDdmZmY0YzEyZTAwMCAtICAgICAweDdmZmY0YzIwZmZmZCAgY29tLmFwcGxlLnNp
cmkucGFyc2VjLkNvcmVQYXJzZWMgKDEuMCAtIDMxMi41LjE3KSA8MjRBRDk0QjItQjZCRi0zOTNC
LTg4REUtRjlBNDczNTREQUUwPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29y
ZVBhcnNlYy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlUGFyc2VjCiAgICAweDdmZmY0YzIxMDAw
MCAtICAgICAweDdmZmY0YzIxOGZmOCAgY29tLmFwcGxlLkNvcmVQaG9uZU51bWJlcnMgKDEuMCAt
IDEpIDxCMkNFMTAwRC1CODJGLTM0ODEtODZGNi03Rjg1RkY4QkZBRkI+IC9TeXN0ZW0vTGlicmFy
eS9Qcml2YXRlRnJhbWV3b3Jrcy9Db3JlUGhvbmVOdW1iZXJzLmZyYW1ld29yay9WZXJzaW9ucy9B
L0NvcmVQaG9uZU51bWJlcnMKICAgIDB4N2ZmZjRjMjE5MDAwIC0gICAgIDB4N2ZmZjRjMjZiOTRi
ICBjb20uYXBwbGUuQ29yZVByZWRpY3Rpb24gKDEuMCAtIDEpIDxDRUQxMUJFMC04MDhDLTM5QzUt
OUZDRS0yOTM2ODMyMkU5QjE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Db3Jl
UHJlZGljdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlUHJlZGljdGlvbgogICAgMHg3ZmZm
NGNiMmMwMDAgLSAgICAgMHg3ZmZmNGNiMzdmZmEgIGNvbS5hcHBsZS5jb3JlcmVjZW50cyAoMS4w
IC0gMSkgPEJGNjVFODY4LTk2OTEtMzQwQS05NzMxLUI5Mjg3QTExMjM5OD4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVSZWNlbnRzLmZyYW1ld29yay9WZXJzaW9ucy9BL0Nv
cmVSZWNlbnRzCiAgICAweDdmZmY0Y2IzODAwMCAtICAgICAweDdmZmY0Y2JiOGZmZCAgY29tLmFw
cGxlLkNvcmVSZWNvZ25pdGlvbiAoMS4zIC0gMTU3KSA8RkQzQkY3QjMtNTMzRC0zQThDLTlENTUt
RDAzNEMyRjNEOEJFPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvQ29yZVJlY29n
bml0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVSZWNvZ25pdGlvbgogICAgMHg3ZmZmNGNi
ZWQwMDAgLSAgICAgMHg3ZmZmNGNjMDRmZmUgIGNvbS5hcHBsZS5Db3JlU0RCICgxMC4wIC0gMTAw
MCkgPDQ3QjI4NjQwLTU3QjgtMzhFOC1BRkQxLTg5NDQ4QjcwNDcyQz4gL1N5c3RlbS9MaWJyYXJ5
L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVTREIuZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29yZVNEQgog
ICAgMHg3ZmZmNGNjMDUwMDAgLSAgICAgMHg3ZmZmNGNjMjhmZmYgIGNvbS5hcHBsZS5Db3JlU1ZH
ICgxLjAgLSAxMjkpIDwzMTQxRDE5OC0wNTA3LTNGNzItQTJDOS03NTJFQUZFM0VFQjM+IC9TeXN0
ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Db3JlU1ZHLmZyYW1ld29yay9WZXJzaW9ucy9B
L0NvcmVTVkcKICAgIDB4N2ZmZjRjYzI5MDAwIC0gICAgIDB4N2ZmZjRjYzVjZmZmICBjb20uYXBw
bGUuQ29yZVNlcnZpY2VzSW50ZXJuYWwgKDQ0Ni43IC0gNDQ2LjcpIDxCMkNFQzUxNS0yMjI1LTND
QjEtQjM0QS05MDRBQUVBNTRGREY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9D
b3JlU2VydmljZXNJbnRlcm5hbC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Db3JlU2VydmljZXNJbnRl
cm5hbAogICAgMHg3ZmZmNGNjNWQwMDAgLSAgICAgMHg3ZmZmNGNjOGJmZmQgIGNvbS5hcHBsZS5D
U1N0b3JlICgxMDY5LjI0IC0gMTA2OS4yNCkgPEM5NkU1Q0U4LUQ2MDQtM0YxMy1CMDc5LUIyQkEz
M0I5MDA4MT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVTZXJ2aWNlc1N0
b3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVTZXJ2aWNlc1N0b3JlCiAgICAweDdmZmY0Y2Ux
MDAwMCAtICAgICAweDdmZmY0Y2ViM2ZmZiAgY29tLmFwcGxlLkNvcmVTdWdnZXN0aW9ucyAoMS4w
IC0gMTA1Mi4zNCkgPDE1OTg4Q0Y3LTZGMkMtMzk1NS1BQ0E5LTk3MERCQjU3MjYwOD4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVTdWdnZXN0aW9ucy5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9Db3JlU3VnZ2VzdGlvbnMKICAgIDB4N2ZmZjRkMWIwMDAwIC0gICAgIDB4N2ZmZjRk
MjQ2ZmY3ICBjb20uYXBwbGUuQ29yZVN5bWJvbGljYXRpb24gKDExLjQgLSA2NDUzNS4zMy4yKSA8
MEU3QTE1MjktQzczNy0zM0ZELUFBN0QtQTMyRUI4QjE5MkRBPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvQ29yZVN5bWJvbGljYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvQ29y
ZVN5bWJvbGljYXRpb24KICAgIDB4N2ZmZjRkMmRlMDAwIC0gICAgIDB4N2ZmZjRkNDBhZmY2ICBj
b20uYXBwbGUuY29yZXVpICgyLjEgLSA2MDkuNCkgPDlCOTNDQzQyLTgwNEItMzA1QS04RkNFLTVG
MDY4MjFCNTQ0Qz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NvcmVVSS5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9Db3JlVUkKICAgIDB4N2ZmZjRkNDBiMDAwIC0gICAgIDB4N2ZmZjRk
NWMxZmY1ICBjb20uYXBwbGUuQ29yZVV0aWxzICg2LjIuMSAtIDYyMS41KSA8Q0Q0QjU4RTUtMTQ5
NC0zNDU3LTg0RkYtMzg2OTM3OEUyREM5PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29y
a3MvQ29yZVV0aWxzLmZyYW1ld29yay9WZXJzaW9ucy9BL0NvcmVVdGlscwogICAgMHg3ZmZmNGQ2
ZmIwMDAgLSAgICAgMHg3ZmZmNGQ3MGVmZjEgIGNvbS5hcHBsZS5DcmFzaFJlcG9ydGVyU3VwcG9y
dCAoMTAuMTMgLSAxNTAxNikgPDgyN0Y0RTMxLTlGMjMtMzY4My1BQzVBLTU5Q0NBOTBGMjM1OT4g
L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0NyYXNoUmVwb3J0ZXJTdXBwb3J0LmZy
YW1ld29yay9WZXJzaW9ucy9BL0NyYXNoUmVwb3J0ZXJTdXBwb3J0CiAgICAweDdmZmY0ZDdjNzAw
MCAtICAgICAweDdmZmY0ZDdkOWZmOCAgY29tLmFwcGxlLmZyYW1ld29yay5ERlJGb3VuZGF0aW9u
ICgxLjAgLSAyNTIuNTAuMSkgPDE5Rjc5RDMyLTcxRDMtM0E4Ny05OEM5LUI1QzZDOTYwNzZDND4g
L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RGUkZvdW5kYXRpb24uZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvREZSRm91bmRhdGlvbgogICAgMHg3ZmZmNGQ3ZGEwMDAgLSAgICAgMHg3ZmZm
NGQ3ZGZmZmYgIGNvbS5hcHBsZS5EU0V4dGVybmFsRGlzcGxheSAoMy4xIC0gMzgwKSA8OTcxRjI0
RjEtQjFGQy0zNjc0LTlDMDAtRjg4RUVGOTREQzA1PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZy
YW1ld29ya3MvRFNFeHRlcm5hbERpc3BsYXkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRFNFeHRlcm5h
bERpc3BsYXkKICAgIDB4N2ZmZjRkODJlMDAwIC0gICAgIDB4N2ZmZjRkODY4ZmY0ICBjb20uYXBw
bGUuZGF0YWRldGVjdG9ycyAoNS4wIC0gNDEwLjEpIDwyODBGNzNBMy0wNTJBLTNFQTItQjJBNC1E
Nzk3RkJCNDRDQkM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EYXRhRGV0ZWN0
b3JzLmZyYW1ld29yay9WZXJzaW9ucy9BL0RhdGFEZXRlY3RvcnMKICAgIDB4N2ZmZjRkODY5MDAw
IC0gICAgIDB4N2ZmZjRkOGUzZmYwICBjb20uYXBwbGUuZGF0YWRldGVjdG9yc2NvcmUgKDguMCAt
IDY1OSkgPDlGRDlCREZBLTM3MjQtM0JFQS05NDZDLTA0NzM0NDcxOTZBMz4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RhdGFEZXRlY3RvcnNDb3JlLmZyYW1ld29yay9WZXJzaW9u
cy9BL0RhdGFEZXRlY3RvcnNDb3JlCiAgICAweDdmZmY0ZDhlNDAwMCAtICAgICAweDdmZmY0ZDhl
NGZmYiAgY29tLmFwcGxlLmRhdGFkZXRlY3RvcnMucGx1Z2lucy5waG9uZSAoOC4wIC0gNjU5KSA8
MDEyRjAxREQtMzM4My0zOTM5LTgxNUItRjMyMERBN0Q1MUFGPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvRGF0YURldGVjdG9yc0NvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUGx1
Z0lucy9QaG9uZU51bWJlcnMucGx1Z2luL1ZlcnNpb25zL0EvUGhvbmVOdW1iZXJzCiAgICAweDdm
ZmY0ZDhlNTAwMCAtICAgICAweDdmZmY0ZDkyZWZmZSAgY29tLmFwcGxlLkRhdGFEZXRlY3RvcnNO
YXR1cmFsTGFuZ3VhZ2UgKDEuMCAtIDE1NCkgPDQ5QTg2NEEyLTM4NkQtM0I5MC04MzcxLUFCQjFF
M0VCRTc2OT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RhdGFEZXRlY3RvcnNO
YXR1cmFsTGFuZ3VhZ2UuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRGF0YURldGVjdG9yc05hdHVyYWxM
YW5ndWFnZQogICAgMHg3ZmZmNGQ5MmYwMDAgLSAgICAgMHg3ZmZmNGQ5NmNmZjggIGNvbS5hcHBs
ZS5EZWJ1Z1N5bWJvbHMgKDE5NCAtIDE5NCkgPDlCQ0U2Njg1LTZDNDUtM0RGOS05OEVCLUZDRjgx
OTYxNjBGMD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RlYnVnU3ltYm9scy5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9EZWJ1Z1N5bWJvbHMKICAgIDB4N2ZmZjRkOTZkMDAwIC0gICAg
IDB4N2ZmZjRkYWY1ZmY2ICBjb20uYXBwbGUuZGVza3RvcHNlcnZpY2VzICgxLjE0LjUgLSAxMjgx
LjUuMykgPDc5OTcyQjhCLTdCNjAtM0FENS05QTVGLTE3OTc2REU4MDgwQj4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Rlc2t0b3BTZXJ2aWNlc1ByaXYuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvRGVza3RvcFNlcnZpY2VzUHJpdgogICAgMHg3ZmZmNGRiMGIwMDAgLSAgICAgMHg3ZmZm
NGRiMTdmZjggIGNvbS5hcHBsZS5EZXZpY2VJZGVudGl0eSAoMS4wIC0gMSkgPDZFMDE3MTk5LURG
QzAtMzQ2NC1BN0U1LUNCODkyOEZDMkY5Nz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzL0RldmljZUlkZW50aXR5LmZyYW1ld29yay9WZXJzaW9ucy9BL0RldmljZUlkZW50aXR5CiAg
ICAweDdmZmY0ZGIyZTAwMCAtICAgICAweDdmZmY0ZGI4NWZmNSAgY29tLmFwcGxlLkRldmljZU1h
bmFnZW1lbnQgKDEuMCAtIDMyLjQpIDxGNEVCNkYzNC04NUY5LTNGNDktQjA2Ny00MTAxRTExRDlD
N0I+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EZXZpY2VNYW5hZ2VtZW50LmZy
YW1ld29yay9WZXJzaW9ucy9BL0RldmljZU1hbmFnZW1lbnQKICAgIDB4N2ZmZjRkYmEzMDAwIC0g
ICAgIDB4N2ZmZjRkYmE0ZmZjICBjb20uYXBwbGUuZGlhZ25vc3RpY2xvZ2NvbGxlY3Rpb24gKDEw
LjAgLSAxMDAwKSA8MkNBQzkxMzYtQTdGQS0zMzU4LTk1MDUtMDVCRkJFNTRBNjg3PiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvRGlhZ25vc3RpY0xvZ0NvbGxlY3Rpb24uZnJhbWV3
b3JrL1ZlcnNpb25zL0EvRGlhZ25vc3RpY0xvZ0NvbGxlY3Rpb24KICAgIDB4N2ZmZjRkY2ZlMDAw
IC0gICAgIDB4N2ZmZjRkZDQxZmZmICBjb20uYXBwbGUuRGlmZmVyZW50aWFsUHJpdmFjeSAoMS4w
IC0gMSkgPDMxOUE0QkIxLURFMDctMzBDRS04MTc2LTBDRDEzMDlDRjA3Mz4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0RpZmZlcmVudGlhbFByaXZhY3kuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvRGlmZmVyZW50aWFsUHJpdmFjeQogICAgMHg3ZmZmNGRkOTIwMDAgLSAgICAgMHg3ZmZm
NGRlNWFmZmUgIGNvbS5hcHBsZS5EaXNrSW1hZ2VzRnJhbWV3b3JrICg1NTkuMTAwLjIgLSA1NTku
MTAwLjIpIDxERTI4MUU5Ni0yMUQwLTNCRTMtQkVFMC1EOTAxQjI0RDcxRUU+IC9TeXN0ZW0vTGli
cmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9EaXNrSW1hZ2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0Rp
c2tJbWFnZXMKICAgIDB4N2ZmZjRkZTViMDAwIC0gICAgIDB4N2ZmZjRkZjJlZmYxICBjb20uYXBw
bGUuRGlza01hbmFnZW1lbnQgKDEzLjAgLSAxNjQ4LjEyMC41KSA8NjUwREJCRTQtNjYyNC0zMDY0
LUEyNkQtNkJDQUEwRkU0MUY5PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvRGlz
a01hbmFnZW1lbnQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRGlza01hbmFnZW1lbnQKICAgIDB4N2Zm
ZjRkZjJmMDAwIC0gICAgIDB4N2ZmZjRkZjMzZmYxICBjb20uYXBwbGUuRGlzcGxheVNlcnZpY2Vz
RlcgKDMuMSAtIDM4MCkgPEE1Rjc0ODQ5LUQ4RTQtMzBEQy1BNjM4LUJGRDQzMzJDRDZBQj4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0Rpc3BsYXlTZXJ2aWNlcy5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9EaXNwbGF5U2VydmljZXMKICAgIDB4N2ZmZjRkZjhkMDAwIC0gICAgIDB4N2Zm
ZjRkZmIxZmY5ICBjb20uYXBwbGUuRHVldEFjdGl2aXR5U2NoZWR1bGVyICgxLjAgLSAxKSA8QzYz
RkNDNUEtQ0Y5Qi0zMUIwLUI1NDktMDRGQzQ1MjdCODI2PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvRHVldEFjdGl2aXR5U2NoZWR1bGVyLmZyYW1ld29yay9WZXJzaW9ucy9BL0R1
ZXRBY3Rpdml0eVNjaGVkdWxlcgogICAgMHg3ZmZmNGRmZGIwMDAgLSAgICAgMHg3ZmZmNGUwMTBm
ZjcgIGNvbS5hcHBsZS5TeXN0ZW1Db25maWd1cmF0aW9uLkVBUDgwMjFYICgxNC4wLjAgLSAxNC4w
KSA8RTBCQUQ2REEtM0Y3Qy0zMkE0LUFCMzItMTNDOUQ2MDQ2OTBCPiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvRUFQODAyMVguZnJhbWV3b3JrL1ZlcnNpb25zL0EvRUFQODAyMVgK
ICAgIDB4N2ZmZjRlMDExMDAwIC0gICAgIDB4N2ZmZjRlMDE1ZmY5ICBjb20uYXBwbGUuRUZJTG9n
aW4gKDIuMCAtIDIpIDxCOTUwMTVCQy01QkMyLTMzRDktQUQ5NC0wMTkwNURENTYxOTM+IC9TeXN0
ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9FRklMb2dpbi5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9FRklMb2dpbgogICAgMHg3ZmZmNGViMjAwMDAgLSAgICAgMHg3ZmZmNGViMjZmZjcgIGNvbS5h
cHBsZS5FbWJlZGRlZE9TU3VwcG9ydEhvc3QgKDEuMCAtIDEpIDw0MTY0NjE5Qy05MjZBLTNFQ0Yt
QjZDMi0yMzVFMzUxNjU2MjM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9FbWJl
ZGRlZE9TU3VwcG9ydEhvc3QuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRW1iZWRkZWRPU1N1cHBvcnRI
b3N0CiAgICAweDdmZmY0ZWI0ODAwMCAtICAgICAweDdmZmY0ZWI1ZGZmMiAgY29tLmFwcGxlLkVu
Z3JhbSAoMS4wIC0gMSkgPDE1QUJFRjlGLTE4OTItMzgwMS05MjUzLTBGRDBGQzIzMkIxQz4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0VuZ3JhbS5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9FbmdyYW0KICAgIDB4N2ZmZjRlYjVlMDAwIC0gICAgIDB4N2ZmZjRmMWM4ZmY5ICBjb20uYXBw
bGUudmlzaW9uLkVzcHJlc3NvRnJhbWV3b3JrICgxLjAgLSAxODguNCkgPDQ1MDI1ODhGLTcwRjIt
M0E1Ri05MDg5LTRCMkYyOTE1OTk2MT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
L0VzcHJlc3NvLmZyYW1ld29yay9WZXJzaW9ucy9BL0VzcHJlc3NvCiAgICAweDdmZmY0ZjIxMTAw
MCAtICAgICAweDdmZmY0ZjI2ZWZmMiAgY29tLmFwcGxlLkV4Y2hhbmdlV2ViU2VydmljZXMgKDgu
MCAtIDgwNykgPDRENDEwNkU1LTUwQjAtM0RDNS05OURGLUEyMzY4MjlENzkxQT4gL1N5c3RlbS9M
aWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0V4Y2hhbmdlV2ViU2VydmljZXMuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvRXhjaGFuZ2VXZWJTZXJ2aWNlcwogICAgMHg3ZmZmNGYyYTcwMDAgLSAgICAgMHg3
ZmZmNGYyYzdmZjcgIGNvbS5hcHBsZS5pY2xvdWQuRk1Db3JlICgxLjAgLSAxKSA8RjY5ODNFOEEt
OTFDOS0zRDI0LUIxQUUtNDdDNzU5N0QyRUMwPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvRk1Db3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZNQ29yZQogICAgMHg3ZmZmNGYyYzgw
MDAgLSAgICAgMHg3ZmZmNGYyZTBmZjkgIGNvbS5hcHBsZS5pY2xvdWQuRk1Db3JlTGl0ZSAoMS4w
IC0gMSkgPEYyQjFENzVCLUVGRTItM0I5Qi1BMzg4LTAwNTFFNzc1RUExRj4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0ZNQ29yZUxpdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRk1D
b3JlTGl0ZQogICAgMHg3ZmZmNGYyZTEwMDAgLSAgICAgMHg3ZmZmNGYyZTZmZjggIGNvbS5hcHBs
ZS5pY2xvdWQuRk1Db3JlVUkgKDEuMCAtIDEpIDw2RUYxMEFDRS00Qzg4LTNGNzMtQTg4Ni1DODc1
OTRDNjZCNTY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9GTUNvcmVVSS5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9GTUNvcmVVSQogICAgMHg3ZmZmNGYyZTcwMDAgLSAgICAgMHg3ZmZm
NGYzMTZmZmQgIGNvbS5hcHBsZS5pY2xvdWQuRk1GICgxLjAgLSAxKSA8QUZGRjY0MkUtQzUzMi0z
QUMyLUIwMkItMTJGQjkwOTk4OEM3PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
Rk1GLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZNRgogICAgMHg3ZmZmNGYzMTcwMDAgLSAgICAgMHg3
ZmZmNGYzMjlmZmUgIGNvbS5hcHBsZS5pY2xvdWQuRk1GVUkgKDEuMCAtIDEpIDxCM0E1QTk5NC0z
QkUzLTNBODAtQTUyOS02MzM3RDVFN0U3RDE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9GTUZVSS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GTUZVSQogICAgMHg3ZmZmNGY0MDgwMDAg
LSAgICAgMHg3ZmZmNGY0MjdmZjQgIGNvbS5hcHBsZS5mdGF3ZCAoOC4wIC0gOTAwKSA8ODYzQjZC
RkEtREI0MS0zNzdFLTlEOTEtMTcwRjM1M0Q0NDNGPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZy
YW1ld29ya3MvRlRBV0QuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRlRBV0QKICAgIDB4N2ZmZjRmNDI4
MDAwIC0gICAgIDB4N2ZmZjRmNDJiZmYzICBjb20uYXBwbGUuZnRjbGllbnRzZXJ2aWNlcyAoMTAu
MCAtIDEwMDApIDw5RkI1NUYwMy0wNzgxLTM0MkEtQTVBMS1CM0QwQTgwRkRGRTg+IC9TeXN0ZW0v
TGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9GVENsaWVudFNlcnZpY2VzLmZyYW1ld29yay9WZXJz
aW9ucy9BL0ZUQ2xpZW50U2VydmljZXMKICAgIDB4N2ZmZjRmNDJjMDAwIC0gICAgIDB4N2ZmZjRm
NDhjZmY4ICBjb20uYXBwbGUuZmFjZXRpbWVzZXJ2aWNlcyAoMTAuMCAtIDEwMDApIDxGRkRDOTRC
Qy1FRUFFLTNGNzAtODE1My05MDI5OTNGRDQ2MjQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJh
bWV3b3Jrcy9GVFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZUU2VydmljZXMKICAgIDB4
N2ZmZjRmNGEzMDAwIC0gICAgIDB4N2ZmZjRmOGJlZmYxICBjb20uYXBwbGUudmlzaW9uLkZhY2VD
b3JlICg0LjMuMCAtIDQuMy4wKSA8MUI1RDdERDYtNzE4RS0zMTExLUE3MDItRUIwNEI4OTAzNjYy
PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvRmFjZUNvcmUuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvRmFjZUNvcmUKICAgIDB4N2ZmZjRmOGJmMDAwIC0gICAgIDB4N2ZmZjRmOGNhZmY5
ICBjb20uYXBwbGUuRmFtaWx5Q2lyY2xlICgxLjAgLSA3Ni4wLjAuMikgPDRDNUUwMThELUNGRjct
M0IzRi05RjE5LTgyOEIxRjU1MzY3Mj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
L0ZhbWlseUNpcmNsZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GYW1pbHlDaXJjbGUKICAgIDB4N2Zm
ZjRmOGNkMDAwIC0gICAgIDB4N2ZmZjRmOGVmZmYwICBjb20uYXBwbGUuZnJhbWV3b3JrLmZhbWls
eWNvbnRyb2xzICg0LjEgLSA0MTApIDxGMEY4Qjk2RC04NjRBLTM0NDItQjhCNC05NkU5RjIyMUJF
QkQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9GYW1pbHlDb250cm9scy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9GYW1pbHlDb250cm9scwogICAgMHg3ZmZmNGY5ZTEwMDAgLSAgICAg
MHg3ZmZmNGY5ZjdmZjkgIGNvbS5hcHBsZS5pY2xvdWQuRmluZE15RGV2aWNlICgxLjAgLSAxKSA8
NkM2NTUyQTItQzk1MS0zNkQxLUFFNUEtODk2MTRFMzc1MDgyPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvRmluZE15RGV2aWNlLmZyYW1ld29yay9WZXJzaW9ucy9BL0ZpbmRNeURl
dmljZQogICAgMHg3ZmZmNGZmMTYwMDAgLSAgICAgMHg3ZmZmNGZmM2FmZjYgIGNvbS5hcHBsZS5G
bGlnaHRVdGlsaXRpZXMgKDEuMCAtIDEzNCkgPENBRkM3MjE2LURFNzAtMzUzQy1BNUU1LTM5OTFD
NTVFNzk3RD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0ZsaWdodFV0aWxpdGll
cy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GbGlnaHRVdGlsaXRpZXMKICAgIDB4N2ZmZjRmZjVjMDAw
IC0gICAgIDB4N2ZmZjUwMDk0ZmZjICBsaWJGb250UGFyc2VyLmR5bGliICgyNzcuMi41LjMpIDxE
RUIxODc1Ni0wODJGLTM1OUItQUU5My1GOUMzQjVFQzdBRjQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9Gb250U2VydmljZXMuZnJhbWV3b3JrL2xpYkZvbnRQYXJzZXIuZHlsaWIK
ICAgIDB4N2ZmZjUwMDk1MDAwIC0gICAgIDB4N2ZmZjUwMGM5ZmZmICBsaWJUcnVlVHlwZVNjYWxl
ci5keWxpYiAoMjc3LjIuNS4zKSA8QjE2MjU1QTYtQzUxQS0zMjhCLUI2NzktOEZCRjY0NDk1Nzcw
PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvRm9udFNlcnZpY2VzLmZyYW1ld29y
ay9saWJUcnVlVHlwZVNjYWxlci5keWxpYgogICAgMHg3ZmZmNTAxMmUwMDAgLSAgICAgMHg3ZmZm
NTAxM2VmZjYgIGxpYmh2Zi5keWxpYiAoMS4wIC0gJFtDVVJSRU5UX1BST0pFQ1RfVkVSU0lPTl0p
IDw2Mzk2QkMxRi0xM0MxLTM3RDctOTFCOS0xRkY2MDkxMEM3RkE+IC9TeXN0ZW0vTGlicmFyeS9Q
cml2YXRlRnJhbWV3b3Jrcy9Gb250U2VydmljZXMuZnJhbWV3b3JrL2xpYmh2Zi5keWxpYgogICAg
MHg3ZmZmNTAxNDIwMDAgLSAgICAgMHg3ZmZmNTAxYjlmZjUgIGNvbS5hcHBsZS5Gcm9udEJvYXJk
U2VydmljZXMgKDYyNi44IC0gNjI2LjgpIDwxNUM5RDlCOC1CMjI5LTM0RUUtQkU0Ny1BQ0I5NEU5
NDFDQjk+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Gcm9udEJvYXJkU2Vydmlj
ZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJvbnRCb2FyZFNlcnZpY2VzCiAgICAweDdmZmY1MDFi
YTAwMCAtICAgICAweDdmZmY1MDFkMGZmYiAgY29tLmFwcGxlLkZ1dGhhcmsgKDEuMCAtIDEpIDw1
QUU3MzAwNC0yM0E3LTM1MEYtQTQ0RS02NTgxM0U4RjNGNjc+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9GdXRoYXJrLmZyYW1ld29yay9WZXJzaW9ucy9BL0Z1dGhhcmsKICAgIDB4
N2ZmZjUzNjFmMDAwIC0gICAgIDB4N2ZmZjUzNjIwZmZmICBsaWJtZXRhbF90aW1lc3RhbXAuZHls
aWIgKDkwMi4xNC4xMSkgPEJFODhGMjU5LTBBM0MtMzkxMC04OTgzLUZCNUUyQzkwNUU4Nz4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0dQVUNvbXBpbGVyLmZyYW1ld29yay9WZXJz
aW9ucy8zOTAyL0xpYnJhcmllcy9saWJtZXRhbF90aW1lc3RhbXAuZHlsaWIKICAgIDB4N2ZmZjU0
Y2FmMDAwIC0gICAgIDB4N2ZmZjU0Y2MxZmZiICBjb20uYXBwbGUuR1BVSW5mbyAoMS4yLjY2IC0g
MS4yLjY2KSA8Mzk3RUU5RjgtQjg4OC0zNzBGLThBRjktOTZCMEFBOUYxNDgwPiAvU3lzdGVtL0xp
YnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvR1BVSW5mby5mcmFtZXdvcmsvVmVyc2lvbnMvQS9HUFVJ
bmZvCiAgICAweDdmZmY1NGNkZDAwMCAtICAgICAweDdmZmY1NGNlM2ZmZiAgY29tLmFwcGxlLkdQ
VVdyYW5nbGVyICg1LjIuNCAtIDUuMi40KSA8NUI4MTk3MDEtOUYwQy0zNzRCLTg5MjUtQTIyREZD
MTY1MTRGPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvR1BVV3JhbmdsZXIuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvR1BVV3JhbmdsZXIKICAgIDB4N2ZmZjU1MDAyMDAwIC0gICAgIDB4
N2ZmZjU1MDI4ZmYxICBjb20uYXBwbGUuR2VuZXJhdGlvbmFsU3RvcmFnZSAoMi4wIC0gMzE0KSA8
NTYxMzcwNkYtNzEwQS0zOUUwLThCMjUtQkExMDNBNzY4NjEzPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvR2VuZXJhdGlvbmFsU3RvcmFnZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9H
ZW5lcmF0aW9uYWxTdG9yYWdlCiAgICAweDdmZmY1NTA0MTAwMCAtICAgICAweDdmZmY1NjAyYmZm
YyAgY29tLmFwcGxlLkdlb1NlcnZpY2VzICgxLjAgLSAxNjI0LjI0LjEwLjI5LjQxKSA8OUE2RkYz
NjgtNzEyNy0zMzZGLTk1OTUtQjI2MTE0MTgxMEVBPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZy
YW1ld29ya3MvR2VvU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvR2VvU2VydmljZXMKICAg
IDB4N2ZmZjU2MTU3MDAwIC0gICAgIDB4N2ZmZjU2MTY1ZmZiICBjb20uYXBwbGUuR3JhcGhWaXN1
YWxpemVyICgxLjAgLSAxMDAuMSkgPDBBODZDOUZGLTQ0ODQtM0M3Ri1CQzcxLTNEMjNCREJFODFD
RT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0dyYXBoVmlzdWFsaXplci5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9HcmFwaFZpc3VhbGl6ZXIKICAgIDB4N2ZmZjU2MTY2MDAwIC0gICAg
IDB4N2ZmZjU2MTczZmYzICBjb20uYXBwbGUuR3JhcGhpY3NTZXJ2aWNlcyAoMS4wIC0gMS4wKSA8
NjI4RUE3RUYtQTVDNy0zNkU0LTkxOTMtNDZGNTU4NTJDMjA4PiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvR3JhcGhpY3NTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9HcmFw
aGljc1NlcnZpY2VzCiAgICAweDdmZmY1NjFjZTAwMCAtICAgICAweDdmZmY1NjFkYmZmOSAgY29t
LmFwcGxlLkhJRCAoMS4wIC0gMSkgPEY1OEM3MTY4LTg4ODgtMzNDMy1BRTI1LUU0MEUwNTVFMkI3
Nz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0hJRC5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9ISUQKICAgIDB4N2ZmZjU2MzA0MDAwIC0gICAgIDB4N2ZmZjU2M2MyZmY0ICBjb20uYXBw
bGUuSGVpbWRhbCAoNC4wIC0gMi4wKSA8RjJDNTA0RjYtRTIxMS0zQUIwLTk3NTQtRDk2RDJGOTY2
MzRCPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvSGVpbWRhbC5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9IZWltZGFsCiAgICAweDdmZmY1N2IxYzAwMCAtICAgICAweDdmZmY1N2I1ZGZm
ZCAgY29tLmFwcGxlLklBU1V0aWxpdGllcyAoMS4wIC0gNTUwLjQpIDw5M0REQkExOS02RDM3LTM5
NkMtOEFDRi1DRTUzMTRDNjVFMjY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9J
QVNVdGlsaXRpZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSUFTVXRpbGl0aWVzCiAgICAweDdmZmY1
N2I1ZTAwMCAtICAgICAweDdmZmY1N2M1Y2ZmZSAgY29tLmFwcGxlLmlkcyAoMTAuMCAtIDEwMDAp
IDw5Q0NDQ0RFOS03NEMyLTMxM0UtOTkzMy1BMkFDNDNCNTk0MzE+IC9TeXN0ZW0vTGlicmFyeS9Q
cml2YXRlRnJhbWV3b3Jrcy9JRFMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSURTCiAgICAweDdmZmY1
N2M1ZDAwMCAtICAgICAweDdmZmY1N2Q5OGZmMiAgY29tLmFwcGxlLmlkc2ZvdW5kYXRpb24gKDEw
LjAgLSAxMDAwKSA8QzI4MzBCREItREFGRi0zNERGLThGMjYtMTIwMEFDOTkzMEE5PiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvSURTRm91bmRhdGlvbi5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9JRFNGb3VuZGF0aW9uCiAgICAweDdmZmY1N2Q5ZjAwMCAtICAgICAweDdmZmY1N2RhNGZm
ZCAgY29tLmFwcGxlLmlkc2t2c3RvcmUgKDEwLjAgLSAxMDAwKSA8NkQ5NDZFMTUtQTk3MC0zRkU2
LTg5NEQtNTZGNDhDQUE5MjA1PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvSURT
S1ZTdG9yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JRFNLVlN0b3JlCiAgICAweDdmZmY1N2VkNzAw
MCAtICAgICAweDdmZmY1ODBiZWZmNyAgY29tLmFwcGxlLmltY29yZSAoMTAuMCAtIDEwMDApIDwy
QTcxOUQzRS02MEVCLTNCNDAtODM0RS1GQTI3RDgyRDFEMzg+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9JTUNvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU1Db3JlCiAgICAweDdm
ZmY1ODBjMzAwMCAtICAgICAweDdmZmY1ODIxMmZmYyAgY29tLmFwcGxlLklNRFBlcnNpc3RlbmNl
ICgxMC4wIC0gMTAwMCkgPDBEODZCMjdBLUJGNkMtMzk2QS1BRUU3LUVDMTBGQzI3MEMyNT4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0lNRFBlcnNpc3RlbmNlLmZyYW1ld29yay9W
ZXJzaW9ucy9BL0lNRFBlcnNpc3RlbmNlCiAgICAweDdmZmY1ODNiNjAwMCAtICAgICAweDdmZmY1
ODQxNmZmMiAgY29tLmFwcGxlLmltZm91bmRhdGlvbiAoMTAuMCAtIDEwMDApIDw0NzgzNEM3MS04
REUzLTM1REYtQkNENC00RDY1QTg1MjRCRUI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9JTUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU1Gb3VuZGF0aW9uCiAgICAw
eDdmZmY1ODQzYzAwMCAtICAgICAweDdmZmY1ODRlNmZmZiAgY29tLmFwcGxlLmltc2hhcmVkdXRp
bGl0aWVzICgxMC4wIC0gMTAwMCkgPDk2MDIzRDI0LTFEMEYtM0QwNC1BQTU4LUY3NTg4QTA1RDQ0
ND4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0lNU2hhcmVkVXRpbGl0aWVzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0lNU2hhcmVkVXRpbGl0aWVzCiAgICAweDdmZmY1ODUzYzAwMCAt
ICAgICAweDdmZmY1ODU0NWZmZSAgY29tLmFwcGxlLklPQWNjZWxNZW1vcnlJbmZvICgxLjAgLSAx
KSA8OTAzMzQ5RjYtRjNCMC0zMjY5LTg5NDYtMkNFM0UyQzQ5RTcwPiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvSU9BY2NlbE1lbW9yeUluZm8uZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
SU9BY2NlbE1lbW9yeUluZm8KICAgIDB4N2ZmZjU4NTQ2MDAwIC0gICAgIDB4N2ZmZjU4NTRlZmY1
ICBjb20uYXBwbGUuSU9BY2NlbGVyYXRvciAoNDM4LjUuNCAtIDQzOC41LjQpIDxBM0NGNDVFMC00
RDg4LTMzQkYtQkFFQy02OTBENTY2NENEQTA+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9JT0FjY2VsZXJhdG9yLmZyYW1ld29yay9WZXJzaW9ucy9BL0lPQWNjZWxlcmF0b3IKICAg
IDB4N2ZmZjU4NTVhMDAwIC0gICAgIDB4N2ZmZjU4NTVhZmZmICBjb20uYXBwbGUuSU9QbGF0Zm9y
bVBsdWdpbkZhbWlseSAoMS4wIC0gMSkgPEEzMzM0ODkxLTA0MUQtMzQ0MS05MzkzLTkxOEM4RjE4
QTJBMD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0lPUGxhdGZvcm1QbHVnaW5G
YW1pbHkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSU9QbGF0Zm9ybVBsdWdpbkZhbWlseQogICAgMHg3
ZmZmNTg1NWIwMDAgLSAgICAgMHg3ZmZmNTg1NzJmZmYgIGNvbS5hcHBsZS5JT1ByZXNlbnRtZW50
ICgxLjAgLSAzNykgPDNFREJCNDU0LUQyNDgtMzk0Qi1BMDI2LTk3MTdDRDg1MzVDMz4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0lPUHJlc2VudG1lbnQuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvSU9QcmVzZW50bWVudAogICAgMHg3ZmZmNTg4ZmEwMDAgLSAgICAgMHg3ZmZmNTg5NDVm
ZjEgIGNvbS5hcHBsZS5JY29uU2VydmljZXMgKDQzOC4zIC0gNDM4LjMpIDwyQUU3NDc5MC02NEYx
LTNCMEEtOTUzNC1ERUVFRTMwN0U1NjI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9JY29uU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSWNvblNlcnZpY2VzCiAgICAweDdm
ZmY1ODk0YjAwMCAtICAgICAweDdmZmY1ODk1MGZmNSAgY29tLmFwcGxlLmluY29taW5nY2FsbGZp
bHRlciAoMTAuMCAtIDEwMDApIDwyQkNCNEMwQy1FMDVGLTM2OEYtQTg4NC00QTlCRTUwOEFGOUY+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9JbmNvbWluZ0NhbGxGaWx0ZXIuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvSW5jb21pbmdDYWxsRmlsdGVyCiAgICAweDdmZmY1ODllYjAwMCAt
ICAgICAweDdmZmY1OGEwOWZmMyAgY29tLmFwcGxlLkRpc3RyaWJ1dGlvbktpdCAoNzAwIC0gMTAw
MCkgPDYyNEY5Q0RFLUM0RDMtMzI4Qy1BQTRFLTM0NjlGNzg0MzU1ND4gL1N5c3RlbS9MaWJyYXJ5
L1ByaXZhdGVGcmFtZXdvcmtzL0luc3RhbGwuZnJhbWV3b3JrL0ZyYW1ld29ya3MvRGlzdHJpYnV0
aW9uS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0Rpc3RyaWJ1dGlvbktpdAogICAgMHg3ZmZmNThh
YjMwMDAgLSAgICAgMHg3ZmZmNThhYzdmZjYgIGNvbS5hcHBsZS5JbnN0YWxsZXJEaWFnbm9zdGlj
cyAoMS4wIC0gMSkgPEUzOUJDMEVBLTZBMEItM0ZGQy05MzEyLTVCMjU0MUE2QkZFOD4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0luc3RhbGxlckRpYWdub3N0aWNzLmZyYW1ld29y
ay9WZXJzaW9ucy9BL0luc3RhbGxlckRpYWdub3N0aWNzCiAgICAweDdmZmY1OGFlMjAwMCAtICAg
ICAweDdmZmY1OGFmMGZmZiAgY29tLmFwcGxlLkludGVudHNGb3VuZGF0aW9uICgxLjAgLSAxKSA8
QzJDMzFCRUItRkZDRS0zMUUxLUJBMjMtQTA5MzY5M0MwQkRDPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvSW50ZW50c0ZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvSW50
ZW50c0ZvdW5kYXRpb24KICAgIDB4N2ZmZjU4YjAzMDAwIC0gICAgIDB4N2ZmZjU4YjBhZmY5ICBj
b20uYXBwbGUuSW50ZXJuYXRpb25hbFN1cHBvcnQgKDEuMCAtIDQ1LjQpIDxDMjJBQTc3QS1FREE2
LTM2MjYtODgxNi01MjFBOENENDNDNEE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9JbnRlcm5hdGlvbmFsU3VwcG9ydC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JbnRlcm5hdGlvbmFs
U3VwcG9ydAogICAgMHg3ZmZmNThiMGIwMDAgLSAgICAgMHg3ZmZmNThiMGRmZjMgIGNvbS5hcHBs
ZS5JbnRlcm5hdGlvbmFsVGV4dFNlYXJjaCAoMS4wIC0gMSkgPDQ2Qjk3RTJCLUI1MEUtMzdGRS05
NDc2LUZEMzBCREFBM0VENT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0ludGVy
bmF0aW9uYWxUZXh0U2VhcmNoLmZyYW1ld29yay9WZXJzaW9ucy9BL0ludGVybmF0aW9uYWxUZXh0
U2VhcmNoCiAgICAweDdmZmY1OGI3MjAwMCAtICAgICAweDdmZmY1OGJhMWZmMyAgY29tLmFwcGxl
LkludGxQcmVmZXJlbmNlcyAoMi4wIC0gMzAxLjYpIDxGQ0E0NzU1MC1BOEM3LTNBNTMtQTFFRS0x
RDI2NTE5QjRDNjA+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9JbnRsUHJlZmVy
ZW5jZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvSW50bFByZWZlcmVuY2VzCiAgICAweDdmZmY1OGQ4
YTAwMCAtICAgICAweDdmZmY1OGQ5NmZmNyAgY29tLmFwcGxlLktlcmJlcm9zSGVscGVyICg0LjAg
LSAxLjApIDxDNjU1NTNCMC1BQjUwLTMxQUItQTE5Mi1CNkRDNTNBMzk2MkM+IC9TeXN0ZW0vTGli
cmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9LZXJiZXJvc0hlbHBlci5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9LZXJiZXJvc0hlbHBlcgogICAgMHg3ZmZmNThkOTcwMDAgLSAgICAgMHg3ZmZmNThkYjZmZmQg
IGNvbS5hcHBsZS5zZWN1cml0eS5LZXljaGFpbkNpcmNsZS5LZXljaGFpbkNpcmNsZSAoMS4wIC0g
MSkgPDc2REI1MzI2LUJFNUQtMzMzOS05NzVDLUQ5RkNGMzlBMzQxRT4gL1N5c3RlbS9MaWJyYXJ5
L1ByaXZhdGVGcmFtZXdvcmtzL0tleWNoYWluQ2lyY2xlLmZyYW1ld29yay9WZXJzaW9ucy9BL0tl
eWNoYWluQ2lyY2xlCiAgICAweDdmZmY1OGVlYjAwMCAtICAgICAweDdmZmY1OGZiOWZmZCAgY29t
LmFwcGxlLkxhbmd1YWdlTW9kZWxpbmcgKDEuMCAtIDIxNS4xKSA8QTZGQUEyMTUtOUEwMS0zRUUx
LUIzMDQtMjIzODgwMUM1ODgzPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvTGFu
Z3VhZ2VNb2RlbGluZy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9MYW5ndWFnZU1vZGVsaW5nCiAgICAw
eDdmZmY1OGZiYTAwMCAtICAgICAweDdmZmY1OTAwMmZmZiAgY29tLmFwcGxlLkxleGljb24tZnJh
bWV3b3JrICgxLjAgLSA3MikgPDZBRTE4NzJDLTAzNTItMzZGRS05MENDLTczMDNGMTNBNUJFRj4g
L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL0xleGljb24uZnJhbWV3b3JrL1ZlcnNp
b25zL0EvTGV4aWNvbgogICAgMHg3ZmZmNTkwMDkwMDAgLSAgICAgMHg3ZmZmNTkwMGVmZjMgIGNv
bS5hcHBsZS5MaW5ndWlzdGljRGF0YSAoMS4wIC0gMzUzLjE4KSA8Njg2RTdCN0MtNjQwRi0zRDdC
LUE5QzEtMzFFMkRGQUNENDU3PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvTGlu
Z3Vpc3RpY0RhdGEuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTGluZ3Vpc3RpY0RhdGEKICAgIDB4N2Zm
ZjU5MDEyMDAwIC0gICAgIDB4N2ZmZjU5MDM0ZmYxICBjb20uYXBwbGUuTG9jYWxBdXRoZW50aWNh
dGlvblVJICgxLjAgLSA2OTMuMTIwLjEpIDwxMkIyQjUwQS1ENDMxLTM0ODYtQURGMi1BMDc0NTU2
NEVGNTU+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Mb2NhbEF1dGhlbnRpY2F0
aW9uVUkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTG9jYWxBdXRoZW50aWNhdGlvblVJCiAgICAweDdm
ZmY1OTAzNTAwMCAtICAgICAweDdmZmY1OTA1OWZmZSAgY29tLmFwcGxlLmxvY2F0aW9uc3VwcG9y
dCAoMjM5NC4wLjIyIC0gMjM5NC4wLjIyKSA8NUMxNUUzRkYtRDI2OS0zQTk5LUIzRUYtQjgwNkY2
MUVFMUVBPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvTG9jYXRpb25TdXBwb3J0
LmZyYW1ld29yay9WZXJzaW9ucy9BL0xvY2F0aW9uU3VwcG9ydAogICAgMHg3ZmZmNTkwYjIwMDAg
LSAgICAgMHg3ZmZmNTkwYjdmZjcgIGNvbS5hcHBsZS5Mb2dpblVJQ29yZSAoNC4wIC0gNC4wKSA8
NUQ2MEM3RDEtOURCNy0zMEEzLTkyMDktN0UxMzY0NEQzRTlEPiAvU3lzdGVtL0xpYnJhcnkvUHJp
dmF0ZUZyYW1ld29ya3MvTG9naW5VSUtpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtz
L0xvZ2luVUlDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL0xvZ2luVUlDb3JlCiAgICAweDdmZmY1
OTExMTAwMCAtICAgICAweDdmZmY1OTEyYWZmYyAgY29tLmFwcGxlLkxvb2t1cEZyYW1ld29yayAo
MS4yIC0gMjc0KSA8RUVCNDhCMDItMDNCMC0zOTZGLTlBNjItNUQ1REMxNjgzQzUzPiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvTG9va3VwLmZyYW1ld29yay9WZXJzaW9ucy9BL0xv
b2t1cAogICAgMHg3ZmZmNTk4YTYwMDAgLSAgICAgMHg3ZmZmNTk4YTlmZmYgIGNvbS5hcHBsZS5N
YW5ncm92ZSAoMS4wIC0gMjUpIDwxMUEzMEY0Ny1CMUMxLTM3NUUtOUZFNy0wQTE5NkU5MkE1MkM+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9NYW5ncm92ZS5mcmFtZXdvcmsvVmVy
c2lvbnMvQS9NYW5ncm92ZQogICAgMHg3ZmZmNTlhNjYwMDAgLSAgICAgMHg3ZmZmNTlhNjZmZjUg
IGNvbS5hcHBsZS5tYXJjbyAoMTAuMCAtIDEwMDApIDxERTMwNjQxMy0yQjc1LTNEM0EtOURDQy0w
RDY2MEEzMTk3Q0I+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9NYXJjby5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9NYXJjbwogICAgMHg3ZmZmNTlhNjcwMDAgLSAgICAgMHg3ZmZmNTlh
OGRmZmMgIGNvbS5hcHBsZS5NYXJrdXBVSSAoMS4wIC0gMzI1LjkpIDxGQjY4OEVDMC02N0ZELTM3
QTItQkVEMC1BMDE3RjRGQTAyOUE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9N
YXJrdXBVSS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NYXJrdXBVSQogICAgMHg3ZmZmNTliMTIwMDAg
LSAgICAgMHg3ZmZmNTliOWNmZjggIGNvbS5hcHBsZS5NZWRpYUV4cGVyaWVuY2UgKDEuMCAtIDEp
IDwzNEUxNURBMi0wMkFBLTMyRkEtOTlFMS05QTEzOTUyMUUyMjY+IC9TeXN0ZW0vTGlicmFyeS9Q
cml2YXRlRnJhbWV3b3Jrcy9NZWRpYUV4cGVyaWVuY2UuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTWVk
aWFFeHBlcmllbmNlCiAgICAweDdmZmY1OWI5ZDAwMCAtICAgICAweDdmZmY1OWJkMGZmZiAgY29t
LmFwcGxlLk1lZGlhS2l0ICgxNiAtIDkyMykgPDE0RTM4ODQ4LUM5QkQtMzdGMS1BRTQ0LUZDNEND
ODM5RThBMT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL01lZGlhS2l0LmZyYW1l
d29yay9WZXJzaW9ucy9BL01lZGlhS2l0CiAgICAweDdmZmY1OWM5NTAwMCAtICAgICAweDdmZmY1
YTAyYWZmOSAgY29tLmFwcGxlLk1lZGlhUmVtb3RlICgxLjAgLSAxKSA8Q0VBNThDMDMtNzU3OS0z
MUNDLTk4RTMtNjgyMEFEMjM4RjUzPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
TWVkaWFSZW1vdGUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTWVkaWFSZW1vdGUKICAgIDB4N2ZmZjVh
MDJiMDAwIC0gICAgIDB4N2ZmZjVhMDY3ZmZjICBjb20uYXBwbGUuTWVkaWFTZXJ2aWNlcyAoMS4w
IC0gMSkgPEIyMzg1MTA5LTNEOUYtM0Y4Ni1CQUFGLUNCOEY1MzExOEI5RD4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL01lZGlhU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
TWVkaWFTZXJ2aWNlcwogICAgMHg3ZmZmNWEzNzUwMDAgLSAgICAgMHg3ZmZmNWEzYzFmZmYgIGNv
bS5hcHBsZS5zcG90bGlnaHQubWV0YWRhdGEudXRpbGl0aWVzICgxLjAgLSAyMDc2LjYpIDxDM0FF
QTIyRC0xRkVCLTNFMzgtOTgyMS0xRkE0NDdDOEFGOUQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRl
RnJhbWV3b3Jrcy9NZXRhZGF0YVV0aWxpdGllcy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NZXRhZGF0
YVV0aWxpdGllcwogICAgMHg3ZmZmNWEzYzIwMDAgLSAgICAgMHg3ZmZmNWE0OTNmZmEgIGNvbS5h
cHBsZS5ncHVzdy5NZXRhbFRvb2xzICgxLjAgLSAxKSA8QTIzRkZBQjYtNDM3Qy0zMDNDLUEzRTgt
OTlGMzIzRjhFNzM0PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvTWV0YWxUb29s
cy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9NZXRhbFRvb2xzCiAgICAweDdmZmY1YTRmMTAwMCAtICAg
ICAweDdmZmY1YTUwYWZmNCAgY29tLmFwcGxlLk1vYmlsZUFzc2V0cyAoMS4wIC0gNjE5LjEyMC4x
KSA8NUFGOTU2NDEtNjhDNy0zNTFBLUEzMTctM0M3Qjc5MzUwMkQ2PiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvTW9iaWxlQXNzZXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTW9iaWxl
QXNzZXQKICAgIDB4N2ZmZjVhNTIxMDAwIC0gICAgIDB4N2ZmZjVhNmFlZmU4ICBjb20uYXBwbGUu
bW9iaWxlZGV2aWNlICgxMTkwLjEwMC4yLjEgLSAxMTkwLjEwMC4yLjEpIDw0Mjg3RThENy0wOUJB
LTNBNTktQTM0My0yMEY0RTEzREQ5QTk+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9Nb2JpbGVEZXZpY2UuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTW9iaWxlRGV2aWNlCiAgICAweDdm
ZmY1YTZjNzAwMCAtICAgICAweDdmZmY1YTZlNWZmZiAgY29tLmFwcGxlLk1vYmlsZUtleUJhZyAo
Mi4wIC0gMS4wKSA8QjU2NDE3OUYtQTVFOS0zQkQ4LTg5MkQtQ0VGMkJFMERBMEQ3PiAvU3lzdGVt
L0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvTW9iaWxlS2V5QmFnLmZyYW1ld29yay9WZXJzaW9u
cy9BL01vYmlsZUtleUJhZwogICAgMHg3ZmZmNWE3YjEwMDAgLSAgICAgMHg3ZmZmNWE5NDdmZmQg
IGNvbS5hcHBsZS5Nb250cmVhbCAoMS4wIC0gMTIxLjEpIDw5QTk2NDJBNS1DRTFGLTNDMUUtQUNF
Ri1DM0NDNzg5QTFEMjY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Nb250cmVh
bC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Nb250cmVhbAogICAgMHg3ZmZmNWE5NDgwMDAgLSAgICAg
MHg3ZmZmNWE5NzhmZjcgIGNvbS5hcHBsZS5NdWx0aXRvdWNoU3VwcG9ydC5mcmFtZXdvcmsgKDM0
NDAuMSAtIDM0NDAuMSkgPDRFN0NCMTg4LTM4MkUtMzEyOC04NjcxLTRBM0VGNkUwNjYyMj4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL011bHRpdG91Y2hTdXBwb3J0LmZyYW1ld29y
ay9WZXJzaW9ucy9BL011bHRpdG91Y2hTdXBwb3J0CiAgICAweDdmZmY1YTk3OTAwMCAtICAgICAw
eDdmZmY1YTk4NWZmMCAgY29tLmFwcGxlLm11bHRpdmVyc2UgKDEuMCAtIDk5LjEyMC4xKSA8Qzc4
MDlFQjItODIzRi0zNUVCLTlDNTgtRDA0NTJFRTRBM0JDPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvTXVsdGl2ZXJzZVN1cHBvcnQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTXVsdGl2
ZXJzZVN1cHBvcnQKICAgIDB4N2ZmZjVhYmY4MDAwIC0gICAgIDB4N2ZmZjVhY2UyZmZlICBjb20u
YXBwbGUuTkxQICgxLjAgLSAyMDIpIDxDMDc1NzhBRS01RTkyLTNGOEMtOTQzQS03NjYxQjUxQTdF
Qjg+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9OTFAuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvTkxQCiAgICAweDdmZmY1YWNlMzAwMCAtICAgICAweDdmZmY1YWRmM2E3YiAgY29tLmFw
cGxlLk5hdmlnYXRpb24gKDEuMCAtIDEpIDxFOUI1ODA1OC0zNjI5LTMyQUItOTQxQS04RjVCNkND
OTA2OTM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9OYXZpZ2F0aW9uLmZyYW1l
d29yay9WZXJzaW9ucy9BL05hdmlnYXRpb24KICAgIDB4N2ZmZjVhZTc4MDAwIC0gICAgIDB4N2Zm
ZjVhZTgyZmZmICBjb20uYXBwbGUuTmV0QXV0aCAoNi4yIC0gNi4yKSA8RDY2MEYyQ0ItNUE0OS0z
REQwLTlEQjMtODZFRjA3OTc4MjhDPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
TmV0QXV0aC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9OZXRBdXRoCiAgICAweDdmZmY1YjVlZjAwMCAt
ICAgICAweDdmZmY1YjVmMWZmZSAgY29tLmFwcGxlLk9BdXRoICgyNSAtIDI1KSA8NzFDMjM3RDkt
MjdCMS0zMzNELUFBNTctM0UzRTJEQUIyMDIwPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1l
d29ya3MvT0F1dGguZnJhbWV3b3JrL1ZlcnNpb25zL0EvT0F1dGgKICAgIDB4N2ZmZjViNmQ2MDAw
IC0gICAgIDB4N2ZmZjViODVmZmQ3ICBjb20uYXBwbGUuT1NQZXJzb25hbGl6YXRpb24gKDEuMCAt
IDcyLjUpIDxDQ0VFRDU1Ni02OTYyLTMzMTEtQkM4Ni03RThGMTU5RTEwQkI+IC9TeXN0ZW0vTGli
cmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9PU1BlcnNvbmFsaXphdGlvbi5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9PU1BlcnNvbmFsaXphdGlvbgogICAgMHg3ZmZmNWI4OTgwMDAgLSAgICAgMHg3ZmZmNWI4
ZTNmZmIgIGNvbS5hcHBsZS5PVFNWRyAoMS4wIC0gNjQzLjEuNS4xKSA8Q0Q0OTRGMDAtOUFBNC0z
QTQ4LTkxNkItRUE4NjYxRjk3NzJEPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
T1RTVkcuZnJhbWV3b3JrL1ZlcnNpb25zL0EvT1RTVkcKICAgIDB4N2ZmZjVjMTI0MDAwIC0gICAg
IDB4N2ZmZjVjMTJhZmZlICBjb20uYXBwbGUuUElQICgxLjAgLSAxMDkpIDwzQzIwMjI5Qi1DMjY1
LTM4RTItQTA2MC04RUREODFDODFDMTI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9QSVAuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUElQCiAgICAweDdmZmY1YzNkNjAwMCAtICAgICAw
eDdmZmY1YzQ5NWZmMiAgY29tLmFwcGxlLlBhY2thZ2VLaXQgKDMuMCAtIDk5MC40KSA8MUMwRjg5
OTktOUU5Ni0zRTIzLThFMzctQ0FDQkUxN0UzNDA4PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZy
YW1ld29ya3MvUGFja2FnZUtpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9QYWNrYWdlS2l0CiAgICAw
eDdmZmY1YzRhMTAwMCAtICAgICAweDdmZmY1YzRhMmZmMiAgY29tLmFwcGxlLlBhcnNlY1N1YnNj
cmlwdGlvblNlcnZpY2VTdXBwb3J0ICgxLjAgLSA5NzcpIDxEQkUwMDNGRi1GQzM5LTMwQTItODg4
MS1FOEI5QzQ2MTg1MEM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9QYXJzZWNT
dWJzY3JpcHRpb25TZXJ2aWNlU3VwcG9ydC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9QYXJzZWNTdWJz
Y3JpcHRpb25TZXJ2aWNlU3VwcG9ydAogICAgMHg3ZmZmNWNhZjcwMDAgLSAgICAgMHg3ZmZmNWNi
MDJmZjIgIGNvbS5hcHBsZS5QZXJmb3JtYW5jZUFuYWx5c2lzICgxLjI0My4yIC0gMjQzLjIpIDw5
NDE2OThENi1FRjAwLTNENTktODU2MC1GMTYwQkMwNEI0MTI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9QZXJmb3JtYW5jZUFuYWx5c2lzLmZyYW1ld29yay9WZXJzaW9ucy9BL1Bl
cmZvcm1hbmNlQW5hbHlzaXMKICAgIDB4N2ZmZjVjYjAzMDAwIC0gICAgIDB4N2ZmZjVjYjJiZmZi
ICBjb20uYXBwbGUucGVyc2lzdGVudGNvbm5lY3Rpb24gKDEuMCAtIDEuMCkgPEZGQzIwQkI2LTlD
RjMtMzlGMi1BRTVDLThERUUzNDhGRTBDMT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzL1BlcnNpc3RlbnRDb25uZWN0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL1BlcnNpc3RlbnRD
b25uZWN0aW9uCiAgICAweDdmZmY1Y2IyYzAwMCAtICAgICAweDdmZmY1Y2IzYWZmZSAgY29tLmFw
cGxlLlBlcnNvbmFLaXQgKDEuMCAtIDEpIDxDMkZFRTAyNC1ENEQ5LTNFMkYtODlBOS0zRjA1NEU3
QTI4QkE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9QZXJzb25hS2l0LmZyYW1l
d29yay9WZXJzaW9ucy9BL1BlcnNvbmFLaXQKICAgIDB4N2ZmZjVjYjNiMDAwIC0gICAgIDB4N2Zm
ZjVjYjRhZmZlICBjb20uYXBwbGUuUGVyc29uYVVJICgxLjAgLSAxKSA8MjM3RUNEQTgtMEY1Qy0z
OTk5LUFFMUItRUI3MDcwM0Q2QkIzPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3Mv
UGVyc29uYVVJLmZyYW1ld29yay9WZXJzaW9ucy9BL1BlcnNvbmFVSQogICAgMHg3ZmZmNWNiNGIw
MDAgLSAgICAgMHg3ZmZmNWNiYjJmZmMgIGNvbS5hcHBsZS5wcm9hY3RpdmUuUGVyc29uYWxpemF0
aW9uUG9ydHJhaXQgKDEuMCAtIDEwNTIuMzQpIDxGQ0NBMURDMC0xNzk5LTNDNEItODcxQS1BRDZD
NjRBRkRBNEE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9QZXJzb25hbGl6YXRp
b25Qb3J0cmFpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9QZXJzb25hbGl6YXRpb25Qb3J0cmFpdAog
ICAgMHg3ZmZmNWNjZTQwMDAgLSAgICAgMHg3ZmZmNWNjZTRmZmEgIGNvbS5hcHBsZS5QaG9uZU51
bWJlcnMgKDEuMCAtIDEpIDwwOEJCNzA2Qy0wRDAwLTM1MTktQjAzOC0wNzcwREU4Nzc4NjU+IC9T
eXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9QaG9uZU51bWJlcnMuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvUGhvbmVOdW1iZXJzCiAgICAweDdmZmY1ZTVhNDAwMCAtICAgICAweDdmZmY1ZTVk
NGZmNyAgY29tLmFwcGxlLnBsdWdpbmtpdC5mcmFtZXdvcmsgKDEuMCAtIDEpIDw2QTQxN0ZFRi1D
RURFLTNFRTAtOTNFRC00MjY4MEEzMUM4ODY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9QbHVnSW5LaXQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUGx1Z0luS2l0CiAgICAweDdmZmY1
ZTVmZjAwMCAtICAgICAweDdmZmY1ZTYxMmZmYyAgY29tLmFwcGxlLlBvd2VyTG9nICgxLjAgLSAx
KSA8NjNBODlBOUItMkFDQy0zMzc4LTlCRDAtN0ZBOTcxRTA3QzJBPiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvUG93ZXJMb2cuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUG93ZXJMb2cK
ICAgIDB4N2ZmZjVlNjEzMDAwIC0gICAgIDB4N2ZmZjVlNjEzZmY1ICBjb20uYXBwbGUuUG93ZXJs
b2dDb250cm9sICgxLjAgLSAxKSA8ODUwMkRGNTgtMzZEOS0zODU5LUJBRkYtQzgwNzg4ODEwMUI3
PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvUG93ZXJsb2dDb250cm9sLmZyYW1l
d29yay9WZXJzaW9ucy9BL1Bvd2VybG9nQ29udHJvbAogICAgMHg3ZmZmNWYyOTgwMDAgLSAgICAg
MHg3ZmZmNWYyYjhmZjEgIGNvbS5hcHBsZS5wcm9hY3RpdmUuc3VwcG9ydC5Qcm9hY3RpdmVFdmVu
dFRyYWNrZXIgKDEuMCAtIDI1OC41KSA8NDlERTZEODMtQUM0NS0zMjdCLUJDMkItQjA4REQxNENB
OTJFPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvUHJvYWN0aXZlRXZlbnRUcmFj
a2VyLmZyYW1ld29yay9WZXJzaW9ucy9BL1Byb2FjdGl2ZUV2ZW50VHJhY2tlcgogICAgMHg3ZmZm
NWYzM2YwMDAgLSAgICAgMHg3ZmZmNWYzYThmZjIgIGNvbS5hcHBsZS5wcm9hY3RpdmUuc3VwcG9y
dC5Qcm9hY3RpdmVTdXBwb3J0ICgxLjAgLSAyNTguNSkgPDk1RjAwODZDLTMyOUQtMzI1NS05MUZG
LTkwOEVCMUJBQkQyOD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1Byb2FjdGl2
ZVN1cHBvcnQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUHJvYWN0aXZlU3VwcG9ydAogICAgMHg3ZmZm
NWY0OGUwMDAgLSAgICAgMHg3ZmZmNWY0ZThmZjYgIGNvbS5hcHBsZS5Qcm90ZWN0ZWRDbG91ZFN0
b3JhZ2UgKDEuMCAtIDEpIDw5NjlCRjdBMi1FOTg5LTNBMjItQkMxQi03MkI3MkUxMDcyMjk+IC9T
eXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Qcm90ZWN0ZWRDbG91ZFN0b3JhZ2UuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvUHJvdGVjdGVkQ2xvdWRTdG9yYWdlCiAgICAweDdmZmY1ZjRlOTAw
MCAtICAgICAweDdmZmY1ZjUwMmZmYiAgY29tLmFwcGxlLlByb3RvY29sQnVmZmVyICgxIC0gMjc0
LjI0LjkuMTYuMykgPEEyRTM0MTIzLTdDRUQtMzc4Qi1BNDNELTFCOThCNUI4NUY1Qz4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1Byb3RvY29sQnVmZmVyLmZyYW1ld29yay9WZXJz
aW9ucy9BL1Byb3RvY29sQnVmZmVyCiAgICAweDdmZmY1ZjUzYzAwMCAtICAgICAweDdmZmY1ZjVi
OWZmZiAgY29tLmFwcGxlLlF1YWdnYSAoMS4wIC0gMSkgPDQyRTI0REUyLTQyMzAtMzMwNy1CQUMz
LURCNzFGNjVGMkFCND4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1F1YWdnYS5m
cmFtZXdvcmsvVmVyc2lvbnMvQS9RdWFnZ2EKICAgIDB4N2ZmZjVmNjE0MDAwIC0gICAgIDB4N2Zm
ZjVmNjE3ZmY0ICBjb20uYXBwbGUuUXVpY2tMb29rTm9uQmFzZVN5c3RlbSAoMS4wIC0gMSkgPDQ1
NzlENDE4LTlDMzQtM0YyOS1CMTIxLTAwNDZGMkI4N0QwQj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZh
dGVGcmFtZXdvcmtzL1F1aWNrTG9va05vbkJhc2VTeXN0ZW0uZnJhbWV3b3JrL1ZlcnNpb25zL0Ev
UXVpY2tMb29rTm9uQmFzZVN5c3RlbQogICAgMHg3ZmZmNWY2MTgwMDAgLSAgICAgMHg3ZmZmNWY2
M2JmZjAgIGNvbS5hcHBsZS5xdWlja2xvb2suUXVpY2tMb29rU3VwcG9ydCAoMS4wIC0gMSkgPEQ0
RTcxRkE2LTU3NzYtMzA0Ri1CMDA3LTUxRkZDODFDNjc4MD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZh
dGVGcmFtZXdvcmtzL1F1aWNrTG9va1N1cHBvcnQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUXVpY2tM
b29rU3VwcG9ydAogICAgMHg3ZmZmNWY2M2QwMDAgLSAgICAgMHg3ZmZmNWY2NDZmZmIgIGNvbS5h
cHBsZS5SVENSZXBvcnRpbmcgKDEwLjg5IC0gMTAuODkpIDwwMzUzMjMwQy00MUE1LTNBMTMtQjIw
Ni1EMDdGMjBGMkU3REM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9SVENSZXBv
cnRpbmcuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUlRDUmVwb3J0aW5nCiAgICAweDdmZmY1ZjY4MjAw
MCAtICAgICAweDdmZmY1ZjZmYmZmMyAgY29tLmFwcGxlLlJhcHBvcnQgKDEuOS41IC0gMTk1LjIp
IDw2REI0RUZCNS1BNzBDLTM2QUEtOTcxQi0zQjcyOEVFRjQxQUI+IC9TeXN0ZW0vTGlicmFyeS9Q
cml2YXRlRnJhbWV3b3Jrcy9SYXBwb3J0LmZyYW1ld29yay9WZXJzaW9ucy9BL1JhcHBvcnQKICAg
IDB4N2ZmZjVmOTQyMDAwIC0gICAgIDB4N2ZmZjVmOTRlZmY1ICBjb20uYXBwbGUueHBjLlJlbW90
ZVNlcnZpY2VEaXNjb3ZlcnkgKDEuMCAtIDE3MzguMTIwLjgpIDw5NzU0RkM4Qy0zRUFGLTNGOUIt
OEEyOC1BNjNENDcyREQ2RjA+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9SZW1v
dGVTZXJ2aWNlRGlzY292ZXJ5LmZyYW1ld29yay9WZXJzaW9ucy9BL1JlbW90ZVNlcnZpY2VEaXNj
b3ZlcnkKICAgIDB4N2ZmZjVmOTYxMDAwIC0gICAgIDB4N2ZmZjVmOThhZmYxICBjb20uYXBwbGUu
UmVtb3RlVmlld1NlcnZpY2VzICgyLjAgLSAxNDgpIDwxQzYxQ0ZDMi1GNzZGLTMxRTUtQkExMy1F
RkQ1REM2OUM4RDU+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9SZW1vdGVWaWV3
U2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVtb3RlVmlld1NlcnZpY2VzCiAgICAweDdm
ZmY1Zjk4YjAwMCAtICAgICAweDdmZmY1ZjlhMGZmYSAgY29tLmFwcGxlLnhwYy5SZW1vdGVYUEMg
KDEuMCAtIDE3MzguMTIwLjgpIDxCRUM0M0MzQi1ENDcyLTMzNUQtOEQ0Qi05MERDQUNFQzU3NTg+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9SZW1vdGVYUEMuZnJhbWV3b3JrL1Zl
cnNpb25zL0EvUmVtb3RlWFBDCiAgICAweDdmZmY1ZmEwZTAwMCAtICAgICAweDdmZmY1ZmE1OGZm
YSAgY29tLmFwcGxlLlJlc3BvbnNlS2l0ICgxLjAgLSAxNDguMikgPDRBMDU0MUQ1LTA2NDItM0Qz
NS1CNkVGLUFDNjEzQ0NGRTA5OD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1Jl
c3BvbnNlS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL1Jlc3BvbnNlS2l0CiAgICAweDdmZmY1ZmFl
ZjAwMCAtICAgICAweDdmZmY1ZmIyYWZmMCAgY29tLmFwcGxlLlJ1bm5pbmdCb2FyZFNlcnZpY2Vz
ICgxLjAgLSAyMjMuMTAwLjMxKSA8OUZEMUZDNTMtMTg2QS0zMzI3LUEzNTktQjBCQzdGNDM2MEVG
PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvUnVubmluZ0JvYXJkU2VydmljZXMu
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvUnVubmluZ0JvYXJkU2VydmljZXMKICAgIDB4N2ZmZjYwMDVj
MDAwIC0gICAgIDB4N2ZmZjYwN2RjZmZjICBjb20uYXBwbGUuU2FmYXJpLmZyYW1ld29yayAoMTU2
MDkgLSAxNTYwOS4yLjkuMS4yKSA8MkJBQjNCQzUtREI2Qi0zREQzLTg5RjItMjM3QTU5RTBBRDFD
PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvU2FmYXJpLmZyYW1ld29yay9WZXJz
aW9ucy9BL1NhZmFyaQogICAgMHg3ZmZmNjA3ZGQwMDAgLSAgICAgMHg3ZmZmNjA4NDFmZmUgIGNv
bS5hcHBsZS5TYWZhcmkuQ29yZSAoMTU2MDkgLSAxNTYwOS4yLjkuMS4yKSA8RTRDRUU0QkItOTYy
OS0zQTRBLTlFRTUtRTcyMEY0MDRFODI2PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29y
a3MvU2FmYXJpQ29yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TYWZhcmlDb3JlCiAgICAweDdmZmY2
MDg0MjAwMCAtICAgICAweDdmZmY2MDg0ZGZmOCAgY29tLmFwcGxlLlNhZmFyaUZvdW5kYXRpb24g
KDE1NjA5IC0gMTU2MDkuMi45LjEuMikgPDlFRjE0Nzg3LUQ3NkEtM0MwMi1CNEU3LUMwNDVFQTJB
M0Y4Qj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NhZmFyaUZvdW5kYXRpb24u
ZnJhbWV3b3JrL1ZlcnNpb25zL0EvU2FmYXJpRm91bmRhdGlvbgogICAgMHg3ZmZmNjA4NTIwMDAg
LSAgICAgMHg3ZmZmNjA4OWVmZjkgIGNvbS5hcHBsZS5TYWZhcmkuU2FmZUJyb3dzaW5nICgxNTYw
OSAtIDE1NjA5LjIuOS4xLjIpIDw1N0FDMDM0NS1EMzQ5LTM0NzctOUVDQS05QkFENDY1ODE5RUE+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9TYWZhcmlTYWZlQnJvd3NpbmcuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvU2FmYXJpU2FmZUJyb3dzaW5nCiAgICAweDdmZmY2MDg5ZjAwMCAt
ICAgICAweDdmZmY2MGFlZmZmMCAgY29tLmFwcGxlLlNhZmFyaS5TaGFyZWQgKDE1NjA5IC0gMTU2
MDkuMi45LjEuMikgPDBEMjVFNzA5LTA0NUItMzI5MC05ODkyLTY2NzcwOUQ0NkVEQz4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NhZmFyaVNoYXJlZC5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9TYWZhcmlTaGFyZWQKICAgIDB4N2ZmZjYwYWYwMDAwIC0gICAgIDB4N2ZmZjYwYjkwZmZk
ICBjb20uYXBwbGUuU2FmYXJpLlNoYXJlZC5VSSAoMTU2MDkgLSAxNTYwOS4yLjkuMS4yKSA8MjUw
NzQ3QUEtNDAyRS0zMjBFLUIzQkUtRUM0Njk3NDMzNTE5PiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvU2FmYXJpU2hhcmVkVUkuZnJhbWV3b3JrL1ZlcnNpb25zL0EvU2FmYXJpU2hh
cmVkVUkKICAgIDB4N2ZmZjYxMTZlMDAwIC0gICAgIDB4N2ZmZjYxMWUzZmZjICBjb20uYXBwbGUu
U2NyZWVuVGltZUNvcmUgKDIuMyAtIDQ0MCkgPDcwQzIyQTdDLUIwMTMtMzFEQS1BQTBGLTdCOUQw
MERDRTQ5RD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NjcmVlblRpbWVDb3Jl
LmZyYW1ld29yay9WZXJzaW9ucy9BL1NjcmVlblRpbWVDb3JlCiAgICAweDdmZmY2MTFlNDAwMCAt
ICAgICAweDdmZmY2MTFlNWZmOCAgY29tLmFwcGxlLlNjcmVlblRpbWVTZXJ2aWNlVUkgKDIuMyAt
IDQ0MCkgPDdEOThCN0U0LUNDMUItMzNEMi04NjQwLTkzOEFBMjc0Nzc0Qz4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NjcmVlblRpbWVTZXJ2aWNlVUkuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvU2NyZWVuVGltZVNlcnZpY2VVSQogICAgMHg3ZmZmNjEyMTYwMDAgLSAgICAgMHg3ZmZm
NjEyMzRmZjUgIGNvbS5hcHBsZS5TY3JlZW5UaW1lVUkgKDIuMyAtIDQ0MCkgPDhBMUVFMjQzLTQ1
OTYtM0E1Ri1BMUY4LUI5NzkwQkMzNzQ5RT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdv
cmtzL1NjcmVlblRpbWVVSS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TY3JlZW5UaW1lVUkKICAgIDB4
N2ZmZjYxMjQzMDAwIC0gICAgIDB4N2ZmZjYxMzk4ZmZhICBjb20uYXBwbGUuU2VhcmNoRm91bmRh
dGlvbiAoMS4wIC0gMzEyLjUuMTcpIDxBRjgzQ0FDMC04RDFBLTNFOEUtQTY5OC1CQTgzNTAwRENC
NzU+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9TZWFyY2hGb3VuZGF0aW9uLmZy
YW1ld29yay9WZXJzaW9ucy9BL1NlYXJjaEZvdW5kYXRpb24KICAgIDB4N2ZmZjYxMzk5MDAwIC0g
ICAgIDB4N2ZmZjYxM2ZjZmY3ICBjb20uYXBwbGUuU2VhcmNoVUkgKDEuMCAtIDEpIDxEMTI5NEM4
QS1FQjkyLTNENjctQjQyRC02N0FCMUEwMzM5RkQ+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJh
bWV3b3Jrcy9TZWFyY2hVSS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TZWFyY2hVSQogICAgMHg3ZmZm
NjE0MGEwMDAgLSAgICAgMHg3ZmZmNjE0MGRmZjUgIGNvbS5hcHBsZS5TZWNDb2RlV3JhcHBlciAo
NC4wIC0gNDQ4LjEwMC42KSA8ODEzQjNFNTctNkE5NS0zRDdCLTkwOTQtQzY1RDY4N0E3MkI4PiAv
U3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvU2VjQ29kZVdyYXBwZXIuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvU2VjQ29kZVdyYXBwZXIKICAgIDB4N2ZmZjYxNDk3MDAwIC0gICAgIDB4N2Zm
ZjYxNDljZmZjICBjb20uYXBwbGUuU2VydmVySW5mb3JtYXRpb24gKDIuMCAtIDEpIDw2RkU3MzlD
Ni1ENzUwLTNGNUItOUZEOS1EMUNCNEQwQTkyMUU+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJh
bWV3b3Jrcy9TZXJ2ZXJJbmZvcm1hdGlvbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TZXJ2ZXJJbmZv
cm1hdGlvbgogICAgMHg3ZmZmNjE1NmUwMDAgLSAgICAgMHg3ZmZmNjE1N2ZmZjUgIGNvbS5hcHBs
ZS5TaGFyZWRXZWJDcmVkZW50aWFscyAoMjEzLjIgLSAyMTMuMikgPDdERTA4RTU2LTI5MUEtMzQw
Qy1COEIwLTkxQ0RDQUREQjM2OD4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1No
YXJlZFdlYkNyZWRlbnRpYWxzLmZyYW1ld29yay9WZXJzaW9ucy9BL1NoYXJlZFdlYkNyZWRlbnRp
YWxzCiAgICAweDdmZmY2MTU4MDAwMCAtICAgICAweDdmZmY2MTZhN2ZmMCAgY29tLmFwcGxlLlNo
YXJpbmcgKDE1MjYuMzEgLSAxNTI2LjMxKSA8MkNCMDdGMDgtNzc5NC0zQkYyLTlFRDUtQkFCNUM1
NUM5RDJDPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvU2hhcmluZy5mcmFtZXdv
cmsvVmVyc2lvbnMvQS9TaGFyaW5nCiAgICAweDdmZmY2MTcxZjAwMCAtICAgICAweDdmZmY2MTcz
ZmZmNSAgY29tLmFwcGxlLnNpZGVjYXItY29yZSAoMS4wIC0gMjA5LjQwLjQpIDxBNUJFQkNGNi0w
QjJGLTNCQTctOUY0Qy1BNjVFNEFFQ0IyRTY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9TaWRlY2FyQ29yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9TaWRlY2FyQ29yZQogICAgMHg3
ZmZmNjE3NDAwMDAgLSAgICAgMHg3ZmZmNjE3NTJmZjAgIGNvbS5hcHBsZS5zaWRlY2FyLXVpICgx
LjAgLSAyMDkuNDAuNCkgPDU1NDg2QjNBLUI2NUEtMzAyMy04OUM3LUExNTRBMzlEMEQ3RT4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NpZGVjYXJVSS5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9TaWRlY2FyVUkKICAgIDB4N2ZmZjYyYWJhMDAwIC0gICAgIDB4N2ZmZjYyZGIwZmY3ICBj
b20uYXBwbGUuU2t5TGlnaHQgKDEuNjAwLjAgLSA0NTEuNCkgPEY1QjkwNjVBLUU5NzUtMzZEMS04
RDUzLTlGQkYwMjE3MUZBQj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NreUxp
Z2h0LmZyYW1ld29yay9WZXJzaW9ucy9BL1NreUxpZ2h0CiAgICAweDdmZmY2MzVmZDAwMCAtICAg
ICAweDdmZmY2MzYwYmZmYiAgY29tLmFwcGxlLlNwZWVjaFJlY29nbml0aW9uQ29yZSAoNi4wLjkx
LjIgLSA2LjAuOTEuMikgPDgyMDYwMkFCLTExN0ItM0MzRS1CMjBCLTgxOUNCQzk3QjdBND4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1NwZWVjaFJlY29nbml0aW9uQ29yZS5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9TcGVlY2hSZWNvZ25pdGlvbkNvcmUKICAgIDB4N2ZmZjYzNmNkMDAw
IC0gICAgIDB4N2ZmZjYzOTU3ZmZlICBjb20uYXBwbGUuc3BvdGxpZ2h0LmluZGV4ICgxMC43LjAg
LSAyMDc2LjYpIDwzOEUyMDhGRS1BNEU1LTNCNkMtOTkzNy05N0NBMTUyRjFCQjI+IC9TeXN0ZW0v
TGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9TcG90bGlnaHRJbmRleC5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9TcG90bGlnaHRJbmRleAogICAgMHg3ZmZmNjNhMDcwMDAgLSAgICAgMHg3ZmZmNjNhNDRm
ZmUgIGNvbS5hcHBsZS5TdG9yYWdlS2l0ICgxLjAgLSA1ODkpIDxFRUE5MDBBNi0yNjkyLTM1Njgt
OTk1Ny1ERDIwNkZFRTM5MjM+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9TdG9y
YWdlS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL1N0b3JhZ2VLaXQKICAgIDB4N2ZmZjYzYTQ1MDAw
IC0gICAgIDB4N2ZmZjYzYTU1ZmZlICBjb20uYXBwbGUuU3RvcmFnZU1hbmFnZW1lbnQgKDEuMCAt
IDEpIDxFNjRBMDAyQS01MEI5LTMyNzEtOUIzOS03MTEyMEFDNDNGQjI+IC9TeXN0ZW0vTGlicmFy
eS9Qcml2YXRlRnJhbWV3b3Jrcy9TdG9yYWdlTWFuYWdlbWVudC5mcmFtZXdvcmsvVmVyc2lvbnMv
QS9TdG9yYWdlTWFuYWdlbWVudAogICAgMHg3ZmZmNjNhNTYwMDAgLSAgICAgMHg3ZmZmNjNhYmJm
ZmYgIGNvbS5hcHBsZS5TdG9yZUZvdW5kYXRpb24gKDEuMCAtIDcwOS42LjUpIDw5QjkwOTdCQy1E
RDRFLTNBRjUtODA0RS1FOEZGOUFDQzNCMDY+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9TdG9yZUZvdW5kYXRpb24uZnJhbWV3b3JrL1ZlcnNpb25zL0EvU3RvcmVGb3VuZGF0aW9u
CiAgICAweDdmZmY2M2NlNTAwMCAtICAgICAweDdmZmY2M2QyNmZmOSAgY29tLmFwcGxlLlN0cmVh
bWluZ1ppcCAoMS4wIC0gMSkgPEVGQ0REQzk0LTI4RUUtM0JDQS1BMTA1LTBBOTI4RDE1RUQ4Qz4g
L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1N0cmVhbWluZ1ppcC5mcmFtZXdvcmsv
VmVyc2lvbnMvQS9TdHJlYW1pbmdaaXAKICAgIDB4N2ZmZjYzZTNkMDAwIC0gICAgIDB4N2ZmZjYz
ZTQ2ZmY3ICBjb20uYXBwbGUuU3ltcHRvbURpYWdub3N0aWNSZXBvcnRlciAoMS4wIC0gMTIzOC4x
MjAuMSkgPDU4MUYzMUQ2LTk0Q0ItMzhBQS1CRDU2LTFBNjM2MDZFNTE2RT4gL1N5c3RlbS9MaWJy
YXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1N5bXB0b21EaWFnbm9zdGljUmVwb3J0ZXIuZnJhbWV3b3Jr
L1ZlcnNpb25zL0EvU3ltcHRvbURpYWdub3N0aWNSZXBvcnRlcgogICAgMHg3ZmZmNjNlYjcwMDAg
LSAgICAgMHg3ZmZmNjNlZTFmZmEgIGNvbS5hcHBsZS5mcmFtZXdvcmsuU3lzdGVtQWRtaW5pc3Ry
YXRpb24gKDEuMCAtIDEuMCkgPDkyNkJCMkY1LUUwMkMtMzBCNy05NDlBLTIwRUZFNTdDRjI0Mj4g
L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1N5c3RlbUFkbWluaXN0cmF0aW9uLmZy
YW1ld29yay9WZXJzaW9ucy9BL1N5c3RlbUFkbWluaXN0cmF0aW9uCiAgICAweDdmZmY2NDBlMjAw
MCAtICAgICAweDdmZmY2NDBmOGZmNSAgY29tLmFwcGxlLnByaXZhdGUuU3lzdGVtUG9saWN5ICgx
LjAgLSAxKSA8Rjc5M0NEQzItNEZCMC0zQTI3LUJFRTctMzE0RkRDMDg4ODAzPiAvU3lzdGVtL0xp
YnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvU3lzdGVtUG9saWN5LmZyYW1ld29yay9WZXJzaW9ucy9B
L1N5c3RlbVBvbGljeQogICAgMHg3ZmZmNjQwZmQwMDAgLSAgICAgMHg3ZmZmNjQxMGRmZjMgIGNv
bS5hcHBsZS5UQ0MgKDEuMCAtIDEpIDxGRDE0NkIyMS02REMwLTNCNjYtQkI5NS01N0E1MDE2QjEz
NjU+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9UQ0MuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvVENDCiAgICAweDdmZmY2NDE3OTAwMCAtICAgICAweDdmZmY2NDI0M2ZmZiAgY29tLmFw
cGxlLlRlbGVwaG9ueVV0aWxpdGllcyAoMS4wIC0gMS4wKSA8MTk2RkEyMjYtQTBBRC0zN0UzLUEy
MUEtMDAyRURDNDEwRkQwPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvVGVsZXBo
b255VXRpbGl0aWVzLmZyYW1ld29yay9WZXJzaW9ucy9BL1RlbGVwaG9ueVV0aWxpdGllcwogICAg
MHg3ZmZmNjQyNDQwMDAgLSAgICAgMHg3ZmZmNjQyOGFmZjYgIGNvbS5hcHBsZS5UZW1wbGF0ZUtp
dCAoMS4wIC0gMSkgPEZENUE0QjZBLTMwOUUtM0Y4Ri1CNkJELTc5ODU5NTlEODZCOD4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1RlbXBsYXRlS2l0LmZyYW1ld29yay9WZXJzaW9u
cy9BL1RlbXBsYXRlS2l0CiAgICAweDdmZmY2NDRiNDAwMCAtICAgICAweDdmZmY2NDYwZmZmNSAg
Y29tLmFwcGxlLlRleHRSZWNvZ25pdGlvbiAoMS4wIC0gMTU3KSA8OUEwNkIwRTctMERCRi0zREM2
LUIwMjUtM0ZFOUNGRjdDNjNBPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvVGV4
dFJlY29nbml0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL1RleHRSZWNvZ25pdGlvbgogICAgMHg3
ZmZmNjQ2MzIwMDAgLSAgICAgMHg3ZmZmNjQ2ZjhmZjAgIGNvbS5hcHBsZS5UZXh0dXJlSU8gKDMu
MTAuOSAtIDMuMTAuOSkgPEUyM0UwNUVELTgxOTAtMzU2NC05ODVFLTQ0NkYxNUNCMDcwOT4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1RleHR1cmVJTy5mcmFtZXdvcmsvVmVyc2lv
bnMvQS9UZXh0dXJlSU8KICAgIDB4N2ZmZjY0NzdiMDAwIC0gICAgIDB4N2ZmZjY0Nzk2ZmY4ICBj
b20uYXBwbGUuVG9uZUtpdCAoMS4wIC0gMSkgPDJENTE5ODFGLUEzNkItM0M3MS1BRUMyLUY0NTND
Qzk4MjdBNz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1RvbmVLaXQuZnJhbWV3
b3JrL1ZlcnNpb25zL0EvVG9uZUtpdAogICAgMHg3ZmZmNjQ3OTcwMDAgLSAgICAgMHg3ZmZmNjQ3
YzFmZjAgIGNvbS5hcHBsZS5Ub25lTGlicmFyeSAoMS4wIC0gMSkgPEQ4QjkxQTY5LTc1NDUtMzJG
MS05QTU2LTMwMkI4MTkyQkM3Nz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1Rv
bmVMaWJyYXJ5LmZyYW1ld29yay9WZXJzaW9ucy9BL1RvbmVMaWJyYXJ5CiAgICAweDdmZmY2NDg4
NDAwMCAtICAgICAweDdmZmY2NDg4NWZmZiAgY29tLmFwcGxlLlRydXN0RXZhbHVhdGlvbkFnZW50
ICgyLjAgLSAzMykgPDExREY1QTI4LTQ0MTAtMzZBOC1CM0I4LUJGMTA5NEJFMTU0ND4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1RydXN0RXZhbHVhdGlvbkFnZW50LmZyYW1ld29y
ay9WZXJzaW9ucy9BL1RydXN0RXZhbHVhdGlvbkFnZW50CiAgICAweDdmZmY2NDhiZDAwMCAtICAg
ICAweDdmZmY2NGIxNWZmMCAgY29tLmFwcGxlLlVJRm91bmRhdGlvbiAoMS4wIC0gNjYyKSA8REZE
M0RENEEtRTY2MS0zQTEyLUJCMDItMDY4OTg5NDk2MTdEPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0
ZUZyYW1ld29ya3MvVUlGb3VuZGF0aW9uLmZyYW1ld29yay9WZXJzaW9ucy9BL1VJRm91bmRhdGlv
bgogICAgMHg3ZmZmNjRiYWMwMDAgLSAgICAgMHg3ZmZmNjRiYjJmZmUgIGNvbS5hcHBsZS5VUkxG
b3JtYXR0aW5nICgxMTkgLSAxMTkuMTgpIDxDRTVCN0IyQi03Q0I5LTMyMTQtQkZBMi1ENkQ0RjEz
RDc2NTI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9VUkxGb3JtYXR0aW5nLmZy
YW1ld29yay9WZXJzaW9ucy9BL1VSTEZvcm1hdHRpbmcKICAgIDB4N2ZmZjY1NjdkMDAwIC0gICAg
IDB4N2ZmZjY1NjgxZmZlICBjb20uYXBwbGUuVW5pbnN0YWxsICgxLjAuMSAtIDIxMSkgPDNFMDVD
NDc3LTg3QkItMzU2Qy04MkY3LUQ3NjYxRDIzOURGNj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVG
cmFtZXdvcmtzL1VuaW5zdGFsbC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Vbmluc3RhbGwKICAgIDB4
N2ZmZjY1NmY1MDAwIC0gICAgIDB4N2ZmZjY1NmY3ZmZmICBsaWJVQVByZWZlcmVuY2VzLmR5bGli
ICg0ODcuMTQpIDxGRjhBODlFQS03RTZGLTMwRDUtQjY4Qy0wRENBODFDMzQzMDE+IC9TeXN0ZW0v
TGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Vbml2ZXJzYWxBY2Nlc3MuZnJhbWV3b3JrL1ZlcnNp
b25zL0EvTGlicmFyaWVzL2xpYlVBUHJlZmVyZW5jZXMuZHlsaWIKICAgIDB4N2ZmZjY1NmZlMDAw
IC0gICAgIDB4N2ZmZjY1NzI1ZmY4ICBjb20uYXBwbGUuVXNhZ2VUcmFja2luZyAoMi4xIC0gMTMx
KSA8QkZEQkREMTMtRUYwOC0zOEY3LUFDQ0UtMDkwN0MwMjE0NTNCPiAvU3lzdGVtL0xpYnJhcnkv
UHJpdmF0ZUZyYW1ld29ya3MvVXNhZ2VUcmFja2luZy5mcmFtZXdvcmsvVmVyc2lvbnMvQS9Vc2Fn
ZVRyYWNraW5nCiAgICAweDdmZmY2NTcyNjAwMCAtICAgICAweDdmZmY2NTc4N2ZmOSAgY29tLmFw
cGxlLlVzZXJBY3Rpdml0eSAoMzU3IC0gMzU3KSA8OTA0RjkzNzItMDJGMC0zQzhFLUExNzYtMUNB
RkQ1M0M3QTUwPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvVXNlckFjdGl2aXR5
LmZyYW1ld29yay9WZXJzaW9ucy9BL1VzZXJBY3Rpdml0eQogICAgMHg3ZmZmNjU3ODgwMDAgLSAg
ICAgMHg3ZmZmNjU3YThmZmMgIGNvbS5hcHBsZS5Vc2VyTWFuYWdlbWVudCAoMS4wIC0gMSkgPEUx
NjgyMDZBLTlEQzEtM0M2Ny1BOUE2LTUyRDgxNkRCRDVCMT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZh
dGVGcmFtZXdvcmtzL1VzZXJNYW5hZ2VtZW50LmZyYW1ld29yay9WZXJzaW9ucy9BL1VzZXJNYW5h
Z2VtZW50CiAgICAweDdmZmY2NTg1ODAwMCAtICAgICAweDdmZmY2NWZlMWZmNyAgY29tLmFwcGxl
LlZlY3RvcktpdCAoMS4wIC0gMTYwNi4yNC4xMC4yOS4yOCkgPEVEQ0RDMEJGLTUwOUQtMzA3Ni1B
REFGLTJGMkI0RUIzNTMzRj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1ZlY3Rv
cktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9WZWN0b3JLaXQKICAgIDB4N2ZmZjY2NTU0MDAwIC0g
ICAgIDB4N2ZmZjY2NjNlZmY4ICBjb20uYXBwbGUuVmlld0JyaWRnZSAoNDY0LjEgLSA0NjQuMSkg
PEM2OThCQUM5LTI2QzgtMzlGMS1CQkMwLUY1N0VCRDJFRkQ3Qj4gL1N5c3RlbS9MaWJyYXJ5L1By
aXZhdGVGcmFtZXdvcmtzL1ZpZXdCcmlkZ2UuZnJhbWV3b3JrL1ZlcnNpb25zL0EvVmlld0JyaWRn
ZQogICAgMHg3ZmZmNjY3ZTQwMDAgLSAgICAgMHg3ZmZmNjY3ZTVmZmYgIGNvbS5hcHBsZS5XYXRj
aGRvZ0NsaWVudC5mcmFtZXdvcmsgKDEuMCAtIDY3LjEyMC4yKSA8M0I4RUJCNkItNzdEMC0zMTdD
LUEzREItRDBEMkUyOTRCMThEPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvV2F0
Y2hkb2dDbGllbnQuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2F0Y2hkb2dDbGllbnQKICAgIDB4N2Zm
ZjY2OTEzMDAwIC0gICAgIDB4N2ZmZjY2OWI3ZmYwICBjb20uYXBwbGUuV2ViSW5zcGVjdG9yICgx
NTYwOSAtIDE1NjA5LjIuOS4xLjIpIDw1QzUyMkVFMS00QjM1LTNGNTMtODYxRC0xNjYwNkI3RTRC
ODE+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9XZWJJbnNwZWN0b3IuZnJhbWV3
b3JrL1ZlcnNpb25zL0EvV2ViSW5zcGVjdG9yCiAgICAweDdmZmY2NjliODAwMCAtICAgICAweDdm
ZmY2NjliOGZmZiAgY29tLmFwcGxlLldlYkluc3BlY3RvclVJICgxNTYwOSAtIDE1NjA5LjIuOS4x
LjIpIDw3QkRCNDI4Ny05RjJELTM5OUUtOTg1MC1GNkY5Q0RBQzVEMzM+IC9TeXN0ZW0vTGlicmFy
eS9Qcml2YXRlRnJhbWV3b3Jrcy9XZWJJbnNwZWN0b3JVSS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9X
ZWJJbnNwZWN0b3JVSQogICAgMHg3ZmZmNjZiNzEwMDAgLSAgICAgMHg3ZmZmNjZiYWNmZmYgIGxp
YkFXRFN1cHBvcnQuZHlsaWIgKDk0OSkgPEM0RTc4M0E4LUE4RDgtMzA3RC1BRDUwLTNCNjZBODk0
NEI4RT4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL1dpcmVsZXNzRGlhZ25vc3Rp
Y3MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvTGlicmFyaWVzL2xpYkFXRFN1cHBvcnQuZHlsaWIKICAg
IDB4N2ZmZjY2YmFkMDAwIC0gICAgIDB4N2ZmZjY2ZThkZmY3ICBsaWJBV0RTdXBwb3J0RnJhbWV3
b3JrLmR5bGliICgzNTQxLjEpIDwxRjRGQjQxNy1FRTkyLTMwOTUtOTk0MC1DMzVDOTNGNkYwMjA+
IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9XaXJlbGVzc0RpYWdub3N0aWNzLmZy
YW1ld29yay9WZXJzaW9ucy9BL0xpYnJhcmllcy9saWJBV0RTdXBwb3J0RnJhbWV3b3JrLmR5bGli
CiAgICAweDdmZmY2NmU4ZTAwMCAtICAgICAweDdmZmY2NmU5ZmZmZiAgbGlicHJvdG9idWYtbGl0
ZS5keWxpYiAoMzU0MS4xKSA8M0VCM0NCRTAtNTQ0Qi0zOEQxLTgxRUItN0Q3M0NBMjIxOTY3PiAv
U3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvV2lyZWxlc3NEaWFnbm9zdGljcy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9MaWJyYXJpZXMvbGlicHJvdG9idWYtbGl0ZS5keWxpYgogICAgMHg3
ZmZmNjZlYTAwMDAgLSAgICAgMHg3ZmZmNjZlZjlmZmIgIGxpYnByb3RvYnVmLmR5bGliICgzNTQx
LjEpIDw0NUY3N0FFNS01RDdBLTMwRTctOTE2OC01NTQ2RkRDNTlDQTI+IC9TeXN0ZW0vTGlicmFy
eS9Qcml2YXRlRnJhbWV3b3Jrcy9XaXJlbGVzc0RpYWdub3N0aWNzLmZyYW1ld29yay9WZXJzaW9u
cy9BL0xpYnJhcmllcy9saWJwcm90b2J1Zi5keWxpYgogICAgMHg3ZmZmNjZlZmEwMDAgLSAgICAg
MHg3ZmZmNjZmM2VmZjYgIGNvbS5hcHBsZS5hd2QgKDEuMCAtIDk0OSkgPERBRjUxNzUwLUZEMDMt
MzUwOS05Q0JCLTgzRTlFRjBGQjM2Mz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtz
L1dpcmVsZXNzRGlhZ25vc3RpY3MuZnJhbWV3b3JrL1ZlcnNpb25zL0EvV2lyZWxlc3NEaWFnbm9z
dGljcwogICAgMHg3ZmZmNjc0MTIwMDAgLSAgICAgMHg3ZmZmNjc0MTVmZmEgIGNvbS5hcHBsZS5k
dC5YQ1RUYXJnZXRCb290c3RyYXAgKDEuMCAtIDE2MDkxKSA8RDRGMDlFQzctQzYzRi0zODYxLUI1
REEtM0Y3QzBERkYxNTNEPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvWENUVGFy
Z2V0Qm9vdHN0cmFwLmZyYW1ld29yay9WZXJzaW9ucy9BL1hDVFRhcmdldEJvb3RzdHJhcAogICAg
MHg3ZmZmNjc0OGYwMDAgLSAgICAgMHg3ZmZmNjc0OWRmZjUgIGNvbS5hcHBsZS5hdWRpby5jYXVs
ayAoMS4wIC0gMzIuMykgPDdEM0QyRjkxLThCMUQtMzU1OC1CMzI0LTQ1QkRGMTEzMDZEQj4gL1N5
c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL2NhdWxrLmZyYW1ld29yay9WZXJzaW9ucy9B
L2NhdWxrCiAgICAweDdmZmY2NzY2NTAwMCAtICAgICAweDdmZmY2NzY5YWZmZSAgY29tLmFwcGxl
LmlDYWxlbmRhciAoNy4wIC0gODEwLjQuMSkgPDg4M0E5NjVELURCOEItMzAzOC04OUU1LTBDNzZE
MUQ2NzIwNj4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL2lDYWxlbmRhci5mcmFt
ZXdvcmsvVmVyc2lvbnMvQS9pQ2FsZW5kYXIKICAgIDB4N2ZmZjY3N2RmMDAwIC0gICAgIDB4N2Zm
ZjY3N2UxZmYzICBjb20uYXBwbGUubG9naW5zdXBwb3J0ICgxLjAgLSAxKSA8MzFGMDI3MzQtMUVD
Ri0zN0Q5LTlERjYtN0MzQkMzQTMyNEZFPiAvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29y
a3MvbG9naW4uZnJhbWV3b3JrL1ZlcnNpb25zL0EvRnJhbWV3b3Jrcy9sb2dpbnN1cHBvcnQuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvbG9naW5zdXBwb3J0CiAgICAweDdmZmY2NzdlMjAwMCAtICAgICAw
eDdmZmY2NzdmNWZmZCAgY29tLmFwcGxlLmxvZ2luICgzLjAgLSAzLjApIDwxREM1NzBGRC0yOUVD
LTNBRTgtQkQzNC1ENDRDMDBFNDYyMUI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9sb2dpbi5mcmFtZXdvcmsvVmVyc2lvbnMvQS9sb2dpbgogICAgMHg3ZmZmNjc4MjcwMDAgLSAg
ICAgMHg3ZmZmNjc4MzNmZmQgIGNvbS5hcHBsZS5wZXJmZGF0YSAoMS4wIC0gNTEuMTAwLjYpIDwy
RjJCOUQwRi1DQjg3LTM3MTItQjA0Qi1EQTA3NUE0ODAwMkI+IC9TeXN0ZW0vTGlicmFyeS9Qcml2
YXRlRnJhbWV3b3Jrcy9wZXJmZGF0YS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9wZXJmZGF0YQogICAg
MHg3ZmZmNjc4MzQwMDAgLSAgICAgMHg3ZmZmNjc4NjVmZmQgIGNvbS5hcHBsZS5jb250YWN0cy52
Q2FyZCAoMS4wIC0gMzQ1NS4xOCkgPEEyMUQyQzU4LTU0RkItMzRERC1CNkIzLTZBOTVBMTE3OEQy
Nz4gL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzL3ZDYXJkLmZyYW1ld29yay9WZXJz
aW9ucy9BL3ZDYXJkCiAgICAweDdmZmY2YTFkMzAwMCAtICAgICAweDdmZmY2YTFlOGZmZSAgbGli
QWNjZXNzaWJpbGl0eS5keWxpYiAoMjc5MC43MCkgPDAxNzVEQ0FCLUFEQ0ItM0Y4Ri1CRDY0LUU4
RTUxQzAwODI1RT4gL3Vzci9saWIvbGliQWNjZXNzaWJpbGl0eS5keWxpYgogICAgMHg3ZmZmNmEy
YjgwMDAgLSAgICAgMHg3ZmZmNmEyYzRmZjkgIGxpYkF1ZGlvU3RhdGlzdGljcy5keWxpYiAoMTEw
NC44NCkgPENCRkQ3Rjc5LTE1RjEtMzgyOC1CMkZGLTkyMUY3MUM5MUZEQz4gL3Vzci9saWIvbGli
QXVkaW9TdGF0aXN0aWNzLmR5bGliCiAgICAweDdmZmY2YTJjNTAwMCAtICAgICAweDdmZmY2YTJm
OGZmYSAgbGliQXVkaW9Ub29sYm94VXRpbGl0eS5keWxpYiAoMTEwNC44NCkgPEJCMjM0NTYzLUY5
NTItM0U3Ri1CNjMwLTQxNDBEQjVFMDM4MD4gL3Vzci9saWIvbGliQXVkaW9Ub29sYm94VXRpbGl0
eS5keWxpYgogICAgMHg3ZmZmNmEyZmYwMDAgLSAgICAgMHg3ZmZmNmEzMzNmZmYgIGxpYkNSRlN1
aXRlLmR5bGliICg0OCkgPDAyQzUyMzE4LUM1MzctM0ZEOC1CQkM0LUU1QkQyNTQzMDY1Mj4gL3Vz
ci9saWIvbGliQ1JGU3VpdGUuZHlsaWIKICAgIDB4N2ZmZjZhMzM2MDAwIC0gICAgIDB4N2ZmZjZh
MzQwZmZmICBsaWJDaGluZXNlVG9rZW5pemVyLmR5bGliICgzNCkgPDA0QTdDQjVBLUZENjgtMzk4
QS1BMjA2LTMzQTUxMEMxMTVFNz4gL3Vzci9saWIvbGliQ2hpbmVzZVRva2VuaXplci5keWxpYgog
ICAgMHg3ZmZmNmEzNDEwMDAgLSAgICAgMHg3ZmZmNmEzYzlmZmYgIGxpYkNvcmVTdG9yYWdlLmR5
bGliICg1NTEpIDxCQkQzQjNEQy0yNzBELTM1RjItOEM2Ny00NTk1QTI1N0VFQkI+IC91c3IvbGli
L2xpYkNvcmVTdG9yYWdlLmR5bGliCiAgICAweDdmZmY2YTNjYzAwMCAtICAgICAweDdmZmY2YTNj
ZWZmNyAgbGliRGlhZ25vc3RpY01lc3NhZ2VzQ2xpZW50LmR5bGliICgxMTIpIDwyNzIyMEU5OC02
Q0UyLTMzRTMtQkQ0OC0zQ0MzQ0U0QUEwMzY+IC91c3IvbGliL2xpYkRpYWdub3N0aWNNZXNzYWdl
c0NsaWVudC5keWxpYgogICAgMHg3ZmZmNmE0MTQwMDAgLSAgICAgMHg3ZmZmNmE1Y2JmZmIgIGxp
YkZvc2xfZHluYW1pYy5keWxpYiAoMTAwLjQpIDw2ODAzODIyNi04Q0FBLTM2QjUtQjVENi01MTBG
OTAwQjMxOEQ+IC91c3IvbGliL2xpYkZvc2xfZHluYW1pYy5keWxpYgogICAgMHg3ZmZmNmE1ZjIw
MDAgLSAgICAgMHg3ZmZmNmE1ZjhmZjMgIGxpYklPUmVwb3J0LmR5bGliICg1NCkgPEUzQTIxNDhF
LUM1QjItMzBBOC1BQ0QzLUUwODFERDAyQkU5MD4gL3Vzci9saWIvbGliSU9SZXBvcnQuZHlsaWIK
ICAgIDB4N2ZmZjZhNmRhMDAwIC0gICAgIDB4N2ZmZjZhNmUxZmZmICBsaWJNYXRjaC4xLmR5bGli
ICgzNikgPDA4MUZCNkE5LTA0ODItMzY5Ny1BOThCLTY4MjFGRjQ3NkM2RT4gL3Vzci9saWIvbGli
TWF0Y2guMS5keWxpYgogICAgMHg3ZmZmNmE3MTAwMDAgLSAgICAgMHg3ZmZmNmE3MzBmZmYgIGxp
Yk1vYmlsZUdlc3RhbHQuZHlsaWIgKDgyNi4xMjAuNSkgPDE5NzdBRDAwLTUzM0EtMzFBQS04RDc0
LUVBNkNCOTYyRjY2OD4gL3Vzci9saWIvbGliTW9iaWxlR2VzdGFsdC5keWxpYgogICAgMHg3ZmZm
NmE3MzEwMDAgLSAgICAgMHg3ZmZmNmE3OWFmZmYgIGxpYlBhcmFsbGVsQ29tcHJlc3Npb24uZHls
aWIgKDE0Mi4xMDAuMykgPDM0RUI4QjFGLTY3MzUtM0UyQi1COTA0LTFCOTY5OTk2OERFND4gL3Vz
ci9saWIvbGliUGFyYWxsZWxDb21wcmVzc2lvbi5keWxpYgogICAgMHg3ZmZmNmE3YjAwMDAgLSAg
ICAgMHg3ZmZmNmE4OGRmZjcgIGxpYlNNQy5keWxpYiAoMjApIDw1RkNFNjY4RS1DNEQ1LTNFMzYt
OThCOS02REY3MjBEQ0Q4ODY+IC91c3IvbGliL2xpYlNNQy5keWxpYgogICAgMHg3ZmZmNmE4YTIw
MDAgLSAgICAgMHg3ZmZmNmE4YTNmZmYgIGxpYlN5c3RlbS5CLmR5bGliICgxMjgxLjEwMC4xKSA8
REMwNEIxODUtRTNDOS0zM0FGLUI0NTAtRUYzRUQwN0ZCMDIxPiAvdXNyL2xpYi9saWJTeXN0ZW0u
Qi5keWxpYgogICAgMHg3ZmZmNmE4YTQwMDAgLSAgICAgMHg3ZmZmNmE5MmZmZjcgIGxpYlRlbGVw
aG9ueVV0aWxEeW5hbWljLmR5bGliICg1MDE3LjEpIDw0QzExQTA5RC05QjdFLTM3NDMtQjlFNi0z
OUI0RDQ2NkJBRjE+IC91c3IvbGliL2xpYlRlbGVwaG9ueVV0aWxEeW5hbWljLmR5bGliCiAgICAw
eDdmZmY2YTkzMDAwMCAtICAgICAweDdmZmY2YTkzMWZmZiAgbGliVGhhaVRva2VuaXplci5keWxp
YiAoMykgPDk3REMxMEVELTNDMTEtM0M4OS1CMzY2LTI5OUE2NDQwMzVFNz4gL3Vzci9saWIvbGli
VGhhaVRva2VuaXplci5keWxpYgogICAgMHg3ZmZmNmE5MzIwMDAgLSAgICAgMHg3ZmZmNmE5Mzhm
ZjkgIGxpYlVuaXZlcnNhbEFjY2Vzcy5keWxpYiAoNDg3LjE0KSA8MEFCNkI0MUYtNjEwRS0zNjA1
LUE5NDktOTJDN0E4OENBMUY1PiAvdXNyL2xpYi9saWJVbml2ZXJzYWxBY2Nlc3MuZHlsaWIKICAg
IDB4N2ZmZjZhOTQ5MDAwIC0gICAgIDB4N2ZmZjZhOTVmZmZmICBsaWJhcHBsZV9uZ2h0dHAyLmR5
bGliICgxLjM5LjIpIDxCOTlENzE1MC1ENEUyLTMxQTItQTU5NC0zNkRBNEI5MEQ1NTg+IC91c3Iv
bGliL2xpYmFwcGxlX25naHR0cDIuZHlsaWIKICAgIDB4N2ZmZjZhOTk0MDAwIC0gICAgIDB4N2Zm
ZjZhYTA2ZmY3ICBsaWJhcmNoaXZlLjIuZHlsaWIgKDcyLjEwMC4xKSA8MjBCNzAyNTItMEM0Qi0z
QUZELThDOEQtRjUxOTIxRTlEMzI0PiAvdXNyL2xpYi9saWJhcmNoaXZlLjIuZHlsaWIKICAgIDB4
N2ZmZjZhYTA3MDAwIC0gICAgIDB4N2ZmZjZhYWEwZmU1ICBsaWJhdGUuZHlsaWIgKDMuMC4xKSA8
QzRBNUFFODgtNEU0NC0zNkZBLUFEM0UtMDYyOUFGOUI5NEUwPiAvdXNyL2xpYi9saWJhdGUuZHls
aWIKICAgIDB4N2ZmZjZhYWE0MDAwIC0gICAgIDB4N2ZmZjZhYWE0ZmYzICBsaWJhdXRvLmR5bGli
ICgxODcpIDw4NTM4M0UyNC0xNTkyLTM2QkMtQkIzOS0zMDhCN0YxQzgyNkU+IC91c3IvbGliL2xp
YmF1dG8uZHlsaWIKICAgIDB4N2ZmZjZhYjZhMDAwIC0gICAgIDB4N2ZmZjZhYjdhZmZiICBsaWJi
c20uMC5keWxpYiAoNjAuMTAwLjEpIDxCMjMzMUUxMS0zQ0JCLTNCQ0YtOTNBNi0xMjYyN0FFNDQ0
RDA+IC91c3IvbGliL2xpYmJzbS4wLmR5bGliCiAgICAweDdmZmY2YWI3YjAwMCAtICAgICAweDdm
ZmY2YWI4N2ZmZiAgbGliYnoyLjEuMC5keWxpYiAoNDQpIDxCRjQwRTE5My04ODU2LTM5QjctOThG
OC03QTE3QjMyOEIxRTk+IC91c3IvbGliL2xpYmJ6Mi4xLjAuZHlsaWIKICAgIDB4N2ZmZjZhYjg4
MDAwIC0gICAgIDB4N2ZmZjZhYmRhZmZmICBsaWJjKysuMS5keWxpYiAoOTAyLjEpIDxBRDA4MDVG
RS1GOThCLTNFMkYtQjA3Mi04Mzc4MkIyMkRBQzk+IC91c3IvbGliL2xpYmMrKy4xLmR5bGliCiAg
ICAweDdmZmY2YWJkYjAwMCAtICAgICAweDdmZmY2YWJmMGZmYiAgbGliYysrYWJpLmR5bGliICg5
MDIpIDw3NzFFOTI2My1FODMyLTM5ODUtOTQ3Ny04RjFCMkQ3M0I3NzE+IC91c3IvbGliL2xpYmMr
K2FiaS5keWxpYgogICAgMHg3ZmZmNmFiZjEwMDAgLSAgICAgMHg3ZmZmNmFiZjFmZmYgIGxpYmNo
YXJzZXQuMS5keWxpYiAoNTkpIDxGRjIzRDRFRC1BNUFELTM1OTItOTU3NC00ODQ4NkM3REY4NUI+
IC91c3IvbGliL2xpYmNoYXJzZXQuMS5keWxpYgogICAgMHg3ZmZmNmFiZjIwMDAgLSAgICAgMHg3
ZmZmNmFjMDNmZmYgIGxpYmNtcGguZHlsaWIgKDgpIDwyOTZBNTFFNi05NjYxLTNBQzItQTFDOS1G
MUUzNTEwRjkxQUE+IC91c3IvbGliL2xpYmNtcGguZHlsaWIKICAgIDB4N2ZmZjZhYzA0MDAwIC0g
ICAgIDB4N2ZmZjZhYzFiZmQ3ICBsaWJjb21wcmVzc2lvbi5keWxpYiAoODcpIDwyMUYzN0MyRS1C
OUFBLTM4Q0UtOTAyMy1CNzYzQzg4MjhBQzY+IC91c3IvbGliL2xpYmNvbXByZXNzaW9uLmR5bGli
CiAgICAweDdmZmY2YWVmNTAwMCAtICAgICAweDdmZmY2YWYwYmZmNyAgbGliY29yZXRscy5keWxp
YiAoMTY3KSA8OUU1RDFFMEMtMDNGOC0zN0I2LTgyQTEtMEQwNTk3MDIxQ0I4PiAvdXNyL2xpYi9s
aWJjb3JldGxzLmR5bGliCiAgICAweDdmZmY2YWYwYzAwMCAtICAgICAweDdmZmY2YWYwZGZmZiAg
bGliY29yZXRsc19jZmhlbHBlcnMuZHlsaWIgKDE2NykgPEMyM0JFMDlCLTg1RDEtMzc0NC05RTdC
LUUyQjExQUNENTQ0Mj4gL3Vzci9saWIvbGliY29yZXRsc19jZmhlbHBlcnMuZHlsaWIKICAgIDB4
N2ZmZjZiMGIwMDAwIC0gICAgIDB4N2ZmZjZiMWE5ZmQ3ICBsaWJjcnlwdG8uMzUuZHlsaWIgKDQ3
LjEyMC4xKSA8MTM0NDI4QjktRUJBQy0zMDg1LTg4M0ItRDY1REU1MTQ1QzdEPiAvdXNyL2xpYi9s
aWJjcnlwdG8uMzUuZHlsaWIKICAgIDB4N2ZmZjZiM2IwMDAwIC0gICAgIDB4N2ZmZjZiNGI0ZmVm
ICBsaWJjcnlwdG8uNDQuZHlsaWIgKDQ3LjEyMC4xKSA8QjQ4QzBEMUEtQ0RDQi0zNEU0LTkyMUUt
MDBFQkZGMTIwOERFPiAvdXNyL2xpYi9saWJjcnlwdG8uNDQuZHlsaWIKICAgIDB4N2ZmZjZiNGI3
MDAwIC0gICAgIDB4N2ZmZjZiNGMyZmZmICBsaWJjc2ZkZS5keWxpYiAoNTUxKSA8OEZCQjk0RUMt
NzEyQy0zQzBGLUE4QTktODhFRTVGNDY3OUVGPiAvdXNyL2xpYi9saWJjc2ZkZS5keWxpYgogICAg
MHg3ZmZmNmI0Y2EwMDAgLSAgICAgMHg3ZmZmNmI1MjlmZjcgIGxpYmN1cHMuMi5keWxpYiAoNDgz
LjYpIDxGRkU4RkU2Ny1BNkNDLTNDMzgtQTlENy1ENDExRDdCNTYyRjE+IC91c3IvbGliL2xpYmN1
cHMuMi5keWxpYgogICAgMHg3ZmZmNmI1MmIwMDAgLSAgICAgMHg3ZmZmNmI1OTBmZjcgIGxpYmN1
cmwuNC5keWxpYiAoMTE4LjEyMC4yKSA8RjJDMjQ2RjMtNDYwRS0zMUE3LUI5MDAtMkE5NTYwNTMz
NzMwPiAvdXNyL2xpYi9saWJjdXJsLjQuZHlsaWIKICAgIDB4N2ZmZjZiNjEwMDAwIC0gICAgIDB4
N2ZmZjZiNjE0ZmZiICBsaWJkei5keWxpYiAoMS4wLjAgLSAyMjguMTAwLjUpIDw3QkQwNjYzOS00
MEFFLTM5RTQtODkxOS1FMjhEOTUyQURCNTY+IC91c3IvbGliL2xpYmR6LmR5bGliCiAgICAweDdm
ZmY2YjYzMzAwMCAtICAgICAweDdmZmY2YjYzM2ZmZiAgbGliZW5lcmd5dHJhY2UuZHlsaWIgKDIx
KSA8REJGOEJERUUtNzIyOS0zRjA2LUFDMTAtQTI4RENDNDI0M0MwPiAvdXNyL2xpYi9saWJlbmVy
Z3l0cmFjZS5keWxpYgogICAgMHg3ZmZmNmI2MzQwMDAgLSAgICAgMHg3ZmZmNmI2NGNmZmYgIGxp
YmV4cGF0LjEuZHlsaWIgKDE5LjYwLjIpIDxDOTE2MzI2NC1CQTgxLTNDQzYtOUI4Qy00OEE5QTA3
MDlERDU+IC91c3IvbGliL2xpYmV4cGF0LjEuZHlsaWIKICAgIDB4N2ZmZjZiNjVhMDAwIC0gICAg
IDB4N2ZmZjZiNjVjZmZmICBsaWJmYWtlbGluay5keWxpYiAoMTQ5LjEpIDwxMjJGNTMwRi1GMTBF
LTNERDUtQkJFQS05MTc5NkJFNTgzRjM+IC91c3IvbGliL2xpYmZha2VsaW5rLmR5bGliCiAgICAw
eDdmZmY2YjY2YjAwMCAtICAgICAweDdmZmY2YjY3MGZmZiAgbGliZ2VybWFudG9rLmR5bGliICgy
NCkgPEREMjc5QkY2LUU5MDYtMzBEMy1BNjlFLURDNzk3RTk1RjE0Nz4gL3Vzci9saWIvbGliZ2Vy
bWFudG9rLmR5bGliCiAgICAweDdmZmY2YjY3MTAwMCAtICAgICAweDdmZmY2YjY3YWZmNyAgbGli
aGVpbWRhbC1hc24xLmR5bGliICg1NjQuMTAwLjEpIDw2OEZBMUJFNS04RkZDLTMzNDUtODk4MC04
RDg2MjlFQkE0NTE+IC91c3IvbGliL2xpYmhlaW1kYWwtYXNuMS5keWxpYgogICAgMHg3ZmZmNmI2
N2IwMDAgLSAgICAgMHg3ZmZmNmI3NmJmZmYgIGxpYmljb252LjIuZHlsaWIgKDU5KSA8RjU4RkVE
NzEtNkNDQS0zMEU4LTlBNTEtMTNFOUI0NkU1NjhEPiAvdXNyL2xpYi9saWJpY29udi4yLmR5bGli
CiAgICAweDdmZmY2Yjc2YzAwMCAtICAgICAweDdmZmY2YjljM2ZmZiAgbGliaWN1Y29yZS5BLmR5
bGliICg2NDI2MC4wLjEpIDw3QjkyMDRBQy1FQTE0LTNGRjMtQjZCOS00Qzg1QjM3RUVENzk+IC91
c3IvbGliL2xpYmljdWNvcmUuQS5keWxpYgogICAgMHg3ZmZmNmI5ZGQwMDAgLSAgICAgMHg3ZmZm
NmI5ZGVmZmYgIGxpYmxhbmdpZC5keWxpYiAoMTMzKSA8MzY1ODFEMzAtMUM3Qi0zQTU4LUFBMDct
MzYyMzdCRDc1RTBFPiAvdXNyL2xpYi9saWJsYW5naWQuZHlsaWIKICAgIDB4N2ZmZjZiOWRmMDAw
IC0gICAgIDB4N2ZmZjZiOWY3ZmYzICBsaWJsem1hLjUuZHlsaWIgKDE2KSA8NERCMzA3MzAtREJE
MS0zNTAzLTk1N0EtRDYwNDA0OUI5OEY5PiAvdXNyL2xpYi9saWJsem1hLjUuZHlsaWIKICAgIDB4
N2ZmZjZiYTBmMDAwIC0gICAgIDB4N2ZmZjZiYWI2ZmY3ICBsaWJtZWNhYi5keWxpYiAoODgzLjEx
KSA8NjZBRDcyOUItMkJDQy0zMzQ3LUI5QjMtRkQ4ODU3MEU4ODREPiAvdXNyL2xpYi9saWJtZWNh
Yi5keWxpYgogICAgMHg3ZmZmNmJhYjcwMDAgLSAgICAgMHg3ZmZmNmJkMTlmZjEgIGxpYm1lY2Fi
cmEuZHlsaWIgKDg4My4xMSkgPDJBRTc0NEQyLUFDOTUtMzcyMC04RTY2LTRGOUM3QTc5Mzg0Qz4g
L3Vzci9saWIvbGlibWVjYWJyYS5keWxpYgogICAgMHg3ZmZmNmMwODYwMDAgLSAgICAgMHg3ZmZm
NmMwYjVmZmYgIGxpYm5jdXJzZXMuNS40LmR5bGliICg1NykgPEIwQjA5RDA4LUE3QzktMzhFOS04
QkY0LUU0RjQ4ODJGOTNBNj4gL3Vzci9saWIvbGlibmN1cnNlcy41LjQuZHlsaWIKICAgIDB4N2Zm
ZjZjMWU1MDAwIC0gICAgIDB4N2ZmZjZjNjYxZmY1ICBsaWJuZXR3b3JrLmR5bGliICgxODgwLjEy
MC40KSA8NzE1RkI5NDMtQkEwMS0zNTFDLUJFQTYtMTIxOTcwNDcyOTg1PiAvdXNyL2xpYi9saWJu
ZXR3b3JrLmR5bGliCiAgICAweDdmZmY2YzY2MjAwMCAtICAgICAweDdmZmY2YzY3OWZmZiAgbGli
bmV0d29ya2V4dGVuc2lvbi5keWxpYiAoMTA5NS4xMjAuNikgPDc4MkU0M0Y2LTFGQjktM0E1Ri1B
RjI0LUFDMjFBNjNDMUEzNz4gL3Vzci9saWIvbGlibmV0d29ya2V4dGVuc2lvbi5keWxpYgogICAg
MHg3ZmZmNmM3MDIwMDAgLSAgICAgMHg3ZmZmNmM3MzVmZGUgIGxpYm9iamMuQS5keWxpYiAoNzg3
LjEpIDxDQTgzNkQzRS00NTk1LTMzRjEtQjcwQy03RTM5QTNGQkJFMTY+IC91c3IvbGliL2xpYm9i
amMuQS5keWxpYgogICAgMHg3ZmZmNmM3MzYwMDAgLSAgICAgMHg3ZmZmNmM3MzdmZjcgIGxpYm9k
ZmRlLmR5bGliICgyNikgPDJEREE2MUJGLUU5MkEtMzQ2My1CMUM0LUQ1OUU0MEQzNEQzND4gL3Vz
ci9saWIvbGlib2RmZGUuZHlsaWIKICAgIDB4N2ZmZjZjNzQ4MDAwIC0gICAgIDB4N2ZmZjZjNzRj
ZmZmICBsaWJwYW0uMi5keWxpYiAoMjUuMTAwLjEpIDw3MzJFOEQ4RS1DNjMwLTNFQzItQjZDMy1B
MTU2NEUzQjY4Qjg+IC91c3IvbGliL2xpYnBhbS4yLmR5bGliCiAgICAweDdmZmY2Yzc0ZjAwMCAt
ICAgICAweDdmZmY2Yzc4NWZmNyAgbGlicGNhcC5BLmR5bGliICg4OS4xMjAuMSkgPENGMkFERjE1
LTJENDQtM0EzNS05NEI0LUREMjQwNTJGOUIyMz4gL3Vzci9saWIvbGlicGNhcC5BLmR5bGliCiAg
ICAweDdmZmY2YzdjNTAwMCAtICAgICAweDdmZmY2YzdkM2ZmOSAgbGlicGVyZmNoZWNrLmR5bGli
ICgzNy4xMDAuMikgPDRCMUI3RDU5LTJBOEItM0UzMi1BQUU2LUI0MjgyNTJBNTIwND4gL3Vzci9s
aWIvbGlicGVyZmNoZWNrLmR5bGliCiAgICAweDdmZmY2YzgwNzAwMCAtICAgICAweDdmZmY2Yzgw
OGZmMyAgbGlicXVpdC5keWxpYiAoMjgxLjMpIDwxMEU1QjkxOC02Q0IxLTMxRTMtQTQ2RC1FOENB
NUIyOTUxQUI+IC91c3IvbGliL2xpYnF1aXQuZHlsaWIKICAgIDB4N2ZmZjZjODA5MDAwIC0gICAg
IDB4N2ZmZjZjODIxZmZmICBsaWJyZXNvbHYuOS5keWxpYiAoNjcuNDAuMSkgPEIwRjVEMjA0LTdF
RjItM0IwQi05MEVGLUJCNEQxOTZGQ0M2Mj4gL3Vzci9saWIvbGlicmVzb2x2LjkuZHlsaWIKICAg
IDB4N2ZmZjZjODIzMDAwIC0gICAgIDB4N2ZmZjZjODY3ZmY3ICBsaWJzYW5kYm94LjEuZHlsaWIg
KDEyMTcuMTIwLjcpIDw3MjhCQzE1Ri05QTZDLTM2MzQtOTQyNy02MEMwMUNCNUE1RDY+IC91c3Iv
bGliL2xpYnNhbmRib3guMS5keWxpYgogICAgMHg3ZmZmNmM4NjgwMDAgLSAgICAgMHg3ZmZmNmM4
N2FmZjcgIGxpYnNhc2wyLjIuZHlsaWIgKDIxMy4xMjAuMSkgPEU2Mzc1NDA1LTE2OEQtM0I3NS04
MDQyLUM4QjMyOUQwMUFCOT4gL3Vzci9saWIvbGlic2FzbDIuMi5keWxpYgogICAgMHg3ZmZmNmM4
N2IwMDAgLSAgICAgMHg3ZmZmNmM4N2NmZjcgIGxpYnNwaW5kdW1wLmR5bGliICgyODEuMykgPDBD
M0E4QjQ4LURDMzEtM0Y2MS1CNENDLTc0NjE1NzA0MkQwRT4gL3Vzci9saWIvbGlic3BpbmR1bXAu
ZHlsaWIKICAgIDB4N2ZmZjZjODdkMDAwIC0gICAgIDB4N2ZmZjZjYTY3ZmY3ICBsaWJzcWxpdGUz
LmR5bGliICgzMDguNSkgPEFGNTE4MTE1LTRBRDEtMzlGMi05QjgyLUUyNjQwRTIyMjFFMT4gL3Vz
ci9saWIvbGlic3FsaXRlMy5keWxpYgogICAgMHg3ZmZmNmNhYzQwMDAgLSAgICAgMHg3ZmZmNmNh
ZjdmZjMgIGxpYnNzbC4zNS5keWxpYiAoNDcuMTIwLjEpIDxCQzIxQkUzOC04MDQxLTMzQjAtOTM2
OC1BMTE5NzUxNDNDQjg+IC91c3IvbGliL2xpYnNzbC4zNS5keWxpYgogICAgMHg3ZmZmNmNiNWIw
MDAgLSAgICAgMHg3ZmZmNmNiODhmZmIgIGxpYnNzbC40Ni5keWxpYiAoNDcuMTIwLjEpIDw2MjA5
NDk0QS00QUFELTM0NEUtOTkyQy0wM0FDRDJENEM0MDI+IC91c3IvbGliL2xpYnNzbC40Ni5keWxp
YgogICAgMHg3ZmZmNmNiOGIwMDAgLSAgICAgMHg3ZmZmNmNiZDVmZjcgIGxpYnN0ZGMrKy42LmR5
bGliICgxMDQuMSkgPDI2MjExQzRDLThCMzQtM0E2My04QjM4LTYxQjE5NUI1ODZDOD4gL3Vzci9s
aWIvbGlic3RkYysrLjYuZHlsaWIKICAgIDB4N2ZmZjZjYmRjMDAwIC0gICAgIDB4N2ZmZjZjYmRk
ZmY1ICBsaWJzeXNtb24uZHlsaWIgKDEwMikgPDc1RERGMzI0LTUwNUEtMzA2NC1CMjg3LTI5OUVB
RTZGODc5RT4gL3Vzci9saWIvbGlic3lzbW9uLmR5bGliCiAgICAweDdmZmY2Y2MwYTAwMCAtICAg
ICAweDdmZmY2Y2MzYmZmNyAgbGlidGlkeS5BLmR5bGliICgxNy4xKSA8RjQ5NzA3MTMtODlGRC0z
NjBELTg2NzAtNUI0NkQ4ODcxQkI4PiAvdXNyL2xpYi9saWJ0aWR5LkEuZHlsaWIKICAgIDB4N2Zm
ZjZjY2I4MDAwIC0gICAgIDB4N2ZmZjZjY2JiZmZiICBsaWJ1dGlsLmR5bGliICg1NykgPEQzM0I2
M0QyLUFEQzItMzhCRC1COEYyLTI0MDU2QzQxRTA3Qj4gL3Vzci9saWIvbGlidXRpbC5keWxpYgog
ICAgMHg3ZmZmNmNjYmMwMDAgLSAgICAgMHg3ZmZmNmNjYzlmZjcgIGxpYnhhci4xLmR5bGliICg0
MjUuMikgPDk0M0E0Q0JCLTMzMUItM0EwNC1BMTFGLUEyMzAxMTg5RDQwQj4gL3Vzci9saWIvbGli
eGFyLjEuZHlsaWIKICAgIDB4N2ZmZjZjY2NhMDAwIC0gICAgIDB4N2ZmZjZjY2NlZmZmICBsaWJ4
Y3NlbGVjdC5keWxpYiAoMjM3MykgPDBDMkVFOTlELUQwM0UtMzVBRC1BQUUxLTkyMTIxQkM3MUQw
Mj4gL3Vzci9saWIvbGlieGNzZWxlY3QuZHlsaWIKICAgIDB4N2ZmZjZjY2NmMDAwIC0gICAgIDB4
N2ZmZjZjZGIxZmY3ICBsaWJ4bWwyLjIuZHlsaWIgKDMzLjMpIDwyNjJFRjdDNi03RDgzLTNDMDEt
ODYzRi0zNkU5N0Y1QUNEMzQ+IC91c3IvbGliL2xpYnhtbDIuMi5keWxpYgogICAgMHg3ZmZmNmNk
YjUwMDAgLSAgICAgMHg3ZmZmNmNkZGRmZmYgIGxpYnhzbHQuMS5keWxpYiAoMTYuOSkgPDg2RkU0
MzgyLUJENzctM0MxOS1BNjc4LTExRUJDRDcwNjg1QT4gL3Vzci9saWIvbGlieHNsdC4xLmR5bGli
CiAgICAweDdmZmY2Y2RkZTAwMCAtICAgICAweDdmZmY2Y2RmMGZmMyAgbGliei4xLmR5bGliICg3
NikgPERCMTIwNTA4LTNCRUQtMzdBOC1CNDM5LTUyMzVFQUI0NjE4QT4gL3Vzci9saWIvbGliei4x
LmR5bGliCiAgICAweDdmZmY2ZDY5ZTAwMCAtICAgICAweDdmZmY2ZDZhM2ZmMyAgbGliY2FjaGUu
ZHlsaWIgKDgzKSA8QTVFQ0M3NTEtQTY4MS0zMEQ4LUIzM0MtRDE5MkMxNUQyNUM4PiAvdXNyL2xp
Yi9zeXN0ZW0vbGliY2FjaGUuZHlsaWIKICAgIDB4N2ZmZjZkNmE0MDAwIC0gICAgIDB4N2ZmZjZk
NmFmZmZmICBsaWJjb21tb25DcnlwdG8uZHlsaWIgKDYwMTY1LjEyMC4xKSA8QzMyMUE3NEEtQUE5
MS0zNzg1LUJFQkYtQkVEQzY5NzUwMjZDPiAvdXNyL2xpYi9zeXN0ZW0vbGliY29tbW9uQ3J5cHRv
LmR5bGliCiAgICAweDdmZmY2ZDZiMDAwMCAtICAgICAweDdmZmY2ZDZiN2ZmZiAgbGliY29tcGls
ZXJfcnQuZHlsaWIgKDEwMS4yKSA8NjUyQTYwMTItN0U1Qy0zRjRGLTk0MzgtODZCQzA5NDUyNkYz
PiAvdXNyL2xpYi9zeXN0ZW0vbGliY29tcGlsZXJfcnQuZHlsaWIKICAgIDB4N2ZmZjZkNmI4MDAw
IC0gICAgIDB4N2ZmZjZkNmMxZmY3ICBsaWJjb3B5ZmlsZS5keWxpYiAoMTY2LjQwLjEpIDw0MDEx
M0E2OS1BODFDLTMzOTctQURDNi0xRDE2QjlBMjJDM0U+IC91c3IvbGliL3N5c3RlbS9saWJjb3B5
ZmlsZS5keWxpYgogICAgMHg3ZmZmNmQ2YzIwMDAgLSAgICAgMHg3ZmZmNmQ3NTRmZTMgIGxpYmNv
cmVjcnlwdG8uZHlsaWIgKDg2Ni4xMjAuMykgPDVFNEIwRTUwLTI0REQtM0UwNC05Mzc0LUVEQTlG
RkQ2MjU3Qj4gL3Vzci9saWIvc3lzdGVtL2xpYmNvcmVjcnlwdG8uZHlsaWIKICAgIDB4N2ZmZjZk
ODYxMDAwIC0gICAgIDB4N2ZmZjZkOGExZmYwICBsaWJkaXNwYXRjaC5keWxpYiAoMTE3My4xMDAu
MikgPDIwMUVEQkYzLTBCMzYtMzFCQS1BN0NCLTQ0M0NFMzVDMDVEND4gL3Vzci9saWIvc3lzdGVt
L2xpYmRpc3BhdGNoLmR5bGliCiAgICAweDdmZmY2ZDhhMjAwMCAtICAgICAweDdmZmY2ZDhkOGZm
ZiAgbGliZHlsZC5keWxpYiAoNzUwLjUpIDw3RTcxMUE0Ni01RTRELTM5M0MtQUVBNi00NDBFMkE1
Q0NEMEM+IC91c3IvbGliL3N5c3RlbS9saWJkeWxkLmR5bGliCiAgICAweDdmZmY2ZDhkOTAwMCAt
ICAgICAweDdmZmY2ZDhkOWZmYiAgbGlia2V5bWdyLmR5bGliICgzMCkgPDUyNjYyQ0FBLURCMUYt
MzBBMy1CRTEzLUQ2Mjc0QjFBNkQ3Qj4gL3Vzci9saWIvc3lzdGVtL2xpYmtleW1nci5keWxpYgog
ICAgMHg3ZmZmNmQ4ZGEwMDAgLSAgICAgMHg3ZmZmNmQ4ZTZmZjMgIGxpYmt4bGQuZHlsaWIgKDYx
NTMuMTIxLjEpIDxGNDQzNEVFNS1FNTIxLTM0ODEtODNGQy02MkQ1N0RFQjZCM0Q+IC91c3IvbGli
L3N5c3RlbS9saWJreGxkLmR5bGliCiAgICAweDdmZmY2ZDhlNzAwMCAtICAgICAweDdmZmY2ZDhl
N2ZmNyAgbGlibGF1bmNoLmR5bGliICgxNzM4LjEyMC44KSA8MDdDRjY0N0ItRjlEQy0zOTA3LUFE
OTgtMkY4NUZDQjM0QTcyPiAvdXNyL2xpYi9zeXN0ZW0vbGlibGF1bmNoLmR5bGliCiAgICAweDdm
ZmY2ZDhlODAwMCAtICAgICAweDdmZmY2ZDhlZGZmNyAgbGlibWFjaG8uZHlsaWIgKDk1OS4wLjEp
IDxEOTFERkYwMC1FMjJGLTM3OTYtOEExQy00QzFGNUY4RkEwM0M+IC91c3IvbGliL3N5c3RlbS9s
aWJtYWNoby5keWxpYgogICAgMHg3ZmZmNmQ4ZWUwMDAgLSAgICAgMHg3ZmZmNmQ4ZjBmZjMgIGxp
YnF1YXJhbnRpbmUuZHlsaWIgKDExMC40MC4zKSA8RDNCN0QwMkMtNzY0Ni0zRkI0LTg1MjktQjM2
RENDMjQxOUVBPiAvdXNyL2xpYi9zeXN0ZW0vbGlicXVhcmFudGluZS5keWxpYgogICAgMHg3ZmZm
NmQ4ZjEwMDAgLSAgICAgMHg3ZmZmNmQ4ZjJmZjcgIGxpYnJlbW92ZWZpbGUuZHlsaWIgKDQ4KSA8
QjVFODhEOUItQzJCRS0zNDk2LUJCQjItQzk5NjMxN0UxOEEzPiAvdXNyL2xpYi9zeXN0ZW0vbGli
cmVtb3ZlZmlsZS5keWxpYgogICAgMHg3ZmZmNmQ4ZjMwMDAgLSAgICAgMHg3ZmZmNmQ5MGFmZjMg
IGxpYnN5c3RlbV9hc2wuZHlsaWIgKDM3Ny42MC4yKSA8MTE3MDM0OEQtMjQ5MS0zM0YxLUFBNzkt
RTJBMDVCNEEyODdDPiAvdXNyL2xpYi9zeXN0ZW0vbGlic3lzdGVtX2FzbC5keWxpYgogICAgMHg3
ZmZmNmQ5MGIwMDAgLSAgICAgMHg3ZmZmNmQ5MGJmZjcgIGxpYnN5c3RlbV9ibG9ja3MuZHlsaWIg
KDc0KSA8N0FGQkNBQTYtODFCRS0zNkMzLThEQjAtQUFFMEE0QUNFNEM1PiAvdXNyL2xpYi9zeXN0
ZW0vbGlic3lzdGVtX2Jsb2Nrcy5keWxpYgogICAgMHg3ZmZmNmQ5MGMwMDAgLSAgICAgMHg3ZmZm
NmQ5OTNmZmYgIGxpYnN5c3RlbV9jLmR5bGliICgxMzUzLjEwMC4yKSA8OTM1RERDRTktNEVEMC0z
Rjc5LUEwNUEtQTEyM0RERTM5OUNDPiAvdXNyL2xpYi9zeXN0ZW0vbGlic3lzdGVtX2MuZHlsaWIK
ICAgIDB4N2ZmZjZkOTk0MDAwIC0gICAgIDB4N2ZmZjZkOTk3ZmZiICBsaWJzeXN0ZW1fY29uZmln
dXJhdGlvbi5keWxpYiAoMTA2MS4xMjAuMikgPEVBOUJDMkIxLTUwMDEtMzQ2My05RkFGLTM5RkY2
MUNBQzg3Qz4gL3Vzci9saWIvc3lzdGVtL2xpYnN5c3RlbV9jb25maWd1cmF0aW9uLmR5bGliCiAg
ICAweDdmZmY2ZDk5ODAwMCAtICAgICAweDdmZmY2ZDk5YmZmZiAgbGlic3lzdGVtX2NvcmVzZXJ2
aWNlcy5keWxpYiAoMTE0KSA8M0QwQTNBQTgtODQxNS0zN0IyLUFBRTMtNjZDMDNCQ0U4QjU1PiAv
dXNyL2xpYi9zeXN0ZW0vbGlic3lzdGVtX2NvcmVzZXJ2aWNlcy5keWxpYgogICAgMHg3ZmZmNmQ5
OWMwMDAgLSAgICAgMHg3ZmZmNmQ5YTRmZmYgIGxpYnN5c3RlbV9kYXJ3aW4uZHlsaWIgKDEzNTMu
MTAwLjIpIDw2RUVDOTk3NS1FRTNCLTNDOTUtQUE1Qi0wMzBGRDEwNTg3QkM+IC91c3IvbGliL3N5
c3RlbS9saWJzeXN0ZW1fZGFyd2luLmR5bGliCiAgICAweDdmZmY2ZDlhNTAwMCAtICAgICAweDdm
ZmY2ZDlhY2ZmZiAgbGlic3lzdGVtX2Ruc3NkLmR5bGliICgxMDk2LjEwMC4zKSA8MDExNTA5MkEt
RTYxQi0zMTdELTg2NzAtNDFDN0MzNEIxQTgyPiAvdXNyL2xpYi9zeXN0ZW0vbGlic3lzdGVtX2Ru
c3NkLmR5bGliCiAgICAweDdmZmY2ZDlhZDAwMCAtICAgICAweDdmZmY2ZDlhZWZmYiAgbGlic3lz
dGVtX2ZlYXR1cmVmbGFncy5keWxpYiAoMTcpIDxBRkRCNTA5NS0wNDcyLTM0QUMtQkE3RS00OTc5
MjFCRjAzMEE+IC91c3IvbGliL3N5c3RlbS9saWJzeXN0ZW1fZmVhdHVyZWZsYWdzLmR5bGliCiAg
ICAweDdmZmY2ZDlhZjAwMCAtICAgICAweDdmZmY2ZDlmY2ZmNyAgbGlic3lzdGVtX2luZm8uZHls
aWIgKDUzOCkgPDg1MTY5M0U5LUMwNzktMzU0Ny1BRDQxLTM1M0Y4QzI0OEJFOD4gL3Vzci9saWIv
c3lzdGVtL2xpYnN5c3RlbV9pbmZvLmR5bGliCiAgICAweDdmZmY2ZDlmZDAwMCAtICAgICAweDdm
ZmY2ZGEyOWZmNyAgbGlic3lzdGVtX2tlcm5lbC5keWxpYiAoNjE1My4xMjEuMSkgPDg0RDA5QUUz
LTJEQTgtM0Y2RC1BQ0VDLURDNDk5MEIxQTJGRj4gL3Vzci9saWIvc3lzdGVtL2xpYnN5c3RlbV9r
ZXJuZWwuZHlsaWIKICAgIDB4N2ZmZjZkYTJhMDAwIC0gICAgIDB4N2ZmZjZkYTcxZmZmICBsaWJz
eXN0ZW1fbS5keWxpYiAoMzE3OCkgPDQzNkNGRjc2LTZBOTktMzZGMi1BM0I2LThEMDE3Mzk2QTA1
MD4gL3Vzci9saWIvc3lzdGVtL2xpYnN5c3RlbV9tLmR5bGliCiAgICAweDdmZmY2ZGE3MjAwMCAt
ICAgICAweDdmZmY2ZGE5OWZmZiAgbGlic3lzdGVtX21hbGxvYy5keWxpYiAoMjgzLjEwMC42KSA8
RDRCQTdERjItNTdBQy0zM0IwLUI5NDgtQTY4OEVFNDNDNzk5PiAvdXNyL2xpYi9zeXN0ZW0vbGli
c3lzdGVtX21hbGxvYy5keWxpYgogICAgMHg3ZmZmNmRhOWEwMDAgLSAgICAgMHg3ZmZmNmRhYTdm
ZmIgIGxpYnN5c3RlbV9uZXR3b3JrZXh0ZW5zaW9uLmR5bGliICgxMDk1LjEyMC42KSA8NkRFODZE
QjAtOENEMi0zNjFFLUJENkEtQTM0MjgyQjQ3ODQ3PiAvdXNyL2xpYi9zeXN0ZW0vbGlic3lzdGVt
X25ldHdvcmtleHRlbnNpb24uZHlsaWIKICAgIDB4N2ZmZjZkYWE4MDAwIC0gICAgIDB4N2ZmZjZk
YWIxZmY3ICBsaWJzeXN0ZW1fbm90aWZ5LmR5bGliICgyNDEuMTAwLjIpIDw3RTlFMkZDOC1ERjI2
LTM0MEMtQjE5Ni1CODFCMTE4NTBDNDY+IC91c3IvbGliL3N5c3RlbS9saWJzeXN0ZW1fbm90aWZ5
LmR5bGliCiAgICAweDdmZmY2ZGFiMjAwMCAtICAgICAweDdmZmY2ZGFiYWZlZiAgbGlic3lzdGVt
X3BsYXRmb3JtLmR5bGliICgyMjAuMTAwLjEpIDw3MzY5MjBFQS02QUUwLTNCMUItQkJEQS03RENE
RjBDMjI5REY+IC91c3IvbGliL3N5c3RlbS9saWJzeXN0ZW1fcGxhdGZvcm0uZHlsaWIKICAgIDB4
N2ZmZjZkYWJiMDAwIC0gICAgIDB4N2ZmZjZkYWM1ZmZmICBsaWJzeXN0ZW1fcHRocmVhZC5keWxp
YiAoNDE2LjEwMC4zKSA8Nzc0ODg2NjktMTlBMy0zOTkzLUFENjUtQ0E1Mzc3RTI0NzVBPiAvdXNy
L2xpYi9zeXN0ZW0vbGlic3lzdGVtX3B0aHJlYWQuZHlsaWIKICAgIDB4N2ZmZjZkYWM2MDAwIC0g
ICAgIDB4N2ZmZjZkYWNhZmYzICBsaWJzeXN0ZW1fc2FuZGJveC5keWxpYiAoMTIxNy4xMjAuNykg
PDIwQzkzRDY5LTY0NTItM0M4Mi05NTIxLThBRTU0MzQ1QzY2Rj4gL3Vzci9saWIvc3lzdGVtL2xp
YnN5c3RlbV9zYW5kYm94LmR5bGliCiAgICAweDdmZmY2ZGFjYjAwMCAtICAgICAweDdmZmY2ZGFj
ZGZmZiAgbGlic3lzdGVtX3NlY2luaXQuZHlsaWIgKDYyLjEwMC4yKSA8RTg1MTExM0QtRDVCMS0z
RkIwLTlEMjktOUM3NjQ3QTcxOTYxPiAvdXNyL2xpYi9zeXN0ZW0vbGlic3lzdGVtX3NlY2luaXQu
ZHlsaWIKICAgIDB4N2ZmZjZkYWNlMDAwIC0gICAgIDB4N2ZmZjZkYWQ1ZmZiICBsaWJzeXN0ZW1f
c3ltcHRvbXMuZHlsaWIgKDEyMzguMTIwLjEpIDwyNUMzODY2Qi0wMDRFLTM2MjEtOUNEMy1CMUU5
QzREODg3RUI+IC91c3IvbGliL3N5c3RlbS9saWJzeXN0ZW1fc3ltcHRvbXMuZHlsaWIKICAgIDB4
N2ZmZjZkYWQ2MDAwIC0gICAgIDB4N2ZmZjZkYWVjZmYyICBsaWJzeXN0ZW1fdHJhY2UuZHlsaWIg
KDExNDcuMTIwKSA8QTFFRDFEM0EtNUZBRC0zNTU5LUExRDYtMUJFNEUxQzU3NTZBPiAvdXNyL2xp
Yi9zeXN0ZW0vbGlic3lzdGVtX3RyYWNlLmR5bGliCiAgICAweDdmZmY2ZGFlZTAwMCAtICAgICAw
eDdmZmY2ZGFmM2ZmNyAgbGlidW53aW5kLmR5bGliICgzNS40KSA8MjUzQTEyRTItRjg4Ri0zODM4
LUE2NjYtQzUzMDZGODMzQ0I4PiAvdXNyL2xpYi9zeXN0ZW0vbGlidW53aW5kLmR5bGliCiAgICAw
eDdmZmY2ZGFmNDAwMCAtICAgICAweDdmZmY2ZGIyOWZmZSAgbGlieHBjLmR5bGliICgxNzM4LjEy
MC44KSA8NjhENDMzQjYtRENGRi0zODVELTg2MjAtRjg0N0ZCN0Q0QTVBPiAvdXNyL2xpYi9zeXN0
ZW0vbGlieHBjLmR5bGliCgpFeHRlcm5hbCBNb2RpZmljYXRpb24gU3VtbWFyeToKICBDYWxscyBt
YWRlIGJ5IG90aGVyIHByb2Nlc3NlcyB0YXJnZXRpbmcgdGhpcyBwcm9jZXNzOgogICAgdGFza19m
b3JfcGlkOiAwCiAgICB0aHJlYWRfY3JlYXRlOiAwCiAgICB0aHJlYWRfc2V0X3N0YXRlOiAwCiAg
Q2FsbHMgbWFkZSBieSB0aGlzIHByb2Nlc3M6CiAgICB0YXNrX2Zvcl9waWQ6IDAKICAgIHRocmVh
ZF9jcmVhdGU6IDAKICAgIHRocmVhZF9zZXRfc3RhdGU6IDAKICBDYWxscyBtYWRlIGJ5IGFsbCBw
cm9jZXNzZXMgb24gdGhpcyBtYWNoaW5lOgogICAgdGFza19mb3JfcGlkOiAxODgyNwogICAgdGhy
ZWFkX2NyZWF0ZTogMAogICAgdGhyZWFkX3NldF9zdGF0ZTogMAoKVk0gUmVnaW9uIFN1bW1hcnk6
ClJlYWRPbmx5IHBvcnRpb24gb2YgTGlicmFyaWVzOiBUb3RhbD04MDUuOU0gcmVzaWRlbnQ9MEso
MCUpIHN3YXBwZWRfb3V0X29yX3VuYWxsb2NhdGVkPTgwNS45TSgxMDAlKQpXcml0YWJsZSByZWdp
b25zOiBUb3RhbD00OS43RyB3cml0dGVuPTBLKDAlKSByZXNpZGVudD0wSygwJSkgc3dhcHBlZF9v
dXQ9MEsoMCUpIHVuYWxsb2NhdGVkPTQ5LjdHKDEwMCUpCiAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWSVJUVUFMICAgUkVHSU9OIApSRUdJT04gVFlQRSAgICAgICAgICAgICAgICAg
ICAgICAgIFNJWkUgICAgQ09VTlQgKG5vbi1jb2FsZXNjZWQpIAo9PT09PT09PT09PSAgICAgICAg
ICAgICAgICAgICAgID09PT09PT0gID09PT09PT0gCkFjdGl2aXR5IFRyYWNpbmcgICAgICAgICAg
ICAgICAgICAgMjU2SyAgICAgICAgMSAKQ29yZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAgICAg
ICAgIDhLICAgICAgICAxIApEaXNwYXRjaCBjb250aW51YXRpb25zICAgICAgICAgICAgMzIuME0g
ICAgICAgIDEgCkZvdW5kYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICA0SyAgICAgICAg
MSAKSlMgSklUIGdlbmVyYXRlZCBjb2RlICAgICAgICAgICAgICAxLjBHICAgICAgICAzIApKUyBW
TSBHaWdhY2FnZSAgICAgICAgICAgICAgICAgICAgMzIuMkcgICAgICAgIDMgCkpTIFZNIEdpZ2Fj
YWdlIChyZXNlcnZlZCkgICAgICAgICA0Ny44RyAgICAgICAgNCAgICAgICAgIHJlc2VydmVkIFZN
IGFkZHJlc3Mgc3BhY2UgKHVuYWxsb2NhdGVkKQpKUyBWTSBJc29sYXRlZCBIZWFwICAgICAgICAg
ICAgICAgICAzMksgICAgICAgIDIgCktlcm5lbCBBbGxvYyBPbmNlICAgICAgICAgICAgICAgICAg
ICA4SyAgICAgICAgMSAKTUFMTE9DICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY5LjNNICAg
ICAgIDU2IApNQUxMT0MgZ3VhcmQgcGFnZSAgICAgICAgICAgICAgICAgICA0OEsgICAgICAgMTAg
Ck1BTExPQ19NRURJVU0gKHJlc2VydmVkKSAgICAgICAgIDQ2NC4wTSAgICAgICAgNCAgICAgICAg
IHJlc2VydmVkIFZNIGFkZHJlc3Mgc3BhY2UgKHVuYWxsb2NhdGVkKQpNZW1vcnkgVGFnIDI0MSAg
ICAgICAgICAgICAgICAgICAgIDI5NksgICAgICAgIDMgClNRTGl0ZSBwYWdlIGNhY2hlICAgICAg
ICAgICAgICAgICAgIDY0SyAgICAgICAgMSAKU1RBQ0sgR1VBUkQgICAgICAgICAgICAgICAgICAg
ICAgIDU2LjBNICAgICAgIDEzIApTdGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQu
MU0gICAgICAgMTMgClZNX0FMTE9DQVRFICAgICAgICAgICAgICAgICAgICAgICAgIDUySyAgICAg
ICAgNCAKV2ViS2l0IE1hbGxvYyAgICAgICAgICAgICAgICAgICAgIDIzLjZNICAgICAgIDMzIApf
X0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjIuNU0gICAgICA1NzAgCl9fREFUQV9D
T05TVCAgICAgICAgICAgICAgICAgICAgICAgMzE0SyAgICAgICAgNSAKX19GT05UX0RBVEEgICAg
ICAgICAgICAgICAgICAgICAgICAgIDRLICAgICAgICAxIApfX0xJTktFRElUICAgICAgICAgICAg
ICAgICAgICAgICAzODguNE0gICAgICAgIDUgCl9fT0JKQ19STyAgICAgICAgICAgICAgICAgICAg
ICAgICAzMi4yTSAgICAgICAgMSAKX19PQkpDX1JXICAgICAgICAgICAgICAgICAgICAgICAgIDE4
ODhLICAgICAgICAxIApfX1RFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTcuNU0gICAg
ICA1NTQgCl9fVU5JQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgNTY0SyAgICAgICAgMSAK
bWFwcGVkIGZpbGUgICAgICAgICAgICAgICAgICAgICAgIDU3LjlNICAgICAgIDI2IApzaGFyZWQg
bWVtb3J5ICAgICAgICAgICAgICAgICAgICAgICA0OEsgICAgICAgIDYgCj09PT09PT09PT09ICAg
ICAgICAgICAgICAgICAgICAgPT09PT09PSAgPT09PT09PSAKVE9UQUwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDgyLjdHICAgICAxMzI0IApUT1RBTCwgbWludXMgcmVzZXJ2ZWQgVk0gc3Bh
Y2UgICAgMzQuNUcgICAgIDEzMjQgCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>400436</attachid>
            <date>2020-05-28 01:44:55 -0700</date>
            <delta_ts>2020-05-28 01:44:55 -0700</delta_ts>
            <desc>standalone repro</desc>
            <filename>index.html</filename>
            <type>text/html</type>
            <size>844912</size>
            <attacher name="Philip Jägenstedt">philip</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxwPldpbGwgaXQgY3Jhc2g/IDxzcGFuIGlkPXN0YXR1cz48L3NwYW4+
PC9wPgo8c2NyaXB0PgovLyB2ZW5kb3JzLmJ1bmRsZS5qcwovKioqKioqLyAoZnVuY3Rpb24obW9k
dWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCi8qKioqKiovIAkvLyBpbnN0YWxsIGEgSlNPTlAg
Y2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmcKLyoqKioqKi8gCXZhciBwYXJlbnRKc29ucEZ1bmN0
aW9uID0gd2luZG93WyJ3ZWJwYWNrSnNvbnAiXTsKLyoqKioqKi8gCXdpbmRvd1sid2VicGFja0pz
b25wIl0gPSBmdW5jdGlvbiB3ZWJwYWNrSnNvbnBDYWxsYmFjayhjaHVua0lkcywgbW9yZU1vZHVs
ZXMpIHsKLyoqKioqKi8gCQkvLyBhZGQgIm1vcmVNb2R1bGVzIiB0byB0aGUgbW9kdWxlcyBvYmpl
Y3QsCi8qKioqKiovIAkJLy8gdGhlbiBmbGFnIGFsbCAiY2h1bmtJZHMiIGFzIGxvYWRlZCBhbmQg
ZmlyZSBjYWxsYmFjawovKioqKioqLyAJCXZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDAsIGNh
bGxiYWNrcyA9IFtdOwovKioqKioqLyAJCWZvcig7aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7
Ci8qKioqKiovIAkJCWNodW5rSWQgPSBjaHVua0lkc1tpXTsKLyoqKioqKi8gCQkJaWYoaW5zdGFs
bGVkQ2h1bmtzW2NodW5rSWRdKQovKioqKioqLyAJCQkJY2FsbGJhY2tzLnB1c2guYXBwbHkoY2Fs
bGJhY2tzLCBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pOwovKioqKioqLyAJCQlpbnN0YWxsZWRD
aHVua3NbY2h1bmtJZF0gPSAwOwovKioqKioqLyAJCX0KLyoqKioqKi8gCQlmb3IobW9kdWxlSWQg
aW4gbW9yZU1vZHVsZXMpIHsKLyoqKioqKi8gCQkJaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q
cm9wZXJ0eS5jYWxsKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHsKLyoqKioqKi8gCQkJCW1vZHVs
ZXNbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdOwovKioqKioqLyAJCQl9Ci8qKioq
KiovIAkJfQovKioqKioqLyAJCWlmKHBhcmVudEpzb25wRnVuY3Rpb24pIHBhcmVudEpzb25wRnVu
Y3Rpb24oY2h1bmtJZHMsIG1vcmVNb2R1bGVzKTsKLyoqKioqKi8gCQl3aGlsZShjYWxsYmFja3Mu
bGVuZ3RoKQovKioqKioqLyAJCQljYWxsYmFja3Muc2hpZnQoKS5jYWxsKG51bGwsIF9fd2VicGFj
a19yZXF1aXJlX18pOwovKioqKioqLyAJCWlmKG1vcmVNb2R1bGVzWzBdKSB7Ci8qKioqKiovIAkJ
CWluc3RhbGxlZE1vZHVsZXNbMF0gPSAwOwovKioqKioqLyAJCQlyZXR1cm4gX193ZWJwYWNrX3Jl
cXVpcmVfXygwKTsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAl9OwoKLyoqKioqKi8gCS8vIFRoZSBt
b2R1bGUgY2FjaGUKLyoqKioqKi8gCXZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307CgovKioqKioq
LyAJLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3MKLyoqKioqKi8g
CS8vICIwIiBtZWFucyAiYWxyZWFkeSBsb2FkZWQiCi8qKioqKiovIAkvLyBBcnJheSBtZWFucyAi
bG9hZGluZyIsIGFycmF5IGNvbnRhaW5zIGNhbGxiYWNrcwovKioqKioqLyAJdmFyIGluc3RhbGxl
ZENodW5rcyA9IHsKLyoqKioqKi8gCQkzOjAKLyoqKioqKi8gCX07CgovKioqKioqLyAJLy8gVGhl
IHJlcXVpcmUgZnVuY3Rpb24KLyoqKioqKi8gCWZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18o
bW9kdWxlSWQpIHsKCi8qKioqKiovIAkJLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlCi8q
KioqKiovIAkJaWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pCi8qKioqKiovIAkJCXJldHVy
biBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzOwoKLyoqKioqKi8gCQkvLyBDcmVh
dGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKQovKioqKioqLyAJCXZh
ciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHsKLyoqKioqKi8gCQkJZXhw
b3J0czoge30sCi8qKioqKiovIAkJCWlkOiBtb2R1bGVJZCwKLyoqKioqKi8gCQkJbG9hZGVkOiBm
YWxzZQovKioqKioqLyAJCX07CgovKioqKioqLyAJCS8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5j
dGlvbgovKioqKioqLyAJCW1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1v
ZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOwoKLyoqKioqKi8gCQkv
LyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkCi8qKioqKiovIAkJbW9kdWxlLmxvYWRlZCA9IHRy
dWU7CgovKioqKioqLyAJCS8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlCi8qKioq
KiovIAkJcmV0dXJuIG1vZHVsZS5leHBvcnRzOwovKioqKioqLyAJfQoKLyoqKioqKi8gCS8vIFRo
aXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBlbnRyeSBjaHVuay4KLyoqKioqKi8gCS8vIFRoZSBj
aHVuayBsb2FkaW5nIGZ1bmN0aW9uIGZvciBhZGRpdGlvbmFsIGNodW5rcwovKioqKioqLyAJX193
ZWJwYWNrX3JlcXVpcmVfXy5lID0gZnVuY3Rpb24gcmVxdWlyZUVuc3VyZShjaHVua0lkLCBjYWxs
YmFjaykgewovKioqKioqLyAJCS8vICIwIiBpcyB0aGUgc2lnbmFsIGZvciAiYWxyZWFkeSBsb2Fk
ZWQiCi8qKioqKiovIAkJaWYoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID09PSAwKQovKioqKioq
LyAJCQlyZXR1cm4gY2FsbGJhY2suY2FsbChudWxsLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTsKCi8q
KioqKiovIAkJLy8gYW4gYXJyYXkgbWVhbnMgImN1cnJlbnRseSBsb2FkaW5nIi4KLyoqKioqKi8g
CQlpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gIT09IHVuZGVmaW5lZCkgewovKioqKioqLyAJ
CQlpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0ucHVzaChjYWxsYmFjayk7Ci8qKioqKiovIAkJfSBl
bHNlIHsKLyoqKioqKi8gCQkJLy8gc3RhcnQgY2h1bmsgbG9hZGluZwovKioqKioqLyAJCQlpbnN0
YWxsZWRDaHVua3NbY2h1bmtJZF0gPSBbY2FsbGJhY2tdOwovKioqKioqLyAJCQl2YXIgaGVhZCA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07Ci8qKioqKiovIAkJCXZh
ciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKLyoqKioqKi8gCQkJ
c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKLyoqKioqKi8gCQkJc2NyaXB0LmNoYXJz
ZXQgPSAndXRmLTgnOwovKioqKioqLyAJCQlzY3JpcHQuYXN5bmMgPSB0cnVlOwoKLyoqKioqKi8g
CQkJc2NyaXB0LnNyYyA9IF9fd2VicGFja19yZXF1aXJlX18ucCArICIiICsgY2h1bmtJZCArICIu
IiArICh7IjAiOiJhbmFseXplX2lkbC5lczYiLCIxIjoiYW5hbHl6ZV9vZyIsIjIiOiJtYWluIn1b
Y2h1bmtJZF18fGNodW5rSWQpICsgIi5idW5kbGUuanMiOwovKioqKioqLyAJCQloZWFkLmFwcGVu
ZENoaWxkKHNjcmlwdCk7Ci8qKioqKiovIAkJfQovKioqKioqLyAJfTsKCi8qKioqKiovIAkvLyBl
eHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQovKioqKioqLyAJ
X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKCi8qKioqKiovIAkvLyBleHBvc2UgdGhl
IG1vZHVsZSBjYWNoZQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVk
TW9kdWxlczsKCi8qKioqKiovIAkvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfXwovKioqKioqLyAJ
X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIiI7Ci8qKioqKiovIH0pCi8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci8qKioqKiovIChbCi8qIDAgKi8sCi8qIDEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCW1vZHVsZS5leHBvcnRzID0geyAiZGVmYXVs
dCI6IF9fd2VicGFja19yZXF1aXJlX18oMiksIF9fZXNNb2R1bGU6IHRydWUgfTsKCi8qKiovIH0p
LAovKiAyICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHsKCglfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwoJX193ZWJwYWNrX3JlcXVpcmVfXyg0
KTsKCV9fd2VicGFja19yZXF1aXJlX18oNDgpOwoJX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7Cglf
X3dlYnBhY2tfcmVxdWlyZV9fKDcwKTsKCV9fd2VicGFja19yZXF1aXJlX18oNzEpOwoJbW9kdWxl
LmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5Qcm9taXNlOwoKCi8qKiovIH0pLAov
KiAzICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCgoKLyoqKi8gfSksCi8q
IDQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
XykgewoKCSd1c2Ugc3RyaWN0JzsKCXZhciAkYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKHRy
dWUpOwoKCS8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKCkKCV9fd2Vi
cGFja19yZXF1aXJlX18oOCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7
CgkgIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXQKCSAgdGhpcy5faSA9IDA7
ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXgKCS8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJh
dG9yUHJvdG90eXBlJS5uZXh0KCkKCX0sIGZ1bmN0aW9uICgpIHsKCSAgdmFyIE8gPSB0aGlzLl90
OwoJICB2YXIgaW5kZXggPSB0aGlzLl9pOwoJICB2YXIgcG9pbnQ7CgkgIGlmIChpbmRleCA+PSBP
Lmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9OwoJICBwb2lu
dCA9ICRhdChPLCBpbmRleCk7CgkgIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoOwoJICByZXR1cm4g
eyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07Cgl9KTsKCgovKioqLyB9KSwKLyogNSAqLwov
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJ
dmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNik7Cgl2YXIgZGVmaW5lZCA9IF9f
d2VicGFja19yZXF1aXJlX18oNyk7CgkvLyB0cnVlICAtPiBTdHJpbmcjYXQKCS8vIGZhbHNlIC0+
IFN0cmluZyNjb2RlUG9pbnRBdAoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5H
KSB7CgkgIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7CgkgICAgdmFyIHMgPSBTdHJpbmco
ZGVmaW5lZCh0aGF0KSk7CgkgICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTsKCSAgICB2YXIgbCA9
IHMubGVuZ3RoOwoJICAgIHZhciBhLCBiOwoJICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVy
biBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDsKCSAgICBhID0gcy5jaGFyQ29kZUF0KGkpOwoJ
ICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIg
PSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmCgkgICAgICA/IFRP
X1NUUklORyA/IHMuY2hhckF0KGkpIDogYQoJICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGks
IGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7Cgkg
IH07Cgl9OwoKCi8qKiovIH0pLAovKiA2ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9y
dHMpIHsKCgkvLyA3LjEuNCBUb0ludGVnZXIKCXZhciBjZWlsID0gTWF0aC5jZWlsOwoJdmFyIGZs
b29yID0gTWF0aC5mbG9vcjsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7CgkgIHJl
dHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpOwoJ
fTsKCgovKioqLyB9KSwKLyogNyAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7
CgoJLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkKCW1vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24gKGl0KSB7CgkgIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVF
cnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIgKyBpdCk7CgkgIHJldHVybiBpdDsKCX07CgoK
LyoqKi8gfSksCi8qIDggKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXykgewoKCSd1c2Ugc3RyaWN0JzsKCXZhciBMSUJSQVJZID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg5KTsKCXZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7Cgl2
YXIgcmVkZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTsKCXZhciBoaWRlID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxNSk7Cgl2YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygy
Nyk7Cgl2YXIgJGl0ZXJDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTsKCXZhciBzZXRU
b1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpOwoJdmFyIGdldFByb3RvdHlwZU9m
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7Cgl2YXIgSVRFUkFUT1IgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDQ1KSgnaXRlcmF0b3InKTsKCXZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcg
aW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YAoJ
dmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InOwoJdmFyIEtFWVMgPSAna2V5cyc7Cgl2YXIg
VkFMVUVTID0gJ3ZhbHVlcyc7CgoJdmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVy
biB0aGlzOyB9OwoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0
cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkgewoJICAkaXRlckNyZWF0ZShD
b25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7CgkgIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2lu
ZCkgewoJICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRd
OwoJICAgIHN3aXRjaCAoa2luZCkgewoJICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24g
a2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTsKCSAgICAgIGNh
c2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVj
dG9yKHRoaXMsIGtpbmQpOyB9OwoJICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJl
dHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07CgkgIH07CgkgIHZhciBUQUcgPSBO
QU1FICsgJyBJdGVyYXRvcic7CgkgIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7
CgkgIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7CgkgIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBl
OwoJICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0g
fHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTsKCSAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8
fCBnZXRNZXRob2QoREVGQVVMVCk7CgkgIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZB
TFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7CgkgIHZh
ciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZl
IDogJG5hdGl2ZTsKCSAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7CgkgIC8v
IEZpeCBuYXRpdmUKCSAgaWYgKCRhbnlOYXRpdmUpIHsKCSAgICBJdGVyYXRvclByb3RvdHlwZSA9
IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7CgkgICAgaWYgKEl0
ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBl
Lm5leHQpIHsKCSAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnMK
CSAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpOwoJICAg
ICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzCgkgICAgICBpZiAoIUxJQlJBUlkgJiYgdHlw
ZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJh
dG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7CgkgICAgfQoJICB9CgkgIC8vIGZp
eCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkYKCSAgaWYgKERFRl9W
QUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykgewoJICAgIFZBTFVF
U19CVUcgPSB0cnVlOwoJICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4g
JG5hdGl2ZS5jYWxsKHRoaXMpOyB9OwoJICB9CgkgIC8vIERlZmluZSBpdGVyYXRvcgoJICBpZiAo
KCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lU
RVJBVE9SXSkpIHsKCSAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpOwoJICB9Cgkg
IC8vIFBsdWcgZm9yIGxpYnJhcnkKCSAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7CgkgIEl0
ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpczsKCSAgaWYgKERFRkFVTFQpIHsKCSAgICBtZXRob2Rz
ID0gewoJICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFM
VUVTKSwKCSAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLAoJ
ICAgICAgZW50cmllczogJGVudHJpZXMKCSAgICB9OwoJICAgIGlmIChGT1JDRUQpIGZvciAoa2V5
IGluIG1ldGhvZHMpIHsKCSAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3Rv
LCBrZXksIG1ldGhvZHNba2V5XSk7CgkgICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4
cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTsKCSAgfQoJICBy
ZXR1cm4gbWV0aG9kczsKCX07CgoKLyoqKi8gfSksCi8qIDkgKi8KLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cykgewoKCW1vZHVsZS5leHBvcnRzID0gdHJ1ZTsKCgovKioqLyB9KSwKLyog
MTAgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
XykgewoKCXZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKCXZhciBjb3JlID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxMik7Cgl2YXIgY3R4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
Myk7Cgl2YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpOwoJdmFyIGhhcyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMjUpOwoJdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnOwoKCXZhciAk
ZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkgewoJICB2YXIgSVNfRk9SQ0VE
ID0gdHlwZSAmICRleHBvcnQuRjsKCSAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7
CgkgIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TOwoJICB2YXIgSVNfUFJPVE8gPSB0
eXBlICYgJGV4cG9ydC5QOwoJICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7CgkgIHZh
ciBJU19XUkFQID0gdHlwZSAmICRleHBvcnQuVzsKCSAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwg
PyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTsKCSAgdmFyIGV4cFByb3Rv
ID0gZXhwb3J0c1tQUk9UT1RZUEVdOwoJICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFs
IDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9U
WVBFXTsKCSAgdmFyIGtleSwgb3duLCBvdXQ7CgkgIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5h
bWU7CgkgIGZvciAoa2V5IGluIHNvdXJjZSkgewoJICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZQoJ
ICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmlu
ZWQ7CgkgICAgaWYgKG93biAmJiBoYXMoZXhwb3J0cywga2V5KSkgY29udGludWU7CgkgICAgLy8g
ZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWQKCSAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNv
dXJjZVtrZXldOwoJICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNl
cwoJICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0g
J2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldCgkgICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZv
ciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHQKCSAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91
dCwgZ2xvYmFsKQoJICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBj
aGFuZ2UgdGhlbSBpbiBsaWJyYXJ5CgkgICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91
dCA/IChmdW5jdGlvbiAoQykgewoJICAgICAgdmFyIEYgPSBmdW5jdGlvbiAoYSwgYiwgYykgewoJ
ICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEMpIHsKCSAgICAgICAgICBzd2l0Y2ggKGFyZ3Vt
ZW50cy5sZW5ndGgpIHsKCSAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDKCk7CgkgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTsKCSAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIG5ldyBDKGEsIGIpOwoJICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpOwoJICAg
ICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgkgICAgICB9OwoJICAgICAg
RltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdOwoJICAgICAgcmV0dXJuIEY7CgkgICAgLy8gbWFr
ZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzCgkgICAgfSkob3V0KSA6IElT
X1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBv
dXQpIDogb3V0OwoJICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVD
VE9SJS5tZXRob2RzLiVOQU1FJQoJICAgIGlmIChJU19QUk9UTykgewoJICAgICAgKGV4cG9ydHMu
dmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0OwoJICAgICAgLy8g
ZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFN
RSUKCSAgICAgIGlmICh0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1tr
ZXldKSBoaWRlKGV4cFByb3RvLCBrZXksIG91dCk7CgkgICAgfQoJICB9Cgl9OwoJLy8gdHlwZSBi
aXRtYXAKCSRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkCgkkZXhwb3J0LkcgPSAyOyAgIC8vIGds
b2JhbAoJJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWMKCSRleHBvcnQuUCA9IDg7ICAgLy8gcHJv
dG8KCSRleHBvcnQuQiA9IDE2OyAgLy8gYmluZAoJJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwCgkk
ZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmUKCSRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBt
ZXRob2QgZm9yIGBsaWJyYXJ5YAoJbW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0OwoKCi8qKiovIH0p
LAovKiAxMSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CgoJLy8gaHR0cHM6
Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3
NTkwMjgKCXZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3Vu
ZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aAoJICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxm
ICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZgoJICAvLyBlc2xpbnQt
ZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMKCSAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMn
KSgpOwoJaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50
LWRpc2FibGUtbGluZSBuby11bmRlZgoKCi8qKiovIH0pLAovKiAxMiAqLwovKioqLyAoZnVuY3Rp
b24obW9kdWxlLCBleHBvcnRzKSB7CgoJdmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVy
c2lvbjogJzIuNi4xMScgfTsKCWlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3Jl
OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmCgoKLyoqKi8gfSksCi8qIDEzICovCi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkv
LyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmcKCXZhciBhRnVuY3Rpb24gPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDE0KTsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0
LCBsZW5ndGgpIHsKCSAgYUZ1bmN0aW9uKGZuKTsKCSAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkg
cmV0dXJuIGZuOwoJICBzd2l0Y2ggKGxlbmd0aCkgewoJICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0
aW9uIChhKSB7CgkgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTsKCSAgICB9OwoJICAgIGNh
c2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7CgkgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0
LCBhLCBiKTsKCSAgICB9OwoJICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7
CgkgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTsKCSAgICB9OwoJICB9CgkgIHJl
dHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykgewoJICAgIHJldHVybiBmbi5hcHBseSh0aGF0
LCBhcmd1bWVudHMpOwoJICB9OwoJfTsKCgovKioqLyB9KSwKLyogMTQgKi8KLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7
CgkgIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBp
cyBub3QgYSBmdW5jdGlvbiEnKTsKCSAgcmV0dXJuIGl0OwoJfTsKCgovKioqLyB9KSwKLyogMTUg
Ki8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykg
ewoKCXZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpOwoJdmFyIGNyZWF0ZURlc2MgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDI0KTsKCW1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVp
cmVfXygyMCkgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7CgkgIHJldHVybiBkUC5m
KG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7Cgl9IDogZnVuY3Rpb24gKG9iamVj
dCwga2V5LCB2YWx1ZSkgewoJICBvYmplY3Rba2V5XSA9IHZhbHVlOwoJICByZXR1cm4gb2JqZWN0
OwoJfTsKCgovKioqLyB9KSwKLyogMTYgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1
aXJlX18oMTcpOwoJdmFyIElFOF9ET01fREVGSU5FID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7
Cgl2YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTsKCXZhciBkUCA9IE9i
amVjdC5kZWZpbmVQcm9wZXJ0eTsKCglleHBvcnRzLmYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIw
KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAs
IEF0dHJpYnV0ZXMpIHsKCSAgYW5PYmplY3QoTyk7CgkgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVl
KTsKCSAgYW5PYmplY3QoQXR0cmlidXRlcyk7CgkgIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHsK
CSAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7CgkgIH0gY2F0Y2ggKGUpIHsgLyogZW1w
dHkgKi8gfQoJICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVz
KSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpOwoJICBpZiAoJ3Zh
bHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTsKCSAgcmV0dXJuIE87
Cgl9OwoKCi8qKiovIH0pLAovKiAxNyAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxOCk7Cgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkgewoJICBpZiAoIWlzT2Jq
ZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpOwoJICBy
ZXR1cm4gaXQ7Cgl9OwoKCi8qKiovIH0pLAovKiAxOCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHsKCSAgcmV0dXJu
IHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1
bmN0aW9uJzsKCX07CgoKLyoqKi8gfSksCi8qIDE5ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgltb2R1bGUuZXhwb3J0cyA9ICFfX3dl
YnBhY2tfcmVxdWlyZV9fKDIwKSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoZnVuY3Rpb24g
KCkgewoJICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19yZXF1aXJlX18o
MjIpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9
IDc7Cgl9KTsKCgovKioqLyB9KSwKLyogMjAgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVu
bnkgZGVmaW5lUHJvcGVydHkKCW1vZHVsZS5leHBvcnRzID0gIV9fd2VicGFja19yZXF1aXJlX18o
MjEpKGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2En
LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7Cgl9KTsKCgovKioq
LyB9KSwKLyogMjEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCW1vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHsKCSAgdHJ5IHsKCSAgICByZXR1cm4gISFleGVj
KCk7CgkgIH0gY2F0Y2ggKGUpIHsKCSAgICByZXR1cm4gdHJ1ZTsKCSAgfQoJfTsKCgovKioqLyB9
KSwKLyogMjIgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3Jl
cXVpcmVfXykgewoKCXZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpOwoJdmFy
IGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkuZG9jdW1lbnQ7CgkvLyB0eXBlb2Yg
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUUKCXZhciBpcyA9IGlz
T2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTsKCW1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7CgkgIHJldHVybiBpcyA/IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoaXQpIDoge307Cgl9OwoKCi8qKiovIH0pLAovKiAyMyAqLwovKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLy8gNy4xLjEg
VG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pCgl2YXIgaXNPYmplY3QgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDE4KTsKCS8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24s
IHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlCgkvLyBhbmQgdGhlIHNlY29u
ZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZwoJbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHsKCSAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBp
dDsKCSAgdmFyIGZuLCB2YWw7CgkgIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykg
PT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFs
OwoJICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2Jq
ZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDsKCSAgaWYgKCFTICYmIHR5cGVvZiAo
Zm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2Fs
bChpdCkpKSByZXR1cm4gdmFsOwoJICB0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2Jq
ZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpOwoJfTsKCgovKioqLyB9KSwKLyogMjQgKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24g
KGJpdG1hcCwgdmFsdWUpIHsKCSAgcmV0dXJuIHsKCSAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAm
IDEpLAoJICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSwKCSAgICB3cml0YWJsZTogIShi
aXRtYXAgJiA0KSwKCSAgICB2YWx1ZTogdmFsdWUKCSAgfTsKCX07CgoKLyoqKi8gfSksCi8qIDI1
ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCgl2YXIgaGFzT3duUHJvcGVy
dHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBr
ZXkpIHsKCSAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7Cgl9OwoKCi8qKiov
IH0pLAovKiAyNiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTsK
CgovKioqLyB9KSwKLyogMjcgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoK
CW1vZHVsZS5leHBvcnRzID0ge307CgoKLyoqKi8gfSksCi8qIDI4ICovCi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkndXNlIHN0cmljdCc7
Cgl2YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7Cgl2YXIgZGVzY3JpcHRvciA9
IF9fd2VicGFja19yZXF1aXJlX18oMjQpOwoJdmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNr
X3JlcXVpcmVfXyg0NCk7Cgl2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTsKCgkvLyAyNS4xLjIu
MS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKQoJX193ZWJwYWNrX3JlcXVpcmVf
XygxNSkoSXRlcmF0b3JQcm90b3R5cGUsIF9fd2VicGFja19yZXF1aXJlX18oNDUpKCdpdGVyYXRv
cicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTsKCgltb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkgewoJICBDb25zdHJ1Y3Rvci5wcm90b3R5
cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0
KSB9KTsKCSAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7
Cgl9OwoKCi8qKiovIH0pLAovKiAyOSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3Qu
Y3JlYXRlKE8gWywgUHJvcGVydGllc10pCgl2YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDE3KTsKCXZhciBkUHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTsKCXZhciBlbnVtQnVn
S2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpOwoJdmFyIElFX1BST1RPID0gX193ZWJwYWNr
X3JlcXVpcmVfXygzOSkoJ0lFX1BST1RPJyk7Cgl2YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8q
IGVtcHR5ICovIH07Cgl2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7CgoJLy8gQ3JlYXRlIG9i
amVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBj
bGVhcmVkIHByb3RvdHlwZQoJdmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7CgkgIC8vIFRo
cmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnCgkgIHZhciBpZnJhbWUgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDIyKSgnaWZyYW1lJyk7CgkgIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3Ro
OwoJICB2YXIgbHQgPSAnPCc7CgkgIHZhciBndCA9ICc+JzsKCSAgdmFyIGlmcmFtZURvY3VtZW50
OwoJICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCSAgX193ZWJwYWNrX3JlcXVpcmVf
Xyg0MykuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKCSAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7
IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybAoJICAvLyBjcmVhdGVEaWN0ID0g
aWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0OwoJICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFt
ZSk7CgkgIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7Cgkg
IGlmcmFtZURvY3VtZW50Lm9wZW4oKTsKCSAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2Ny
aXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpOwoJ
ICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpOwoJICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQu
RjsKCSAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5
c1tpXV07CgkgIHJldHVybiBjcmVhdGVEaWN0KCk7Cgl9OwoKCW1vZHVsZS5leHBvcnRzID0gT2Jq
ZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykgewoJICB2YXIgcmVz
dWx0OwoJICBpZiAoTyAhPT0gbnVsbCkgewoJICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVj
dChPKTsKCSAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTsKCSAgICBFbXB0eVtQUk9UT1RZUEVdID0g
bnVsbDsKCSAgICAvLyBhZGQgIl9fcHJvdG9fXyIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBw
b2x5ZmlsbAoJICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPOwoJICB9IGVsc2UgcmVzdWx0ID0gY3Jl
YXRlRGljdCgpOwoJICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDog
ZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7Cgl9OwoKCi8qKiovIH0pLAovKiAzMCAqLwovKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyIGRQ
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7Cgl2YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDE3KTsKCXZhciBnZXRLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7CgoJbW9k
dWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSA/IE9iamVjdC5kZWZpbmVQcm9w
ZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7CgkgIGFu
T2JqZWN0KE8pOwoJICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7CgkgIHZhciBsZW5n
dGggPSBrZXlzLmxlbmd0aDsKCSAgdmFyIGkgPSAwOwoJICB2YXIgUDsKCSAgd2hpbGUgKGxlbmd0
aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7CgkgIHJldHVybiBP
OwoJfTsKCgovKioqLyB9KSwKLyogMzEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmpl
Y3Qua2V5cyhPKQoJdmFyICRrZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7Cgl2YXIgZW51
bUJ1Z0tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTsKCgltb2R1bGUuZXhwb3J0cyA9IE9i
amVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykgewoJICByZXR1cm4gJGtleXMoTywgZW51bUJ1
Z0tleXMpOwoJfTsKCgovKioqLyB9KSwKLyogMzIgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciBoYXMgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDI1KTsKCXZhciB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTsKCXZh
ciBhcnJheUluZGV4T2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KShmYWxzZSk7Cgl2YXIgSUVf
UFJPVE8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KSgnSUVfUFJPVE8nKTsKCgltb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7CgkgIHZhciBPID0gdG9JT2JqZWN0KG9i
amVjdCk7CgkgIHZhciBpID0gMDsKCSAgdmFyIHJlc3VsdCA9IFtdOwoJICB2YXIga2V5OwoJICBm
b3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQu
cHVzaChrZXkpOwoJICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzCgkgIHdoaWxlIChu
YW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7CgkgICAgfmFy
cmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTsKCSAgfQoJICByZXR1
cm4gcmVzdWx0OwoJfTsKCgovKioqLyB9KSwKLyogMzMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIHRvIGluZGV4ZWQgb2JqZWN0
LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5ncwoJ
dmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTsKCXZhciBkZWZpbmVkID0gX193
ZWJwYWNrX3JlcXVpcmVfXyg3KTsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7Cgkg
IHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTsKCX07CgoKLyoqKi8gfSksCi8qIDM0ICovCi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkv
LyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQg
Vjggc3RyaW5ncwoJdmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpOwoJLy8gZXNsaW50
LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucwoJbW9kdWxlLmV4cG9ydHMg
PSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9u
IChpdCkgewoJICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9i
amVjdChpdCk7Cgl9OwoKCi8qKiovIH0pLAovKiAzNSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzKSB7CgoJdmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7CgoJbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbiAoaXQpIHsKCSAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgs
IC0xKTsKCX07CgoKLyoqKi8gfSksCi8qIDM2ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9m
CgkvLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlcwoJdmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMzMpOwoJdmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7Cgl2
YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7Cgltb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykgewoJICByZXR1cm4gZnVuY3Rpb24gKCR0aGlz
LCBlbCwgZnJvbUluZGV4KSB7CgkgICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpOwoJICAgIHZh
ciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7CgkgICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0
ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTsKCSAgICB2YXIgdmFsdWU7CgkgICAgLy8gQXJyYXkj
aW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobQoJICAgIC8vIGVz
bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUKCSAgICBpZiAoSVNfSU5DTFVE
RVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkgewoJICAgICAgdmFsdWUgPSBP
W2luZGV4KytdOwoJICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29t
cGFyZQoJICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTsKCSAgICAvLyBBcnJh
eSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90CgkgICAgfSBlbHNl
IGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXgg
aW4gTykgewoJICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8
IGluZGV4IHx8IDA7CgkgICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xOwoJICB9OwoJfTsK
CgovKioqLyB9KSwKLyogMzcgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193
ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIDcuMS4xNSBUb0xlbmd0aAoJdmFyIHRvSW50ZWdlciA9
IF9fd2VicGFja19yZXF1aXJlX18oNik7Cgl2YXIgbWluID0gTWF0aC5taW47Cgltb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uIChpdCkgewoJICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihp
dCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1
NDc0MDk5MQoJfTsKCgovKioqLyB9KSwKLyogMzggKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciB0b0ludGVnZXIgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDYpOwoJdmFyIG1heCA9IE1hdGgubWF4OwoJdmFyIG1pbiA9IE1hdGgubWlu
OwoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkgewoJICBpbmRleCA9
IHRvSW50ZWdlcihpbmRleCk7CgkgIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5n
dGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpOwoJfTsKCgovKioqLyB9KSwKLyogMzkgKi8KLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZh
ciBzaGFyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKSgna2V5cycpOwoJdmFyIHVpZCA9IF9f
d2VicGFja19yZXF1aXJlX18oNDEpOwoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7
CgkgIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7Cgl9OwoK
Ci8qKiovIH0pLAovKiA0MCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsK
CXZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKCXZhciBTSEFSRUQgPSAnX19j
b3JlLWpzX3NoYXJlZF9fJzsKCXZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxb
U0hBUkVEXSA9IHt9KTsKCgkobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkg
ewoJICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmlu
ZWQgPyB2YWx1ZSA6IHt9KTsKCX0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHsKCSAgdmVyc2lvbjog
Y29yZS52ZXJzaW9uLAoJICBtb2RlOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpID8gJ3B1cmUnIDog
J2dsb2JhbCcsCgkgIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9j
ay5ydSknCgl9KTsKCgovKioqLyB9KSwKLyogNDEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cykgewoKCXZhciBpZCA9IDA7Cgl2YXIgcHggPSBNYXRoLnJhbmRvbSgpOwoJbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7CgkgIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtl
eSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2
KSk7Cgl9OwoKCi8qKiovIH0pLAovKiA0MiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzKSB7CgoJLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5cwoJbW9kdWxlLmV4cG9ydHMgPSAo
CgkgICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNF
bnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnCgkpLnNwbGl0KCcsJyk7
CgoKLyoqKi8gfSksCi8qIDQzICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9f
d2VicGFja19yZXF1aXJlX18pIHsKCgl2YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDExKS5kb2N1bWVudDsKCW1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50OwoKCi8qKiovIH0pLAovKiA0NCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyIGRlZiA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTYpLmY7Cgl2YXIgaGFzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7Cgl2YXIg
VEFHID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSkoJ3RvU3RyaW5nVGFnJyk7CgoJbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkgewoJICBpZiAoaXQgJiYgIWhhcyhpdCA9
IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJh
YmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pOwoJfTsKCgovKioqLyB9KSwKLyogNDUgKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciBz
dG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDApKCd3a3MnKTsKCXZhciB1aWQgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDQxKTsKCXZhciBTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5T
eW1ib2w7Cgl2YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJzsKCgl2
YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7CgkgIHJldHVy
biBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPQoJICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9s
W25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7
Cgl9OwoKCSRleHBvcnRzLnN0b3JlID0gc3RvcmU7CgoKLyoqKi8gfSksCi8qIDQ2ICovCi8qKiov
IChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvLyAx
OS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKQoJdmFyIGhhcyA9IF9f
d2VicGFja19yZXF1aXJlX18oMjUpOwoJdmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg0Nyk7Cgl2YXIgSUVfUFJPVE8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KSgnSUVfUFJPVE8n
KTsKCXZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7CgoJbW9kdWxlLmV4cG9ydHMg
PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHsKCSAgTyA9IHRvT2JqZWN0
KE8pOwoJICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dOwoJICBpZiAo
dHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25z
dHJ1Y3RvcikgewoJICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTsKCSAgfSByZXR1
cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDsKCX07CgoKLyoqKi8g
fSksCi8qIDQ3ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKCgkvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpCgl2YXIgZGVmaW5lZCA9
IF9fd2VicGFja19yZXF1aXJlX18oNyk7Cgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkg
ewoJICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTsKCX07CgoKLyoqKi8gfSksCi8qIDQ4ICov
Ci8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsK
CglfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTsKCXZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDExKTsKCXZhciBoaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7Cgl2YXIgSXRlcmF0
b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7Cgl2YXIgVE9fU1RSSU5HX1RBRyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNDUpKCd0b1N0cmluZ1RhZycpOwoKCXZhciBET01JdGVyYWJsZXMgPSAo
J0NTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RM
aXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsJyArCgkgICdET01Ub2tlbkxpc3QsRGF0YVRy
YW5zZmVySXRlbUxpc3QsRmlsZUxpc3QsSFRNTEFsbENvbGxlY3Rpb24sSFRNTENvbGxlY3Rpb24s
SFRNTEZvcm1FbGVtZW50LEhUTUxTZWxlY3RFbGVtZW50LCcgKwoJICAnTWVkaWFMaXN0LE1pbWVU
eXBlQXJyYXksTmFtZWROb2RlTWFwLE5vZGVMaXN0LFBhaW50UmVxdWVzdExpc3QsUGx1Z2luLFBs
dWdpbkFycmF5LFNWR0xlbmd0aExpc3QsU1ZHTnVtYmVyTGlzdCwnICsKCSAgJ1NWR1BhdGhTZWdM
aXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVm
ZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LCcgKwoJICAnVGV4dFRyYWNr
TGlzdCxUb3VjaExpc3QnKS5zcGxpdCgnLCcpOwoKCWZvciAodmFyIGkgPSAwOyBpIDwgRE9NSXRl
cmFibGVzLmxlbmd0aDsgaSsrKSB7CgkgIHZhciBOQU1FID0gRE9NSXRlcmFibGVzW2ldOwoJICB2
YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTsKCSAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAm
JiBDb2xsZWN0aW9uLnByb3RvdHlwZTsKCSAgaWYgKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdf
VEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7CgkgIEl0ZXJhdG9yc1tOQU1F
XSA9IEl0ZXJhdG9ycy5BcnJheTsKCX0KCgovKioqLyB9KSwKLyogNDkgKi8KLyoqKi8gKGZ1bmN0
aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCSd1c2Ugc3RyaWN0
JzsKCXZhciBhZGRUb1Vuc2NvcGFibGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MCk7Cgl2YXIg
c3RlcCA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpOwoJdmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMjcpOwoJdmFyIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzMp
OwoKCS8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKCkKCS8vIDIyLjEuMy4xMyBB
cnJheS5wcm90b3R5cGUua2V5cygpCgkvLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVl
cygpCgkvLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKCkKCW1vZHVsZS5l
eHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24g
KGl0ZXJhdGVkLCBraW5kKSB7CgkgIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0
YXJnZXQKCSAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXgKCSAg
dGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmQKCS8vIDIyLjEuNS4yLjEgJUFy
cmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKQoJfSwgZnVuY3Rpb24gKCkgewoJICB2YXIgTyA9
IHRoaXMuX3Q7CgkgIHZhciBraW5kID0gdGhpcy5fazsKCSAgdmFyIGluZGV4ID0gdGhpcy5faSsr
OwoJICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHsKCSAgICB0aGlzLl90ID0gdW5kZWZp
bmVkOwoJICAgIHJldHVybiBzdGVwKDEpOwoJICB9CgkgIGlmIChraW5kID09ICdrZXlzJykgcmV0
dXJuIHN0ZXAoMCwgaW5kZXgpOwoJICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAo
MCwgT1tpbmRleF0pOwoJICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7Cgl9LCAn
dmFsdWVzJyk7CgoJLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192
YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KQoJSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9y
cy5BcnJheTsKCglhZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7CglhZGRUb1Vuc2NvcGFibGVzKCd2
YWx1ZXMnKTsKCWFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTsKCgovKioqLyB9KSwKLyogNTAg
Ki8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCW1vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9OwoKCi8qKiovIH0pLAovKiA1MSAqLwovKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAo
ZG9uZSwgdmFsdWUpIHsKCSAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTsK
CX07CgoKLyoqKi8gfSksCi8qIDUyICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkndXNlIHN0cmljdCc7Cgl2YXIgTElCUkFSWSA9IF9f
d2VicGFja19yZXF1aXJlX18oOSk7Cgl2YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
MSk7Cgl2YXIgY3R4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7Cgl2YXIgY2xhc3NvZiA9IF9f
d2VicGFja19yZXF1aXJlX18oNTMpOwoJdmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEwKTsKCXZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpOwoJdmFyIGFGdW5j
dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpOwoJdmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDU0KTsKCXZhciBmb3JPZiA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpOwoJ
dmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oNTkpOwoJdmFyIHRh
c2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKS5zZXQ7Cgl2YXIgbWljcm90YXNrID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg2MikoKTsKCXZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9f
d2VicGFja19yZXF1aXJlX18oNjMpOwoJdmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDY0KTsKCXZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTsKCXZhciBwcm9t
aXNlUmVzb2x2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpOwoJdmFyIFBST01JU0UgPSAnUHJv
bWlzZSc7Cgl2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjsKCXZhciBwcm9jZXNzID0g
Z2xvYmFsLnByb2Nlc3M7Cgl2YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lv
bnM7Cgl2YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJzsKCXZhciAkUHJvbWlz
ZSA9IGdsb2JhbFtQUk9NSVNFXTsKCXZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdw
cm9jZXNzJzsKCXZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTsKCXZhciBJ
bnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0
eSwgV3JhcHBlcjsKCXZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNl
Q2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7CgoJdmFyIFVTRV9OQVRJ
VkUgPSAhIWZ1bmN0aW9uICgpIHsKCSAgdHJ5IHsKCSAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5n
IHdpdGggQEBzcGVjaWVzIHN1cHBvcnQKCSAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29s
dmUoMSk7CgkgICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlb
X193ZWJwYWNrX3JlcXVpcmVfXyg0NSkoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykgewoJ
ICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpOwoJICAgIH07CgkgICAgLy8gdW5oYW5kbGVkIHJlamVj
dGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBA
QHNwZWNpZXMgdGVzdAoJICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0
aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJykKCSAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5z
dGFuY2VvZiBGYWtlUHJvbWlzZQoJICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUg
NjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlcwoJICAgICAgLy8g
aHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMw
NTY1CgkgICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBj
aGVjayB2ZXJzaW9ucwoJICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDAKCSAgICAgICYm
IHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7CgkgIH0gY2F0Y2ggKGUpIHsg
LyogZW1wdHkgKi8gfQoJfSgpOwoKCS8vIGhlbHBlcnMKCXZhciBpc1RoZW5hYmxlID0gZnVuY3Rp
b24gKGl0KSB7CgkgIHZhciB0aGVuOwoJICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAo
dGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7Cgl9OwoJdmFyIG5v
dGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkgewoJICBpZiAocHJvbWlzZS5fbikg
cmV0dXJuOwoJICBwcm9taXNlLl9uID0gdHJ1ZTsKCSAgdmFyIGNoYWluID0gcHJvbWlzZS5fYzsK
CSAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHsKCSAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92OwoJ
ICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTsKCSAgICB2YXIgaSA9IDA7CgkgICAgdmFyIHJ1
biA9IGZ1bmN0aW9uIChyZWFjdGlvbikgewoJICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0
aW9uLm9rIDogcmVhY3Rpb24uZmFpbDsKCSAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVz
b2x2ZTsKCSAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7CgkgICAgICB2YXIgZG9t
YWluID0gcmVhY3Rpb24uZG9tYWluOwoJICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkOwoJ
ICAgICAgdHJ5IHsKCSAgICAgICAgaWYgKGhhbmRsZXIpIHsKCSAgICAgICAgICBpZiAoIW9rKSB7
CgkgICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9t
aXNlKTsKCSAgICAgICAgICAgIHByb21pc2UuX2ggPSAxOwoJICAgICAgICAgIH0KCSAgICAgICAg
ICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7CgkgICAgICAgICAgZWxzZSB7
CgkgICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTsKCSAgICAgICAgICAgIHJl
c3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3cKCSAgICAgICAgICAgIGlmIChkb21h
aW4pIHsKCSAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTsKCSAgICAgICAgICAgICAgZXhpdGVk
ID0gdHJ1ZTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICB9CgkgICAgICAgICAgaWYgKHJlc3Vs
dCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkgewoJICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcign
UHJvbWlzZS1jaGFpbiBjeWNsZScpKTsKCSAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1Ro
ZW5hYmxlKHJlc3VsdCkpIHsKCSAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUs
IHJlamVjdCk7CgkgICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTsKCSAgICAgICAgfSBl
bHNlIHJlamVjdCh2YWx1ZSk7CgkgICAgICB9IGNhdGNoIChlKSB7CgkgICAgICAgIGlmIChkb21h
aW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTsKCSAgICAgICAgcmVqZWN0KGUpOwoJICAgICAg
fQoJICAgIH07CgkgICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsg
Ly8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2gKCSAgICBwcm9taXNlLl9jID0g
W107CgkgICAgcHJvbWlzZS5fbiA9IGZhbHNlOwoJICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlz
ZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7CgkgIH0pOwoJfTsKCXZhciBvblVuaGFuZGxlZCA9
IGZ1bmN0aW9uIChwcm9taXNlKSB7CgkgIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHsK
CSAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92OwoJICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFu
ZGxlZChwcm9taXNlKTsKCSAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlOwoJICAgIGlm
ICh1bmhhbmRsZWQpIHsKCSAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkgewoJICAg
ICAgICBpZiAoaXNOb2RlKSB7CgkgICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWpl
Y3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7CgkgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGds
b2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikgewoJICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNl
OiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pOwoJICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xl
ID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHsKCSAgICAgICAgICBjb25zb2xl
LmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7CgkgICAgICAgIH0K
CSAgICAgIH0pOwoJICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rp
b25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGQK
CSAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDog
MTsKCSAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7CgkgICAgaWYgKHVuaGFuZGxlZCAmJiBy
ZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7CgkgIH0pOwoJfTsKCXZhciBpc1VuaGFuZGxlZCA9IGZ1
bmN0aW9uIChwcm9taXNlKSB7CgkgIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNl
Ll9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDsKCX07Cgl2YXIgb25IYW5kbGVVbmhhbmRs
ZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkgewoJICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAo
KSB7CgkgICAgdmFyIGhhbmRsZXI7CgkgICAgaWYgKGlzTm9kZSkgewoJICAgICAgcHJvY2Vzcy5l
bWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7CgkgICAgfSBlbHNlIGlmIChoYW5kbGVy
ID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkgewoJICAgICAgaGFuZGxlcih7IHByb21pc2U6
IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTsKCSAgICB9CgkgIH0pOwoJfTsKCXZhciAk
cmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7CgkgIHZhciBwcm9taXNlID0gdGhpczsKCSAgaWYg
KHByb21pc2UuX2QpIHJldHVybjsKCSAgcHJvbWlzZS5fZCA9IHRydWU7CgkgIHByb21pc2UgPSBw
cm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcAoJICBwcm9taXNlLl92ID0gdmFsdWU7Cgkg
IHByb21pc2UuX3MgPSAyOwoJICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNl
Ll9jLnNsaWNlKCk7CgkgIG5vdGlmeShwcm9taXNlLCB0cnVlKTsKCX07Cgl2YXIgJHJlc29sdmUg
PSBmdW5jdGlvbiAodmFsdWUpIHsKCSAgdmFyIHByb21pc2UgPSB0aGlzOwoJICB2YXIgdGhlbjsK
CSAgaWYgKHByb21pc2UuX2QpIHJldHVybjsKCSAgcHJvbWlzZS5fZCA9IHRydWU7CgkgIHByb21p
c2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcAoJICB0cnkgewoJICAgIGlmIChw
cm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKCJQcm9taXNlIGNhbid0IGJlIHJlc29s
dmVkIGl0c2VsZiIpOwoJICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHsKCSAgICAg
IG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7CgkgICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJv
bWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXAKCSAgICAgICAgdHJ5IHsKCSAgICAgICAgICB0aGVu
LmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFw
cGVyLCAxKSk7CgkgICAgICAgIH0gY2F0Y2ggKGUpIHsKCSAgICAgICAgICAkcmVqZWN0LmNhbGwo
d3JhcHBlciwgZSk7CgkgICAgICAgIH0KCSAgICAgIH0pOwoJICAgIH0gZWxzZSB7CgkgICAgICBw
cm9taXNlLl92ID0gdmFsdWU7CgkgICAgICBwcm9taXNlLl9zID0gMTsKCSAgICAgIG5vdGlmeShw
cm9taXNlLCBmYWxzZSk7CgkgICAgfQoJICB9IGNhdGNoIChlKSB7CgkgICAgJHJlamVjdC5jYWxs
KHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcAoJICB9Cgl9OwoKCS8vIGNv
bnN0cnVjdG9yIHBvbHlmaWxsCglpZiAoIVVTRV9OQVRJVkUpIHsKCSAgLy8gMjUuNC4zLjEgUHJv
bWlzZShleGVjdXRvcikKCSAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7
CgkgICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7CgkgICAgYUZ1
bmN0aW9uKGV4ZWN1dG9yKTsKCSAgICBJbnRlcm5hbC5jYWxsKHRoaXMpOwoJICAgIHRyeSB7Cgkg
ICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywg
MSkpOwoJICAgIH0gY2F0Y2ggKGVycikgewoJICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7
CgkgICAgfQoJICB9OwoJICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZh
cnMKCSAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7CgkgICAgdGhpcy5f
YyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnMKCSAgICB0aGlzLl9h
ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25z
CgkgICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZQoJICAgIHRoaXMuX2Qg
PSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZQoJICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAg
ICAgLy8gPC0gdmFsdWUKCSAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVj
dGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkCgkgICAg
dGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnkKCSAgfTsKCSAgSW50ZXJuYWwu
cHJvdG90eXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NykoJFByb21pc2UucHJvdG90eXBlLCB7
CgkgICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25S
ZWplY3RlZCkKCSAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVk
KSB7CgkgICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29u
c3RydWN0b3IodGhpcywgJFByb21pc2UpKTsKCSAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9u
RnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7CgkgICAgICByZWFj
dGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVk
OwoJICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRl
ZmluZWQ7CgkgICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pOwoJICAgICAgaWYgKHRoaXMuX2Ep
IHRoaXMuX2EucHVzaChyZWFjdGlvbik7CgkgICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMs
IGZhbHNlKTsKCSAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlOwoJICAgIH0sCgkgICAgLy8g
MjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZCkKCSAgICAnY2F0Y2gn
OiBmdW5jdGlvbiAob25SZWplY3RlZCkgewoJICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmlu
ZWQsIG9uUmVqZWN0ZWQpOwoJICAgIH0KCSAgfSk7CgkgIE93blByb21pc2VDYXBhYmlsaXR5ID0g
ZnVuY3Rpb24gKCkgewoJICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7CgkgICAgdGhp
cy5wcm9taXNlID0gcHJvbWlzZTsKCSAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHBy
b21pc2UsIDEpOwoJICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpOwoJ
ICB9OwoJICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxp
dHkgPSBmdW5jdGlvbiAoQykgewoJICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBX
cmFwcGVyCgkgICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKQoJICAgICAgOiBuZXdH
ZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7CgkgIH07Cgl9CgoJJGV4cG9ydCgkZXhwb3J0Lkcg
KyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlz
ZSB9KTsKCV9fd2VicGFja19yZXF1aXJlX18oNDQpKCRQcm9taXNlLCBQUk9NSVNFKTsKCV9fd2Vi
cGFja19yZXF1aXJlX18oNjgpKFBST01JU0UpOwoJV3JhcHBlciA9IF9fd2VicGFja19yZXF1aXJl
X18oMTIpW1BST01JU0VdOwoKCS8vIHN0YXRpY3MKCSRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9y
dC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHsKCSAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWpl
Y3QocikKCSAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3QocikgewoJICAgIHZhciBjYXBhYmlsaXR5
ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7CgkgICAgdmFyICQkcmVqZWN0ID0gY2FwYWJp
bGl0eS5yZWplY3Q7CgkgICAgJCRyZWplY3Qocik7CgkgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJv
bWlzZTsKCSAgfQoJfSk7CgkkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZ
IHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwgewoJICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29s
dmUoeCkKCSAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7CgkgICAgcmV0dXJuIHByb21p
c2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywg
eCk7CgkgIH0KCX0pOwoJJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJ
VkUgJiYgX193ZWJwYWNrX3JlcXVpcmVfXyg2OSkoZnVuY3Rpb24gKGl0ZXIpIHsKCSAgJFByb21p
c2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTsKCX0pKSwgUFJPTUlTRSwgewoJICAvLyAyNS40
LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSkKCSAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUp
IHsKCSAgICB2YXIgQyA9IHRoaXM7CgkgICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2Fw
YWJpbGl0eShDKTsKCSAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTsKCSAgICB2
YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7CgkgICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0o
ZnVuY3Rpb24gKCkgewoJICAgICAgdmFyIHZhbHVlcyA9IFtdOwoJICAgICAgdmFyIGluZGV4ID0g
MDsKCSAgICAgIHZhciByZW1haW5pbmcgPSAxOwoJICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNl
LCBmdW5jdGlvbiAocHJvbWlzZSkgewoJICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKzsKCSAg
ICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTsKCSAgICAgICAgdmFsdWVzLnB1c2godW5k
ZWZpbmVkKTsKCSAgICAgICAgcmVtYWluaW5nKys7CgkgICAgICAgIEMucmVzb2x2ZShwcm9taXNl
KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgewoJICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSBy
ZXR1cm47CgkgICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7CgkgICAgICAgICAgdmFsdWVz
WyRpbmRleF0gPSB2YWx1ZTsKCSAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVl
cyk7CgkgICAgICAgIH0sIHJlamVjdCk7CgkgICAgICB9KTsKCSAgICAgIC0tcmVtYWluaW5nIHx8
IHJlc29sdmUodmFsdWVzKTsKCSAgICB9KTsKCSAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1
bHQudik7CgkgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTsKCSAgfSwKCSAgLy8gMjUuNC40
LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKQoJICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxl
KSB7CgkgICAgdmFyIEMgPSB0aGlzOwoJICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNh
cGFiaWxpdHkoQyk7CgkgICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0OwoJICAgIHZh
ciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHsKCSAgICAgIGZvck9mKGl0ZXJhYmxlLCBm
YWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHsKCSAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRo
ZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpOwoJICAgICAgfSk7CgkgICAgfSk7CgkgICAg
aWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpOwoJICAgIHJldHVybiBjYXBhYmlsaXR5LnBy
b21pc2U7CgkgIH0KCX0pOwoKCi8qKiovIH0pLAovKiA1MyAqLwovKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLy8gZ2V0dGluZyB0YWcgZnJv
bSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKCkKCXZhciBjb2YgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDM1KTsKCXZhciBUQUcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KSgndG9T
dHJpbmdUYWcnKTsKCS8vIEVTMyB3cm9uZyBoZXJlCgl2YXIgQVJHID0gY29mKGZ1bmN0aW9uICgp
IHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJzsKCgkvLyBmYWxsYmFjayBm
b3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvcgoJdmFyIHRyeUdldCA9IGZ1bmN0aW9u
IChpdCwga2V5KSB7CgkgIHRyeSB7CgkgICAgcmV0dXJuIGl0W2tleV07CgkgIH0gY2F0Y2ggKGUp
IHsgLyogZW1wdHkgKi8gfQoJfTsKCgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkgewoJ
ICB2YXIgTywgVCwgQjsKCSAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6
IGl0ID09PSBudWxsID8gJ051bGwnCgkgICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlCgkgICAgOiB0
eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVAoJ
ICAgIC8vIGJ1aWx0aW5UYWcgY2FzZQoJICAgIDogQVJHID8gY29mKE8pCgkgICAgLy8gRVMzIGFy
Z3VtZW50cyBmYWxsYmFjawoJICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVv
ZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCOwoJfTsKCgovKioqLyB9
KSwKLyogNTQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCW1vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQp
IHsKCSAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxk
ICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7CgkgICAgdGhyb3cgVHlw
ZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTsKCSAgfSByZXR1cm4gaXQ7
Cgl9OwoKCi8qKiovIH0pLAovKiA1NSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyIGN0eCA9IF9fd2VicGFja19yZXF1aXJlX18o
MTMpOwoJdmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KTsKCXZhciBpc0FycmF5SXRl
ciA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpOwoJdmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxNyk7Cgl2YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTsKCXZh
ciBnZXRJdGVyRm4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTsKCXZhciBCUkVBSyA9IHt9OwoJ
dmFyIFJFVFVSTiA9IHt9OwoJdmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
IChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7CgkgIHZhciBpdGVyRm4g
PSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZu
KGl0ZXJhYmxlKTsKCSAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7Cgkg
IHZhciBpbmRleCA9IDA7CgkgIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7Cgkg
IGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJs
ZSArICcgaXMgbm90IGl0ZXJhYmxlIScpOwoJICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRo
IGRlZmF1bHQgaXRlcmF0b3IKCSAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3Ro
ID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHsK
CSAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhd
KVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7CgkgICAgaWYgKHJlc3VsdCA9PT0g
QlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7CgkgIH0gZWxzZSBmb3Ig
KGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0
KCkpLmRvbmU7KSB7CgkgICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwg
ZW50cmllcyk7CgkgICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4p
IHJldHVybiByZXN1bHQ7CgkgIH0KCX07CglleHBvcnRzLkJSRUFLID0gQlJFQUs7CglleHBvcnRz
LlJFVFVSTiA9IFJFVFVSTjsKCgovKioqLyB9KSwKLyogNTYgKi8KLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIGNhbGwgc29tZXRoaW5n
IG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3IKCXZhciBhbk9iamVj
dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpOwoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAo
aXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykgewoJICB0cnkgewoJICAgIHJldHVybiBlbnRy
aWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7CgkgIC8v
IDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pCgkgIH0gY2F0Y2ggKGUp
IHsKCSAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddOwoJICAgIGlmIChyZXQgIT09IHVu
ZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTsKCSAgICB0aHJvdyBlOwoJICB9
Cgl9OwoKCi8qKiovIH0pLAovKiA1NyAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
LCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVy
YXRvcgoJdmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpOwoJdmFyIElURVJB
VE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSkoJ2l0ZXJhdG9yJyk7Cgl2YXIgQXJyYXlQcm90
byA9IEFycmF5LnByb3RvdHlwZTsKCgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkgewoJ
ICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBB
cnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpOwoJfTsKCgovKioqLyB9KSwKLyogNTggKi8KLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZh
ciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7Cgl2YXIgSVRFUkFUT1IgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDQ1KSgnaXRlcmF0b3InKTsKCXZhciBJdGVyYXRvcnMgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDI3KTsKCW1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
MikuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHsKCSAgaWYgKGl0ICE9IHVuZGVm
aW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXQoJICAgIHx8IGl0WydAQGl0ZXJhdG9yJ10KCSAgICB8
fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldOwoJfTsKCgovKioqLyB9KSwKLyogNTkgKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIDcu
My4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKQoJdmFyIGFuT2Jq
ZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7Cgl2YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNr
X3JlcXVpcmVfXygxNCk7Cgl2YXIgU1BFQ0lFUyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCdz
cGVjaWVzJyk7Cgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7CgkgIHZhciBDID0g
YW5PYmplY3QoTykuY29uc3RydWN0b3I7CgkgIHZhciBTOwoJICByZXR1cm4gQyA9PT0gdW5kZWZp
bmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVu
Y3Rpb24oUyk7Cgl9OwoKCi8qKiovIH0pLAovKiA2MCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyIGN0eCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTMpOwoJdmFyIGludm9rZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpOwoJdmFy
IGh0bWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTsKCXZhciBjZWwgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDIyKTsKCXZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKCXZhciBw
cm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7Cgl2YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlh
dGU7Cgl2YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlOwoJdmFyIE1lc3NhZ2VD
aGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsOwoJdmFyIERpc3BhdGNoID0gZ2xvYmFsLkRp
c3BhdGNoOwoJdmFyIGNvdW50ZXIgPSAwOwoJdmFyIHF1ZXVlID0ge307Cgl2YXIgT05SRUFEWVNU
QVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7Cgl2YXIgZGVmZXIsIGNoYW5uZWwsIHBv
cnQ7Cgl2YXIgcnVuID0gZnVuY3Rpb24gKCkgewoJICB2YXIgaWQgPSArdGhpczsKCSAgLy8gZXNs
aW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucwoJICBpZiAocXVldWUu
aGFzT3duUHJvcGVydHkoaWQpKSB7CgkgICAgdmFyIGZuID0gcXVldWVbaWRdOwoJICAgIGRlbGV0
ZSBxdWV1ZVtpZF07CgkgICAgZm4oKTsKCSAgfQoJfTsKCXZhciBsaXN0ZW5lciA9IGZ1bmN0aW9u
IChldmVudCkgewoJICBydW4uY2FsbChldmVudC5kYXRhKTsKCX07CgkvLyBOb2RlLmpzIDAuOSsg
JiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6CglpZiAoIXNldFRhc2sgfHwgIWNs
ZWFyVGFzaykgewoJICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7CgkgICAg
dmFyIGFyZ3MgPSBbXTsKCSAgICB2YXIgaSA9IDE7CgkgICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5n
dGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pOwoJICAgIHF1ZXVlWysrY291bnRlcl0g
PSBmdW5jdGlvbiAoKSB7CgkgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3
LWZ1bmMKCSAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rp
b24oZm4pLCBhcmdzKTsKCSAgICB9OwoJICAgIGRlZmVyKGNvdW50ZXIpOwoJICAgIHJldHVybiBj
b3VudGVyOwoJICB9OwoJICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkg
ewoJICAgIGRlbGV0ZSBxdWV1ZVtpZF07CgkgIH07CgkgIC8vIE5vZGUuanMgMC44LQoJICBpZiAo
X193ZWJwYWNrX3JlcXVpcmVfXygzNSkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7CgkgICAgZGVm
ZXIgPSBmdW5jdGlvbiAoaWQpIHsKCSAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQs
IDEpKTsKCSAgICB9OwoJICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUEkK
CSAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHsKCSAgICBkZWZlciA9IGZ1
bmN0aW9uIChpZCkgewoJICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7CgkgICAg
fTsKCSAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vy
cwoJICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7CgkgICAgY2hhbm5lbCA9IG5ldyBNZXNz
YWdlQ2hhbm5lbCgpOwoJICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyOwoJICAgIGNoYW5uZWwucG9y
dDEub25tZXNzYWdlID0gbGlzdGVuZXI7CgkgICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2Fn
ZSwgcG9ydCwgMSk7CgkgIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29y
a2VycwoJICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0
cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0JwoJICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExp
c3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1w
b3J0U2NyaXB0cykgewoJICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7CgkgICAgICBnbG9iYWwu
cG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTsKCSAgICB9OwoJICAgIGdsb2JhbC5hZGRFdmVudExp
c3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTsKCSAgLy8gSUU4LQoJICB9IGVsc2Ug
aWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7CgkgICAgZGVmZXIgPSBm
dW5jdGlvbiAoaWQpIHsKCSAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05S
RUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHsKCSAgICAgICAgaHRtbC5yZW1vdmVDaGls
ZCh0aGlzKTsKCSAgICAgICAgcnVuLmNhbGwoaWQpOwoJICAgICAgfTsKCSAgICB9OwoJICAvLyBS
ZXN0IG9sZCBicm93c2VycwoJICB9IGVsc2UgewoJICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7
CgkgICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7CgkgICAgfTsKCSAgfQoJfQoJ
bW9kdWxlLmV4cG9ydHMgPSB7CgkgIHNldDogc2V0VGFzaywKCSAgY2xlYXI6IGNsZWFyVGFzawoJ
fTsKCgovKioqLyB9KSwKLyogNjEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykg
ewoKCS8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNQoJ
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHsKCSAgdmFyIHVuID0g
dGhhdCA9PT0gdW5kZWZpbmVkOwoJICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7CgkgICAgY2FzZSAw
OiByZXR1cm4gdW4gPyBmbigpCgkgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQp
OwoJICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSkKCSAgICAgICAgICAgICAgICAg
ICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7CgkgICAgY2FzZSAyOiByZXR1cm4gdW4gPyBm
bihhcmdzWzBdLCBhcmdzWzFdKQoJICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0
LCBhcmdzWzBdLCBhcmdzWzFdKTsKCSAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0s
IGFyZ3NbMV0sIGFyZ3NbMl0pCgkgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQs
IGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOwoJICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4o
YXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSkKCSAgICAgICAgICAgICAgICAgICAg
ICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7Cgkg
IH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpOwoJfTsKCgovKioqLyB9KSwKLyogNjIgKi8K
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoK
CXZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKCXZhciBtYWNyb3Rhc2sgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDYwKS5zZXQ7Cgl2YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRp
b25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjsKCXZhciBwcm9jZXNz
ID0gZ2xvYmFsLnByb2Nlc3M7Cgl2YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlOwoJdmFyIGlz
Tm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpKHByb2Nlc3MpID09ICdwcm9jZXNzJzsKCglt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsKCSAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTsK
CgkgIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHsKCSAgICB2YXIgcGFyZW50LCBmbjsKCSAgICBp
ZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7Cgkg
ICAgd2hpbGUgKGhlYWQpIHsKCSAgICAgIGZuID0gaGVhZC5mbjsKCSAgICAgIGhlYWQgPSBoZWFk
Lm5leHQ7CgkgICAgICB0cnkgewoJICAgICAgICBmbigpOwoJICAgICAgfSBjYXRjaCAoZSkgewoJ
ICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7CgkgICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5l
ZDsKCSAgICAgICAgdGhyb3cgZTsKCSAgICAgIH0KCSAgICB9IGxhc3QgPSB1bmRlZmluZWQ7Cgkg
ICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7CgkgIH07CgoJICAvLyBOb2RlLmpzCgkgIGlm
IChpc05vZGUpIHsKCSAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7CgkgICAgICBwcm9jZXNzLm5l
eHRUaWNrKGZsdXNoKTsKCSAgICB9OwoJICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2
ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUt
anMvaXNzdWVzLzMzOQoJICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRv
ciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7CgkgICAgdmFyIHRvZ2dsZSA9IHRy
dWU7CgkgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7CgkgICAgbmV3
IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsg
Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXcKCSAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7
CgkgICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlOwoJICAgIH07CgkgIC8vIGVudmly
b25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQ
cm9taXNlCgkgIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHsKCSAgICAv
LyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4g
TEcgV2ViT1MgMgoJICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7
CgkgICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkgewoJICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTsK
CSAgICB9OwoJICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9u
OgoJICAvLyAtIHNldEltbWVkaWF0ZQoJICAvLyAtIE1lc3NhZ2VDaGFubmVsCgkgIC8vIC0gd2lu
ZG93LnBvc3RNZXNzYWcKCSAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2UKCSAgLy8gLSBzZXRUaW1l
b3V0CgkgIH0gZWxzZSB7CgkgICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkgewoJICAgICAgLy8gc3Ry
YW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKQoJICAg
ICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7CgkgICAgfTsKCSAgfQoKCSAgcmV0dXJu
IGZ1bmN0aW9uIChmbikgewoJICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5l
ZCB9OwoJICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrOwoJICAgIGlmICghaGVhZCkgewoJ
ICAgICAgaGVhZCA9IHRhc2s7CgkgICAgICBub3RpZnkoKTsKCSAgICB9IGxhc3QgPSB0YXNrOwoJ
ICB9OwoJfTsKCgovKioqLyB9KSwKLyogNjMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCSd1c2Ugc3RyaWN0JzsKCS8vIDI1LjQuMS41
IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpCgl2YXIgYUZ1bmN0aW9uID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxNCk7CgoJZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykgewoJICB2YXIgcmVzb2x2
ZSwgcmVqZWN0OwoJICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAk
JHJlamVjdCkgewoJICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1
bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTsKCSAg
ICByZXNvbHZlID0gJCRyZXNvbHZlOwoJICAgIHJlamVjdCA9ICQkcmVqZWN0OwoJICB9KTsKCSAg
dGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpOwoJICB0aGlzLnJlamVjdCA9IGFGdW5j
dGlvbihyZWplY3QpOwoJfQoKCW1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykgewoJICBy
ZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpOwoJfTsKCgovKioqLyB9KSwKLyogNjQgKi8K
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCW1vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24gKGV4ZWMpIHsKCSAgdHJ5IHsKCSAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygp
IH07CgkgIH0gY2F0Y2ggKGUpIHsKCSAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07CgkgIH0K
CX07CgoKLyoqKi8gfSksCi8qIDY1ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKCgl2YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxMSk7Cgl2YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjsKCgltb2R1bGUuZXhwb3J0
cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnOwoKCi8qKiovIH0pLAov
KiA2NiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7CgoJdmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7Cgl2YXIgaXNP
YmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTsKCXZhciBuZXdQcm9taXNlQ2FwYWJpbGl0
eSA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpOwoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24g
KEMsIHgpIHsKCSAgYW5PYmplY3QoQyk7CgkgIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVj
dG9yID09PSBDKSByZXR1cm4geDsKCSAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlz
ZUNhcGFiaWxpdHkuZihDKTsKCSAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNv
bHZlOwoJICByZXNvbHZlKHgpOwoJICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTsK
CX07CgoKLyoqKi8gfSksCi8qIDY3ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKCgl2YXIgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18o
MTUpOwoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHsKCSAg
Zm9yICh2YXIga2V5IGluIHNyYykgewoJICAgIGlmIChzYWZlICYmIHRhcmdldFtrZXldKSB0YXJn
ZXRba2V5XSA9IHNyY1trZXldOwoJICAgIGVsc2UgaGlkZSh0YXJnZXQsIGtleSwgc3JjW2tleV0p
OwoJICB9IHJldHVybiB0YXJnZXQ7Cgl9OwoKCi8qKiovIH0pLAovKiA2OCAqLwovKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJJ3VzZSBzdHJp
Y3QnOwoJdmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpOwoJdmFyIGNvcmUgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKCXZhciBkUCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYp
OwoJdmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7Cgl2YXIgU1BFQ0lF
UyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCdzcGVjaWVzJyk7CgoJbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbiAoS0VZKSB7CgkgIHZhciBDID0gdHlwZW9mIGNvcmVbS0VZXSA9PSAnZnVuY3Rp
b24nID8gY29yZVtLRVldIDogZ2xvYmFsW0tFWV07CgkgIGlmIChERVNDUklQVE9SUyAmJiBDICYm
ICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHsKCSAgICBjb25maWd1cmFibGU6IHRydWUs
CgkgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9CgkgIH0pOwoJfTsKCgovKioq
LyB9KSwKLyogNjkgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykgewoKCXZhciBJVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpKCdp
dGVyYXRvcicpOwoJdmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlOwoKCXRyeSB7CgkgIHZhciByaXRl
ciA9IFs3XVtJVEVSQVRPUl0oKTsKCSAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBT
QUZFX0NMT1NJTkcgPSB0cnVlOyB9OwoJICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8t
dGhyb3ctbGl0ZXJhbAoJICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7
IH0pOwoJfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9CgoJbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHsKCSAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9D
TE9TSU5HKSByZXR1cm4gZmFsc2U7CgkgIHZhciBzYWZlID0gZmFsc2U7CgkgIHRyeSB7CgkgICAg
dmFyIGFyciA9IFs3XTsKCSAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTsKCSAgICBpdGVy
Lm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07Cgkg
ICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07CgkgICAgZXhl
YyhhcnIpOwoJICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH0KCSAgcmV0dXJuIHNhZmU7Cgl9
OwoKCi8qKiovIH0pLAovKiA3MCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9z
YWwtcHJvbWlzZS1maW5hbGx5CgkndXNlIHN0cmljdCc7Cgl2YXIgJGV4cG9ydCA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTApOwoJdmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKCXZh
ciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKCXZhciBzcGVjaWVzQ29uc3RydWN0
b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTsKCXZhciBwcm9taXNlUmVzb2x2ZSA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNjYpOwoKCSRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJv
bWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7CgkgIHZhciBDID0gc3Bl
Y2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7Cgkg
IHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nOwoJICByZXR1
cm4gdGhpcy50aGVuKAoJICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkgewoJICAgICAgcmV0
dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0
dXJuIHg7IH0pOwoJICAgIH0gOiBvbkZpbmFsbHksCgkgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9u
IChlKSB7CgkgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4o
ZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTsKCSAgICB9IDogb25GaW5hbGx5CgkgICk7Cgl9IH0p
OwoKCi8qKiovIH0pLAovKiA3MSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJJ3VzZSBzdHJpY3QnOwoJLy8gaHR0cHM6Ly9naXRodWIu
Y29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnkKCXZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3Jl
cXVpcmVfXygxMCk7Cgl2YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDYzKTsKCXZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7CgoJJGV4cG9y
dCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHsK
CSAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTsK
CSAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7CgkgIChyZXN1bHQuZSA/IHByb21p
c2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52
KTsKCSAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7Cgl9IH0pOwoKCi8qKiovIH0p
LAovKiA3MiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSB7ICJkZWZhdWx0IjogX193ZWJwYWNrX3JlcXVp
cmVfXyg3MyksIF9fZXNNb2R1bGU6IHRydWUgfTsKCi8qKiovIH0pLAovKiA3MyAqLwovKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJX193ZWJw
YWNrX3JlcXVpcmVfXyg0OCk7CglfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwoJbW9kdWxlLmV4cG9y
dHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTsKCgovKioqLyB9KSwKLyogNzQgKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciBh
bk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpOwoJdmFyIGdldCA9IF9fd2VicGFja19y
ZXF1aXJlX18oNTgpOwoJbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5n
ZXRJdGVyYXRvciA9IGZ1bmN0aW9uIChpdCkgewoJICB2YXIgaXRlckZuID0gZ2V0KGl0KTsKCSAg
aWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBp
cyBub3QgaXRlcmFibGUhJyk7CgkgIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpOwoJ
fTsKCgovKioqLyB9KSwKLyogNzUgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykgewoKCW1vZHVsZS5leHBvcnRzID0geyAiZGVmYXVsdCI6IF9f
d2VicGFja19yZXF1aXJlX18oNzYpLCBfX2VzTW9kdWxlOiB0cnVlIH07CgovKioqLyB9KSwKLyog
NzYgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
XykgewoKCV9fd2VicGFja19yZXF1aXJlX18oNzcpOwoJbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDEyKS5PYmplY3Qua2V5czsKCgovKioqLyB9KSwKLyogNzcgKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIDE5
LjEuMi4xNCBPYmplY3Qua2V5cyhPKQoJdmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg0Nyk7Cgl2YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTsKCglfX3dlYnBhY2tf
cmVxdWlyZV9fKDc4KSgna2V5cycsIGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIGZ1bmN0aW9uIGtl
eXMoaXQpIHsKCSAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTsKCSAgfTsKCX0pOwoKCi8q
KiovIH0pLAovKiA3OCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBh
Y2tfcmVxdWlyZV9fKSB7CgoJLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFj
Y2VwdCBwcmltaXRpdmVzCgl2YXIgJGV4cG9ydCA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwoJ
dmFyIGNvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKCXZhciBmYWlscyA9IF9fd2VicGFj
a19yZXF1aXJlX18oMjEpOwoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7
CgkgIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTsKCSAg
dmFyIGV4cCA9IHt9OwoJICBleHBbS0VZXSA9IGV4ZWMoZm4pOwoJICAkZXhwb3J0KCRleHBvcnQu
UyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0Jywg
ZXhwKTsKCX07CgoKLyoqKi8gfSksCi8qIDc5ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkidXNlIHN0cmljdCI7CgoJZXhwb3J0cy5f
X2VzTW9kdWxlID0gdHJ1ZTsKCgl2YXIgX2l0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4
MCk7CgoJdmFyIF9pdGVyYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pdGVyYXRvcik7
CgoJdmFyIF9zeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKTsKCgl2YXIgX3N5bWJvbDIg
PSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zeW1ib2wpOwoKCXZhciBfdHlwZW9mID0gdHlwZW9m
IF9zeW1ib2wyLmRlZmF1bHQgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIF9pdGVyYXRvcjIuZGVm
YXVsdCA9PT0gInN5bWJvbCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9
IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0
ID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAm
JiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Yg
b2JqOyB9OwoKCWZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBv
YmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CgoJZXhwb3J0
cy5kZWZhdWx0ID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09ICJmdW5jdGlvbiIgJiYgX3R5
cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSAic3ltYm9sIiA/IGZ1bmN0aW9uIChvYmopIHsK
CSAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJ1bmRlZmluZWQiID8gInVuZGVmaW5lZCIgOiBfdHlw
ZW9mKG9iaik7Cgl9IDogZnVuY3Rpb24gKG9iaikgewoJICByZXR1cm4gb2JqICYmIHR5cGVvZiBf
c3ltYm9sMi5kZWZhdWx0ID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5
bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gInN5
bWJvbCIgOiB0eXBlb2Ygb2JqID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVv
ZihvYmopOwoJfTsKCi8qKiovIH0pLAovKiA4MCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBl
eHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSB7ICJkZWZh
dWx0IjogX193ZWJwYWNrX3JlcXVpcmVfXyg4MSksIF9fZXNNb2R1bGU6IHRydWUgfTsKCi8qKiov
IH0pLAovKiA4MSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CgoJX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKCV9fd2VicGFja19yZXF1aXJl
X18oNDgpOwoJbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKS5mKCdpdGVy
YXRvcicpOwoKCi8qKiovIH0pLAovKiA4MiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJZXhwb3J0cy5mID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg0NSk7CgoKLyoqKi8gfSksCi8qIDgzICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgltb2R1bGUuZXhwb3J0cyA9IHsgImRlZmF1
bHQiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KSwgX19lc01vZHVsZTogdHJ1ZSB9OwoKLyoqKi8g
fSksCi8qIDg0ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKCglfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTsKCV9fd2VicGFja19yZXF1aXJl
X18oMyk7CglfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTsKCV9fd2VicGFja19yZXF1aXJlX18oOTYp
OwoJbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5TeW1ib2w7CgoKLyoq
Ki8gfSksCi8qIDg1ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFj
a19yZXF1aXJlX18pIHsKCgkndXNlIHN0cmljdCc7CgkvLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBz
aGltCgl2YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7Cgl2YXIgaGFzID0gX193
ZWJwYWNrX3JlcXVpcmVfXygyNSk7Cgl2YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDIwKTsKCXZhciAkZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7Cgl2YXIgcmVk
ZWZpbmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTsKCXZhciBNRVRBID0gX193ZWJwYWNrX3Jl
cXVpcmVfXyg4NikuS0VZOwoJdmFyICRmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpOwoJ
dmFyIHNoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oNDApOwoJdmFyIHNldFRvU3RyaW5nVGFn
ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7Cgl2YXIgdWlkID0gX193ZWJwYWNrX3JlcXVpcmVf
Xyg0MSk7Cgl2YXIgd2tzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7Cgl2YXIgd2tzRXh0ID0g
X193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7Cgl2YXIgd2tzRGVmaW5lID0gX193ZWJwYWNrX3JlcXVp
cmVfXyg4Nyk7Cgl2YXIgZW51bUtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KTsKCXZhciBp
c0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7Cgl2YXIgYW5PYmplY3QgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDE3KTsKCXZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgp
OwoJdmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7Cgl2YXIgdG9JT2JqZWN0
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7Cgl2YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDIzKTsKCXZhciBjcmVhdGVEZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7
Cgl2YXIgX2NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpOwoJdmFyIGdPUE5FeHQgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDkyKTsKCXZhciAkR09QRCA9IF9fd2VicGFja19yZXF1aXJlX18o
OTQpOwoJdmFyICRHT1BTID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OSk7Cgl2YXIgJERQID0gX193
ZWJwYWNrX3JlcXVpcmVfXygxNik7Cgl2YXIgJGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMx
KTsKCXZhciBnT1BEID0gJEdPUEQuZjsKCXZhciBkUCA9ICREUC5mOwoJdmFyIGdPUE4gPSBnT1BO
RXh0LmY7Cgl2YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7Cgl2YXIgJEpTT04gPSBnbG9iYWwu
SlNPTjsKCXZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5OwoJdmFyIFBS
T1RPVFlQRSA9ICdwcm90b3R5cGUnOwoJdmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpOwoJdmFy
IFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTsKCXZhciBpc0VudW0gPSB7fS5wcm9w
ZXJ0eUlzRW51bWVyYWJsZTsKCXZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJl
Z2lzdHJ5Jyk7Cgl2YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpOwoJdmFyIE9QU3lt
Ym9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpOwoJdmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BS
T1RPVFlQRV07Cgl2YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicg
JiYgISEkR09QUy5mOwoJdmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDsKCS8vIERvbid0IHVz
ZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUt
anMvaXNzdWVzLzE3MwoJdmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQ
RV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7CgoJLy8gZmFsbGJhY2sgZm9yIG9s
ZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9
Njg3Cgl2YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAo
KSB7CgkgIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHsKCSAgICBnZXQ6IGZ1bmN0aW9uICgp
IHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9CgkgIH0pKS5hICE9IDc7
Cgl9KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7CgkgIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9i
amVjdFByb3RvLCBrZXkpOwoJICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5
XTsKCSAgZFAoaXQsIGtleSwgRCk7CgkgIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFBy
b3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpOwoJfSA6IGRQOwoKCXZhciB3cmFw
ID0gZnVuY3Rpb24gKHRhZykgewoJICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0
ZSgkU3ltYm9sW1BST1RPVFlQRV0pOwoJICBzeW0uX2sgPSB0YWc7CgkgIHJldHVybiBzeW07Cgl9
OwoKCXZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3Ig
PT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHsKCSAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3lt
Ym9sJzsKCX0gOiBmdW5jdGlvbiAoaXQpIHsKCSAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJv
bDsKCX07CgoJdmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0
LCBrZXksIEQpIHsKCSAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9Q
U3ltYm9scywga2V5LCBEKTsKCSAgYW5PYmplY3QoaXQpOwoJICBrZXkgPSB0b1ByaW1pdGl2ZShr
ZXksIHRydWUpOwoJICBhbk9iamVjdChEKTsKCSAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7
CgkgICAgaWYgKCFELmVudW1lcmFibGUpIHsKCSAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBk
UChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7CgkgICAgICBpdFtISURERU5dW2tleV0g
PSB0cnVlOwoJICAgIH0gZWxzZSB7CgkgICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJ
RERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7CgkgICAgICBEID0gX2NyZWF0ZShE
LCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pOwoJICAgIH0gcmV0dXJuIHNl
dFN5bWJvbERlc2MoaXQsIGtleSwgRCk7CgkgIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpOwoJfTsK
CXZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFAp
IHsKCSAgYW5PYmplY3QoaXQpOwoJICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3Qo
UCkpOwoJICB2YXIgaSA9IDA7CgkgIHZhciBsID0ga2V5cy5sZW5ndGg7CgkgIHZhciBrZXk7Cgkg
IHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5
XSk7CgkgIHJldHVybiBpdDsKCX07Cgl2YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwg
UCkgewoJICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJv
cGVydGllcyhfY3JlYXRlKGl0KSwgUCk7Cgl9OwoJdmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9
IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkgewoJICB2YXIgRSA9IGlzRW51bS5j
YWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpOwoJICBpZiAodGhpcyA9PT0g
T2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtl
eSkpIHJldHVybiBmYWxzZTsKCSAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMo
QWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5
XSA/IEUgOiB0cnVlOwoJfTsKCXZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rp
b24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHsKCSAgaXQgPSB0b0lPYmplY3Qo
aXQpOwoJICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpOwoJICBpZiAoaXQgPT09IE9iamVj
dFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSBy
ZXR1cm47CgkgIHZhciBEID0gZ09QRChpdCwga2V5KTsKCSAgaWYgKEQgJiYgaGFzKEFsbFN5bWJv
bHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVt
ZXJhYmxlID0gdHJ1ZTsKCSAgcmV0dXJuIEQ7Cgl9OwoJdmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVz
ID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkgewoJICB2YXIgbmFtZXMgPSBnT1BO
KHRvSU9iamVjdChpdCkpOwoJICB2YXIgcmVzdWx0ID0gW107CgkgIHZhciBpID0gMDsKCSAgdmFy
IGtleTsKCSAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHsKCSAgICBpZiAoIWhhcyhBbGxTeW1i
b2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSBy
ZXN1bHQucHVzaChrZXkpOwoJICB9IHJldHVybiByZXN1bHQ7Cgl9OwoJdmFyICRnZXRPd25Qcm9w
ZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHsKCSAgdmFy
IElTX09QID0gaXQgPT09IE9iamVjdFByb3RvOwoJICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8g
T1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7CgkgIHZhciByZXN1bHQgPSBbXTsKCSAgdmFyIGkg
PSAwOwoJICB2YXIga2V5OwoJICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgewoJICAgIGlmICho
YXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFBy
b3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7CgkgIH0gcmV0
dXJuIHJlc3VsdDsKCX07CgoJLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pCglpZiAo
IVVTRV9OQVRJVkUpIHsKCSAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHsKCSAgICBpZiAo
dGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBh
IGNvbnN0cnVjdG9yIScpOwoJICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAg
PyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOwoJICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZh
bHVlKSB7CgkgICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJv
bHMsIHZhbHVlKTsKCSAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURE
RU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlOwoJICAgICAgc2V0U3ltYm9sRGVz
Yyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTsKCSAgICB9OwoJICAgIGlmIChERVND
UklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25m
aWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTsKCSAgICByZXR1cm4gd3JhcCh0YWcpOwoJICB9
OwoJICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRv
U3RyaW5nKCkgewoJICAgIHJldHVybiB0aGlzLl9rOwoJICB9KTsKCgkgICRHT1BELmYgPSAkZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yOwoJICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTsKCSAgX193
ZWJwYWNrX3JlcXVpcmVfXyg5MykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVz
OwoJICBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlOwoJ
ICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9sczsKCgkgIGlmIChERVNDUklQVE9SUyAm
JiAhX193ZWJwYWNrX3JlcXVpcmVfXyg5KSkgewoJICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAn
cHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpOwoJICB9
CgoJICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7CgkgICAgcmV0dXJuIHdyYXAod2tzKG5h
bWUpKTsKCSAgfTsKCX0KCgkkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQu
RiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTsKCglmb3IgKHZhciBlczZTeW1i
b2xzID0gKAoJICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTku
NC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIu
MTMsIDE5LjQuMi4xNAoJICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9y
LG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdU
YWcsdW5zY29wYWJsZXMnCgkpLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+
IGo7KXdrcyhlczZTeW1ib2xzW2orK10pOwoKCWZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAk
a2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tz
RGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7CgoJJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhw
b3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHsKCSAgLy8gMTkuNC4yLjEgU3ltYm9sLmZv
cihrZXkpCgkgICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7CgkgICAgcmV0dXJuIGhhcyhTeW1ib2xS
ZWdpc3RyeSwga2V5ICs9ICcnKQoJICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldCgkgICAgICA6
IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7CgkgIH0sCgkgIC8vIDE5LjQuMi41
IFN5bWJvbC5rZXlGb3Ioc3ltKQoJICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHsKCSAg
ICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5
bWJvbCEnKTsKCSAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xS
ZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7CgkgIH0sCgkgIHVzZVNldHRlcjogZnVu
Y3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LAoJICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsg
c2V0dGVyID0gZmFsc2U7IH0KCX0pOwoKCSRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICog
IVVTRV9OQVRJVkUsICdPYmplY3QnLCB7CgkgIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBb
LCBQcm9wZXJ0aWVzXSkKCSAgY3JlYXRlOiAkY3JlYXRlLAoJICAvLyAxOS4xLjIuNCBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykKCSAgZGVmaW5lUHJvcGVydHk6ICRkZWZp
bmVQcm9wZXJ0eSwKCSAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJv
cGVydGllcykKCSAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsCgkgIC8vIDE5
LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkKCSAgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLAoJICAvLyAxOS4xLjIu
NyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKQoJICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAk
Z2V0T3duUHJvcGVydHlOYW1lcywKCSAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5
U3ltYm9scyhPKQoJICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJv
bHMKCX0pOwoKCS8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJv
bHNgIGZhaWxzIG9uIHByaW1pdGl2ZXMKCS8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92
OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDMKCXZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxz
KGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7CgoJJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhw
b3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0JywgewoJICBnZXRPd25Qcm9wZXJ0
eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkgewoJICAgIHJldHVy
biAkR09QUy5mKHRvT2JqZWN0KGl0KSk7CgkgIH0KCX0pOwoKCS8vIDI0LjMuMiBKU09OLnN0cmlu
Z2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKQoJJEpTT04gJiYgJGV4cG9ydCgkZXhw
b3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHsK
CSAgdmFyIFMgPSAkU3ltYm9sKCk7CgkgIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVl
cyB0byBKU09OIGFzIHt9CgkgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpT
T04gYXMgbnVsbAoJICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9scwoJICByZXR1cm4gX3N0
cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScg
fHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7Cgl9KSksICdKU09OJywgewoJICBzdHJp
bmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkgewoJICAgIHZhciBhcmdzID0gW2l0XTsKCSAg
ICB2YXIgaSA9IDE7CgkgICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7CgkgICAgd2hpbGUgKGFy
Z3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pOwoJICAgICRyZXBs
YWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTsKCSAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAm
JiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJu
cyBzdHJpbmcgb24gdW5kZWZpbmVkCgkgICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFj
ZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewoJICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIg
PT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTsK
CSAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7CgkgICAgfTsKCSAgICBh
cmdzWzFdID0gcmVwbGFjZXI7CgkgICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFy
Z3MpOwoJICB9Cgl9KTsKCgkvLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRp
dmVdKGhpbnQpCgkkU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCBfX3dlYnBhY2tf
cmVxdWlyZV9fKDE1KSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQ
Uk9UT1RZUEVdLnZhbHVlT2YpOwoJLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3Ry
aW5nVGFnXQoJc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpOwoJLy8gMjAuMi4xLjkg
TWF0aFtAQHRvU3RyaW5nVGFnXQoJc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTsK
CS8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddCglzZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNP
TiwgJ0pTT04nLCB0cnVlKTsKCgovKioqLyB9KSwKLyogODYgKi8KLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciBNRVRBID0gX193ZWJw
YWNrX3JlcXVpcmVfXyg0MSkoJ21ldGEnKTsKCXZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1
aXJlX18oMTgpOwoJdmFyIGhhcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpOwoJdmFyIHNldERl
c2MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mOwoJdmFyIGlkID0gMDsKCXZhciBpc0V4dGVu
c2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIHRy
dWU7Cgl9OwoJdmFyIEZSRUVaRSA9ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKShmdW5jdGlvbiAo
KSB7CgkgIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7
Cgl9KTsKCXZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7CgkgIHNldERlc2MoaXQsIE1FVEEs
IHsgdmFsdWU6IHsKCSAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSUQKCSAgICB3OiB7fSAg
ICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEcwoJICB9IH0pOwoJfTsKCXZhciBmYXN0S2V5
ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHsKCSAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHBy
ZWZpeAoJICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/
IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDsKCSAgaWYgKCFo
YXMoaXQsIE1FVEEpKSB7CgkgICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZy
b3plbiBvYmplY3QKCSAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7CgkgICAg
Ly8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGEKCSAgICBpZiAoIWNyZWF0ZSkgcmV0dXJu
ICdFJzsKCSAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YQoJICAgIHNldE1ldGEoaXQpOwoJICAv
LyByZXR1cm4gb2JqZWN0IElECgkgIH0gcmV0dXJuIGl0W01FVEFdLmk7Cgl9OwoJdmFyIGdldFdl
YWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkgewoJICBpZiAoIWhhcyhpdCwgTUVUQSkpIHsKCSAg
ICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdAoJICAgIGlm
ICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7CgkgICAgLy8gbm90IG5lY2Vzc2FyeSB0
byBhZGQgbWV0YWRhdGEKCSAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlOwoJICAgIC8vIGFk
ZCBtaXNzaW5nIG1ldGFkYXRhCgkgICAgc2V0TWV0YShpdCk7CgkgIC8vIHJldHVybiBoYXNoIHdl
YWsgY29sbGVjdGlvbnMgSURzCgkgIH0gcmV0dXJuIGl0W01FVEFdLnc7Cgl9OwoJLy8gYWRkIG1l
dGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nCgl2YXIgb25GcmVlemUgPSBm
dW5jdGlvbiAoaXQpIHsKCSAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxl
KGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7CgkgIHJldHVybiBpdDsKCX07Cgl2
YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0gewoJICBLRVk6IE1FVEEsCgkgIE5FRUQ6IGZhbHNl
LAoJICBmYXN0S2V5OiBmYXN0S2V5LAoJICBnZXRXZWFrOiBnZXRXZWFrLAoJICBvbkZyZWV6ZTog
b25GcmVlemUKCX07CgoKLyoqKi8gfSksCi8qIDg3ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgl2YXIgZ2xvYmFsID0gX193ZWJwYWNr
X3JlcXVpcmVfXygxMSk7Cgl2YXIgY29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpOwoJdmFy
IExJQlJBUlkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOwoJdmFyIHdrc0V4dCA9IF9fd2VicGFj
a19yZXF1aXJlX18oODIpOwoJdmFyIGRlZmluZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxNikuZjsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHsKCSAgdmFyICRTeW1i
b2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwu
U3ltYm9sIHx8IHt9KTsKCSAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4g
JFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5m
KG5hbWUpIH0pOwoJfTsKCgovKioqLyB9KSwKLyogODggKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIGFsbCBlbnVtZXJhYmxlIG9i
amVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzCgl2YXIgZ2V0S2V5cyA9IF9fd2VicGFja19yZXF1
aXJlX18oMzEpOwoJdmFyIGdPUFMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KTsKCXZhciBwSUUg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKTsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0
KSB7CgkgIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTsKCSAgdmFyIGdldFN5bWJvbHMgPSBnT1BT
LmY7CgkgIGlmIChnZXRTeW1ib2xzKSB7CgkgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0
KTsKCSAgICB2YXIgaXNFbnVtID0gcElFLmY7CgkgICAgdmFyIGkgPSAwOwoJICAgIHZhciBrZXk7
CgkgICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkg
PSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpOwoJICB9IHJldHVybiByZXN1bHQ7Cgl9
OwoKCi8qKiovIH0pLAovKiA4OSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7
CgoJZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczsKCgovKioqLyB9KSwK
LyogOTAgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCWV4cG9ydHMuZiA9
IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlOwoKCi8qKiovIH0pLAovKiA5MSAqLwovKioqLyAoZnVu
Y3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLy8gNy4yLjIg
SXNBcnJheShhcmd1bWVudCkKCXZhciBjb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTsKCW1v
ZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykgewoJ
ICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5JzsKCX07CgoKLyoqKi8gfSksCi8qIDkyICovCi8q
KiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkv
LyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRo
IGlmcmFtZSBhbmQgd2luZG93Cgl2YXIgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygz
Myk7Cgl2YXIgZ09QTiA9IF9fd2VicGFja19yZXF1aXJlX18oOTMpLmY7Cgl2YXIgdG9TdHJpbmcg
PSB7fS50b1N0cmluZzsKCgl2YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmpl
Y3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcwoJICA/IE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTsKCgl2YXIgZ2V0V2luZG93TmFtZXMgPSBm
dW5jdGlvbiAoaXQpIHsKCSAgdHJ5IHsKCSAgICByZXR1cm4gZ09QTihpdCk7CgkgIH0gY2F0Y2gg
KGUpIHsKCSAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTsKCSAgfQoJfTsKCgltb2R1bGUu
ZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkgewoJICByZXR1cm4g
d2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBn
ZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpOwoJfTsKCgovKioqLyB9KSwK
LyogOTMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykgewoKCS8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFt
ZXMoTykKCXZhciAka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpOwoJdmFyIGhpZGRlbktl
eXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUn
KTsKCglleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHsKCSAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpOwoJ
fTsKCgovKioqLyB9KSwKLyogOTQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciBwSUUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkw
KTsKCXZhciBjcmVhdGVEZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7Cgl2YXIgdG9JT2Jq
ZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7Cgl2YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDIzKTsKCXZhciBoYXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTsKCXZh
ciBJRThfRE9NX0RFRklORSA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpOwoJdmFyIGdPUEQgPSBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwoKCWV4cG9ydHMuZiA9IF9fd2VicGFja19y
ZXF1aXJlX18oMjApID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihP
LCBQKSB7CgkgIE8gPSB0b0lPYmplY3QoTyk7CgkgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTsK
CSAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkgewoJICAgIHJldHVybiBnT1BEKE8sIFApOwoJICB9
IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH0KCSAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0
ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pOwoJfTsKCgovKioqLyB9KSwKLyogOTUgKi8K
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoK
CV9fd2VicGFja19yZXF1aXJlX18oODcpKCdhc3luY0l0ZXJhdG9yJyk7CgoKLyoqKi8gfSksCi8q
IDk2ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJl
X18pIHsKCglfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KSgnb2JzZXJ2YWJsZScpOwoKCi8qKiovIH0p
LAovKiA5NyAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVx
dWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSB7ICJkZWZhdWx0IjogX193ZWJwYWNrX3JlcXVp
cmVfXyg5OCksIF9fZXNNb2R1bGU6IHRydWUgfTsKCi8qKiovIH0pLAovKiA5OCAqLwovKioqLyAo
ZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJX193ZWJw
YWNrX3JlcXVpcmVfXyg5OSk7Cgltb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18o
MTIpLk9iamVjdC5hc3NpZ247CgoKLyoqKi8gfSksCi8qIDk5ICovCi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvLyAxOS4xLjMuMSBPYmpl
Y3QuYXNzaWduKHRhcmdldCwgc291cmNlKQoJdmFyICRleHBvcnQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDEwKTsKCgkkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNz
aWduOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMCkgfSk7CgoKLyoqKi8gfSksCi8qIDEwMCAqLwov
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJ
J3VzZSBzdHJpY3QnOwoJLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwg
Li4uKQoJdmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7Cgl2YXIgZ2V0
S2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpOwoJdmFyIGdPUFMgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDg5KTsKCXZhciBwSUUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKTsKCXZhciB0b09i
amVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpOwoJdmFyIElPYmplY3QgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDM0KTsKCXZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjsKCgkvLyBzaG91bGQg
d29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkg
b3JkZXIgKFY4IGJ1ZykKCW1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgX193ZWJwYWNrX3Jl
cXVpcmVfXygyMSkoZnVuY3Rpb24gKCkgewoJICB2YXIgQSA9IHt9OwoJICB2YXIgQiA9IHt9OwoJ
ICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYKCSAgdmFyIFMgPSBTeW1ib2wo
KTsKCSAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnOwoJICBBW1NdID0gNzsKCSAgSy5z
cGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7CgkgIHJldHVybiAk
YXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2lu
KCcnKSAhPSBLOwoJfSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNs
aW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycwoJICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdl
dCk7CgkgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDsKCSAgdmFyIGluZGV4ID0gMTsKCSAg
dmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7CgkgIHZhciBpc0VudW0gPSBwSUUuZjsKCSAgd2hpbGUg
KGFMZW4gPiBpbmRleCkgewoJICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10p
OwoJICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJv
bHMoUykpIDogZ2V0S2V5cyhTKTsKCSAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7CgkgICAg
dmFyIGogPSAwOwoJICAgIHZhciBrZXk7CgkgICAgd2hpbGUgKGxlbmd0aCA+IGopIHsKCSAgICAg
IGtleSA9IGtleXNbaisrXTsKCSAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwo
Uywga2V5KSkgVFtrZXldID0gU1trZXldOwoJICAgIH0KCSAgfSByZXR1cm4gVDsKCX0gOiAkYXNz
aWduOwoKCi8qKiovIH0pLAovKiAxMDEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0
cykgewoKCSJ1c2Ugc3RyaWN0IjsKCglleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOwoKCWV4cG9y
dHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsKCSAgaWYgKCEo
aW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsKCSAgICB0aHJvdyBuZXcgVHlwZUVy
cm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKCSAgfQoJfTsKCi8qKiov
IH0pLAovKiAxMDIgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykgewoKCSJ1c2Ugc3RyaWN0IjsKCglleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVl
OwoKCXZhciBfZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7CgoJdmFy
IF9kZWZpbmVQcm9wZXJ0eTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWZpbmVQcm9wZXJ0
eSk7CgoJZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAm
JiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCglleHBvcnRzLmRl
ZmF1bHQgPSBmdW5jdGlvbiAoKSB7CgkgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0
LCBwcm9wcykgewoJICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsK
CSAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CgkgICAgICBkZXNjcmlwdG9yLmVudW1l
cmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CgkgICAgICBkZXNjcmlwdG9y
LmNvbmZpZ3VyYWJsZSA9IHRydWU7CgkgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBk
ZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKCSAgICAgICgwLCBfZGVmaW5lUHJvcGVydHkyLmRl
ZmF1bHQpKHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOwoJICAgIH0KCSAgfQoK
CSAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMp
IHsKCSAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90
b3R5cGUsIHByb3RvUHJvcHMpOwoJICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGll
cyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOwoJICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKCSAg
fTsKCX0oKTsKCi8qKiovIH0pLAovKiAxMDMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCW1vZHVsZS5leHBvcnRzID0geyAiZGVmYXVs
dCI6IF9fd2VicGFja19yZXF1aXJlX18oMTA0KSwgX19lc01vZHVsZTogdHJ1ZSB9OwoKLyoqKi8g
fSksCi8qIDEwNCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CgoJX193ZWJwYWNrX3JlcXVpcmVfXygxMDUpOwoJdmFyICRPYmplY3QgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5PYmplY3Q7Cgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
IGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHsKCSAgcmV0dXJuICRPYmplY3QuZGVmaW5l
UHJvcGVydHkoaXQsIGtleSwgZGVzYyk7Cgl9OwoKCi8qKiovIH0pLAovKiAxMDUgKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCXZhciAk
ZXhwb3J0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CgkvLyAxOS4xLjIuNCAvIDE1LjIuMy42
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKQoJJGV4cG9ydCgkZXhwb3J0
LlMgKyAkZXhwb3J0LkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygyMCksICdPYmplY3QnLCB7IGRl
ZmluZVByb3BlcnR5OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KS5mIH0pOwoKCi8qKiovIH0pLAov
KiAxMDYgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykgewoKCS8qKgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2Ug
dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3Ug
bWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVk
IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICog
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBCQVNJUywKCSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5E
LCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUg
c3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlv
bnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgc3RyaW5naWZ5
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpOwoKCXZhciBzdGRsaWIgPSB7CgkgIHN0cmluZ2lm
eTogZnVuY3Rpb24oZGF0YSkgewoJICAgIHJldHVybiBzdHJpbmdpZnkoZGF0YSwgewoJICAgICAg
c3BhY2U6ICcgICcsCgkgICAgICBjbXA6IGZ1bmN0aW9uKGEsIGIpIHsKCSAgICAgICAgcmV0dXJu
IGEua2V5IDwgYi5rZXkgPyAtMSA6IDE7CgkgICAgICB9LAoJICAgIH0pOwoJICB9LAoJICByZW1h
cDogewoJICAgICdbXT0+e30nOiBmdW5jdGlvbihhcnIpIHsKCSAgICAgIHZhciBtYXAgPSB7fTsK
CSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgIG1h
cFthcnJbaV1dID0gMTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBtYXA7CgkgICAgfSwKCSAgICAv
LyB7IGE6IHsgYiB9LCBjOiB7IGQgfSwgZTogeyBiIH0gfQoJICAgIC8vID0+CgkgICAgLy8geyBi
OiBbYSwgZV0sIGQ6IFtjXSB9CgkgICAgJ2E6Yj0+YjpbYV0nOiBmdW5jdGlvbihtYXApIHsKCSAg
ICAgIHZhciBuZXdNYXAgPSB7fTsKCSAgICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3Bl
cnR5TmFtZXMobWFwKTsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkr
KykgewoJICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKCSAgICAgICAgdmFyIGFyciA9IG5ld01h
cFttYXBba2V5XV0gPSBuZXdNYXBbbWFwW2tleV1dIHx8IFtdOwoJICAgICAgICBhcnIucHVzaChr
ZXkpOwoJICAgICAgfQoJICAgICAgcmV0dXJuIG5ld01hcDsKCSAgICB9LAoJICAgIC8vIHsgYTog
eyBiOiBjIH0sIGQ6IHsgYjogYyB9LCBlOiB7IGI6IGYgfSB9CgkgICAgLy8gPT4KCSAgICAvLyB7
IGM6IHsgYjogW2EsIGRdIH0sIGY6IHsgYjogW2VdIH0gfQoJICAgICdhOmI6Yz0+YzpiOlthXSc6
IGZ1bmN0aW9uKG1hcCkgewoJICAgICAgdmFyIG5ld01hcCA9IHt9OwoJICAgICAgdmFyIGtleXMx
ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwKTsKCSAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwga2V5czEubGVuZ3RoOyBpKyspIHsKCSAgICAgICAgdmFyIGtleTEgPSBrZXlzMVtpXTsK
CSAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwW2tleTFd
KTsKCSAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzMi5sZW5ndGg7IGorKykgewoJICAg
ICAgICAgIHZhciBrZXkyID0ga2V5czJbal07CgkgICAgICAgICAgdmFyIGlubmVyMSA9IG5ld01h
cFttYXBba2V5MV1ba2V5Ml1dID0gbmV3TWFwW21hcFtrZXkxXVtrZXkyXV0gfHwge307CgkgICAg
ICAgICAgdmFyIGlubmVyMiA9IGlubmVyMVtrZXkyXSA9IGlubmVyMVtrZXkyXSB8fCBbXTsKCSAg
ICAgICAgICBpbm5lcjIucHVzaChrZXkxKTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0
dXJuIG5ld01hcDsKCSAgICB9LAoJICAgIC8vIHsgYTogeyBiOiBjIH0sIGQ6IHsgYjogYyB9LCBl
OiB7IGY6IGcgfSB9CgkgICAgLy8gPT4KCSAgICAvLyB7IGI6IFsgW2EsIGNdLCBbZCwgY11dLCBm
OiBbIFtlLCBnXSBdIH0KCSAgICAnYTpiOmM9PmI6WyhhLGMpXSc6IGZ1bmN0aW9uKG1hcCkgewoJ
ICAgICAgdmFyIG5ld01hcCA9IHt9OwoJICAgICAgdmFyIGtleXMxID0gT2JqZWN0LmdldE93blBy
b3BlcnR5TmFtZXMobWFwKTsKCSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5czEubGVuZ3Ro
OyBpKyspIHsKCSAgICAgICAgdmFyIGtleTEgPSBrZXlzMVtpXTsKCSAgICAgICAgdmFyIGtleXMy
ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobWFwW2tleTFdKTsKCSAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCBrZXlzMi5sZW5ndGg7IGorKykgewoJICAgICAgICAgIHZhciBrZXkyID0g
a2V5czJbal07CgkgICAgICAgICAgaWYgKCFuZXdNYXBba2V5Ml0pIG5ld01hcFtrZXkyXSA9IFtd
OwoJICAgICAgICAgIG5ld01hcFtrZXkyXS5wdXNoKFtrZXkxLCBtYXBba2V5MV1ba2V5Ml1dKTsK
CSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIG5ld01hcDsKCSAgICB9LAoJICB9LAoJ
ICBtYXBNYXA6IGZ1bmN0aW9uIG1hcE1hcChzcmNNYXAsIG1hcEZuKSB7CgkgICAgdmFyIGRzdE1h
cCA9IHt9OwoJICAgIHZhciBrZXlzOwoJICAgIHZhciBpOwoKCSAgICBrZXlzID0gT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMoc3JjTWFwKTsKCSAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5n
dGg7IGkrKykgewoJICAgICAgZHN0TWFwW2tleXNbaV1dID0gbWFwRm4oc3JjTWFwW2tleXNbaV1d
KTsKCSAgICB9CgkgICAgcmV0dXJuIGRzdE1hcDsKCSAgfSwKCSAgbXVsdGlsaW5lOiBmdW5jdGlv
biBtdWx0aWxpbmUoZikgewoJICAgIHZhciBtYXRjaCA9IGYudG9TdHJpbmcoKS5tYXRjaCgvXC9c
KigoLnxcbikqPylcKlwvLyk7CgkgICAgaWYgKCFtYXRjaCkgcmV0dXJuICcnOwoJICAgIC8vIFdp
dGhpbiBtdWx0aWxpbmUgY29tbWVudCwgbWFwICIqXC8iIHRvICIqLyIuCgkgICAgcmV0dXJuIG1h
dGNoWzFdLnJlcGxhY2UoL1wqXFxcLy9nLCAnKi8nKTsKCSAgfSwKCSAgdG9TdHJpbmc6IGZ1bmN0
aW9uIHRvU3RyaW5nKHZhbHVlKSB7CgkgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gbnVs
bDsKCSAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDsKCSAgICBp
ZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuICciJyArIHZhbHVlICsgJyInOwoJ
ICAgIC8vIFRPRE86IERvIGFsbCByZWxldmFudCBwbGF0Zm9ybXMgc3VwcG9ydCBBcnJheS5pc0Fy
cmF5PwoJICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuICdbJyArIHZhbHVlLm1h
cChmdW5jdGlvbihpdGVtKSB7CgkgICAgICByZXR1cm4gc3RkbGliLnRvU3RyaW5nKGl0ZW0pOwoJ
ICAgIH0pLmpvaW4oJywgJykgKyAnXSc7CgkgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nLmFwcGx5
KHZhbHVlLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRsaWIuYXJnc1RvQXJy
YXkoYXJndW1lbnRzKS5zbGljZSgxKSk7CgkgIH0sCgkgIGdldEFyZ05hbWVzOiBmdW5jdGlvbiBn
ZXRBcmdOYW1lcyhmKSB7CgkgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5j
YWxsKGYpLnJlcGxhY2UoCgkgICAgICAgIC9cL1wvLip8XC9cKigufFxuKSo/XCpcLy9nLAoJICAg
ICAgJycpLm1hdGNoKC9cKCgoW14pXXxcbikqKVwpLylbMV0ucmVwbGFjZSgKCSAgICAgICAgICAv
XHMrL2csICcnKS5zcGxpdCgnLCcpLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7CgkgICAgICAgICAg
ICByZXR1cm4gQm9vbGVhbihuYW1lKTsKCSAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOwoJICB9LAoJICAvLyBGZXRjaCBVUkxzLiBSZXR1cm4gYSBm
dXR1cmUgdGhhdCByZXNvbHZlcyBhZnRlciBhbGwgVVJMcyBhcmUgZmV0Y2hlZC4KCSAgeGhyOiBm
dW5jdGlvbiB4aHIodXJsc18sIG9wdHMpIHsKCSAgICAvLyBUT0RPOiBCcmluZyBiYWNrIE5vZGVK
Uy1mcmllbmRseSB2ZXJzaW9uIG9mIHRoaXMgQVBJLgoJICAgIGZ1bmN0aW9uIHJlc29sdmVyKHVy
bCwgcmVzb2x2ZSwgcmVqZWN0KSB7CgkgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7CgkgICAgICBpZiAob3B0cy5yZXNwb25zZVR5cGUpCgkgICAgICB4aHIucmVzcG9uc2VUeXBl
ID0gb3B0cy5yZXNwb25zZVR5cGU7CgkgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcs
IGZ1bmN0aW9uKCkgewoJICAgICAgICByZXNvbHZlKHhoci5yZXNwb25zZSk7CgkgICAgICB9KTsK
CSAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlamVjdCk7CgkgICAgICB4aHIu
b3BlbihvcHRzLm1ldGhvZCB8fCAnR0VUJywgdXJsKTsKCSAgICAgIHhoci5zZW5kKG9wdHMuZGF0
YSk7CgkgICAgfQoKCSAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh1cmxzXykgPyBQcm9taXNlLmFs
bCh1cmxzXy5tYXAoZnVuY3Rpb24odXJsKSB7CgkgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVz
b2x2ZXIuYmluZCh0aGlzLCB1cmwpKTsKCSAgICB9KSkgOiBuZXcgUHJvbWlzZShyZXNvbHZlci5i
aW5kKHRoaXMsIHVybHNfKSk7CgkgIH0sCgkgIG1lbW86IGZ1bmN0aW9uIG1lbW8obywga2V5LCBm
KSB7CgkgICAgdmFyIHZhbHVlOwoJICAgIHZhciBjb21wdXRlZDsKCgkgICAgY29tcHV0ZWQgPSBm
YWxzZTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywga2V5LCB7CgkgICAgICBnZXQ6IGZ1
bmN0aW9uKCkgewoJICAgICAgICBpZiAoY29tcHV0ZWQpIHJldHVybiB2YWx1ZTsKCSAgICAgICAg
dmFsdWUgPSBmKCk7CgkgICAgICAgIGNvbXB1dGVkID0gdHJ1ZTsKCSAgICAgICAgcmV0dXJuIHZh
bHVlOwoJICAgICAgfSwKCSAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKCSAgICB9KTsKCSAgfSwK
CX07CgoJbW9kdWxlLmV4cG9ydHMgPSBzdGRsaWI7CgoKLyoqKi8gfSksCi8qIDEwNyAqLwovKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFy
IGpzb24gPSB0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgPyBKU09OIDogX193ZWJwYWNrX3Jl
cXVpcmVfXygxMDgpOwoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaiwgb3B0cykgewoJ
ICAgIGlmICghb3B0cykgb3B0cyA9IHt9OwoJICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0
aW9uJykgb3B0cyA9IHsgY21wOiBvcHRzIH07CgkgICAgdmFyIHNwYWNlID0gb3B0cy5zcGFjZSB8
fCAnJzsKCSAgICBpZiAodHlwZW9mIHNwYWNlID09PSAnbnVtYmVyJykgc3BhY2UgPSBBcnJheShz
cGFjZSsxKS5qb2luKCcgJyk7CgkgICAgdmFyIGN5Y2xlcyA9ICh0eXBlb2Ygb3B0cy5jeWNsZXMg
PT09ICdib29sZWFuJykgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlOwoJICAgIHZhciByZXBsYWNlciA9
IG9wdHMucmVwbGFjZXIgfHwgZnVuY3Rpb24oa2V5LCB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07
CgoJICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHsKCSAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uIChub2RlKSB7CgkgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIp
IHsKCSAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9
OwoJICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07
CgkgICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7CgkgICAgICAgICAgICB9OwoJ
ICAgICAgICB9OwoJICAgIH0pKG9wdHMuY21wKTsKCgkgICAgdmFyIHNlZW4gPSBbXTsKCSAgICBy
ZXR1cm4gKGZ1bmN0aW9uIHN0cmluZ2lmeSAocGFyZW50LCBrZXksIG5vZGUsIGxldmVsKSB7Cgkg
ICAgICAgIHZhciBpbmRlbnQgPSBzcGFjZSA/ICgnXG4nICsgbmV3IEFycmF5KGxldmVsICsgMSku
am9pbihzcGFjZSkpIDogJyc7CgkgICAgICAgIHZhciBjb2xvblNlcGFyYXRvciA9IHNwYWNlID8g
JzogJyA6ICc6JzsKCgkgICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBu
b2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewoJICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9K
U09OKCk7CgkgICAgICAgIH0KCgkgICAgICAgIG5vZGUgPSByZXBsYWNlci5jYWxsKHBhcmVudCwg
a2V5LCBub2RlKTsKCgkgICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAg
ICAgIHJldHVybjsKCSAgICAgICAgfQoJICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmpl
Y3QnIHx8IG5vZGUgPT09IG51bGwpIHsKCSAgICAgICAgICAgIHJldHVybiBqc29uLnN0cmluZ2lm
eShub2RlKTsKCSAgICAgICAgfQoJICAgICAgICBpZiAoaXNBcnJheShub2RlKSkgewoJICAgICAg
ICAgICAgdmFyIG91dCA9IFtdOwoJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rl
Lmxlbmd0aDsgaSsrKSB7CgkgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBzdHJpbmdpZnkobm9k
ZSwgaSwgbm9kZVtpXSwgbGV2ZWwrMSkgfHwganNvbi5zdHJpbmdpZnkobnVsbCk7CgkgICAgICAg
ICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBpdGVtKTsKCSAgICAgICAgICAgIH0K
CSAgICAgICAgICAgIHJldHVybiAnWycgKyBvdXQuam9pbignLCcpICsgaW5kZW50ICsgJ10nOwoJ
ICAgICAgICB9CgkgICAgICAgIGVsc2UgewoJICAgICAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihu
b2RlKSAhPT0gLTEpIHsKCSAgICAgICAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4ganNvbi5z
dHJpbmdpZnkoJ19fY3ljbGVfXycpOwoJICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoJ0NvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04nKTsKCSAgICAgICAgICAg
IH0KCSAgICAgICAgICAgIGVsc2Ugc2Vlbi5wdXNoKG5vZGUpOwoKCSAgICAgICAgICAgIHZhciBr
ZXlzID0gb2JqZWN0S2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpOwoJICAgICAgICAg
ICAgdmFyIG91dCA9IFtdOwoJICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxl
bmd0aDsgaSsrKSB7CgkgICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07CgkgICAgICAg
ICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGUsIGtleSwgbm9kZVtrZXldLCBsZXZl
bCsxKTsKCgkgICAgICAgICAgICAgICAgaWYoIXZhbHVlKSBjb250aW51ZTsKCgkgICAgICAgICAg
ICAgICAgdmFyIGtleVZhbHVlID0ganNvbi5zdHJpbmdpZnkoa2V5KQoJICAgICAgICAgICAgICAg
ICAgICArIGNvbG9uU2VwYXJhdG9yCgkgICAgICAgICAgICAgICAgICAgICsgdmFsdWU7CgkgICAg
ICAgICAgICAgICAgOwoJICAgICAgICAgICAgICAgIG91dC5wdXNoKGluZGVudCArIHNwYWNlICsg
a2V5VmFsdWUpOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgc2Vlbi5zcGxpY2Uoc2Vlbi5p
bmRleE9mKG5vZGUpLCAxKTsKCSAgICAgICAgICAgIHJldHVybiAneycgKyBvdXQuam9pbignLCcp
ICsgaW5kZW50ICsgJ30nOwoJICAgICAgICB9CgkgICAgfSkoeyAnJzogb2JqIH0sICcnLCBvYmos
IDApOwoJfTsKCgl2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHgpIHsK
CSAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKCX07
CgoJdmFyIG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiAob2JqKSB7CgkgICAg
dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKCkg
eyByZXR1cm4gdHJ1ZSB9OwoJICAgIHZhciBrZXlzID0gW107CgkgICAgZm9yICh2YXIga2V5IGlu
IG9iaikgewoJICAgICAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSBrZXlzLnB1c2goa2V5KTsK
CSAgICB9CgkgICAgcmV0dXJuIGtleXM7Cgl9OwoKCi8qKiovIH0pLAovKiAxMDggKi8KLyoqKi8g
KGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCWV4cG9y
dHMucGFyc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOSk7CglleHBvcnRzLnN0cmluZ2lmeSA9
IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTsKCgovKioqLyB9KSwKLyogMTA5ICovCi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCgl2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUg
Y3VycmVudCBjaGFyYWN0ZXIKCSAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyCgkgICAg
ZXNjYXBlZSA9IHsKCSAgICAgICAgJyInOiAgJyInLAoJICAgICAgICAnXFwnOiAnXFwnLAoJICAg
ICAgICAnLyc6ICAnLycsCgkgICAgICAgIGI6ICAgICdcYicsCgkgICAgICAgIGY6ICAgICdcZics
CgkgICAgICAgIG46ICAgICdcbicsCgkgICAgICAgIHI6ICAgICdccicsCgkgICAgICAgIHQ6ICAg
ICdcdCcKCSAgICB9LAoJICAgIHRleHQsCgoJICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHsKCSAg
ICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy4KCSAgICAgICAgdGhy
b3cgewoJICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJywKCSAgICAgICAgICAgIG1l
c3NhZ2U6IG0sCgkgICAgICAgICAgICBhdDogICAgICBhdCwKCSAgICAgICAgICAgIHRleHQ6ICAg
IHRleHQKCSAgICAgICAgfTsKCSAgICB9LAoKCSAgICBuZXh0ID0gZnVuY3Rpb24gKGMpIHsKCSAg
ICAgICAgLy8gSWYgYSBjIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdmVyaWZ5IHRoYXQgaXQgbWF0
Y2hlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCgkgICAgICAgIGlmIChjICYmIGMgIT09IGNoKSB7
CgkgICAgICAgICAgICBlcnJvcigiRXhwZWN0ZWQgJyIgKyBjICsgIicgaW5zdGVhZCBvZiAnIiAr
IGNoICsgIiciKTsKCSAgICAgICAgfQoKCSAgICAgICAgLy8gR2V0IHRoZSBuZXh0IGNoYXJhY3Rl
ci4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjaGFyYWN0ZXJzLAoJICAgICAgICAvLyByZXR1cm4g
dGhlIGVtcHR5IHN0cmluZy4KCgkgICAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpOwoJICAgICAg
ICBhdCArPSAxOwoJICAgICAgICByZXR1cm4gY2g7CgkgICAgfSwKCgkgICAgbnVtYmVyID0gZnVu
Y3Rpb24gKCkgewoJICAgICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS4KCSAgICAgICAgdmFy
IG51bWJlciwKCSAgICAgICAgICAgIHN0cmluZyA9ICcnOwoKCSAgICAgICAgaWYgKGNoID09PSAn
LScpIHsKCSAgICAgICAgICAgIHN0cmluZyA9ICctJzsKCSAgICAgICAgICAgIG5leHQoJy0nKTsK
CSAgICAgICAgfQoJICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewoJICAg
ICAgICAgICAgc3RyaW5nICs9IGNoOwoJICAgICAgICAgICAgbmV4dCgpOwoJICAgICAgICB9Cgkg
ICAgICAgIGlmIChjaCA9PT0gJy4nKSB7CgkgICAgICAgICAgICBzdHJpbmcgKz0gJy4nOwoJICAg
ICAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CgkgICAg
ICAgICAgICAgICAgc3RyaW5nICs9IGNoOwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAg
ICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKCSAgICAgICAgICAgIHN0cmluZyAr
PSBjaDsKCSAgICAgICAgICAgIG5leHQoKTsKCSAgICAgICAgICAgIGlmIChjaCA9PT0gJy0nIHx8
IGNoID09PSAnKycpIHsKCSAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CgkgICAgICAgICAg
ICAgICAgbmV4dCgpOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgd2hpbGUgKGNoID49ICcw
JyAmJiBjaCA8PSAnOScpIHsKCSAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CgkgICAgICAg
ICAgICAgICAgbmV4dCgpOwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICAgIG51bWJl
ciA9ICtzdHJpbmc7CgkgICAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkgewoJICAgICAgICAg
ICAgZXJyb3IoIkJhZCBudW1iZXIiKTsKCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAgIHJl
dHVybiBudW1iZXI7CgkgICAgICAgIH0KCSAgICB9LAoKCSAgICBzdHJpbmcgPSBmdW5jdGlvbiAo
KSB7CgkgICAgICAgIC8vIFBhcnNlIGEgc3RyaW5nIHZhbHVlLgoJICAgICAgICB2YXIgaGV4LAoJ
ICAgICAgICAgICAgaSwKCSAgICAgICAgICAgIHN0cmluZyA9ICcnLAoJICAgICAgICAgICAgdWZm
ZmY7CgoJICAgICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3Qg
bG9vayBmb3IgIiBhbmQgXCBjaGFyYWN0ZXJzLgoJICAgICAgICBpZiAoY2ggPT09ICciJykgewoJ
ICAgICAgICAgICAgd2hpbGUgKG5leHQoKSkgewoJICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
JyInKSB7CgkgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKCSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0cmluZzsKCSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7
CgkgICAgICAgICAgICAgICAgICAgIG5leHQoKTsKCSAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAndScpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gMDsKCSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICs9IDEpIHsKCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZXggPSBwYXJzZUludChuZXh0KCksIDE2KTsKCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzRmluaXRlKGhleCkpIHsKCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVmZmZmID0gdWZmZmYgKiAxNiArIGhleDsKCSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTsKCSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh0eXBlb2YgZXNjYXBlZVtjaF0gPT09ICdzdHJpbmcnKSB7CgkgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07CgkgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CgkgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCSAgICAgICAgICAgICAgICAgICAgfQoJ
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBj
aDsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAg
ZXJyb3IoIkJhZCBzdHJpbmciKTsKCSAgICB9LAoKCSAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHsK
CgkvLyBTa2lwIHdoaXRlc3BhY2UuCgoJICAgICAgICB3aGlsZSAoY2ggJiYgY2ggPD0gJyAnKSB7
CgkgICAgICAgICAgICBuZXh0KCk7CgkgICAgICAgIH0KCSAgICB9LAoKCSAgICB3b3JkID0gZnVu
Y3Rpb24gKCkgewoKCS8vIHRydWUsIGZhbHNlLCBvciBudWxsLgoKCSAgICAgICAgc3dpdGNoIChj
aCkgewoJICAgICAgICBjYXNlICd0JzoKCSAgICAgICAgICAgIG5leHQoJ3QnKTsKCSAgICAgICAg
ICAgIG5leHQoJ3InKTsKCSAgICAgICAgICAgIG5leHQoJ3UnKTsKCSAgICAgICAgICAgIG5leHQo
J2UnKTsKCSAgICAgICAgICAgIHJldHVybiB0cnVlOwoJICAgICAgICBjYXNlICdmJzoKCSAgICAg
ICAgICAgIG5leHQoJ2YnKTsKCSAgICAgICAgICAgIG5leHQoJ2EnKTsKCSAgICAgICAgICAgIG5l
eHQoJ2wnKTsKCSAgICAgICAgICAgIG5leHQoJ3MnKTsKCSAgICAgICAgICAgIG5leHQoJ2UnKTsK
CSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgICAgY2FzZSAnbic6CgkgICAgICAgICAg
ICBuZXh0KCduJyk7CgkgICAgICAgICAgICBuZXh0KCd1Jyk7CgkgICAgICAgICAgICBuZXh0KCds
Jyk7CgkgICAgICAgICAgICBuZXh0KCdsJyk7CgkgICAgICAgICAgICByZXR1cm4gbnVsbDsKCSAg
ICAgICAgfQoJICAgICAgICBlcnJvcigiVW5leHBlY3RlZCAnIiArIGNoICsgIiciKTsKCSAgICB9
LAoKCSAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLgoK
CSAgICBhcnJheSA9IGZ1bmN0aW9uICgpIHsKCgkvLyBQYXJzZSBhbiBhcnJheSB2YWx1ZS4KCgkg
ICAgICAgIHZhciBhcnJheSA9IFtdOwoKCSAgICAgICAgaWYgKGNoID09PSAnWycpIHsKCSAgICAg
ICAgICAgIG5leHQoJ1snKTsKCSAgICAgICAgICAgIHdoaXRlKCk7CgkgICAgICAgICAgICBpZiAo
Y2ggPT09ICddJykgewoJICAgICAgICAgICAgICAgIG5leHQoJ10nKTsKCSAgICAgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7ICAgLy8gZW1wdHkgYXJyYXkKCSAgICAgICAgICAgIH0KCSAgICAgICAg
ICAgIHdoaWxlIChjaCkgewoJICAgICAgICAgICAgICAgIGFycmF5LnB1c2godmFsdWUoKSk7Cgkg
ICAgICAgICAgICAgICAgd2hpdGUoKTsKCSAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICddJykg
ewoJICAgICAgICAgICAgICAgICAgICBuZXh0KCddJyk7CgkgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBhcnJheTsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgbmV4dCgnLCcp
OwoJICAgICAgICAgICAgICAgIHdoaXRlKCk7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAg
ICAgICAgZXJyb3IoIkJhZCBhcnJheSIpOwoJICAgIH0sCgoJICAgIG9iamVjdCA9IGZ1bmN0aW9u
ICgpIHsKCgkvLyBQYXJzZSBhbiBvYmplY3QgdmFsdWUuCgoJICAgICAgICB2YXIga2V5LAoJICAg
ICAgICAgICAgb2JqZWN0ID0ge307CgoJICAgICAgICBpZiAoY2ggPT09ICd7JykgewoJICAgICAg
ICAgICAgbmV4dCgneycpOwoJICAgICAgICAgICAgd2hpdGUoKTsKCSAgICAgICAgICAgIGlmIChj
aCA9PT0gJ30nKSB7CgkgICAgICAgICAgICAgICAgbmV4dCgnfScpOwoJICAgICAgICAgICAgICAg
IHJldHVybiBvYmplY3Q7ICAgLy8gZW1wdHkgb2JqZWN0CgkgICAgICAgICAgICB9CgkgICAgICAg
ICAgICB3aGlsZSAoY2gpIHsKCSAgICAgICAgICAgICAgICBrZXkgPSBzdHJpbmcoKTsKCSAgICAg
ICAgICAgICAgICB3aGl0ZSgpOwoJICAgICAgICAgICAgICAgIG5leHQoJzonKTsKCSAgICAgICAg
ICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7Cgkg
ICAgICAgICAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5ICInICsga2V5ICsgJyInKTsK
CSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgp
OwoJICAgICAgICAgICAgICAgIHdoaXRlKCk7CgkgICAgICAgICAgICAgICAgaWYgKGNoID09PSAn
fScpIHsKCSAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpOwoJICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqZWN0OwoJICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICBuZXh0
KCcsJyk7CgkgICAgICAgICAgICAgICAgd2hpdGUoKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAg
fQoJICAgICAgICBlcnJvcigiQmFkIG9iamVjdCIpOwoJICAgIH07CgoJdmFsdWUgPSBmdW5jdGlv
biAoKSB7CgoJLy8gUGFyc2UgYSBKU09OIHZhbHVlLiBJdCBjb3VsZCBiZSBhbiBvYmplY3QsIGFu
IGFycmF5LCBhIHN0cmluZywgYSBudW1iZXIsCgkvLyBvciBhIHdvcmQuCgoJICAgIHdoaXRlKCk7
CgkgICAgc3dpdGNoIChjaCkgewoJICAgIGNhc2UgJ3snOgoJICAgICAgICByZXR1cm4gb2JqZWN0
KCk7CgkgICAgY2FzZSAnWyc6CgkgICAgICAgIHJldHVybiBhcnJheSgpOwoJICAgIGNhc2UgJyIn
OgoJICAgICAgICByZXR1cm4gc3RyaW5nKCk7CgkgICAgY2FzZSAnLSc6CgkgICAgICAgIHJldHVy
biBudW1iZXIoKTsKCSAgICBkZWZhdWx0OgoJICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNo
IDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpOwoJICAgIH0KCX07CgoJLy8gUmV0dXJuIHRoZSBq
c29uX3BhcnNlIGZ1bmN0aW9uLiBJdCB3aWxsIGhhdmUgYWNjZXNzIHRvIGFsbCBvZiB0aGUgYWJv
dmUKCS8vIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzLgoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24gKHNvdXJjZSwgcmV2aXZlcikgewoJICAgIHZhciByZXN1bHQ7CgoJICAgIHRleHQgPSBzb3Vy
Y2U7CgkgICAgYXQgPSAwOwoJICAgIGNoID0gJyAnOwoJICAgIHJlc3VsdCA9IHZhbHVlKCk7Cgkg
ICAgd2hpdGUoKTsKCSAgICBpZiAoY2gpIHsKCSAgICAgICAgZXJyb3IoIlN5bnRheCBlcnJvciIp
OwoJICAgIH0KCgkgICAgLy8gSWYgdGhlcmUgaXMgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSByZWN1
cnNpdmVseSB3YWxrIHRoZSBuZXcgc3RydWN0dXJlLAoJICAgIC8vIHBhc3NpbmcgZWFjaCBuYW1l
L3ZhbHVlIHBhaXIgdG8gdGhlIHJldml2ZXIgZnVuY3Rpb24gZm9yIHBvc3NpYmxlCgkgICAgLy8g
dHJhbnNmb3JtYXRpb24sIHN0YXJ0aW5nIHdpdGggYSB0ZW1wb3Jhcnkgcm9vdCBvYmplY3QgdGhh
dCBob2xkcyB0aGUgcmVzdWx0CgkgICAgLy8gaW4gYW4gZW1wdHkga2V5LiBJZiB0aGVyZSBpcyBu
b3QgYSByZXZpdmVyIGZ1bmN0aW9uLCB3ZSBzaW1wbHkgcmV0dXJuIHRoZQoJICAgIC8vIHJlc3Vs
dC4KCgkgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8gKGZ1bmN0aW9u
IHdhbGsoaG9sZGVyLCBrZXkpIHsKCSAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tl
eV07CgkgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7Cgkg
ICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKCSAgICAgICAgICAgICAgICBpZiAoT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkgewoJICAgICAgICAgICAg
ICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7CgkgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9
PSB1bmRlZmluZWQpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjsKCSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSB2YWx1ZVtrXTsKCSAgICAgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgIH0KCSAg
ICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRl
ciwga2V5LCB2YWx1ZSk7CgkgICAgfSh7Jyc6IHJlc3VsdH0sICcnKSkgOiByZXN1bHQ7Cgl9OwoK
Ci8qKiovIH0pLAovKiAxMTAgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoK
CXZhciBjeCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1
MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZd
L2csCgkgICAgZXNjYXBhYmxlID0gL1tcXFwiXHgwMC1ceDFmXHg3Zi1ceDlmXHUwMGFkXHUwNjAw
LVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYw
LVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCgkgICAgZ2FwLAoJICAgIGluZGVudCwKCSAg
ICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucwoJICAgICAg
ICAnXGInOiAnXFxiJywKCSAgICAgICAgJ1x0JzogJ1xcdCcsCgkgICAgICAgICdcbic6ICdcXG4n
LAoJICAgICAgICAnXGYnOiAnXFxmJywKCSAgICAgICAgJ1xyJzogJ1xccicsCgkgICAgICAgICci
JyA6ICdcXCInLAoJICAgICAgICAnXFwnOiAnXFxcXCcKCSAgICB9LAoJICAgIHJlcDsKCglmdW5j
dGlvbiBxdW90ZShzdHJpbmcpIHsKCSAgICAvLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNv
bnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vCgkgICAgLy8gYmFj
a3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNvbWUgcXVvdGVzIGFy
b3VuZCBpdC4KCSAgICAvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVu
ZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGUKCSAgICAvLyBzZXF1ZW5jZXMuCgoJICAg
IGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwOwoJICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJp
bmcpID8gJyInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkgewoJICAg
ICAgICB2YXIgYyA9IG1ldGFbYV07CgkgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmlu
ZycgPyBjIDoKCSAgICAgICAgICAgICdcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50
b1N0cmluZygxNikpLnNsaWNlKC00KTsKCSAgICB9KSArICciJyA6ICciJyArIHN0cmluZyArICci
JzsKCX0KCglmdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHsKCSAgICAvLyBQcm9kdWNlIGEgc3Ry
aW5nIGZyb20gaG9sZGVyW2tleV0uCgkgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNv
dW50ZXIuCgkgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LgoJICAgICAgICB2
LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLgoJICAgICAgICBsZW5ndGgsCgkgICAgICAg
IG1pbmQgPSBnYXAsCgkgICAgICAgIHBhcnRpYWwsCgkgICAgICAgIHZhbHVlID0gaG9sZGVyW2tl
eV07CgoJICAgIC8vIElmIHRoZSB2YWx1ZSBoYXMgYSB0b0pTT04gbWV0aG9kLCBjYWxsIGl0IHRv
IG9idGFpbiBhIHJlcGxhY2VtZW50IHZhbHVlLgoJICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFs
dWUgPT09ICdvYmplY3QnICYmCgkgICAgICAgICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAn
ZnVuY3Rpb24nKSB7CgkgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7CgkgICAgfQoK
CSAgICAvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4g
Y2FsbCB0aGUgcmVwbGFjZXIgdG8KCSAgICAvLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS4K
CSAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykgewoJICAgICAgICB2YWx1ZSA9IHJl
cC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7CgkgICAgfQoKCSAgICAvLyBXaGF0IGhhcHBlbnMg
bmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSdzIHR5cGUuCgkgICAgc3dpdGNoICh0eXBlb2YgdmFs
dWUpIHsKCSAgICAgICAgY2FzZSAnc3RyaW5nJzoKCSAgICAgICAgICAgIHJldHVybiBxdW90ZSh2
YWx1ZSk7CgoJICAgICAgICBjYXNlICdudW1iZXInOgoJICAgICAgICAgICAgLy8gSlNPTiBudW1i
ZXJzIG11c3QgYmUgZmluaXRlLiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuCgkg
ICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxs
JzsKCgkgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgoJICAgICAgICBjYXNlICdudWxsJzoKCSAgICAg
ICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0
byBhIHN0cmluZy4gTm90ZToKCSAgICAgICAgICAgIC8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHBy
b2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluCgkgICAgICAgICAgICAv
LyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LgoJICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CgoJICAgICAgICBjYXNlICdvYmplY3QnOgoJICAg
ICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICdudWxsJzsKCSAgICAgICAgICAgIGdhcCArPSBp
bmRlbnQ7CgkgICAgICAgICAgICBwYXJ0aWFsID0gW107CgoJICAgICAgICAgICAgLy8gQXJyYXku
aXNBcnJheQoJICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHko
dmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7CgkgICAgICAgICAgICAgICAgbGVuZ3RoID0g
dmFsdWUubGVuZ3RoOwoJICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkg
Kz0gMSkgewoJICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVlKSB8
fCAnbnVsbCc7CgkgICAgICAgICAgICAgICAgfQoKCSAgICAgICAgICAgICAgICAvLyBKb2luIGFs
bCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kCgkg
ICAgICAgICAgICAgICAgLy8gd3JhcCB0aGVtIGluIGJyYWNrZXRzLgoJICAgICAgICAgICAgICAg
IHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBnYXAgPwoJICAgICAgICAgICAgICAg
ICAgICAnW1xuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxuJyArIGdhcCkgKyAnXG4nICsgbWlu
ZCArICddJyA6CgkgICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsg
J10nOwoJICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7CgkgICAgICAgICAgICAgICAgcmV0dXJu
IHY7CgkgICAgICAgICAgICB9CgoJICAgICAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFu
IGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBtZW1iZXJzIHRvIGJlCgkgICAgICAgICAgICAv
LyBzdHJpbmdpZmllZC4KCSAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29i
amVjdCcpIHsKCSAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoOwoJICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgewoJICAgICAgICAgICAgICAg
ICAgICBrID0gcmVwW2ldOwoJICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdz
dHJpbmcnKSB7CgkgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTsKCSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7CgkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7CgkgICAg
ICAgICAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAg
ICAgICB9CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBlbHNlIHsKCSAgICAgICAgICAgICAg
ICAvLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9i
amVjdC4KCSAgICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKCSAgICAgICAgICAgICAg
ICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykp
IHsKCSAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOwoJICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHYpIHsKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0
aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKCSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KCSAgICAgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgIH0K
CSAgICAgICAgICAgIH0KCgkgICAgICAgIC8vIEpvaW4gYWxsIG9mIHRoZSBtZW1iZXIgdGV4dHMg
dG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywKCSAgICAgICAgLy8gYW5kIHdyYXAgdGhl
bSBpbiBicmFjZXMuCgoJICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAne30nIDog
Z2FwID8KCSAgICAgICAgICAgICd7XG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXG4nICsgZ2Fw
KSArICdcbicgKyBtaW5kICsgJ30nIDoKCSAgICAgICAgICAgICd7JyArIHBhcnRpYWwuam9pbign
LCcpICsgJ30nOwoJICAgICAgICBnYXAgPSBtaW5kOwoJICAgICAgICByZXR1cm4gdjsKCSAgICB9
Cgl9CgoJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkg
ewoJICAgIHZhciBpOwoJICAgIGdhcCA9ICcnOwoJICAgIGluZGVudCA9ICcnOwoKCSAgICAvLyBJ
ZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcg
Y29udGFpbmluZyB0aGF0CgkgICAgLy8gbWFueSBzcGFjZXMuCgkgICAgaWYgKHR5cGVvZiBzcGFj
ZSA9PT0gJ251bWJlcicpIHsKCSAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEp
IHsKCSAgICAgICAgICAgIGluZGVudCArPSAnICc7CgkgICAgICAgIH0KCSAgICB9CgkgICAgLy8g
SWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRo
ZSBpbmRlbnQgc3RyaW5nLgoJICAgIGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycp
IHsKCSAgICAgICAgaW5kZW50ID0gc3BhY2U7CgkgICAgfQoKCSAgICAvLyBJZiB0aGVyZSBpcyBh
IHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuCgkgICAgLy8gT3Ro
ZXJ3aXNlLCB0aHJvdyBhbiBlcnJvci4KCSAgICByZXAgPSByZXBsYWNlcjsKCSAgICBpZiAocmVw
bGFjZXIgJiYgdHlwZW9mIHJlcGxhY2VyICE9PSAnZnVuY3Rpb24nCgkgICAgJiYgKHR5cGVvZiBy
ZXBsYWNlciAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJl
cicpKSB7CgkgICAgICAgIHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTsKCSAgICB9
CgoJICAgIC8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVu
ZGVyIHRoZSBrZXkgb2YgJycuCgkgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5
aW5nIHRoZSB2YWx1ZS4KCSAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7Cgl9OwoKCi8q
KiovIH0pLAovKiAxMTEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJw
YWNrX3JlcXVpcmVfXykgewoKCXZhciBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXzsvKiBX
RUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsLCBtb2R1bGUpIHsvKioKCSAq
IEBsaWNlbnNlCgkgKiBMb2Rhc2ggPGh0dHBzOi8vbG9kYXNoLmNvbS8+CgkgKiBDb3B5cmlnaHQg
T3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9vcGVuanNm
Lm9yZy8+CgkgKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29t
L2xpY2Vuc2U+CgkgKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJz
Y29yZWpzLm9yZy9MSUNFTlNFPgoJICogQ29weXJpZ2h0IEplcmVteSBBc2hrZW5hcywgRG9jdW1l
bnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCgkgKi8KCTsoZnVu
Y3Rpb24oKSB7CgoJICAvKiogVXNlZCBhcyBhIHNhZmUgcmVmZXJlbmNlIGZvciBgdW5kZWZpbmVk
YCBpbiBwcmUtRVM1IGVudmlyb25tZW50cy4gKi8KCSAgdmFyIHVuZGVmaW5lZDsKCgkgIC8qKiBV
c2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi8KCSAgdmFyIFZFUlNJT04gPSAn
NC4xNy4xNSc7CgoJICAvKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkg
b3B0aW1pemF0aW9ucy4gKi8KCSAgdmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7CgoJICAvKiog
RXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovCgkgIHZhciBDT1JFX0VSUk9SX1RFWFQgPSAnVW5z
dXBwb3J0ZWQgY29yZS1qcyB1c2UuIFRyeSBodHRwczovL25wbXMuaW8vc2VhcmNoP3E9cG9ueWZp
bGwuJywKCSAgICAgIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJzsKCgkg
IC8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi8KCSAg
dmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nOwoKCSAgLyoq
IFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqLwoJICB2YXIgTUFYX01F
TU9JWkVfU0laRSA9IDUwMDsKCgkgIC8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBw
bGFjZWhvbGRlci4gKi8KCSAgdmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVy
X18nOwoKCSAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgY2xvbmluZy4gKi8KCSAg
dmFyIENMT05FX0RFRVBfRkxBRyA9IDEsCgkgICAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLAoJICAg
ICAgQ0xPTkVfU1lNQk9MU19GTEFHID0gNDsKCgkgIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFz
a3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqLwoJICB2YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcg
PSAxLAoJICAgICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7CgoJICAvKiogVXNlZCB0byBj
b21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi8KCSAgdmFyIFdSQVBfQklO
RF9GTEFHID0gMSwKCSAgICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsCgkgICAgICBXUkFQX0NV
UlJZX0JPVU5EX0ZMQUcgPSA0LAoJICAgICAgV1JBUF9DVVJSWV9GTEFHID0gOCwKCSAgICAgIFdS
QVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LAoJICAgICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMiwK
CSAgICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsCgkgICAgICBXUkFQX0FSWV9GTEFH
ID0gMTI4LAoJICAgICAgV1JBUF9SRUFSR19GTEFHID0gMjU2LAoJICAgICAgV1JBUF9GTElQX0ZM
QUcgPSA1MTI7CgoJICAvKiogVXNlZCBhcyBkZWZhdWx0IG9wdGlvbnMgZm9yIGBfLnRydW5jYXRl
YC4gKi8KCSAgdmFyIERFRkFVTFRfVFJVTkNfTEVOR1RIID0gMzAsCgkgICAgICBERUZBVUxUX1RS
VU5DX09NSVNTSU9OID0gJy4uLic7CgoJICAvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9u
cyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovCgkg
IHZhciBIT1RfQ09VTlQgPSA4MDAsCgkgICAgICBIT1RfU1BBTiA9IDE2OwoKCSAgLyoqIFVzZWQg
dG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgbGF6eSBpdGVyYXRlZXMuICovCgkgIHZhciBMQVpZX0ZJ
TFRFUl9GTEFHID0gMSwKCSAgICAgIExBWllfTUFQX0ZMQUcgPSAyLAoJICAgICAgTEFaWV9XSElM
RV9GTEFHID0gMzsKCgkgIC8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJl
cmAgY29uc3RhbnRzLiAqLwoJICB2YXIgSU5GSU5JVFkgPSAxIC8gMCwKCSAgICAgIE1BWF9TQUZF
X0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLAoJICAgICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5
MzEzNDg2MjMxNTdlKzMwOCwKCSAgICAgIE5BTiA9IDAgLyAwOwoKCSAgLyoqIFVzZWQgYXMgcmVm
ZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi8K
CSAgdmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1LAoJICAgICAgTUFYX0FSUkFZX0lO
REVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsCgkgICAgICBIQUxGX01BWF9BUlJBWV9MRU5HVEgg
PSBNQVhfQVJSQVlfTEVOR1RIID4+PiAxOwoKCSAgLyoqIFVzZWQgdG8gYXNzb2NpYXRlIHdyYXAg
bWV0aG9kcyB3aXRoIHRoZWlyIGJpdCBmbGFncy4gKi8KCSAgdmFyIHdyYXBGbGFncyA9IFsKCSAg
ICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLAoJICAgIFsnYmluZCcsIFdSQVBfQklORF9GTEFHXSwK
CSAgICBbJ2JpbmRLZXknLCBXUkFQX0JJTkRfS0VZX0ZMQUddLAoJICAgIFsnY3VycnknLCBXUkFQ
X0NVUlJZX0ZMQUddLAoJICAgIFsnY3VycnlSaWdodCcsIFdSQVBfQ1VSUllfUklHSFRfRkxBR10s
CgkgICAgWydmbGlwJywgV1JBUF9GTElQX0ZMQUddLAoJICAgIFsncGFydGlhbCcsIFdSQVBfUEFS
VElBTF9GTEFHXSwKCSAgICBbJ3BhcnRpYWxSaWdodCcsIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFH
XSwKCSAgICBbJ3JlYXJnJywgV1JBUF9SRUFSR19GTEFHXQoJICBdOwoKCSAgLyoqIGBPYmplY3Qj
dG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqLwoJICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0
IEFyZ3VtZW50c10nLAoJICAgICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLAoJICAgICAg
YXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsCgkgICAgICBib29sVGFnID0gJ1tv
YmplY3QgQm9vbGVhbl0nLAoJICAgICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJywKCSAgICAg
IGRvbUV4Y1RhZyA9ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nLAoJICAgICAgZXJyb3JUYWcgPSAn
W29iamVjdCBFcnJvcl0nLAoJICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsCgkg
ICAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLAoJICAgICAgbWFwVGFn
ID0gJ1tvYmplY3QgTWFwXScsCgkgICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJywK
CSAgICAgIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsCgkgICAgICBvYmplY3RUYWcgPSAnW29i
amVjdCBPYmplY3RdJywKCSAgICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsCgkg
ICAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XScsCgkgICAgICByZWdleHBUYWcgPSAnW29i
amVjdCBSZWdFeHBdJywKCSAgICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLAoJICAgICAgc3Ry
aW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsCgkgICAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBT
eW1ib2xdJywKCSAgICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nLAoJICAg
ICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJywKCSAgICAgIHdlYWtTZXRUYWcgPSAn
W29iamVjdCBXZWFrU2V0XSc7CgoJICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJh
eUJ1ZmZlcl0nLAoJICAgICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLAoJICAg
ICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLAoJICAgICAgZmxvYXQ2NFRh
ZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLAoJICAgICAgaW50OFRhZyA9ICdbb2JqZWN0IElu
dDhBcnJheV0nLAoJICAgICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsCgkgICAg
ICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJywKCSAgICAgIHVpbnQ4VGFnID0gJ1tv
YmplY3QgVWludDhBcnJheV0nLAoJICAgICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWlu
dDhDbGFtcGVkQXJyYXldJywKCSAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5
XScsCgkgICAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nOwoKCSAgLyoqIFVz
ZWQgdG8gbWF0Y2ggZW1wdHkgc3RyaW5nIGxpdGVyYWxzIGluIGNvbXBpbGVkIHRlbXBsYXRlIHNv
dXJjZS4gKi8KCSAgdmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xiX19wIFwrPSAnJzsvZywK
CSAgICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXGIoX19wIFwrPSkgJycgXCsvZywKCSAgICAg
IHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXCguKj9cKXxcYl9fdFwpKSBcK1xuJyc7L2c7
CgoJICAvKiogVXNlZCB0byBtYXRjaCBIVE1MIGVudGl0aWVzIGFuZCBIVE1MIGNoYXJhY3RlcnMu
ICovCgkgIHZhciByZUVzY2FwZWRIdG1sID0gLyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLAoJ
ICAgICAgcmVVbmVzY2FwZWRIdG1sID0gL1smPD4iJ10vZywKCSAgICAgIHJlSGFzRXNjYXBlZEh0
bWwgPSBSZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLAoJICAgICAgcmVIYXNVbmVzY2FwZWRI
dG1sID0gUmVnRXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpOwoKCSAgLyoqIFVzZWQgdG8gbWF0
Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi8KCSAgdmFyIHJlRXNjYXBlID0gLzwlLShbXHNcU10r
PyklPi9nLAoJICAgICAgcmVFdmFsdWF0ZSA9IC88JShbXHNcU10rPyklPi9nLAoJICAgICAgcmVJ
bnRlcnBvbGF0ZSA9IC88JT0oW1xzXFNdKz8pJT4vZzsKCgkgIC8qKiBVc2VkIHRvIG1hdGNoIHBy
b3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi8KCSAgdmFyIHJlSXNEZWVwUHJv
cCA9IC9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLAoJ
ICAgICAgcmVJc1BsYWluUHJvcCA9IC9eXHcqJC8sCgkgICAgICByZVByb3BOYW1lID0gL1teLltc
XV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylc
MilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2c7CgoJICAvKioKCSAgICogVXNlZCB0
byBtYXRjaCBgUmVnRXhwYAoJICAgKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWlu
dGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS4KCSAgICovCgkgIHZh
ciByZVJlZ0V4cENoYXIgPSAvW1xcXiQuKis/KClbXF17fXxdL2csCgkgICAgICByZUhhc1JlZ0V4
cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7CgoJICAvKiogVXNlZCB0byBtYXRj
aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLwoJICB2YXIgcmVUcmltID0gL15c
cyt8XHMrJC9nLAoJICAgICAgcmVUcmltU3RhcnQgPSAvXlxzKy8sCgkgICAgICByZVRyaW1FbmQg
PSAvXHMrJC87CgoJICAvKiogVXNlZCB0byBtYXRjaCB3cmFwIGRldGFpbCBjb21tZW50cy4gKi8K
CSAgdmFyIHJlV3JhcENvbW1lbnQgPSAvXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBc
KlwvKT9cbj8vLAoJICAgICAgcmVXcmFwRGV0YWlscyA9IC9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0
aCAoLispXF0gXCovLAoJICAgICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvOwoKCSAgLyoqIFVz
ZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICov
CgkgIHZhciByZUFzY2lpV29yZCA9IC9bXlx4MDAtXHgyZlx4M2EtXHg0MFx4NWItXHg2MFx4N2It
XHg3Zl0rL2c7CgoJICAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBw
YXRocy4gKi8KCSAgdmFyIHJlRXNjYXBlQ2hhciA9IC9cXChcXCk/L2c7CgoJICAvKioKCSAgICog
VXNlZCB0byBtYXRjaAoJICAgKiBbRVMgdGVtcGxhdGUgZGVsaW1pdGVyc10oaHR0cDovL2VjbWEt
aW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdGVtcGxhdGUtbGl0ZXJhbC1sZXhp
Y2FsLWNvbXBvbmVudHMpLgoJICAgKi8KCSAgdmFyIHJlRXNUZW1wbGF0ZSA9IC9cJFx7KFteXFx9
XSooPzpcXC5bXlxcfV0qKSopXH0vZzsKCgkgIC8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZs
YWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqLwoJICB2YXIgcmVGbGFncyA9
IC9cdyokLzsKCgkgIC8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0
cmluZyB2YWx1ZXMuICovCgkgIHZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7
CgoJICAvKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovCgkgIHZhciBy
ZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pOwoKCSAgLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29u
c3RydWN0b3JzIChTYWZhcmkpLiAqLwoJICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAu
Kz9Db25zdHJ1Y3RvclxdJC87CgoJICAvKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZh
bHVlcy4gKi8KCSAgdmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7CgoJICAvKiogVXNlZCB0
byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovCgkgIHZhciByZUlzVWludCA9IC9e
KD86MHxbMS05XVxkKikkLzsKCgkgIC8qKiBVc2VkIHRvIG1hdGNoIExhdGluIFVuaWNvZGUgbGV0
dGVycyAoZXhjbHVkaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMpLiAqLwoJICB2YXIgcmVMYXRp
biA9IC9bXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXHUwMTAwLVx1MDE3Zl0vZzsKCgkgIC8q
KiBVc2VkIHRvIGVuc3VyZSBjYXB0dXJpbmcgb3JkZXIgb2YgdGVtcGxhdGUgZGVsaW1pdGVycy4g
Ki8KCSAgdmFyIHJlTm9NYXRjaCA9IC8oJF4pLzsKCgkgIC8qKiBVc2VkIHRvIG1hdGNoIHVuZXNj
YXBlZCBjaGFyYWN0ZXJzIGluIGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi8KCSAgdmFyIHJl
VW5lc2NhcGVkU3RyaW5nID0gL1snXG5cclx1MjAyOFx1MjAyOVxcXS9nOwoKCSAgLyoqIFVzZWQg
dG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqLwoJICB2YXIgcnNBc3RyYWxS
YW5nZSA9ICdcXHVkODAwLVxcdWRmZmYnLAoJICAgICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFx1
MDMwMC1cXHUwMzZmJywKCSAgICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXHVmZTIwLVxc
dWZlMmYnLAoJICAgICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXHUyMGQwLVxcdTIwZmYnLAoJ
ICAgICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtz
UmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLAoJICAgICAgcnNEaW5nYmF0UmFuZ2UgPSAnXFx1
MjcwMC1cXHUyN2JmJywKCSAgICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXHhkZi1cXHhmNlxceGY4
LVxceGZmJywKCSAgICAgIHJzTWF0aE9wUmFuZ2UgPSAnXFx4YWNcXHhiMVxceGQ3XFx4ZjcnLAoJ
ICAgICAgcnNOb25DaGFyUmFuZ2UgPSAnXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYw
XFx4N2ItXFx4YmYnLAoJICAgICAgcnNQdW5jdHVhdGlvblJhbmdlID0gJ1xcdTIwMDAtXFx1MjA2
ZicsCgkgICAgICByc1NwYWNlUmFuZ2UgPSAnIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxy
XFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNc
XHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxc
dTIwNWZcXHUzMDAwJywKCSAgICAgIHJzVXBwZXJSYW5nZSA9ICdBLVpcXHhjMC1cXHhkNlxceGQ4
LVxceGRlJywKCSAgICAgIHJzVmFyUmFuZ2UgPSAnXFx1ZmUwZVxcdWZlMGYnLAoJICAgICAgcnNC
cmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNQdW5jdHVhdGlv
blJhbmdlICsgcnNTcGFjZVJhbmdlOwoKCSAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNh
cHR1cmUgZ3JvdXBzLiAqLwoJICB2YXIgcnNBcG9zID0gIlsnXHUyMDE5XSIsCgkgICAgICByc0Fz
dHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsCgkgICAgICByc0JyZWFrID0gJ1snICsg
cnNCcmVha1JhbmdlICsgJ10nLAoJICAgICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSAr
ICddJywKCSAgICAgIHJzRGlnaXRzID0gJ1xcZCsnLAoJICAgICAgcnNEaW5nYmF0ID0gJ1snICsg
cnNEaW5nYmF0UmFuZ2UgKyAnXScsCgkgICAgICByc0xvd2VyID0gJ1snICsgcnNMb3dlclJhbmdl
ICsgJ10nLAoJICAgICAgcnNNaXNjID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyByc0JyZWFrUmFu
Z2UgKyByc0RpZ2l0cyArIHJzRGluZ2JhdFJhbmdlICsgcnNMb3dlclJhbmdlICsgcnNVcHBlclJh
bmdlICsgJ10nLAoJICAgICAgcnNGaXR6ID0gJ1xcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXScsCgkg
ICAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLAoJ
ICAgICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJywKCSAgICAgIHJz
UmVnaW9uYWwgPSAnKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfScsCgkgICAgICByc1N1
cnJQYWlyID0gJ1tcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0nLAoJICAgICAgcnNV
cHBlciA9ICdbJyArIHJzVXBwZXJSYW5nZSArICddJywKCSAgICAgIHJzWldKID0gJ1xcdTIwMGQn
OwoKCSAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovCgkgIHZhciByc01p
c2NMb3dlciA9ICcoPzonICsgcnNMb3dlciArICd8JyArIHJzTWlzYyArICcpJywKCSAgICAgIHJz
TWlzY1VwcGVyID0gJyg/OicgKyByc1VwcGVyICsgJ3wnICsgcnNNaXNjICsgJyknLAoJICAgICAg
cnNPcHRDb250ckxvd2VyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86ZHxsbHxtfHJlfHN8dHx2ZSkp
PycsCgkgICAgICByc09wdENvbnRyVXBwZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpEfExMfE18
UkV8U3xUfFZFKSk/JywKCSAgICAgIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JywKCSAgICAg
IHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsCgkgICAgICByc09wdEpvaW4gPSAn
KD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBh
aXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLAoJICAgICAg
cnNPcmRMb3dlciA9ICdcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxkdGgpKD89XFxifFtB
LVpfXSknLAoJICAgICAgcnNPcmRVcHBlciA9ICdcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10p
XFxkVEgpKD89XFxifFthLXpfXSknLAoJICAgICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9k
ICsgcnNPcHRKb2luLAoJICAgICAgcnNFbW9qaSA9ICcoPzonICsgW3JzRGluZ2JhdCwgcnNSZWdp
b25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNTZXEsCgkgICAgICByc1N5bWJv
bCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdp
b25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJzsKCgkgIC8qKiBVc2Vk
IHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqLwoJICB2YXIgcmVBcG9zID0gUmVnRXhwKHJzQXBvcywg
J2cnKTsKCgkgIC8qKgoJICAgKiBVc2VkIHRvIG1hdGNoIFtjb21iaW5pbmcgZGlhY3JpdGljYWwg
bWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNh
bF9NYXJrcykgYW5kCgkgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZm9yIHN5bWJv
bHNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9N
YXJrc19mb3JfU3ltYm9scykuCgkgICAqLwoJICB2YXIgcmVDb21ib01hcmsgPSBSZWdFeHAocnND
b21ibywgJ2cnKTsKCgkgIC8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6
Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovCgkgIHZhciBy
ZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1i
b2wgKyByc1NlcSwgJ2cnKTsKCgkgIC8qKiBVc2VkIHRvIG1hdGNoIGNvbXBsZXggb3IgY29tcG91
bmQgd29yZHMuICovCgkgIHZhciByZVVuaWNvZGVXb3JkID0gUmVnRXhwKFsKCSAgICByc1VwcGVy
ICsgJz8nICsgcnNMb3dlciArICcrJyArIHJzT3B0Q29udHJMb3dlciArICcoPz0nICsgW3JzQnJl
YWssIHJzVXBwZXIsICckJ10uam9pbignfCcpICsgJyknLAoJICAgIHJzTWlzY1VwcGVyICsgJysn
ICsgcnNPcHRDb250clVwcGVyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciArIHJzTWlzY0xv
d2VyLCAnJCddLmpvaW4oJ3wnKSArICcpJywKCSAgICByc1VwcGVyICsgJz8nICsgcnNNaXNjTG93
ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIsCgkgICAgcnNVcHBlciArICcrJyArIHJzT3B0Q29u
dHJVcHBlciwKCSAgICByc09yZFVwcGVyLAoJICAgIHJzT3JkTG93ZXIsCgkgICAgcnNEaWdpdHMs
CgkgICAgcnNFbW9qaQoJICBdLmpvaW4oJ3wnKSwgJ2cnKTsKCgkgIC8qKiBVc2VkIHRvIGRldGVj
dCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRo
ZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5l
cnMtb2YtdW5pY29kZS8pLiAqLwoJICB2YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJz
WldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTsK
CgkgIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgbmVlZCBhIG1vcmUgcm9idXN0IHJl
Z2V4cCB0byBtYXRjaCB3b3Jkcy4gKi8KCSAgdmFyIHJlSGFzVW5pY29kZVdvcmQgPSAvW2Etel1b
QS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAt
OSBdLzsKCgkgIC8qKiBVc2VkIHRvIGFzc2lnbiBkZWZhdWx0IGBjb250ZXh0YCBvYmplY3QgcHJv
cGVydGllcy4gKi8KCSAgdmFyIGNvbnRleHRQcm9wcyA9IFsKCSAgICAnQXJyYXknLCAnQnVmZmVy
JywgJ0RhdGFWaWV3JywgJ0RhdGUnLCAnRXJyb3InLCAnRmxvYXQzMkFycmF5JywgJ0Zsb2F0NjRB
cnJheScsCgkgICAgJ0Z1bmN0aW9uJywgJ0ludDhBcnJheScsICdJbnQxNkFycmF5JywgJ0ludDMy
QXJyYXknLCAnTWFwJywgJ01hdGgnLCAnT2JqZWN0JywKCSAgICAnUHJvbWlzZScsICdSZWdFeHAn
LCAnU2V0JywgJ1N0cmluZycsICdTeW1ib2wnLCAnVHlwZUVycm9yJywgJ1VpbnQ4QXJyYXknLAoJ
ICAgICdVaW50OENsYW1wZWRBcnJheScsICdVaW50MTZBcnJheScsICdVaW50MzJBcnJheScsICdX
ZWFrTWFwJywKCSAgICAnXycsICdjbGVhclRpbWVvdXQnLCAnaXNGaW5pdGUnLCAncGFyc2VJbnQn
LCAnc2V0VGltZW91dCcKCSAgXTsKCgkgIC8qKiBVc2VkIHRvIG1ha2UgdGVtcGxhdGUgc291cmNl
VVJMcyBlYXNpZXIgdG8gaWRlbnRpZnkuICovCgkgIHZhciB0ZW1wbGF0ZUNvdW50ZXIgPSAtMTsK
CgkgIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFy
cmF5cy4gKi8KCSAgdmFyIHR5cGVkQXJyYXlUYWdzID0ge307CgkgIHR5cGVkQXJyYXlUYWdzW2Zs
b2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPQoJICB0eXBlZEFycmF5VGFn
c1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9CgkgIHR5cGVkQXJyYXlUYWdz
W2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9CgkgIHR5cGVkQXJyYXlUYWdz
W3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID0KCSAgdHlwZWRB
cnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7CgkgIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0g
dHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID0KCSAgdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJU
YWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPQoJICB0eXBlZEFycmF5VGFnc1tkYXRhVmll
d1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9CgkgIHR5cGVkQXJyYXlUYWdzW2Vycm9y
VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID0KCSAgdHlwZWRBcnJheVRhZ3NbbWFwVGFn
XSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPQoJICB0eXBlZEFycmF5VGFnc1tvYmplY3RU
YWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9CgkgIHR5cGVkQXJyYXlUYWdzW3NldFRh
Z10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID0KCSAgdHlwZWRBcnJheVRhZ3Nbd2Vha01h
cFRhZ10gPSBmYWxzZTsKCgkgIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFs
dWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovCgkgIHZhciBjbG9uZWFibGVUYWdzID0ge307
CgkgIGNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9Cgkg
IGNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1Rh
Z10gPQoJICBjbG9uZWFibGVUYWdzW2Jvb2xUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRlVGFnXSA9
CgkgIGNsb25lYWJsZVRhZ3NbZmxvYXQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWdd
ID0KCSAgY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID0K
CSAgY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPSBjbG9uZWFibGVUYWdzW21hcFRhZ10gPQoJICBj
bG9uZWFibGVUYWdzW251bWJlclRhZ10gPSBjbG9uZWFibGVUYWdzW29iamVjdFRhZ10gPQoJICBj
bG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPQoJICBjbG9u
ZWFibGVUYWdzW3N0cmluZ1RhZ10gPSBjbG9uZWFibGVUYWdzW3N5bWJvbFRhZ10gPQoJICBjbG9u
ZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9Cgkg
IGNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRy
dWU7CgkgIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9
CgkgIGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTsKCgkgIC8qKiBVc2VkIHRvIG1h
cCBMYXRpbiBVbmljb2RlIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy4gKi8KCSAgdmFy
IGRlYnVycmVkTGV0dGVycyA9IHsKCSAgICAvLyBMYXRpbi0xIFN1cHBsZW1lbnQgYmxvY2suCgkg
ICAgJ1x4YzAnOiAnQScsICAnXHhjMSc6ICdBJywgJ1x4YzInOiAnQScsICdceGMzJzogJ0EnLCAn
XHhjNCc6ICdBJywgJ1x4YzUnOiAnQScsCgkgICAgJ1x4ZTAnOiAnYScsICAnXHhlMSc6ICdhJywg
J1x4ZTInOiAnYScsICdceGUzJzogJ2EnLCAnXHhlNCc6ICdhJywgJ1x4ZTUnOiAnYScsCgkgICAg
J1x4YzcnOiAnQycsICAnXHhlNyc6ICdjJywKCSAgICAnXHhkMCc6ICdEJywgICdceGYwJzogJ2Qn
LAoJICAgICdceGM4JzogJ0UnLCAgJ1x4YzknOiAnRScsICdceGNhJzogJ0UnLCAnXHhjYic6ICdF
JywKCSAgICAnXHhlOCc6ICdlJywgICdceGU5JzogJ2UnLCAnXHhlYSc6ICdlJywgJ1x4ZWInOiAn
ZScsCgkgICAgJ1x4Y2MnOiAnSScsICAnXHhjZCc6ICdJJywgJ1x4Y2UnOiAnSScsICdceGNmJzog
J0knLAoJICAgICdceGVjJzogJ2knLCAgJ1x4ZWQnOiAnaScsICdceGVlJzogJ2knLCAnXHhlZic6
ICdpJywKCSAgICAnXHhkMSc6ICdOJywgICdceGYxJzogJ24nLAoJICAgICdceGQyJzogJ08nLCAg
J1x4ZDMnOiAnTycsICdceGQ0JzogJ08nLCAnXHhkNSc6ICdPJywgJ1x4ZDYnOiAnTycsICdceGQ4
JzogJ08nLAoJICAgICdceGYyJzogJ28nLCAgJ1x4ZjMnOiAnbycsICdceGY0JzogJ28nLCAnXHhm
NSc6ICdvJywgJ1x4ZjYnOiAnbycsICdceGY4JzogJ28nLAoJICAgICdceGQ5JzogJ1UnLCAgJ1x4
ZGEnOiAnVScsICdceGRiJzogJ1UnLCAnXHhkYyc6ICdVJywKCSAgICAnXHhmOSc6ICd1JywgICdc
eGZhJzogJ3UnLCAnXHhmYic6ICd1JywgJ1x4ZmMnOiAndScsCgkgICAgJ1x4ZGQnOiAnWScsICAn
XHhmZCc6ICd5JywgJ1x4ZmYnOiAneScsCgkgICAgJ1x4YzYnOiAnQWUnLCAnXHhlNic6ICdhZScs
CgkgICAgJ1x4ZGUnOiAnVGgnLCAnXHhmZSc6ICd0aCcsCgkgICAgJ1x4ZGYnOiAnc3MnLAoJICAg
IC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suCgkgICAgJ1x1MDEwMCc6ICdBJywgICdcdTAxMDIn
OiAnQScsICdcdTAxMDQnOiAnQScsCgkgICAgJ1x1MDEwMSc6ICdhJywgICdcdTAxMDMnOiAnYScs
ICdcdTAxMDUnOiAnYScsCgkgICAgJ1x1MDEwNic6ICdDJywgICdcdTAxMDgnOiAnQycsICdcdTAx
MGEnOiAnQycsICdcdTAxMGMnOiAnQycsCgkgICAgJ1x1MDEwNyc6ICdjJywgICdcdTAxMDknOiAn
YycsICdcdTAxMGInOiAnYycsICdcdTAxMGQnOiAnYycsCgkgICAgJ1x1MDEwZSc6ICdEJywgICdc
dTAxMTAnOiAnRCcsICdcdTAxMGYnOiAnZCcsICdcdTAxMTEnOiAnZCcsCgkgICAgJ1x1MDExMic6
ICdFJywgICdcdTAxMTQnOiAnRScsICdcdTAxMTYnOiAnRScsICdcdTAxMTgnOiAnRScsICdcdTAx
MWEnOiAnRScsCgkgICAgJ1x1MDExMyc6ICdlJywgICdcdTAxMTUnOiAnZScsICdcdTAxMTcnOiAn
ZScsICdcdTAxMTknOiAnZScsICdcdTAxMWInOiAnZScsCgkgICAgJ1x1MDExYyc6ICdHJywgICdc
dTAxMWUnOiAnRycsICdcdTAxMjAnOiAnRycsICdcdTAxMjInOiAnRycsCgkgICAgJ1x1MDExZCc6
ICdnJywgICdcdTAxMWYnOiAnZycsICdcdTAxMjEnOiAnZycsICdcdTAxMjMnOiAnZycsCgkgICAg
J1x1MDEyNCc6ICdIJywgICdcdTAxMjYnOiAnSCcsICdcdTAxMjUnOiAnaCcsICdcdTAxMjcnOiAn
aCcsCgkgICAgJ1x1MDEyOCc6ICdJJywgICdcdTAxMmEnOiAnSScsICdcdTAxMmMnOiAnSScsICdc
dTAxMmUnOiAnSScsICdcdTAxMzAnOiAnSScsCgkgICAgJ1x1MDEyOSc6ICdpJywgICdcdTAxMmIn
OiAnaScsICdcdTAxMmQnOiAnaScsICdcdTAxMmYnOiAnaScsICdcdTAxMzEnOiAnaScsCgkgICAg
J1x1MDEzNCc6ICdKJywgICdcdTAxMzUnOiAnaicsCgkgICAgJ1x1MDEzNic6ICdLJywgICdcdTAx
MzcnOiAnaycsICdcdTAxMzgnOiAnaycsCgkgICAgJ1x1MDEzOSc6ICdMJywgICdcdTAxM2InOiAn
TCcsICdcdTAxM2QnOiAnTCcsICdcdTAxM2YnOiAnTCcsICdcdTAxNDEnOiAnTCcsCgkgICAgJ1x1
MDEzYSc6ICdsJywgICdcdTAxM2MnOiAnbCcsICdcdTAxM2UnOiAnbCcsICdcdTAxNDAnOiAnbCcs
ICdcdTAxNDInOiAnbCcsCgkgICAgJ1x1MDE0Myc6ICdOJywgICdcdTAxNDUnOiAnTicsICdcdTAx
NDcnOiAnTicsICdcdTAxNGEnOiAnTicsCgkgICAgJ1x1MDE0NCc6ICduJywgICdcdTAxNDYnOiAn
bicsICdcdTAxNDgnOiAnbicsICdcdTAxNGInOiAnbicsCgkgICAgJ1x1MDE0Yyc6ICdPJywgICdc
dTAxNGUnOiAnTycsICdcdTAxNTAnOiAnTycsCgkgICAgJ1x1MDE0ZCc6ICdvJywgICdcdTAxNGYn
OiAnbycsICdcdTAxNTEnOiAnbycsCgkgICAgJ1x1MDE1NCc6ICdSJywgICdcdTAxNTYnOiAnUics
ICdcdTAxNTgnOiAnUicsCgkgICAgJ1x1MDE1NSc6ICdyJywgICdcdTAxNTcnOiAncicsICdcdTAx
NTknOiAncicsCgkgICAgJ1x1MDE1YSc6ICdTJywgICdcdTAxNWMnOiAnUycsICdcdTAxNWUnOiAn
UycsICdcdTAxNjAnOiAnUycsCgkgICAgJ1x1MDE1Yic6ICdzJywgICdcdTAxNWQnOiAncycsICdc
dTAxNWYnOiAncycsICdcdTAxNjEnOiAncycsCgkgICAgJ1x1MDE2Mic6ICdUJywgICdcdTAxNjQn
OiAnVCcsICdcdTAxNjYnOiAnVCcsCgkgICAgJ1x1MDE2Myc6ICd0JywgICdcdTAxNjUnOiAndCcs
ICdcdTAxNjcnOiAndCcsCgkgICAgJ1x1MDE2OCc6ICdVJywgICdcdTAxNmEnOiAnVScsICdcdTAx
NmMnOiAnVScsICdcdTAxNmUnOiAnVScsICdcdTAxNzAnOiAnVScsICdcdTAxNzInOiAnVScsCgkg
ICAgJ1x1MDE2OSc6ICd1JywgICdcdTAxNmInOiAndScsICdcdTAxNmQnOiAndScsICdcdTAxNmYn
OiAndScsICdcdTAxNzEnOiAndScsICdcdTAxNzMnOiAndScsCgkgICAgJ1x1MDE3NCc6ICdXJywg
ICdcdTAxNzUnOiAndycsCgkgICAgJ1x1MDE3Nic6ICdZJywgICdcdTAxNzcnOiAneScsICdcdTAx
NzgnOiAnWScsCgkgICAgJ1x1MDE3OSc6ICdaJywgICdcdTAxN2InOiAnWicsICdcdTAxN2QnOiAn
WicsCgkgICAgJ1x1MDE3YSc6ICd6JywgICdcdTAxN2MnOiAneicsICdcdTAxN2UnOiAneicsCgkg
ICAgJ1x1MDEzMic6ICdJSicsICdcdTAxMzMnOiAnaWonLAoJICAgICdcdTAxNTInOiAnT2UnLCAn
XHUwMTUzJzogJ29lJywKCSAgICAnXHUwMTQ5JzogIiduIiwgJ1x1MDE3Zic6ICdzJwoJICB9OwoK
CSAgLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi8KCSAgdmFy
IGh0bWxFc2NhcGVzID0gewoJICAgICcmJzogJyZhbXA7JywKCSAgICAnPCc6ICcmbHQ7JywKCSAg
ICAnPic6ICcmZ3Q7JywKCSAgICAnIic6ICcmcXVvdDsnLAoJICAgICInIjogJyYjMzk7JwoJICB9
OwoKCSAgLyoqIFVzZWQgdG8gbWFwIEhUTUwgZW50aXRpZXMgdG8gY2hhcmFjdGVycy4gKi8KCSAg
dmFyIGh0bWxVbmVzY2FwZXMgPSB7CgkgICAgJyZhbXA7JzogJyYnLAoJICAgICcmbHQ7JzogJzwn
LAoJICAgICcmZ3Q7JzogJz4nLAoJICAgICcmcXVvdDsnOiAnIicsCgkgICAgJyYjMzk7JzogIici
CgkgIH07CgoJICAvKiogVXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyBmb3IgaW5jbHVzaW9uIGlu
IGNvbXBpbGVkIHN0cmluZyBsaXRlcmFscy4gKi8KCSAgdmFyIHN0cmluZ0VzY2FwZXMgPSB7Cgkg
ICAgJ1xcJzogJ1xcJywKCSAgICAiJyI6ICInIiwKCSAgICAnXG4nOiAnbicsCgkgICAgJ1xyJzog
J3InLAoJICAgICdcdTIwMjgnOiAndTIwMjgnLAoJICAgICdcdTIwMjknOiAndTIwMjknCgkgIH07
CgoJICAvKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kg
b24gYHJvb3RgLiAqLwoJICB2YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0LAoJICAgICAg
ZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7CgoJICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGds
b2JhbGAgZnJvbSBOb2RlLmpzLiAqLwoJICB2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwg
PT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9i
YWw7CgoJICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqLwoJICB2YXIgZnJlZVNl
bGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBP
YmplY3QgJiYgc2VsZjsKCgkgIC8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwg
b2JqZWN0LiAqLwoJICB2YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rp
b24oJ3JldHVybiB0aGlzJykoKTsKCgkgIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0
c2AuICovCgkgIHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYm
IGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0czsKCgkgIC8qKiBEZXRlY3Qg
ZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi8KCSAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0
cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVU
eXBlICYmIG1vZHVsZTsKCgkgIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5z
aW9uIGBtb2R1bGUuZXhwb3J0c2AuICovCgkgIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVs
ZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzOwoKCSAgLyoqIERldGVjdCBm
cmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovCgkgIHZhciBmcmVlUHJvY2Vz
cyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzOwoKCSAgLyoqIFVzZWQgdG8g
YWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovCgkgIHZhciBub2RlVXRpbCA9IChmdW5j
dGlvbigpIHsKCSAgICB0cnkgewoJICAgICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5q
cyAxMCsuCgkgICAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWly
ZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlczsKCgkgICAgICBpZiAodHlwZXMp
IHsKCSAgICAgICAgcmV0dXJuIHR5cGVzOwoJICAgICAgfQoKCSAgICAgIC8vIExlZ2FjeSBgcHJv
Y2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuCgkgICAgICByZXR1cm4gZnJl
ZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1
dGlsJyk7CgkgICAgfSBjYXRjaCAoZSkge30KCSAgfSgpKTsKCgkgIC8qIE5vZGUuanMgaGVscGVy
IHJlZmVyZW5jZXMuICovCgkgIHZhciBub2RlSXNBcnJheUJ1ZmZlciA9IG5vZGVVdGlsICYmIG5v
ZGVVdGlsLmlzQXJyYXlCdWZmZXIsCgkgICAgICBub2RlSXNEYXRlID0gbm9kZVV0aWwgJiYgbm9k
ZVV0aWwuaXNEYXRlLAoJICAgICAgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNN
YXAsCgkgICAgICBub2RlSXNSZWdFeHAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1JlZ0V4cCwK
CSAgICAgIG5vZGVJc1NldCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzU2V0LAoJICAgICAgbm9k
ZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTsKCgkgIC8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwoKCSAgLyoqCgkgICAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRv
IGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2AKCSAgICogd2l0
aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBh
cmdzYC4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBU
aGUgZnVuY3Rpb24gdG8gaW52b2tlLgoJICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlz
YCBiaW5kaW5nIG9mIGBmdW5jYC4KCSAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1l
bnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC4KCSAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhl
IHJlc3VsdCBvZiBgZnVuY2AuCgkgICAqLwoJICBmdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJn
LCBhcmdzKSB7CgkgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkgewoJICAgICAgY2FzZSAwOiByZXR1
cm4gZnVuYy5jYWxsKHRoaXNBcmcpOwoJICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRo
aXNBcmcsIGFyZ3NbMF0pOwoJICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcs
IGFyZ3NbMF0sIGFyZ3NbMV0pOwoJICAgICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNB
cmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOwoJICAgIH0KCSAgICByZXR1cm4gZnVuYy5h
cHBseSh0aGlzQXJnLCBhcmdzKTsKCSAgfQoKCSAgLyoqCgkgICAqIEEgc3BlY2lhbGl6ZWQgdmVy
c2lvbiBvZiBgYmFzZUFnZ3JlZ2F0b3JgIGZvciBhcnJheXMuCgkgICAqCgkgICAqIEBwcml2YXRl
CgkgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4K
CSAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3Vt
dWxhdG9yYCB2YWx1ZXMuCgkgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVy
YXRlZSB0byB0cmFuc2Zvcm0ga2V5cy4KCSAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9y
IFRoZSBpbml0aWFsIGFnZ3JlZ2F0ZWQgb2JqZWN0LgoJICAgKiBAcmV0dXJucyB7RnVuY3Rpb259
IFJldHVybnMgYGFjY3VtdWxhdG9yYC4KCSAgICovCgkgIGZ1bmN0aW9uIGFycmF5QWdncmVnYXRv
cihhcnJheSwgc2V0dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHsKCSAgICB2YXIgaW5kZXgg
PSAtMSwKCSAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7
CgoJICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICB2YXIgdmFsdWUgPSBhcnJh
eVtpbmRleF07CgkgICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1
ZSksIGFycmF5KTsKCSAgICB9CgkgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwoJICB9CgoJICAvKioK
CSAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZvckVhY2hgIGZvciBhcnJheXMgd2l0
aG91dCBzdXBwb3J0IGZvcgoJICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJICAgKgoJICAgKiBA
cHJpdmF0ZQoJICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRl
IG92ZXIuCgkgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZv
a2VkIHBlciBpdGVyYXRpb24uCgkgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlg
LgoJICAgKi8KCSAgZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkgewoJICAgIHZh
ciBpbmRleCA9IC0xLAoJICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5
Lmxlbmd0aDsKCgkgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgIGlmIChpdGVy
YXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkgPT09IGZhbHNlKSB7CgkgICAgICAgIGJy
ZWFrOwoJICAgICAgfQoJICAgIH0KCSAgICByZXR1cm4gYXJyYXk7CgkgIH0KCgkgIC8qKgoJICAg
KiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCBmb3IgYXJyYXlzIHdp
dGhvdXQgc3VwcG9ydCBmb3IKCSAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy4KCSAgICoKCSAgICog
QHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0
ZSBvdmVyLgoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52
b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5
YC4KCSAgICovCgkgIGZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkgewoJ
ICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCgkgICAg
d2hpbGUgKGxlbmd0aC0tKSB7CgkgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbGVuZ3RoXSwgbGVu
Z3RoLCBhcnJheSkgPT09IGZhbHNlKSB7CgkgICAgICAgIGJyZWFrOwoJICAgICAgfQoJICAgIH0K
CSAgICByZXR1cm4gYXJyYXk7CgkgIH0KCgkgIC8qKgoJICAgKiBBIHNwZWNpYWxpemVkIHZlcnNp
b24gb2YgYF8uZXZlcnlgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvcgoJICAgKiBpdGVy
YXRlZSBzaG9ydGhhbmRzLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge0FycmF5
fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuCgkgICAqIEBwYXJhbSB7RnVuY3Rp
b259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhl
IHByZWRpY2F0ZSBjaGVjaywKCSAgICogIGVsc2UgYGZhbHNlYC4KCSAgICovCgkgIGZ1bmN0aW9u
IGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkgewoJICAgIHZhciBpbmRleCA9IC0xLAoJICAg
ICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCgkgICAgd2hp
bGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4
XSwgaW5kZXgsIGFycmF5KSkgewoJICAgICAgICByZXR1cm4gZmFsc2U7CgkgICAgICB9CgkgICAg
fQoJICAgIHJldHVybiB0cnVlOwoJICB9CgoJICAvKioKCSAgICogQSBzcGVjaWFsaXplZCB2ZXJz
aW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yCgkgICAqIGl0
ZXJhdGVlIHNob3J0aGFuZHMuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7QXJy
YXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICogQHBhcmFtIHtGdW5j
dGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAq
IEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LgoJICAgKi8K
CSAgZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkgewoJICAgIHZhciBpbmRl
eCA9IC0xLAoJICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0
aCwKCSAgICAgICAgcmVzSW5kZXggPSAwLAoJICAgICAgICByZXN1bHQgPSBbXTsKCgkgICAgd2hp
bGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTsK
CSAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHsKCSAgICAgICAgcmVz
dWx0W3Jlc0luZGV4KytdID0gdmFsdWU7CgkgICAgICB9CgkgICAgfQoJICAgIHJldHVybiByZXN1
bHQ7CgkgIH0KCgkgIC8qKgoJICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVk
ZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvcgoJICAgKiBzcGVjaWZ5aW5nIGFuIGlu
ZGV4IHRvIHNlYXJjaCBmcm9tLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge0Fy
cmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgKiBAcGFyYW0geyp9IHRhcmdl
dCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KCSAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVy
bnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuCgkgICAqLwoJICBm
dW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkgewoJICAgIHZhciBsZW5ndGggPSBh
cnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCSAgICByZXR1cm4gISFsZW5ndGggJiYg
YmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xOwoJICB9CgoJICAvKioKCSAgICogVGhp
cyBmdW5jdGlvbiBpcyBsaWtlIGBhcnJheUluY2x1ZGVzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRz
IGEgY29tcGFyYXRvci4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0g
W2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICogQHBhcmFtIHsqfSB0YXJnZXQgVGhl
IHZhbHVlIHRvIHNlYXJjaCBmb3IuCgkgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3Ig
VGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICogQHJldHVybnMge2Jvb2xl
YW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuCgkg
ICAqLwoJICBmdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSwgdmFsdWUsIGNvbXBhcmF0
b3IpIHsKCSAgICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVs
bCA/IDAgOiBhcnJheS5sZW5ndGg7CgoJICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7Cgkg
ICAgICBpZiAoY29tcGFyYXRvcih2YWx1ZSwgYXJyYXlbaW5kZXhdKSkgewoJICAgICAgICByZXR1
cm4gdHJ1ZTsKCSAgICAgIH0KCSAgICB9CgkgICAgcmV0dXJuIGZhbHNlOwoJICB9CgoJICAvKioK
CSAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0
IHN1cHBvcnQgZm9yIGl0ZXJhdGVlCgkgICAqIHNob3J0aGFuZHMuCgkgICAqCgkgICAqIEBwcml2
YXRlCgkgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zl
ci4KCSAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQg
cGVyIGl0ZXJhdGlvbi4KCSAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFw
cGVkIGFycmF5LgoJICAgKi8KCSAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7
CgkgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAw
IDogYXJyYXkubGVuZ3RoLAoJICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpOwoKCSAgICB3
aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVl
KGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTsKCSAgICB9CgkgICAgcmV0dXJuIHJlc3VsdDsK
CSAgfQoKCSAgLyoqCgkgICAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBh
cnJheWAuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRo
ZSBhcnJheSB0byBtb2RpZnkuCgkgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVz
IHRvIGFwcGVuZC4KCSAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuCgkgICAq
LwoJICBmdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykgewoJICAgIHZhciBpbmRleCA9
IC0xLAoJICAgICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLAoJICAgICAgICBvZmZzZXQgPSBh
cnJheS5sZW5ndGg7CgoJICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICBhcnJh
eVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdOwoJICAgIH0KCSAgICByZXR1cm4gYXJy
YXk7CgkgIH0KCgkgIC8qKgoJICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNl
YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IKCSAgICogaXRlcmF0ZWUgc2hvcnRoYW5k
cy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUg
YXJyYXkgdG8gaXRlcmF0ZSBvdmVyLgoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBU
aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgKiBAcGFyYW0geyp9IFthY2N1
bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRB
Y2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgIGFzCgkgICAq
ICB0aGUgaW5pdGlhbCB2YWx1ZS4KCSAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3Vt
dWxhdGVkIHZhbHVlLgoJICAgKi8KCSAgZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJh
dGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7CgkgICAgdmFyIGluZGV4ID0gLTEsCgkgICAg
ICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoOwoKCSAgICBpZiAo
aW5pdEFjY3VtICYmIGxlbmd0aCkgewoJICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4
XTsKCSAgICB9CgkgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgIGFjY3VtdWxh
dG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTsK
CSAgICB9CgkgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwoJICB9CgoJICAvKioKCSAgICogQSBzcGVj
aWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3Vw
cG9ydCBmb3IKCSAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy4KCSAgICoKCSAgICogQHByaXZhdGUK
CSAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLgoJ
ICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIg
aXRlcmF0aW9uLgoJICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFs
dWUuCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUg
bGFzdCBlbGVtZW50IG9mIGBhcnJheWAgYXMKCSAgICogIHRoZSBpbml0aWFsIHZhbHVlLgoJICAg
KiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuCgkgICAqLwoJICBm
dW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGlu
aXRBY2N1bSkgewoJICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxl
bmd0aDsKCSAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkgewoJICAgICAgYWNjdW11bGF0b3Ig
PSBhcnJheVstLWxlbmd0aF07CgkgICAgfQoJICAgIHdoaWxlIChsZW5ndGgtLSkgewoJICAgICAg
YWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3Ro
LCBhcnJheSk7CgkgICAgfQoJICAgIHJldHVybiBhY2N1bXVsYXRvcjsKCSAgfQoKCSAgLyoqCgkg
ICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQg
c3VwcG9ydCBmb3IgaXRlcmF0ZWUKCSAgICogc2hvcnRoYW5kcy4KCSAgICoKCSAgICogQHByaXZh
dGUKCSAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVy
LgoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQg
cGVyIGl0ZXJhdGlvbi4KCSAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlm
IGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLAoJICAgKiAgZWxzZSBgZmFs
c2VgLgoJICAgKi8KCSAgZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHsKCSAg
ICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBh
cnJheS5sZW5ndGg7CgoJICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICBpZiAo
cHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgewoJICAgICAgICByZXR1cm4g
dHJ1ZTsKCSAgICAgIH0KCSAgICB9CgkgICAgcmV0dXJuIGZhbHNlOwoJICB9CgoJICAvKioKCSAg
ICogR2V0cyB0aGUgc2l6ZSBvZiBhbiBBU0NJSSBgc3RyaW5nYC4KCSAgICoKCSAgICogQHByaXZh
dGUKCSAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuCgkgICAq
IEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLgoJICAgKi8KCSAgdmFy
IGFzY2lpU2l6ZSA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7CgoJICAvKioKCSAgICogQ29udmVy
dHMgYW4gQVNDSUkgYHN0cmluZ2AgdG8gYW4gYXJyYXkuCgkgICAqCgkgICAqIEBwcml2YXRlCgkg
ICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LgoJICAgKiBA
cmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS4KCSAgICovCgkgIGZ1
bmN0aW9uIGFzY2lpVG9BcnJheShzdHJpbmcpIHsKCSAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCcn
KTsKCSAgfQoKCSAgLyoqCgkgICAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFy
cmF5IG9mIGl0cyB3b3Jkcy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtzdHJp
bmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC4KCSAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5z
IHRoZSB3b3JkcyBvZiBgc3RyaW5nYC4KCSAgICovCgkgIGZ1bmN0aW9uIGFzY2lpV29yZHMoc3Ry
aW5nKSB7CgkgICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107CgkgIH0K
CgkgIC8qKgoJICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8u
ZmluZEtleWAgYW5kIGBfLmZpbmRMYXN0S2V5YCwKCSAgICogd2l0aG91dCBzdXBwb3J0IGZvciBp
dGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYAoJICAg
KiB1c2luZyBgZWFjaEZ1bmNgLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge0Fy
cmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LgoJICAgKiBA
cGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJh
dGlvbi4KCSAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0
ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuCgkgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBm
b3VuZCBlbGVtZW50IG9yIGl0cyBrZXksIGVsc2UgYHVuZGVmaW5lZGAuCgkgICAqLwoJICBmdW5j
dGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7CgkgICAg
dmFyIHJlc3VsdDsKCSAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5
LCBjb2xsZWN0aW9uKSB7CgkgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rp
b24pKSB7CgkgICAgICAgIHJlc3VsdCA9IGtleTsKCSAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAg
ICAgfQoJICAgIH0pOwoJICAgIHJldHVybiByZXN1bHQ7CgkgIH0KCgkgIC8qKgoJICAgKiBUaGUg
YmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4
YCB3aXRob3V0CgkgICAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuCgkgICAqCgkg
ICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNw
ZWN0LgoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9r
ZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5k
ZXggdG8gc2VhcmNoIGZyb20uCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3Bl
Y2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LgoJICAgKiBAcmV0dXJucyB7bnVtYmVy
fSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLgoJICAg
Ki8KCSAgZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgs
IGZyb21SaWdodCkgewoJICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsCgkgICAgICAgIGlu
ZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7CgoJICAgIHdoaWxlICgoZnJv
bVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7CgkgICAgICBpZiAocHJlZGlj
YXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgewoJICAgICAgICByZXR1cm4gaW5kZXg7
CgkgICAgICB9CgkgICAgfQoJICAgIHJldHVybiAtMTsKCSAgfQoKCSAgLyoqCgkgICAqIFRoZSBi
YXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91
bmRzIGNoZWNrcy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0gYXJy
YXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVl
IHRvIHNlYXJjaCBmb3IuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4
IHRvIHNlYXJjaCBmcm9tLgoJICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLgoJICAgKi8KCSAgZnVuY3Rpb24gYmFz
ZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHsKCSAgICByZXR1cm4gdmFsdWUgPT09
IHZhbHVlCgkgICAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpCgkg
ICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTsKCSAgfQoK
CSAgLyoqCgkgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUluZGV4T2ZgIGV4Y2VwdCB0
aGF0IGl0IGFjY2VwdHMgYSBjb21wYXJhdG9yLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBA
cGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICogQHBhcmFtIHsq
fSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KCSAgICogQHBhcmFtIHtudW1iZXJ9IGZy
b21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uCgkgICAqIEBwYXJhbSB7RnVuY3Rpb259
IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICogQHJl
dHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVs
c2UgYC0xYC4KCSAgICovCgkgIGZ1bmN0aW9uIGJhc2VJbmRleE9mV2l0aChhcnJheSwgdmFsdWUs
IGZyb21JbmRleCwgY29tcGFyYXRvcikgewoJICAgIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEs
CgkgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCgkgICAgd2hpbGUgKCsraW5kZXggPCBs
ZW5ndGgpIHsKCSAgICAgIGlmIChjb21wYXJhdG9yKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7Cgkg
ICAgICAgIHJldHVybiBpbmRleDsKCSAgICAgIH0KCSAgICB9CgkgICAgcmV0dXJuIC0xOwoJICB9
CgoJICAvKioKCSAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhv
dXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAq
IEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLgoJ
ICAgKi8KCSAgZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7CgkgICAgcmV0dXJuIHZhbHVlICE9
PSB2YWx1ZTsKCSAgfQoKCSAgLyoqCgkgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBf
Lm1lYW5gIGFuZCBgXy5tZWFuQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IKCSAgICogaXRlcmF0ZWUg
c2hvcnRoYW5kcy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0gYXJy
YXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRl
cmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICogQHJldHVybnMg
e251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi4KCSAgICovCgkgIGZ1bmN0aW9uIGJhc2VNZWFuKGFy
cmF5LCBpdGVyYXRlZSkgewoJICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFy
cmF5Lmxlbmd0aDsKCSAgICByZXR1cm4gbGVuZ3RoID8gKGJhc2VTdW0oYXJyYXksIGl0ZXJhdGVl
KSAvIGxlbmd0aCkgOiBOQU47CgkgIH0KCgkgIC8qKgoJICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRh
dGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLgoJICAg
KgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhl
IHByb3BlcnR5IHRvIGdldC4KCSAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBu
ZXcgYWNjZXNzb3IgZnVuY3Rpb24uCgkgICAqLwoJICBmdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5
KSB7CgkgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewoJICAgICAgcmV0dXJuIG9iamVjdCA9
PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07CgkgICAgfTsKCSAgfQoKCSAgLyoqCgkg
ICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3Vw
cG9ydCBmb3IgZGVlcCBwYXRocy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtP
YmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgKiBAcmV0dXJucyB7RnVuY3Rp
b259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi4KCSAgICovCgkgIGZ1bmN0aW9u
IGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkgewoJICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHsKCSAg
ICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldOwoJICAg
IH07CgkgIH0KCgkgIC8qKgoJICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZWR1
Y2VgIGFuZCBgXy5yZWR1Y2VSaWdodGAsIHdpdGhvdXQgc3VwcG9ydAoJICAgKiBmb3IgaXRlcmF0
ZWUgc2hvcnRoYW5kcywgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgY29sbGVjdGlvbmAgdXNpbmcgYGVh
Y2hGdW5jYC4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9
IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJ
ICAgKiBAcGFyYW0geyp9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIHZhbHVlLgoJICAgKiBAcGFy
YW0ge2Jvb2xlYW59IGluaXRBY2N1bSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBvciBsYXN0IGVs
ZW1lbnQgb2YKCSAgICogIGBjb2xsZWN0aW9uYCBhcyB0aGUgaW5pdGlhbCB2YWx1ZS4KCSAgICog
QHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBg
Y29sbGVjdGlvbmAuCgkgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2
YWx1ZS4KCSAgICovCgkgIGZ1bmN0aW9uIGJhc2VSZWR1Y2UoY29sbGVjdGlvbiwgaXRlcmF0ZWUs
IGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGVhY2hGdW5jKSB7CgkgICAgZWFjaEZ1bmMoY29sbGVj
dGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CgkgICAgICBhY2N1bXVs
YXRvciA9IGluaXRBY2N1bQoJICAgICAgICA/IChpbml0QWNjdW0gPSBmYWxzZSwgdmFsdWUpCgkg
ICAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7
CgkgICAgfSk7CgkgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwoJICB9CgoJICAvKioKCSAgICogVGhl
IGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydEJ5YCB3aGljaCB1c2VzIGBjb21wYXJlcmAg
dG8gZGVmaW5lIHRoZQoJICAgKiBzb3J0IG9yZGVyIG9mIGBhcnJheWAgYW5kIHJlcGxhY2VzIGNy
aXRlcmlhIG9iamVjdHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nCgkgICAqIHZhbHVlcy4KCSAg
ICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRv
IHNvcnQuCgkgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVyIFRoZSBmdW5jdGlvbiB0byBk
ZWZpbmUgc29ydCBvcmRlci4KCSAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAu
CgkgICAqLwoJICBmdW5jdGlvbiBiYXNlU29ydEJ5KGFycmF5LCBjb21wYXJlcikgewoJICAgIHZh
ciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgoJICAgIGFycmF5LnNvcnQoY29tcGFyZXIpOwoJICAg
IHdoaWxlIChsZW5ndGgtLSkgewoJICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0u
dmFsdWU7CgkgICAgfQoJICAgIHJldHVybiBhcnJheTsKCSAgfQoKCSAgLyoqCgkgICAqIFRoZSBi
YXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnN1bWAgYW5kIGBfLnN1bUJ5YCB3aXRob3V0IHN1cHBv
cnQgZm9yCgkgICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuCgkgICAqCgkgICAqIEBwcml2YXRlCgkg
ICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuCgkgICAq
IEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVy
YXRpb24uCgkgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS4KCSAgICovCgkg
IGZ1bmN0aW9uIGJhc2VTdW0oYXJyYXksIGl0ZXJhdGVlKSB7CgkgICAgdmFyIHJlc3VsdCwKCSAg
ICAgICAgaW5kZXggPSAtMSwKCSAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKCSAgICB3
aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgdmFyIGN1cnJlbnQgPSBpdGVyYXRlZShh
cnJheVtpbmRleF0pOwoJICAgICAgaWYgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCkgewoJICAgICAg
ICByZXN1bHQgPSByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGN1cnJlbnQgOiAocmVzdWx0ICsgY3Vy
cmVudCk7CgkgICAgICB9CgkgICAgfQoJICAgIHJldHVybiByZXN1bHQ7CgkgIH0KCgkgIC8qKgoJ
ICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0
IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzCgkgICAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tz
LgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVy
IG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLgoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBp
dGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgKiBAcmV0dXJu
cyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuCgkgICAqLwoJICBmdW5jdGlv
biBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHsKCSAgICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAg
cmVzdWx0ID0gQXJyYXkobik7CgoJICAgIHdoaWxlICgrK2luZGV4IDwgbikgewoJICAgICAgcmVz
dWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTsKCSAgICB9CgkgICAgcmV0dXJuIHJlc3VsdDsK
CSAgfQoKCSAgLyoqCgkgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvUGFpcnNg
IGFuZCBgXy50b1BhaXJzSW5gIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkKCSAgICogb2Yga2V5LXZh
bHVlIHBhaXJzIGZvciBgb2JqZWN0YCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1l
cyBvZiBgcHJvcHNgLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge09iamVjdH0g
b2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRo
ZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci4KCSAgICogQHJldHVybnMge09iamVj
dH0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLgoJICAgKi8KCSAgZnVuY3Rpb24gYmFzZVRv
UGFpcnMob2JqZWN0LCBwcm9wcykgewoJICAgIHJldHVybiBhcnJheU1hcChwcm9wcywgZnVuY3Rp
b24oa2V5KSB7CgkgICAgICByZXR1cm4gW2tleSwgb2JqZWN0W2tleV1dOwoJICAgIH0pOwoJICB9
CgoJICAvKioKCSAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhv
dXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS4KCSAgICoKCSAgICogQHByaXZhdGUKCSAg
ICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBm
b3IuCgkgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5j
dGlvbi4KCSAgICovCgkgIGZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7CgkgICAgcmV0dXJuIGZ1
bmN0aW9uKHZhbHVlKSB7CgkgICAgICByZXR1cm4gZnVuYyh2YWx1ZSk7CgkgICAgfTsKCSAgfQoK
CSAgLyoqCgkgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBf
LnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuCgkgICAqIGFycmF5IG9mIGBvYmplY3RgIHByb3Bl
cnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lcwoJICAgKiBvZiBg
cHJvcHNgLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0
IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9w
ZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci4KCSAgICogQHJldHVybnMge09iamVjdH0gUmV0
dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLgoJICAgKi8KCSAgZnVuY3Rpb24gYmFz
ZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7CgkgICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5j
dGlvbihrZXkpIHsKCSAgICAgIHJldHVybiBvYmplY3Rba2V5XTsKCSAgICB9KTsKCSAgfQoKCSAg
LyoqCgkgICAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy4KCSAg
ICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0
byBxdWVyeS4KCSAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0
byBjaGVjay4KCSAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVu
dHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC4KCSAgICovCgkgIGZ1bmN0aW9uIGNh
Y2hlSGFzKGNhY2hlLCBrZXkpIHsKCSAgICByZXR1cm4gY2FjaGUuaGFzKGtleSk7CgkgIH0KCgkg
IC8qKgoJICAgKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltU3RhcnRgIHRvIGdldCB0aGUg
aW5kZXggb2YgdGhlIGZpcnN0IHN0cmluZyBzeW1ib2wKCSAgICogdGhhdCBpcyBub3QgZm91bmQg
aW4gdGhlIGNoYXJhY3RlciBzeW1ib2xzLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFy
YW0ge0FycmF5fSBzdHJTeW1ib2xzIFRoZSBzdHJpbmcgc3ltYm9scyB0byBpbnNwZWN0LgoJICAg
KiBAcGFyYW0ge0FycmF5fSBjaHJTeW1ib2xzIFRoZSBjaGFyYWN0ZXIgc3ltYm9scyB0byBmaW5k
LgoJICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qg
dW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuCgkgICAqLwoJICBmdW5jdGlvbiBjaGFyc1N0YXJ0SW5k
ZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scykgewoJICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAg
ICBsZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDsKCgkgICAgd2hpbGUgKCsraW5kZXggPCBsZW5n
dGggJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEp
IHt9CgkgICAgcmV0dXJuIGluZGV4OwoJICB9CgoJICAvKioKCSAgICogVXNlZCBieSBgXy50cmlt
YCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzdHJpbmcgc3lt
Ym9sCgkgICAqIHRoYXQgaXMgbm90IGZvdW5kIGluIHRoZSBjaGFyYWN0ZXIgc3ltYm9scy4KCSAg
ICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtBcnJheX0gc3RyU3ltYm9scyBUaGUgc3Ry
aW5nIHN5bWJvbHMgdG8gaW5zcGVjdC4KCSAgICogQHBhcmFtIHtBcnJheX0gY2hyU3ltYm9scyBU
aGUgY2hhcmFjdGVyIHN5bWJvbHMgdG8gZmluZC4KCSAgICogQHJldHVybnMge251bWJlcn0gUmV0
dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgdW5tYXRjaGVkIHN0cmluZyBzeW1ib2wuCgkgICAq
LwoJICBmdW5jdGlvbiBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIGNoclN5bWJvbHMpIHsKCSAg
ICB2YXIgaW5kZXggPSBzdHJTeW1ib2xzLmxlbmd0aDsKCgkgICAgd2hpbGUgKGluZGV4LS0gJiYg
YmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9Cgkg
ICAgcmV0dXJuIGluZGV4OwoJICB9CgoJICAvKioKCSAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGBw
bGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC4KCSAgICoKCSAgICogQHByaXZhdGUK
CSAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAqIEBw
YXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuCgkgICAq
IEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LgoJICAgKi8K
CSAgZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikgewoJICAgIHZhciBs
ZW5ndGggPSBhcnJheS5sZW5ndGgsCgkgICAgICAgIHJlc3VsdCA9IDA7CgoJICAgIHdoaWxlIChs
ZW5ndGgtLSkgewoJICAgICAgaWYgKGFycmF5W2xlbmd0aF0gPT09IHBsYWNlaG9sZGVyKSB7Cgkg
ICAgICAgICsrcmVzdWx0OwoJICAgICAgfQoJICAgIH0KCSAgICByZXR1cm4gcmVzdWx0OwoJICB9
CgoJICAvKioKCSAgICogVXNlZCBieSBgXy5kZWJ1cnJgIHRvIGNvbnZlcnQgTGF0aW4tMSBTdXBw
bGVtZW50IGFuZCBMYXRpbiBFeHRlbmRlZC1BCgkgICAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4g
bGV0dGVycy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtzdHJpbmd9IGxldHRl
ciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLgoJICAgKiBAcmV0dXJucyB7c3RyaW5nfSBS
ZXR1cm5zIHRoZSBkZWJ1cnJlZCBsZXR0ZXIuCgkgICAqLwoJICB2YXIgZGVidXJyTGV0dGVyID0g
YmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTsKCgkgIC8qKgoJICAgKiBVc2VkIGJ5IGBf
LmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuCgkgICAqCgkg
ICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFj
dGVyIHRvIGVzY2FwZS4KCSAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBl
ZCBjaGFyYWN0ZXIuCgkgICAqLwoJICB2YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlP
ZihodG1sRXNjYXBlcyk7CgoJICAvKioKCSAgICogVXNlZCBieSBgXy50ZW1wbGF0ZWAgdG8gZXNj
YXBlIGNoYXJhY3RlcnMgZm9yIGluY2x1c2lvbiBpbiBjb21waWxlZCBzdHJpbmcgbGl0ZXJhbHMu
CgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNo
ZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS4KCSAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0
aGUgZXNjYXBlZCBjaGFyYWN0ZXIuCgkgICAqLwoJICBmdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFy
KGNocikgewoJICAgIHJldHVybiAnXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdOwoJICB9CgoJICAv
KioKCSAgICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuCgkgICAqCgkgICAq
IEBwcml2YXRlCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1
ZXJ5LgoJICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRv
IGdldC4KCSAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLgoJICAg
Ki8KCSAgZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHsKCSAgICByZXR1cm4gb2JqZWN0
ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTsKCSAgfQoKCSAgLyoqCgkgICAqIENo
ZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuCgkgICAqCgkgICAqIEBw
cml2YXRlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0
LgoJICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMg
Zm91bmQsIGVsc2UgYGZhbHNlYC4KCSAgICovCgkgIGZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5n
KSB7CgkgICAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7CgkgIH0KCgkgIC8qKgoJ
ICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgYSB3b3JkIGNvbXBvc2VkIG9mIFVuaWNv
ZGUgc3ltYm9scy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtzdHJpbmd9IHN0
cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuCgkgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1
cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC4KCSAgICovCgkgIGZ1
bmN0aW9uIGhhc1VuaWNvZGVXb3JkKHN0cmluZykgewoJICAgIHJldHVybiByZUhhc1VuaWNvZGVX
b3JkLnRlc3Qoc3RyaW5nKTsKCSAgfQoKCSAgLyoqCgkgICAqIENvbnZlcnRzIGBpdGVyYXRvcmAg
dG8gYW4gYXJyYXkuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBp
dGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY29udmVydC4KCSAgICogQHJldHVybnMge0FycmF5fSBS
ZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuCgkgICAqLwoJICBmdW5jdGlvbiBpdGVyYXRvclRv
QXJyYXkoaXRlcmF0b3IpIHsKCSAgICB2YXIgZGF0YSwKCSAgICAgICAgcmVzdWx0ID0gW107CgoJ
ICAgIHdoaWxlICghKGRhdGEgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKCSAgICAgIHJlc3Vs
dC5wdXNoKGRhdGEudmFsdWUpOwoJICAgIH0KCSAgICByZXR1cm4gcmVzdWx0OwoJICB9CgoJICAv
KioKCSAgICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy4KCSAgICoKCSAg
ICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQu
CgkgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLgoJICAg
Ki8KCSAgZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHsKCSAgICB2YXIgaW5kZXggPSAtMSwKCSAg
ICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpOwoKCSAgICBtYXAuZm9yRWFjaChmdW5jdGlv
bih2YWx1ZSwga2V5KSB7CgkgICAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07Cgkg
ICAgfSk7CgkgICAgcmV0dXJuIHJlc3VsdDsKCSAgfQoKCSAgLyoqCgkgICAqIENyZWF0ZXMgYSB1
bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5z
Zm9ybWVkLgoJICAgKgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5j
IFRoZSBmdW5jdGlvbiB0byB3cmFwLgoJICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0g
VGhlIGFyZ3VtZW50IHRyYW5zZm9ybS4KCSAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5z
IHRoZSBuZXcgZnVuY3Rpb24uCgkgICAqLwoJICBmdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5z
Zm9ybSkgewoJICAgIHJldHVybiBmdW5jdGlvbihhcmcpIHsKCSAgICAgIHJldHVybiBmdW5jKHRy
YW5zZm9ybShhcmcpKTsKCSAgICB9OwoJICB9CgoJICAvKioKCSAgICogUmVwbGFjZXMgYWxsIGBw
bGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9s
ZGVyCgkgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuCgkgICAqCgkg
ICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2Rp
ZnkuCgkgICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxh
Y2UuCgkgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNl
aG9sZGVyIGluZGV4ZXMuCgkgICAqLwoJICBmdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwg
cGxhY2Vob2xkZXIpIHsKCSAgICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgbGVuZ3RoID0gYXJy
YXkubGVuZ3RoLAoJICAgICAgICByZXNJbmRleCA9IDAsCgkgICAgICAgIHJlc3VsdCA9IFtdOwoK
CSAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgdmFyIHZhbHVlID0gYXJyYXlb
aW5kZXhdOwoJICAgICAgaWYgKHZhbHVlID09PSBwbGFjZWhvbGRlciB8fCB2YWx1ZSA9PT0gUExB
Q0VIT0xERVIpIHsKCSAgICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7CgkgICAgICAg
IHJlc3VsdFtyZXNJbmRleCsrXSA9IGluZGV4OwoJICAgICAgfQoJICAgIH0KCSAgICByZXR1cm4g
cmVzdWx0OwoJICB9CgoJICAvKioKCSAgICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2Yg
aXRzIHZhbHVlcy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBhcmFtIHtPYmplY3R9IHNl
dCBUaGUgc2V0IHRvIGNvbnZlcnQuCgkgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUg
dmFsdWVzLgoJICAgKi8KCSAgZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHsKCSAgICB2YXIgaW5k
ZXggPSAtMSwKCSAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpOwoKCSAgICBzZXQuZm9y
RWFjaChmdW5jdGlvbih2YWx1ZSkgewoJICAgICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7Cgkg
ICAgfSk7CgkgICAgcmV0dXJuIHJlc3VsdDsKCSAgfQoKCSAgLyoqCgkgICAqIENvbnZlcnRzIGBz
ZXRgIHRvIGl0cyB2YWx1ZS12YWx1ZSBwYWlycy4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICog
QHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuCgkgICAqIEByZXR1cm5zIHtB
cnJheX0gUmV0dXJucyB0aGUgdmFsdWUtdmFsdWUgcGFpcnMuCgkgICAqLwoJICBmdW5jdGlvbiBz
ZXRUb1BhaXJzKHNldCkgewoJICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAgICByZXN1bHQgPSBB
cnJheShzZXQuc2l6ZSk7CgoJICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CgkgICAg
ICByZXN1bHRbKytpbmRleF0gPSBbdmFsdWUsIHZhbHVlXTsKCSAgICB9KTsKCSAgICByZXR1cm4g
cmVzdWx0OwoJICB9CgoJICAvKioKCSAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmlu
ZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eQoJICAgKiBjb21wYXJpc29ucyBv
ZiB2YWx1ZXMsIGkuZS4gYD09PWAuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7
QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgoJICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4
IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS4KCSAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJu
cyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC4KCSAgICovCgkgIGZ1
bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHsKCSAgICB2YXIg
aW5kZXggPSBmcm9tSW5kZXggLSAxLAoJICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgoJ
ICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICBpZiAoYXJyYXlbaW5kZXhdID09
PSB2YWx1ZSkgewoJICAgICAgICByZXR1cm4gaW5kZXg7CgkgICAgICB9CgkgICAgfQoJICAgIHJl
dHVybiAtMTsKCSAgfQoKCSAgLyoqCgkgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5s
YXN0SW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5CgkgICAqIGNvbXBhcmlz
b25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC4KCSAgICoKCSAgICogQHByaXZhdGUKCSAgICogQHBh
cmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAqIEBwYXJhbSB7Kn0g
dmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9t
SW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLgoJICAgKiBAcmV0dXJucyB7bnVtYmVyfSBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLgoJICAgKi8K
CSAgZnVuY3Rpb24gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHsK
CSAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggKyAxOwoJICAgIHdoaWxlIChpbmRleC0tKSB7Cgkg
ICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkgewoJICAgICAgICByZXR1cm4gaW5kZXg7
CgkgICAgICB9CgkgICAgfQoJICAgIHJldHVybiBpbmRleDsKCSAgfQoKCSAgLyoqCgkgICAqIEdl
dHMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGBzdHJpbmdgLgoJICAgKgoJICAgKiBAcHJpdmF0
ZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC4KCSAg
ICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuCgkgICAqLwoJICBm
dW5jdGlvbiBzdHJpbmdTaXplKHN0cmluZykgewoJICAgIHJldHVybiBoYXNVbmljb2RlKHN0cmlu
ZykKCSAgICAgID8gdW5pY29kZVNpemUoc3RyaW5nKQoJICAgICAgOiBhc2NpaVNpemUoc3RyaW5n
KTsKCSAgfQoKCSAgLyoqCgkgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LgoJICAg
KgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcg
dG8gY29udmVydC4KCSAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQg
YXJyYXkuCgkgICAqLwoJICBmdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykgewoJICAgIHJl
dHVybiBoYXNVbmljb2RlKHN0cmluZykKCSAgICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKQoJ
ICAgICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTsKCSAgfQoKCSAgLyoqCgkgICAqIFVzZWQgYnkg
YF8udW5lc2NhcGVgIHRvIGNvbnZlcnQgSFRNTCBlbnRpdGllcyB0byBjaGFyYWN0ZXJzLgoJICAg
KgoJICAgKiBAcHJpdmF0ZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNo
YXJhY3RlciB0byB1bmVzY2FwZS4KCSAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUg
dW5lc2NhcGVkIGNoYXJhY3Rlci4KCSAgICovCgkgIHZhciB1bmVzY2FwZUh0bWxDaGFyID0gYmFz
ZVByb3BlcnR5T2YoaHRtbFVuZXNjYXBlcyk7CgoJICAvKioKCSAgICogR2V0cyB0aGUgc2l6ZSBv
ZiBhIFVuaWNvZGUgYHN0cmluZ2AuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJhbSB7
c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LgoJICAgKiBAcmV0dXJucyB7bnVtYmVy
fSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS4KCSAgICovCgkgIGZ1bmN0aW9uIHVuaWNvZGVTaXpl
KHN0cmluZykgewoJICAgIHZhciByZXN1bHQgPSByZVVuaWNvZGUubGFzdEluZGV4ID0gMDsKCSAg
ICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkgewoJICAgICAgKytyZXN1bHQ7CgkgICAg
fQoJICAgIHJldHVybiByZXN1bHQ7CgkgIH0KCgkgIC8qKgoJICAgKiBDb252ZXJ0cyBhIFVuaWNv
ZGUgYHN0cmluZ2AgdG8gYW4gYXJyYXkuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJh
bSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LgoJICAgKiBAcmV0dXJucyB7
QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS4KCSAgICovCgkgIGZ1bmN0aW9uIHVu
aWNvZGVUb0FycmF5KHN0cmluZykgewoJICAgIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2Rl
KSB8fCBbXTsKCSAgfQoKCSAgLyoqCgkgICAqIFNwbGl0cyBhIFVuaWNvZGUgYHN0cmluZ2AgaW50
byBhbiBhcnJheSBvZiBpdHMgd29yZHMuCgkgICAqCgkgICAqIEBwcml2YXRlCgkgICAqIEBwYXJh
bSB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuCgkgICAqIEByZXR1cm5zIHtBcnJheX0g
UmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuCgkgICAqLwoJICBmdW5jdGlvbiB1bmljb2Rl
V29yZHMoc3RyaW5nKSB7CgkgICAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8
fCBbXTsKCSAgfQoKCSAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAvKioKCSAgICogQ3JlYXRl
IGEgbmV3IHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHVzaW5nIHRoZSBgY29udGV4dGAgb2Jq
ZWN0LgoJICAgKgoJICAgKiBAc3RhdGljCgkgICAqIEBtZW1iZXJPZiBfCgkgICAqIEBzaW5jZSAx
LjEuMAoJICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAgKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHQ9
cm9vdF0gVGhlIGNvbnRleHQgb2JqZWN0LgoJICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVy
bnMgYSBuZXcgYGxvZGFzaGAgZnVuY3Rpb24uCgkgICAqIEBleGFtcGxlCgkgICAqCgkgICAqIF8u
bWl4aW4oeyAnZm9vJzogXy5jb25zdGFudCgnZm9vJykgfSk7CgkgICAqCgkgICAqIHZhciBsb2Rh
c2ggPSBfLnJ1bkluQ29udGV4dCgpOwoJICAgKiBsb2Rhc2gubWl4aW4oeyAnYmFyJzogbG9kYXNo
LmNvbnN0YW50KCdiYXInKSB9KTsKCSAgICoKCSAgICogXy5pc0Z1bmN0aW9uKF8uZm9vKTsKCSAg
ICogLy8gPT4gdHJ1ZQoJICAgKiBfLmlzRnVuY3Rpb24oXy5iYXIpOwoJICAgKiAvLyA9PiBmYWxz
ZQoJICAgKgoJICAgKiBsb2Rhc2guaXNGdW5jdGlvbihsb2Rhc2guZm9vKTsKCSAgICogLy8gPT4g
ZmFsc2UKCSAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmJhcik7CgkgICAqIC8vID0+IHRy
dWUKCSAgICoKCSAgICogLy8gQ3JlYXRlIGEgc3VwZWQtdXAgYGRlZmVyYCBpbiBOb2RlLmpzLgoJ
ICAgKiB2YXIgZGVmZXIgPSBfLnJ1bkluQ29udGV4dCh7ICdzZXRUaW1lb3V0Jzogc2V0SW1tZWRp
YXRlIH0pLmRlZmVyOwoJICAgKi8KCSAgdmFyIHJ1bkluQ29udGV4dCA9IChmdW5jdGlvbiBydW5J
bkNvbnRleHQoY29udGV4dCkgewoJICAgIGNvbnRleHQgPSBjb250ZXh0ID09IG51bGwgPyByb290
IDogXy5kZWZhdWx0cyhyb290Lk9iamVjdCgpLCBjb250ZXh0LCBfLnBpY2socm9vdCwgY29udGV4
dFByb3BzKSk7CgoJICAgIC8qKiBCdWlsdC1pbiBjb25zdHJ1Y3RvciByZWZlcmVuY2VzLiAqLwoJ
ICAgIHZhciBBcnJheSA9IGNvbnRleHQuQXJyYXksCgkgICAgICAgIERhdGUgPSBjb250ZXh0LkRh
dGUsCgkgICAgICAgIEVycm9yID0gY29udGV4dC5FcnJvciwKCSAgICAgICAgRnVuY3Rpb24gPSBj
b250ZXh0LkZ1bmN0aW9uLAoJICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLAoJICAgICAgICBP
YmplY3QgPSBjb250ZXh0Lk9iamVjdCwKCSAgICAgICAgUmVnRXhwID0gY29udGV4dC5SZWdFeHAs
CgkgICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLAoJICAgICAgICBUeXBlRXJyb3IgPSBj
b250ZXh0LlR5cGVFcnJvcjsKCgkgICAgLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZl
cmVuY2VzLiAqLwoJICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLAoJICAgICAg
ICBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsCgkgICAgICAgIG9iamVjdFByb3RvID0g
T2JqZWN0LnByb3RvdHlwZTsKCgkgICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBj
b3JlLWpzIHNoaW1zLiAqLwoJICAgIHZhciBjb3JlSnNEYXRhID0gY29udGV4dFsnX19jb3JlLWpz
X3NoYXJlZF9fJ107CgoJICAgIC8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291
cmNlIG9mIGZ1bmN0aW9ucy4gKi8KCSAgICB2YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRv
U3RyaW5nOwoKCSAgICAvKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGll
cy4gKi8KCSAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0
eTsKCgkgICAgLyoqIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy4gKi8KCSAgICB2YXIgaWRD
b3VudGVyID0gMDsKCgkgICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5n
IGFzIG5hdGl2ZS4gKi8KCSAgICB2YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHsKCSAgICAg
IHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYm
IGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7CgkgICAgICByZXR1cm4gdWlkID8gKCdT
eW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7CgkgICAgfSgpKTsKCgkgICAgLyoqCgkgICAgICog
VXNlZCB0byByZXNvbHZlIHRoZQoJICAgICAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1p
bnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3Ry
aW5nKQoJICAgICAqIG9mIHZhbHVlcy4KCSAgICAgKi8KCSAgICB2YXIgbmF0aXZlT2JqZWN0VG9T
dHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZzsKCgkgICAgLyoqIFVzZWQgdG8gaW5mZXIgdGhl
IGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqLwoJICAgIHZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVu
Y1RvU3RyaW5nLmNhbGwoT2JqZWN0KTsKCgkgICAgLyoqIFVzZWQgdG8gcmVzdG9yZSB0aGUgb3Jp
Z2luYWwgYF9gIHJlZmVyZW5jZSBpbiBgXy5ub0NvbmZsaWN0YC4gKi8KCSAgICB2YXIgb2xkRGFz
aCA9IHJvb3QuXzsKCgkgICAgLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2
ZS4gKi8KCSAgICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKwoJICAgICAgZnVuY1RvU3Ry
aW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFwkJicpCgkg
ICAgICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3Ig
Lis/KD89XFxcXSkvZywgJyQxLio/JykgKyAnJCcKCSAgICApOwoKCSAgICAvKiogQnVpbHQtaW4g
dmFsdWUgcmVmZXJlbmNlcy4gKi8KCSAgICB2YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IGNv
bnRleHQuQnVmZmVyIDogdW5kZWZpbmVkLAoJICAgICAgICBTeW1ib2wgPSBjb250ZXh0LlN5bWJv
bCwKCSAgICAgICAgVWludDhBcnJheSA9IGNvbnRleHQuVWludDhBcnJheSwKCSAgICAgICAgYWxs
b2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQsCgkgICAg
ICAgIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3Qp
LAoJICAgICAgICBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLAoJICAgICAgICBwcm9wZXJ0
eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLAoJICAgICAg
ICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSwKCSAgICAgICAgc3ByZWFkYWJsZVN5bWJvbCA9
IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQsCgkgICAgICAg
IHN5bUl0ZXJhdG9yID0gU3ltYm9sID8gU3ltYm9sLml0ZXJhdG9yIDogdW5kZWZpbmVkLAoJICAg
ICAgICBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVm
aW5lZDsKCgkgICAgdmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkgewoJICAgICAgdHJ5
IHsKCSAgICAgICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHkn
KTsKCSAgICAgICAgZnVuYyh7fSwgJycsIHt9KTsKCSAgICAgICAgcmV0dXJuIGZ1bmM7CgkgICAg
ICB9IGNhdGNoIChlKSB7fQoJICAgIH0oKSk7CgoJICAgIC8qKiBNb2NrZWQgYnVpbHQtaW5zLiAq
LwoJICAgIHZhciBjdHhDbGVhclRpbWVvdXQgPSBjb250ZXh0LmNsZWFyVGltZW91dCAhPT0gcm9v
dC5jbGVhclRpbWVvdXQgJiYgY29udGV4dC5jbGVhclRpbWVvdXQsCgkgICAgICAgIGN0eE5vdyA9
IERhdGUgJiYgRGF0ZS5ub3cgIT09IHJvb3QuRGF0ZS5ub3cgJiYgRGF0ZS5ub3csCgkgICAgICAg
IGN0eFNldFRpbWVvdXQgPSBjb250ZXh0LnNldFRpbWVvdXQgIT09IHJvb3Quc2V0VGltZW91dCAm
JiBjb250ZXh0LnNldFRpbWVvdXQ7CgoJICAgIC8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2Vz
IGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4g
Ki8KCSAgICB2YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCwKCSAgICAgICAgbmF0aXZlRmxvb3Ig
PSBNYXRoLmZsb29yLAoJICAgICAgICBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blBy
b3BlcnR5U3ltYm9scywKCSAgICAgICAgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIu
aXNCdWZmZXIgOiB1bmRlZmluZWQsCgkgICAgICAgIG5hdGl2ZUlzRmluaXRlID0gY29udGV4dC5p
c0Zpbml0ZSwKCSAgICAgICAgbmF0aXZlSm9pbiA9IGFycmF5UHJvdG8uam9pbiwKCSAgICAgICAg
bmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCksCgkgICAgICAgIG5hdGl2
ZU1heCA9IE1hdGgubWF4LAoJICAgICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbiwKCSAgICAgICAg
bmF0aXZlTm93ID0gRGF0ZS5ub3csCgkgICAgICAgIG5hdGl2ZVBhcnNlSW50ID0gY29udGV4dC5w
YXJzZUludCwKCSAgICAgICAgbmF0aXZlUmFuZG9tID0gTWF0aC5yYW5kb20sCgkgICAgICAgIG5h
dGl2ZVJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7CgoJICAgIC8qIEJ1aWx0LWluIG1ldGhv
ZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi8KCSAgICB2YXIg
RGF0YVZpZXcgPSBnZXROYXRpdmUoY29udGV4dCwgJ0RhdGFWaWV3JyksCgkgICAgICAgIE1hcCA9
IGdldE5hdGl2ZShjb250ZXh0LCAnTWFwJyksCgkgICAgICAgIFByb21pc2UgPSBnZXROYXRpdmUo
Y29udGV4dCwgJ1Byb21pc2UnKSwKCSAgICAgICAgU2V0ID0gZ2V0TmF0aXZlKGNvbnRleHQsICdT
ZXQnKSwKCSAgICAgICAgV2Vha01hcCA9IGdldE5hdGl2ZShjb250ZXh0LCAnV2Vha01hcCcpLAoJ
ICAgICAgICBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7CgoJICAg
IC8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqLwoJICAgIHZhciBtZXRhTWFw
ID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDsKCgkgICAgLyoqIFVzZWQgdG8gbG9va3VwIHVubWlu
aWZpZWQgZnVuY3Rpb24gbmFtZXMuICovCgkgICAgdmFyIHJlYWxOYW1lcyA9IHt9OwoKCSAgICAv
KiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqLwoJICAgIHZhciBk
YXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksCgkgICAgICAgIG1hcEN0b3JT
dHJpbmcgPSB0b1NvdXJjZShNYXApLAoJICAgICAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291
cmNlKFByb21pc2UpLAoJICAgICAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSwKCSAg
ICAgICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTsKCgkgICAgLyoqIFVz
ZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovCgkgICAg
dmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCwK
CSAgICAgICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVP
ZiA6IHVuZGVmaW5lZCwKCSAgICAgICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5
bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkOwoKCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMg
YHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kCgkgICAgICogY2hhaW4gc2VxdWVuY2Vz
LiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMs
CgkgICAgICogYW5kIGZ1bmN0aW9ucyBjYW4gYmUgY2hhaW5lZCB0b2dldGhlci4gTWV0aG9kcyB0
aGF0IHJldHJpZXZlIGEgc2luZ2xlIHZhbHVlCgkgICAgICogb3IgbWF5IHJldHVybiBhIHByaW1p
dGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZQoJICAg
ICAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUg
bXVzdCBiZSB1bndyYXBwZWQKCSAgICAgKiB3aXRoIGBfI3ZhbHVlYC4KCSAgICAgKgoJICAgICAq
IEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBg
XyN2YWx1ZWAsIG1heSBiZQoJICAgICAqIGVuYWJsZWQgdXNpbmcgYF8uY2hhaW5gLgoJICAgICAq
CgkgICAgICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBp
cywgaXQncyBkZWZlcnJlZCB1bnRpbAoJICAgICAqIGBfI3ZhbHVlYCBpcyBpbXBsaWNpdGx5IG9y
IGV4cGxpY2l0bHkgY2FsbGVkLgoJICAgICAqCgkgICAgICogTGF6eSBldmFsdWF0aW9uIGFsbG93
cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uCgkgICAgICogU2hv
cnRjdXQgZnVzaW9uIGlzIGFuIG9wdGltaXphdGlvbiB0byBtZXJnZSBpdGVyYXRlZSBjYWxsczsg
dGhpcyBhdm9pZHMKCSAgICAgKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBh
bmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2YKCSAgICAgKiBpdGVyYXRlZSBleGVj
dXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0
CgkgICAgICogZnVzaW9uIGlmIHRoZSBzZWN0aW9uIGlzIGFwcGxpZWQgdG8gYW4gYXJyYXkgYW5k
IGl0ZXJhdGVlcyBhY2NlcHQgb25seQoJICAgICAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3Rp
YyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dAoJICAgICAqIGZ1
c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KCSAgICAgKgoJICAgICAqIENoYWluaW5nIGlzIHN1
cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2Qg
aXMKCSAgICAgKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC4K
CSAgICAgKgoJICAgICAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBo
YXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuCgkgICAgICoKCSAgICAgKiBUaGUgd3Jh
cHBlciBgQXJyYXlgIG1ldGhvZHMgYXJlOgoJICAgICAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3Bg
LCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGAKCSAgICAg
KgoJICAgICAqIFRoZSB3cmFwcGVyIGBTdHJpbmdgIG1ldGhvZHMgYXJlOgoJICAgICAqIGByZXBs
YWNlYCBhbmQgYHNwbGl0YAoJICAgICAqCgkgICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0
IHN1cHBvcnQgc2hvcnRjdXQgZnVzaW9uIGFyZToKCSAgICAgKiBgYXRgLCBgY29tcGFjdGAsIGBk
cm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLAoJICAgICAq
IGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwg
YHJldmVyc2VgLCBgc2xpY2VgLAoJICAgICAqIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCwg
YHRha2VSaWdodFdoaWxlYCwgYHRha2VXaGlsZWAsIGFuZCBgdG9BcnJheWAKCSAgICAgKgoJICAg
ICAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZToKCSAgICAgKiBgYWZ0ZXJgLCBg
YXJ5YCwgYGFzc2lnbmAsIGBhc3NpZ25JbmAsIGBhc3NpZ25JbldpdGhgLCBgYXNzaWduV2l0aGAs
IGBhdGAsCgkgICAgICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBj
YXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLAoJICAgICAqIGBjb21taXRgLCBgY29tcGFjdGAs
IGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLAoJ
ICAgICAqIGBjdXJyeWAsIGBkZWJvdW5jZWAsIGBkZWZhdWx0c2AsIGBkZWZhdWx0c0RlZXBgLCBg
ZGVmZXJgLCBgZGVsYXlgLAoJICAgICAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBk
aWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsCgkgICAgICogYGRyb3BSaWdodFdo
aWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRl
cmAsCgkgICAgICogYGZsYXRNYXBgLCBgZmxhdE1hcERlZXBgLCBgZmxhdE1hcERlcHRoYCwgYGZs
YXR0ZW5gLCBgZmxhdHRlbkRlZXBgLAoJICAgICAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBm
bG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCwKCSAgICAgKiBgZnVu
Y3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNl
Y3Rpb25CeWAsCgkgICAgICogYGludGVyc2VjdGlvbldpdGhgLCBgaW52ZXJ0YCwgYGludmVydEJ5
YCwgYGludm9rZU1hcGAsIGBpdGVyYXRlZWAsIGBrZXlCeWAsCgkgICAgICogYGtleXNgLCBga2V5
c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQ
cm9wZXJ0eWAsCgkgICAgICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhv
ZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLAoJICAgICAqIGBudGhBcmdgLCBgb21p
dGAsIGBvbWl0QnlgLCBgb25jZWAsIGBvcmRlckJ5YCwgYG92ZXJgLCBgb3ZlckFyZ3NgLAoJICAg
ICAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBg
cGFydGl0aW9uYCwgYHBpY2tgLAoJICAgICAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlg
LCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCwKCSAgICAgKiBg
cHVsbEFsbFdpdGhgLCBgcHVsbEF0YCwgYHB1c2hgLCBgcmFuZ2VgLCBgcmFuZ2VSaWdodGAsIGBy
ZWFyZ2AsIGByZWplY3RgLAoJICAgICAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNh
bXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsCgkgICAgICogYHNsaWNlYCwg
YHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRh
a2VSaWdodGAsCgkgICAgICogYHRha2VSaWdodFdoaWxlYCwgYHRha2VXaGlsZWAsIGB0YXBgLCBg
dGhyb3R0bGVgLCBgdGhydWAsIGB0b0FycmF5YCwKCSAgICAgKiBgdG9QYWlyc2AsIGB0b1BhaXJz
SW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCwKCSAg
ICAgKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBg
dW5pcVdpdGhgLCBgdW5zZXRgLAoJICAgICAqIGB1bnNoaWZ0YCwgYHVuemlwYCwgYHVuemlwV2l0
aGAsIGB1cGRhdGVgLCBgdXBkYXRlV2l0aGAsIGB2YWx1ZXNgLAoJICAgICAqIGB2YWx1ZXNJbmAs
IGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCwKCSAg
ICAgKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgCgkgICAgICoK
CSAgICAgKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5
IGRlZmF1bHQgYXJlOgoJICAgICAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2Fw
aXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCwKCSAgICAgKiBgY2xvbmVEZWVwYCwg
YGNsb25lRGVlcFdpdGhgLCBgY2xvbmVXaXRoYCwgYGNvbmZvcm1zVG9gLCBgZGVidXJyYCwKCSAg
ICAgKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0
aGAsIGBlcWAsIGBlc2NhcGVgLAoJICAgICAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmlu
ZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsCgkgICAgICogYGZpbmRMYXN0
SW5kZXhgLCBgZmluZExhc3RLZXlgLCBgZmlyc3RgLCBgZmxvb3JgLCBgZm9yRWFjaGAsIGBmb3JF
YWNoUmlnaHRgLAoJICAgICAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JP
d25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsCgkgICAgICogYGhhc0luYCwgYGhl
YWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9r
ZWAsCgkgICAgICogYGlzQXJndW1lbnRzYCwgYGlzQXJyYXlgLCBgaXNBcnJheUJ1ZmZlcmAsIGBp
c0FycmF5TGlrZWAsIGBpc0FycmF5TGlrZU9iamVjdGAsCgkgICAgICogYGlzQm9vbGVhbmAsIGBp
c0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsCgkg
ICAgICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAs
IGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLAoJICAgICAqIGBpc01hcGAsIGBpc01hdGNoYCwgYGlz
TWF0Y2hXaXRoYCwgYGlzTmFOYCwgYGlzTmF0aXZlYCwgYGlzTmlsYCwgYGlzTnVsbGAsCgkgICAg
ICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0
YCwgYGlzUmVnRXhwYCwKCSAgICAgKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmlu
Z2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLAoJICAgICAqIGBpc1dlYWtNYXBgLCBg
aXNXZWFrU2V0YCwgYGpvaW5gLCBga2ViYWJDYXNlYCwgYGxhc3RgLCBgbGFzdEluZGV4T2ZgLAoJ
ICAgICAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1h
eEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCwKCSAgICAgKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5
YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsCgkgICAgICogYHBh
ZEVuZGAsIGBwYWRTdGFydGAsIGBwYXJzZUludGAsIGBwb3BgLCBgcmFuZG9tYCwgYHJlZHVjZWAs
IGByZWR1Y2VSaWdodGAsCgkgICAgICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVu
SW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCwKCSAgICAgKiBgc25ha2VDYXNl
YCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5k
ZXhgLAoJICAgICAqIGBzb3J0ZWRMYXN0SW5kZXhCeWAsIGBzdGFydENhc2VgLCBgc3RhcnRzV2l0
aGAsIGBzdHViQXJyYXlgLCBgc3R1YkZhbHNlYCwKCSAgICAgKiBgc3R1Yk9iamVjdGAsIGBzdHVi
U3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsCgkgICAgICog
YHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBg
dG9MZW5ndGhgLAoJICAgICAqIGB0b0xvd2VyYCwgYHRvTnVtYmVyYCwgYHRvU2FmZUludGVnZXJg
LCBgdG9TdHJpbmdgLCBgdG9VcHBlcmAsIGB0cmltYCwKCSAgICAgKiBgdHJpbUVuZGAsIGB0cmlt
U3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCwK
CSAgICAgKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgCgkgICAgICoKCSAgICAg
KiBAbmFtZSBfCgkgICAgICogQGNvbnN0cnVjdG9yCgkgICAgICogQGNhdGVnb3J5IFNlcQoJICAg
ICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0
YW5jZS4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAg
d3JhcHBlciBpbnN0YW5jZS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rp
b24gc3F1YXJlKG4pIHsKCSAgICAgKiAgIHJldHVybiBuICogbjsKCSAgICAgKiB9CgkgICAgICoK
CSAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDIsIDNdKTsKCSAgICAgKgoJICAgICAqIC8vIFJl
dHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLgoJICAgICAqIHdyYXBwZWQucmVkdWNlKF8uYWRkKTsK
CSAgICAgKiAvLyA9PiA2CgkgICAgICoKCSAgICAgKiAvLyBSZXR1cm5zIGEgd3JhcHBlZCB2YWx1
ZS4KCSAgICAgKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7CgkgICAgICoKCSAg
ICAgKiBfLmlzQXJyYXkoc3F1YXJlcyk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKgoJICAg
ICAqIF8uaXNBcnJheShzcXVhcmVzLnZhbHVlKCkpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAg
Ki8KCSAgICBmdW5jdGlvbiBsb2Rhc2godmFsdWUpIHsKCSAgICAgIGlmIChpc09iamVjdExpa2Uo
dmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBw
ZXIpKSB7CgkgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHsKCSAg
ICAgICAgICByZXR1cm4gdmFsdWU7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKGhhc093blByb3Bl
cnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7CgkgICAgICAgICAgcmV0dXJuIHdyYXBw
ZXJDbG9uZSh2YWx1ZSk7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiBuZXcgTG9k
YXNoV3JhcHBlcih2YWx1ZSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nCgkg
ICAgICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuCgkgICAgICoKCSAgICAgKiBA
cHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVy
aXQgZnJvbS4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0
LgoJICAgICAqLwoJICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkgewoJICAgICAgZnVu
Y3Rpb24gb2JqZWN0KCkge30KCSAgICAgIHJldHVybiBmdW5jdGlvbihwcm90bykgewoJICAgICAg
ICBpZiAoIWlzT2JqZWN0KHByb3RvKSkgewoJICAgICAgICAgIHJldHVybiB7fTsKCSAgICAgICAg
fQoJICAgICAgICBpZiAob2JqZWN0Q3JlYXRlKSB7CgkgICAgICAgICAgcmV0dXJuIG9iamVjdENy
ZWF0ZShwcm90byk7CgkgICAgICAgIH0KCSAgICAgICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3Rv
OwoJICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDsKCSAgICAgICAgb2JqZWN0LnByb3Rv
dHlwZSA9IHVuZGVmaW5lZDsKCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH07CgkgICAg
fSgpKTsKCgkgICAgLyoqCgkgICAgICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFp
biBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uCgkgICAgICoKCSAgICAgKiBAcHJpdmF0
ZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7CgkgICAgICAvLyBObyBvcGVy
YXRpb24gcGVyZm9ybWVkLgoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgY29uc3Ry
dWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC4K
CSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhv
ZCBjaGFpbiBzZXF1ZW5jZXMuCgkgICAgICovCgkgICAgZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2
YWx1ZSwgY2hhaW5BbGwpIHsKCSAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTsKCSAgICAg
IHRoaXMuX19hY3Rpb25zX18gPSBbXTsKCSAgICAgIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFs
bDsKCSAgICAgIHRoaXMuX19pbmRleF9fID0gMDsKCSAgICAgIHRoaXMuX192YWx1ZXNfXyA9IHVu
ZGVmaW5lZDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEJ5IGRlZmF1bHQsIHRoZSB0ZW1wbGF0
ZSBkZWxpbWl0ZXJzIHVzZWQgYnkgbG9kYXNoIGFyZSBsaWtlIHRob3NlIGluCgkgICAgICogZW1i
ZWRkZWQgUnVieSAoRVJCKSBhcyB3ZWxsIGFzIEVTMjAxNSB0ZW1wbGF0ZSBzdHJpbmdzLiBDaGFu
Z2UgdGhlCgkgICAgICogZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5h
dGl2ZSBkZWxpbWl0ZXJzLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCSAgICBsb2Rhc2gudGVtcGxhdGVT
ZXR0aW5ncyA9IHsKCgkgICAgICAvKioKCSAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBw
cm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLgoJICAgICAgICoKCSAgICAgICAqIEBt
ZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MKCSAgICAgICAqIEB0eXBlIHtSZWdFeHB9CgkgICAg
ICAgKi8KCSAgICAgICdlc2NhcGUnOiByZUVzY2FwZSwKCgkgICAgICAvKioKCSAgICAgICAqIFVz
ZWQgdG8gZGV0ZWN0IGNvZGUgdG8gYmUgZXZhbHVhdGVkLgoJICAgICAgICoKCSAgICAgICAqIEBt
ZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MKCSAgICAgICAqIEB0eXBlIHtSZWdFeHB9CgkgICAg
ICAgKi8KCSAgICAgICdldmFsdWF0ZSc6IHJlRXZhbHVhdGUsCgoJICAgICAgLyoqCgkgICAgICAg
KiBVc2VkIHRvIGRldGVjdCBgZGF0YWAgcHJvcGVydHkgdmFsdWVzIHRvIGluamVjdC4KCSAgICAg
ICAqCgkgICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzCgkgICAgICAgKiBAdHlw
ZSB7UmVnRXhwfQoJICAgICAgICovCgkgICAgICAnaW50ZXJwb2xhdGUnOiByZUludGVycG9sYXRl
LAoKCSAgICAgIC8qKgoJICAgICAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0
IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LgoJICAgICAgICoKCSAgICAgICAqIEBtZW1iZXJPZiBfLnRl
bXBsYXRlU2V0dGluZ3MKCSAgICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICAgKi8KCSAgICAg
ICd2YXJpYWJsZSc6ICcnLAoKCSAgICAgIC8qKgoJICAgICAgICogVXNlZCB0byBpbXBvcnQgdmFy
aWFibGVzIGludG8gdGhlIGNvbXBpbGVkIHRlbXBsYXRlLgoJICAgICAgICoKCSAgICAgICAqIEBt
ZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3MKCSAgICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAg
ICAgKi8KCSAgICAgICdpbXBvcnRzJzogewoKCSAgICAgICAgLyoqCgkgICAgICAgICAqIEEgcmVm
ZXJlbmNlIHRvIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi4KCSAgICAgICAgICoKCSAgICAgICAgICog
QG1lbWJlck9mIF8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzCgkgICAgICAgICAqIEB0eXBlIHtG
dW5jdGlvbn0KCSAgICAgICAgICovCgkgICAgICAgICdfJzogbG9kYXNoCgkgICAgICB9CgkgICAg
fTsKCgkgICAgLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hg
LgoJICAgIGxvZGFzaC5wcm90b3R5cGUgPSBiYXNlTG9kYXNoLnByb3RvdHlwZTsKCSAgICBsb2Rh
c2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoOwoKCSAgICBMb2Rhc2hXcmFwcGVyLnBy
b3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpOwoJICAgIExvZGFzaFdy
YXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTG9kYXNoV3JhcHBlcjsKCgkgICAgLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9i
amVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uCgkgICAg
ICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBjb25zdHJ1Y3RvcgoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gTGF6eVdy
YXBwZXIodmFsdWUpIHsKCSAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTsKCSAgICAgIHRo
aXMuX19hY3Rpb25zX18gPSBbXTsKCSAgICAgIHRoaXMuX19kaXJfXyA9IDE7CgkgICAgICB0aGlz
Ll9fZmlsdGVyZWRfXyA9IGZhbHNlOwoJICAgICAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107Cgkg
ICAgICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIOwoJICAgICAgdGhpcy5f
X3ZpZXdzX18gPSBbXTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBjbG9uZSBv
ZiB0aGUgbGF6eSB3cmFwcGVyIG9iamVjdC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAg
ICogQG5hbWUgY2xvbmUKCSAgICAgKiBAbWVtYmVyT2YgTGF6eVdyYXBwZXIKCSAgICAgKiBAcmV0
dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgYExhenlXcmFwcGVyYCBvYmplY3QuCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gbGF6eUNsb25lKCkgewoJICAgICAgdmFyIHJlc3VsdCA9IG5l
dyBMYXp5V3JhcHBlcih0aGlzLl9fd3JhcHBlZF9fKTsKCSAgICAgIHJlc3VsdC5fX2FjdGlvbnNf
XyA9IGNvcHlBcnJheSh0aGlzLl9fYWN0aW9uc19fKTsKCSAgICAgIHJlc3VsdC5fX2Rpcl9fID0g
dGhpcy5fX2Rpcl9fOwoJICAgICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRoaXMuX19maWx0ZXJl
ZF9fOwoJICAgICAgcmVzdWx0Ll9faXRlcmF0ZWVzX18gPSBjb3B5QXJyYXkodGhpcy5fX2l0ZXJh
dGVlc19fKTsKCSAgICAgIHJlc3VsdC5fX3Rha2VDb3VudF9fID0gdGhpcy5fX3Rha2VDb3VudF9f
OwoJICAgICAgcmVzdWx0Ll9fdmlld3NfXyA9IGNvcHlBcnJheSh0aGlzLl9fdmlld3NfXyk7Cgkg
ICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogUmV2ZXJzZXMgdGhl
IGRpcmVjdGlvbiBvZiBsYXp5IGl0ZXJhdGlvbi4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkg
ICAgICogQG5hbWUgcmV2ZXJzZQoJICAgICAqIEBtZW1iZXJPZiBMYXp5V3JhcHBlcgoJICAgICAq
IEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyByZXZlcnNlZCBgTGF6eVdyYXBwZXJg
IG9iamVjdC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBsYXp5UmV2ZXJzZSgpIHsKCSAgICAgIGlm
ICh0aGlzLl9fZmlsdGVyZWRfXykgewoJICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFw
cGVyKHRoaXMpOwoJICAgICAgICByZXN1bHQuX19kaXJfXyA9IC0xOwoJICAgICAgICByZXN1bHQu
X19maWx0ZXJlZF9fID0gdHJ1ZTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJlc3VsdCA9IHRo
aXMuY2xvbmUoKTsKCSAgICAgICAgcmVzdWx0Ll9fZGlyX18gKj0gLTE7CgkgICAgICB9CgkgICAg
ICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogRXh0cmFjdHMgdGhlIHVu
d3JhcHBlZCB2YWx1ZSBmcm9tIGl0cyBsYXp5IHdyYXBwZXIuCgkgICAgICoKCSAgICAgKiBAcHJp
dmF0ZQoJICAgICAqIEBuYW1lIHZhbHVlCgkgICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyCgkg
ICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVud3JhcHBlZCB2YWx1ZS4KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBsYXp5VmFsdWUoKSB7CgkgICAgICB2YXIgYXJyYXkgPSB0aGlzLl9fd3Jh
cHBlZF9fLnZhbHVlKCksCgkgICAgICAgICAgZGlyID0gdGhpcy5fX2Rpcl9fLAoJICAgICAgICAg
IGlzQXJyID0gaXNBcnJheShhcnJheSksCgkgICAgICAgICAgaXNSaWdodCA9IGRpciA8IDAsCgkg
ICAgICAgICAgYXJyTGVuZ3RoID0gaXNBcnIgPyBhcnJheS5sZW5ndGggOiAwLAoJICAgICAgICAg
IHZpZXcgPSBnZXRWaWV3KDAsIGFyckxlbmd0aCwgdGhpcy5fX3ZpZXdzX18pLAoJICAgICAgICAg
IHN0YXJ0ID0gdmlldy5zdGFydCwKCSAgICAgICAgICBlbmQgPSB2aWV3LmVuZCwKCSAgICAgICAg
ICBsZW5ndGggPSBlbmQgLSBzdGFydCwKCSAgICAgICAgICBpbmRleCA9IGlzUmlnaHQgPyBlbmQg
OiAoc3RhcnQgLSAxKSwKCSAgICAgICAgICBpdGVyYXRlZXMgPSB0aGlzLl9faXRlcmF0ZWVzX18s
CgkgICAgICAgICAgaXRlckxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGgsCgkgICAgICAgICAgcmVz
SW5kZXggPSAwLAoJICAgICAgICAgIHRha2VDb3VudCA9IG5hdGl2ZU1pbihsZW5ndGgsIHRoaXMu
X190YWtlQ291bnRfXyk7CgoJICAgICAgaWYgKCFpc0FyciB8fCAoIWlzUmlnaHQgJiYgYXJyTGVu
Z3RoID09IGxlbmd0aCAmJiB0YWtlQ291bnQgPT0gbGVuZ3RoKSkgewoJICAgICAgICByZXR1cm4g
YmFzZVdyYXBwZXJWYWx1ZShhcnJheSwgdGhpcy5fX2FjdGlvbnNfXyk7CgkgICAgICB9CgkgICAg
ICB2YXIgcmVzdWx0ID0gW107CgoJICAgICAgb3V0ZXI6CgkgICAgICB3aGlsZSAobGVuZ3RoLS0g
JiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHsKCSAgICAgICAgaW5kZXggKz0gZGlyOwoKCSAgICAg
ICAgdmFyIGl0ZXJJbmRleCA9IC0xLAoJICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpbmRleF07
CgoJICAgICAgICB3aGlsZSAoKytpdGVySW5kZXggPCBpdGVyTGVuZ3RoKSB7CgkgICAgICAgICAg
dmFyIGRhdGEgPSBpdGVyYXRlZXNbaXRlckluZGV4XSwKCSAgICAgICAgICAgICAgaXRlcmF0ZWUg
PSBkYXRhLml0ZXJhdGVlLAoJICAgICAgICAgICAgICB0eXBlID0gZGF0YS50eXBlLAoJICAgICAg
ICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHZhbHVlKTsKCgkgICAgICAgICAgaWYgKHR5cGUg
PT0gTEFaWV9NQVBfRkxBRykgewoJICAgICAgICAgICAgdmFsdWUgPSBjb21wdXRlZDsKCSAgICAg
ICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZCkgewoJICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFa
WV9GSUxURVJfRkxBRykgewoJICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKCSAgICAgICAg
ICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAgIGJyZWFrIG91dGVyOwoJICAgICAgICAgICAgfQoJ
ICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1
ZTsKCSAgICAgIH0KCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvLyBFbnN1cmUg
YExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuCgkgICAgTGF6eVdy
YXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7CgkgICAg
TGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7CgoJICAgIC8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0
LgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAY29uc3RydWN0b3IKCSAgICAgKiBA
cGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBIYXNoKGVudHJpZXMpIHsKCSAgICAgIHZhciBpbmRleCA9IC0x
LAoJICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0
aDsKCgkgICAgICB0aGlzLmNsZWFyKCk7CgkgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkg
ewoJICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTsKCSAgICAgICAgdGhpcy5zZXQo
ZW50cnlbMF0sIGVudHJ5WzFdKTsKCSAgICAgIH0KCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFJl
bW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guCgkgICAgICoKCSAgICAg
KiBAcHJpdmF0ZQoJICAgICAqIEBuYW1lIGNsZWFyCgkgICAgICogQG1lbWJlck9mIEhhc2gKCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBoYXNoQ2xlYXIoKSB7CgkgICAgICB0aGlzLl9fZGF0YV9fID0g
bmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307CgkgICAgICB0aGlzLnNpemUg
PSAwOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVl
IGZyb20gdGhlIGhhc2guCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBuYW1lIGRl
bGV0ZQoJICAgICAqIEBtZW1iZXJPZiBIYXNoCgkgICAgICogQHBhcmFtIHtPYmplY3R9IGhhc2gg
VGhlIGhhc2ggdG8gbW9kaWZ5LgoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBv
ZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5z
IGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkgewoJICAgICAgdmFyIHJlc3VsdCA9IHRoaXMu
aGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTsKCSAgICAgIHRoaXMuc2l6ZSAt
PSByZXN1bHQgPyAxIDogMDsKCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC4KCSAgICAgKgoJICAgICAqIEBw
cml2YXRlCgkgICAgICogQG5hbWUgZ2V0CgkgICAgICogQG1lbWJlck9mIEhhc2gKCSAgICAgKiBA
cGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC4KCSAgICAgKiBA
cmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuCgkgICAgICovCgkgICAgZnVuY3Rp
b24gaGFzaEdldChrZXkpIHsKCSAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXzsKCSAgICAg
IGlmIChuYXRpdmVDcmVhdGUpIHsKCSAgICAgICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTsKCSAg
ICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1
bHQ7CgkgICAgICB9CgkgICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkp
ID8gZGF0YVtrZXldIDogdW5kZWZpbmVkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tz
IGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAbmFtZSBoYXMKCSAgICAgKiBAbWVtYmVyT2YgSGFzaAoJICAgICAqIEBwYXJh
bSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suCgkgICAgICogQHJl
dHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlz
dHMsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBoYXNoSGFzKGtleSkgewoJ
ICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fOwoJICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0
ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEs
IGtleSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2
YWx1ZWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBuYW1lIHNldAoJICAgICAq
IEBtZW1iZXJPZiBIYXNoCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRo
ZSB2YWx1ZSB0byBzZXQuCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0
LgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7CgkgICAgICB2YXIgZGF0
YSA9IHRoaXMuX19kYXRhX187CgkgICAgICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAg
OiAxOwoJICAgICAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZp
bmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7CgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9
CgoJICAgIC8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC4KCSAgICBIYXNoLnByb3RvdHlwZS5jbGVh
ciA9IGhhc2hDbGVhcjsKCSAgICBIYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRl
OwoJICAgIEhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7CgkgICAgSGFzaC5wcm90b3R5cGUu
aGFzID0gaGFzaEhhczsKCSAgICBIYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0OwoKCSAgICAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gbGlzdCBjYWNo
ZSBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBjb25zdHJ1Y3RvcgoJ
ICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNh
Y2hlLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7CgkgICAgICB2
YXIgaW5kZXggPSAtMSwKCSAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDog
ZW50cmllcy5sZW5ndGg7CgoJICAgICAgdGhpcy5jbGVhcigpOwoJICAgICAgd2hpbGUgKCsraW5k
ZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07CgkgICAg
ICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CgkgICAgICB9CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNh
Y2hlLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAbmFtZSBjbGVhcgoJICAgICAq
IEBtZW1iZXJPZiBMaXN0Q2FjaGUKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBsaXN0Q2FjaGVDbGVh
cigpIHsKCSAgICAgIHRoaXMuX19kYXRhX18gPSBbXTsKCSAgICAgIHRoaXMuc2l6ZSA9IDA7Cgkg
ICAgfQoKCSAgICAvKioKCSAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0
aGUgbGlzdCBjYWNoZS4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQG5hbWUgZGVs
ZXRlCgkgICAgICogQG1lbWJlck9mIExpc3RDYWNoZQoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBr
ZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLgoJICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNl
YC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7CgkgICAgICB2
YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sCgkgICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2Yo
ZGF0YSwga2V5KTsKCgkgICAgICBpZiAoaW5kZXggPCAwKSB7CgkgICAgICAgIHJldHVybiBmYWxz
ZTsKCSAgICAgIH0KCSAgICAgIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7CgkgICAg
ICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7CgkgICAgICAgIGRhdGEucG9wKCk7CgkgICAgICB9
IGVsc2UgewoJICAgICAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7CgkgICAgICB9Cgkg
ICAgICAtLXRoaXMuc2l6ZTsKCSAgICAgIHJldHVybiB0cnVlOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuCgkgICAgICoKCSAgICAg
KiBAcHJpdmF0ZQoJICAgICAqIEBuYW1lIGdldAoJICAgICAqIEBtZW1iZXJPZiBMaXN0Q2FjaGUK
CSAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC4K
CSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuCgkgICAgICovCgkg
ICAgZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkgewoJICAgICAgdmFyIGRhdGEgPSB0aGlzLl9f
ZGF0YV9fLAoJICAgICAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7CgoJICAg
ICAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAg
ZXhpc3RzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAbmFtZSBoYXMKCSAgICAg
KiBAbWVtYmVyT2YgTGlzdENhY2hlCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5
IG9mIHRoZSBlbnRyeSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJu
cyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHsKCSAgICAgIHJldHVybiBhc3Nv
Y0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xOwoJICAgIH0KCgkgICAgLyoqCgkgICAg
ICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLgoJICAgICAqCgkgICAgICog
QHByaXZhdGUKCSAgICAgKiBAbmFtZSBzZXQKCSAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlCgkg
ICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuCgkg
ICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LgoJICAgICAqIEByZXR1cm5z
IHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHsKCSAgICAgIHZhciBkYXRhID0gdGhp
cy5fX2RhdGFfXywKCSAgICAgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpOwoK
CSAgICAgIGlmIChpbmRleCA8IDApIHsKCSAgICAgICAgKyt0aGlzLnNpemU7CgkgICAgICAgIGRh
dGEucHVzaChba2V5LCB2YWx1ZV0pOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgZGF0YVtpbmRl
eF1bMV0gPSB2YWx1ZTsKCSAgICAgIH0KCSAgICAgIHJldHVybiB0aGlzOwoJICAgIH0KCgkgICAg
Ly8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuCgkgICAgTGlzdENhY2hlLnByb3RvdHlwZS5j
bGVhciA9IGxpc3RDYWNoZUNsZWFyOwoJICAgIExpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSdd
ID0gbGlzdENhY2hlRGVsZXRlOwoJICAgIExpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENh
Y2hlR2V0OwoJICAgIExpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzOwoJICAg
IExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0OwoKCSAgICAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRv
IHN0b3JlIGtleS12YWx1ZSBwYWlycy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICog
QGNvbnN0cnVjdG9yCgkgICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFs
dWUgcGFpcnMgdG8gY2FjaGUuCgkgICAgICovCgkgICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmll
cykgewoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9
PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoOwoKCSAgICAgIHRoaXMuY2xlYXIoKTsKCSAgICAg
IHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNb
aW5kZXhdOwoJICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pOwoJICAgICAgfQoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJv
bSB0aGUgbWFwLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAbmFtZSBjbGVhcgoJ
ICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG1hcENhY2hl
Q2xlYXIoKSB7CgkgICAgICB0aGlzLnNpemUgPSAwOwoJICAgICAgdGhpcy5fX2RhdGFfXyA9IHsK
CSAgICAgICAgJ2hhc2gnOiBuZXcgSGFzaCwKCSAgICAgICAgJ21hcCc6IG5ldyAoTWFwIHx8IExp
c3RDYWNoZSksCgkgICAgICAgICdzdHJpbmcnOiBuZXcgSGFzaAoJICAgICAgfTsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAu
CgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBuYW1lIGRlbGV0ZQoJICAgICAqIEBt
ZW1iZXJPZiBNYXBDYWNoZQoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0
aGUgdmFsdWUgdG8gcmVtb3ZlLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0
cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHsKCSAgICAgIHZhciByZXN1bHQgPSBnZXRN
YXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7CgkgICAgICB0aGlzLnNpemUgLT0gcmVz
dWx0ID8gMSA6IDA7CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAg
ICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRl
CgkgICAgICogQG5hbWUgZ2V0CgkgICAgICogQG1lbWJlck9mIE1hcENhY2hlCgkgICAgICogQHBh
cmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuCgkgICAgICogQHJl
dHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLgoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IG1hcENhY2hlR2V0KGtleSkgewoJICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5n
ZXQoa2V5KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBm
b3IgYGtleWAgZXhpc3RzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAbmFtZSBo
YXMKCSAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGUKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5
IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFu
fSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxz
ZWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7CgkgICAgICByZXR1
cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpOwoJICAgIH0KCgkgICAgLyoqCgkgICAg
ICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0
ZQoJICAgICAqIEBuYW1lIHNldAoJICAgICAqIEBtZW1iZXJPZiBNYXBDYWNoZQoJICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LgoJICAgICAqIEBw
YXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0
fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuCgkgICAgICovCgkgICAgZnVuY3Rpb24g
bWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkgewoJICAgICAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRo
aXMsIGtleSksCgkgICAgICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTsKCgkgICAgICBkYXRhLnNldChr
ZXksIHZhbHVlKTsKCSAgICAgIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAx
OwoJICAgICAgcmV0dXJuIHRoaXM7CgkgICAgfQoKCSAgICAvLyBBZGQgbWV0aG9kcyB0byBgTWFw
Q2FjaGVgLgoJICAgIE1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7Cgkg
ICAgTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlOwoJICAgIE1h
cENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDsKCSAgICBNYXBDYWNoZS5wcm90b3R5
cGUuaGFzID0gbWFwQ2FjaGVIYXM7CgkgICAgTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENh
Y2hlU2V0OwoKCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAgIC8qKgoJICAgICAqCgkgICAg
ICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy4K
CSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQGNvbnN0cnVjdG9yCgkgICAgICogQHBh
cmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHsKCSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAg
ICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7CgoJICAgICAg
dGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTsKCSAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVu
Z3RoKSB7CgkgICAgICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pOwoJICAgICAgfQoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS4KCSAgICAg
KgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQG5hbWUgYWRkCgkgICAgICogQG1lbWJlck9mIFNl
dENhY2hlCgkgICAgICogQGFsaWFzIHB1c2gKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2
YWx1ZSB0byBjYWNoZS4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNo
ZSBpbnN0YW5jZS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkgewoJ
ICAgICAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTsKCSAgICAgIHJl
dHVybiB0aGlzOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMg
aW4gdGhlIGFycmF5IGNhY2hlLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAbmFt
ZSBoYXMKCSAgICAgKiBAbWVtYmVyT2YgU2V0Q2FjaGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVy
bnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkgewoJICAgICAgcmV0dXJuIHRoaXMuX19kYXRh
X18uaGFzKHZhbHVlKTsKCSAgICB9CgoJICAgIC8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAu
CgkgICAgU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0g
c2V0Q2FjaGVBZGQ7CgkgICAgU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzOwoK
CSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBzdGFj
ayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLgoJICAgICAqCgkgICAgICog
QHByaXZhdGUKCSAgICAgKiBAY29uc3RydWN0b3IKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50
cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS4KCSAgICAgKi8KCSAgICBmdW5jdGlv
biBTdGFjayhlbnRyaWVzKSB7CgkgICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcg
TGlzdENhY2hlKGVudHJpZXMpOwoJICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUg
c3RhY2suCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBuYW1lIGNsZWFyCgkgICAg
ICogQG1lbWJlck9mIFN0YWNrCgkgICAgICovCgkgICAgZnVuY3Rpb24gc3RhY2tDbGVhcigpIHsK
CSAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlOwoJICAgICAgdGhpcy5zaXplID0g
MDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBm
cm9tIHRoZSBzdGFjay4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQG5hbWUgZGVs
ZXRlCgkgICAgICogQG1lbWJlck9mIFN0YWNrCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBU
aGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59
IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLgoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkgewoJICAgICAgdmFyIGRhdGEg
PSB0aGlzLl9fZGF0YV9fLAoJICAgICAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7
CgoJICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplOwoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC4KCSAg
ICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQG5hbWUgZ2V0CgkgICAgICogQG1lbWJlck9m
IFN0YWNrCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0
byBnZXQuCgkgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIHN0YWNrR2V0KGtleSkgewoJICAgICAgcmV0dXJuIHRoaXMuX19k
YXRhX18uZ2V0KGtleSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDaGVja3MgaWYgYSBzdGFj
ayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAg
KiBAbmFtZSBoYXMKCSAgICAgKiBAbWVtYmVyT2YgU3RhY2sKCSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHti
b29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNl
IGBmYWxzZWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7CgkgICAgICBy
ZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFNl
dHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJ
ICAgICAqIEBuYW1lIHNldAoJICAgICAqIEBtZW1iZXJPZiBTdGFjawoJICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LgoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1
cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBzdGFj
a1NldChrZXksIHZhbHVlKSB7CgkgICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187CgkgICAg
ICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkgewoJICAgICAgICB2YXIgcGFpcnMgPSBk
YXRhLl9fZGF0YV9fOwoJICAgICAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0Vf
QVJSQVlfU0laRSAtIDEpKSB7CgkgICAgICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pOwoJ
ICAgICAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplOwoJICAgICAgICAgIHJldHVybiB0aGlz
OwoJICAgICAgICB9CgkgICAgICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hl
KHBhaXJzKTsKCSAgICAgIH0KCSAgICAgIGRhdGEuc2V0KGtleSwgdmFsdWUpOwoJICAgICAgdGhp
cy5zaXplID0gZGF0YS5zaXplOwoJICAgICAgcmV0dXJuIHRoaXM7CgkgICAgfQoKCSAgICAvLyBB
ZGQgbWV0aG9kcyB0byBgU3RhY2tgLgoJICAgIFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNr
Q2xlYXI7CgkgICAgU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlOwoJICAg
IFN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDsKCSAgICBTdGFjay5wcm90b3R5cGUuaGFz
ID0gc3RhY2tIYXM7CgkgICAgU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0OwoKCSAgICAv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Yg
dGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC4K
CSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFs
dWUgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSBy
ZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLgoJICAgICAqIEByZXR1cm5zIHtBcnJh
eX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuCgkgICAgICovCgkgICAgZnVu
Y3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7CgkgICAgICB2YXIgaXNBcnIg
PSBpc0FycmF5KHZhbHVlKSwKCSAgICAgICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50
cyh2YWx1ZSksCgkgICAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZl
cih2YWx1ZSksCgkgICAgICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZm
ICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksCgkgICAgICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8
fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLAoJICAgICAgICAgIHJlc3VsdCA9IHNraXBJbmRl
eGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLAoJICAgICAgICAgIGxl
bmd0aCA9IHJlc3VsdC5sZW5ndGg7CgoJICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7Cgkg
ICAgICAgIGlmICgoaW5oZXJpdGVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkp
ICYmCgkgICAgICAgICAgICAhKHNraXBJbmRleGVzICYmICgKCSAgICAgICAgICAgICAgIC8vIFNh
ZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS4K
CSAgICAgICAgICAgICAgIGtleSA9PSAnbGVuZ3RoJyB8fAoJICAgICAgICAgICAgICAgLy8gTm9k
ZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMu
CgkgICAgICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdw
YXJlbnQnKSkgfHwKCSAgICAgICAgICAgICAgIC8vIFBoYW50b21KUyAyIGhhcyBlbnVtZXJhYmxl
IG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIHR5cGVkIGFycmF5cy4KCSAgICAgICAgICAgICAgIChp
c1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9
PSAnYnl0ZU9mZnNldCcpKSB8fAoJICAgICAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0
aWVzLgoJICAgICAgICAgICAgICAgaXNJbmRleChrZXksIGxlbmd0aCkKCSAgICAgICAgICAgICkp
KSB7CgkgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKCSAgICAgICAgfQoJICAgICAgfQoJICAg
ICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEEgc3BlY2lhbGl6ZWQg
dmVyc2lvbiBvZiBgXy5zYW1wbGVgIGZvciBhcnJheXMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0
ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuCgkgICAg
ICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LgoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIGFycmF5U2FtcGxlKGFycmF5KSB7CgkgICAgICB2YXIgbGVuZ3RoID0gYXJyYXku
bGVuZ3RoOwoJICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2Jhc2VSYW5kb20oMCwgbGVuZ3Ro
IC0gMSldIDogdW5kZWZpbmVkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQSBzcGVjaWFsaXpl
ZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZVNpemVgIGZvciBhcnJheXMuCgkgICAgICoKCSAgICAgKiBA
cHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUu
CgkgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1w
bGUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMu
CgkgICAgICovCgkgICAgZnVuY3Rpb24gYXJyYXlTYW1wbGVTaXplKGFycmF5LCBuKSB7CgkgICAg
ICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSwgYmFzZUNsYW1wKG4sIDAsIGFy
cmF5Lmxlbmd0aCkpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQSBzcGVjaWFsaXplZCB2ZXJz
aW9uIG9mIGBfLnNodWZmbGVgIGZvciBhcnJheXMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJ
ICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLgoJICAgICAq
IEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHNodWZmbGVkIGFycmF5LgoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGFycmF5U2h1ZmZsZShhcnJheSkgewoJICAgICAgcmV0dXJuIHNodWZm
bGVTZWxmKGNvcHlBcnJheShhcnJheSkpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBm
dW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3Np
Z24KCSAgICAgKiBgdW5kZWZpbmVkYCB2YWx1ZXMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJ
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuCgkgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24u
CgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLgoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7CgkgICAg
ICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8
CgkgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHsK
CSAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7CgkgICAgICB9Cgkg
ICAgfQoKCSAgICAvKioKCSAgICAgKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVj
dGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50CgkgICAgICogdXNpbmcg
W2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIv
Ny4wLyNzZWMtc2FtZXZhbHVlemVybykKCSAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMu
CgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qg
VGhlIG9iamVjdCB0byBtb2RpZnkuCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5
IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUg
dmFsdWUgdG8gYXNzaWduLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVj
dCwga2V5LCB2YWx1ZSkgewoJICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07CgkgICAg
ICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwg
dmFsdWUpKSB8fAoJICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9i
amVjdCkpKSB7CgkgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpOwoJ
ICAgICAgfQoJICAgIH0KCgkgICAgLyoqCgkgICAgICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2gg
dGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLgoJICAgICAq
CgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkg
dG8gaW5zcGVjdC4KCSAgICAgKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3Iu
CgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNo
ZWQgdmFsdWUsIGVsc2UgYC0xYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBhc3NvY0luZGV4T2Yo
YXJyYXksIGtleSkgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCSAgICAgIHdo
aWxlIChsZW5ndGgtLSkgewoJICAgICAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkg
ewoJICAgICAgICAgIHJldHVybiBsZW5ndGg7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJl
dHVybiAtMTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEFnZ3JlZ2F0ZXMgZWxlbWVudHMgb2Yg
YGNvbGxlY3Rpb25gIG9uIGBhY2N1bXVsYXRvcmAgd2l0aCBrZXlzIHRyYW5zZm9ybWVkCgkgICAg
ICogYnkgYGl0ZXJhdGVlYCBhbmQgdmFsdWVzIHNldCBieSBgc2V0dGVyYC4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhl
IGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNl
dHRlciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLgoJICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy4K
CSAgICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRl
ZCBvYmplY3QuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRv
cmAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUFnZ3JlZ2F0b3IoY29sbGVjdGlvbiwgc2V0
dGVyLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHsKCSAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24s
IGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHsKCSAgICAgICAgc2V0dGVyKGFjY3Vt
dWxhdG9yLCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUpLCBjb2xsZWN0aW9uKTsKCSAgICAgIH0pOwoJ
ICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRp
cGxlIHNvdXJjZXMKCSAgICAgKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLgoJICAgICAqCgkg
ICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5h
dGlvbiBvYmplY3QuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9i
amVjdC4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHsKCSAgICAgIHJldHVy
biBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2ln
bkluYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMKCSAgICAgKiBvciBgY3Vz
dG9taXplcmAgZnVuY3Rpb25zLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFy
YW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuCgkgICAgICogQHBhcmFt
IHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC4KCSAgICAgKiBAcmV0dXJucyB7T2Jq
ZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ25J
bihvYmplY3QsIHNvdXJjZSkgewoJICAgICAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNv
dXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBU
aGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYXNzaWduVmFsdWVgIGFuZCBgYXNzaWduTWVyZ2VW
YWx1ZWAgd2l0aG91dAoJICAgICAqIHZhbHVlIGNoZWNrcy4KCSAgICAgKgoJICAgICAqIEBwcml2
YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS4K
CSAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFz
c2lnbi4KCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uCgkgICAg
ICovCgkgICAgZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkgewoJ
ICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJyAmJiBkZWZpbmVQcm9wZXJ0eSkgewoJICAgICAg
ICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwgewoJICAgICAgICAgICdjb25maWd1cmFibGUn
OiB0cnVlLAoJICAgICAgICAgICdlbnVtZXJhYmxlJzogdHJ1ZSwKCSAgICAgICAgICAndmFsdWUn
OiB2YWx1ZSwKCSAgICAgICAgICAnd3JpdGFibGUnOiB0cnVlCgkgICAgICAgIH0pOwoJICAgICAg
fSBlbHNlIHsKCSAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTsKCSAgICAgIH0KCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmF0YCB3aXRob3V0
IHN1cHBvcnQgZm9yIGluZGl2aWR1YWwgcGF0aHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJ
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIu
CgkgICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBp
Y2suCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgZWxlbWVudHMu
CgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUF0KG9iamVjdCwgcGF0aHMpIHsKCSAgICAgIHZh
ciBpbmRleCA9IC0xLAoJICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCwKCSAgICAgICAg
ICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAoJICAgICAgICAgIHNraXAgPSBvYmplY3QgPT0gbnVs
bDsKCgkgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICByZXN1bHRbaW5k
ZXhdID0gc2tpcCA/IHVuZGVmaW5lZCA6IGdldChvYmplY3QsIHBhdGhzW2luZGV4XSk7CgkgICAg
ICB9CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY2xhbXBgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3Vt
ZW50cy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IG51
bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXJd
IFRoZSBsb3dlciBib3VuZC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVwcGVy
IGJvdW5kLgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQgbnVt
YmVyLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VDbGFtcChudW1iZXIsIGxvd2VyLCB1cHBl
cikgewoJICAgICAgaWYgKG51bWJlciA9PT0gbnVtYmVyKSB7CgkgICAgICAgIGlmICh1cHBlciAh
PT0gdW5kZWZpbmVkKSB7CgkgICAgICAgICAgbnVtYmVyID0gbnVtYmVyIDw9IHVwcGVyID8gbnVt
YmVyIDogdXBwZXI7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQp
IHsKCSAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPj0gbG93ZXIgPyBudW1iZXIgOiBsb3dlcjsK
CSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIG51bWJlcjsKCSAgICB9CgoJICAgIC8q
KgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xv
bmVEZWVwYCB3aGljaCB0cmFja3MKCSAgICAgKiB0cmF2ZXJzZWQgb2JqZWN0cy4KCSAgICAgKgoJ
ICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xv
bmUuCgkgICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLgoJ
ICAgICAqICAxIC0gRGVlcCBjbG9uZQoJICAgICAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJv
cGVydGllcwoJICAgICAqICA0IC0gQ2xvbmUgc3ltYm9scwoJICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuCgkgICAg
ICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC4KCSAgICAgKiBAcGFy
YW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC4KCSAgICAg
KiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRo
ZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUg
Y2xvbmVkIHZhbHVlLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0
bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7CgkgICAgICB2YXIgcmVzdWx0
LAoJICAgICAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsCgkgICAgICAg
ICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRywKCSAgICAgICAgICBpc0Z1bGwg
PSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHOwoKCSAgICAgIGlmIChjdXN0b21pemVyKSB7
CgkgICAgICAgIHJlc3VsdCA9IG9iamVjdCA/IGN1c3RvbWl6ZXIodmFsdWUsIGtleSwgb2JqZWN0
LCBzdGFjaykgOiBjdXN0b21pemVyKHZhbHVlKTsKCSAgICAgIH0KCSAgICAgIGlmIChyZXN1bHQg
IT09IHVuZGVmaW5lZCkgewoJICAgICAgICByZXR1cm4gcmVzdWx0OwoJICAgICAgfQoJICAgICAg
aWYgKCFpc09iamVjdCh2YWx1ZSkpIHsKCSAgICAgICAgcmV0dXJuIHZhbHVlOwoJICAgICAgfQoJ
ICAgICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7CgkgICAgICBpZiAoaXNBcnIpIHsKCSAg
ICAgICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpOwoJICAgICAgICBpZiAoIWlzRGVl
cCkgewoJICAgICAgICAgIHJldHVybiBjb3B5QXJyYXkodmFsdWUsIHJlc3VsdCk7CgkgICAgICAg
IH0KCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLAoJICAg
ICAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZzsKCgkgICAg
ICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHsKCSAgICAgICAgICByZXR1cm4gY2xvbmVCdWZmZXIo
dmFsdWUsIGlzRGVlcCk7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcg
fHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkgewoJICAgICAgICAgIHJl
c3VsdCA9IChpc0ZsYXQgfHwgaXNGdW5jKSA/IHt9IDogaW5pdENsb25lT2JqZWN0KHZhbHVlKTsK
CSAgICAgICAgICBpZiAoIWlzRGVlcCkgewoJICAgICAgICAgICAgcmV0dXJuIGlzRmxhdAoJICAg
ICAgICAgICAgICA/IGNvcHlTeW1ib2xzSW4odmFsdWUsIGJhc2VBc3NpZ25JbihyZXN1bHQsIHZh
bHVlKSkKCSAgICAgICAgICAgICAgOiBjb3B5U3ltYm9scyh2YWx1ZSwgYmFzZUFzc2lnbihyZXN1
bHQsIHZhbHVlKSk7CgkgICAgICAgICAgfQoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIGlm
ICghY2xvbmVhYmxlVGFnc1t0YWddKSB7CgkgICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFs
dWUgOiB7fTsKCSAgICAgICAgICB9CgkgICAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQnlUYWco
dmFsdWUsIHRhZywgaXNEZWVwKTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgLy8gQ2hlY2sg
Zm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIHJldHVybiBpdHMgY29ycmVzcG9uZGluZyBjbG9u
ZS4KCSAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7CgkgICAgICB2YXIgc3RhY2tl
ZCA9IHN0YWNrLmdldCh2YWx1ZSk7CgkgICAgICBpZiAoc3RhY2tlZCkgewoJICAgICAgICByZXR1
cm4gc3RhY2tlZDsKCSAgICAgIH0KCSAgICAgIHN0YWNrLnNldCh2YWx1ZSwgcmVzdWx0KTsKCgkg
ICAgICBpZiAoaXNTZXQodmFsdWUpKSB7CgkgICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24o
c3ViVmFsdWUpIHsKCSAgICAgICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0
bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpOwoJICAgICAgICB9KTsK
CSAgICAgIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7CgkgICAgICAgIHZhbHVlLmZvckVhY2go
ZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkgewoJICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNl
Q2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7
CgkgICAgICAgIH0pOwoJICAgICAgfQoKCSAgICAgIHZhciBrZXlzRnVuYyA9IGlzRnVsbAoJICAg
ICAgICA/IChpc0ZsYXQgPyBnZXRBbGxLZXlzSW4gOiBnZXRBbGxLZXlzKQoJICAgICAgICA6IChp
c0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTsKCgkgICAgICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVm
aW5lZCA6IGtleXNGdW5jKHZhbHVlKTsKCSAgICAgIGFycmF5RWFjaChwcm9wcyB8fCB2YWx1ZSwg
ZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkgewoJICAgICAgICBpZiAocHJvcHMpIHsKCSAgICAgICAg
ICBrZXkgPSBzdWJWYWx1ZTsKCSAgICAgICAgICBzdWJWYWx1ZSA9IHZhbHVlW2tleV07CgkgICAg
ICAgIH0KCSAgICAgICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxl
IHRvIGNhbGwgc3RhY2sgbGltaXRzKS4KCSAgICAgICAgYXNzaWduVmFsdWUocmVzdWx0LCBrZXks
IGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3Rh
Y2spKTsKCSAgICAgIH0pOwoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJ
ICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zYCB3aGljaCBkb2Vz
bid0IGNsb25lIGBzb3VyY2VgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFy
YW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBj
b25mb3JtIHRvLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNw
ZWMgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUNvbmZvcm1zKHNvdXJjZSkg
ewoJICAgICAgdmFyIHByb3BzID0ga2V5cyhzb3VyY2UpOwoJICAgICAgcmV0dXJuIGZ1bmN0aW9u
KG9iamVjdCkgewoJICAgICAgICByZXR1cm4gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2Us
IHByb3BzKTsKCSAgICAgIH07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBvZiBgXy5jb25mb3Jtc1RvYCB3aGljaCBhY2NlcHRzIGBwcm9wc2AgdG8gY2hl
Y2suCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpl
Y3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2Ug
VGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uCgkgICAgICog
QHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGNvbmZvcm1zLCBl
bHNlIGBmYWxzZWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUNvbmZvcm1zVG8ob2JqZWN0
LCBzb3VyY2UsIHByb3BzKSB7CgkgICAgICB2YXIgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwoJICAg
ICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CgkgICAgICAgIHJldHVybiAhbGVuZ3RoOwoJICAgICAg
fQoJICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7CgkgICAgICB3aGlsZSAobGVuZ3RoLS0p
IHsKCSAgICAgICAgdmFyIGtleSA9IHByb3BzW2xlbmd0aF0sCgkgICAgICAgICAgICBwcmVkaWNh
dGUgPSBzb3VyY2Vba2V5XSwKCSAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07CgoJICAg
ICAgICBpZiAoKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgfHwgIXBy
ZWRpY2F0ZSh2YWx1ZSkpIHsKCSAgICAgICAgICByZXR1cm4gZmFsc2U7CgkgICAgICAgIH0KCSAg
ICAgIH0KCSAgICAgIHJldHVybiB0cnVlOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0
cyBgYXJnc2AKCSAgICAgKiB0byBwcm92aWRlIHRvIGBmdW5jYC4KCSAgICAgKgoJICAgICAqIEBw
cml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVs
YXkuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29u
ZHMgdG8gZGVsYXkgaW52b2NhdGlvbi4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBh
cmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuCgkgICAgICogQHJldHVybnMge251bWJlcnxP
YmplY3R9IFJldHVybnMgdGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0LgoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7CgkgICAgICBpZiAodHlw
ZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewoJICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZV
TkNfRVJST1JfVEVYVCk7CgkgICAgICB9CgkgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlv
bigpIHsgZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOyB9LCB3YWl0KTsKCSAgICB9CgoJICAg
IC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5k
aWZmZXJlbmNlYCB3aXRob3V0IHN1cHBvcnQKCSAgICAgKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxl
IGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUK
CSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICAg
KiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBleGNsdWRlLgoJICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1l
bnQuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9y
IGludm9rZWQgcGVyIGVsZW1lbnQuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRo
ZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJh
c2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7CgkgICAg
ICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsCgkg
ICAgICAgICAgaXNDb21tb24gPSB0cnVlLAoJICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0
aCwKCSAgICAgICAgICByZXN1bHQgPSBbXSwKCSAgICAgICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1
ZXMubGVuZ3RoOwoKCSAgICAgIGlmICghbGVuZ3RoKSB7CgkgICAgICAgIHJldHVybiByZXN1bHQ7
CgkgICAgICB9CgkgICAgICBpZiAoaXRlcmF0ZWUpIHsKCSAgICAgICAgdmFsdWVzID0gYXJyYXlN
YXAodmFsdWVzLCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTsKCSAgICAgIH0KCSAgICAgIGlmIChjb21w
YXJhdG9yKSB7CgkgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlc1dpdGg7CgkgICAgICAg
IGlzQ29tbW9uID0gZmFsc2U7CgkgICAgICB9CgkgICAgICBlbHNlIGlmICh2YWx1ZXMubGVuZ3Ro
ID49IExBUkdFX0FSUkFZX1NJWkUpIHsKCSAgICAgICAgaW5jbHVkZXMgPSBjYWNoZUhhczsKCSAg
ICAgICAgaXNDb21tb24gPSBmYWxzZTsKCSAgICAgICAgdmFsdWVzID0gbmV3IFNldENhY2hlKHZh
bHVlcyk7CgkgICAgICB9CgkgICAgICBvdXRlcjoKCSAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVu
Z3RoKSB7CgkgICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSwKCSAgICAgICAgICAgIGNv
bXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpOwoKCSAg
ICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7Cgkg
ICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHsKCSAgICAgICAg
ICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7CgkgICAgICAgICAgd2hpbGUgKHZhbHVl
c0luZGV4LS0pIHsKCSAgICAgICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21w
dXRlZCkgewoJICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKCSAgICAgICAgICAgIH0KCSAg
ICAgICAgICB9CgkgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwoJICAgICAgICB9CgkgICAg
ICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkgewoJ
ICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAg
cmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVu
dGF0aW9uIG9mIGBfLmZvckVhY2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRo
YW5kcy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmpl
Y3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRp
b24uCgkgICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAu
CgkgICAgICovCgkgICAgdmFyIGJhc2VFYWNoID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93bik7
CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hS
aWdodGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJICAgICAqCgkg
ICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBU
aGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
aXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcmV0
dXJucyB7QXJyYXl8T2JqZWN0fSBSZXR1cm5zIGBjb2xsZWN0aW9uYC4KCSAgICAgKi8KCSAgICB2
YXIgYmFzZUVhY2hSaWdodCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd25SaWdodCwgdHJ1ZSk7
CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3
aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuCgkgICAgICoKCSAgICAgKiBA
cHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xs
ZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNh
dGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7
Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0
ZSBjaGVjaywKCSAgICAgKiAgZWxzZSBgZmFsc2VgCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFz
ZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkgewoJICAgICAgdmFyIHJlc3VsdCA9IHRydWU7
CgkgICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxl
Y3Rpb24pIHsKCSAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xs
ZWN0aW9uKTsKCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH0pOwoJICAgICAgcmV0dXJu
IHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9u
IG9mIG1ldGhvZHMgbGlrZSBgXy5tYXhgIGFuZCBgXy5taW5gIHdoaWNoIGFjY2VwdHMgYQoJICAg
ICAqIGBjb21wYXJhdG9yYCB0byBkZXRlcm1pbmUgdGhlIGV4dHJlbXVtIHZhbHVlLgoJICAgICAq
CgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkg
dG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBp
dGVyYXRlZSBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
Y29tcGFyYXRvciBUaGUgY29tcGFyYXRvciB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzLgoJICAgICAq
IEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBleHRyZW11bSB2YWx1ZS4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBiYXNlRXh0cmVtdW0oYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7CgkgICAg
ICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgoJICAg
ICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlb
aW5kZXhdLAoJICAgICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVlKHZhbHVlKTsKCgkgICAgICAg
IGlmIChjdXJyZW50ICE9IG51bGwgJiYgKGNvbXB1dGVkID09PSB1bmRlZmluZWQKCSAgICAgICAg
ICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpCgkgICAg
ICAgICAgICAgIDogY29tcGFyYXRvcihjdXJyZW50LCBjb21wdXRlZCkKCSAgICAgICAgICAgICkp
IHsKCSAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LAoJICAgICAgICAgICAgICByZXN1
bHQgPSB2YWx1ZTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbGxg
IHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRl
CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZpbGwuCgkgICAgICog
QHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdpdGguCgkgICAgICog
QHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uCgkgICAgICogQHBh
cmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLgoJICAgICAq
IEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGJhc2VGaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCkgewoJICAgICAgdmFyIGxlbmd0aCA9
IGFycmF5Lmxlbmd0aDsKCgkgICAgICBzdGFydCA9IHRvSW50ZWdlcihzdGFydCk7CgkgICAgICBp
ZiAoc3RhcnQgPCAwKSB7CgkgICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChs
ZW5ndGggKyBzdGFydCk7CgkgICAgICB9CgkgICAgICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQg
fHwgZW5kID4gbGVuZ3RoKSA/IGxlbmd0aCA6IHRvSW50ZWdlcihlbmQpOwoJICAgICAgaWYgKGVu
ZCA8IDApIHsKCSAgICAgICAgZW5kICs9IGxlbmd0aDsKCSAgICAgIH0KCSAgICAgIGVuZCA9IHN0
YXJ0ID4gZW5kID8gMCA6IHRvTGVuZ3RoKGVuZCk7CgkgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQp
IHsKCSAgICAgICAgYXJyYXlbc3RhcnQrK10gPSB2YWx1ZTsKCSAgICAgIH0KCSAgICAgIHJldHVy
biBhcnJheTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9u
IG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJ
ICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29s
bGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkg
ICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHsK
CSAgICAgIHZhciByZXN1bHQgPSBbXTsKCSAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0
aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikgewoJICAgICAgICBpZiAocHJlZGljYXRlKHZh
bHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHsKCSAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7
CgkgICAgICAgIH0KCSAgICAgIH0pOwoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAg
IC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGgg
c3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy4KCSAgICAgKgoJICAgICAqIEBwcml2
YXRlCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uCgkg
ICAgICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC4K
CSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1
bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtp
c1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3Mu
CgkgICAgICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZh
bHVlLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBh
cnJheS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHBy
ZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkgewoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAg
ICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKCSAgICAgIHByZWRpY2F0ZSB8fCAocHJlZGlj
YXRlID0gaXNGbGF0dGVuYWJsZSk7CgkgICAgICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTsKCgkg
ICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICB2YXIgdmFsdWUgPSBhcnJh
eVtpbmRleF07CgkgICAgICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkgewoJ
ICAgICAgICAgIGlmIChkZXB0aCA+IDEpIHsKCSAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZs
YXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuCgkgICAgICAg
ICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCBy
ZXN1bHQpOwoJICAgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICBhcnJheVB1c2gocmVzdWx0
LCB2YWx1ZSk7CgkgICAgICAgICAgfQoJICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkgewoJ
ICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlOwoJICAgICAgICB9CgkgICAg
ICB9CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9i
amVjdGAKCSAgICAgKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9r
ZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4KCSAgICAgKiBJdGVyYXRlZSBmdW5jdGlv
bnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxz
ZWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpl
Y3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
aXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBv
YmplY3RgLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkgICAg
ICovCgkgICAgdmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7CgoJICAgIC8qKgoJICAgICAq
IFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYmFzZUZvcmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMg
b3ZlciBwcm9wZXJ0aWVzCgkgICAgICogaW4gdGhlIG9wcG9zaXRlIG9yZGVyLgoJICAgICAqCgkg
ICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3Qg
dG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBm
dW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
a2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC4KCSAgICAg
KiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqLwoJICAgIHZhciBi
YXNlRm9yUmlnaHQgPSBjcmVhdGVCYXNlRm9yKHRydWUpOwoKCSAgICAvKioKCSAgICAgKiBUaGUg
YmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRl
cmF0ZWUgc2hvcnRoYW5kcy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFt
IHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9u
LgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkgICAgICovCgkg
ICAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7CgkgICAgICByZXR1cm4g
b2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25SaWdodGAgd2l0
aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJICAgICAqCgkgICAgICogQHBy
aXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0
ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBp
bnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBg
b2JqZWN0YC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBp
dGVyYXRlZSkgewoJICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yUmlnaHQob2JqZWN0LCBp
dGVyYXRlZSwga2V5cyk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1l
bnRhdGlvbiBvZiBgXy5mdW5jdGlvbnNgIHdoaWNoIGNyZWF0ZXMgYW4gYXJyYXkgb2YKCSAgICAg
KiBgb2JqZWN0YCBmdW5jdGlvbiBwcm9wZXJ0eSBuYW1lcyBmaWx0ZXJlZCBmcm9tIGBwcm9wc2Au
CgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qg
VGhlIG9iamVjdCB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBw
cm9wZXJ0eSBuYW1lcyB0byBmaWx0ZXIuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5z
IHRoZSBmdW5jdGlvbiBuYW1lcy4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlRnVuY3Rpb25z
KG9iamVjdCwgcHJvcHMpIHsKCSAgICAgIHJldHVybiBhcnJheUZpbHRlcihwcm9wcywgZnVuY3Rp
b24oa2V5KSB7CgkgICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG9iamVjdFtrZXldKTsKCSAgICAg
IH0pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2Yg
YF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLgoJICAgICAqCgkgICAg
ICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8g
cXVlcnkuCgkgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhl
IHByb3BlcnR5IHRvIGdldC4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2
ZWQgdmFsdWUuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHsK
CSAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpOwoKCSAgICAgIHZhciBpbmRleCA9
IDAsCgkgICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7CgoJICAgICAgd2hpbGUgKG9iamVj
dCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7CgkgICAgICAgIG9iamVjdCA9IG9iamVjdFt0
b0tleShwYXRoW2luZGV4KytdKV07CgkgICAgICB9CgkgICAgICByZXR1cm4gKGluZGV4ICYmIGlu
ZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7CgkgICAgfQoKCSAgICAvKioKCSAg
ICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxL
ZXlzSW5gIHdoaWNoIHVzZXMKCSAgICAgKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRv
IGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQKCSAgICAgKiBzeW1ib2xzIG9m
IGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVj
dH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
a2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC4KCSAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBz
eW1ib2xzIG9mIGBvYmplY3RgLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUg
YXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuCgkgICAgICovCgkgICAgZnVuY3Rp
b24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHsKCSAgICAg
IHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpOwoJICAgICAgcmV0dXJuIGlzQXJyYXkob2Jq
ZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRh
Z2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnku
CgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7CgkgICAgICBpZiAodmFsdWUg
PT0gbnVsbCkgewoJICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5l
ZFRhZyA6IG51bGxUYWc7CgkgICAgICB9CgkgICAgICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYm
IHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpCgkgICAgICAgID8gZ2V0UmF3VGFnKHZh
bHVlKQoJICAgICAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTsKCSAgICB9CgoJICAgIC8qKgoJ
ICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmd0YCB3aGljaCBkb2Vzbid0IGNv
ZXJjZSBhcmd1bWVudHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuCgkgICAgICogQHBhcmFtIHsqfSBvdGhlciBU
aGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYCwKCSAgICAgKiAg
ZWxzZSBgZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VHdCh2YWx1ZSwgb3RoZXIp
IHsKCSAgICAgIHJldHVybiB2YWx1ZSA+IG90aGVyOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
VGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRl
ZXAgcGF0aHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7QXJyYXl8c3Ry
aW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gYmFzZUhhcyhvYmplY3QsIGtleSkgewoJICAgICAgcmV0dXJuIG9iamVjdCAhPSBu
dWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3Vw
cG9ydCBmb3IgZGVlcCBwYXRocy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHBhcmFt
IHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHti
b29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHsKCSAgICAgIHJldHVy
biBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pblJhbmdlYCB3aGljaCBk
b2Vzbid0IGNvZXJjZSBhcmd1bWVudHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byBjaGVjay4KCSAgICAgKiBAcGFy
YW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS4KCSAgICAgKiBAcGFyYW0g
e251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLgoJICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZh
bHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlSW5SYW5nZShudW1iZXIsIHN0YXJ0LCBl
bmQpIHsKCSAgICAgIHJldHVybiBudW1iZXIgPj0gbmF0aXZlTWluKHN0YXJ0LCBlbmQpICYmIG51
bWJlciA8IG5hdGl2ZU1heChzdGFydCwgZW5kKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRo
ZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3
aXRob3V0IHN1cHBvcnQKCSAgICAgKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2Nl
cHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LgoJ
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQg
cGVyIGVsZW1lbnQuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBj
b21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuCgkgICAgICogQHJldHVybnMge0FycmF5fSBS
ZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2Ygc2hhcmVkIHZhbHVlcy4KCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHsKCSAg
ICAgIHZhciBpbmNsdWRlcyA9IGNvbXBhcmF0b3IgPyBhcnJheUluY2x1ZGVzV2l0aCA6IGFycmF5
SW5jbHVkZXMsCgkgICAgICAgICAgbGVuZ3RoID0gYXJyYXlzWzBdLmxlbmd0aCwKCSAgICAgICAg
ICBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLAoJICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVu
Z3RoLAoJICAgICAgICAgIGNhY2hlcyA9IEFycmF5KG90aExlbmd0aCksCgkgICAgICAgICAgbWF4
TGVuZ3RoID0gSW5maW5pdHksCgkgICAgICAgICAgcmVzdWx0ID0gW107CgoJICAgICAgd2hpbGUg
KG90aEluZGV4LS0pIHsKCSAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW290aEluZGV4XTsKCSAg
ICAgICAgaWYgKG90aEluZGV4ICYmIGl0ZXJhdGVlKSB7CgkgICAgICAgICAgYXJyYXkgPSBhcnJh
eU1hcChhcnJheSwgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7CgkgICAgICAgIH0KCSAgICAgICAgbWF4
TGVuZ3RoID0gbmF0aXZlTWluKGFycmF5Lmxlbmd0aCwgbWF4TGVuZ3RoKTsKCSAgICAgICAgY2Fj
aGVzW290aEluZGV4XSA9ICFjb21wYXJhdG9yICYmIChpdGVyYXRlZSB8fCAobGVuZ3RoID49IDEy
MCAmJiBhcnJheS5sZW5ndGggPj0gMTIwKSkKCSAgICAgICAgICA/IG5ldyBTZXRDYWNoZShvdGhJ
bmRleCAmJiBhcnJheSkKCSAgICAgICAgICA6IHVuZGVmaW5lZDsKCSAgICAgIH0KCSAgICAgIGFy
cmF5ID0gYXJyYXlzWzBdOwoKCSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAgICAgIHNlZW4g
PSBjYWNoZXNbMF07CgoJICAgICAgb3V0ZXI6CgkgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0
aCAmJiByZXN1bHQubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7CgkgICAgICAgIHZhciB2YWx1ZSA9IGFy
cmF5W2luZGV4XSwKCSAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2
YWx1ZSkgOiB2YWx1ZTsKCgkgICAgICAgIHZhbHVlID0gKGNvbXBhcmF0b3IgfHwgdmFsdWUgIT09
IDApID8gdmFsdWUgOiAwOwoJICAgICAgICBpZiAoIShzZWVuCgkgICAgICAgICAgICAgID8gY2Fj
aGVIYXMoc2VlbiwgY29tcHV0ZWQpCgkgICAgICAgICAgICAgIDogaW5jbHVkZXMocmVzdWx0LCBj
b21wdXRlZCwgY29tcGFyYXRvcikKCSAgICAgICAgICAgICkpIHsKCSAgICAgICAgICBvdGhJbmRl
eCA9IG90aExlbmd0aDsKCSAgICAgICAgICB3aGlsZSAoLS1vdGhJbmRleCkgewoJICAgICAgICAg
ICAgdmFyIGNhY2hlID0gY2FjaGVzW290aEluZGV4XTsKCSAgICAgICAgICAgIGlmICghKGNhY2hl
CgkgICAgICAgICAgICAgICAgICA/IGNhY2hlSGFzKGNhY2hlLCBjb21wdXRlZCkKCSAgICAgICAg
ICAgICAgICAgIDogaW5jbHVkZXMoYXJyYXlzW290aEluZGV4XSwgY29tcHV0ZWQsIGNvbXBhcmF0
b3IpKQoJICAgICAgICAgICAgICAgICkgewoJICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsK
CSAgICAgICAgICAgIH0KCSAgICAgICAgICB9CgkgICAgICAgICAgaWYgKHNlZW4pIHsKCSAgICAg
ICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7CgkgICAgICAgICAgfQoJICAgICAgICAgIHJlc3Vs
dC5wdXNoKHZhbHVlKTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlu
dmVydGAgYW5kIGBfLmludmVydEJ5YCB3aGljaCBpbnZlcnRzCgkgICAgICogYG9iamVjdGAgd2l0
aCB2YWx1ZXMgdHJhbnNmb3JtZWQgYnkgYGl0ZXJhdGVlYCBhbmQgc2V0IGJ5IGBzZXR0ZXJgLgoJ
ICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRo
ZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNldHRl
ciBUaGUgZnVuY3Rpb24gdG8gc2V0IGBhY2N1bXVsYXRvcmAgdmFsdWVzLgoJICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0gdmFsdWVzLgoJ
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBpbnZlcnRlZCBv
YmplY3QuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBhY2N1bXVsYXRvcmAu
CgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCBpdGVy
YXRlZSwgYWNjdW11bGF0b3IpIHsKCSAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2
YWx1ZSwga2V5LCBvYmplY3QpIHsKCSAgICAgICAgc2V0dGVyKGFjY3VtdWxhdG9yLCBpdGVyYXRl
ZSh2YWx1ZSksIGtleSwgb2JqZWN0KTsKCSAgICAgIH0pOwoJICAgICAgcmV0dXJuIGFjY3VtdWxh
dG9yOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2Yg
YF8uaW52b2tlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWwKCSAgICAgKiBtZXRob2Qg
YXJndW1lbnRzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVj
dH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtBcnJheXxzdHJp
bmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuCgkgICAgICogQHBhcmFt
IHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguCgkg
ICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRo
b2QuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3Mp
IHsKCSAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpOwoJICAgICAgb2JqZWN0ID0g
cGFyZW50KG9iamVjdCwgcGF0aCk7CgkgICAgICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8g
b2JqZWN0IDogb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTsKCSAgICAgIHJldHVybiBmdW5jID09
IG51bGwgPyB1bmRlZmluZWQgOiBhcHBseShmdW5jLCBvYmplY3QsIGFyZ3MpOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNg
LgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2
YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAg
aWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsCgkgICAgICovCgkgICAgZnVuY3Rp
b24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7CgkgICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZh
bHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcnJheUJ1ZmZlcmAgd2l0aG91
dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAq
IEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHti
b29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxz
ZSBgZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VJc0FycmF5QnVmZmVyKHZhbHVl
KSB7CgkgICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVl
KSA9PSBhcnJheUJ1ZmZlclRhZzsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGlt
cGxlbWVudGF0aW9uIG9mIGBfLmlzRGF0ZWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMu
CgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZh
bHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBp
ZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBiYXNlSXNEYXRlKHZhbHVlKSB7CgkgICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZh
bHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9y
dHMgcGFydGlhbCBjb21wYXJpc29ucwoJICAgICAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVj
dHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhl
IHZhbHVlIHRvIGNvbXBhcmUuCgkgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFs
dWUgdG8gY29tcGFyZS4KCSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1h
c2sgZmxhZ3MuCgkgICAgICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvbgoJICAgICAqICAyIC0g
UGFydGlhbCBjb21wYXJpc29uCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJd
IFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuCgkgICAgICogQHBhcmFtIHtP
YmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVj
dHMuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1
ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBi
YXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7Cgkg
ICAgICBpZiAodmFsdWUgPT09IG90aGVyKSB7CgkgICAgICAgIHJldHVybiB0cnVlOwoJICAgICAg
fQoJICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0
TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7CgkgICAgICAgIHJldHVybiB2
YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyOwoJICAgICAgfQoJICAgICAgcmV0dXJu
IGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJ
c0VxdWFsLCBzdGFjayk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBBIHNwZWNpYWxpemVkIHZl
cnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZv
cm1zCgkgICAgICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3Rz
IGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhcgoJICAgICAqIHJlZmVyZW5jZXMgdG8gYmUg
Y29tcGFyZWQuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLgoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBv
dGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9
IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRl
dGFpbHMuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24g
dG8gY3VzdG9taXplIGNvbXBhcmlzb25zLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFs
RnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy4KCSAg
ICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFu
ZCBgb3RoZXJgIG9iamVjdHMuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRy
dWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuCgkgICAgICov
CgkgICAgZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1
c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHsKCSAgICAgIHZhciBvYmpJc0FyciA9IGlzQXJy
YXkob2JqZWN0KSwKCSAgICAgICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLAoJICAgICAg
ICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSwKCSAgICAg
ICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTsKCgkgICAg
ICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZzsKCSAgICAg
IG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnOwoKCSAgICAg
IHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsCgkgICAgICAgICAgb3RoSXNPYmog
PSBvdGhUYWcgPT0gb2JqZWN0VGFnLAoJICAgICAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBv
dGhUYWc7CgoJICAgICAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7CgkgICAg
ICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7CgkgICAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAg
ICAgICB9CgkgICAgICAgIG9iaklzQXJyID0gdHJ1ZTsKCSAgICAgICAgb2JqSXNPYmogPSBmYWxz
ZTsKCSAgICAgIH0KCSAgICAgIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7CgkgICAgICAg
IHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7CgkgICAgICAgIHJldHVybiAob2JqSXNBcnIg
fHwgaXNUeXBlZEFycmF5KG9iamVjdCkpCgkgICAgICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3Qs
IG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKQoJICAgICAgICAg
IDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIs
IGVxdWFsRnVuYywgc3RhY2spOwoJICAgICAgfQoJICAgICAgaWYgKCEoYml0bWFzayAmIENPTVBB
UkVfUEFSVElBTF9GTEFHKSkgewoJICAgICAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmog
JiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLAoJICAgICAgICAg
ICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwg
J19fd3JhcHBlZF9fJyk7CgoJICAgICAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBl
ZCkgewoJICAgICAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3Qu
dmFsdWUoKSA6IG9iamVjdCwKCSAgICAgICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFw
cGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyOwoKCSAgICAgICAgICBzdGFjayB8fCAoc3RhY2sg
PSBuZXcgU3RhY2spOwoJICAgICAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBv
dGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTsKCSAgICAgICAgfQoJICAg
ICAgfQoJICAgICAgaWYgKCFpc1NhbWVUYWcpIHsKCSAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAg
ICAgfQoJICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTsKCSAgICAgIHJldHVybiBl
cXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5j
LCBzdGFjayk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlv
biBvZiBgXy5pc01hcGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuCgkgICAgICoKCSAg
ICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNr
LgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlz
IGEgbWFwLCBlbHNlIGBmYWxzZWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUlzTWFwKHZh
bHVlKSB7CgkgICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUp
ID09IG1hcFRhZzsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0
aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5k
cy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVj
dCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBU
aGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC4KCSAgICAgKiBAcGFyYW0ge0Fy
cmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZs
YWdzIHRvIG1hdGNoLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUg
ZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLgoJICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAu
CgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNo
RGF0YSwgY3VzdG9taXplcikgewoJICAgICAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCwK
CSAgICAgICAgICBsZW5ndGggPSBpbmRleCwKCSAgICAgICAgICBub0N1c3RvbWl6ZXIgPSAhY3Vz
dG9taXplcjsKCgkgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKCSAgICAgICAgcmV0dXJuICFs
ZW5ndGg7CgkgICAgICB9CgkgICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTsKCSAgICAgIHdo
aWxlIChpbmRleC0tKSB7CgkgICAgICAgIHZhciBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTsKCSAg
ICAgICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkKCSAgICAgICAgICAgICAgPyBkYXRh
WzFdICE9PSBvYmplY3RbZGF0YVswXV0KCSAgICAgICAgICAgICAgOiAhKGRhdGFbMF0gaW4gb2Jq
ZWN0KQoJICAgICAgICAgICAgKSB7CgkgICAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAgICAgICB9
CgkgICAgICB9CgkgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICBkYXRh
ID0gbWF0Y2hEYXRhW2luZGV4XTsKCSAgICAgICAgdmFyIGtleSA9IGRhdGFbMF0sCgkgICAgICAg
ICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLAoJICAgICAgICAgICAgc3JjVmFsdWUgPSBkYXRh
WzFdOwoKCSAgICAgICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7CgkgICAgICAgICAg
aWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgewoJICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBlbHNlIHsKCSAgICAg
ICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7CgkgICAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHsK
CSAgICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwg
a2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spOwoJICAgICAgICAgIH0KCSAgICAgICAgICBpZiAo
IShyZXN1bHQgPT09IHVuZGVmaW5lZAoJICAgICAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3Jj
VmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVE
X0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKQoJICAgICAgICAgICAgICAgIDogcmVzdWx0CgkgICAg
ICAgICAgICAgICkpIHsKCSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgICAgICB9Cgkg
ICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiB0cnVlOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFk
IHNoaW0gY2hlY2tzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbiwKCSAgICAgKiAgZWxz
ZSBgZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkgewoJ
ICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7CgkgICAgICAg
IHJldHVybiBmYWxzZTsKCSAgICAgIH0KCSAgICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2
YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yOwoJICAgICAgcmV0dXJuIHBhdHRlcm4u
dGVzdCh0b1NvdXJjZSh2YWx1ZSkpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2Ug
aW1wbGVtZW50YXRpb24gb2YgYF8uaXNSZWdFeHBgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRp
b25zLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRo
ZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1
ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1
bmN0aW9uIGJhc2VJc1JlZ0V4cCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2
YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gcmVnZXhwVGFnOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9k
ZS5qcyBvcHRpbWl6YXRpb25zLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFy
YW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIGlzT2Jq
ZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBzZXRUYWc7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdp
dGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJu
cyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBl
bHNlIGBmYWxzZWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1
ZSkgewoJICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYKCSAgICAgICAgaXNMZW5n
dGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0
ZXJhdGVlYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSBbdmFs
dWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuCgkgICAg
ICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS4KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHsKCSAgICAgIC8vIERvbid0IHN0b3JlIHRo
ZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2Fm
YXJpIDkuCgkgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLgoJICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAn
ZnVuY3Rpb24nKSB7CgkgICAgICAgIHJldHVybiB2YWx1ZTsKCSAgICAgIH0KCSAgICAgIGlmICh2
YWx1ZSA9PSBudWxsKSB7CgkgICAgICAgIHJldHVybiBpZGVudGl0eTsKCSAgICAgIH0KCSAgICAg
IGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHsKCSAgICAgICAgcmV0dXJuIGlzQXJyYXko
dmFsdWUpCgkgICAgICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsx
XSkKCSAgICAgICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTsKCSAgICAgIH0KCSAgICAgIHJldHVy
biBwcm9wZXJ0eSh2YWx1ZSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBs
ZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMg
YXMgZGVuc2UuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJl
dHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLgoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGJhc2VLZXlzKG9iamVjdCkgewoJICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7Cgkg
ICAgICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7CgkgICAgICB9CgkgICAgICB2YXIgcmVz
dWx0ID0gW107CgkgICAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHsKCSAgICAg
ICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3Ry
dWN0b3InKSB7CgkgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKCSAgICAgICAgfQoJICAgICAg
fQoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNl
IGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2Ug
YXJyYXlzIGFzIGRlbnNlLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0g
e09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMge0Fy
cmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkgewoJICAgICAgaWYgKCFpc09iamVjdChvYmplY3Qp
KSB7CgkgICAgICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTsKCSAgICAgIH0KCSAgICAg
IHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSwKCSAgICAgICAgICByZXN1bHQgPSBb
XTsKCgkgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CgkgICAgICAgIGlmICghKGtleSA9
PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVj
dCwga2V5KSkpKSB7CgkgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKCSAgICAgICAgfQoJICAg
ICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBi
YXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmx0YCB3aGljaCBkb2Vzbid0IGNvZXJjZSBhcmd1bWVu
dHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhl
IHZhbHVlIHRvIGNvbXBhcmUuCgkgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFs
dWUgdG8gY29tcGFyZS4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAg
aWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYCwKCSAgICAgKiAgZWxzZSBgZmFsc2VgLgoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VMdCh2YWx1ZSwgb3RoZXIpIHsKCSAgICAgIHJldHVy
biB2YWx1ZSA8IG90aGVyOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVt
ZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFu
ZHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0
fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9u
LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS4K
CSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7Cgkg
ICAgICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xs
ZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdOwoKCSAgICAgIGJhc2VFYWNo
KGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHsKCSAgICAgICAg
cmVzdWx0WysraW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbik7CgkgICAg
ICB9KTsKCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUg
YmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBz
b3VyY2VgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0g
c291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLgoJICAgICAqIEBy
ZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uCgkgICAgICov
CgkgICAgZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7CgkgICAgICB2YXIgbWF0Y2hEYXRh
ID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7CgkgICAgICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAx
ICYmIG1hdGNoRGF0YVswXVsyXSkgewoJICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBh
cmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pOwoJICAgICAgfQoJICAgICAg
cmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewoJICAgICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3Vy
Y2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7CgkgICAgICB9OwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0
Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuCgkgICAgICoKCSAg
ICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRo
ZSBwcm9wZXJ0eSB0byBnZXQuCgkgICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUg
dG8gbWF0Y2guCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3Bl
YyBmdW5jdGlvbi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBh
dGgsIHNyY1ZhbHVlKSB7CgkgICAgICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJh
YmxlKHNyY1ZhbHVlKSkgewoJICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUo
dG9LZXkocGF0aCksIHNyY1ZhbHVlKTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBmdW5jdGlvbihv
YmplY3QpIHsKCSAgICAgICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7CgkgICAg
ICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFs
dWUpCgkgICAgICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpCgkgICAgICAgICAgOiBiYXNlSXNF
cXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9V
Tk9SREVSRURfRkxBRyk7CgkgICAgICB9OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlw
bGUgc291cmNlcy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmpl
Y3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LgoJICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IHNyY0lu
ZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3Vz
dG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLgoJICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBh
bmQgdGhlaXIgbWVyZ2VkCgkgICAgICogIGNvdW50ZXJwYXJ0cy4KCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFj
aykgewoJICAgICAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7CgkgICAgICAgIHJldHVybjsKCSAg
ICAgIH0KCSAgICAgIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7Cgkg
ICAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7CgkgICAgICAgIGlmIChpc09iamVj
dChzcmNWYWx1ZSkpIHsKCSAgICAgICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBr
ZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTsKCSAgICAgICAgfQoJ
ICAgICAgICBlbHNlIHsKCSAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyCgkgICAg
ICAgICAgICA/IGN1c3RvbWl6ZXIoc2FmZUdldChvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5
ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spCgkgICAgICAgICAgICA6IHVuZGVmaW5lZDsK
CgkgICAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAgICAgIG5l
d1ZhbHVlID0gc3JjVmFsdWU7CgkgICAgICAgICAgfQoJICAgICAgICAgIGFzc2lnbk1lcmdlVmFs
dWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTsKCSAgICAgICAgfQoJICAgICAgfSwga2V5c0luKTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1l
cmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zCgkgICAgICogZGVlcCBt
ZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGgg
Y2lyY3VsYXIKCSAgICAgKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC4KCSAgICAgKgoJICAgICAq
IEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24g
b2JqZWN0LgoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3Qu
CgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJn
ZS4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2Vg
LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVy
Z2UgdmFsdWVzLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVu
Y3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy4KCSAgICAgKiBAcGFyYW0ge09iamVj
dH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdl
ZAoJICAgICAqICBjb3VudGVycGFydHMuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZU1lcmdl
RGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgbWVyZ2VGdW5jLCBjdXN0b21pemVy
LCBzdGFjaykgewoJICAgICAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksCgkg
ICAgICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSwKCSAgICAgICAgICBzdGFj
a2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTsKCgkgICAgICBpZiAoc3RhY2tlZCkgewoJICAgICAg
ICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTsKCSAgICAgICAgcmV0dXJu
OwoJICAgICAgfQoJICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplcgoJICAgICAgICA/IGN1
c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwg
c3RhY2spCgkgICAgICAgIDogdW5kZWZpbmVkOwoKCSAgICAgIHZhciBpc0NvbW1vbiA9IG5ld1Zh
bHVlID09PSB1bmRlZmluZWQ7CgoJICAgICAgaWYgKGlzQ29tbW9uKSB7CgkgICAgICAgIHZhciBp
c0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLAoJICAgICAgICAgICAgaXNCdWZmID0gIWlzQXJyICYm
IGlzQnVmZmVyKHNyY1ZhbHVlKSwKCSAgICAgICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlz
QnVmZiAmJiBpc1R5cGVkQXJyYXkoc3JjVmFsdWUpOwoKCSAgICAgICAgbmV3VmFsdWUgPSBzcmNW
YWx1ZTsKCSAgICAgICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7CgkgICAgICAg
ICAgaWYgKGlzQXJyYXkob2JqVmFsdWUpKSB7CgkgICAgICAgICAgICBuZXdWYWx1ZSA9IG9ialZh
bHVlOwoJICAgICAgICAgIH0KCSAgICAgICAgICBlbHNlIGlmIChpc0FycmF5TGlrZU9iamVjdChv
YmpWYWx1ZSkpIHsKCSAgICAgICAgICAgIG5ld1ZhbHVlID0gY29weUFycmF5KG9ialZhbHVlKTsK
CSAgICAgICAgICB9CgkgICAgICAgICAgZWxzZSBpZiAoaXNCdWZmKSB7CgkgICAgICAgICAgICBp
c0NvbW1vbiA9IGZhbHNlOwoJICAgICAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNW
YWx1ZSwgdHJ1ZSk7CgkgICAgICAgICAgfQoJICAgICAgICAgIGVsc2UgaWYgKGlzVHlwZWQpIHsK
CSAgICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7CgkgICAgICAgICAgICBuZXdWYWx1ZSA9IGNs
b25lVHlwZWRBcnJheShzcmNWYWx1ZSwgdHJ1ZSk7CgkgICAgICAgICAgfQoJICAgICAgICAgIGVs
c2UgewoJICAgICAgICAgICAgbmV3VmFsdWUgPSBbXTsKCSAgICAgICAgICB9CgkgICAgICAgIH0K
CSAgICAgICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMo
c3JjVmFsdWUpKSB7CgkgICAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTsKCSAgICAgICAgICBp
ZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7CgkgICAgICAgICAgICBuZXdWYWx1ZSA9IHRvUGxh
aW5PYmplY3Qob2JqVmFsdWUpOwoJICAgICAgICAgIH0KCSAgICAgICAgICBlbHNlIGlmICghaXNP
YmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7CgkgICAgICAgICAgICBu
ZXdWYWx1ZSA9IGluaXRDbG9uZU9iamVjdChzcmNWYWx1ZSk7CgkgICAgICAgICAgfQoJICAgICAg
ICB9CgkgICAgICAgIGVsc2UgewoJICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7CgkgICAgICAg
IH0KCSAgICAgIH0KCSAgICAgIGlmIChpc0NvbW1vbikgewoJICAgICAgICAvLyBSZWN1cnNpdmVs
eSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGlt
aXRzKS4KCSAgICAgICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBuZXdWYWx1ZSk7CgkgICAgICAgIG1l
cmdlRnVuYyhuZXdWYWx1ZSwgc3JjVmFsdWUsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjayk7
CgkgICAgICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7CgkgICAgICB9CgkgICAgICBhc3Np
Z25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7CgkgICAgfQoKCSAgICAvKioKCSAg
ICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5udGhgIHdoaWNoIGRvZXNuJ3QgY29l
cmNlIGFyZ3VtZW50cy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtB
cnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBu
IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uCgkgICAgICogQHJldHVybnMgeyp9
IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuCgkgICAgICovCgkgICAgZnVuY3Rp
b24gYmFzZU50aChhcnJheSwgbikgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsK
CSAgICAgIGlmICghbGVuZ3RoKSB7CgkgICAgICAgIHJldHVybjsKCSAgICAgIH0KCSAgICAgIG4g
Kz0gbiA8IDAgPyBsZW5ndGggOiAwOwoJICAgICAgcmV0dXJuIGlzSW5kZXgobiwgbGVuZ3RoKSA/
IGFycmF5W25dIDogdW5kZWZpbmVkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2Ug
aW1wbGVtZW50YXRpb24gb2YgYF8ub3JkZXJCeWAgd2l0aG91dCBwYXJhbSBndWFyZHMuCgkgICAg
ICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0
aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQg
YnkuCgkgICAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBg
aXRlcmF0ZWVzYC4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0
ZWQgYXJyYXkuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwg
aXRlcmF0ZWVzLCBvcmRlcnMpIHsKCSAgICAgIHZhciBpbmRleCA9IC0xOwoJICAgICAgaXRlcmF0
ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLmxlbmd0aCA/IGl0ZXJhdGVlcyA6IFtpZGVudGl0eV0s
IGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSk7CgoJICAgICAgdmFyIHJlc3VsdCA9IGJhc2VNYXAo
Y29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikgewoJICAgICAgICB2
YXIgY3JpdGVyaWEgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7Cgkg
ICAgICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTsKCSAgICAgICAgfSk7CgkgICAgICAgIHJl
dHVybiB7ICdjcml0ZXJpYSc6IGNyaXRlcmlhLCAnaW5kZXgnOiArK2luZGV4LCAndmFsdWUnOiB2
YWx1ZSB9OwoJICAgICAgfSk7CgoJICAgICAgcmV0dXJuIGJhc2VTb3J0QnkocmVzdWx0LCBmdW5j
dGlvbihvYmplY3QsIG90aGVyKSB7CgkgICAgICAgIHJldHVybiBjb21wYXJlTXVsdGlwbGUob2Jq
ZWN0LCBvdGhlciwgb3JkZXJzKTsKCSAgICAgIH0pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
VGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBp
bmRpdmlkdWFsCgkgICAgICogcHJvcGVydHkgaWRlbnRpZmllcnMuCgkgICAgICoKCSAgICAgKiBA
cHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3Qu
CgkgICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBp
Y2suCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlUGljayhvYmplY3QsIHBhdGhzKSB7CgkgICAgICByZXR1
cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkgewoJICAg
ICAgICByZXR1cm4gaGFzSW4ob2JqZWN0LCBwYXRoKTsKCSAgICAgIH0pOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgIGBfLnBpY2tCeWAgd2l0aG91
dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LgoJICAg
ICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLgoJ
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBw
ZXIgcHJvcGVydHkuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9i
amVjdC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHBy
ZWRpY2F0ZSkgewoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgbGVuZ3RoID0gcGF0
aHMubGVuZ3RoLAoJICAgICAgICAgIHJlc3VsdCA9IHt9OwoKCSAgICAgIHdoaWxlICgrK2luZGV4
IDwgbGVuZ3RoKSB7CgkgICAgICAgIHZhciBwYXRoID0gcGF0aHNbaW5kZXhdLAoJICAgICAgICAg
ICAgdmFsdWUgPSBiYXNlR2V0KG9iamVjdCwgcGF0aCk7CgoJICAgICAgICBpZiAocHJlZGljYXRl
KHZhbHVlLCBwYXRoKSkgewoJICAgICAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRo
LCBvYmplY3QpLCB2YWx1ZSk7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiByZXN1
bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJh
c2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy4KCSAgICAgKgoJICAgICAqIEBw
cml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhl
IHByb3BlcnR5IHRvIGdldC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhl
IG5ldyBhY2Nlc3NvciBmdW5jdGlvbi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlUHJvcGVy
dHlEZWVwKHBhdGgpIHsKCSAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHsKCSAgICAgICAg
cmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTsKCSAgICAgIH07CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQWxsQnlgIHdpdGhvdXQg
c3VwcG9ydCBmb3IgaXRlcmF0ZWUKCSAgICAgKiBzaG9ydGhhbmRzLgoJICAgICAqCgkgICAgICog
QHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5
LgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS4KCSAg
ICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBl
ciBlbGVtZW50LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29t
cGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0
dXJucyBgYXJyYXlgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VQdWxsQWxsKGFycmF5LCB2
YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7CgkgICAgICB2YXIgaW5kZXhPZiA9IGNvbXBh
cmF0b3IgPyBiYXNlSW5kZXhPZldpdGggOiBiYXNlSW5kZXhPZiwKCSAgICAgICAgICBpbmRleCA9
IC0xLAoJICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsCgkgICAgICAgICAgc2VlbiA9
IGFycmF5OwoKCSAgICAgIGlmIChhcnJheSA9PT0gdmFsdWVzKSB7CgkgICAgICAgIHZhbHVlcyA9
IGNvcHlBcnJheSh2YWx1ZXMpOwoJICAgICAgfQoJICAgICAgaWYgKGl0ZXJhdGVlKSB7CgkgICAg
ICAgIHNlZW4gPSBhcnJheU1hcChhcnJheSwgYmFzZVVuYXJ5KGl0ZXJhdGVlKSk7CgkgICAgICB9
CgkgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICB2YXIgZnJvbUluZGV4
ID0gMCwKCSAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2luZGV4XSwKCSAgICAgICAgICAgIGNv
bXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTsKCgkgICAgICAgIHdo
aWxlICgoZnJvbUluZGV4ID0gaW5kZXhPZihzZWVuLCBjb21wdXRlZCwgZnJvbUluZGV4LCBjb21w
YXJhdG9yKSkgPiAtMSkgewoJICAgICAgICAgIGlmIChzZWVuICE9PSBhcnJheSkgewoJICAgICAg
ICAgICAgc3BsaWNlLmNhbGwoc2VlbiwgZnJvbUluZGV4LCAxKTsKCSAgICAgICAgICB9CgkgICAg
ICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGZyb21JbmRleCwgMSk7CgkgICAgICAgIH0KCSAgICAg
IH0KCSAgICAgIHJldHVybiBhcnJheTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNl
IGltcGxlbWVudGF0aW9uIG9mIGBfLnB1bGxBdGAgd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlk
dWFsCgkgICAgICogaW5kZXhlcyBvciBjYXB0dXJpbmcgdGhlIHJlbW92ZWQgZWxlbWVudHMuCgkg
ICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBh
cnJheSB0byBtb2RpZnkuCgkgICAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXhlcyBUaGUgaW5k
ZXhlcyBvZiBlbGVtZW50cyB0byByZW1vdmUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1
cm5zIGBhcnJheWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5k
ZXhlcykgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gaW5kZXhlcy5sZW5ndGggOiAwLAoJ
ICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7CgoJICAgICAgd2hpbGUgKGxlbmd0aC0t
KSB7CgkgICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTsKCSAgICAgICAgaWYgKGxl
bmd0aCA9PSBsYXN0SW5kZXggfHwgaW5kZXggIT09IHByZXZpb3VzKSB7CgkgICAgICAgICAgdmFy
IHByZXZpb3VzID0gaW5kZXg7CgkgICAgICAgICAgaWYgKGlzSW5kZXgoaW5kZXgpKSB7CgkgICAg
ICAgICAgICBzcGxpY2UuY2FsbChhcnJheSwgaW5kZXgsIDEpOwoJICAgICAgICAgIH0gZWxzZSB7
CgkgICAgICAgICAgICBiYXNlVW5zZXQoYXJyYXksIGluZGV4KTsKCSAgICAgICAgICB9CgkgICAg
ICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiBhcnJheTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmRvbWAgd2l0aG91dCBzdXBwb3J0
IGZvciByZXR1cm5pbmcKCSAgICAgKiBmbG9hdGluZy1wb2ludCBudW1iZXJzLgoJICAgICAqCgkg
ICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93ZXIgVGhlIGxvd2VyIGJv
dW5kLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuCgkgICAg
ICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci4KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcikgewoJICAgICAgcmV0dXJuIGxv
d2VyICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAodXBwZXIgLSBsb3dlciArIDEpKTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJh
bmdlYCBhbmQgYF8ucmFuZ2VSaWdodGAgd2hpY2ggZG9lc24ndAoJICAgICAqIGNvZXJjZSBhcmd1
bWVudHMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBz
dGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQg
VGhlIGVuZCBvZiB0aGUgcmFuZ2UuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAgVGhlIHZh
bHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuCgkgICAgICogQHBhcmFtIHtib29sZWFu
fSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuCgkgICAg
ICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLgoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHsK
CSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChuYXRp
dmVDZWlsKChlbmQgLSBzdGFydCkgLyAoc3RlcCB8fCAxKSksIDApLAoJICAgICAgICAgIHJlc3Vs
dCA9IEFycmF5KGxlbmd0aCk7CgoJICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CgkgICAgICAgIHJl
c3VsdFtmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XSA9IHN0YXJ0OwoJICAgICAgICBzdGFy
dCArPSBzdGVwOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8q
KgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlcGVhdGAgd2hpY2ggZG9l
c24ndCBjb2VyY2UgYXJndW1lbnRzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcmVwZWF0LgoJICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuCgkg
ICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLCBuKSB7CgkgICAgICB2YXIgcmVz
dWx0ID0gJyc7CgkgICAgICBpZiAoIXN0cmluZyB8fCBuIDwgMSB8fCBuID4gTUFYX1NBRkVfSU5U
RUdFUikgewoJICAgICAgICByZXR1cm4gcmVzdWx0OwoJICAgICAgfQoJICAgICAgLy8gTGV2ZXJh
Z2UgdGhlIGV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nIGFsZ29yaXRobSBmb3IgYSBmYXN0ZXIg
cmVwZWF0LgoJICAgICAgLy8gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4cG9u
ZW50aWF0aW9uX2J5X3NxdWFyaW5nIGZvciBtb3JlIGRldGFpbHMuCgkgICAgICBkbyB7CgkgICAg
ICAgIGlmIChuICUgMikgewoJICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmc7CgkgICAgICAgIH0K
CSAgICAgICAgbiA9IG5hdGl2ZUZsb29yKG4gLyAyKTsKCSAgICAgICAgaWYgKG4pIHsKCSAgICAg
ICAgICBzdHJpbmcgKz0gc3RyaW5nOwoJICAgICAgICB9CgkgICAgICB9IHdoaWxlIChuKTsKCgkg
ICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1w
bGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2Ug
YXJndW1lbnRzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLgoJICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0
aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJl
dHVybnMgdGhlIG5ldyBmdW5jdGlvbi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlUmVzdChm
dW5jLCBzdGFydCkgewoJICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0
YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUg
YmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVgLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlv
biB0byBzYW1wbGUuCgkgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVt
ZW50LgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGUoY29sbGVjdGlvbikgewoJICAg
ICAgcmV0dXJuIGFycmF5U2FtcGxlKHZhbHVlcyhjb2xsZWN0aW9uKSk7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVTaXplYCB3aXRo
b3V0IHBhcmFtIGd1YXJkcy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFt
IHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLgoJICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLgoJ
ICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGVTaXplKGNvbGxlY3Rpb24sIG4pIHsKCSAgICAg
IHZhciBhcnJheSA9IHZhbHVlcyhjb2xsZWN0aW9uKTsKCSAgICAgIHJldHVybiBzaHVmZmxlU2Vs
ZihhcnJheSwgYmFzZUNsYW1wKG4sIDAsIGFycmF5Lmxlbmd0aCkpOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2V0YC4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRv
IG1vZGlmeS4KCSAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0
aGUgcHJvcGVydHkgdG8gc2V0LgoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRv
IHNldC4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9u
IHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJl
dHVybnMgYG9iamVjdGAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZVNldChvYmplY3QsIHBh
dGgsIHZhbHVlLCBjdXN0b21pemVyKSB7CgkgICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHsK
CSAgICAgICAgcmV0dXJuIG9iamVjdDsKCSAgICAgIH0KCSAgICAgIHBhdGggPSBjYXN0UGF0aChw
YXRoLCBvYmplY3QpOwoKCSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAgICAgIGxlbmd0aCA9
IHBhdGgubGVuZ3RoLAoJICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsCgkgICAgICAg
ICAgbmVzdGVkID0gb2JqZWN0OwoKCSAgICAgIHdoaWxlIChuZXN0ZWQgIT0gbnVsbCAmJiArK2lu
ZGV4IDwgbGVuZ3RoKSB7CgkgICAgICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSksCgkg
ICAgICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlOwoKCSAgICAgICAgaWYgKGluZGV4ICE9IGxhc3RJ
bmRleCkgewoJICAgICAgICAgIHZhciBvYmpWYWx1ZSA9IG5lc3RlZFtrZXldOwoJICAgICAgICAg
IG5ld1ZhbHVlID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIGtleSwgbmVzdGVk
KSA6IHVuZGVmaW5lZDsKCSAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgewoJ
ICAgICAgICAgICAgbmV3VmFsdWUgPSBpc09iamVjdChvYmpWYWx1ZSkKCSAgICAgICAgICAgICAg
PyBvYmpWYWx1ZQoJICAgICAgICAgICAgICA6IChpc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBb
XSA6IHt9KTsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAgYXNzaWduVmFsdWUobmVz
dGVkLCBrZXksIG5ld1ZhbHVlKTsKCSAgICAgICAgbmVzdGVkID0gbmVzdGVkW2tleV07CgkgICAg
ICB9CgkgICAgICByZXR1cm4gb2JqZWN0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYHNldERhdGFgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxv
b3Agc2hvcnRpbmcuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLgoJICAg
ICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuCgkgICAgICogQHJldHVybnMge0Z1bmN0
aW9ufSBSZXR1cm5zIGBmdW5jYC4KCSAgICAgKi8KCSAgICB2YXIgYmFzZVNldERhdGEgPSAhbWV0
YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkgewoJICAgICAgbWV0YU1hcC5z
ZXQoZnVuYywgZGF0YSk7CgkgICAgICByZXR1cm4gZnVuYzsKCSAgICB9OwoKCSAgICAvKioKCSAg
ICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3Vw
cG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS4KCSAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LgoJICAgICAq
IEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuCgkgICAgICovCgkgICAgdmFyIGJh
c2VTZXRUb1N0cmluZyA9ICFkZWZpbmVQcm9wZXJ0eSA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVu
Yywgc3RyaW5nKSB7CgkgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5n
JywgewoJICAgICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSwKCSAgICAgICAgJ2VudW1lcmFibGUn
OiBmYWxzZSwKCSAgICAgICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSwKCSAgICAgICAgJ3dy
aXRhYmxlJzogdHJ1ZQoJICAgICAgfSk7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogVGhlIGJh
c2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2h1ZmZsZWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0
ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9u
IHRvIHNodWZmbGUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1
ZmZsZWQgYXJyYXkuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFzZVNodWZmbGUoY29sbGVjdGlv
bikgewoJICAgICAgcmV0dXJuIHNodWZmbGVTZWxmKHZhbHVlcyhjb2xsZWN0aW9uKSk7CgkgICAg
fQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAg
d2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLgoJICAgICAqCgkgICAgICogQHByaXZhdGUK
CSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuCgkgICAgICog
QHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uCgkgICAgICogQHBh
cmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLgoJICAgICAq
IEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC4KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHsKCSAgICAgIHZhciBp
bmRleCA9IC0xLAoJICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCgkgICAgICBpZiAo
c3RhcnQgPCAwKSB7CgkgICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5n
dGggKyBzdGFydCk7CgkgICAgICB9CgkgICAgICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGgg
OiBlbmQ7CgkgICAgICBpZiAoZW5kIDwgMCkgewoJICAgICAgICBlbmQgKz0gbGVuZ3RoOwoJICAg
ICAgfQoJICAgICAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+
IDApOwoJICAgICAgc3RhcnQgPj4+PSAwOwoKCSAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5n
dGgpOwoJICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgcmVzdWx0W2lu
ZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3Vs
dDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBf
LnNvbWVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy4KCSAgICAgKgoJ
ICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24g
VGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhl
IHByZWRpY2F0ZSBjaGVjaywKCSAgICAgKiAgZWxzZSBgZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1
bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkgewoJICAgICAgdmFyIHJlc3Vs
dDsKCgkgICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNv
bGxlY3Rpb24pIHsKCSAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29s
bGVjdGlvbik7CgkgICAgICAgIHJldHVybiAhcmVzdWx0OwoJICAgICAgfSk7CgkgICAgICByZXR1
cm4gISFyZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRh
dGlvbiBvZiBgXy5zb3J0ZWRJbmRleGAgYW5kIGBfLnNvcnRlZExhc3RJbmRleGAgd2hpY2gKCSAg
ICAgKiBwZXJmb3JtcyBhIGJpbmFyeSBzZWFyY2ggb2YgYGFycmF5YCB0byBkZXRlcm1pbmUgdGhl
IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAKCSAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBg
YXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLgoJICAgICAqCgkgICAg
ICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5
IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVh
dGUuCgkgICAgICogQHBhcmFtIHtib29sZWFufSBbcmV0SGlnaGVzdF0gU3BlY2lmeSByZXR1cm5p
bmcgdGhlIGhpZ2hlc3QgcXVhbGlmaWVkIGluZGV4LgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9
IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkCgkg
ICAgICogIGludG8gYGFycmF5YC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlU29ydGVkSW5k
ZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7CgkgICAgICB2YXIgbG93ID0gMCwKCSAgICAg
ICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IGxvdyA6IGFycmF5Lmxlbmd0aDsKCgkgICAgICBp
ZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID09PSB2YWx1ZSAmJiBoaWdoIDw9
IEhBTEZfTUFYX0FSUkFZX0xFTkdUSCkgewoJICAgICAgICB3aGlsZSAobG93IDwgaGlnaCkgewoJ
ICAgICAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDEsCgkgICAgICAgICAgICAgIGNv
bXB1dGVkID0gYXJyYXlbbWlkXTsKCgkgICAgICAgICAgaWYgKGNvbXB1dGVkICE9PSBudWxsICYm
ICFpc1N5bWJvbChjb21wdXRlZCkgJiYKCSAgICAgICAgICAgICAgKHJldEhpZ2hlc3QgPyAoY29t
cHV0ZWQgPD0gdmFsdWUpIDogKGNvbXB1dGVkIDwgdmFsdWUpKSkgewoJICAgICAgICAgICAgbG93
ID0gbWlkICsgMTsKCSAgICAgICAgICB9IGVsc2UgewoJICAgICAgICAgICAgaGlnaCA9IG1pZDsK
CSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIGhpZ2g7CgkgICAgICB9Cgkg
ICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpZGVudGl0eSwgcmV0
SGlnaGVzdCk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlv
biBvZiBgXy5zb3J0ZWRJbmRleEJ5YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4QnlgCgkgICAgICog
d2hpY2ggaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2Yg
YGFycmF5YCB0byBjb21wdXRlCgkgICAgICogdGhlaXIgc29ydCByYW5raW5nLiBUaGUgaXRlcmF0
ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS4KCSAgICAgKgoJICAgICAq
IEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0
byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRl
LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBpdGVyYXRlZSBpbnZva2Vk
IHBlciBlbGVtZW50LgoJICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JldEhpZ2hlc3RdIFNwZWNp
ZnkgcmV0dXJuaW5nIHRoZSBoaWdoZXN0IHF1YWxpZmllZCBpbmRleC4KCSAgICAgKiBAcmV0dXJu
cyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBp
bnNlcnRlZAoJICAgICAqICBpbnRvIGBhcnJheWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFz
ZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkgewoJICAg
ICAgdmFsdWUgPSBpdGVyYXRlZSh2YWx1ZSk7CgoJICAgICAgdmFyIGxvdyA9IDAsCgkgICAgICAg
ICAgaGlnaCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLAoJICAgICAgICAgIHZh
bElzTmFOID0gdmFsdWUgIT09IHZhbHVlLAoJICAgICAgICAgIHZhbElzTnVsbCA9IHZhbHVlID09
PSBudWxsLAoJICAgICAgICAgIHZhbElzU3ltYm9sID0gaXNTeW1ib2wodmFsdWUpLAoJICAgICAg
ICAgIHZhbElzVW5kZWZpbmVkID0gdmFsdWUgPT09IHVuZGVmaW5lZDsKCgkgICAgICB3aGlsZSAo
bG93IDwgaGlnaCkgewoJICAgICAgICB2YXIgbWlkID0gbmF0aXZlRmxvb3IoKGxvdyArIGhpZ2gp
IC8gMiksCgkgICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLAoJICAg
ICAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCwKCSAgICAgICAg
ICAgIG90aElzTnVsbCA9IGNvbXB1dGVkID09PSBudWxsLAoJICAgICAgICAgICAgb3RoSXNSZWZs
ZXhpdmUgPSBjb21wdXRlZCA9PT0gY29tcHV0ZWQsCgkgICAgICAgICAgICBvdGhJc1N5bWJvbCA9
IGlzU3ltYm9sKGNvbXB1dGVkKTsKCgkgICAgICAgIGlmICh2YWxJc05hTikgewoJICAgICAgICAg
IHZhciBzZXRMb3cgPSByZXRIaWdoZXN0IHx8IG90aElzUmVmbGV4aXZlOwoJICAgICAgICB9IGVs
c2UgaWYgKHZhbElzVW5kZWZpbmVkKSB7CgkgICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhp
dmUgJiYgKHJldEhpZ2hlc3QgfHwgb3RoSXNEZWZpbmVkKTsKCSAgICAgICAgfSBlbHNlIGlmICh2
YWxJc051bGwpIHsKCSAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiBvdGhJc0Rl
ZmluZWQgJiYgKHJldEhpZ2hlc3QgfHwgIW90aElzTnVsbCk7CgkgICAgICAgIH0gZWxzZSBpZiAo
dmFsSXNTeW1ib2wpIHsKCSAgICAgICAgICBzZXRMb3cgPSBvdGhJc1JlZmxleGl2ZSAmJiBvdGhJ
c0RlZmluZWQgJiYgIW90aElzTnVsbCAmJiAocmV0SGlnaGVzdCB8fCAhb3RoSXNTeW1ib2wpOwoJ
ICAgICAgICB9IGVsc2UgaWYgKG90aElzTnVsbCB8fCBvdGhJc1N5bWJvbCkgewoJICAgICAgICAg
IHNldExvdyA9IGZhbHNlOwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIHNldExvdyA9IHJl
dEhpZ2hlc3QgPyAoY29tcHV0ZWQgPD0gdmFsdWUpIDogKGNvbXB1dGVkIDwgdmFsdWUpOwoJICAg
ICAgICB9CgkgICAgICAgIGlmIChzZXRMb3cpIHsKCSAgICAgICAgICBsb3cgPSBtaWQgKyAxOwoJ
ICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIGhpZ2ggPSBtaWQ7CgkgICAgICAgIH0KCSAgICAg
IH0KCSAgICAgIHJldHVybiBuYXRpdmVNaW4oaGlnaCwgTUFYX0FSUkFZX0lOREVYKTsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZFVu
aXFgIGFuZCBgXy5zb3J0ZWRVbmlxQnlgIHdpdGhvdXQKCSAgICAgKiBzdXBwb3J0IGZvciBpdGVy
YXRlZSBzaG9ydGhhbmRzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0g
e0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LgoJICAgICAq
IEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LgoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBpdGVyYXRlZSkgewoJ
ICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAoJ
ICAgICAgICAgIHJlc0luZGV4ID0gMCwKCSAgICAgICAgICByZXN1bHQgPSBbXTsKCgkgICAgICB3
aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRl
eF0sCgkgICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDog
dmFsdWU7CgoJICAgICAgICBpZiAoIWluZGV4IHx8ICFlcShjb21wdXRlZCwgc2VlbikpIHsKCSAg
ICAgICAgICB2YXIgc2VlbiA9IGNvbXB1dGVkOwoJICAgICAgICAgIHJlc3VsdFtyZXNJbmRleCsr
XSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICBy
ZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50
YXRpb24gb2YgYF8udG9OdW1iZXJgIHdoaWNoIGRvZXNuJ3QgZW5zdXJlIGNvcnJlY3QKCSAgICAg
KiBjb252ZXJzaW9ucyBvZiBiaW5hcnksIGhleGFkZWNpbWFsLCBvciBvY3RhbCBzdHJpbmcgdmFs
dWVzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRo
ZSB2YWx1ZSB0byBwcm9jZXNzLgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhl
IG51bWJlci4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlVG9OdW1iZXIodmFsdWUpIHsKCSAg
ICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHsKCSAgICAgICAgcmV0dXJuIHZhbHVl
OwoJICAgICAgfQoJICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkgewoJICAgICAgICByZXR1cm4g
TkFOOwoJICAgICAgfQoJICAgICAgcmV0dXJuICt2YWx1ZTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0
IGNvbnZlcnQgbnVsbGlzaAoJICAgICAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLgoJICAgICAq
CgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBw
cm9jZXNzLgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHsKCSAgICAgIC8vIEV4aXQg
ZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZp
cm9ubWVudHMuCgkgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7CgkgICAgICAg
IHJldHVybiB2YWx1ZTsKCSAgICAgIH0KCSAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewoJICAg
ICAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBz
dGFjayBsaW1pdHMpLgoJICAgICAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmlu
ZykgKyAnJzsKCSAgICAgIH0KCSAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHsKCSAgICAgICAg
cmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJzsK
CSAgICAgIH0KCSAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7CgkgICAgICByZXR1cm4g
KHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1
bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBg
Xy51bmlxQnlgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy4KCSAgICAg
KgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5
IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRl
cmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29t
cGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICAgKiBAcmV0
dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJheS4KCSAgICAg
Ki8KCSAgICBmdW5jdGlvbiBiYXNlVW5pcShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHsK
CSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRl
cywKCSAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsCgkgICAgICAgICAgaXNDb21tb24g
PSB0cnVlLAoJICAgICAgICAgIHJlc3VsdCA9IFtdLAoJICAgICAgICAgIHNlZW4gPSByZXN1bHQ7
CgoJICAgICAgaWYgKGNvbXBhcmF0b3IpIHsKCSAgICAgICAgaXNDb21tb24gPSBmYWxzZTsKCSAg
ICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDsKCSAgICAgIH0KCSAgICAgIGVsc2Ug
aWYgKGxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7CgkgICAgICAgIHZhciBzZXQgPSBpdGVy
YXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpOwoJICAgICAgICBpZiAoc2V0KSB7CgkgICAg
ICAgICAgcmV0dXJuIHNldFRvQXJyYXkoc2V0KTsKCSAgICAgICAgfQoJICAgICAgICBpc0NvbW1v
biA9IGZhbHNlOwoJICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzOwoJICAgICAgICBzZWVuID0g
bmV3IFNldENhY2hlOwoJICAgICAgfQoJICAgICAgZWxzZSB7CgkgICAgICAgIHNlZW4gPSBpdGVy
YXRlZSA/IFtdIDogcmVzdWx0OwoJICAgICAgfQoJICAgICAgb3V0ZXI6CgkgICAgICB3aGlsZSAo
KytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sCgkg
ICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7
CgoJICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDog
MDsKCSAgICAgICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkgewoJICAg
ICAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDsKCSAgICAgICAgICB3aGlsZSAoc2Vl
bkluZGV4LS0pIHsKCSAgICAgICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVk
KSB7CgkgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyOwoJICAgICAgICAgICAgfQoJICAgICAg
ICAgIH0KCSAgICAgICAgICBpZiAoaXRlcmF0ZWUpIHsKCSAgICAgICAgICAgIHNlZW4ucHVzaChj
b21wdXRlZCk7CgkgICAgICAgICAgfQoJICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKCSAg
ICAgICAgfQoJICAgICAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBh
cmF0b3IpKSB7CgkgICAgICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkgewoJICAgICAgICAgICAg
c2Vlbi5wdXNoKGNvbXB1dGVkKTsKCSAgICAgICAgICB9CgkgICAgICAgICAgcmVzdWx0LnB1c2go
dmFsdWUpOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5zZXRgLgoJ
ICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRo
ZSBvYmplY3QgdG8gbW9kaWZ5LgoJICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRo
ZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1
cm5zIGB0cnVlYCBpZiB0aGUgcHJvcGVydHkgaXMgZGVsZXRlZCwgZWxzZSBgZmFsc2VgLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHsKCSAgICAgIHBhdGgg
PSBjYXN0UGF0aChwYXRoLCBvYmplY3QpOwoJICAgICAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwg
cGF0aCk7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgfHwgZGVsZXRlIG9iamVjdFt0b0tl
eShsYXN0KHBhdGgpKV07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGUgYmFzZSBpbXBsZW1l
bnRhdGlvbiBvZiBgXy51cGRhdGVgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBA
cGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LgoJICAgICAqIEBwYXJh
bSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1cGRhdGUu
CgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVj
ZSB0aGUgdXBkYXRlZCB2YWx1ZS4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXpl
cl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLgoJICAgICAqIEByZXR1
cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmFz
ZVVwZGF0ZShvYmplY3QsIHBhdGgsIHVwZGF0ZXIsIGN1c3RvbWl6ZXIpIHsKCSAgICAgIHJldHVy
biBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdXBkYXRlcihiYXNlR2V0KG9iamVjdCwgcGF0aCkpLCBj
dXN0b21pemVyKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0
aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgCgkgICAg
ICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLgoJICAgICAqCgkgICAg
ICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVl
cnkuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZv
a2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVj
aWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uCgkgICAgICogQHBh
cmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRv
IGxlZnQuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJy
YXlgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VXaGlsZShhcnJheSwgcHJlZGljYXRlLCBp
c0Ryb3AsIGZyb21SaWdodCkgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKCSAg
ICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xOwoKCSAgICAgIHdoaWxlICgo
ZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpICYmCgkgICAgICAgIHByZWRp
Y2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHt9CgoJICAgICAgcmV0dXJuIGlzRHJv
cAoJICAgICAgICA/IGJhc2VTbGljZShhcnJheSwgKGZyb21SaWdodCA/IDAgOiBpbmRleCksIChm
cm9tUmlnaHQgPyBpbmRleCArIDEgOiBsZW5ndGgpKQoJICAgICAgICA6IGJhc2VTbGljZShhcnJh
eSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IDApLCAoZnJvbVJpZ2h0ID8gbGVuZ3RoIDogaW5k
ZXgpKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9m
IGB3cmFwcGVyVmFsdWVgIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZgoJICAgICAqIHBlcmZv
cm1pbmcgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9uIHRoZSB1bndyYXBwZWQgYHZhbHVlYCwgd2hl
cmUgZWFjaAoJICAgICAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4g
dmFsdWUgb2YgdGhlIHByZXZpb3VzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBA
cGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuCgkgICAgICogQHBhcmFtIHtBcnJh
eX0gYWN0aW9ucyBBY3Rpb25zIHRvIHBlcmZvcm0gdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZh
bHVlLgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7Cgkg
ICAgICB2YXIgcmVzdWx0ID0gdmFsdWU7CgkgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6
eVdyYXBwZXIpIHsKCSAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7CgkgICAgICB9Cgkg
ICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24p
IHsKCSAgICAgICAgcmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJh
eVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7CgkgICAgICB9LCByZXN1bHQpOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtl
IGBfLnhvcmAsIHdpdGhvdXQgc3VwcG9ydCBmb3IKCSAgICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRz
LCB0aGF0IGFjY2VwdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHRvIGluc3BlY3QuCgkgICAgICoKCSAg
ICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5cyBUaGUgYXJyYXlzIHRv
IGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0
ZWUgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFy
YXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICAgKiBAcmV0dXJu
cyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiB2YWx1ZXMuCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gYmFzZVhvcihhcnJheXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7CgkgICAgICB2
YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aDsKCSAgICAgIGlmIChsZW5ndGggPCAyKSB7CgkgICAg
ICAgIHJldHVybiBsZW5ndGggPyBiYXNlVW5pcShhcnJheXNbMF0pIDogW107CgkgICAgICB9Cgkg
ICAgICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpOwoK
CSAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICAgIHZhciBhcnJheSA9IGFy
cmF5c1tpbmRleF0sCgkgICAgICAgICAgICBvdGhJbmRleCA9IC0xOwoKCSAgICAgICAgd2hpbGUg
KCsrb3RoSW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgICBpZiAob3RoSW5kZXggIT0gaW5kZXgp
IHsKCSAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBiYXNlRGlmZmVyZW5jZShyZXN1bHRbaW5k
ZXhdIHx8IGFycmF5LCBhcnJheXNbb3RoSW5kZXhdLCBpdGVyYXRlZSwgY29tcGFyYXRvcik7Cgkg
ICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9CgkgICAgICByZXR1cm4gYmFzZVVuaXEoYmFz
ZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogVGhpcyBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnppcE9iamVjdGAgd2hp
Y2ggYXNzaWducyB2YWx1ZXMgdXNpbmcgYGFzc2lnbkZ1bmNgLgoJICAgICAqCgkgICAgICogQHBy
aXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmll
cnMuCgkgICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuCgkg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduRnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzaWdu
IHZhbHVlcy4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0
LgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGJhc2VaaXBPYmplY3QocHJvcHMsIHZhbHVlcywgYXNz
aWduRnVuYykgewoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgbGVuZ3RoID0gcHJv
cHMubGVuZ3RoLAoJICAgICAgICAgIHZhbHNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoLAoJICAgICAg
ICAgIHJlc3VsdCA9IHt9OwoKCSAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAg
ICAgIHZhciB2YWx1ZSA9IGluZGV4IDwgdmFsc0xlbmd0aCA/IHZhbHVlc1tpbmRleF0gOiB1bmRl
ZmluZWQ7CgkgICAgICAgIGFzc2lnbkZ1bmMocmVzdWx0LCBwcm9wc1tpbmRleF0sIHZhbHVlKTsK
CSAgICAgIH0KCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBD
YXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ug
b2JqZWN0LgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBpbnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJl
dHVybnMgdGhlIGNhc3QgYXJyYXktbGlrZSBvYmplY3QuCgkgICAgICovCgkgICAgZnVuY3Rpb24g
Y2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2Jq
ZWN0KHZhbHVlKSA/IHZhbHVlIDogW107CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDYXN0cyBg
dmFsdWVgIHRvIGBpZGVudGl0eWAgaWYgaXQncyBub3QgYSBmdW5jdGlvbi4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVj
dC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgY2FzdCBmdW5jdGlvbi4KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBjYXN0RnVuY3Rpb24odmFsdWUpIHsKCSAgICAgIHJldHVybiB0
eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlIDogaWRlbnRpdHk7CgkgICAgfQoKCSAg
ICAvKioKCSAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBv
bmUuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhl
IHZhbHVlIHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBv
YmplY3QgdG8gcXVlcnkga2V5cyBvbi4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMg
dGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjYXN0
UGF0aCh2YWx1ZSwgb2JqZWN0KSB7CgkgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKCSAgICAg
ICAgcmV0dXJuIHZhbHVlOwoJICAgICAgfQoJICAgICAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmpl
Y3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogQSBgYmFzZVJlc3RgIGFsaWFzIHdoaWNoIGNhbiBiZSByZXBsYWNlZCB3
aXRoIGBpZGVudGl0eWAgYnkgbW9kdWxlCgkgICAgICogcmVwbGFjZW1lbnQgcGx1Z2lucy4KCSAg
ICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHR5cGUge0Z1bmN0aW9ufQoJICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0
ZXIgdG8uCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rp
b24uCgkgICAgICovCgkgICAgdmFyIGNhc3RSZXN0ID0gYmFzZVJlc3Q7CgoJICAgIC8qKgoJICAg
ICAqIENhc3RzIGBhcnJheWAgdG8gYSBzbGljZSBpZiBpdCdzIG5lZWRlZC4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGlu
c3BlY3QuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi4K
CSAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRp
b24uCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHNsaWNlLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGNhc3RTbGljZShhcnJheSwgc3RhcnQsIGVuZCkgewoJICAgICAg
dmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCSAgICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVk
ID8gbGVuZ3RoIDogZW5kOwoJICAgICAgcmV0dXJuICghc3RhcnQgJiYgZW5kID49IGxlbmd0aCkg
PyBhcnJheSA6IGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgY2xlYXJUaW1lb3V0
YF0oaHR0cHM6Ly9tZG4uaW8vY2xlYXJUaW1lb3V0KS4KCSAgICAgKgoJICAgICAqIEBwcml2YXRl
CgkgICAgICogQHBhcmFtIHtudW1iZXJ8T2JqZWN0fSBpZCBUaGUgdGltZXIgaWQgb3IgdGltZW91
dCBvYmplY3Qgb2YgdGhlIHRpbWVyIHRvIGNsZWFyLgoJICAgICAqLwoJICAgIHZhciBjbGVhclRp
bWVvdXQgPSBjdHhDbGVhclRpbWVvdXQgfHwgZnVuY3Rpb24oaWQpIHsKCSAgICAgIHJldHVybiBy
b290LmNsZWFyVGltZW91dChpZCk7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBh
IGNsb25lIG9mICBgYnVmZmVyYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLgoJICAgICAqIEBwYXJhbSB7
Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuCgkgICAgICogQHJldHVybnMg
e0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci4KCSAgICAgKi8KCSAgICBmdW5jdGlv
biBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkgewoJICAgICAgaWYgKGlzRGVlcCkgewoJICAg
ICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7CgkgICAgICB9CgkgICAgICB2YXIgbGVuZ3RoID0g
YnVmZmVyLmxlbmd0aCwKCSAgICAgICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5z
YWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7CgoJICAgICAgYnVm
ZmVyLmNvcHkocmVzdWx0KTsKCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC4KCSAgICAgKgoJICAgICAq
IEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFy
cmF5IGJ1ZmZlciB0byBjbG9uZS4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVy
bnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuCgkgICAgICovCgkgICAgZnVuY3Rpb24gY2xvbmVB
cnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikgewoJICAgICAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1
ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTsKCSAgICAgIG5ldyBVaW50
OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7CgkgICAgICBy
ZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGNsb25lIG9m
IGBkYXRhVmlld2AuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLgoJICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuCgkgICAgICogQHJldHVybnMge09i
amVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy4KCSAgICAgKi8KCSAgICBmdW5jdGlv
biBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHsKCSAgICAgIHZhciBidWZmZXIgPSBp
c0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZm
ZXI7CgkgICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZp
ZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7CgkgICAgfQoKCSAgICAvKioKCSAg
ICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0
ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS4KCSAg
ICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgcmVnZXhwLgoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkgewoJICAgICAgdmFyIHJlc3VsdCA9
IG5ldyByZWdleHAuY29uc3RydWN0b3IocmVnZXhwLnNvdXJjZSwgcmVGbGFncy5leGVjKHJlZ2V4
cCkpOwoJICAgICAgcmVzdWx0Lmxhc3RJbmRleCA9IHJlZ2V4cC5sYXN0SW5kZXg7CgkgICAgICBy
ZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGNsb25lIG9m
IHRoZSBgc3ltYm9sYCBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBzeW1ib2wgVGhlIHN5bWJvbCBvYmplY3QgdG8gY2xvbmUuCgkgICAgICog
QHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHN5bWJvbCBvYmplY3QuCgkgICAg
ICovCgkgICAgZnVuY3Rpb24gY2xvbmVTeW1ib2woc3ltYm9sKSB7CgkgICAgICByZXR1cm4gc3lt
Ym9sVmFsdWVPZiA/IE9iamVjdChzeW1ib2xWYWx1ZU9mLmNhbGwoc3ltYm9sKSkgOiB7fTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuCgkg
ICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5
IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS4KCSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0Rl
ZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVy
bnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjbG9uZVR5
cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7CgkgICAgICB2YXIgYnVmZmVyID0gaXNEZWVw
ID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZl
cjsKCSAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVk
QXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogQ29tcGFyZXMgdmFsdWVzIHRvIHNvcnQgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIuCgkg
ICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVl
IHRvIGNvbXBhcmUuCgkgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8g
Y29tcGFyZS4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzb3J0IG9yZGVy
IGluZGljYXRvciBmb3IgYHZhbHVlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjb21wYXJlQXNj
ZW5kaW5nKHZhbHVlLCBvdGhlcikgewoJICAgICAgaWYgKHZhbHVlICE9PSBvdGhlcikgewoJICAg
ICAgICB2YXIgdmFsSXNEZWZpbmVkID0gdmFsdWUgIT09IHVuZGVmaW5lZCwKCSAgICAgICAgICAg
IHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLAoJICAgICAgICAgICAgdmFsSXNSZWZsZXhpdmUg
PSB2YWx1ZSA9PT0gdmFsdWUsCgkgICAgICAgICAgICB2YWxJc1N5bWJvbCA9IGlzU3ltYm9sKHZh
bHVlKTsKCgkgICAgICAgIHZhciBvdGhJc0RlZmluZWQgPSBvdGhlciAhPT0gdW5kZWZpbmVkLAoJ
ICAgICAgICAgICAgb3RoSXNOdWxsID0gb3RoZXIgPT09IG51bGwsCgkgICAgICAgICAgICBvdGhJ
c1JlZmxleGl2ZSA9IG90aGVyID09PSBvdGhlciwKCSAgICAgICAgICAgIG90aElzU3ltYm9sID0g
aXNTeW1ib2wob3RoZXIpOwoKCSAgICAgICAgaWYgKCghb3RoSXNOdWxsICYmICFvdGhJc1N5bWJv
bCAmJiAhdmFsSXNTeW1ib2wgJiYgdmFsdWUgPiBvdGhlcikgfHwKCSAgICAgICAgICAgICh2YWxJ
c1N5bWJvbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUgJiYgIW90aElzTnVsbCAm
JiAhb3RoSXNTeW1ib2wpIHx8CgkgICAgICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5l
ZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHwKCSAgICAgICAgICAgICghdmFsSXNEZWZpbmVkICYmIG90
aElzUmVmbGV4aXZlKSB8fAoJICAgICAgICAgICAgIXZhbElzUmVmbGV4aXZlKSB7CgkgICAgICAg
ICAgcmV0dXJuIDE7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKCghdmFsSXNOdWxsICYmICF2YWxJ
c1N5bWJvbCAmJiAhb3RoSXNTeW1ib2wgJiYgdmFsdWUgPCBvdGhlcikgfHwKCSAgICAgICAgICAg
IChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElz
TnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8CgkgICAgICAgICAgICAob3RoSXNOdWxsICYmIHZhbElz
RGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHwKCSAgICAgICAgICAgICghb3RoSXNEZWZpbmVk
ICYmIHZhbElzUmVmbGV4aXZlKSB8fAoJICAgICAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7Cgkg
ICAgICAgICAgcmV0dXJuIC0xOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICByZXR1cm4gMDsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIFVzZWQgYnkgYF8ub3JkZXJCeWAgdG8gY29tcGFyZSBt
dWx0aXBsZSBwcm9wZXJ0aWVzIG9mIGEgdmFsdWUgdG8gYW5vdGhlcgoJICAgICAqIGFuZCBzdGFi
bGUgc29ydCB0aGVtLgoJICAgICAqCgkgICAgICogSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQs
IGFsbCB2YWx1ZXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuIE90aGVyd2lzZSwKCSAg
ICAgKiBzcGVjaWZ5IGFuIG9yZGVyIG9mICJkZXNjIiBmb3IgZGVzY2VuZGluZyBvciAiYXNjIiBm
b3IgYXNjZW5kaW5nIHNvcnQgb3JkZXIKCSAgICAgKiBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy4K
CSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBU
aGUgb2JqZWN0IHRvIGNvbXBhcmUuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBv
dGhlciBvYmplY3QgdG8gY29tcGFyZS4KCSAgICAgKiBAcGFyYW0ge2Jvb2xlYW5bXXxzdHJpbmdb
XX0gb3JkZXJzIFRoZSBvcmRlciB0byBzb3J0IGJ5IGZvciBlYWNoIHByb3BlcnR5LgoJICAgICAq
IEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHNvcnQgb3JkZXIgaW5kaWNhdG9yIGZvciBg
b2JqZWN0YC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjb21wYXJlTXVsdGlwbGUob2JqZWN0LCBv
dGhlciwgb3JkZXJzKSB7CgkgICAgICB2YXIgaW5kZXggPSAtMSwKCSAgICAgICAgICBvYmpDcml0
ZXJpYSA9IG9iamVjdC5jcml0ZXJpYSwKCSAgICAgICAgICBvdGhDcml0ZXJpYSA9IG90aGVyLmNy
aXRlcmlhLAoJICAgICAgICAgIGxlbmd0aCA9IG9iakNyaXRlcmlhLmxlbmd0aCwKCSAgICAgICAg
ICBvcmRlcnNMZW5ndGggPSBvcmRlcnMubGVuZ3RoOwoKCSAgICAgIHdoaWxlICgrK2luZGV4IDwg
bGVuZ3RoKSB7CgkgICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlQXNjZW5kaW5nKG9iakNyaXRl
cmlhW2luZGV4XSwgb3RoQ3JpdGVyaWFbaW5kZXhdKTsKCSAgICAgICAgaWYgKHJlc3VsdCkgewoJ
ICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHsKCSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CgkgICAgICAgICAgfQoJICAgICAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRl
eF07CgkgICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChvcmRlciA9PSAnZGVzYycgPyAtMSA6IDEp
OwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICAvLyBGaXhlcyBhbiBgQXJyYXkjc29ydGAgYnVn
IGluIHRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgYXBwbGljYXRpb25zCgkgICAgICAv
LyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRl
IHRoZSBzYW1lIHZhbHVlIGZvcgoJICAgICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBo
dHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3CgkgICAgICAv
LyBmb3IgbW9yZSBkZXRhaWxzLgoJICAgICAgLy8KCSAgICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVz
IGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuCgkgICAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTAgZm9yIG1vcmUg
ZGV0YWlscy4KCSAgICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgdGhhdCBpcyB0aGUgY29tcG9zaXRp
b24gb2YgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLAoJICAgICAqIHBsYWNlaG9sZGVycywg
YW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy4K
CSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUg
cHJvdmlkZWQgYXJndW1lbnRzLgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBh
cmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC4KCSAgICAgKiBAcGFyYW0ge0Fy
cmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuCgkgICAgICog
QHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3Vy
cmllZCBmdW5jdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBh
cnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuCgkgICAgICovCgkgICAgZnVuY3Rpb24gY29tcG9z
ZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkgewoJICAgICAgdmFyIGFy
Z3NJbmRleCA9IC0xLAoJICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCwKCSAgICAg
ICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsCgkgICAgICAgICAgbGVmdEluZGV4
ID0gLTEsCgkgICAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCwKCSAgICAgICAg
ICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCks
CgkgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSwKCSAg
ICAgICAgICBpc1VuY3VycmllZCA9ICFpc0N1cnJpZWQ7CgoJICAgICAgd2hpbGUgKCsrbGVmdElu
ZGV4IDwgbGVmdExlbmd0aCkgewoJICAgICAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxz
W2xlZnRJbmRleF07CgkgICAgICB9CgkgICAgICB3aGlsZSAoKythcmdzSW5kZXggPCBob2xkZXJz
TGVuZ3RoKSB7CgkgICAgICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVu
Z3RoKSB7CgkgICAgICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJ
bmRleF07CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7
CgkgICAgICAgIHJlc3VsdFtsZWZ0SW5kZXgrK10gPSBhcmdzW2FyZ3NJbmRleCsrXTsKCSAgICAg
IH0KCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGlzIGZ1
bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNv
bXBvc2l0aW9uCgkgICAgICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuCgkgICAg
ICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3Zp
ZGVkIGFyZ3VtZW50cy4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1l
bnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBo
b2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuCgkgICAgICogQHBhcmFt
cyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBm
dW5jdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBv
ZiBjb21wb3NlZCBhcmd1bWVudHMuCgkgICAgICovCgkgICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NS
aWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7CgkgICAgICB2YXIgYXJn
c0luZGV4ID0gLTEsCgkgICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLAoJICAgICAg
ICAgIGhvbGRlcnNJbmRleCA9IC0xLAoJICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJz
Lmxlbmd0aCwKCSAgICAgICAgICByaWdodEluZGV4ID0gLTEsCgkgICAgICAgICAgcmlnaHRMZW5n
dGggPSBwYXJ0aWFscy5sZW5ndGgsCgkgICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgo
YXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLAoJICAgICAgICAgIHJlc3VsdCA9IEFycmF5
KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLAoJICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlz
Q3VycmllZDsKCgkgICAgICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkgewoJICAg
ICAgICByZXN1bHRbYXJnc0luZGV4XSA9IGFyZ3NbYXJnc0luZGV4XTsKCSAgICAgIH0KCSAgICAg
IHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7CgkgICAgICB3aGlsZSAoKytyaWdodEluZGV4IDwgcmln
aHRMZW5ndGgpIHsKCSAgICAgICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlh
bHNbcmlnaHRJbmRleF07CgkgICAgICB9CgkgICAgICB3aGlsZSAoKytob2xkZXJzSW5kZXggPCBo
b2xkZXJzTGVuZ3RoKSB7CgkgICAgICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBh
cmdzTGVuZ3RoKSB7CgkgICAgICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0lu
ZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0
dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENvcGllcyB0aGUgdmFsdWVzIG9m
IGBzb3VyY2VgIHRvIGBhcnJheWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBw
YXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS4KCSAgICAg
KiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by4K
CSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkgewoJICAgICAgdmFyIGluZGV4ID0gLTEs
CgkgICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKCgkgICAgICBhcnJheSB8fCAoYXJy
YXkgPSBBcnJheShsZW5ndGgpKTsKCSAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7Cgkg
ICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07CgkgICAgICB9CgkgICAgICByZXR1
cm4gYXJyYXk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDb3BpZXMgcHJvcGVydGllcyBvZiBg
c291cmNlYCB0byBgb2JqZWN0YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLgoJ
ICAgICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBj
b3B5LgoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNv
cHkgcHJvcGVydGllcyB0by4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0g
VGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLgoJICAgICAqIEByZXR1cm5z
IHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gY29weU9i
amVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHsKCSAgICAgIHZhciBpc05l
dyA9ICFvYmplY3Q7CgkgICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTsKCgkgICAgICB2YXIg
aW5kZXggPSAtMSwKCSAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7CgoJICAgICAgd2hp
bGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTsK
CgkgICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIKCSAgICAgICAgICA/IGN1c3RvbWl6
ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKQoJICAgICAg
ICAgIDogdW5kZWZpbmVkOwoKCSAgICAgICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHsK
CSAgICAgICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldOwoJICAgICAgICB9CgkgICAgICAgIGlm
IChpc05ldykgewoJICAgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFs
dWUpOwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5
LCBuZXdWYWx1ZSk7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiBvYmplY3Q7Cgkg
ICAgfQoKCSAgICAvKioKCSAgICAgKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8g
YG9iamVjdGAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS4KCSAgICAgKiBAcGFyYW0g
e09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uCgkgICAg
ICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC4KCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkgewoJICAgICAgcmV0dXJuIGNvcHlPYmpl
Y3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBDb3BpZXMgb3duIGFuZCBpbmhlcml0ZWQgc3ltYm9scyBvZiBgc291cmNlYCB0byBg
b2JqZWN0YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9
IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyBmcm9tLgoJICAgICAqIEBwYXJhbSB7
T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgc3ltYm9scyB0by4KCSAgICAg
KiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqLwoJICAgIGZ1bmN0
aW9uIGNvcHlTeW1ib2xzSW4oc291cmNlLCBvYmplY3QpIHsKCSAgICAgIHJldHVybiBjb3B5T2Jq
ZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5ncm91cEJ5YC4KCSAgICAgKgoJ
ICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5j
dGlvbiB0byBzZXQgYWNjdW11bGF0b3IgdmFsdWVzLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IFtpbml0aWFsaXplcl0gVGhlIGFjY3VtdWxhdG9yIG9iamVjdCBpbml0aWFsaXplci4KCSAgICAg
KiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhZ2dyZWdhdG9yIGZ1bmN0aW9u
LgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNyZWF0ZUFnZ3JlZ2F0b3Ioc2V0dGVyLCBpbml0aWFs
aXplcikgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7Cgkg
ICAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5QWdncmVnYXRvciA6
IGJhc2VBZ2dyZWdhdG9yLAoJICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0aWFsaXplciA/
IGluaXRpYWxpemVyKCkgOiB7fTsKCgkgICAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNl
dHRlciwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7CgkgICAgICB9OwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWdu
YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXNz
aWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuCgkgICAgICogQHJldHVybnMge0Z1
bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHsKCSAgICAgIHJldHVybiBiYXNlUmVz
dChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHsKCSAgICAgICAgdmFyIGluZGV4ID0gLTEsCgkg
ICAgICAgICAgICBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aCwKCSAgICAgICAgICAgIGN1c3RvbWl6
ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCwKCSAgICAg
ICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7CgoJICAg
ICAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6
ZXIgPT0gJ2Z1bmN0aW9uJykKCSAgICAgICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcikKCSAg
ICAgICAgICA6IHVuZGVmaW5lZDsKCgkgICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2Fs
bChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHsKCSAgICAgICAgICBjdXN0b21pemVy
ID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7CgkgICAgICAgICAgbGVuZ3Ro
ID0gMTsKCSAgICAgICAgfQoJICAgICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTsKCSAgICAg
ICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgICB2YXIgc291cmNlID0gc291
cmNlc1tpbmRleF07CgkgICAgICAgICAgaWYgKHNvdXJjZSkgewoJICAgICAgICAgICAgYXNzaWdu
ZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTsKCSAgICAgICAgICB9CgkgICAg
ICAgIH0KCSAgICAgICAgcmV0dXJuIG9iamVjdDsKCSAgICAgIH0pOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9u
LgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNo
RnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi4KCSAgICAgKiBA
cGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQg
dG8gbGVmdC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNl
IGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5j
LCBmcm9tUmlnaHQpIHsKCSAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRl
ZSkgewoJICAgICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7CgkgICAgICAgICAgcmV0dXJu
IGNvbGxlY3Rpb247CgkgICAgICAgIH0KCSAgICAgICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0
aW9uKSkgewoJICAgICAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7
CgkgICAgICAgIH0KCSAgICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLAoJICAg
ICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSwKCSAgICAgICAgICAgIGl0
ZXJhYmxlID0gT2JqZWN0KGNvbGxlY3Rpb24pOwoKCSAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQg
PyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHsKCSAgICAgICAgICBpZiAoaXRlcmF0ZWUo
aXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkgewoJICAgICAgICAg
ICAgYnJlYWs7CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICAgIHJldHVybiBjb2xsZWN0
aW9uOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBiYXNlIGZ1
bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLgoJICAgICAq
CgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNw
ZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC4KCSAgICAgKiBAcmV0dXJucyB7RnVu
Y3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1bmN0
aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7CgkgICAgICByZXR1cm4gZnVuY3Rpb24ob2Jq
ZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHsKCSAgICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAg
ICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLAoJICAgICAgICAgICAgcHJvcHMgPSBr
ZXlzRnVuYyhvYmplY3QpLAoJICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwoKCSAg
ICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CgkgICAgICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21S
aWdodCA/IGxlbmd0aCA6ICsraW5kZXhdOwoJICAgICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJs
ZVtrZXldLCBrZXksIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHsKCSAgICAgICAgICAgIGJyZWFrOwoJ
ICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gb2JqZWN0OwoJICAgICAgfTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBm
dW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgb3B0aW9uYWwgYHRoaXNgCgkgICAgICogYmluZGlu
ZyBvZiBgdGhpc0FyZ2AuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuCgkgICAgICogQHBhcmFtIHtudW1i
ZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUg
ZGV0YWlscy4KCSAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcg
b2YgYGZ1bmNgLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdy
YXBwZWQgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRlQmluZChmdW5jLCBi
aXRtYXNrLCB0aGlzQXJnKSB7CgkgICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklO
RF9GTEFHLAoJICAgICAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpOwoKCSAgICAgIGZ1bmN0
aW9uIHdyYXBwZXIoKSB7CgkgICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3Qg
JiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7CgkgICAgICAgIHJldHVy
biBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTsKCSAgICAgIH0K
CSAgICAgIHJldHVybiB3cmFwcGVyOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBh
IGZ1bmN0aW9uIGxpa2UgYF8ubG93ZXJGaXJzdGAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJ
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIFRoZSBuYW1lIG9mIHRoZSBgU3RyaW5n
YCBjYXNlIG1ldGhvZCB0byB1c2UuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5z
IHRoZSBuZXcgY2FzZSBmdW5jdGlvbi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjcmVhdGVDYXNl
Rmlyc3QobWV0aG9kTmFtZSkgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykgewoJICAg
ICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpOwoKCSAgICAgICAgdmFyIHN0clN5bWJvbHMg
PSBoYXNVbmljb2RlKHN0cmluZykKCSAgICAgICAgICA/IHN0cmluZ1RvQXJyYXkoc3RyaW5nKQoJ
ICAgICAgICAgIDogdW5kZWZpbmVkOwoKCSAgICAgICAgdmFyIGNociA9IHN0clN5bWJvbHMKCSAg
ICAgICAgICA/IHN0clN5bWJvbHNbMF0KCSAgICAgICAgICA6IHN0cmluZy5jaGFyQXQoMCk7CgoJ
ICAgICAgICB2YXIgdHJhaWxpbmcgPSBzdHJTeW1ib2xzCgkgICAgICAgICAgPyBjYXN0U2xpY2Uo
c3RyU3ltYm9scywgMSkuam9pbignJykKCSAgICAgICAgICA6IHN0cmluZy5zbGljZSgxKTsKCgkg
ICAgICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nOwoJICAgICAgfTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmNhbWVsQ2Fz
ZWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNh
bGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIGVhY2ggd29yZC4KCSAgICAgKiBAcmV0dXJu
cyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLgoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kZXIoY2FsbGJhY2spIHsKCSAgICAgIHJldHVy
biBmdW5jdGlvbihzdHJpbmcpIHsKCSAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRl
YnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpOwoJICAgICAg
fTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb2R1
Y2VzIGFuIGluc3RhbmNlIG9mIGBDdG9yYCByZWdhcmRsZXNzIG9mCgkgICAgICogd2hldGhlciBp
dCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAg
b3IgYGFwcGx5YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5j
dGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC4KCSAgICAgKiBAcmV0dXJucyB7RnVu
Y3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1
bmN0aW9uIGNyZWF0ZUN0b3IoQ3RvcikgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewoJICAg
ICAgICAvLyBVc2UgYSBgc3dpdGNoYCBzdGF0ZW1lbnQgdG8gd29yayB3aXRoIGNsYXNzIGNvbnN0
cnVjdG9ycy4gU2VlCgkgICAgICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2Vj
bWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1
bWVudC1hcmd1bWVudHNsaXN0CgkgICAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuCgkgICAgICAg
IHZhciBhcmdzID0gYXJndW1lbnRzOwoJICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7Cgkg
ICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7CgkgICAgICAgICAgY2FzZSAxOiByZXR1
cm4gbmV3IEN0b3IoYXJnc1swXSk7CgkgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3Io
YXJnc1swXSwgYXJnc1sxXSk7CgkgICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJn
c1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CgkgICAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IEN0
b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7CgkgICAgICAgICAgY2FzZSA1
OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJn
c1s0XSk7CgkgICAgICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sx
XSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7CgkgICAgICAgICAgY2FzZSA3
OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJn
c1s0XSwgYXJnc1s1XSwgYXJnc1s2XSk7CgkgICAgICAgIH0KCSAgICAgICAgdmFyIHRoaXNCaW5k
aW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksCgkgICAgICAgICAgICByZXN1bHQgPSBD
dG9yLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTsKCgkgICAgICAgIC8vIE1pbWljIHRoZSBjb25z
dHJ1Y3RvcidzIGByZXR1cm5gIGJlaGF2aW9yLgoJICAgICAgICAvLyBTZWUgaHR0cHM6Ly9lczUu
Z2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuCgkgICAgICAgIHJldHVybiBpc09i
amVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7CgkgICAgICB9OwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVu
YWJsZSBjdXJyeWluZy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC4KCSAgICAgKiBAcGFyYW0ge251bWJl
cn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBk
ZXRhaWxzLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNg
LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVu
Y3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywg
YXJpdHkpIHsKCSAgICAgIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTsKCgkgICAgICBmdW5j
dGlvbiB3cmFwcGVyKCkgewoJICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwK
CSAgICAgICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLAoJICAgICAgICAgICAgaW5kZXggPSBs
ZW5ndGgsCgkgICAgICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTsKCgkg
ICAgICAgIHdoaWxlIChpbmRleC0tKSB7CgkgICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVu
dHNbaW5kZXhdOwoJICAgICAgICB9CgkgICAgICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMg
JiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vo
b2xkZXIpCgkgICAgICAgICAgPyBbXQoJICAgICAgICAgIDogcmVwbGFjZUhvbGRlcnMoYXJncywg
cGxhY2Vob2xkZXIpOwoKCSAgICAgICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoOwoJICAgICAg
ICBpZiAobGVuZ3RoIDwgYXJpdHkpIHsKCSAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeSgK
CSAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhv
bGRlciwgdW5kZWZpbmVkLAoJICAgICAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1
bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTsKCSAgICAgICAgfQoJICAgICAgICB2YXIgZm4gPSAo
dGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3Ig
OiBmdW5jOwoJICAgICAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpOwoJICAgICAgfQoJ
ICAgICAgcmV0dXJuIHdyYXBwZXI7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEg
YF8uZmluZGAgb3IgYF8uZmluZExhc3RgIGZ1bmN0aW9uLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaW5kSW5kZXhGdW5jIFRoZSBmdW5jdGlvbiB0
byBmaW5kIHRoZSBjb2xsZWN0aW9uIGluZGV4LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0g
UmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3Jl
YXRlRmluZChmaW5kSW5kZXhGdW5jKSB7CgkgICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlv
biwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHsKCSAgICAgICAgdmFyIGl0ZXJhYmxlID0gT2JqZWN0
KGNvbGxlY3Rpb24pOwoJICAgICAgICBpZiAoIWlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pKSB7Cgkg
ICAgICAgICAgdmFyIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKTsKCSAgICAg
ICAgICBjb2xsZWN0aW9uID0ga2V5cyhjb2xsZWN0aW9uKTsKCSAgICAgICAgICBwcmVkaWNhdGUg
PSBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRl
cmFibGUpOyB9OwoJICAgICAgICB9CgkgICAgICAgIHZhciBpbmRleCA9IGZpbmRJbmRleEZ1bmMo
Y29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpOwoJICAgICAgICByZXR1cm4gaW5kZXgg
PiAtMSA/IGl0ZXJhYmxlW2l0ZXJhdGVlID8gY29sbGVjdGlvbltpbmRleF0gOiBpbmRleF0gOiB1
bmRlZmluZWQ7CgkgICAgICB9OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGBf
LmZsb3dgIG9yIGBfLmZsb3dSaWdodGAgZnVuY3Rpb24uCgkgICAgICoKCSAgICAgKiBAcHJpdmF0
ZQoJICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcg
ZnJvbSByaWdodCB0byBsZWZ0LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0
aGUgbmV3IGZsb3cgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhm
cm9tUmlnaHQpIHsKCSAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihmdW5jcykgewoJICAg
ICAgICB2YXIgbGVuZ3RoID0gZnVuY3MubGVuZ3RoLAoJICAgICAgICAgICAgaW5kZXggPSBsZW5n
dGgsCgkgICAgICAgICAgICBwcmVyZXEgPSBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS50aHJ1OwoK
CSAgICAgICAgaWYgKGZyb21SaWdodCkgewoJICAgICAgICAgIGZ1bmNzLnJldmVyc2UoKTsKCSAg
ICAgICAgfQoJICAgICAgICB3aGlsZSAoaW5kZXgtLSkgewoJICAgICAgICAgIHZhciBmdW5jID0g
ZnVuY3NbaW5kZXhdOwoJICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7
CgkgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CgkgICAg
ICAgICAgfQoJICAgICAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUo
ZnVuYykgPT0gJ3dyYXBwZXInKSB7CgkgICAgICAgICAgICB2YXIgd3JhcHBlciA9IG5ldyBMb2Rh
c2hXcmFwcGVyKFtdLCB0cnVlKTsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAgaW5k
ZXggPSB3cmFwcGVyID8gaW5kZXggOiBsZW5ndGg7CgkgICAgICAgIHdoaWxlICgrK2luZGV4IDwg
bGVuZ3RoKSB7CgkgICAgICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTsKCgkgICAgICAgICAgdmFy
IGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksCgkgICAgICAgICAgICAgIGRhdGEgPSBmdW5j
TmFtZSA9PSAnd3JhcHBlcicgPyBnZXREYXRhKGZ1bmMpIDogdW5kZWZpbmVkOwoKCSAgICAgICAg
ICBpZiAoZGF0YSAmJiBpc0xhemlhYmxlKGRhdGFbMF0pICYmCgkgICAgICAgICAgICAgICAgZGF0
YVsxXSA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfUEFSVElBTF9G
TEFHIHwgV1JBUF9SRUFSR19GTEFHKSAmJgoJICAgICAgICAgICAgICAgICFkYXRhWzRdLmxlbmd0
aCAmJiBkYXRhWzldID09IDEKCSAgICAgICAgICAgICAgKSB7CgkgICAgICAgICAgICB3cmFwcGVy
ID0gd3JhcHBlcltnZXRGdW5jTmFtZShkYXRhWzBdKV0uYXBwbHkod3JhcHBlciwgZGF0YVszXSk7
CgkgICAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGgg
PT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKQoJICAgICAgICAgICAgICA/IHdyYXBwZXJbZnVuY05h
bWVdKCkKCSAgICAgICAgICAgICAgOiB3cmFwcGVyLnRocnUoZnVuYyk7CgkgICAgICAgICAgfQoJ
ICAgICAgICB9CgkgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKCSAgICAgICAgICB2YXIgYXJn
cyA9IGFyZ3VtZW50cywKCSAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdOwoKCSAgICAgICAg
ICBpZiAod3JhcHBlciAmJiBhcmdzLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodmFsdWUpKSB7Cgkg
ICAgICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTsKCSAgICAgICAg
ICB9CgkgICAgICAgICAgdmFyIGluZGV4ID0gMCwKCSAgICAgICAgICAgICAgcmVzdWx0ID0gbGVu
Z3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7CgoJICAgICAgICAg
IHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CgkgICAgICAgICAgICByZXN1bHQgPSBmdW5jc1tp
bmRleF0uY2FsbCh0aGlzLCByZXN1bHQpOwoJICAgICAgICAgIH0KCSAgICAgICAgICByZXR1cm4g
cmVzdWx0OwoJICAgICAgICB9OwoJICAgICAgfSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBD
cmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0
aW9uYWwgYHRoaXNgCgkgICAgICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGlj
YXRpb24sIGFuZCBjdXJyeWluZy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRv
IHdyYXAuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3Mu
IFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy4KCSAgICAgKiBAcGFyYW0geyp9IFt0
aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLgoJICAgICAqIEBwYXJhbSB7QXJy
YXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVk
IHRvCgkgICAgICogIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICogQHBhcmFtIHtBcnJheX0gW2hv
bGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuCgkgICAgICogQHBhcmFt
IHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3Nl
IHByb3ZpZGVkCgkgICAgICogIHRvIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICogQHBhcmFtIHtB
cnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRl
eGVzLgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlv
bnMgb2YgdGhlIG5ldyBmdW5jdGlvbi4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhl
IGFyaXR5IGNhcCBvZiBgZnVuY2AuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhl
IGFyaXR5IG9mIGBmdW5jYC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhl
IG5ldyB3cmFwcGVkIGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNyZWF0ZUh5YnJp
ZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdo
dCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHsKCSAgICAgIHZhciBpc0FyeSA9
IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLAoJICAgICAgICAgIGlzQmluZCA9IGJpdG1hc2sgJiBX
UkFQX0JJTkRfRkxBRywKCSAgICAgICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5E
X0tFWV9GTEFHLAoJICAgICAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9G
TEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSwKCSAgICAgICAgICBpc0ZsaXAgPSBiaXRtYXNr
ICYgV1JBUF9GTElQX0ZMQUcsCgkgICAgICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5l
ZCA6IGNyZWF0ZUN0b3IoZnVuYyk7CgoJICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHsKCSAgICAg
ICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsCgkgICAgICAgICAgICBhcmdzID0gQXJy
YXkobGVuZ3RoKSwKCSAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoOwoKCSAgICAgICAgd2hpbGUg
KGluZGV4LS0pIHsKCSAgICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07Cgkg
ICAgICAgIH0KCSAgICAgICAgaWYgKGlzQ3VycmllZCkgewoJICAgICAgICAgIHZhciBwbGFjZWhv
bGRlciA9IGdldEhvbGRlcih3cmFwcGVyKSwKCSAgICAgICAgICAgICAgaG9sZGVyc0NvdW50ID0g
Y291bnRIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTsKCSAgICAgICAgfQoJICAgICAgICBpZiAo
cGFydGlhbHMpIHsKCSAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMs
IGhvbGRlcnMsIGlzQ3VycmllZCk7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKHBhcnRpYWxzUmln
aHQpIHsKCSAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFsc1Jp
Z2h0LCBob2xkZXJzUmlnaHQsIGlzQ3VycmllZCk7CgkgICAgICAgIH0KCSAgICAgICAgbGVuZ3Ro
IC09IGhvbGRlcnNDb3VudDsKCSAgICAgICAgaWYgKGlzQ3VycmllZCAmJiBsZW5ndGggPCBhcml0
eSkgewoJICAgICAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxh
Y2Vob2xkZXIpOwoJICAgICAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KAoJICAgICAgICAgICAg
ZnVuYywgYml0bWFzaywgY3JlYXRlSHlicmlkLCB3cmFwcGVyLnBsYWNlaG9sZGVyLCB0aGlzQXJn
LAoJICAgICAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVu
Z3RoCgkgICAgICAgICAgKTsKCSAgICAgICAgfQoJICAgICAgICB2YXIgdGhpc0JpbmRpbmcgPSBp
c0JpbmQgPyB0aGlzQXJnIDogdGhpcywKCSAgICAgICAgICAgIGZuID0gaXNCaW5kS2V5ID8gdGhp
c0JpbmRpbmdbZnVuY10gOiBmdW5jOwoKCSAgICAgICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7Cgkg
ICAgICAgIGlmIChhcmdQb3MpIHsKCSAgICAgICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQ
b3MpOwoJICAgICAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7CgkgICAgICAg
ICAgYXJncy5yZXZlcnNlKCk7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8
IGxlbmd0aCkgewoJICAgICAgICAgIGFyZ3MubGVuZ3RoID0gYXJ5OwoJICAgICAgICB9CgkgICAg
ICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIp
IHsKCSAgICAgICAgICBmbiA9IEN0b3IgfHwgY3JlYXRlQ3Rvcihmbik7CgkgICAgICAgIH0KCSAg
ICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTsKCSAgICAgIH0KCSAgICAg
IHJldHVybiB3cmFwcGVyOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0
aW9uIGxpa2UgYF8uaW52ZXJ0QnlgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBA
cGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2
YWx1ZXMuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24g
dG8gcmVzb2x2ZSBpdGVyYXRlZXMuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5z
IHRoZSBuZXcgaW52ZXJ0ZXIgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRl
SW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7CgkgICAgICByZXR1cm4gZnVuY3Rpb24ob2Jq
ZWN0LCBpdGVyYXRlZSkgewoJICAgICAgICByZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCwgc2V0
dGVyLCB0b0l0ZXJhdGVlKGl0ZXJhdGVlKSwge30pOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8q
KgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgbWF0aGVtYXRpY2Fs
IG9wZXJhdGlvbiBvbiB0d28gdmFsdWVzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBvcGVyYXRvciBUaGUgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUg
b3BlcmF0aW9uLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFs
dWUgdXNlZCBmb3IgYHVuZGVmaW5lZGAgYXJndW1lbnRzLgoJICAgICAqIEByZXR1cm5zIHtGdW5j
dGlvbn0gUmV0dXJucyB0aGUgbmV3IG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gZnVuY3Rpb24uCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRlTWF0aE9wZXJhdGlvbihvcGVyYXRvciwgZGVmYXVs
dFZhbHVlKSB7CgkgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7CgkgICAgICAg
IHZhciByZXN1bHQ7CgkgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG90aGVyID09
PSB1bmRlZmluZWQpIHsKCSAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwoJICAgICAgICB9
CgkgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CgkgICAgICAgICAgcmVzdWx0ID0g
dmFsdWU7CgkgICAgICAgIH0KCSAgICAgICAgaWYgKG90aGVyICE9PSB1bmRlZmluZWQpIHsKCSAg
ICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAgICAgIHJldHVybiBv
dGhlcjsKCSAgICAgICAgICB9CgkgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5n
JyB8fCB0eXBlb2Ygb3RoZXIgPT0gJ3N0cmluZycpIHsKCSAgICAgICAgICAgIHZhbHVlID0gYmFz
ZVRvU3RyaW5nKHZhbHVlKTsKCSAgICAgICAgICAgIG90aGVyID0gYmFzZVRvU3RyaW5nKG90aGVy
KTsKCSAgICAgICAgICB9IGVsc2UgewoJICAgICAgICAgICAgdmFsdWUgPSBiYXNlVG9OdW1iZXIo
dmFsdWUpOwoJICAgICAgICAgICAgb3RoZXIgPSBiYXNlVG9OdW1iZXIob3RoZXIpOwoJICAgICAg
ICAgIH0KCSAgICAgICAgICByZXN1bHQgPSBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpOwoJICAgICAg
ICB9CgkgICAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgICB9OwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ub3ZlcmAuCgkgICAgICoKCSAgICAgKiBA
cHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFycmF5RnVuYyBUaGUgZnVuY3Rpb24g
dG8gaXRlcmF0ZSBvdmVyIGl0ZXJhdGVlcy4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJl
dHVybnMgdGhlIG5ldyBvdmVyIGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNyZWF0
ZU92ZXIoYXJyYXlGdW5jKSB7CgkgICAgICByZXR1cm4gZmxhdFJlc3QoZnVuY3Rpb24oaXRlcmF0
ZWVzKSB7CgkgICAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5
KGdldEl0ZXJhdGVlKCkpKTsKCSAgICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3Mp
IHsKCSAgICAgICAgICB2YXIgdGhpc0FyZyA9IHRoaXM7CgkgICAgICAgICAgcmV0dXJuIGFycmF5
RnVuYyhpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7CgkgICAgICAgICAgICByZXR1cm4g
YXBwbHkoaXRlcmF0ZWUsIHRoaXNBcmcsIGFyZ3MpOwoJICAgICAgICAgIH0pOwoJICAgICAgICB9
KTsKCSAgICAgIH0pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyB0aGUgcGFkZGlu
ZyBmb3IgYHN0cmluZ2AgYmFzZWQgb24gYGxlbmd0aGAuIFRoZSBgY2hhcnNgIHN0cmluZwoJICAg
ICAqIGlzIHRydW5jYXRlZCBpZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXhjZWVkcyBgbGVu
Z3RoYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IGxl
bmd0aCBUaGUgcGFkZGluZyBsZW5ndGguCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0n
ICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9
IFJldHVybnMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykgewoJICAgICAgY2hhcnMgPSBjaGFycyA9PT0g
dW5kZWZpbmVkID8gJyAnIDogYmFzZVRvU3RyaW5nKGNoYXJzKTsKCgkgICAgICB2YXIgY2hhcnNM
ZW5ndGggPSBjaGFycy5sZW5ndGg7CgkgICAgICBpZiAoY2hhcnNMZW5ndGggPCAyKSB7CgkgICAg
ICAgIHJldHVybiBjaGFyc0xlbmd0aCA/IGJhc2VSZXBlYXQoY2hhcnMsIGxlbmd0aCkgOiBjaGFy
czsKCSAgICAgIH0KCSAgICAgIHZhciByZXN1bHQgPSBiYXNlUmVwZWF0KGNoYXJzLCBuYXRpdmVD
ZWlsKGxlbmd0aCAvIHN0cmluZ1NpemUoY2hhcnMpKSk7CgkgICAgICByZXR1cm4gaGFzVW5pY29k
ZShjaGFycykKCSAgICAgICAgPyBjYXN0U2xpY2Uoc3RyaW5nVG9BcnJheShyZXN1bHQpLCAwLCBs
ZW5ndGgpLmpvaW4oJycpCgkgICAgICAgIDogcmVzdWx0LnNsaWNlKDAsIGxlbmd0aCk7CgkgICAg
fQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2Ag
dG8gaW52b2tlIGl0IHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nCgkgICAgICogb2YgYHRoaXNBcmdg
IGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLgoJ
ICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRo
ZSBmdW5jdGlvbiB0byB3cmFwLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBi
aXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuCgkgICAgICog
QHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuCgkgICAgICog
QHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3Nl
IHByb3ZpZGVkIHRvCgkgICAgICogIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICogQHJldHVybnMg
e0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi4KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxz
KSB7CgkgICAgICB2YXIgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLAoJICAgICAg
ICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpOwoKCSAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7
CgkgICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSwKCSAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBh
cmd1bWVudHMubGVuZ3RoLAoJICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsCgkgICAgICAgICAg
ICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLAoJICAgICAgICAgICAgYXJncyA9IEFycmF5
KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSwKCSAgICAgICAgICAgIGZuID0gKHRoaXMgJiYgdGhp
cyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYzsKCgkg
ICAgICAgIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHsKCSAgICAgICAgICBhcmdz
W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdOwoJICAgICAgICB9CgkgICAgICAgIHdo
aWxlIChhcmdzTGVuZ3RoLS0pIHsKCSAgICAgICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3Vt
ZW50c1srK2FyZ3NJbmRleF07CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIGFwcGx5KGZuLCBp
c0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7CgkgICAgICB9CgkgICAgICByZXR1cm4gd3Jh
cHBlcjsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8u
cmFuZ2VSaWdodGAgZnVuY3Rpb24uCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBw
YXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0
byBsZWZ0LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHJhbmdl
IGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkg
ewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIHN0ZXApIHsKCSAgICAgICAgaWYg
KHN0ZXAgJiYgdHlwZW9mIHN0ZXAgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoc3RhcnQs
IGVuZCwgc3RlcCkpIHsKCSAgICAgICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkOwoJICAgICAg
ICB9CgkgICAgICAgIC8vIEVuc3VyZSB0aGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC4KCSAg
ICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7CgkgICAgICAgIGlmIChlbmQgPT09IHVuZGVm
aW5lZCkgewoJICAgICAgICAgIGVuZCA9IHN0YXJ0OwoJICAgICAgICAgIHN0YXJ0ID0gMDsKCSAg
ICAgICAgfSBlbHNlIHsKCSAgICAgICAgICBlbmQgPSB0b0Zpbml0ZShlbmQpOwoJICAgICAgICB9
CgkgICAgICAgIHN0ZXAgPSBzdGVwID09PSB1bmRlZmluZWQgPyAoc3RhcnQgPCBlbmQgPyAxIDog
LTEpIDogdG9GaW5pdGUoc3RlcCk7CgkgICAgICAgIHJldHVybiBiYXNlUmFuZ2Uoc3RhcnQsIGVu
ZCwgc3RlcCwgZnJvbVJpZ2h0KTsKCSAgICAgIH07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBD
cmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHJlbGF0aW9uYWwgb3BlcmF0aW9uIG9u
IHR3byB2YWx1ZXMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uCgkg
ICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVsYXRpb25hbCBvcGVy
YXRpb24gZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25hbE9w
ZXJhdGlvbihvcGVyYXRvcikgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikg
ewoJICAgICAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVy
ID09ICdzdHJpbmcnKSkgewoJICAgICAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpOwoJICAg
ICAgICAgIG90aGVyID0gdG9OdW1iZXIob3RoZXIpOwoJICAgICAgICB9CgkgICAgICAgIHJldHVy
biBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJy
eWluZy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
ZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFz
ayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLgoJ
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBGdW5jIFRoZSBmdW5jdGlvbiB0byBjcmVhdGUg
dGhlIGBmdW5jYCB3cmFwcGVyLgoJICAgICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBs
YWNlaG9sZGVyIHZhbHVlLgoJICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2Ag
YmluZGluZyBvZiBgZnVuY2AuCgkgICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUg
YXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG8KCSAgICAgKiAgdGhlIG5l
dyBmdW5jdGlvbi4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFs
c2AgcGxhY2Vob2xkZXIgaW5kZXhlcy4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBU
aGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICogQHBhcmFt
IHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLgoJICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuCgkgICAgICogQHJldHVybnMge0Z1
bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRl
ciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkgewoJICAg
ICAgdmFyIGlzQ3VycnkgPSBiaXRtYXNrICYgV1JBUF9DVVJSWV9GTEFHLAoJICAgICAgICAgIG5l
d0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCwKCSAgICAgICAgICBuZXdI
b2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycywKCSAgICAgICAgICBu
ZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBwYXJ0aWFscyA6IHVuZGVmaW5lZCwKCSAgICAgICAgICBu
ZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzOwoKCSAgICAg
IGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9S
SUdIVF9GTEFHKTsKCSAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJ
R0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7CgoJICAgICAgaWYgKCEoYml0bWFzayAmIFdS
QVBfQ1VSUllfQk9VTkRfRkxBRykpIHsKCSAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9G
TEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTsKCSAgICAgIH0KCSAgICAgIHZhciBuZXdEYXRhID0g
WwoJICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVy
cywgbmV3UGFydGlhbHNSaWdodCwKCSAgICAgICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFy
eSwgYXJpdHkKCSAgICAgIF07CgoJICAgICAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVu
ZGVmaW5lZCwgbmV3RGF0YSk7CgkgICAgICBpZiAoaXNMYXppYWJsZShmdW5jKSkgewoJICAgICAg
ICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7CgkgICAgICB9CgkgICAgICByZXN1bHQucGxhY2Vo
b2xkZXIgPSBwbGFjZWhvbGRlcjsKCSAgICAgIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0
LCBmdW5jLCBiaXRtYXNrKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5j
dGlvbiBsaWtlIGBfLnJvdW5kYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBNYXRoYCBtZXRob2QgdG8g
dXNlIHdoZW4gcm91bmRpbmcuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRo
ZSBuZXcgcm91bmQgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gY3JlYXRlUm91bmQo
bWV0aG9kTmFtZSkgewoJICAgICAgdmFyIGZ1bmMgPSBNYXRoW21ldGhvZE5hbWVdOwoJICAgICAg
cmV0dXJuIGZ1bmN0aW9uKG51bWJlciwgcHJlY2lzaW9uKSB7CgkgICAgICAgIG51bWJlciA9IHRv
TnVtYmVyKG51bWJlcik7CgkgICAgICAgIHByZWNpc2lvbiA9IHByZWNpc2lvbiA9PSBudWxsID8g
MCA6IG5hdGl2ZU1pbih0b0ludGVnZXIocHJlY2lzaW9uKSwgMjkyKTsKCSAgICAgICAgaWYgKHBy
ZWNpc2lvbiAmJiBuYXRpdmVJc0Zpbml0ZShudW1iZXIpKSB7CgkgICAgICAgICAgLy8gU2hpZnQg
d2l0aCBleHBvbmVudGlhbCBub3RhdGlvbiB0byBhdm9pZCBmbG9hdGluZy1wb2ludCBpc3N1ZXMu
CgkgICAgICAgICAgLy8gU2VlIFtNRE5dKGh0dHBzOi8vbWRuLmlvL3JvdW5kI0V4YW1wbGVzKSBm
b3IgbW9yZSBkZXRhaWxzLgoJICAgICAgICAgIHZhciBwYWlyID0gKHRvU3RyaW5nKG51bWJlcikg
KyAnZScpLnNwbGl0KCdlJyksCgkgICAgICAgICAgICAgIHZhbHVlID0gZnVuYyhwYWlyWzBdICsg
J2UnICsgKCtwYWlyWzFdICsgcHJlY2lzaW9uKSk7CgoJICAgICAgICAgIHBhaXIgPSAodG9TdHJp
bmcodmFsdWUpICsgJ2UnKS5zcGxpdCgnZScpOwoJICAgICAgICAgIHJldHVybiArKHBhaXJbMF0g
KyAnZScgKyAoK3BhaXJbMV0gLSBwcmVjaXNpb24pKTsKCSAgICAgICAgfQoJICAgICAgICByZXR1
cm4gZnVuYyhudW1iZXIpOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0
ZXMgYSBzZXQgb2JqZWN0IG9mIGB2YWx1ZXNgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAg
ICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhZGQgdG8gdGhlIHNldC4K
CSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LgoJICAgICAqLwoJ
ICAgIHZhciBjcmVhdGVTZXQgPSAhKFNldCAmJiAoMSAvIHNldFRvQXJyYXkobmV3IFNldChbLC0w
XSkpWzFdKSA9PSBJTkZJTklUWSkgPyBub29wIDogZnVuY3Rpb24odmFsdWVzKSB7CgkgICAgICBy
ZXR1cm4gbmV3IFNldCh2YWx1ZXMpOwoJICAgIH07CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMg
YSBgXy50b1BhaXJzYCBvciBgXy50b1BhaXJzSW5gIGZ1bmN0aW9uLgoJICAgICAqCgkgICAgICog
QHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24g
dG8gZ2V0IHRoZSBrZXlzIG9mIGEgZ2l2ZW4gb2JqZWN0LgoJICAgICAqIEByZXR1cm5zIHtGdW5j
dGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhaXJzIGZ1bmN0aW9uLgoJICAgICAqLwoJICAgIGZ1bmN0
aW9uIGNyZWF0ZVRvUGFpcnMoa2V5c0Z1bmMpIHsKCSAgICAgIHJldHVybiBmdW5jdGlvbihvYmpl
Y3QpIHsKCSAgICAgICAgdmFyIHRhZyA9IGdldFRhZyhvYmplY3QpOwoJICAgICAgICBpZiAodGFn
ID09IG1hcFRhZykgewoJICAgICAgICAgIHJldHVybiBtYXBUb0FycmF5KG9iamVjdCk7CgkgICAg
ICAgIH0KCSAgICAgICAgaWYgKHRhZyA9PSBzZXRUYWcpIHsKCSAgICAgICAgICByZXR1cm4gc2V0
VG9QYWlycyhvYmplY3QpOwoJICAgICAgICB9CgkgICAgICAgIHJldHVybiBiYXNlVG9QYWlycyhv
YmplY3QsIGtleXNGdW5jKG9iamVjdCkpOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1
bmNgIHdpdGggb3B0aW9uYWwKCSAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFw
cGxpZWQgYXJndW1lbnRzLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3Jh
cC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4KCSAg
ICAgKiAgICAxIC0gYF8uYmluZGAKCSAgICAgKiAgICAyIC0gYF8uYmluZEtleWAKCSAgICAgKiAg
ICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb24KCSAg
ICAgKiAgICA4IC0gYF8uY3VycnlgCgkgICAgICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgCgkgICAg
ICogICAzMiAtIGBfLnBhcnRpYWxgCgkgICAgICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGAKCSAg
ICAgKiAgMTI4IC0gYF8ucmVhcmdgCgkgICAgICogIDI1NiAtIGBfLmFyeWAKCSAgICAgKiAgNTEy
IC0gYF8uZmxpcGAKCSAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRp
bmcgb2YgYGZ1bmNgLgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3Vt
ZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9s
ZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy4KCSAgICAgKiBAcGFyYW0g
e0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rp
b24uCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNg
LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuCgkg
ICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlv
bi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNB
cmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHsKCSAgICAgIHZhciBp
c0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHOwoJICAgICAgaWYgKCFpc0Jp
bmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewoJICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CgkgICAgICB9CgkgICAgICB2YXIgbGVuZ3RoID0g
cGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwOwoJICAgICAgaWYgKCFsZW5ndGgpIHsKCSAg
ICAgICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hU
X0ZMQUcpOwoJICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7CgkgICAgICB9
CgkgICAgICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVn
ZXIoYXJ5KSwgMCk7CgkgICAgICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6
IHRvSW50ZWdlcihhcml0eSk7CgkgICAgICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVu
Z3RoIDogMDsKCgkgICAgICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7
CgkgICAgICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsCgkgICAgICAgICAgICBob2xk
ZXJzUmlnaHQgPSBob2xkZXJzOwoKCSAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZp
bmVkOwoJICAgICAgfQoJICAgICAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBn
ZXREYXRhKGZ1bmMpOwoKCSAgICAgIHZhciBuZXdEYXRhID0gWwoJICAgICAgICBmdW5jLCBiaXRt
YXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1Jp
Z2h0LAoJICAgICAgICBhcmdQb3MsIGFyeSwgYXJpdHkKCSAgICAgIF07CgoJICAgICAgaWYgKGRh
dGEpIHsKCSAgICAgICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpOwoJICAgICAgfQoJICAgICAg
ZnVuYyA9IG5ld0RhdGFbMF07CgkgICAgICBiaXRtYXNrID0gbmV3RGF0YVsxXTsKCSAgICAgIHRo
aXNBcmcgPSBuZXdEYXRhWzJdOwoJICAgICAgcGFydGlhbHMgPSBuZXdEYXRhWzNdOwoJICAgICAg
aG9sZGVycyA9IG5ld0RhdGFbNF07CgkgICAgICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRh
WzldID09PSB1bmRlZmluZWQKCSAgICAgICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3Ro
KQoJICAgICAgICA6IG5hdGl2ZU1heChuZXdEYXRhWzldIC0gbGVuZ3RoLCAwKTsKCgkgICAgICBp
ZiAoIWFyaXR5ICYmIGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdI
VF9GTEFHKSkgewoJICAgICAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9D
VVJSWV9SSUdIVF9GTEFHKTsKCSAgICAgIH0KCSAgICAgIGlmICghYml0bWFzayB8fCBiaXRtYXNr
ID09IFdSQVBfQklORF9GTEFHKSB7CgkgICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1
bmMsIGJpdG1hc2ssIHRoaXNBcmcpOwoJICAgICAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBf
Q1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykgewoJICAgICAg
ICByZXN1bHQgPSBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSk7CgkgICAgICB9IGVs
c2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBf
QklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHsKCSAg
ICAgICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0
aWFscyk7CgkgICAgICB9IGVsc2UgewoJICAgICAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBw
bHkodW5kZWZpbmVkLCBuZXdEYXRhKTsKCSAgICAgIH0KCSAgICAgIHZhciBzZXR0ZXIgPSBkYXRh
ID8gYmFzZVNldERhdGEgOiBzZXREYXRhOwoJICAgICAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhz
ZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbklu
YCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXMKCSAgICAgKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0
aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllcwoJICAg
ICAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRl
CgkgICAgICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuCgkgICAg
ICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLgoJICAgICAqIEBwYXJhbSB7
c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLgoJICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC4KCSAg
ICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLgoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBr
ZXksIG9iamVjdCkgewoJICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHwKCSAgICAg
ICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5j
YWxsKG9iamVjdCwga2V5KSkpIHsKCSAgICAgICAgcmV0dXJuIHNyY1ZhbHVlOwoJICAgICAgfQoJ
ICAgICAgcmV0dXJuIG9ialZhbHVlOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVXNlZCBieSBg
Xy5kZWZhdWx0c0RlZXBgIHRvIGN1c3RvbWl6ZSBpdHMgYF8ubWVyZ2VgIHVzZSB0byBtZXJnZSBz
b3VyY2UKCSAgICAgKiBvYmplY3RzIGludG8gZGVzdGluYXRpb24gb2JqZWN0cyB0aGF0IGFyZSBw
YXNzZWQgdGhydS4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSBv
YmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuCgkgICAgICogQHBhcmFtIHsqfSBzcmNWYWx1
ZSBUaGUgc291cmNlIHZhbHVlLgoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBv
ZiB0aGUgcHJvcGVydHkgdG8gbWVyZ2UuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBU
aGUgcGFyZW50IG9iamVjdCBvZiBgb2JqVmFsdWVgLgoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBz
b3VyY2UgVGhlIHBhcmVudCBvYmplY3Qgb2YgYHNyY1ZhbHVlYC4KCSAgICAgKiBAcGFyYW0ge09i
amVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1l
cmdlZAoJICAgICAqICBjb3VudGVycGFydHMuCgkgICAgICogQHJldHVybnMgeyp9IFJldHVybnMg
dGhlIHZhbHVlIHRvIGFzc2lnbi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBjdXN0b21EZWZhdWx0
c01lcmdlKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spIHsK
CSAgICAgIGlmIChpc09iamVjdChvYmpWYWx1ZSkgJiYgaXNPYmplY3Qoc3JjVmFsdWUpKSB7Cgkg
ICAgICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGli
bGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLgoJICAgICAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG9i
alZhbHVlKTsKCSAgICAgICAgYmFzZU1lcmdlKG9ialZhbHVlLCBzcmNWYWx1ZSwgdW5kZWZpbmVk
LCBjdXN0b21EZWZhdWx0c01lcmdlLCBzdGFjayk7CgkgICAgICAgIHN0YWNrWydkZWxldGUnXShz
cmNWYWx1ZSk7CgkgICAgICB9CgkgICAgICByZXR1cm4gb2JqVmFsdWU7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBVc2VkIGJ5IGBfLm9taXRgIHRvIGN1c3RvbWl6ZSBpdHMgYF8uY2xvbmVEZWVw
YCB1c2UgdG8gb25seSBjbG9uZSBwbGFpbgoJICAgICAqIG9iamVjdHMuCgkgICAgICoKCSAgICAg
KiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3Qu
CgkgICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBp
bnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB1bmNsb25lZCB2YWx1ZSBv
ciBgdW5kZWZpbmVkYCB0byBkZWZlciBjbG9uaW5nIHRvIGBfLmNsb25lRGVlcGAuCgkgICAgICov
CgkgICAgZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7CgkgICAgICByZXR1cm4gaXNQ
bGFpbk9iamVjdCh2YWx1ZSkgPyB1bmRlZmluZWQgOiB2YWx1ZTsKCSAgICB9CgoJICAgIC8qKgoJ
ICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJy
YXlzIHdpdGggc3VwcG9ydCBmb3IKCSAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuCgkg
ICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBh
cnJheSB0byBjb21wYXJlLgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBh
cnJheSB0byBjb21wYXJlLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRt
YXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLgoJICAgICAqIEBw
YXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21w
YXJpc29ucy4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9u
IHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuCgkgICAgICogQHBhcmFtIHtPYmpl
Y3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLgoJ
ICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFy
ZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gZXF1YWxB
cnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNr
KSB7CgkgICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFH
LAoJICAgICAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKCSAgICAgICAgICBvdGhMZW5n
dGggPSBvdGhlci5sZW5ndGg7CgoJICAgICAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYg
IShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkgewoJICAgICAgICByZXR1cm4g
ZmFsc2U7CgkgICAgICB9CgkgICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwu
CgkgICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7CgkgICAgICBpZiAoc3RhY2tl
ZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7CgkgICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVy
OwoJICAgICAgfQoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZSwKCSAgICAgICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/
IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDsKCgkgICAgICBzdGFjay5zZXQoYXJyYXksIG90aGVy
KTsKCSAgICAgIHN0YWNrLnNldChvdGhlciwgYXJyYXkpOwoKCSAgICAgIC8vIElnbm9yZSBub24t
aW5kZXggcHJvcGVydGllcy4KCSAgICAgIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7Cgkg
ICAgICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSwKCSAgICAgICAgICAgIG90aFZhbHVl
ID0gb3RoZXJbaW5kZXhdOwoKCSAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHsKCSAgICAgICAgICB2
YXIgY29tcGFyZWQgPSBpc1BhcnRpYWwKCSAgICAgICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1
ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKQoJICAgICAgICAgICAgOiBj
dXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2sp
OwoJICAgICAgICB9CgkgICAgICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7CgkgICAg
ICAgICAgaWYgKGNvbXBhcmVkKSB7CgkgICAgICAgICAgICBjb250aW51ZTsKCSAgICAgICAgICB9
CgkgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CgkgICAgICAgICAgYnJlYWs7CgkgICAgICAgIH0K
CSAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNh
bGwgc3RhY2sgbGltaXRzKS4KCSAgICAgICAgaWYgKHNlZW4pIHsKCSAgICAgICAgICBpZiAoIWFy
cmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7CgkgICAgICAgICAg
ICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiYKCSAgICAgICAgICAgICAgICAg
ICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVl
LCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7CgkgICAgICAgICAgICAgICAgICByZXR1
cm4gc2Vlbi5wdXNoKG90aEluZGV4KTsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAg
IH0pKSB7CgkgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKCSAgICAgICAgICAgIGJyZWFrOwoJ
ICAgICAgICAgIH0KCSAgICAgICAgfSBlbHNlIGlmICghKAoJICAgICAgICAgICAgICBhcnJWYWx1
ZSA9PT0gb3RoVmFsdWUgfHwKCSAgICAgICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90
aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykKCSAgICAgICAgICAgICkpIHsKCSAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKCSAgICAgICAgICBicmVhazsKCSAgICAgICAgfQoJICAg
ICAgfQoJICAgICAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTsKCSAgICAgIHN0YWNrWydkZWxldGUn
XShvdGhlcik7CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
QSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcg
b2JqZWN0cyBvZgoJICAgICAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuCgkgICAgICoKCSAgICAg
KiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMg
d2l0aCB0YWdzIG9mCgkgICAgICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJg
LCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLgoJICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuCgkgICAgICog
QHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBj
b21wYXJlLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdz
LiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLgoJICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy4K
CSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVy
bWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNr
IFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy4KCSAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2
YWxlbnQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBlcXVhbEJ5VGFnKG9i
amVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykg
ewoJICAgICAgc3dpdGNoICh0YWcpIHsKCSAgICAgICAgY2FzZSBkYXRhVmlld1RhZzoKCSAgICAg
ICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8CgkgICAg
ICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkgewoJICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAgICAgICAgIH0KCSAgICAgICAgICBvYmplY3QgPSBv
YmplY3QuYnVmZmVyOwoJICAgICAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyOwoKCSAgICAgICAg
Y2FzZSBhcnJheUJ1ZmZlclRhZzoKCSAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9
IG90aGVyLmJ5dGVMZW5ndGgpIHx8CgkgICAgICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4
QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkgewoJICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwoJICAgICAgICAgIH0KCSAgICAgICAgICByZXR1cm4gdHJ1ZTsKCgkgICAgICAg
IGNhc2UgYm9vbFRhZzoKCSAgICAgICAgY2FzZSBkYXRlVGFnOgoJICAgICAgICBjYXNlIG51bWJl
clRhZzoKCSAgICAgICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0
ZXMgdG8gbWlsbGlzZWNvbmRzLgoJICAgICAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJj
ZWQgdG8gYE5hTmAuCgkgICAgICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7CgoJICAg
ICAgICBjYXNlIGVycm9yVGFnOgoJICAgICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhl
ci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7CgoJICAgICAgICBjYXNl
IHJlZ2V4cFRhZzoKCSAgICAgICAgY2FzZSBzdHJpbmdUYWc6CgkgICAgICAgICAgLy8gQ29lcmNl
IHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2Jq
ZWN0cywKCSAgICAgICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5h
dGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nCgkg
ICAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy4KCSAgICAgICAgICByZXR1cm4gb2JqZWN0ID09
IChvdGhlciArICcnKTsKCgkgICAgICAgIGNhc2UgbWFwVGFnOgoJICAgICAgICAgIHZhciBjb252
ZXJ0ID0gbWFwVG9BcnJheTsKCgkgICAgICAgIGNhc2Ugc2V0VGFnOgoJICAgICAgICAgIHZhciBp
c1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7CgkgICAgICAgICAgY29u
dmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpOwoKCSAgICAgICAgICBpZiAob2JqZWN0LnNp
emUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7CgkgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CgkgICAgICAgICAgfQoJICAgICAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBl
cXVhbC4KCSAgICAgICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpOwoJICAgICAg
ICAgIGlmIChzdGFja2VkKSB7CgkgICAgICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjsK
CSAgICAgICAgICB9CgkgICAgICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFH
OwoKCSAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxl
IHRvIGNhbGwgc3RhY2sgbGltaXRzKS4KCSAgICAgICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhl
cik7CgkgICAgICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwg
Y29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spOwoJ
ICAgICAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpOwoJICAgICAgICAgIHJldHVybiByZXN1
bHQ7CgoJICAgICAgICBjYXNlIHN5bWJvbFRhZzoKCSAgICAgICAgICBpZiAoc3ltYm9sVmFsdWVP
ZikgewoJICAgICAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5
bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7CgkgICAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0
dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9u
IG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3IKCSAgICAg
KiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLgoJICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuCgkgICAg
ICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlz
RXF1YWxgIGZvciBtb3JlIGRldGFpbHMuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9t
aXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLgoJICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxl
bnRzIG9mIHZhbHVlcy4KCSAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZl
cnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLgoJICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBg
ZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVy
LCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7CgkgICAgICB2YXIgaXNQ
YXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLAoJICAgICAgICAgIG9ialBy
b3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLAoJICAgICAgICAgIG9iakxlbmd0aCA9IG9ialByb3Bz
Lmxlbmd0aCwKCSAgICAgICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLAoJICAgICAg
ICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDsKCgkgICAgICBpZiAob2JqTGVuZ3RoICE9
IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7CgkgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAg
IH0KCSAgICAgIHZhciBpbmRleCA9IG9iakxlbmd0aDsKCSAgICAgIHdoaWxlIChpbmRleC0tKSB7
CgkgICAgICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07CgkgICAgICAgIGlmICghKGlzUGFy
dGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7
CgkgICAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICAvLyBB
c3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuCgkgICAgICB2YXIgc3RhY2tlZCA9IHN0YWNr
LmdldChvYmplY3QpOwoJICAgICAgaWYgKHN0YWNrZWQgJiYgc3RhY2suZ2V0KG90aGVyKSkgewoJ
ICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjsKCSAgICAgIH0KCSAgICAgIHZhciByZXN1
bHQgPSB0cnVlOwoJICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpOwoJICAgICAgc3RhY2su
c2V0KG90aGVyLCBvYmplY3QpOwoKCSAgICAgIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDsKCSAg
ICAgIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7CgkgICAgICAgIGtleSA9IG9ialByb3Bz
W2luZGV4XTsKCSAgICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sCgkgICAgICAgICAg
ICBvdGhWYWx1ZSA9IG90aGVyW2tleV07CgoJICAgICAgICBpZiAoY3VzdG9taXplcikgewoJICAg
ICAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbAoJICAgICAgICAgICAgPyBjdXN0b21pemVy
KG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaykKCSAgICAgICAg
ICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwg
c3RhY2spOwoJICAgICAgICB9CgkgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0
cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLgoJICAgICAgICBpZiAoIShjb21w
YXJlZCA9PT0gdW5kZWZpbmVkCgkgICAgICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1
ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBz
dGFjaykpCgkgICAgICAgICAgICAgIDogY29tcGFyZWQKCSAgICAgICAgICAgICkpIHsKCSAgICAg
ICAgICByZXN1bHQgPSBmYWxzZTsKCSAgICAgICAgICBicmVhazsKCSAgICAgICAgfQoJICAgICAg
ICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7CgkgICAgICB9
CgkgICAgICBpZiAocmVzdWx0ICYmICFza2lwQ3RvcikgewoJICAgICAgICB2YXIgb2JqQ3RvciA9
IG9iamVjdC5jb25zdHJ1Y3RvciwKCSAgICAgICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1
Y3RvcjsKCgkgICAgICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlm
ZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLgoJICAgICAgICBpZiAob2JqQ3RvciAh
PSBvdGhDdG9yICYmCgkgICAgICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2Nv
bnN0cnVjdG9yJyBpbiBvdGhlcikgJiYKCSAgICAgICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0g
J2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJgoJICAgICAgICAgICAg
ICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhD
dG9yKSkgewoJICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwoJICAgICAgICB9CgkgICAgICB9Cgkg
ICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTsKCSAgICAgIHN0YWNrWydkZWxldGUnXShvdGhl
cik7CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQSBzcGVj
aWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJy
YXkuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1
bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uCgkgICAgICogQHJl
dHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykgewoJICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJS
ZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5h
bWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAg
ICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICog
QHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQg
c3ltYm9scy4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkgewoJICAg
ICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7CgkgICAg
fQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVk
IGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kCgkgICAgICogc3ltYm9scyBvZiBgb2JqZWN0
YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVj
dCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0
aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuCgkgICAgICovCgkgICAgZnVu
Y3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkgewoJICAgICAgcmV0dXJuIGJhc2VHZXRBbGxLZXlz
KG9iamVjdCwga2V5c0luLCBnZXRTeW1ib2xzSW4pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
R2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS4KCSAgICAgKiBA
cmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC4KCSAgICAgKi8KCSAg
ICB2YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHsKCSAgICAg
IHJldHVybiBtZXRhTWFwLmdldChmdW5jKTsKCSAgICB9OwoKCSAgICAvKioKCSAgICAgKiBHZXRz
IHRoZSBuYW1lIG9mIGBmdW5jYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuCgkgICAgICogQHJldHVy
bnMge3N0cmluZ30gUmV0dXJucyB0aGUgZnVuY3Rpb24gbmFtZS4KCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBnZXRGdW5jTmFtZShmdW5jKSB7CgkgICAgICB2YXIgcmVzdWx0ID0gKGZ1bmMubmFtZSAr
ICcnKSwKCSAgICAgICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLAoJICAgICAgICAgIGxl
bmd0aCA9IGhhc093blByb3BlcnR5LmNhbGwocmVhbE5hbWVzLCByZXN1bHQpID8gYXJyYXkubGVu
Z3RoIDogMDsKCgkgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKCSAgICAgICAgdmFyIGRhdGEgPSBh
cnJheVtsZW5ndGhdLAoJICAgICAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jOwoJICAgICAg
ICBpZiAob3RoZXJGdW5jID09IG51bGwgfHwgb3RoZXJGdW5jID09IGZ1bmMpIHsKCSAgICAgICAg
ICByZXR1cm4gZGF0YS5uYW1lOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICByZXR1cm4gcmVz
dWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xk
ZXIgdmFsdWUgZm9yIGBmdW5jYC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC4KCSAgICAgKiBAcmV0
dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuCgkgICAgICovCgkgICAgZnVu
Y3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHsKCSAgICAgIHZhciBvYmplY3QgPSBoYXNPd25Qcm9wZXJ0
eS5jYWxsKGxvZGFzaCwgJ3BsYWNlaG9sZGVyJykgPyBsb2Rhc2ggOiBmdW5jOwoJICAgICAgcmV0
dXJuIG9iamVjdC5wbGFjZWhvbGRlcjsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgdGhl
IGFwcHJvcHJpYXRlICJpdGVyYXRlZSIgZnVuY3Rpb24uIElmIGBfLml0ZXJhdGVlYCBpcyBjdXN0
b21pemVkLAoJICAgICAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VzdG9tIG1ldGhvZCwg
b3RoZXJ3aXNlIGl0IHJldHVybnMgYGJhc2VJdGVyYXRlZWAuCgkgICAgICogSWYgYXJndW1lbnRz
IGFyZSBwcm92aWRlZCwgdGhlIGNob3NlbiBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhlbSBh
bmQKCSAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4g
aXRlcmF0ZWUuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIHRo
ZSBjcmVhdGVkIGl0ZXJhdGVlLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0
aGUgY2hvc2VuIGZ1bmN0aW9uIG9yIGl0cyByZXN1bHQuCgkgICAgICovCgkgICAgZnVuY3Rpb24g
Z2V0SXRlcmF0ZWUoKSB7CgkgICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoLml0ZXJhdGVlIHx8IGl0
ZXJhdGVlOwoJICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBpdGVyYXRlZSA/IGJhc2VJdGVyYXRl
ZSA6IHJlc3VsdDsKCSAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gcmVzdWx0KGFyZ3Vt
ZW50c1swXSwgYXJndW1lbnRzWzFdKSA6IHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAg
KiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtz
dHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJu
cyB0aGUgbWFwIGRhdGEuCgkgICAgICovCgkgICAgZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtl
eSkgewoJICAgICAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187CgkgICAgICByZXR1cm4gaXNLZXlh
YmxlKGtleSkKCSAgICAgICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5n
JyA6ICdoYXNoJ10KCSAgICAgICAgOiBkYXRhLm1hcDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBv
YmplY3RgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0g
b2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1
cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdl
dE1hdGNoRGF0YShvYmplY3QpIHsKCSAgICAgIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksCgkg
ICAgICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsKCgkgICAgICB3aGlsZSAobGVuZ3RoLS0p
IHsKCSAgICAgICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLAoJICAgICAgICAgICAgdmFsdWUg
PSBvYmplY3Rba2V5XTsKCgkgICAgICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlz
U3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5
YCBvZiBgb2JqZWN0YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtP
YmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC4KCSAgICAgKiBAcmV0dXJucyB7Kn0g
UmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7CgkgICAgICB2YXIg
dmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7CgkgICAgICByZXR1cm4gYmFzZUlzTmF0aXZl
KHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQSBz
cGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wu
dG9TdHJpbmdUYWdgIHZhbHVlcy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMge3N0cmlu
Z30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuCgkgICAgICovCgkgICAgZnVuY3Rpb24g
Z2V0UmF3VGFnKHZhbHVlKSB7CgkgICAgICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxs
KHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksCgkgICAgICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJp
bmdUYWddOwoKCSAgICAgIHRyeSB7CgkgICAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVu
ZGVmaW5lZDsKCSAgICAgICAgdmFyIHVubWFza2VkID0gdHJ1ZTsKCSAgICAgIH0gY2F0Y2ggKGUp
IHt9CgoJICAgICAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUp
OwoJICAgICAgaWYgKHVubWFza2VkKSB7CgkgICAgICAgIGlmIChpc093bikgewoJICAgICAgICAg
IHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZzsKCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAg
ICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddOwoJICAgICAgICB9CgkgICAgICB9CgkgICAg
ICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhbiBhcnJh
eSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC4KCSAgICAgKgoJICAg
ICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRv
IHF1ZXJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3lt
Ym9scy4KCSAgICAgKi8KCSAgICB2YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8g
c3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7CgkgICAgICBpZiAob2JqZWN0ID09IG51bGwp
IHsKCSAgICAgICAgcmV0dXJuIFtdOwoJICAgICAgfQoJICAgICAgb2JqZWN0ID0gT2JqZWN0KG9i
amVjdCk7CgkgICAgICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3Qp
LCBmdW5jdGlvbihzeW1ib2wpIHsKCSAgICAgICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxl
LmNhbGwob2JqZWN0LCBzeW1ib2wpOwoJICAgICAgfSk7CgkgICAgfTsKCgkgICAgLyoqCgkgICAg
ICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBz
eW1ib2xzIG9mIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFy
YW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMg
e0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLgoJICAgICAqLwoJICAgIHZhciBn
ZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9i
amVjdCkgewoJICAgICAgdmFyIHJlc3VsdCA9IFtdOwoJICAgICAgd2hpbGUgKG9iamVjdCkgewoJ
ICAgICAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpOwoJICAgICAgICBv
YmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTsKCSAgICAgIH0KCSAgICAgIHJldHVybiByZXN1
bHQ7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBg
dmFsdWVgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBxdWVyeS4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRo
ZSBgdG9TdHJpbmdUYWdgLgoJICAgICAqLwoJICAgIHZhciBnZXRUYWcgPSBiYXNlR2V0VGFnOwoK
CSAgICAvLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFw
cyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuCgkgICAgaWYgKChEYXRhVmll
dyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3
VGFnKSB8fAoJICAgICAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8Cgkg
ICAgICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRh
ZykgfHwKCSAgICAgICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fAoJICAg
ICAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7Cgkg
ICAgICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkgewoJICAgICAgICB2YXIgcmVzdWx0ID0gYmFz
ZUdldFRhZyh2YWx1ZSksCgkgICAgICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/
IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLAoJICAgICAgICAgICAgY3RvclN0cmluZyA9
IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnOwoKCSAgICAgICAgaWYgKGN0b3JTdHJpbmcpIHsK
CSAgICAgICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHsKCSAgICAgICAgICAgIGNhc2UgZGF0YVZp
ZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7CgkgICAgICAgICAgICBjYXNlIG1hcEN0
b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7CgkgICAgICAgICAgICBjYXNlIHByb21pc2VDdG9yU3Ry
aW5nOiByZXR1cm4gcHJvbWlzZVRhZzsKCSAgICAgICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzog
cmV0dXJuIHNldFRhZzsKCSAgICAgICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVy
biB3ZWFrTWFwVGFnOwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gcmVz
dWx0OwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgdGhlIHZpZXcsIGFw
cGx5aW5nIGFueSBgdHJhbnNmb3Jtc2AgdG8gdGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9u
cy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0
IFRoZSBzdGFydCBvZiB0aGUgdmlldy4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBl
bmQgb2YgdGhlIHZpZXcuCgkgICAgICogQHBhcmFtIHtBcnJheX0gdHJhbnNmb3JtcyBUaGUgdHJh
bnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSB2aWV3LgoJICAgICAqIEByZXR1cm5zIHtPYmpl
Y3R9IFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzdGFydGAgYW5kIGBlbmRgCgkg
ICAgICogIHBvc2l0aW9ucyBvZiB0aGUgdmlldy4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBnZXRW
aWV3KHN0YXJ0LCBlbmQsIHRyYW5zZm9ybXMpIHsKCSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAg
ICAgICAgIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoOwoKCSAgICAgIHdoaWxlICgrK2luZGV4
IDwgbGVuZ3RoKSB7CgkgICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sCgkgICAg
ICAgICAgICBzaXplID0gZGF0YS5zaXplOwoKCSAgICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHsK
CSAgICAgICAgICBjYXNlICdkcm9wJzogICAgICBzdGFydCArPSBzaXplOyBicmVhazsKCSAgICAg
ICAgICBjYXNlICdkcm9wUmlnaHQnOiBlbmQgLT0gc2l6ZTsgYnJlYWs7CgkgICAgICAgICAgY2Fz
ZSAndGFrZSc6ICAgICAgZW5kID0gbmF0aXZlTWluKGVuZCwgc3RhcnQgKyBzaXplKTsgYnJlYWs7
CgkgICAgICAgICAgY2FzZSAndGFrZVJpZ2h0Jzogc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQsIGVu
ZCAtIHNpemUpOyBicmVhazsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHsgJ3N0
YXJ0Jzogc3RhcnQsICdlbmQnOiBlbmQgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEV4dHJh
Y3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuCgkgICAg
ICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNv
dXJjZSB0byBpbnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd3Jh
cHBlciBkZXRhaWxzLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJj
ZSkgewoJICAgICAgdmFyIG1hdGNoID0gc291cmNlLm1hdGNoKHJlV3JhcERldGFpbHMpOwoJICAg
ICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0uc3BsaXQocmVTcGxpdERldGFpbHMpIDogW107Cgkg
ICAgfQoKCSAgICAvKioKCSAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0
YC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVj
dCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRo
IFRoZSBwYXRoIHRvIGNoZWNrLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhl
IGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59
IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykgewoJICAgICAgcGF0
aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7CgoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAg
ICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsCgkgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CgoJ
ICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIGtleSA9IHRvS2V5
KHBhdGhbaW5kZXhdKTsKCSAgICAgICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYg
aGFzRnVuYyhvYmplY3QsIGtleSkpKSB7CgkgICAgICAgICAgYnJlYWs7CgkgICAgICAgIH0KCSAg
ICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07CgkgICAgICB9CgkgICAgICBpZiAocmVzdWx0IHx8
ICsraW5kZXggIT0gbGVuZ3RoKSB7CgkgICAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgICB9Cgkg
ICAgICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoOwoJICAgICAg
cmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0
aCkgJiYKCSAgICAgICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLgoJICAg
ICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJy
YXkgdG8gY2xvbmUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFs
aXplZCBjbG9uZS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkg
ewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKCSAgICAgICAgICByZXN1bHQgPSBu
ZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTsKCgkgICAgICAvLyBBZGQgcHJvcGVydGllcyBh
c3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLgoJICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJy
YXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4Jykp
IHsKCSAgICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7CgkgICAgICAgIHJlc3VsdC5p
bnB1dCA9IGFycmF5LmlucHV0OwoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS4KCSAgICAgKgoJ
ICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0
IHRvIGNsb25lLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxp
emVkIGNsb25lLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3Qp
IHsKCSAgICAgIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24n
ICYmICFpc1Byb3RvdHlwZShvYmplY3QpKQoJICAgICAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90
eXBlKG9iamVjdCkpCgkgICAgICAgIDoge307CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBJbml0
aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuCgkgICAg
ICoKCSAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcg
dmFsdWVzIHdpdGggdGFncyBvZgoJICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBg
TWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuCgkgICAgICoKCSAg
ICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0
byBjbG9uZS4KCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9m
IHRoZSBvYmplY3QgdG8gY2xvbmUuCgkgICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBT
cGVjaWZ5IGEgZGVlcCBjbG9uZS4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRo
ZSBpbml0aWFsaXplZCBjbG9uZS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpbml0Q2xvbmVCeVRh
ZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7CgkgICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1
Y3RvcjsKCSAgICAgIHN3aXRjaCAodGFnKSB7CgkgICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6
CgkgICAgICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTsKCgkgICAgICAgIGNh
c2UgYm9vbFRhZzoKCSAgICAgICAgY2FzZSBkYXRlVGFnOgoJICAgICAgICAgIHJldHVybiBuZXcg
Q3Rvcigrb2JqZWN0KTsKCgkgICAgICAgIGNhc2UgZGF0YVZpZXdUYWc6CgkgICAgICAgICAgcmV0
dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApOwoKCSAgICAgICAgY2FzZSBmbG9hdDMy
VGFnOiBjYXNlIGZsb2F0NjRUYWc6CgkgICAgICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRh
ZzogY2FzZSBpbnQzMlRhZzoKCSAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1w
ZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzoKCSAgICAgICAgICByZXR1cm4g
Y2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTsKCgkgICAgICAgIGNhc2UgbWFwVGFnOgoJ
ICAgICAgICAgIHJldHVybiBuZXcgQ3RvcjsKCgkgICAgICAgIGNhc2UgbnVtYmVyVGFnOgoJICAg
ICAgICBjYXNlIHN0cmluZ1RhZzoKCSAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTsK
CgkgICAgICAgIGNhc2UgcmVnZXhwVGFnOgoJICAgICAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChv
YmplY3QpOwoKCSAgICAgICAgY2FzZSBzZXRUYWc6CgkgICAgICAgICAgcmV0dXJuIG5ldyBDdG9y
OwoKCSAgICAgICAgY2FzZSBzeW1ib2xUYWc6CgkgICAgICAgICAgcmV0dXJuIGNsb25lU3ltYm9s
KG9iamVjdCk7CgkgICAgICB9CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBJbnNlcnRzIHdyYXBw
ZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5
LgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNl
IFRoZSBzb3VyY2UgdG8gbW9kaWZ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBU
aGUgZGV0YWlscyB0byBpbnNlcnQuCgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0
aGUgbW9kaWZpZWQgc291cmNlLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGluc2VydFdyYXBEZXRh
aWxzKHNvdXJjZSwgZGV0YWlscykgewoJICAgICAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3Ro
OwoJICAgICAgaWYgKCFsZW5ndGgpIHsKCSAgICAgICAgcmV0dXJuIHNvdXJjZTsKCSAgICAgIH0K
CSAgICAgIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxOwoJICAgICAgZGV0YWlsc1tsYXN0SW5k
ZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdOwoJICAg
ICAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7CgkgICAg
ICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcbi8qIFt3cmFwcGVkIHdp
dGggJyArIGRldGFpbHMgKyAnXSAqL1xuJyk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDaGVj
a3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJh
eS4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUg
dmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVg
IGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7CgkgICAgICByZXR1cm4gaXNBcnJheSh2YWx1
ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8CgkgICAgICAgICEhKHNwcmVhZGFibGVTeW1ib2wg
JiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LgoJICAg
ICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0
byBjaGVjay4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VS
XSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguCgkgICAgICogQHJldHVybnMge2Jv
b2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBg
ZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkgewoJ
ICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CgkgICAgICBsZW5ndGggPSBsZW5ndGggPT0g
bnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7CgoJICAgICAgcmV0dXJuICEhbGVuZ3Ro
ICYmCgkgICAgICAgICh0eXBlID09ICdudW1iZXInIHx8CgkgICAgICAgICAgKHR5cGUgIT0gJ3N5
bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJgoJICAgICAgICAgICAgKHZhbHVlID4g
LTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0
ZWUgY2FsbC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1
ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LgoJICAgICAqIEBwYXJhbSB7
Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuCgkg
ICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJn
dW1lbnQuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBh
cmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCwKCSAgICAgKiAgZWxzZSBgZmFsc2Vg
LgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2Jq
ZWN0KSB7CgkgICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHsKCSAgICAgICAgcmV0dXJuIGZh
bHNlOwoJICAgICAgfQoJICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7CgkgICAgICBpZiAo
dHlwZSA9PSAnbnVtYmVyJwoJICAgICAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBp
c0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSkKCSAgICAgICAgICAgIDogKHR5cGUgPT0gJ3N0
cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KQoJICAgICAgICAgICkgewoJICAgICAgICByZXR1cm4g
ZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpOwoJICAgICAgfQoJICAgICAgcmV0dXJuIGZhbHNlOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBu
YW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcGFyYW0g
e09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLgoJICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkg
bmFtZSwgZWxzZSBgZmFsc2VgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBv
YmplY3QpIHsKCSAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewoJICAgICAgICByZXR1cm4gZmFs
c2U7CgkgICAgICB9CgkgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKCSAgICAgIGlmICh0
eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicg
fHwKCSAgICAgICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkgewoJICAgICAg
ICByZXR1cm4gdHJ1ZTsKCSAgICAgIH0KCSAgICAgIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3Qo
dmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHwKCSAgICAgICAgKG9iamVjdCAh
PSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVj
dCBrZXkuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUg
VGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0
cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7CgkgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1
ZTsKCSAgICAgIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8
IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpCgkgICAgICAgID8gKHZhbHVl
ICE9PSAnX19wcm90b19fJykKCSAgICAgICAgOiAodmFsdWUgPT09IG51bGwpOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LgoJ
ICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRo
ZSBmdW5jdGlvbiB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBg
dHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsCgkgICAgICogIGVsc2UgYGZh
bHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHsKCSAgICAgIHZh
ciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLAoJICAgICAgICAgIG90aGVyID0gbG9kYXNo
W2Z1bmNOYW1lXTsKCgkgICAgICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShm
dW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7CgkgICAgICAgIHJldHVybiBmYWxz
ZTsKCSAgICAgIH0KCSAgICAgIGlmIChmdW5jID09PSBvdGhlcikgewoJICAgICAgICByZXR1cm4g
dHJ1ZTsKCSAgICAgIH0KCSAgICAgIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7CgkgICAgICBy
ZXR1cm4gISFkYXRhICYmIGZ1bmMgPT09IGRhdGFbMF07CgkgICAgfQoKCSAgICAvKioKCSAgICAg
KiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC4KCSAgICAgKgoJICAgICAq
IEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8g
Y2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5j
YCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc01hc2tl
ZChmdW5jKSB7CgkgICAgICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1
bmMpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGBmdW5jYCBpcyBjYXBhYmxl
IG9mIGJlaW5nIG1hc2tlZC4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFt
IHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59
IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrYWJsZSwgZWxzZSBgZmFsc2VgLgoJICAg
ICAqLwoJICAgIHZhciBpc01hc2thYmxlID0gY29yZUpzRGF0YSA/IGlzRnVuY3Rpb24gOiBzdHVi
RmFsc2U7CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHBy
b3RvdHlwZSBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBS
ZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHsKCSAgICAgIHZhciBDdG9y
ID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsCgkgICAgICAgICAgcHJvdG8gPSAodHlwZW9m
IEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87CgoJ
ICAgICAgcmV0dXJuIHZhbHVlID09PSBwcm90bzsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENo
ZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNv
bnMsIGkuZS4gYD09PWAuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBS
ZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3QKCSAgICAgKiAg
ZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC4KCSAgICAgKi8KCSAgICBmdW5jdGlv
biBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHsKCSAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFs
dWUgJiYgIWlzT2JqZWN0KHZhbHVlKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEEgc3BlY2lh
bGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0
YWJsZQoJICAgICAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAu
CgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhl
IGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LgoJICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUg
VGhlIHZhbHVlIHRvIG1hdGNoLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0
aGUgbmV3IHNwZWMgZnVuY3Rpb24uCgkgICAgICovCgkgICAgZnVuY3Rpb24gbWF0Y2hlc1N0cmlj
dENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVj
dCkgewoJICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKCSAgICAgICAgICByZXR1cm4gZmFs
c2U7CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAm
JgoJICAgICAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9i
amVjdCkpKTsKCSAgICAgIH07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBBIHNwZWNpYWxpemVk
IHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlv
bidzCgkgICAgICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC4KCSAg
ICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUg
ZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLgoJICAgICAqIEByZXR1cm5zIHtG
dW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLgoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykgewoJICAgICAgdmFyIHJlc3VsdCA9IG1lbW9p
emUoZnVuYywgZnVuY3Rpb24oa2V5KSB7CgkgICAgICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhf
TUVNT0laRV9TSVpFKSB7CgkgICAgICAgICAgY2FjaGUuY2xlYXIoKTsKCSAgICAgICAgfQoJICAg
ICAgICByZXR1cm4ga2V5OwoJICAgICAgfSk7CgoJICAgICAgdmFyIGNhY2hlID0gcmVzdWx0LmNh
Y2hlOwoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIE1lcmdl
cyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuCgkgICAgICoK
CSAgICAgKiBNZXJnaW5nIG1ldGFkYXRhIHJlZHVjZXMgdGhlIG51bWJlciBvZiB3cmFwcGVycyB1
c2VkIHRvIGludm9rZSBhIGZ1bmN0aW9uLgoJICAgICAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVz
ZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgCgkgICAg
ICogbWF5IGJlIGFwcGxpZWQgcmVnYXJkbGVzcyBvZiBleGVjdXRpb24gb3JkZXIuIE1ldGhvZHMg
bGlrZSBgXy5hcnlgIGFuZAoJICAgICAqIGBfLnJlYXJnYCBtb2RpZnkgZnVuY3Rpb24gYXJndW1l
bnRzLCBtYWtpbmcgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlCgkgICAgICogZXhlY3V0ZWQg
aW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3
ZSBtYWtlCgkgICAgICogYW4gZXhjZXB0aW9uIGZvciBhIHNhZmUgY29tYmluZWQgY2FzZSB3aGVy
ZSBjdXJyaWVkIGZ1bmN0aW9ucyBoYXZlIGBfLmFyeWAKCSAgICAgKiBhbmQgb3IgYF8ucmVhcmdg
IGFwcGxpZWQuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7QXJyYXl9
IGRhdGEgVGhlIGRlc3RpbmF0aW9uIG1ldGFkYXRhLgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IHNv
dXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJu
cyBgZGF0YWAuCgkgICAgICovCgkgICAgZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkg
ewoJICAgICAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLAoJICAgICAgICAgIHNyY0JpdG1hc2sgPSBz
b3VyY2VbMV0sCgkgICAgICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLAoJ
ICAgICAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBf
QklORF9LRVlfRkxBRyB8IFdSQVBfQVJZX0ZMQUcpOwoKCSAgICAgIHZhciBpc0NvbWJvID0KCSAg
ICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBf
Q1VSUllfRkxBRykpIHx8CgkgICAgICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAm
JiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3Vy
Y2VbOF0pKSB8fAoJICAgICAgICAoKHNyY0JpdG1hc2sgPT0gKFdSQVBfQVJZX0ZMQUcgfCBXUkFQ
X1JFQVJHX0ZMQUcpKSAmJiAoc291cmNlWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pICYmIChiaXRt
YXNrID09IFdSQVBfQ1VSUllfRkxBRykpOwoKCSAgICAgIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRh
dGEgY2FuJ3QgYmUgbWVyZ2VkLgoJICAgICAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHsK
CSAgICAgICAgcmV0dXJuIGRhdGE7CgkgICAgICB9CgkgICAgICAvLyBVc2Ugc291cmNlIGB0aGlz
QXJnYCBpZiBhdmFpbGFibGUuCgkgICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFH
KSB7CgkgICAgICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07CgkgICAgICAgIC8vIFNldCB3aGVuIGN1
cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uCgkgICAgICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAm
IFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRzsKCSAgICAgIH0KCSAg
ICAgIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuCgkgICAgICB2YXIgdmFsdWUgPSBzb3Vy
Y2VbM107CgkgICAgICBpZiAodmFsdWUpIHsKCSAgICAgICAgdmFyIHBhcnRpYWxzID0gZGF0YVsz
XTsKCSAgICAgICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZh
bHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7CgkgICAgICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJl
cGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTsKCSAgICAgIH0K
CSAgICAgIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuCgkgICAgICB2YWx1ZSA9
IHNvdXJjZVs1XTsKCSAgICAgIGlmICh2YWx1ZSkgewoJICAgICAgICBwYXJ0aWFscyA9IGRhdGFb
NV07CgkgICAgICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlh
bHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7CgkgICAgICAgIGRhdGFbNl0gPSBwYXJ0aWFs
cyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTsKCSAg
ICAgIH0KCSAgICAgIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLgoJICAgICAg
dmFsdWUgPSBzb3VyY2VbN107CgkgICAgICBpZiAodmFsdWUpIHsKCSAgICAgICAgZGF0YVs3XSA9
IHZhbHVlOwoJICAgICAgfQoJICAgICAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxs
ZXIuCgkgICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHsKCSAgICAgICAgZGF0
YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBz
b3VyY2VbOF0pOwoJICAgICAgfQoJICAgICAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBp
cyBub3QgcHJvdmlkZWQuCgkgICAgICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7CgkgICAgICAgIGRh
dGFbOV0gPSBzb3VyY2VbOV07CgkgICAgICB9CgkgICAgICAvLyBVc2Ugc291cmNlIGBmdW5jYCBh
bmQgbWVyZ2UgYml0bWFza3MuCgkgICAgICBkYXRhWzBdID0gc291cmNlWzBdOwoJICAgICAgZGF0
YVsxXSA9IG5ld0JpdG1hc2s7CgoJICAgICAgcmV0dXJuIGRhdGE7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UKCSAgICAgKiBbYE9iamVjdC5rZXlzYF0oaHR0
cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMp
CgkgICAgICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJv
cGVydGllcy4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtPYmplY3R9
IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0
dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuCgkgICAgICovCgkgICAgZnVuY3Rpb24g
bmF0aXZlS2V5c0luKG9iamVjdCkgewoJICAgICAgdmFyIHJlc3VsdCA9IFtdOwoJICAgICAgaWYg
KG9iamVjdCAhPSBudWxsKSB7CgkgICAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0
KSkgewoJICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7CgkgICAgICAgIH0KCSAgICAgIH0KCSAg
ICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDb252ZXJ0cyBgdmFs
dWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC4KCSAgICAg
KgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8g
Y29udmVydC4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQg
c3RyaW5nLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7Cgkg
ICAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7CgkgICAgfQoKCSAg
ICAvKioKCSAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0
cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFy
YW1ldGVyIHRvLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0g
VGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci4KCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLgoJICAgICAqIEBy
ZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLgoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHsKCSAgICAgIHN0YXJ0
ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0
YXJ0LCAwKTsKCSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKCSAgICAgICAgdmFyIGFyZ3MgPSBh
cmd1bWVudHMsCgkgICAgICAgICAgICBpbmRleCA9IC0xLAoJICAgICAgICAgICAgbGVuZ3RoID0g
bmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLAoJICAgICAgICAgICAgYXJyYXkgPSBB
cnJheShsZW5ndGgpOwoKCSAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAg
ICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdOwoJICAgICAgICB9CgkgICAg
ICAgIGluZGV4ID0gLTE7CgkgICAgICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEp
OwoJICAgICAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7CgkgICAgICAgICAgb3RoZXJBcmdz
W2luZGV4XSA9IGFyZ3NbaW5kZXhdOwoJICAgICAgICB9CgkgICAgICAgIG90aGVyQXJnc1tzdGFy
dF0gPSB0cmFuc2Zvcm0oYXJyYXkpOwoJICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywg
b3RoZXJBcmdzKTsKCSAgICAgIH07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBHZXRzIHRoZSBw
YXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkg
ICAgICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1
ZSBvZi4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLgoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHsKCSAgICAgIHJldHVybiBw
YXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgs
IDAsIC0xKSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBSZW9yZGVyIGBhcnJheWAgYWNjb3Jk
aW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdAoJICAgICAq
IHRoZSBmaXJzdCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIGVs
ZW1lbnQgYXQKCSAgICAgKiB0aGUgc2Vjb25kIGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBzZWNv
bmQgZWxlbWVudCwgYW5kIHNvIG9uLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAgICAgKiBA
cGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVvcmRlci4KCSAgICAgKiBAcGFyYW0g
e0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLgoJICAgICAqIEByZXR1
cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHJlb3Jk
ZXIoYXJyYXksIGluZGV4ZXMpIHsKCSAgICAgIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgs
CgkgICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWluKGluZGV4ZXMubGVuZ3RoLCBhcnJMZW5ndGgp
LAoJICAgICAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTsKCgkgICAgICB3aGlsZSAo
bGVuZ3RoLS0pIHsKCSAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdOwoJICAgICAg
ICBhcnJheVtsZW5ndGhdID0gaXNJbmRleChpbmRleCwgYXJyTGVuZ3RoKSA/IG9sZEFycmF5W2lu
ZGV4XSA6IHVuZGVmaW5lZDsKCSAgICAgIH0KCSAgICAgIHJldHVybiBhcnJheTsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMg
Il9fcHJvdG9fXyIgb3IgImNvbnN0cnVjdG9yIi4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkg
ICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAq
IEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LgoJICAg
ICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS4KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7CgkgICAgICBpZiAoa2V5ID09PSAnY29u
c3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykgewoJICAgICAg
ICByZXR1cm47CgkgICAgICB9CgoJICAgICAgaWYgKGtleSA9PSAnX19wcm90b19fJykgewoJICAg
ICAgICByZXR1cm47CgkgICAgICB9CgoJICAgICAgcmV0dXJuIG9iamVjdFtrZXldOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogU2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLgoJICAgICAqCgkgICAg
ICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tl
ZCBhIGxvdCBpbiBhIHNob3J0CgkgICAgICogcGVyaW9kIG9mIHRpbWUsIGl0IHdpbGwgdHJpcCBp
dHMgYnJlYWtlciBhbmQgdHJhbnNpdGlvbiB0byBhbiBpZGVudGl0eQoJICAgICAqIGZ1bmN0aW9u
IHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZQoJICAgICAqIFtW
OCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFp
bD9pZD0yMDcwKQoJICAgICAqIGZvciBtb3JlIGRldGFpbHMuCgkgICAgICoKCSAgICAgKiBAcHJp
dmF0ZQoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29j
aWF0ZSBtZXRhZGF0YSB3aXRoLgoJICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEu
CgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC4KCSAgICAgKi8KCSAg
ICB2YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTsKCgkgICAgLyoqCgkgICAgICog
QSBzaW1wbGUgd3JhcHBlciBhcm91bmQgdGhlIGdsb2JhbCBbYHNldFRpbWVvdXRgXShodHRwczov
L21kbi5pby9zZXRUaW1lb3V0KS4KCSAgICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBh
cmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuCgkgICAgICogQHBhcmFt
IHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2Nh
dGlvbi4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfE9iamVjdH0gUmV0dXJucyB0aGUgdGltZXIg
aWQgb3IgdGltZW91dCBvYmplY3QuCgkgICAgICovCgkgICAgdmFyIHNldFRpbWVvdXQgPSBjdHhT
ZXRUaW1lb3V0IHx8IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHsKCSAgICAgIHJldHVybiByb290LnNl
dFRpbWVvdXQoZnVuYywgd2FpdCk7CgkgICAgfTsKCgkgICAgLyoqCgkgICAgICogU2V0cyB0aGUg
YHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC4KCSAgICAgKgoJ
ICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rp
b24gdG8gbW9kaWZ5LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3Ry
aW5nYCByZXN1bHQuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC4K
CSAgICAgKi8KCSAgICB2YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcp
OwoKCSAgICAvKioKCSAgICAgKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBl
cmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYAoJICAgICAqIHdpdGggd3JhcHBl
ciBkZXRhaWxzIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgYm9keS4KCSAg
ICAgKgoJICAgICAqIEBwcml2YXRlCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcHBlciBU
aGUgZnVuY3Rpb24gdG8gbW9kaWZ5LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZmVyZW5j
ZSBUaGUgcmVmZXJlbmNlIGZ1bmN0aW9uLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNr
IFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuCgkg
ICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGB3cmFwcGVyYC4KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7
CgkgICAgICB2YXIgc291cmNlID0gKHJlZmVyZW5jZSArICcnKTsKCSAgICAgIHJldHVybiBzZXRU
b1N0cmluZyh3cmFwcGVyLCBpbnNlcnRXcmFwRGV0YWlscyhzb3VyY2UsIHVwZGF0ZVdyYXBEZXRh
aWxzKGdldFdyYXBEZXRhaWxzKHNvdXJjZSksIGJpdG1hc2spKSk7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBg
aWRlbnRpdHlgIGluc3RlYWQKCSAgICAgKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9U
X0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmAKCSAgICAgKiBtaWxsaXNlY29uZHMu
CgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMg
VGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0
dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBz
aG9ydE91dChmdW5jKSB7CgkgICAgICB2YXIgY291bnQgPSAwLAoJICAgICAgICAgIGxhc3RDYWxs
ZWQgPSAwOwoKCSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKCSAgICAgICAgdmFyIHN0YW1wID0g
bmF0aXZlTm93KCksCgkgICAgICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAt
IGxhc3RDYWxsZWQpOwoKCSAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wOwoJICAgICAgICBpZiAo
cmVtYWluaW5nID4gMCkgewoJICAgICAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkgewoJ
ICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTsKCSAgICAgICAgICB9CgkgICAgICAgIH0g
ZWxzZSB7CgkgICAgICAgICAgY291bnQgPSAwOwoJICAgICAgICB9CgkgICAgICAgIHJldHVybiBm
dW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKCSAgICAgIH07CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc2h1ZmZsZWAgd2hpY2ggbXV0
YXRlcyBhbmQgc2V0cyB0aGUgc2l6ZSBvZiBgYXJyYXlgLgoJICAgICAqCgkgICAgICogQHByaXZh
dGUKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS4KCSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gW3NpemU9YXJyYXkubGVuZ3RoXSBUaGUgc2l6ZSBvZiBgYXJy
YXlgLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLgoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIHNodWZmbGVTZWxmKGFycmF5LCBzaXplKSB7CgkgICAgICB2YXIgaW5kZXgg
PSAtMSwKCSAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsCgkgICAgICAgICAgbGFzdElu
ZGV4ID0gbGVuZ3RoIC0gMTsKCgkgICAgICBzaXplID0gc2l6ZSA9PT0gdW5kZWZpbmVkID8gbGVu
Z3RoIDogc2l6ZTsKCSAgICAgIHdoaWxlICgrK2luZGV4IDwgc2l6ZSkgewoJICAgICAgICB2YXIg
cmFuZCA9IGJhc2VSYW5kb20oaW5kZXgsIGxhc3RJbmRleCksCgkgICAgICAgICAgICB2YWx1ZSA9
IGFycmF5W3JhbmRdOwoKCSAgICAgICAgYXJyYXlbcmFuZF0gPSBhcnJheVtpbmRleF07CgkgICAg
ICAgIGFycmF5W2luZGV4XSA9IHZhbHVlOwoJICAgICAgfQoJICAgICAgYXJyYXkubGVuZ3RoID0g
c2l6ZTsKCSAgICAgIHJldHVybiBhcnJheTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENvbnZl
cnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS4KCSAgICAgKgoJICAgICAqIEBw
cml2YXRlCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZl
cnQuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFy
cmF5LgoJICAgICAqLwoJICAgIHZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0
aW9uKHN0cmluZykgewoJICAgICAgdmFyIHJlc3VsdCA9IFtdOwoJICAgICAgaWYgKHN0cmluZy5j
aGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7CgkgICAgICAgIHJlc3VsdC5wdXNoKCcnKTsK
CSAgICAgIH0KCSAgICAgIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNo
LCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHsKCSAgICAgICAgcmVzdWx0LnB1c2gocXVvdGUg
PyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRj
aCkpOwoJICAgICAgfSk7CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0pOwoKCSAgICAvKioK
CSAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0
cmluZyBvciBzeW1ib2wuCgkgICAgICoKCSAgICAgKiBAcHJpdmF0ZQoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuCgkgICAgICogQHJldHVybnMge3N0cmluZ3xz
eW1ib2x9IFJldHVybnMgdGhlIGtleS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiB0b0tleSh2YWx1
ZSkgewoJICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1
ZSkpIHsKCSAgICAgICAgcmV0dXJuIHZhbHVlOwoJICAgICAgfQoJICAgICAgdmFyIHJlc3VsdCA9
ICh2YWx1ZSArICcnKTsKCSAgICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVl
KSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuCgkgICAgICoKCSAgICAgKiBAcHJp
dmF0ZQoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZl
cnQuCgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykgewoJICAgICAgaWYgKGZ1bmMgIT0g
bnVsbCkgewoJICAgICAgICB0cnkgewoJICAgICAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2Fs
bChmdW5jKTsKCSAgICAgICAgfSBjYXRjaCAoZSkge30KCSAgICAgICAgdHJ5IHsKCSAgICAgICAg
ICByZXR1cm4gKGZ1bmMgKyAnJyk7CgkgICAgICAgIH0gY2F0Y2ggKGUpIHt9CgkgICAgICB9Cgkg
ICAgICByZXR1cm4gJyc7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBVcGRhdGVzIHdyYXBwZXIg
YGRldGFpbHNgIGJhc2VkIG9uIGBiaXRtYXNrYCBmbGFncy4KCSAgICAgKgoJICAgICAqIEBwcml2
YXRlCgkgICAgICogQHJldHVybnMge0FycmF5fSBkZXRhaWxzIFRoZSBkZXRhaWxzIHRvIG1vZGlm
eS4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2Vl
IGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0g
UmV0dXJucyBgZGV0YWlsc2AuCgkgICAgICovCgkgICAgZnVuY3Rpb24gdXBkYXRlV3JhcERldGFp
bHMoZGV0YWlscywgYml0bWFzaykgewoJICAgICAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rp
b24ocGFpcikgewoJICAgICAgICB2YXIgdmFsdWUgPSAnXy4nICsgcGFpclswXTsKCSAgICAgICAg
aWYgKChiaXRtYXNrICYgcGFpclsxXSkgJiYgIWFycmF5SW5jbHVkZXMoZGV0YWlscywgdmFsdWUp
KSB7CgkgICAgICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTsKCSAgICAgICAgfQoJICAgICAgfSk7
CgkgICAgICByZXR1cm4gZGV0YWlscy5zb3J0KCk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBD
cmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLgoJICAgICAqCgkgICAgICogQHByaXZhdGUKCSAg
ICAgKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS4KCSAgICAg
KiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci4KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikgewoJICAgICAgaWYgKHdyYXBwZXIg
aW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgewoJICAgICAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgp
OwoJICAgICAgfQoJICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIu
X193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTsKCSAgICAgIHJlc3VsdC5fX2FjdGlvbnNf
XyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTsKCSAgICAgIHJlc3VsdC5fX2luZGV4
X18gID0gd3JhcHBlci5fX2luZGV4X187CgkgICAgICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBw
ZXIuX192YWx1ZXNfXzsKCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVu
dHMgc3BsaXQgaW50byBncm91cHMgdGhlIGxlbmd0aCBvZiBgc2l6ZWAuCgkgICAgICogSWYgYGFy
cmF5YCBjYW4ndCBiZSBzcGxpdCBldmVubHksIHRoZSBmaW5hbCBjaHVuayB3aWxsIGJlIHRoZSBy
ZW1haW5pbmcKCSAgICAgKiBlbGVtZW50cy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAg
KiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJh
eQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBwcm9jZXNzLgoJICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT0xXSBUaGUgbGVuZ3RoIG9mIGVhY2ggY2h1bmsKCSAg
ICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUg
Zm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJu
cyB0aGUgbmV3IGFycmF5IG9mIGNodW5rcy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAg
ICogXy5jaHVuayhbJ2EnLCAnYicsICdjJywgJ2QnXSwgMik7CgkgICAgICogLy8gPT4gW1snYScs
ICdiJ10sIFsnYycsICdkJ11dCgkgICAgICoKCSAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2Mn
LCAnZCddLCAzKTsKCSAgICAgKiAvLyA9PiBbWydhJywgJ2InLCAnYyddLCBbJ2QnXV0KCSAgICAg
Ki8KCSAgICBmdW5jdGlvbiBjaHVuayhhcnJheSwgc2l6ZSwgZ3VhcmQpIHsKCSAgICAgIGlmICgo
Z3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc2l6ZSwgZ3VhcmQpIDogc2l6ZSA9PT0gdW5k
ZWZpbmVkKSkgewoJICAgICAgICBzaXplID0gMTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHNp
emUgPSBuYXRpdmVNYXgodG9JbnRlZ2VyKHNpemUpLCAwKTsKCSAgICAgIH0KCSAgICAgIHZhciBs
ZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCSAgICAgIGlmICghbGVu
Z3RoIHx8IHNpemUgPCAxKSB7CgkgICAgICAgIHJldHVybiBbXTsKCSAgICAgIH0KCSAgICAgIHZh
ciBpbmRleCA9IDAsCgkgICAgICAgICAgcmVzSW5kZXggPSAwLAoJICAgICAgICAgIHJlc3VsdCA9
IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpOwoKCSAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgewoJICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBiYXNlU2xpY2UoYXJyYXks
IGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgd2l0aCBhbGwgZmFsc2V5
IHZhbHVlcyByZW1vdmVkLiBUaGUgdmFsdWVzIGBmYWxzZWAsIGBudWxsYCwKCSAgICAgKiBgMGAs
IGAiImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS4KCSAgICAgKgoJICAgICAq
IEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAq
IEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0
byBjb21wYWN0LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5
IG9mIGZpbHRlcmVkIHZhbHVlcy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5j
b21wYWN0KFswLCAxLCBmYWxzZSwgMiwgJycsIDNdKTsKCSAgICAgKiAvLyA9PiBbMSwgMiwgM10K
CSAgICAgKi8KCSAgICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7CgkgICAgICB2YXIgaW5kZXgg
PSAtMSwKCSAgICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0
aCwKCSAgICAgICAgICByZXNJbmRleCA9IDAsCgkgICAgICAgICAgcmVzdWx0ID0gW107CgoJICAg
ICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlb
aW5kZXhdOwoJICAgICAgICBpZiAodmFsdWUpIHsKCSAgICAgICAgICByZXN1bHRbcmVzSW5kZXgr
K10gPSB2YWx1ZTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBuZXcgYXJyYXkgY29uY2F0ZW5hdGluZyBg
YXJyYXlgIHdpdGggYW55IGFkZGl0aW9uYWwgYXJyYXlzCgkgICAgICogYW5kL29yIHZhbHVlcy4K
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFy
cmF5IFRoZSBhcnJheSB0byBjb25jYXRlbmF0ZS4KCSAgICAgKiBAcGFyYW0gey4uLip9IFt2YWx1
ZXNdIFRoZSB2YWx1ZXMgdG8gY29uY2F0ZW5hdGUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBS
ZXR1cm5zIHRoZSBuZXcgY29uY2F0ZW5hdGVkIGFycmF5LgoJICAgICAqIEBleGFtcGxlCgkgICAg
ICoKCSAgICAgKiB2YXIgYXJyYXkgPSBbMV07CgkgICAgICogdmFyIG90aGVyID0gXy5jb25jYXQo
YXJyYXksIDIsIFszXSwgW1s0XV0pOwoJICAgICAqCgkgICAgICogY29uc29sZS5sb2cob3RoZXIp
OwoJICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF1dCgkgICAgICoKCSAgICAgKiBjb25zb2xlLmxv
ZyhhcnJheSk7CgkgICAgICogLy8gPT4gWzFdCgkgICAgICovCgkgICAgZnVuY3Rpb24gY29uY2F0
KCkgewoJICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CgkgICAgICBpZiAoIWxl
bmd0aCkgewoJICAgICAgICByZXR1cm4gW107CgkgICAgICB9CgkgICAgICB2YXIgYXJncyA9IEFy
cmF5KGxlbmd0aCAtIDEpLAoJICAgICAgICAgIGFycmF5ID0gYXJndW1lbnRzWzBdLAoJICAgICAg
ICAgIGluZGV4ID0gbGVuZ3RoOwoKCSAgICAgIHdoaWxlIChpbmRleC0tKSB7CgkgICAgICAgIGFy
Z3NbaW5kZXggLSAxXSA9IGFyZ3VtZW50c1tpbmRleF07CgkgICAgICB9CgkgICAgICByZXR1cm4g
YXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpID8gY29weUFycmF5KGFycmF5KSA6IFthcnJheV0sIGJh
c2VGbGF0dGVuKGFyZ3MsIDEpKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4g
YXJyYXkgb2YgYGFycmF5YCB2YWx1ZXMgbm90IGluY2x1ZGVkIGluIHRoZSBvdGhlciBnaXZlbiBh
cnJheXMKCSAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5h
dGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKQoJICAgICAqIGZvciBl
cXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2
YWx1ZXMgYXJlCgkgICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuCgkgICAgICoK
CSAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxgLCB0aGlzIG1ldGhvZCByZXR1cm5z
IGEgbmV3IGFycmF5LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBf
CgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBh
cmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHsu
Li5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLgoJICAgICAqIEByZXR1cm5z
IHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy4KCSAgICAg
KiBAc2VlIF8ud2l0aG91dCwgXy54b3IKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
Xy5kaWZmZXJlbmNlKFsyLCAxXSwgWzIsIDNdKTsKCSAgICAgKiAvLyA9PiBbMV0KCSAgICAgKi8K
CSAgICB2YXIgZGlmZmVyZW5jZSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHsK
CSAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSkKCSAgICAgICAgPyBiYXNlRGlm
ZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwg
dHJ1ZSkpCgkgICAgICAgIDogW107CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0
aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0
ZWVgIHdoaWNoCgkgICAgICogaXMgaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAg
YW5kIGB2YWx1ZXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24KCSAgICAgKiBieSB3aGljaCB0
aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVl
cyBhcmUKCSAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVl
IGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6CgkgICAgICogKHZhbHVlKS4KCSAgICAgKgoJ
ICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbEJ5YCwgdGhpcyBtZXRob2QgcmV0dXJu
cyBhIG5ldyBhcnJheS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2Yg
XwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBw
YXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7
Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS4KCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVy
IGVsZW1lbnQuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkg
b2YgZmlsdGVyZWQgdmFsdWVzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmRp
ZmZlcmVuY2VCeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTsKCSAgICAgKiAv
LyA9PiBbMS4yXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBz
aG9ydGhhbmQuCgkgICAgICogXy5kaWZmZXJlbmNlQnkoW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1d
LCBbeyAneCc6IDEgfV0sICd4Jyk7CgkgICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dCgkgICAgICov
CgkgICAgdmFyIGRpZmZlcmVuY2VCeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMp
IHsKCSAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QodmFsdWVzKTsKCSAgICAgIGlmIChpc0FycmF5
TGlrZU9iamVjdChpdGVyYXRlZSkpIHsKCSAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7Cgkg
ICAgICB9CgkgICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpCgkgICAgICAgID8g
YmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VP
YmplY3QsIHRydWUpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpCgkgICAgICAgIDogW107Cgkg
ICAgfSk7CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5j
ZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAKCSAgICAgKiB3aGljaCBpcyBp
bnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9y
ZGVyIGFuZAoJICAgICAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5l
ZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yCgkgICAgICogaXMgaW52b2tlZCB3
aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuCgkgICAgICoKCSAgICAgKiAqKk5v
dGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBh
cnJheS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJy
YXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9
IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9u
fSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICAg
KiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1
ZXMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gn
OiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTsKCSAgICAgKgoJICAgICAqIF8uZGlm
ZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7Cgkg
ICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV0KCSAgICAgKi8KCSAgICB2YXIgZGlmZmVy
ZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7CgkgICAgICB2YXIg
Y29tcGFyYXRvciA9IGxhc3QodmFsdWVzKTsKCSAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChj
b21wYXJhdG9yKSkgewoJICAgICAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkOwoJICAgICAgfQoJ
ICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KQoJICAgICAgICA/IGJhc2VEaWZm
ZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0
cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKQoJICAgICAgICA6IFtdOwoJICAgIH0pOwoKCSAg
ICAvKioKCSAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGBuYCBlbGVtZW50
cyBkcm9wcGVkIGZyb20gdGhlIGJlZ2lubmluZy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjUuMAoJICAgICAqIEBjYXRlZ29yeSBB
cnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS4KCSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBkcm9w
LgoJICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVy
YXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuCgkgICAgICogQHJldHVybnMge0FycmF5fSBS
ZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiBfLmRyb3AoWzEsIDIsIDNdKTsKCSAgICAgKiAvLyA9PiBbMiwgM10KCSAgICAgKgoJICAg
ICAqIF8uZHJvcChbMSwgMiwgM10sIDIpOwoJICAgICAqIC8vID0+IFszXQoJICAgICAqCgkgICAg
ICogXy5kcm9wKFsxLCAyLCAzXSwgNSk7CgkgICAgICogLy8gPT4gW10KCSAgICAgKgoJICAgICAq
IF8uZHJvcChbMSwgMiwgM10sIDApOwoJICAgICAqIC8vID0+IFsxLCAyLCAzXQoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGRyb3AoYXJyYXksIG4sIGd1YXJkKSB7CgkgICAgICB2YXIgbGVuZ3RoID0g
YXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7CgkgICAgICBpZiAoIWxlbmd0aCkgewoJ
ICAgICAgICByZXR1cm4gW107CgkgICAgICB9CgkgICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVu
ZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pOwoJICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJh
eSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0
ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUg
ZW5kLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICog
QHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJh
eX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0x
XSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGRyb3AuCgkgICAgICogQHBhcmFtLSB7T2JqZWN0
fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8u
bWFwYC4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJh
eWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAz
XSk7CgkgICAgICogLy8gPT4gWzEsIDJdCgkgICAgICoKCSAgICAgKiBfLmRyb3BSaWdodChbMSwg
MiwgM10sIDIpOwoJICAgICAqIC8vID0+IFsxXQoJICAgICAqCgkgICAgICogXy5kcm9wUmlnaHQo
WzEsIDIsIDNdLCA1KTsKCSAgICAgKiAvLyA9PiBbXQoJICAgICAqCgkgICAgICogXy5kcm9wUmln
aHQoWzEsIDIsIDNdLCAwKTsKCSAgICAgKiAvLyA9PiBbMSwgMiwgM10KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBkcm9wUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7CgkgICAgICB2YXIgbGVuZ3RoID0g
YXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7CgkgICAgICBpZiAoIWxlbmd0aCkgewoJ
ICAgICAgICByZXR1cm4gW107CgkgICAgICB9CgkgICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVu
ZGVmaW5lZCkgPyAxIDogdG9JbnRlZ2VyKG4pOwoJICAgICAgbiA9IGxlbmd0aCAtIG47CgkgICAg
ICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCAwLCBuIDwgMCA/IDAgOiBuKTsKCSAgICB9CgoJICAg
IC8qKgoJICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50
cyBkcm9wcGVkIGZyb20gdGhlIGVuZC4KCSAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRp
bCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcwoJICAgICAqIGlu
dm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS4KCSAgICAg
KgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAu
MAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRo
ZSBhcnJheSB0byBxdWVyeS4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8u
aWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJl
dHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLgoJICAgICAqIEBleGFt
cGxlCgkgICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1c2VyJzogJ2Jh
cm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAg
J2FjdGl2ZSc6IGZhbHNlIH0sCgkgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZl
JzogZmFsc2UgfQoJICAgICAqIF07CgkgICAgICoKCSAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVz
ZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pOwoJICAgICAqIC8vID0+IG9i
amVjdHMgZm9yIFsnYmFybmV5J10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBp
dGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNl
cic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pOwoJICAgICAqIC8vID0+IG9iamVjdHMg
Zm9yIFsnYmFybmV5JywgJ2ZyZWQnXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQ
cm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNl
cnMsIFsnYWN0aXZlJywgZmFsc2VdKTsKCSAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5l
eSddCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFu
ZC4KCSAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7CgkgICAgICogLy8g
PT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ10KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7CgkgICAgICByZXR1
cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkKCSAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdl
dEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUsIHRydWUpCgkgICAgICAgIDogW107CgkgICAg
fQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBleGNsdWRpbmcg
ZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuCgkgICAgICogRWxlbWVudHMgYXJl
IGRyb3BwZWQgdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUg
aXMKCSAgICAgKiBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBh
cnJheSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0Fy
cmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
W3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9u
LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC4K
CSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIHVzZXJzID0gWwoJICAgICAqICAg
eyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IGZhbHNlIH0sCgkgICAgICogICB7ICd1c2Vy
JzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSwKCSAgICAgKiAgIHsgJ3VzZXInOiAncGVi
YmxlcycsICdhY3RpdmUnOiB0cnVlIH0KCSAgICAgKiBdOwoJICAgICAqCgkgICAgICogXy5kcm9w
V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7CgkgICAgICog
Ly8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5t
YXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5kcm9wV2hpbGUodXNlcnMsIHsg
J3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pOwoJICAgICAqIC8vID0+IG9iamVj
dHMgZm9yIFsnZnJlZCcsICdwZWJibGVzJ10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRj
aGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmRyb3BXaGlsZSh1c2Vy
cywgWydhY3RpdmUnLCBmYWxzZV0pOwoJICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxl
cyddCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFu
ZC4KCSAgICAgKiBfLmRyb3BXaGlsZSh1c2VycywgJ2FjdGl2ZScpOwoJICAgICAqIC8vID0+IG9i
amVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnLCAncGViYmxlcyddCgkgICAgICovCgkgICAgZnVu
Y3Rpb24gZHJvcFdoaWxlKGFycmF5LCBwcmVkaWNhdGUpIHsKCSAgICAgIHJldHVybiAoYXJyYXkg
JiYgYXJyYXkubGVuZ3RoKQoJICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0SXRlcmF0ZWUo
cHJlZGljYXRlLCAzKSwgdHJ1ZSkKCSAgICAgICAgOiBbXTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIEZpbGxzIGVsZW1lbnRzIG9mIGBhcnJheWAgd2l0aCBgdmFsdWVgIGZyb20gYHN0YXJ0YCB1
cCB0bywgYnV0IG5vdAoJICAgICAqIGluY2x1ZGluZywgYGVuZGAuCgkgICAgICoKCSAgICAgKiAq
Kk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMi4wCgkgICAgICogQGNh
dGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZp
bGwuCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZmlsbCBgYXJyYXlgIHdp
dGguCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24u
CgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0
aW9uLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLgoJICAgICAqIEBl
eGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107CgkgICAgICoKCSAg
ICAgKiBfLmZpbGwoYXJyYXksICdhJyk7CgkgICAgICogY29uc29sZS5sb2coYXJyYXkpOwoJICAg
ICAqIC8vID0+IFsnYScsICdhJywgJ2EnXQoJICAgICAqCgkgICAgICogXy5maWxsKEFycmF5KDMp
LCAyKTsKCSAgICAgKiAvLyA9PiBbMiwgMiwgMl0KCSAgICAgKgoJICAgICAqIF8uZmlsbChbNCwg
NiwgOCwgMTBdLCAnKicsIDEsIDMpOwoJICAgICAqIC8vID0+IFs0LCAnKicsICcqJywgMTBdCgkg
ICAgICovCgkgICAgZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHsKCSAg
ICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCSAgICAg
IGlmICghbGVuZ3RoKSB7CgkgICAgICAgIHJldHVybiBbXTsKCSAgICAgIH0KCSAgICAgIGlmIChz
dGFydCAmJiB0eXBlb2Ygc3RhcnQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXks
IHZhbHVlLCBzdGFydCkpIHsKCSAgICAgICAgc3RhcnQgPSAwOwoJICAgICAgICBlbmQgPSBsZW5n
dGg7CgkgICAgICB9CgkgICAgICByZXR1cm4gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwg
ZW5kKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmlu
ZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0CgkgICAgICog
ZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxl
bWVudCBpdHNlbGYuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgMS4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFy
YW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBp
dGVyYXRpb24uCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4
IHRvIHNlYXJjaCBmcm9tLgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGlu
ZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIHZhciB1c2VycyA9IFsKCSAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5Jywg
ICdhY3RpdmUnOiBmYWxzZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2
ZSc6IGZhbHNlIH0sCgkgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1
ZSB9CgkgICAgICogXTsKCSAgICAgKgoJICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlv
bihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pOwoJICAgICAqIC8vID0+IDAKCSAg
ICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAg
ICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9
KTsKCSAgICAgKiAvLyA9PiAxCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3Bl
cnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0
aXZlJywgZmFsc2VdKTsKCSAgICAgKiAvLyA9PiAwCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8u
cHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbmRJbmRleCh1c2Vycywg
J2FjdGl2ZScpOwoJICAgICAqIC8vID0+IDIKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmaW5kSW5k
ZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7CgkgICAgICB2YXIgbGVuZ3RoID0gYXJy
YXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7CgkgICAgICBpZiAoIWxlbmd0aCkgewoJICAg
ICAgICByZXR1cm4gLTE7CgkgICAgICB9CgkgICAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0g
bnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTsKCSAgICAgIGlmIChpbmRleCA8IDApIHsK
CSAgICAgICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApOwoJICAgICAgfQoJ
ICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwg
MyksIGluZGV4KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2Ug
YF8uZmluZEluZGV4YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzCgkgICAg
ICogb2YgYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC4KCSAgICAgKgoJICAgICAqIEBz
dGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAyLjAuMAoJICAgICAqIEBj
YXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBp
bnNwZWN0LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0g
VGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcGFyYW0ge251bWJl
cn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLgoJ
ICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBl
bGVtZW50LCBlbHNlIGAtMWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciB1
c2VycyA9IFsKCSAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0s
CgkgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSwKCSAgICAg
KiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9CgkgICAgICogXTsKCSAg
ICAgKgoJICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4g
by51c2VyID09ICdwZWJibGVzJzsgfSk7CgkgICAgICogLy8gPT4gMgoJICAgICAqCgkgICAgICog
Ly8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbmRMYXN0
SW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSk7CgkgICAg
ICogLy8gPT4gMAoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRl
cmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZmluZExhc3RJbmRleCh1c2VycywgWydhY3RpdmUn
LCBmYWxzZV0pOwoJICAgICAqIC8vID0+IDIKCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5wcm9w
ZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZmluZExhc3RJbmRleCh1c2Vycywg
J2FjdGl2ZScpOwoJICAgICAqIC8vID0+IDAKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmaW5kTGFz
dEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCkgewoJICAgICAgdmFyIGxlbmd0aCA9
IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoOwoJICAgICAgaWYgKCFsZW5ndGgpIHsK
CSAgICAgICAgcmV0dXJuIC0xOwoJICAgICAgfQoJICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0g
MTsKCSAgICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkgewoJICAgICAgICBpbmRleCA9
IHRvSW50ZWdlcihmcm9tSW5kZXgpOwoJICAgICAgICBpbmRleCA9IGZyb21JbmRleCA8IDAKCSAg
ICAgICAgICA/IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCkKCSAgICAgICAgICA6IG5hdGl2
ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7CgkgICAgICB9CgkgICAgICByZXR1cm4gYmFzZUZpbmRJ
bmRleChhcnJheSwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgaW5kZXgsIHRydWUpOwoJICAg
IH0KCgkgICAgLyoqCgkgICAgICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVw
LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNp
bmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0g
YXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1
cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTsKCSAgICAgKiAvLyA9PiBbMSwg
MiwgWzMsIFs0XV0sIDVdCgkgICAgICovCgkgICAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSkgewoJ
ICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoOwoJICAg
ICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAuMAoJICAg
ICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJh
eSB0byBmbGF0dGVuLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZs
YXR0ZW5lZCBhcnJheS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5mbGF0dGVu
RGVlcChbMSwgWzIsIFszLCBbNF1dLCA1XV0pOwoJICAgICAqIC8vID0+IFsxLCAyLCAzLCA0LCA1
XQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KSB7CgkgICAgICB2YXIg
bGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7CgkgICAgICByZXR1cm4g
bGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbiBgYXJyYXlgIHVwIHRvIGBkZXB0aGAgdGlt
ZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBA
c2luY2UgNC40LjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5
fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Rl
cHRoPTFdIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC4KCSAgICAgKiBAcmV0dXJucyB7QXJy
YXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIHZhciBhcnJheSA9IFsxLCBbMiwgWzMsIFs0XV0sIDVdXTsKCSAgICAgKgoJ
ICAgICAqIF8uZmxhdHRlbkRlcHRoKGFycmF5LCAxKTsKCSAgICAgKiAvLyA9PiBbMSwgMiwgWzMs
IFs0XV0sIDVdCgkgICAgICoKCSAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMik7CgkgICAg
ICogLy8gPT4gWzEsIDIsIDMsIFs0XSwgNV0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmbGF0dGVu
RGVwdGgoYXJyYXksIGRlcHRoKSB7CgkgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/
IDAgOiBhcnJheS5sZW5ndGg7CgkgICAgICBpZiAoIWxlbmd0aCkgewoJICAgICAgICByZXR1cm4g
W107CgkgICAgICB9CgkgICAgICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9J
bnRlZ2VyKGRlcHRoKTsKCSAgICAgIHJldHVybiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgpOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMg
bWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkCgkgICAgICogZnJvbSBrZXktdmFsdWUg
YHBhaXJzYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAg
ICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7
QXJyYXl9IHBhaXJzIFRoZSBrZXktdmFsdWUgcGFpcnMuCgkgICAgICogQHJldHVybnMge09iamVj
dH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAg
ICogXy5mcm9tUGFpcnMoW1snYScsIDFdLCBbJ2InLCAyXV0pOwoJICAgICAqIC8vID0+IHsgJ2En
OiAxLCAnYic6IDIgfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGZyb21QYWlycyhwYWlycykgewoJ
ICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/
IDAgOiBwYWlycy5sZW5ndGgsCgkgICAgICAgICAgcmVzdWx0ID0ge307CgoJICAgICAgd2hpbGUg
KCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07Cgkg
ICAgICAgIHJlc3VsdFtwYWlyWzBdXSA9IHBhaXJbMV07CgkgICAgICB9CgkgICAgICByZXR1cm4g
cmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogR2V0cyB0aGUgZmlyc3QgZWxlbWVudCBv
ZiBgYXJyYXlgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGFsaWFzIGZpcnN0CgkgICAgICogQGNhdGVnb3J5
IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LgoJ
ICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAu
CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaGVhZChbMSwgMiwgM10pOwoJICAg
ICAqIC8vID0+IDEKCSAgICAgKgoJICAgICAqIF8uaGVhZChbXSk7CgkgICAgICogLy8gPT4gdW5k
ZWZpbmVkCgkgICAgICovCgkgICAgZnVuY3Rpb24gaGVhZChhcnJheSkgewoJICAgICAgcmV0dXJu
IChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYXJyYXlbMF0gOiB1bmRlZmluZWQ7CgkgICAgfQoK
CSAgICAvKioKCSAgICAgKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJy
ZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWAKCSAgICAgKiB1c2luZyBbYFNhbWVW
YWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3Nl
Yy1zYW1ldmFsdWV6ZXJvKQoJICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZy
b21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGUKCSAgICAgKiBvZmZzZXQgZnJv
bSB0aGUgZW5kIG9mIGBhcnJheWAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1l
bWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAg
ICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICAgKiBA
cGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgoJICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS4KCSAgICAgKiBA
cmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwg
ZWxzZSBgLTFgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmluZGV4T2YoWzEs
IDIsIDEsIDJdLCAyKTsKCSAgICAgKiAvLyA9PiAxCgkgICAgICoKCSAgICAgKiAvLyBTZWFyY2gg
ZnJvbSB0aGUgYGZyb21JbmRleGAuCgkgICAgICogXy5pbmRleE9mKFsxLCAyLCAxLCAyXSwgMiwg
Mik7CgkgICAgICogLy8gPT4gMwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXks
IHZhbHVlLCBmcm9tSW5kZXgpIHsKCSAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8g
MCA6IGFycmF5Lmxlbmd0aDsKCSAgICAgIGlmICghbGVuZ3RoKSB7CgkgICAgICAgIHJldHVybiAt
MTsKCSAgICAgIH0KCSAgICAgIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRv
SW50ZWdlcihmcm9tSW5kZXgpOwoJICAgICAgaWYgKGluZGV4IDwgMCkgewoJICAgICAgICBpbmRl
eCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7CgkgICAgICB9CgkgICAgICByZXR1cm4g
YmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleCk7CgkgICAgfQoKCSAgICAvKioKCSAgICAg
KiBHZXRzIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLgoJICAgICAqCgkgICAg
ICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAg
ICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5
IHRvIHF1ZXJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2Yg
YGFycmF5YC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5pbml0aWFsKFsxLCAy
LCAzXSk7CgkgICAgICogLy8gPT4gWzEsIDJdCgkgICAgICovCgkgICAgZnVuY3Rpb24gaW5pdGlh
bChhcnJheSkgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXku
bGVuZ3RoOwoJICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMCwgLTEpIDog
W107CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2
YWx1ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYWxsIGdpdmVuIGFycmF5cwoJICAgICAqIHVzaW5n
IFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYy
LzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pCgkgICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25z
LiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUKCSAgICAgKiBk
ZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBB
cnJheQoJICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5z
cGVjdC4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBp
bnRlcnNlY3RpbmcgdmFsdWVzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmlu
dGVyc2VjdGlvbihbMiwgMV0sIFsyLCAzXSk7CgkgICAgICogLy8gPT4gWzJdCgkgICAgICovCgkg
ICAgdmFyIGludGVyc2VjdGlvbiA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykgewoJICAgICAg
dmFyIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7CgkgICAg
ICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pCgkgICAg
ICAgID8gYmFzZUludGVyc2VjdGlvbihtYXBwZWQpCgkgICAgICAgIDogW107CgkgICAgfSk7CgoJ
ICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW50ZXJzZWN0aW9uYCBleGNl
cHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAKCSAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZv
ciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9u
CgkgICAgICogYnkgd2hpY2ggdGhleSdyZSBjb21wYXJlZC4gVGhlIG9yZGVyIGFuZCByZWZlcmVu
Y2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlCgkgICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3Qg
YXJyYXkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OgoJICAgICAq
ICh2YWx1ZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAg
ICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0g
ey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFt
IHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBl
ciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5
IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IF8uaW50ZXJzZWN0aW9uQnkoWzIuMSwgMS4yXSwgWzIuMywgMy40XSwgTWF0aC5mbG9vcik7Cgkg
ICAgICogLy8gPT4gWzIuMV0KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRl
cmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uaW50ZXJzZWN0aW9uQnkoW3sgJ3gnOiAxIH1dLCBb
eyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7CgkgICAgICogLy8gPT4gW3sgJ3gnOiAxIH1d
CgkgICAgICovCgkgICAgdmFyIGludGVyc2VjdGlvbkJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJy
YXlzKSB7CgkgICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyksCgkgICAgICAgICAgbWFw
cGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtlT2JqZWN0KTsKCgkgICAgICBpZiAo
aXRlcmF0ZWUgPT09IGxhc3QobWFwcGVkKSkgewoJICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5l
ZDsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIG1hcHBlZC5wb3AoKTsKCSAgICAgIH0KCSAgICAg
IHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSkKCSAgICAg
ICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKQoJ
ICAgICAgICA6IFtdOwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBs
aWtlIGBfLmludGVyc2VjdGlvbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAK
CSAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2Au
IFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcwoJICAgICAqIG9mIHJlc3VsdCB2YWx1ZXMgYXJlIGRl
dGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgY29tcGFyYXRvciBpcwoJICAgICAqIGlu
dm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLgoJICAgICAqCgkgICAg
ICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAg
ICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhl
IGFycmF5cyB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9y
XSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtB
cnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuCgkgICAg
ICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6
IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTsKCSAgICAgKiB2YXIgb3RoZXJzID0gW3sgJ3gnOiAx
LCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTsKCSAgICAgKgoJICAgICAqIF8uaW50ZXJz
ZWN0aW9uV2l0aChvYmplY3RzLCBvdGhlcnMsIF8uaXNFcXVhbCk7CgkgICAgICogLy8gPT4gW3sg
J3gnOiAxLCAneSc6IDIgfV0KCSAgICAgKi8KCSAgICB2YXIgaW50ZXJzZWN0aW9uV2l0aCA9IGJh
c2VSZXN0KGZ1bmN0aW9uKGFycmF5cykgewoJICAgICAgdmFyIGNvbXBhcmF0b3IgPSBsYXN0KGFy
cmF5cyksCgkgICAgICAgICAgbWFwcGVkID0gYXJyYXlNYXAoYXJyYXlzLCBjYXN0QXJyYXlMaWtl
T2JqZWN0KTsKCgkgICAgICBjb21wYXJhdG9yID0gdHlwZW9mIGNvbXBhcmF0b3IgPT0gJ2Z1bmN0
aW9uJyA/IGNvbXBhcmF0b3IgOiB1bmRlZmluZWQ7CgkgICAgICBpZiAoY29tcGFyYXRvcikgewoJ
ICAgICAgICBtYXBwZWQucG9wKCk7CgkgICAgICB9CgkgICAgICByZXR1cm4gKG1hcHBlZC5sZW5n
dGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pCgkgICAgICAgID8gYmFzZUludGVyc2VjdGlv
bihtYXBwZWQsIHVuZGVmaW5lZCwgY29tcGFyYXRvcikKCSAgICAgICAgOiBbXTsKCSAgICB9KTsK
CgkgICAgLyoqCgkgICAgICogQ29udmVydHMgYWxsIGVsZW1lbnRzIGluIGBhcnJheWAgaW50byBh
IHN0cmluZyBzZXBhcmF0ZWQgYnkgYHNlcGFyYXRvcmAuCgkgICAgICoKCSAgICAgKiBAc3RhdGlj
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdv
cnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29udmVy
dC4KCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNl
cGFyYXRvci4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBqb2luZWQgc3Ry
aW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmpvaW4oWydhJywgJ2InLCAn
YyddLCAnficpOwoJICAgICAqIC8vID0+ICdhfmJ+YycKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBq
b2luKGFycmF5LCBzZXBhcmF0b3IpIHsKCSAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gJycg
OiBuYXRpdmVKb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7CgkgICAgfQoKCSAgICAvKioKCSAg
ICAgKiBHZXRzIHRoZSBsYXN0IGVsZW1lbnQgb2YgYGFycmF5YC4KCSAgICAgKgoJICAgICAqIEBz
dGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBj
YXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBx
dWVyeS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbGFzdCBlbGVtZW50IG9mIGBh
cnJheWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8ubGFzdChbMSwgMiwgM10p
OwoJICAgICAqIC8vID0+IDMKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBsYXN0KGFycmF5KSB7Cgkg
ICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7CgkgICAg
ICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7CgkgICAgfQoK
CSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmluZGV4T2ZgIGV4Y2VwdCB0
aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YKCSAgICAgKiBgYXJyYXlgIGZyb20gcmln
aHQgdG8gbGVmdC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJ
ICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJh
bSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7Kn0g
dmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtm
cm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS4KCSAgICAg
KiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1
ZSwgZWxzZSBgLTFgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmxhc3RJbmRl
eE9mKFsxLCAyLCAxLCAyXSwgMik7CgkgICAgICogLy8gPT4gMwoJICAgICAqCgkgICAgICogLy8g
U2VhcmNoIGZyb20gdGhlIGBmcm9tSW5kZXhgLgoJICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIs
IDEsIDJdLCAyLCAyKTsKCSAgICAgKiAvLyA9PiAxCgkgICAgICovCgkgICAgZnVuY3Rpb24gbGFz
dEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHsKCSAgICAgIHZhciBsZW5ndGggPSBh
cnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCSAgICAgIGlmICghbGVuZ3RoKSB7Cgkg
ICAgICAgIHJldHVybiAtMTsKCSAgICAgIH0KCSAgICAgIHZhciBpbmRleCA9IGxlbmd0aDsKCSAg
ICAgIGlmIChmcm9tSW5kZXggIT09IHVuZGVmaW5lZCkgewoJICAgICAgICBpbmRleCA9IHRvSW50
ZWdlcihmcm9tSW5kZXgpOwoJICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IG5hdGl2ZU1heChs
ZW5ndGggKyBpbmRleCwgMCkgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpOwoJICAgICAg
fQoJICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZQoJICAgICAgICA/IHN0cmljdExhc3RJbmRl
eE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpCgkgICAgICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwg
YmFzZUlzTmFOLCBpbmRleCwgdHJ1ZSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBHZXRzIHRo
ZSBlbGVtZW50IGF0IGluZGV4IGBuYCBvZiBgYXJyYXlgLiBJZiBgbmAgaXMgbmVnYXRpdmUsIHRo
ZSBudGgKCSAgICAgKiBlbGVtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC4KCSAgICAgKgoJ
ICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjExLjAK
CSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUg
YXJyYXkgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBv
ZiB0aGUgZWxlbWVudCB0byByZXR1cm4uCgkgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhl
IG50aCBlbGVtZW50IG9mIGBhcnJheWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddOwoJICAgICAqCgkgICAgICogXy5udGgo
YXJyYXksIDEpOwoJICAgICAqIC8vID0+ICdiJwoJICAgICAqCgkgICAgICogXy5udGgoYXJyYXks
IC0yKTsKCSAgICAgKiAvLyA9PiAnYyc7CgkgICAgICovCgkgICAgZnVuY3Rpb24gbnRoKGFycmF5
LCBuKSB7CgkgICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlTnRoKGFy
cmF5LCB0b0ludGVnZXIobikpIDogdW5kZWZpbmVkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
UmVtb3ZlcyBhbGwgZ2l2ZW4gdmFsdWVzIGZyb20gYGFycmF5YCB1c2luZwoJICAgICAqIFtgU2Ft
ZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8j
c2VjLXNhbWV2YWx1ZXplcm8pCgkgICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLgoJICAg
ICAqCgkgICAgICogKipOb3RlOioqIFVubGlrZSBgXy53aXRob3V0YCwgdGhpcyBtZXRob2QgbXV0
YXRlcyBgYXJyYXlgLiBVc2UgYF8ucmVtb3ZlYAoJICAgICAqIHRvIHJlbW92ZSBlbGVtZW50cyBm
cm9tIGFuIGFycmF5IGJ5IHByZWRpY2F0ZS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAg
KiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAyLjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJh
eQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuCgkgICAg
ICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIHJlbW92ZS4KCSAgICAgKiBA
cmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAq
CgkgICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdhJywgJ2InLCAnYyddOwoJICAg
ICAqCgkgICAgICogXy5wdWxsKGFycmF5LCAnYScsICdjJyk7CgkgICAgICogY29uc29sZS5sb2co
YXJyYXkpOwoJICAgICAqIC8vID0+IFsnYicsICdiJ10KCSAgICAgKi8KCSAgICB2YXIgcHVsbCA9
IGJhc2VSZXN0KHB1bGxBbGwpOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtl
IGBfLnB1bGxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYW4gYXJyYXkgb2YgdmFsdWVzIHRvIHJl
bW92ZS4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZWAsIHRo
aXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAg
KiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJh
eQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuCgkgICAg
ICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLgoJICAgICAqIEBy
ZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2EnLCAnYicsICdjJ107CgkgICAg
ICoKCSAgICAgKiBfLnB1bGxBbGwoYXJyYXksIFsnYScsICdjJ10pOwoJICAgICAqIGNvbnNvbGUu
bG9nKGFycmF5KTsKCSAgICAgKiAvLyA9PiBbJ2InLCAnYiddCgkgICAgICovCgkgICAgZnVuY3Rp
b24gcHVsbEFsbChhcnJheSwgdmFsdWVzKSB7CgkgICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5
Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCkKCSAgICAgICAgPyBiYXNlUHVsbEFs
bChhcnJheSwgdmFsdWVzKQoJICAgICAgICA6IGFycmF5OwoJICAgIH0KCgkgICAgLyoqCgkgICAg
ICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRz
IGBpdGVyYXRlZWAgd2hpY2ggaXMKCSAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2Yg
YGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbgoJICAgICAqIGJ5
IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25l
IGFyZ3VtZW50OiAodmFsdWUpLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFVubGlrZSBgXy5k
aWZmZXJlbmNlQnlgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuCgkgICAgICoKCSAgICAg
KiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAg
KiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkg
dG8gbW9kaWZ5LgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJl
bW92ZS4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhl
IGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuCgkgICAgICogQHJldHVybnMge0FycmF5fSBS
ZXR1cm5zIGBhcnJheWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBhcnJh
eSA9IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMyB9LCB7ICd4JzogMSB9XTsKCSAg
ICAgKgoJICAgICAqIF8ucHVsbEFsbEJ5KGFycmF5LCBbeyAneCc6IDEgfSwgeyAneCc6IDMgfV0s
ICd4Jyk7CgkgICAgICogY29uc29sZS5sb2coYXJyYXkpOwoJICAgICAqIC8vID0+IFt7ICd4Jzog
MiB9XQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHB1bGxBbGxCeShhcnJheSwgdmFsdWVzLCBpdGVy
YXRlZSkgewoJICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYm
IHZhbHVlcy5sZW5ndGgpCgkgICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgZ2V0
SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKQoJICAgICAgICA6IGFycmF5OwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBh
Y2NlcHRzIGBjb21wYXJhdG9yYCB3aGljaAoJICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBl
bGVtZW50cyBvZiBgYXJyYXlgIHRvIGB2YWx1ZXNgLiBUaGUgY29tcGFyYXRvciBpcwoJICAgICAq
IGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLgoJICAgICAqCgkg
ICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlV2l0aGAsIHRoaXMgbWV0aG9kIG11
dGF0ZXMgYGFycmF5YC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2Yg
XwoJICAgICAqIEBzaW5jZSA0LjYuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBw
YXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuCgkgICAgICogQHBhcmFtIHtB
cnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gcmVtb3ZlLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LgoJICAg
ICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiB2YXIgYXJyYXkgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMywg
J3knOiA0IH0sIHsgJ3gnOiA1LCAneSc6IDYgfV07CgkgICAgICoKCSAgICAgKiBfLnB1bGxBbGxX
aXRoKGFycmF5LCBbeyAneCc6IDMsICd5JzogNCB9XSwgXy5pc0VxdWFsKTsKCSAgICAgKiBjb25z
b2xlLmxvZyhhcnJheSk7CgkgICAgICogLy8gPT4gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6
IDUsICd5JzogNiB9XQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHB1bGxBbGxXaXRoKGFycmF5LCB2
YWx1ZXMsIGNvbXBhcmF0b3IpIHsKCSAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3Ro
ICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKQoJICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5
LCB2YWx1ZXMsIHVuZGVmaW5lZCwgY29tcGFyYXRvcikKCSAgICAgICAgOiBhcnJheTsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSBgYXJyYXlgIGNvcnJlc3Bv
bmRpbmcgdG8gYGluZGV4ZXNgIGFuZCByZXR1cm5zIGFuCgkgICAgICogYXJyYXkgb2YgcmVtb3Zl
ZCBlbGVtZW50cy4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uYXRgLCB0aGlz
IG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICog
QG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkK
CSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LgoJICAgICAq
IEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IFtpbmRleGVzXSBUaGUgaW5kZXhlcyBvZiBl
bGVtZW50cyB0byByZW1vdmUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBu
ZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkg
ICAgICogdmFyIGFycmF5ID0gWydhJywgJ2InLCAnYycsICdkJ107CgkgICAgICogdmFyIHB1bGxl
ZCA9IF8ucHVsbEF0KGFycmF5LCBbMSwgM10pOwoJICAgICAqCgkgICAgICogY29uc29sZS5sb2co
YXJyYXkpOwoJICAgICAqIC8vID0+IFsnYScsICdjJ10KCSAgICAgKgoJICAgICAqIGNvbnNvbGUu
bG9nKHB1bGxlZCk7CgkgICAgICogLy8gPT4gWydiJywgJ2QnXQoJICAgICAqLwoJICAgIHZhciBw
dWxsQXQgPSBmbGF0UmVzdChmdW5jdGlvbihhcnJheSwgaW5kZXhlcykgewoJICAgICAgdmFyIGxl
bmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLAoJICAgICAgICAgIHJlc3Vs
dCA9IGJhc2VBdChhcnJheSwgaW5kZXhlcyk7CgoJICAgICAgYmFzZVB1bGxBdChhcnJheSwgYXJy
YXlNYXAoaW5kZXhlcywgZnVuY3Rpb24oaW5kZXgpIHsKCSAgICAgICAgcmV0dXJuIGlzSW5kZXgo
aW5kZXgsIGxlbmd0aCkgPyAraW5kZXggOiBpbmRleDsKCSAgICAgIH0pLnNvcnQoY29tcGFyZUFz
Y2VuZGluZykpOwoKCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfSk7CgoJICAgIC8qKgoJICAg
ICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gYGFycmF5YCB0aGF0IGBwcmVkaWNhdGVgIHJl
dHVybnMgdHJ1dGh5IGZvcgoJICAgICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSByZW1v
dmVkIGVsZW1lbnRzLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQKCSAgICAgKiB3aXRoIHRocmVl
IGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLgoJICAgICAqCgkgICAgICogKipOb3Rl
OioqIFVubGlrZSBgXy5maWx0ZXJgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuIFVzZSBg
Xy5wdWxsYAoJICAgICAqIHRvIHB1bGwgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSB2YWx1ZS4K
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSAyLjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFy
cmF5IFRoZSBhcnJheSB0byBtb2RpZnkuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRp
Y2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAg
ICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlbW92ZWQgZWxl
bWVudHMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBhcnJheSA9IFsxLCAy
LCAzLCA0XTsKCSAgICAgKiB2YXIgZXZlbnMgPSBfLnJlbW92ZShhcnJheSwgZnVuY3Rpb24obikg
ewoJICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7CgkgICAgICogfSk7CgkgICAgICoKCSAgICAg
KiBjb25zb2xlLmxvZyhhcnJheSk7CgkgICAgICogLy8gPT4gWzEsIDNdCgkgICAgICoKCSAgICAg
KiBjb25zb2xlLmxvZyhldmVucyk7CgkgICAgICogLy8gPT4gWzIsIDRdCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUpIHsKCSAgICAgIHZhciByZXN1bHQgPSBb
XTsKCSAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHsKCSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKCSAgICAgIH0KCSAgICAgIHZhciBpbmRleCA9IC0xLAoJICAgICAgICAgIGluZGV4
ZXMgPSBbXSwKCSAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgoJICAgICAgcHJlZGlj
YXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKTsKCSAgICAgIHdoaWxlICgrK2luZGV4IDwg
bGVuZ3RoKSB7CgkgICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTsKCSAgICAgICAgaWYg
KHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkgewoJICAgICAgICAgIHJlc3VsdC5wdXNo
KHZhbHVlKTsKCSAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpOwoJICAgICAgICB9CgkgICAg
ICB9CgkgICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKTsKCSAgICAgIHJldHVybiByZXN1
bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBSZXZlcnNlcyBgYXJyYXlgIHNvIHRoYXQgdGhl
IGZpcnN0IGVsZW1lbnQgYmVjb21lcyB0aGUgbGFzdCwgdGhlIHNlY29uZAoJICAgICAqIGVsZW1l
bnQgYmVjb21lcyB0aGUgc2Vjb25kIHRvIGxhc3QsIGFuZCBzbyBvbi4KCSAgICAgKgoJICAgICAq
ICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAgYW5kIGlzIGJhc2VkIG9uCgkg
ICAgICogW2BBcnJheSNyZXZlcnNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvcmV2ZXJzZSkuCgkg
ICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2Ug
NC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJh
eSBUaGUgYXJyYXkgdG8gbW9kaWZ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBg
YXJyYXlgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgYXJyYXkgPSBbMSwg
MiwgM107CgkgICAgICoKCSAgICAgKiBfLnJldmVyc2UoYXJyYXkpOwoJICAgICAqIC8vID0+IFsz
LCAyLCAxXQoJICAgICAqCgkgICAgICogY29uc29sZS5sb2coYXJyYXkpOwoJICAgICAqIC8vID0+
IFszLCAyLCAxXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHsKCSAgICAg
IHJldHVybiBhcnJheSA9PSBudWxsID8gYXJyYXkgOiBuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkp
OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZnJv
bSBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuCgkgICAgICoKCSAgICAg
KiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgdXNlZCBpbnN0ZWFkIG9mCgkgICAgICogW2BBcnJh
eSNzbGljZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3NsaWNlKSB0byBlbnN1cmUgZGVuc2UgYXJy
YXlzIGFyZQoJICAgICAqIHJldHVybmVkLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5
CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLgoJICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLgoJICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi4KCSAgICAg
KiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuCgkgICAgICov
CgkgICAgZnVuY3Rpb24gc2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHsKCSAgICAgIHZhciBsZW5n
dGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDsKCSAgICAgIGlmICghbGVuZ3Ro
KSB7CgkgICAgICAgIHJldHVybiBbXTsKCSAgICAgIH0KCSAgICAgIGlmIChlbmQgJiYgdHlwZW9m
IGVuZCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc3RhcnQsIGVuZCkpIHsK
CSAgICAgICAgc3RhcnQgPSAwOwoJICAgICAgICBlbmQgPSBsZW5ndGg7CgkgICAgICB9CgkgICAg
ICBlbHNlIHsKCSAgICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihz
dGFydCk7CgkgICAgICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9JbnRl
Z2VyKGVuZCk7CgkgICAgICB9CgkgICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwg
ZW5kKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFVzZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGRl
dGVybWluZSB0aGUgbG93ZXN0IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAKCSAgICAgKiBzaG91bGQg
YmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9y
ZGVyLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICog
QHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJh
eX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7Kn0g
dmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJl
dHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkCgkgICAg
ICogIGludG8gYGFycmF5YC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5zb3J0
ZWRJbmRleChbMzAsIDUwXSwgNDApOwoJICAgICAqIC8vID0+IDEKCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBzb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpIHsKCSAgICAgIHJldHVybiBiYXNlU29ydGVk
SW5kZXgoYXJyYXksIHZhbHVlKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9k
IGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVl
YAoJICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBv
ZiBgYXJyYXlgIHRvIGNvbXB1dGUgdGhlaXIKCSAgICAgKiBzb3J0IHJhbmtpbmcuIFRoZSBpdGVy
YXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLgoJICAgICAqCgkgICAg
ICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAg
ICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRl
ZCBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRv
IGV2YWx1YXRlLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5
XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAgICAgKiBAcmV0dXJucyB7bnVt
YmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRl
ZAoJICAgICAqICBpbnRvIGBhcnJheWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IHZhciBvYmplY3RzID0gW3sgJ3gnOiA0IH0sIHsgJ3gnOiA1IH1dOwoJICAgICAqCgkgICAgICog
Xy5zb3J0ZWRJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sIGZ1bmN0aW9uKG8pIHsgcmV0dXJu
IG8ueDsgfSk7CgkgICAgICogLy8gPT4gMAoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLnByb3Bl
cnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5zb3J0ZWRJbmRleEJ5KG9iamVjdHMs
IHsgJ3gnOiA0IH0sICd4Jyk7CgkgICAgICogLy8gPT4gMAoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IHNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSkgewoJICAgICAgcmV0dXJuIGJh
c2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAg
ZXhjZXB0IHRoYXQgaXQgcGVyZm9ybXMgYSBiaW5hcnkKCSAgICAgKiBzZWFyY2ggb24gYSBzb3J0
ZWQgYGFycmF5YC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJ
ICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJh
bSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7Kn0g
dmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuCgkgICAgICogQHJldHVybnMge251bWJlcn0g
UmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC4KCSAgICAg
KiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5zb3J0ZWRJbmRleE9mKFs0LCA1LCA1LCA1LCA2
XSwgNSk7CgkgICAgICogLy8gPT4gMQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNvcnRlZEluZGV4
T2YoYXJyYXksIHZhbHVlKSB7CgkgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAg
OiBhcnJheS5sZW5ndGg7CgkgICAgICBpZiAobGVuZ3RoKSB7CgkgICAgICAgIHZhciBpbmRleCA9
IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpOwoJICAgICAgICBpZiAoaW5kZXggPCBsZW5n
dGggJiYgZXEoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHsKCSAgICAgICAgICByZXR1cm4gaW5kZXg7
CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiAtMTsKCSAgICB9CgoJICAgIC8qKgoJ
ICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0
IHJldHVybnMgdGhlIGhpZ2hlc3QKCSAgICAgKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3Vs
ZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8KCSAgICAgKiBtYWludGFpbiBp
dHMgc29ydCBvcmRlci4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2Yg
XwoJICAgICAqIEBzaW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBw
YXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC4KCSAgICAgKiBA
cGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS4KCSAgICAgKiBAcmV0dXJucyB7
bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNl
cnRlZAoJICAgICAqICBpbnRvIGBhcnJheWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAg
ICAqIF8uc29ydGVkTGFzdEluZGV4KFs0LCA1LCA1LCA1LCA2XSwgNSk7CgkgICAgICogLy8gPT4g
NAoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleChhcnJheSwgdmFsdWUpIHsK
CSAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKTsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkTGFzdEluZGV4
YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAKCSAgICAgKiB3aGljaCBpcyBpbnZv
a2VkIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlIHRo
ZWlyCgkgICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9u
ZSBhcmd1bWVudDogKHZhbHVlKS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVt
YmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAg
ICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC4KCSAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS4KCSAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQg
cGVyIGVsZW1lbnQuCgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXgg
YXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWQKCSAgICAgKiAgaW50byBgYXJyYXlg
LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4Jzog
NCB9LCB7ICd4JzogNSB9XTsKCSAgICAgKgoJICAgICAqIF8uc29ydGVkTGFzdEluZGV4Qnkob2Jq
ZWN0cywgeyAneCc6IDQgfSwgZnVuY3Rpb24obykgeyByZXR1cm4gby54OyB9KTsKCSAgICAgKiAv
LyA9PiAxCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0
aGFuZC4KCSAgICAgKiBfLnNvcnRlZExhc3RJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sICd4
Jyk7CgkgICAgICogLy8gPT4gMQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRl
eEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHsKCSAgICAgIHJldHVybiBiYXNlU29ydGVkSW5k
ZXhCeShhcnJheSwgdmFsdWUsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSwgdHJ1ZSk7CgkgICAg
fQoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmxhc3RJbmRleE9mYCBl
eGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeQoJICAgICAqIHNlYXJjaCBvbiBhIHNvcnRl
ZCBgYXJyYXlgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFt
IHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHsqfSB2
YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBS
ZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnNvcnRlZExhc3RJbmRleE9mKFs0LCA1LCA1LCA1
LCA2XSwgNSk7CgkgICAgICogLy8gPT4gMwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNvcnRlZExh
c3RJbmRleE9mKGFycmF5LCB2YWx1ZSkgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51
bGwgPyAwIDogYXJyYXkubGVuZ3RoOwoJICAgICAgaWYgKGxlbmd0aCkgewoJICAgICAgICB2YXIg
aW5kZXggPSBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKSAtIDE7CgkgICAgICAg
IGlmIChlcShhcnJheVtpbmRleF0sIHZhbHVlKSkgewoJICAgICAgICAgIHJldHVybiBpbmRleDsK
CSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIC0xOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCdzIGRlc2ln
bmVkIGFuZCBvcHRpbWl6ZWQKCSAgICAgKiBmb3Igc29ydGVkIGFycmF5cy4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAg
ICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJh
eSB0byBpbnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1
cGxpY2F0ZSBmcmVlIGFycmF5LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnNv
cnRlZFVuaXEoWzEsIDEsIDJdKTsKCSAgICAgKiAvLyA9PiBbMSwgMl0KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KSB7CgkgICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5
Lmxlbmd0aCkKCSAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSkKCSAgICAgICAgOiBbXTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcUJ5YCBl
eGNlcHQgdGhhdCBpdCdzIGRlc2lnbmVkIGFuZCBvcHRpbWl6ZWQKCSAgICAgKiBmb3Igc29ydGVk
IGFycmF5cy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAg
ICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7
QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rp
b259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuCgkgICAgICog
QHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuCgkg
ICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uc29ydGVkVW5pcUJ5KFsxLjEsIDEuMiwg
Mi4zLCAyLjRdLCBNYXRoLmZsb29yKTsKCSAgICAgKiAvLyA9PiBbMS4xLCAyLjNdCgkgICAgICov
CgkgICAgZnVuY3Rpb24gc29ydGVkVW5pcUJ5KGFycmF5LCBpdGVyYXRlZSkgewoJICAgICAgcmV0
dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpCgkgICAgICAgID8gYmFzZVNvcnRlZFVuaXEoYXJy
YXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkKCSAgICAgICAgOiBbXTsKCSAgICB9CgoJICAg
IC8qKgoJICAgICAqIEdldHMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLgoJ
ICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNl
IDQuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJy
YXkgVGhlIGFycmF5IHRvIHF1ZXJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0
aGUgc2xpY2Ugb2YgYGFycmF5YC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy50
YWlsKFsxLCAyLCAzXSk7CgkgICAgICogLy8gPT4gWzIsIDNdCgkgICAgICovCgkgICAgZnVuY3Rp
b24gdGFpbChhcnJheSkgewoJICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDog
YXJyYXkubGVuZ3RoOwoJICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMSwg
bGVuZ3RoKSA6IFtdOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9m
IGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLgoJICAg
ICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAu
MS4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkg
VGhlIGFycmF5IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVt
YmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuCgkgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRd
IEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC4KCSAg
ICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuCgkgICAg
ICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8udGFrZShbMSwgMiwgM10pOwoJICAgICAqIC8v
ID0+IFsxXQoJICAgICAqCgkgICAgICogXy50YWtlKFsxLCAyLCAzXSwgMik7CgkgICAgICogLy8g
PT4gWzEsIDJdCgkgICAgICoKCSAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCA1KTsKCSAgICAgKiAv
LyA9PiBbMSwgMiwgM10KCSAgICAgKgoJICAgICAqIF8udGFrZShbMSwgMiwgM10sIDApOwoJICAg
ICAqIC8vID0+IFtdCgkgICAgICovCgkgICAgZnVuY3Rpb24gdGFrZShhcnJheSwgbiwgZ3VhcmQp
IHsKCSAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHsKCSAgICAgICAgcmV0dXJu
IFtdOwoJICAgICAgfQoJICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6
IHRvSW50ZWdlcihuKTsKCSAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8g
MCA6IG4pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJh
eWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgZW5kLgoJICAgICAqCgkgICAgICog
QHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICog
QGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRv
IHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1l
bnRzIHRvIHRha2UuCgkgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNl
IGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC4KCSAgICAgKiBAcmV0dXJu
cyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSk7CgkgICAgICogLy8gPT4gWzNd
CgkgICAgICoKCSAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDIpOwoJICAgICAqIC8vID0+
IFsyLCAzXQoJICAgICAqCgkgICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCA1KTsKCSAgICAg
KiAvLyA9PiBbMSwgMiwgM10KCSAgICAgKgoJICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwg
MCk7CgkgICAgICogLy8gPT4gW10KCSAgICAgKi8KCSAgICBmdW5jdGlvbiB0YWtlUmlnaHQoYXJy
YXksIG4sIGd1YXJkKSB7CgkgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBh
cnJheS5sZW5ndGg7CgkgICAgICBpZiAoIWxlbmd0aCkgewoJICAgICAgICByZXR1cm4gW107Cgkg
ICAgICB9CgkgICAgICBuID0gKGd1YXJkIHx8IG4gPT09IHVuZGVmaW5lZCkgPyAxIDogdG9JbnRl
Z2VyKG4pOwoJICAgICAgbiA9IGxlbmd0aCAtIG47CgkgICAgICByZXR1cm4gYmFzZVNsaWNlKGFy
cmF5LCBuIDwgMCA/IDAgOiBuLCBsZW5ndGgpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3Jl
YXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tIHRoZSBlbmQu
IEVsZW1lbnRzIGFyZQoJICAgICAqIHRha2VuIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFs
c2V5LiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aAoJICAgICAqIHRocmVlIGFyZ3VtZW50
czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5
CgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LgoJICAgICAq
IEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGlu
dm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhl
IHNsaWNlIG9mIGBhcnJheWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciB1
c2VycyA9IFsKCSAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiB0cnVlIH0s
CgkgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWN0aXZlJzogZmFsc2UgfSwKCSAgICAg
KiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9CgkgICAgICogXTsKCSAg
ICAgKgoJICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJu
ICFvLmFjdGl2ZTsgfSk7CgkgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJs
ZXMnXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFu
ZC4KCSAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ3BlYmJsZXMnLCAn
YWN0aXZlJzogZmFsc2UgfSk7CgkgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydwZWJibGVzJ10K
CSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0
aGFuZC4KCSAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7
CgkgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJywgJ3BlYmJsZXMnXQoJICAgICAqCgkg
ICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy50
YWtlUmlnaHRXaGlsZSh1c2VycywgJ2FjdGl2ZScpOwoJICAgICAqIC8vID0+IFtdCgkgICAgICov
CgkgICAgZnVuY3Rpb24gdGFrZVJpZ2h0V2hpbGUoYXJyYXksIHByZWRpY2F0ZSkgewoJICAgICAg
cmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpCgkgICAgICAgID8gYmFzZVdoaWxlKGFycmF5
LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBmYWxzZSwgdHJ1ZSkKCSAgICAgICAgOiBbXTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGgg
ZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLiBFbGVtZW50cwoJICAgICAqIGFyZSB0
YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBp
bnZva2VkIHdpdGgKCSAgICAgKiB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5
KS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9
IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJl
ZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkg
ICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLgoJICAg
ICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1
c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSwKCSAgICAgKiAgIHsgJ3VzZXInOiAn
ZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdwZWJibGVz
JywgJ2FjdGl2ZSc6IHRydWUgfQoJICAgICAqIF07CgkgICAgICoKCSAgICAgKiBfLnRha2VXaGls
ZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTsKCSAgICAgKiAvLyA9
PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBg
Xy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy50YWtlV2hpbGUodXNlcnMs
IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pOwoJICAgICAqIC8vID0+IG9i
amVjdHMgZm9yIFsnYmFybmV5J10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJv
cGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgWydh
Y3RpdmUnLCBmYWxzZV0pOwoJICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2Zy
ZWQnXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhh
bmQuCgkgICAgICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTsKCSAgICAgKiAvLyA9PiBb
XQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7Cgkg
ICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkKCSAgICAgICAgPyBiYXNlV2hpbGUo
YXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpCgkgICAgICAgIDogW107CgkgICAgfQoK
CSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMsIGluIG9y
ZGVyLCBmcm9tIGFsbCBnaXZlbiBhcnJheXMgdXNpbmcKCSAgICAgKiBbYFNhbWVWYWx1ZVplcm9g
XShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFs
dWV6ZXJvKQoJICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4KCSAgICAgKgoJICAgICAq
IEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAq
IEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBh
cnJheXMgdG8gaW5zcGVjdC4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5l
dyBhcnJheSBvZiBjb21iaW5lZCB2YWx1ZXMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAg
ICAqIF8udW5pb24oWzJdLCBbMSwgMl0pOwoJICAgICAqIC8vID0+IFsyLCAxXQoJICAgICAqLwoJ
ICAgIHZhciB1bmlvbiA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykgewoJICAgICAgcmV0dXJu
IGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUp
KTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlv
bmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzCgkgICAgICogaW52
b2tlZCBmb3IgZWFjaCBlbGVtZW50IG9mIGVhY2ggYGFycmF5c2AgdG8gZ2VuZXJhdGUgdGhlIGNy
aXRlcmlvbiBieQoJICAgICAqIHdoaWNoIHVuaXF1ZW5lc3MgaXMgY29tcHV0ZWQuIFJlc3VsdCB2
YWx1ZXMgYXJlIGNob3NlbiBmcm9tIHRoZSBmaXJzdAoJICAgICAqIGFycmF5IGluIHdoaWNoIHRo
ZSB2YWx1ZSBvY2N1cnMuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50
OgoJICAgICAqICh2YWx1ZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJl
ck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAg
KiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuCgkgICAg
ICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBp
bnZva2VkIHBlciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUg
bmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkg
ICAgICogXy51bmlvbkJ5KFsyLjFdLCBbMS4yLCAyLjNdLCBNYXRoLmZsb29yKTsKCSAgICAgKiAv
LyA9PiBbMi4xLCAxLjJdCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJh
dGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLnVuaW9uQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIg
fSwgeyAneCc6IDEgfV0sICd4Jyk7CgkgICAgICogLy8gPT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAy
IH1dCgkgICAgICovCgkgICAgdmFyIHVuaW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMp
IHsKCSAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKTsKCSAgICAgIGlmIChpc0FycmF5
TGlrZU9iamVjdChpdGVyYXRlZSkpIHsKCSAgICAgICAgaXRlcmF0ZWUgPSB1bmRlZmluZWQ7Cgkg
ICAgICB9CgkgICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCAxLCBpc0Fy
cmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7CgkgICAgfSk7
CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0
aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoCgkgICAgICogaXMgaW52b2tlZCB0byBj
b21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJv
bQoJICAgICAqIHRoZSBmaXJzdCBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUg
Y29tcGFyYXRvciBpcyBpbnZva2VkCgkgICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFs
LCBvdGhWYWwpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFt
IHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVt
ZW50LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNv
bWJpbmVkIHZhbHVlcy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVj
dHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dOwoJICAgICAqIHZh
ciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dOwoJICAg
ICAqCgkgICAgICogXy51bmlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpOwoJICAg
ICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6
IDEsICd5JzogMSB9XQoJICAgICAqLwoJICAgIHZhciB1bmlvbldpdGggPSBiYXNlUmVzdChmdW5j
dGlvbihhcnJheXMpIHsKCSAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpOwoJICAg
ICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJh
dG9yIDogdW5kZWZpbmVkOwoJICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5
cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpOwoJ
ICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lv
biBvZiBhbiBhcnJheSwgdXNpbmcKCSAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNt
YS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKQoJICAg
ICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucywgaW4gd2hpY2ggb25seSB0aGUgZmlyc3Qgb2Nj
dXJyZW5jZSBvZiBlYWNoIGVsZW1lbnQKCSAgICAgKiBpcyBrZXB0LiBUaGUgb3JkZXIgb2YgcmVz
dWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyCgkgICAgICog
aW4gdGhlIGFycmF5LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBf
CgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBh
cmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAgICogQHJldHVybnMg
e0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIF8udW5pcShbMiwgMSwgMl0pOwoJICAgICAqIC8vID0+IFsy
LCAxXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHVuaXEoYXJyYXkpIHsKCSAgICAgIHJldHVybiAo
YXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGJhc2VVbmlxKGFycmF5KSA6IFtdOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBp
dCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXMKCSAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVs
ZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5IHdoaWNoCgkgICAg
ICogdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMg
ZGV0ZXJtaW5lZCBieSB0aGUKCSAgICAgKiBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS4g
VGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6CgkgICAgICogKHZhbHVl
KS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9
IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtp
dGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC4KCSAg
ICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBkdXBsaWNhdGUgZnJlZSBhcnJh
eS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy51bmlxQnkoWzIuMSwgMS4yLCAy
LjNdLCBNYXRoLmZsb29yKTsKCSAgICAgKiAvLyA9PiBbMi4xLCAxLjJdCgkgICAgICoKCSAgICAg
KiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLnVuaXFC
eShbeyAneCc6IDEgfSwgeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7CgkgICAgICogLy8g
PT4gW3sgJ3gnOiAxIH0sIHsgJ3gnOiAyIH1dCgkgICAgICovCgkgICAgZnVuY3Rpb24gdW5pcUJ5
KGFycmF5LCBpdGVyYXRlZSkgewoJICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgp
ID8gYmFzZVVuaXEoYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSkgOiBbXTsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRo
YXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2gKCSAgICAgKiBpcyBpbnZva2VkIHRvIGNv
bXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMK
CSAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS5U
aGUgY29tcGFyYXRvciBpcyBpbnZva2VkCgkgICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJy
VmFsLCBvdGhWYWwpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBf
CgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBh
cmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQu
CgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUg
YXJyYXkuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3RzID0gW3sg
J3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1d
OwoJICAgICAqCgkgICAgICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpOwoJICAgICAq
IC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV0KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikgewoJICAgICAgY29tcGFy
YXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5k
ZWZpbmVkOwoJICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEo
YXJyYXksIHVuZGVmaW5lZCwgY29tcGFyYXRvcikgOiBbXTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGFu
IGFycmF5IG9mIGdyb3VwZWQKCSAgICAgKiBlbGVtZW50cyBhbmQgY3JlYXRlcyBhbiBhcnJheSBy
ZWdyb3VwaW5nIHRoZSBlbGVtZW50cyB0byB0aGVpciBwcmUtemlwCgkgICAgICogY29uZmlndXJh
dGlvbi4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAxLjIuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJy
YXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuCgkgICAg
ICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVs
ZW1lbnRzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgemlwcGVkID0gXy56
aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTsKCSAgICAgKiAvLyA9PiBbWydh
JywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV0KCSAgICAgKgoJICAgICAqIF8udW56aXAoemlw
cGVkKTsKCSAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdXQoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7CgkgICAgICBpZiAoIShhcnJheSAm
JiBhcnJheS5sZW5ndGgpKSB7CgkgICAgICAgIHJldHVybiBbXTsKCSAgICAgIH0KCSAgICAgIHZh
ciBsZW5ndGggPSAwOwoJICAgICAgYXJyYXkgPSBhcnJheUZpbHRlcihhcnJheSwgZnVuY3Rpb24o
Z3JvdXApIHsKCSAgICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGdyb3VwKSkgewoJICAgICAg
ICAgIGxlbmd0aCA9IG5hdGl2ZU1heChncm91cC5sZW5ndGgsIGxlbmd0aCk7CgkgICAgICAgICAg
cmV0dXJuIHRydWU7CgkgICAgICAgIH0KCSAgICAgIH0pOwoJICAgICAgcmV0dXJuIGJhc2VUaW1l
cyhsZW5ndGgsIGZ1bmN0aW9uKGluZGV4KSB7CgkgICAgICAgIHJldHVybiBhcnJheU1hcChhcnJh
eSwgYmFzZVByb3BlcnR5KGluZGV4KSk7CgkgICAgICB9KTsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW56aXBgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMg
YGl0ZXJhdGVlYCB0byBzcGVjaWZ5CgkgICAgICogaG93IHJlZ3JvdXBlZCB2YWx1ZXMgc2hvdWxk
IGJlIGNvbWJpbmVkLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRoZQoJICAgICAqIGVs
ZW1lbnRzIG9mIGVhY2ggZ3JvdXA6ICguLi5ncm91cCkuCgkgICAgICoKCSAgICAgKiBAc3RhdGlj
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy44LjAKCSAgICAgKiBAY2F0ZWdv
cnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBl
ZCBlbGVtZW50cyB0byBwcm9jZXNzLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRl
ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZQoJICAgICAqICByZWdyb3VwZWQg
dmFsdWVzLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9m
IHJlZ3JvdXBlZCBlbGVtZW50cy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFy
IHppcHBlZCA9IF8uemlwKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0pOwoJICAgICAqIC8v
ID0+IFtbMSwgMTAsIDEwMF0sIFsyLCAyMCwgMjAwXV0KCSAgICAgKgoJICAgICAqIF8udW56aXBX
aXRoKHppcHBlZCwgXy5hZGQpOwoJICAgICAqIC8vID0+IFszLCAzMCwgMzAwXQoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIHVuemlwV2l0aChhcnJheSwgaXRlcmF0ZWUpIHsKCSAgICAgIGlmICghKGFy
cmF5ICYmIGFycmF5Lmxlbmd0aCkpIHsKCSAgICAgICAgcmV0dXJuIFtdOwoJICAgICAgfQoJICAg
ICAgdmFyIHJlc3VsdCA9IHVuemlwKGFycmF5KTsKCSAgICAgIGlmIChpdGVyYXRlZSA9PSBudWxs
KSB7CgkgICAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgICB9CgkgICAgICByZXR1cm4gYXJyYXlN
YXAocmVzdWx0LCBmdW5jdGlvbihncm91cCkgewoJICAgICAgICByZXR1cm4gYXBwbHkoaXRlcmF0
ZWUsIHVuZGVmaW5lZCwgZ3JvdXApOwoJICAgICAgfSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAg
KiBDcmVhdGVzIGFuIGFycmF5IGV4Y2x1ZGluZyBhbGwgZ2l2ZW4gdmFsdWVzIHVzaW5nCgkgICAg
ICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0y
NjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybykKCSAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNv
bnMuCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxgLCB0aGlzIG1ldGhv
ZCByZXR1cm5zIGEgbmV3IGFycmF5LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBt
ZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5Cgkg
ICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuCgkgICAgICog
QHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuCgkgICAgICogQHJl
dHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLgoJ
ICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLnhvcgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiBfLndpdGhvdXQoWzIsIDEsIDIsIDNdLCAxLCAyKTsKCSAgICAgKiAvLyA9PiBbM10K
CSAgICAgKi8KCSAgICB2YXIgd2l0aG91dCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1
ZXMpIHsKCSAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSkKCSAgICAgICAgPyBi
YXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzKQoJICAgICAgICA6IFtdOwoJICAgIH0pOwoKCSAg
ICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBpcyB0
aGUKCSAgICAgKiBbc3ltbWV0cmljIGRpZmZlcmVuY2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9y
Zy93aWtpL1N5bW1ldHJpY19kaWZmZXJlbmNlKQoJICAgICAqIG9mIHRoZSBnaXZlbiBhcnJheXMu
IFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzIGRldGVybWluZWQgYnkgdGhlIG9yZGVyCgkg
ICAgICogdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJ
ICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDIuNC4wCgkgICAgICogQGNhdGVnb3J5
IEFycmF5CgkgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBp
bnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9m
IGZpbHRlcmVkIHZhbHVlcy4KCSAgICAgKiBAc2VlIF8uZGlmZmVyZW5jZSwgXy53aXRob3V0Cgkg
ICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8ueG9yKFsyLCAxXSwgWzIsIDNdKTsKCSAg
ICAgKiAvLyA9PiBbMSwgM10KCSAgICAgKi8KCSAgICB2YXIgeG9yID0gYmFzZVJlc3QoZnVuY3Rp
b24oYXJyYXlzKSB7CgkgICAgICByZXR1cm4gYmFzZVhvcihhcnJheUZpbHRlcihhcnJheXMsIGlz
QXJyYXlMaWtlT2JqZWN0KSk7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9k
IGlzIGxpa2UgYF8ueG9yYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2gg
aXMKCSAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBn
ZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5CgkgICAgICogd2hpY2ggYnkgd2hpY2ggdGhleSdyZSBj
b21wYXJlZC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZAoJICAgICAq
IGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheXMuIFRoZSBpdGVyYXRlZSBpcyBp
bnZva2VkIHdpdGggb25lCgkgICAgICogYXJndW1lbnQ6ICh2YWx1ZSkuCgkgICAgICoKCSAgICAg
KiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAg
KiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUg
YXJyYXlzIHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8u
aWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LgoJICAgICAqIEByZXR1
cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy4KCSAg
ICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy54b3JCeShbMi4xLCAxLjJdLCBbMi4zLCAz
LjRdLCBNYXRoLmZsb29yKTsKCSAgICAgKiAvLyA9PiBbMS4yLCAzLjRdCgkgICAgICoKCSAgICAg
KiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLnhvckJ5
KFt7ICd4JzogMSB9XSwgW3sgJ3gnOiAyIH0sIHsgJ3gnOiAxIH1dLCAneCcpOwoJICAgICAqIC8v
ID0+IFt7ICd4JzogMiB9XQoJICAgICAqLwoJICAgIHZhciB4b3JCeSA9IGJhc2VSZXN0KGZ1bmN0
aW9uKGFycmF5cykgewoJICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpOwoJICAgICAg
aWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkgewoJICAgICAgICBpdGVyYXRlZSA9IHVu
ZGVmaW5lZDsKCSAgICAgIH0KCSAgICAgIHJldHVybiBiYXNlWG9yKGFycmF5RmlsdGVyKGFycmF5
cywgaXNBcnJheUxpa2VPYmplY3QpLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpOwoJICAgIH0p
OwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRo
YXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2ggaXMKCSAgICAgKiBpbnZva2VkIHRvIGNv
bXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlz
CgkgICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlz
LiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkCgkgICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAo
YXJyVmFsLCBvdGhWYWwpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICog
QHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LgoJICAgICAq
IEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBl
ciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5
IG9mIGZpbHRlcmVkIHZhbHVlcy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFy
IG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dOwoJICAg
ICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1d
OwoJICAgICAqCgkgICAgICogXy54b3JXaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTsK
CSAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dCgkg
ICAgICovCgkgICAgdmFyIHhvcldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHsKCSAg
ICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpOwoJICAgICAgY29tcGFyYXRvciA9IHR5
cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkOwoJ
ICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVj
dCksIHVuZGVmaW5lZCwgY29tcGFyYXRvcik7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIENy
ZWF0ZXMgYW4gYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cywgdGhlIGZpcnN0IG9mIHdoaWNoIGNv
bnRhaW5zIHRoZQoJICAgICAqIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBhcnJheXMsIHRo
ZSBzZWNvbmQgb2Ygd2hpY2ggY29udGFpbnMgdGhlCgkgICAgICogc2Vjb25kIGVsZW1lbnRzIG9m
IHRoZSBnaXZlbiBhcnJheXMsIGFuZCBzbyBvbi4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBB
cnJheQoJICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJv
Y2Vzcy4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBn
cm91cGVkIGVsZW1lbnRzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnppcChb
J2EnLCAnYiddLCBbMSwgMl0sIFt0cnVlLCBmYWxzZV0pOwoJICAgICAqIC8vID0+IFtbJ2EnLCAx
LCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXQoJICAgICAqLwoJICAgIHZhciB6aXAgPSBiYXNlUmVz
dCh1bnppcCk7CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZnJvbVBh
aXJzYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIHR3byBhcnJheXMsCgkgICAgICogb25lIG9mIHBy
b3BlcnR5IGlkZW50aWZpZXJzIGFuZCBvbmUgb2YgY29ycmVzcG9uZGluZyB2YWx1ZXMuCgkgICAg
ICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC40
LjAKCSAgICAgKiBAY2F0ZWdvcnkgQXJyYXkKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBbcHJvcHM9
W11dIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycy4KCSAgICAgKiBAcGFyYW0ge0FycmF5fSBbdmFs
dWVzPVtdXSBUaGUgcHJvcGVydHkgdmFsdWVzLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJl
dHVybnMgdGhlIG5ldyBvYmplY3QuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8u
emlwT2JqZWN0KFsnYScsICdiJ10sIFsxLCAyXSk7CgkgICAgICogLy8gPT4geyAnYSc6IDEsICdi
JzogMiB9CgkgICAgICovCgkgICAgZnVuY3Rpb24gemlwT2JqZWN0KHByb3BzLCB2YWx1ZXMpIHsK
CSAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGFz
c2lnblZhbHVlKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2Ug
YF8uemlwT2JqZWN0YCBleGNlcHQgdGhhdCBpdCBzdXBwb3J0cyBwcm9wZXJ0eSBwYXRocy4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0
LjEuMAoJICAgICAqIEBjYXRlZ29yeSBBcnJheQoJICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9w
cz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLgoJICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2
YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuCgkgICAgICogQHJldHVybnMge09iamVjdH0g
UmV0dXJucyB0aGUgbmV3IG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
Xy56aXBPYmplY3REZWVwKFsnYS5iWzBdLmMnLCAnYS5iWzFdLmQnXSwgWzEsIDJdKTsKCSAgICAg
KiAvLyA9PiB7ICdhJzogeyAnYic6IFt7ICdjJzogMSB9LCB7ICdkJzogMiB9XSB9IH0KCSAgICAg
Ki8KCSAgICBmdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLCB2YWx1ZXMpIHsKCSAgICAgIHJl
dHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGJhc2VTZXQpOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy56aXBgIGV4Y2Vw
dCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB0byBzcGVjaWZ5CgkgICAgICogaG93IGdyb3Vw
ZWQgdmFsdWVzIHNob3VsZCBiZSBjb21iaW5lZC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0
aCB0aGUKCSAgICAgKiBlbGVtZW50cyBvZiBlYWNoIGdyb3VwOiAoLi4uZ3JvdXApLgoJICAgICAq
CgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuOC4w
CgkgICAgICogQGNhdGVnb3J5IEFycmF5CgkgICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5
c10gVGhlIGFycmF5cyB0byBwcm9jZXNzLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVy
YXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gdG8gY29tYmluZQoJICAgICAqICBncm91cGVk
IHZhbHVlcy4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBv
ZiBncm91cGVkIGVsZW1lbnRzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnpp
cFdpdGgoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSwgZnVuY3Rpb24oYSwgYiwgYykgewoJ
ICAgICAqICAgcmV0dXJuIGEgKyBiICsgYzsKCSAgICAgKiB9KTsKCSAgICAgKiAvLyA9PiBbMTEx
LCAyMjJdCgkgICAgICovCgkgICAgdmFyIHppcFdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJh
eXMpIHsKCSAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoLAoJICAgICAgICAgIGl0ZXJh
dGVlID0gbGVuZ3RoID4gMSA/IGFycmF5c1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDsKCgkgICAg
ICBpdGVyYXRlZSA9IHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nID8gKGFycmF5cy5wb3Ao
KSwgaXRlcmF0ZWUpIDogdW5kZWZpbmVkOwoJICAgICAgcmV0dXJuIHVuemlwV2l0aChhcnJheXMs
IGl0ZXJhdGVlKTsKCSAgICB9KTsKCgkgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCSAgICAvKioK
CSAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB0aGF0IHdyYXBzIGB2
YWx1ZWAgd2l0aCBleHBsaWNpdCBtZXRob2QKCSAgICAgKiBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxl
ZC4gVGhlIHJlc3VsdCBvZiBzdWNoIHNlcXVlbmNlcyBtdXN0IGJlIHVud3JhcHBlZAoJICAgICAq
IHdpdGggYF8jdmFsdWVgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDEuMy4wCgkgICAgICogQGNhdGVnb3J5IFNlcQoJICAgICAqIEBw
YXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuCgkgICAgICogQHJldHVybnMge09iamVj
dH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciB1c2VycyA9IFsKCSAgICAgKiAgIHsgJ3VzZXInOiAn
YmFybmV5JywgICdhZ2UnOiAzNiB9LAoJICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2Fn
ZSc6IDQwIH0sCgkgICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9CgkgICAg
ICogXTsKCSAgICAgKgoJICAgICAqIHZhciB5b3VuZ2VzdCA9IF8KCSAgICAgKiAgIC5jaGFpbih1
c2VycykKCSAgICAgKiAgIC5zb3J0QnkoJ2FnZScpCgkgICAgICogICAubWFwKGZ1bmN0aW9uKG8p
IHsKCSAgICAgKiAgICAgcmV0dXJuIG8udXNlciArICcgaXMgJyArIG8uYWdlOwoJICAgICAqICAg
fSkKCSAgICAgKiAgIC5oZWFkKCkKCSAgICAgKiAgIC52YWx1ZSgpOwoJICAgICAqIC8vID0+ICdw
ZWJibGVzIGlzIDEnCgkgICAgICovCgkgICAgZnVuY3Rpb24gY2hhaW4odmFsdWUpIHsKCSAgICAg
IHZhciByZXN1bHQgPSBsb2Rhc2godmFsdWUpOwoJICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IHRy
dWU7CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBt
ZXRob2QgaW52b2tlcyBgaW50ZXJjZXB0b3JgIGFuZCByZXR1cm5zIGB2YWx1ZWAuIFRoZSBpbnRl
cmNlcHRvcgoJICAgICAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7ICh2YWx1ZSkuIFRo
ZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvCgkgICAgICogInRhcCBpbnRvIiBhIG1ldGhv
ZCBjaGFpbiBzZXF1ZW5jZSBpbiBvcmRlciB0byBtb2RpZnkgaW50ZXJtZWRpYXRlIHJlc3VsdHMu
CgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2lu
Y2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgU2VxCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBU
aGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLgoJICAgICAqIEBwYXJhbSB7RnVu
Y3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuCgkgICAgICogQHJldHVy
bnMgeyp9IFJldHVybnMgYHZhbHVlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
XyhbMSwgMiwgM10pCgkgICAgICogIC50YXAoZnVuY3Rpb24oYXJyYXkpIHsKCSAgICAgKiAgICAv
LyBNdXRhdGUgaW5wdXQgYXJyYXkuCgkgICAgICogICAgYXJyYXkucG9wKCk7CgkgICAgICogIH0p
CgkgICAgICogIC5yZXZlcnNlKCkKCSAgICAgKiAgLnZhbHVlKCk7CgkgICAgICogLy8gPT4gWzIs
IDFdCgkgICAgICovCgkgICAgZnVuY3Rpb24gdGFwKHZhbHVlLCBpbnRlcmNlcHRvcikgewoJICAg
ICAgaW50ZXJjZXB0b3IodmFsdWUpOwoJICAgICAgcmV0dXJuIHZhbHVlOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy50YXBgIGV4Y2VwdCB0aGF0IGl0IHJl
dHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLgoJICAgICAqIFRoZSBwdXJwb3NlIG9m
IHRoaXMgbWV0aG9kIGlzIHRvICJwYXNzIHRocnUiIHZhbHVlcyByZXBsYWNpbmcgaW50ZXJtZWRp
YXRlCgkgICAgICogcmVzdWx0cyBpbiBhIG1ldGhvZCBjaGFpbiBzZXF1ZW5jZS4KCSAgICAgKgoJ
ICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAuMAoJ
ICAgICAqIEBjYXRlZ29yeSBTZXEKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0
byBwcm92aWRlIHRvIGBpbnRlcmNlcHRvcmAuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaW50
ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0
dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIF8oJyAgYWJjICAnKQoJICAgICAqICAuY2hhaW4oKQoJICAgICAqICAudHJpbSgp
CgkgICAgICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7CgkgICAgICogICAgcmV0dXJuIFt2YWx1
ZV07CgkgICAgICogIH0pCgkgICAgICogIC52YWx1ZSgpOwoJICAgICAqIC8vID0+IFsnYWJjJ10K
CSAgICAgKi8KCSAgICBmdW5jdGlvbiB0aHJ1KHZhbHVlLCBpbnRlcmNlcHRvcikgewoJICAgICAg
cmV0dXJuIGludGVyY2VwdG9yKHZhbHVlKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMg
bWV0aG9kIGlzIHRoZSB3cmFwcGVyIHZlcnNpb24gb2YgYF8uYXRgLgoJICAgICAqCgkgICAgICog
QG5hbWUgYXQKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAxLjAuMAoJICAgICAq
IEBjYXRlZ29yeSBTZXEKCSAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0
aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9
IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLgoJICAgICAqIEBleGFt
cGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMg
fSB9LCA0XSB9OwoJICAgICAqCgkgICAgICogXyhvYmplY3QpLmF0KFsnYVswXS5iLmMnLCAnYVsx
XSddKS52YWx1ZSgpOwoJICAgICAqIC8vID0+IFszLCA0XQoJICAgICAqLwoJICAgIHZhciB3cmFw
cGVyQXQgPSBmbGF0UmVzdChmdW5jdGlvbihwYXRocykgewoJICAgICAgdmFyIGxlbmd0aCA9IHBh
dGhzLmxlbmd0aCwKCSAgICAgICAgICBzdGFydCA9IGxlbmd0aCA/IHBhdGhzWzBdIDogMCwKCSAg
ICAgICAgICB2YWx1ZSA9IHRoaXMuX193cmFwcGVkX18sCgkgICAgICAgICAgaW50ZXJjZXB0b3Ig
PSBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGJhc2VBdChvYmplY3QsIHBhdGhzKTsgfTsKCgkg
ICAgICBpZiAobGVuZ3RoID4gMSB8fCB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCB8fAoJICAgICAg
ICAgICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgfHwgIWlzSW5kZXgoc3RhcnQpKSB7
CgkgICAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpOwoJICAgICAgfQoJICAgICAg
dmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgK3N0YXJ0ICsgKGxlbmd0aCA/IDEgOiAwKSk7Cgkg
ICAgICB2YWx1ZS5fX2FjdGlvbnNfXy5wdXNoKHsKCSAgICAgICAgJ2Z1bmMnOiB0aHJ1LAoJICAg
ICAgICAnYXJncyc6IFtpbnRlcmNlcHRvcl0sCgkgICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVk
CgkgICAgICB9KTsKCSAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSwgdGhpcy5f
X2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpIHsKCSAgICAgICAgaWYgKGxlbmd0aCAmJiAh
YXJyYXkubGVuZ3RoKSB7CgkgICAgICAgICAgYXJyYXkucHVzaCh1bmRlZmluZWQpOwoJICAgICAg
ICB9CgkgICAgICAgIHJldHVybiBhcnJheTsKCSAgICAgIH0pOwoJICAgIH0pOwoKCSAgICAvKioK
CSAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZSB3aXRoIGV4cGxpY2l0
IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMgZW5hYmxlZC4KCSAgICAgKgoJICAgICAqIEBuYW1lIGNo
YWluCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0
ZWdvcnkgU2VxCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rh
c2hgIHdyYXBwZXIgaW5zdGFuY2UuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZh
ciB1c2VycyA9IFsKCSAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH0sCgkg
ICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9CgkgICAgICogXTsKCSAgICAg
KgoJICAgICAqIC8vIEEgc2VxdWVuY2Ugd2l0aG91dCBleHBsaWNpdCBjaGFpbmluZy4KCSAgICAg
KiBfKHVzZXJzKS5oZWFkKCk7CgkgICAgICogLy8gPT4geyAndXNlcic6ICdiYXJuZXknLCAnYWdl
JzogMzYgfQoJICAgICAqCgkgICAgICogLy8gQSBzZXF1ZW5jZSB3aXRoIGV4cGxpY2l0IGNoYWlu
aW5nLgoJICAgICAqIF8odXNlcnMpCgkgICAgICogICAuY2hhaW4oKQoJICAgICAqICAgLmhlYWQo
KQoJICAgICAqICAgLnBpY2soJ3VzZXInKQoJICAgICAqICAgLnZhbHVlKCk7CgkgICAgICogLy8g
PT4geyAndXNlcic6ICdiYXJuZXknIH0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiB3cmFwcGVyQ2hh
aW4oKSB7CgkgICAgICByZXR1cm4gY2hhaW4odGhpcyk7CgkgICAgfQoKCSAgICAvKioKCSAgICAg
KiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgYW5kIHJldHVybnMgdGhlIHdyYXBwZWQgcmVz
dWx0LgoJICAgICAqCgkgICAgICogQG5hbWUgY29tbWl0CgkgICAgICogQG1lbWJlck9mIF8KCSAg
ICAgKiBAc2luY2UgMy4yLjAKCSAgICAgKiBAY2F0ZWdvcnkgU2VxCgkgICAgICogQHJldHVybnMg
e09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuCgkgICAg
ICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBhcnJheSA9IFsxLCAyXTsKCSAgICAgKiB2
YXIgd3JhcHBlZCA9IF8oYXJyYXkpLnB1c2goMyk7CgkgICAgICoKCSAgICAgKiBjb25zb2xlLmxv
ZyhhcnJheSk7CgkgICAgICogLy8gPT4gWzEsIDJdCgkgICAgICoKCSAgICAgKiB3cmFwcGVkID0g
d3JhcHBlZC5jb21taXQoKTsKCSAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7CgkgICAgICogLy8g
PT4gWzEsIDIsIDNdCgkgICAgICoKCSAgICAgKiB3cmFwcGVkLmxhc3QoKTsKCSAgICAgKiAvLyA9
PiAzCgkgICAgICoKCSAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7CgkgICAgICogLy8gPT4gWzEs
IDIsIDNdCgkgICAgICovCgkgICAgZnVuY3Rpb24gd3JhcHBlckNvbW1pdCgpIHsKCSAgICAgIHJl
dHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgb24gYSB3cmFwcGVkIG9i
amVjdCBmb2xsb3dpbmcgdGhlCgkgICAgICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21k
bi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS4KCSAgICAgKgoJICAgICAqIEBuYW1l
IG5leHQKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBj
YXRlZ29yeSBTZXEKCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0
ZXJhdG9yIHZhbHVlLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgd3JhcHBl
ZCA9IF8oWzEsIDJdKTsKCSAgICAgKgoJICAgICAqIHdyYXBwZWQubmV4dCgpOwoJICAgICAqIC8v
ID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9CgkgICAgICoKCSAgICAgKiB3cmFwcGVk
Lm5leHQoKTsKCSAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfQoJICAg
ICAqCgkgICAgICogd3JhcHBlZC5uZXh0KCk7CgkgICAgICogLy8gPT4geyAnZG9uZSc6IHRydWUs
ICd2YWx1ZSc6IHVuZGVmaW5lZCB9CgkgICAgICovCgkgICAgZnVuY3Rpb24gd3JhcHBlck5leHQo
KSB7CgkgICAgICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAg
dGhpcy5fX3ZhbHVlc19fID0gdG9BcnJheSh0aGlzLnZhbHVlKCkpOwoJICAgICAgfQoJICAgICAg
dmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLAoJICAg
ICAgICAgIHZhbHVlID0gZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMuX192YWx1ZXNfX1t0aGlzLl9f
aW5kZXhfXysrXTsKCgkgICAgICByZXR1cm4geyAnZG9uZSc6IGRvbmUsICd2YWx1ZSc6IHZhbHVl
IH07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBFbmFibGVzIHRoZSB3cmFwcGVyIHRvIGJlIGl0
ZXJhYmxlLgoJICAgICAqCgkgICAgICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yCgkgICAgICogQG1l
bWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU2VxCgkgICAg
ICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgd3JhcHBlciBvYmplY3QuCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pOwoJICAgICAq
CgkgICAgICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7CgkgICAgICog
Ly8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogQXJyYXkuZnJvbSh3cmFwcGVkKTsKCSAgICAgKiAv
LyA9PiBbMSwgMl0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHsK
CSAgICAgIHJldHVybiB0aGlzOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGNs
b25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVk
IHZhbHVlLgoJICAgICAqCgkgICAgICogQG5hbWUgcGxhbnQKCSAgICAgKiBAbWVtYmVyT2YgXwoJ
ICAgICAqIEBzaW5jZSAzLjIuMAoJICAgICAqIEBjYXRlZ29yeSBTZXEKCSAgICAgKiBAcGFyYW0g
eyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBS
ZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS4KCSAgICAgKiBAZXhhbXBs
ZQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHsKCSAgICAgKiAgIHJldHVybiBu
ICogbjsKCSAgICAgKiB9CgkgICAgICoKCSAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKS5t
YXAoc3F1YXJlKTsKCSAgICAgKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7Cgkg
ICAgICoKCSAgICAgKiBvdGhlci52YWx1ZSgpOwoJICAgICAqIC8vID0+IFs5LCAxNl0KCSAgICAg
KgoJICAgICAqIHdyYXBwZWQudmFsdWUoKTsKCSAgICAgKiAvLyA9PiBbMSwgNF0KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiB3cmFwcGVyUGxhbnQodmFsdWUpIHsKCSAgICAgIHZhciByZXN1bHQsCgkg
ICAgICAgICAgcGFyZW50ID0gdGhpczsKCgkgICAgICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2Yg
YmFzZUxvZGFzaCkgewoJICAgICAgICB2YXIgY2xvbmUgPSB3cmFwcGVyQ2xvbmUocGFyZW50KTsK
CSAgICAgICAgY2xvbmUuX19pbmRleF9fID0gMDsKCSAgICAgICAgY2xvbmUuX192YWx1ZXNfXyA9
IHVuZGVmaW5lZDsKCSAgICAgICAgaWYgKHJlc3VsdCkgewoJICAgICAgICAgIHByZXZpb3VzLl9f
d3JhcHBlZF9fID0gY2xvbmU7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgcmVzdWx0ID0g
Y2xvbmU7CgkgICAgICAgIH0KCSAgICAgICAgdmFyIHByZXZpb3VzID0gY2xvbmU7CgkgICAgICAg
IHBhcmVudCA9IHBhcmVudC5fX3dyYXBwZWRfXzsKCSAgICAgIH0KCSAgICAgIHByZXZpb3VzLl9f
d3JhcHBlZF9fID0gdmFsdWU7CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5yZXZlcnNl
YC4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFw
cGVkIGFycmF5LgoJICAgICAqCgkgICAgICogQG5hbWUgcmV2ZXJzZQoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IFNlcQoJICAgICAqIEBy
ZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNl
LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107
CgkgICAgICoKCSAgICAgKiBfKGFycmF5KS5yZXZlcnNlKCkudmFsdWUoKQoJICAgICAqIC8vID0+
IFszLCAyLCAxXQoJICAgICAqCgkgICAgICogY29uc29sZS5sb2coYXJyYXkpOwoJICAgICAqIC8v
ID0+IFszLCAyLCAxXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkgewoJ
ICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXzsKCSAgICAgIGlmICh2YWx1ZSBpbnN0
YW5jZW9mIExhenlXcmFwcGVyKSB7CgkgICAgICAgIHZhciB3cmFwcGVkID0gdmFsdWU7CgkgICAg
ICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkgewoJICAgICAgICAgIHdyYXBwZWQgPSBu
ZXcgTGF6eVdyYXBwZXIodGhpcyk7CgkgICAgICAgIH0KCSAgICAgICAgd3JhcHBlZCA9IHdyYXBw
ZWQucmV2ZXJzZSgpOwoJICAgICAgICB3cmFwcGVkLl9fYWN0aW9uc19fLnB1c2goewoJICAgICAg
ICAgICdmdW5jJzogdGhydSwKCSAgICAgICAgICAnYXJncyc6IFtyZXZlcnNlXSwKCSAgICAgICAg
ICAndGhpc0FyZyc6IHVuZGVmaW5lZAoJICAgICAgICB9KTsKCSAgICAgICAgcmV0dXJuIG5ldyBM
b2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTsKCSAgICAgIH0KCSAgICAgIHJl
dHVybiB0aGlzLnRocnUocmV2ZXJzZSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBFeGVjdXRl
cyB0aGUgY2hhaW4gc2VxdWVuY2UgdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLgoJICAg
ICAqCgkgICAgICogQG5hbWUgdmFsdWUKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSAwLjEuMAoJICAgICAqIEBhbGlhcyB0b0pTT04sIHZhbHVlT2YKCSAgICAgKiBAY2F0ZWdvcnkg
U2VxCgkgICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHVud3JhcHBlZCB2
YWx1ZS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXyhbMSwgMiwgM10pLnZhbHVl
KCk7CgkgICAgICogLy8gPT4gWzEsIDIsIDNdCgkgICAgICovCgkgICAgZnVuY3Rpb24gd3JhcHBl
clZhbHVlKCkgewoJICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRf
XywgdGhpcy5fX2FjdGlvbnNfXyk7CgkgICAgfQoKCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJ
ICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJh
dGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZwoJICAgICAqIGVhY2ggZWxlbWVudCBvZiBg
Y29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZgoJ
ICAgICAqIGVhY2gga2V5IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGtleSB3YXMgcmV0dXJu
ZWQgYnkgYGl0ZXJhdGVlYC4gVGhlCgkgICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9u
ZSBhcmd1bWVudDogKHZhbHVlKS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVt
YmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjUuMAoJICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9u
CgkgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24g
dG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlk
ZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuCgkgICAgICogQHJldHVybnMg
e09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC4KCSAgICAgKiBA
ZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5jb3VudEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5m
bG9vcik7CgkgICAgICogLy8gPT4geyAnNCc6IDEsICc2JzogMiB9CgkgICAgICoKCSAgICAgKiAv
LyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmNvdW50Qnko
WydvbmUnLCAndHdvJywgJ3RocmVlJ10sICdsZW5ndGgnKTsKCSAgICAgKiAvLyA9PiB7ICczJzog
MiwgJzUnOiAxIH0KCSAgICAgKi8KCSAgICB2YXIgY291bnRCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3Io
ZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CgkgICAgICBpZiAoaGFzT3duUHJvcGVydHku
Y2FsbChyZXN1bHQsIGtleSkpIHsKCSAgICAgICAgKytyZXN1bHRba2V5XTsKCSAgICAgIH0gZWxz
ZSB7CgkgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgMSk7CgkgICAgICB9Cgkg
ICAgfSk7CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRy
dXRoeSBmb3IgKiphbGwqKiBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAuCgkgICAgICogSXRlcmF0
aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRp
Y2F0ZSBpcwoJICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5k
ZXh8a2V5LCBjb2xsZWN0aW9uKS4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhv
ZCByZXR1cm5zIGB0cnVlYCBmb3IKCSAgICAgKiBbZW1wdHkgY29sbGVjdGlvbnNdKGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL0VtcHR5X3NldCkgYmVjYXVzZQoJICAgICAqIFtldmVyeXRo
aW5nIGlzIHRydWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhY3VvdXNfdHJ1dGgp
IG9mCgkgICAgICogZWxlbWVudHMgb2YgZW1wdHkgY29sbGVjdGlvbnMuCgkgICAgICoKCSAgICAg
KiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAg
KiBAY2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xs
ZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1
bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBp
dGVyYXRpb24uCgkgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFz
IGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC4KCSAgICAgKiBAcmV0dXJucyB7
Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0
ZSBjaGVjaywKCSAgICAgKiAgZWxzZSBgZmFsc2VgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiBfLmV2ZXJ5KFt0cnVlLCAxLCBudWxsLCAneWVzJ10sIEJvb2xlYW4pOwoJICAgICAq
IC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1
c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sCgkgICAgICogICB7
ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0KCSAgICAgKiBd
OwoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC4K
CSAgICAgKiBfLmV2ZXJ5KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxz
ZSB9KTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNo
ZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZXZlcnkodXNlcnMsIFsn
YWN0aXZlJywgZmFsc2VdKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiAvLyBU
aGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmV2ZXJ5KHVzZXJz
LCAnYWN0aXZlJyk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBl
dmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7CgkgICAgICB2YXIgZnVuYyA9IGlz
QXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5OwoJICAgICAgaWYgKGd1
YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7Cgkg
ICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDsKCSAgICAgIH0KCSAgICAgIHJldHVybiBmdW5j
KGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmlu
ZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHMKCSAgICAgKiBgcHJlZGljYXRlYCByZXR1cm5zIHRy
dXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHRocmVlCgkgICAgICogYXJn
dW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuCgkgICAgICoKCSAgICAgKiAq
Kk5vdGU6KiogVW5saWtlIGBfLnJlbW92ZWAsIHRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgYXJy
YXkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBA
c2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAqIEBwYXJhbSB7
QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4K
CSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5j
dGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1
cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuCgkgICAgICogQHNlZSBfLnJlamVjdAoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1c2Vy
JzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSwKCSAgICAgKiAgIHsgJ3Vz
ZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfQoJICAgICAqIF07Cgkg
ICAgICoKCSAgICAgKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0
aXZlOyB9KTsKCSAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXQoJICAgICAqCgkgICAg
ICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbHRl
cih1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pOwoJICAgICAqIC8vID0+IG9i
amVjdHMgZm9yIFsnYmFybmV5J10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJv
cGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbHRlcih1c2VycywgWydhY3Rp
dmUnLCBmYWxzZV0pOwoJICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddCgkgICAgICoK
CSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBf
LmZpbHRlcih1c2VycywgJ2FjdGl2ZScpOwoJICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFy
bmV5J10KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRl
KSB7CgkgICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6
IGJhc2VGaWx0ZXI7CgkgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShw
cmVkaWNhdGUsIDMpKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxl
bWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnQKCSAgICAg
KiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tl
ZCB3aXRoIHRocmVlCgkgICAgICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVj
dGlvbikuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAqIEBwYXJh
bSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuCgkg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rp
b24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUlu
ZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0
dXJucyB0aGUgbWF0Y2hlZCBlbGVtZW50LCBlbHNlIGB1bmRlZmluZWRgLgoJICAgICAqIEBleGFt
cGxlCgkgICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1c2VyJzogJ2Jh
cm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sCgkgICAgICogICB7ICd1c2VyJzog
J2ZyZWQnLCAgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9LAoJICAgICAqICAgeyAndXNl
cic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9CgkgICAgICogXTsKCSAg
ICAgKgoJICAgICAqIF8uZmluZCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0
MDsgfSk7CgkgICAgICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5JwoJICAgICAqCgkgICAgICog
Ly8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbmQodXNl
cnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pOwoJICAgICAqIC8vID0+IG9iamVjdCBm
b3IgJ3BlYmJsZXMnCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBp
dGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5maW5kKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNl
XSk7CgkgICAgICogLy8gPT4gb2JqZWN0IGZvciAnZnJlZCcKCSAgICAgKgoJICAgICAqIC8vIFRo
ZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZmluZCh1c2Vycywg
J2FjdGl2ZScpOwoJICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leScKCSAgICAgKi8KCSAg
ICB2YXIgZmluZCA9IGNyZWF0ZUZpbmQoZmluZEluZGV4KTsKCgkgICAgLyoqCgkgICAgICogVGhp
cyBtZXRob2QgaXMgbGlrZSBgXy5maW5kYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVs
ZW1lbnRzIG9mCgkgICAgICogYGNvbGxlY3Rpb25gIGZyb20gcmlnaHQgdG8gbGVmdC4KCSAgICAg
KgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAyLjAu
MAoJICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmpl
Y3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC4KCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBl
ciBpdGVyYXRpb24uCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9Y29sbGVjdGlv
bi5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLgoJICAgICAqIEByZXR1cm5zIHsq
fSBSZXR1cm5zIHRoZSBtYXRjaGVkIGVsZW1lbnQsIGVsc2UgYHVuZGVmaW5lZGAuCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uZmluZExhc3QoWzEsIDIsIDMsIDRdLCBmdW5jdGlv
bihuKSB7CgkgICAgICogICByZXR1cm4gbiAlIDIgPT0gMTsKCSAgICAgKiB9KTsKCSAgICAgKiAv
LyA9PiAzCgkgICAgICovCgkgICAgdmFyIGZpbmRMYXN0ID0gY3JlYXRlRmluZChmaW5kTGFzdElu
ZGV4KTsKCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZsYXR0ZW5lZCBhcnJheSBvZiB2YWx1
ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gCgkgICAgICogdGhydSBg
aXRlcmF0ZWVgIGFuZCBmbGF0dGVuaW5nIHRoZSBtYXBwZWQgcmVzdWx0cy4gVGhlIGl0ZXJhdGVl
IGlzIGludm9rZWQKCSAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxr
ZXksIGNvbGxlY3Rpb24pLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb24KCSAg
ICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBp
dGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRp
dHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJldHVybnMg
e0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LgoJICAgICAqIEBleGFtcGxl
CgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikgewoJICAgICAqICAgcmV0dXJu
IFtuLCBuXTsKCSAgICAgKiB9CgkgICAgICoKCSAgICAgKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBs
aWNhdGUpOwoJICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXQoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGZsYXRNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHsKCSAgICAgIHJldHVybiBiYXNlRmxhdHRl
bihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCAxKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZl
bHkgZmxhdHRlbnMgdGhlCgkgICAgICogbWFwcGVkIHJlc3VsdHMuCgkgICAgICoKCSAgICAgKiBA
c3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC43LjAKCSAgICAgKiBA
Y2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0
aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0
aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJh
dGlvbi4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQg
YXJyYXkuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIGR1cGxpY2F0
ZShuKSB7CgkgICAgICogICByZXR1cm4gW1tbbiwgbl1dXTsKCSAgICAgKiB9CgkgICAgICoKCSAg
ICAgKiBfLmZsYXRNYXBEZWVwKFsxLCAyXSwgZHVwbGljYXRlKTsKCSAgICAgKiAvLyA9PiBbMSwg
MSwgMiwgMl0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmbGF0TWFwRGVlcChjb2xsZWN0aW9uLCBp
dGVyYXRlZSkgewoJICAgICAgcmV0dXJuIGJhc2VGbGF0dGVuKG1hcChjb2xsZWN0aW9uLCBpdGVy
YXRlZSksIElORklOSVRZKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlz
IGxpa2UgYF8uZmxhdE1hcGAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgZmxhdHRlbnMgdGhl
CgkgICAgICogbWFwcGVkIHJlc3VsdHMgdXAgdG8gYGRlcHRoYCB0aW1lcy4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjcuMAoJICAg
ICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNv
bGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIg
aXRlcmF0aW9uLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVwdGg9MV0gVGhlIG1heGltdW0g
cmVjdXJzaW9uIGRlcHRoLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3
IGZsYXR0ZW5lZCBhcnJheS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rp
b24gZHVwbGljYXRlKG4pIHsKCSAgICAgKiAgIHJldHVybiBbW1tuLCBuXV1dOwoJICAgICAqIH0K
CSAgICAgKgoJICAgICAqIF8uZmxhdE1hcERlcHRoKFsxLCAyXSwgZHVwbGljYXRlLCAyKTsKCSAg
ICAgKiAvLyA9PiBbWzEsIDFdLCBbMiwgMl1dCgkgICAgICovCgkgICAgZnVuY3Rpb24gZmxhdE1h
cERlcHRoKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBkZXB0aCkgewoJICAgICAgZGVwdGggPSBkZXB0
aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7CgkgICAgICByZXR1cm4gYmFz
ZUZsYXR0ZW4obWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSwgZGVwdGgpOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGlu
dm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LgoJICAgICAqIFRoZSBpdGVyYXRlZSBp
cyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVj
dGlvbikuCgkgICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJs
eSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLgoJICAgICAqCgkgICAgICogKipOb3Rl
OioqIEFzIHdpdGggb3RoZXIgIkNvbGxlY3Rpb25zIiBtZXRob2RzLCBvYmplY3RzIHdpdGggYSAi
bGVuZ3RoIgoJICAgICAqIHByb3BlcnR5IGFyZSBpdGVyYXRlZCBsaWtlIGFycmF5cy4gVG8gYXZv
aWQgdGhpcyBiZWhhdmlvciB1c2UgYF8uZm9ySW5gCgkgICAgICogb3IgYF8uZm9yT3duYCBmb3Ig
b2JqZWN0IGl0ZXJhdGlvbi4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVy
T2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBhbGlhcyBlYWNoCgkgICAgICogQGNh
dGVnb3J5IENvbGxlY3Rpb24KCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlv
biBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlv
bn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRp
b24uCgkgICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAu
CgkgICAgICogQHNlZSBfLmZvckVhY2hSaWdodAoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiBfLmZvckVhY2goWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkgewoJICAgICAqICAgY29uc29s
ZS5sb2codmFsdWUpOwoJICAgICAqIH0pOwoJICAgICAqIC8vID0+IExvZ3MgYDFgIHRoZW4gYDJg
LgoJICAgICAqCgkgICAgICogXy5mb3JFYWNoKHsgJ2EnOiAxLCAnYic6IDIgfSwgZnVuY3Rpb24o
dmFsdWUsIGtleSkgewoJICAgICAqICAgY29uc29sZS5sb2coa2V5KTsKCSAgICAgKiB9KTsKCSAg
ICAgKiAvLyA9PiBMb2dzICdhJyB0aGVuICdiJyAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFy
YW50ZWVkKS4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmb3JFYWNoKGNvbGxlY3Rpb24sIGl0ZXJh
dGVlKSB7CgkgICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUVhY2gg
OiBiYXNlRWFjaDsKCSAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0
ZXJhdGVlLCAzKSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtl
IGBfLmZvckVhY2hgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YKCSAg
ICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDIuMC4wCgkgICAgICogQGFs
aWFzIGVhY2hSaWdodAoJICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFt
IHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVy
LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVu
Y3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmpl
Y3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLgoJICAgICAqIEBzZWUgXy5mb3JFYWNoCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uZm9yRWFjaFJpZ2h0KFsxLCAyXSwgZnVuY3Rpb24o
dmFsdWUpIHsKCSAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTsKCSAgICAgKiB9KTsKCSAgICAg
KiAvLyA9PiBMb2dzIGAyYCB0aGVuIGAxYC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmb3JFYWNo
UmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHsKCSAgICAgIHZhciBmdW5jID0gaXNBcnJheShj
b2xsZWN0aW9uKSA/IGFycmF5RWFjaFJpZ2h0IDogYmFzZUVhY2hSaWdodDsKCSAgICAgIHJldHVy
biBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7CgkgICAgfQoKCSAg
ICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRl
ZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcKCSAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNv
bGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzCgkg
ICAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiBgY29sbGVjdGlv
bmAuIFRoZSBjb3JyZXNwb25kaW5nCgkgICAgICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJy
YXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlCgkgICAgICoga2V5
LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAw
LjEuMAoJICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFtIHtBcnJheXxP
YmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAq
IEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8g
dHJhbnNmb3JtIGtleXMuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29t
cG9zZWQgYWdncmVnYXRlIG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
Xy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7CgkgICAgICogLy8gPT4geyAn
NCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLnBy
b3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3
bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7CgkgICAgICogLy8gPT4geyAnMyc6IFsnb25lJywgJ3R3
byddLCAnNSc6IFsndGhyZWUnXSB9CgkgICAgICovCgkgICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVB
Z2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgewoJICAgICAgaWYgKGhhc093
blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7CgkgICAgICAgIHJlc3VsdFtrZXldLnB1c2go
dmFsdWUpOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwg
a2V5LCBbdmFsdWVdKTsKCSAgICAgIH0KCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogQ2hlY2tz
IGlmIGB2YWx1ZWAgaXMgaW4gYGNvbGxlY3Rpb25gLiBJZiBgY29sbGVjdGlvbmAgaXMgYSBzdHJp
bmcsIGl0J3MKCSAgICAgKiBjaGVja2VkIGZvciBhIHN1YnN0cmluZyBvZiBgdmFsdWVgLCBvdGhl
cndpc2UKCSAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFs
Lm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKQoJICAgICAqIGlzIHVzZWQgZm9y
IGVxdWFsaXR5IGNvbXBhcmlzb25zLiBJZiBgZnJvbUluZGV4YCBpcyBuZWdhdGl2ZSwgaXQncyB1
c2VkIGFzCgkgICAgICogdGhlIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGNvbGxlY3Rpb25gLgoJ
ICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNl
IDAuMS4wCgkgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb24KCSAgICAgKiBAcGFyYW0ge0FycmF5
fE9iamVjdHxzdHJpbmd9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaW5zcGVjdC4KCSAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgoJICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS4KCSAg
ICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUg
Zm9yIG1ldGhvZHMgbGlrZSBgXy5yZWR1Y2VgLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBS
ZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaW5jbHVkZXMoWzEsIDIsIDNdLCAxKTsKCSAgICAg
KiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSwgMik7
CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKgoJICAgICAqIF8uaW5jbHVkZXMoeyAnYSc6IDEs
ICdiJzogMiB9LCAxKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmluY2x1
ZGVzKCdhYmNkJywgJ2JjJyk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqLwoJICAgIGZ1bmN0
aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgsIGd1YXJkKSB7CgkgICAg
ICBjb2xsZWN0aW9uID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBjb2xsZWN0aW9uIDogdmFs
dWVzKGNvbGxlY3Rpb24pOwoJICAgICAgZnJvbUluZGV4ID0gKGZyb21JbmRleCAmJiAhZ3VhcmQp
ID8gdG9JbnRlZ2VyKGZyb21JbmRleCkgOiAwOwoKCSAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0
aW9uLmxlbmd0aDsKCSAgICAgIGlmIChmcm9tSW5kZXggPCAwKSB7CgkgICAgICAgIGZyb21JbmRl
eCA9IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApOwoJICAgICAgfQoJICAgICAgcmV0
dXJuIGlzU3RyaW5nKGNvbGxlY3Rpb24pCgkgICAgICAgID8gKGZyb21JbmRleCA8PSBsZW5ndGgg
JiYgY29sbGVjdGlvbi5pbmRleE9mKHZhbHVlLCBmcm9tSW5kZXgpID4gLTEpCgkgICAgICAgIDog
KCEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGNvbGxlY3Rpb24sIHZhbHVlLCBmcm9tSW5kZXgpID4g
LTEpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRo
YCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcKCSAgICAgKiBhbiBh
cnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25h
bCBhcmd1bWVudHMKCSAgICAgKiBhcmUgcHJvdmlkZWQgdG8gZWFjaCBpbnZva2VkIG1ldGhvZC4g
SWYgYHBhdGhgIGlzIGEgZnVuY3Rpb24sIGl0J3MgaW52b2tlZAoJICAgICAqIGZvciwgYW5kIGB0
aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAg
ICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNv
bGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7
QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52
b2tlIG9yCgkgICAgICogIHRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAg
ICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgZWFjaCBtZXRo
b2Qgd2l0aC4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJl
c3VsdHMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaW52b2tlTWFwKFtbNSwg
MSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7CgkgICAgICogLy8gPT4gW1sxLCA1LCA3XSwgWzEs
IDIsIDNdXQoJICAgICAqCgkgICAgICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnBy
b3RvdHlwZS5zcGxpdCwgJycpOwoJICAgICAqIC8vID0+IFtbJzEnLCAnMicsICczJ10sIFsnNCcs
ICc1JywgJzYnXV0KCSAgICAgKi8KCSAgICB2YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rp
b24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykgewoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAg
ICAgICAgaXNGdW5jID0gdHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJywKCSAgICAgICAgICByZXN1
bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6
IFtdOwoKCSAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7CgkgICAg
ICAgIHJlc3VsdFsrK2luZGV4XSA9IGlzRnVuYyA/IGFwcGx5KHBhdGgsIHZhbHVlLCBhcmdzKSA6
IGJhc2VJbnZva2UodmFsdWUsIHBhdGgsIGFyZ3MpOwoJICAgICAgfSk7CgkgICAgICByZXR1cm4g
cmVzdWx0OwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21w
b3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcKCSAgICAg
KiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGNvcnJl
c3BvbmRpbmcgdmFsdWUgb2YKCSAgICAgKiBlYWNoIGtleSBpcyB0aGUgbGFzdCBlbGVtZW50IHJl
c3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHRoZSBrZXkuIFRoZQoJICAgICAqIGl0ZXJhdGVlIGlz
IGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuCgkgICAgICoKCSAgICAgKiBAc3Rh
dGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0
ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9u
IFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9u
fSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLgoJ
ICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbXBvc2VkIGFnZ3JlZ2F0ZSBv
YmplY3QuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBhcnJheSA9IFsKCSAg
ICAgKiAgIHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LAoJICAgICAqICAgeyAnZGlyJzog
J3JpZ2h0JywgJ2NvZGUnOiAxMDAgfQoJICAgICAqIF07CgkgICAgICoKCSAgICAgKiBfLmtleUJ5
KGFycmF5LCBmdW5jdGlvbihvKSB7CgkgICAgICogICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k
ZShvLmNvZGUpOwoJICAgICAqIH0pOwoJICAgICAqIC8vID0+IHsgJ2EnOiB7ICdkaXInOiAnbGVm
dCcsICdjb2RlJzogOTcgfSwgJ2QnOiB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9IH0K
CSAgICAgKgoJICAgICAqIF8ua2V5QnkoYXJyYXksICdkaXInKTsKCSAgICAgKiAvLyA9PiB7ICds
ZWZ0JzogeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sICdyaWdodCc6IHsgJ2Rpcic6ICdy
aWdodCcsICdjb2RlJzogMTAwIH0gfQoJICAgICAqLwoJICAgIHZhciBrZXlCeSA9IGNyZWF0ZUFn
Z3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CgkgICAgICBiYXNlQXNzaWdu
VmFsdWUocmVzdWx0LCBrZXksIHZhbHVlKTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogQ3Jl
YXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxl
Y3Rpb25gIHRocnUKCSAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3
aXRoIHRocmVlIGFyZ3VtZW50czoKCSAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlv
bikuCgkgICAgICoKCSAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdv
cmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2UKCSAgICAgKiBgXy5ldmVyeWAsIGBfLmZp
bHRlcmAsIGBfLm1hcGAsIGBfLm1hcFZhbHVlc2AsIGBfLnJlamVjdGAsIGFuZCBgXy5zb21lYC4K
CSAgICAgKgoJICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOgoJICAgICAqIGBhcnlgLCBg
Y2h1bmtgLCBgY3VycnlgLCBgY3VycnlSaWdodGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBldmVy
eWAsCgkgICAgICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5n
ZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsCgkgICAgICogYHNhbXBsZVNpemVgLCBgc2xpY2Vg
LCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLAoJICAgICAq
IGB0ZW1wbGF0ZWAsIGB0cmltYCwgYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYW5kIGB3b3Jkc2AK
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFtIHtBcnJh
eXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAg
ICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24g
aW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0
aGUgbmV3IG1hcHBlZCBhcnJheS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVu
Y3Rpb24gc3F1YXJlKG4pIHsKCSAgICAgKiAgIHJldHVybiBuICogbjsKCSAgICAgKiB9CgkgICAg
ICoKCSAgICAgKiBfLm1hcChbNCwgOF0sIHNxdWFyZSk7CgkgICAgICogLy8gPT4gWzE2LCA2NF0K
CSAgICAgKgoJICAgICAqIF8ubWFwKHsgJ2EnOiA0LCAnYic6IDggfSwgc3F1YXJlKTsKCSAgICAg
KiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKQoJICAg
ICAqCgkgICAgICogdmFyIHVzZXJzID0gWwoJICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0s
CgkgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH0KCSAgICAgKiBdOwoJICAgICAqCgkgICAgICog
Ly8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5tYXAodXNl
cnMsICd1c2VyJyk7CgkgICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddCgkgICAgICovCgkg
ICAgZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7CgkgICAgICB2YXIgZnVuYyA9
IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7CgkgICAgICByZXR1cm4g
ZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zb3J0QnlgIGV4Y2VwdCB0aGF0IGl0
IGFsbG93cyBzcGVjaWZ5aW5nIHRoZSBzb3J0CgkgICAgICogb3JkZXJzIG9mIHRoZSBpdGVyYXRl
ZXMgdG8gc29ydCBieS4gSWYgYG9yZGVyc2AgaXMgdW5zcGVjaWZpZWQsIGFsbCB2YWx1ZXMKCSAg
ICAgKiBhcmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlci4gT3RoZXJ3aXNlLCBzcGVjaWZ5IGFu
IG9yZGVyIG9mICJkZXNjIiBmb3IKCSAgICAgKiBkZXNjZW5kaW5nIG9yICJhc2MiIGZvciBhc2Nl
bmRpbmcgc29ydCBvcmRlciBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy4KCSAgICAgKgoJICAgICAq
IEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAq
IEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxl
Y3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7QXJy
YXlbXXxGdW5jdGlvbltdfE9iamVjdFtdfHN0cmluZ1tdfSBbaXRlcmF0ZWVzPVtfLmlkZW50aXR5
XV0KCSAgICAgKiAgVGhlIGl0ZXJhdGVlcyB0byBzb3J0IGJ5LgoJICAgICAqIEBwYXJhbSB7c3Ry
aW5nW119IFtvcmRlcnNdIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC4KCSAgICAgKiBA
cGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1l
dGhvZHMgbGlrZSBgXy5yZWR1Y2VgLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0
aGUgbmV3IHNvcnRlZCBhcnJheS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFy
IHVzZXJzID0gWwoJICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDggfSwKCSAg
ICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH0sCgkgICAgICogICB7ICd1c2Vy
JzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9LAoJICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAn
YWdlJzogMzYgfQoJICAgICAqIF07CgkgICAgICoKCSAgICAgKiAvLyBTb3J0IGJ5IGB1c2VyYCBp
biBhc2NlbmRpbmcgb3JkZXIgYW5kIGJ5IGBhZ2VgIGluIGRlc2NlbmRpbmcgb3JkZXIuCgkgICAg
ICogXy5vcmRlckJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10sIFsnYXNjJywgJ2Rlc2MnXSk7Cgkg
ICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwg
WydmcmVkJywgNDhdLCBbJ2ZyZWQnLCA0MF1dCgkgICAgICovCgkgICAgZnVuY3Rpb24gb3JkZXJC
eShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycywgZ3VhcmQpIHsKCSAgICAgIGlmIChjb2xs
ZWN0aW9uID09IG51bGwpIHsKCSAgICAgICAgcmV0dXJuIFtdOwoJICAgICAgfQoJICAgICAgaWYg
KCFpc0FycmF5KGl0ZXJhdGVlcykpIHsKCSAgICAgICAgaXRlcmF0ZWVzID0gaXRlcmF0ZWVzID09
IG51bGwgPyBbXSA6IFtpdGVyYXRlZXNdOwoJICAgICAgfQoJICAgICAgb3JkZXJzID0gZ3VhcmQg
PyB1bmRlZmluZWQgOiBvcmRlcnM7CgkgICAgICBpZiAoIWlzQXJyYXkob3JkZXJzKSkgewoJICAg
ICAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107CgkgICAgICB9Cgkg
ICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxp
dCBpbnRvIHR3byBncm91cHMsIHRoZSBmaXJzdCBvZiB3aGljaAoJICAgICAqIGNvbnRhaW5zIGVs
ZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciwgdGhlIHNlY29uZCBvZiB3aGlj
aAoJICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5IGZv
ci4gVGhlIHByZWRpY2F0ZSBpcwoJICAgICAqIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2
YWx1ZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAqIEBwYXJh
bSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zl
ci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBm
dW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJldHVybnMge0FycmF5fSBS
ZXR1cm5zIHRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScs
ICAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdmcmVk
JywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdw
ZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogZmFsc2UgfQoJICAgICAqIF07CgkgICAgICoK
CSAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hY3RpdmU7
IH0pOwoJICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGVi
YmxlcyddXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0
aGFuZC4KCSAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZh
bHNlIH0pOwoJICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ3BlYmJsZXMnXSwgWydiYXJuZXkn
LCAnZnJlZCddXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRl
cmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCBbJ2FjdGl2ZScsIGZh
bHNlXSk7CgkgICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgJ3BlYmJsZXMnXSwg
WydmcmVkJ11dCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNo
b3J0aGFuZC4KCSAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgJ2FjdGl2ZScpOwoJICAgICAqIC8v
ID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXQoJICAgICAq
LwoJICAgIHZhciBwYXJ0aXRpb24gPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwg
dmFsdWUsIGtleSkgewoJICAgICAgcmVzdWx0W2tleSA/IDAgOiAxXS5wdXNoKHZhbHVlKTsKCSAg
ICB9LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTsKCgkgICAgLyoqCgkgICAgICog
UmVkdWNlcyBgY29sbGVjdGlvbmAgdG8gYSB2YWx1ZSB3aGljaCBpcyB0aGUgYWNjdW11bGF0ZWQg
cmVzdWx0IG9mIHJ1bm5pbmcKCSAgICAgKiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRo
cnUgYGl0ZXJhdGVlYCwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlCgkgICAgICogaW52b2NhdGlvbiBp
cyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy4gSWYgYGFjY3VtdWxh
dG9yYAoJICAgICAqIGlzIG5vdCBnaXZlbiwgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGNvbGxlY3Rp
b25gIGlzIHVzZWQgYXMgdGhlIGluaXRpYWwKCSAgICAgKiB2YWx1ZS4gVGhlIGl0ZXJhdGVlIGlz
IGludm9rZWQgd2l0aCBmb3VyIGFyZ3VtZW50czoKCSAgICAgKiAoYWNjdW11bGF0b3IsIHZhbHVl
LCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLgoJICAgICAqCgkgICAgICogTWFueSBsb2Rhc2ggbWV0
aG9kcyBhcmUgZ3VhcmRlZCB0byB3b3JrIGFzIGl0ZXJhdGVlcyBmb3IgbWV0aG9kcyBsaWtlCgkg
ICAgICogYF8ucmVkdWNlYCwgYF8ucmVkdWNlUmlnaHRgLCBhbmQgYF8udHJhbnNmb3JtYC4KCSAg
ICAgKgoJICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOgoJICAgICAqIGBhc3NpZ25gLCBg
ZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGluY2x1ZGVzYCwgYG1lcmdlYCwgYG9yZGVyQnlg
LAoJICAgICAqIGFuZCBgc29ydEJ5YAoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBt
ZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IENvbGxlY3Rp
b24KCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlv
biB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8u
aWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHBh
cmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLgoJICAgICAqIEByZXR1cm5z
IHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS4KCSAgICAgKiBAc2VlIF8ucmVkdWNl
UmlnaHQKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5yZWR1Y2UoWzEsIDJdLCBm
dW5jdGlvbihzdW0sIG4pIHsKCSAgICAgKiAgIHJldHVybiBzdW0gKyBuOwoJICAgICAqIH0sIDAp
OwoJICAgICAqIC8vID0+IDMKCSAgICAgKgoJICAgICAqIF8ucmVkdWNlKHsgJ2EnOiAxLCAnYic6
IDIsICdjJzogMSB9LCBmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKCSAgICAgKiAgIChy
ZXN1bHRbdmFsdWVdIHx8IChyZXN1bHRbdmFsdWVdID0gW10pKS5wdXNoKGtleSk7CgkgICAgICog
ICByZXR1cm4gcmVzdWx0OwoJICAgICAqIH0sIHt9KTsKCSAgICAgKiAvLyA9PiB7ICcxJzogWydh
JywgJ2MnXSwgJzInOiBbJ2InXSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQp
CgkgICAgICovCgkgICAgZnVuY3Rpb24gcmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1
bXVsYXRvcikgewoJICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlS
ZWR1Y2UgOiBiYXNlUmVkdWNlLAoJICAgICAgICAgIGluaXRBY2N1bSA9IGFyZ3VtZW50cy5sZW5n
dGggPCAzOwoKCSAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKGl0ZXJh
dGVlLCA0KSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSwgYmFzZUVhY2gpOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yZWR1Y2VgIGV4Y2VwdCB0aGF0IGl0
IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YKCSAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdo
dCB0byBsZWZ0LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb24KCSAgICAgKiBA
cGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRl
IG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRo
ZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHBhcmFtIHsqfSBbYWNj
dW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5z
IHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS4KCSAgICAgKiBAc2VlIF8ucmVkdWNlCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBhcnJheSA9IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVd
XTsKCSAgICAgKgoJICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5l
ZCwgb3RoZXIpIHsKCSAgICAgKiAgIHJldHVybiBmbGF0dGVuZWQuY29uY2F0KG90aGVyKTsKCSAg
ICAgKiB9LCBbXSk7CgkgICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdCgkgICAgICovCgkg
ICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9y
KSB7CgkgICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZVJp
Z2h0IDogYmFzZVJlZHVjZSwKCSAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3Ro
IDwgMzsKCgkgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRl
ZSwgNCksIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0sIGJhc2VFYWNoUmlnaHQpOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLmZpbHRlcmA7IHRoaXMgbWV0aG9kIHJl
dHVybnMgdGhlIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYAoJICAgICAqIHRoYXQgYHByZWRpY2F0
ZWAgZG9lcyAqKm5vdCoqIHJldHVybiB0cnV0aHkgZm9yLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVn
b3J5IENvbGxlY3Rpb24KCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBU
aGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0g
W3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9u
LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5
LgoJICAgICAqIEBzZWUgXy5maWx0ZXIKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
dmFyIHVzZXJzID0gWwoJICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdh
Y3RpdmUnOiBmYWxzZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAs
ICdhY3RpdmUnOiB0cnVlIH0KCSAgICAgKiBdOwoJICAgICAqCgkgICAgICogXy5yZWplY3QodXNl
cnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7CgkgICAgICogLy8gPT4gb2Jq
ZWN0cyBmb3IgWydmcmVkJ10KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVy
YXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5yZWplY3QodXNlcnMsIHsgJ2FnZSc6IDQwLCAnYWN0
aXZlJzogdHJ1ZSB9KTsKCSAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddCgkgICAg
ICoKCSAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQu
CgkgICAgICogXy5yZWplY3QodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTsKCSAgICAgKiAvLyA9
PiBvYmplY3RzIGZvciBbJ2ZyZWQnXQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLnByb3BlcnR5
YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5yZWplY3QodXNlcnMsICdhY3RpdmUnKTsK
CSAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddCgkgICAgICovCgkgICAgZnVuY3Rp
b24gcmVqZWN0KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkgewoJICAgICAgdmFyIGZ1bmMgPSBpc0Fy
cmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyOwoJICAgICAgcmV0dXJu
IGZ1bmMoY29sbGVjdGlvbiwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpKTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgYSByYW5kb20gZWxlbWVudCBmcm9tIGBjb2xsZWN0
aW9uYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAyLjAuMAoJICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uCgkgICAgICogQHBhcmFt
IHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLgoJICAg
ICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC4KCSAgICAgKiBAZXhh
bXBsZQoJICAgICAqCgkgICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTsKCSAgICAgKiAvLyA9
PiAyCgkgICAgICovCgkgICAgZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pIHsKCSAgICAgIHZh
ciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlIDogYmFzZVNhbXBsZTsK
CSAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
R2V0cyBgbmAgcmFuZG9tIGVsZW1lbnRzIGF0IHVuaXF1ZSBrZXlzIGZyb20gYGNvbGxlY3Rpb25g
IHVwIHRvIHRoZQoJICAgICAqIHNpemUgb2YgYGNvbGxlY3Rpb25gLgoJICAgICAqCgkgICAgICog
QHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICog
QGNhdGVnb3J5IENvbGxlY3Rpb24KCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVj
dGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtu
PTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlLgoJICAgICAqIEBwYXJhbS0ge09i
amVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtl
IGBfLm1hcGAuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxl
bWVudHMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uc2FtcGxlU2l6ZShbMSwg
MiwgM10sIDIpOwoJICAgICAqIC8vID0+IFszLCAxXQoJICAgICAqCgkgICAgICogXy5zYW1wbGVT
aXplKFsxLCAyLCAzXSwgNCk7CgkgICAgICogLy8gPT4gWzIsIDMsIDFdCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gc2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuLCBndWFyZCkgewoJICAgICAgaWYgKChn
dWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIG4sIGd1YXJkKSA6IG4gPT09IHVuZGVm
aW5lZCkpIHsKCSAgICAgICAgbiA9IDE7CgkgICAgICB9IGVsc2UgewoJICAgICAgICBuID0gdG9J
bnRlZ2VyKG4pOwoJICAgICAgfQoJICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24p
ID8gYXJyYXlTYW1wbGVTaXplIDogYmFzZVNhbXBsZVNpemU7CgkgICAgICByZXR1cm4gZnVuYyhj
b2xsZWN0aW9uLCBuKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkg
b2Ygc2h1ZmZsZWQgdmFsdWVzLCB1c2luZyBhIHZlcnNpb24gb2YgdGhlCgkgICAgICogW0Zpc2hl
ci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0
ZXNfc2h1ZmZsZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAq
IEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNodWZm
bGUuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc2h1ZmZsZWQgYXJy
YXkuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uc2h1ZmZsZShbMSwgMiwgMywg
NF0pOwoJICAgICAqIC8vID0+IFs0LCAxLCAzLCAyXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNo
dWZmbGUoY29sbGVjdGlvbikgewoJICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24p
ID8gYXJyYXlTaHVmZmxlIDogYmFzZVNodWZmbGU7CgkgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0
aW9uKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rp
b25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlCgkgICAgICogdmFsdWVz
IG9yIHRoZSBudW1iZXIgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMg
Zm9yIG9iamVjdHMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvbgoJICAgICAq
IEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0
byBpbnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rp
b24gc2l6ZS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5zaXplKFsxLCAyLCAz
XSk7CgkgICAgICogLy8gPT4gMwoJICAgICAqCgkgICAgICogXy5zaXplKHsgJ2EnOiAxLCAnYic6
IDIgfSk7CgkgICAgICogLy8gPT4gMgoJICAgICAqCgkgICAgICogXy5zaXplKCdwZWJibGVzJyk7
CgkgICAgICogLy8gPT4gNwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikg
ewoJICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkgewoJICAgICAgICByZXR1cm4gMDsKCSAg
ICAgIH0KCSAgICAgIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkgewoJICAgICAgICByZXR1
cm4gaXNTdHJpbmcoY29sbGVjdGlvbikgPyBzdHJpbmdTaXplKGNvbGxlY3Rpb24pIDogY29sbGVj
dGlvbi5sZW5ndGg7CgkgICAgICB9CgkgICAgICB2YXIgdGFnID0gZ2V0VGFnKGNvbGxlY3Rpb24p
OwoJICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykgewoJICAgICAgICBy
ZXR1cm4gY29sbGVjdGlvbi5zaXplOwoJICAgICAgfQoJICAgICAgcmV0dXJuIGJhc2VLZXlzKGNv
bGxlY3Rpb24pLmxlbmd0aDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgcHJl
ZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbnkqKiBlbGVtZW50IG9mIGBjb2xsZWN0aW9u
YC4KCSAgICAgKiBJdGVyYXRpb24gaXMgc3RvcHBlZCBvbmNlIGBwcmVkaWNhdGVgIHJldHVybnMg
dHJ1dGh5LiBUaGUgcHJlZGljYXRlIGlzCgkgICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3Vt
ZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNh
dGVnb3J5IENvbGxlY3Rpb24KCSAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlv
biBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlv
bn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0
aW9uLgoJICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBp
dGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuCgkgICAgICogQHJldHVybnMge2Jvb2xl
YW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNo
ZWNrLAoJICAgICAqICBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAg
ICAqIF8uc29tZShbbnVsbCwgMCwgJ3llcycsIGZhbHNlXSwgQm9vbGVhbik7CgkgICAgICogLy8g
PT4gdHJ1ZQoJICAgICAqCgkgICAgICogdmFyIHVzZXJzID0gWwoJICAgICAqICAgeyAndXNlcic6
ICdiYXJuZXknLCAnYWN0aXZlJzogdHJ1ZSB9LAoJICAgICAqICAgeyAndXNlcic6ICdmcmVkJywg
ICAnYWN0aXZlJzogZmFsc2UgfQoJICAgICAqIF07CgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8u
bWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uc29tZSh1c2VycywgeyAndXNl
cic6ICdiYXJuZXknLCAnYWN0aXZlJzogZmFsc2UgfSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAg
ICAgKgoJICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFu
ZC4KCSAgICAgKiBfLnNvbWUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTsKCSAgICAgKiAvLyA9
PiB0cnVlCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0
aGFuZC4KCSAgICAgKiBfLnNvbWUodXNlcnMsICdhY3RpdmUnKTsKCSAgICAgKiAvLyA9PiB0cnVl
CgkgICAgICovCgkgICAgZnVuY3Rpb24gc29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJk
KSB7CgkgICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBi
YXNlU29tZTsKCSAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBw
cmVkaWNhdGUsIGd1YXJkKSkgewoJICAgICAgICBwcmVkaWNhdGUgPSB1bmRlZmluZWQ7CgkgICAg
ICB9CgkgICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUs
IDMpKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZWxlbWVu
dHMsIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIHJlc3VsdHMgb2YKCSAgICAgKiBy
dW5uaW5nIGVhY2ggZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhydSBlYWNoIGl0ZXJhdGVlLiBU
aGlzIG1ldGhvZAoJICAgICAqIHBlcmZvcm1zIGEgc3RhYmxlIHNvcnQsIHRoYXQgaXMsIGl0IHBy
ZXNlcnZlcyB0aGUgb3JpZ2luYWwgc29ydCBvcmRlciBvZgoJICAgICAqIGVxdWFsIGVsZW1lbnRz
LiBUaGUgaXRlcmF0ZWVzIGFyZSBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLgoJ
ICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNl
IDAuMS4wCgkgICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb24KCSAgICAgKiBAcGFyYW0ge0FycmF5
fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuCgkgICAg
ICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRp
dHldXQoJICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuCgkgICAgICogQHJldHVybnMg
e0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiB2YXIgdXNlcnMgPSBbCgkgICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAg
ICdhZ2UnOiA0OCB9LAoJICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYgfSwK
CSAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH0sCgkgICAgICogICB7ICd1
c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNCB9CgkgICAgICogXTsKCSAgICAgKgoJICAgICAqIF8u
c29ydEJ5KHVzZXJzLCBbZnVuY3Rpb24obykgeyByZXR1cm4gby51c2VyOyB9XSk7CgkgICAgICog
Ly8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgMzZdLCBbJ2Jhcm5leScsIDM0XSwgWydmcmVk
JywgNDhdLCBbJ2ZyZWQnLCA0MF1dCgkgICAgICoKCSAgICAgKiBfLnNvcnRCeSh1c2VycywgWyd1
c2VyJywgJ2FnZSddKTsKCSAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNF0s
IFsnYmFybmV5JywgMzZdLCBbJ2ZyZWQnLCA0MF0sIFsnZnJlZCcsIDQ4XV0KCSAgICAgKi8KCSAg
ICB2YXIgc29ydEJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWVzKSB7
CgkgICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7CgkgICAgICAgIHJldHVybiBbXTsKCSAg
ICAgIH0KCSAgICAgIHZhciBsZW5ndGggPSBpdGVyYXRlZXMubGVuZ3RoOwoJICAgICAgaWYgKGxl
bmd0aCA+IDEgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWVzWzBdLCBpdGVy
YXRlZXNbMV0pKSB7CgkgICAgICAgIGl0ZXJhdGVlcyA9IFtdOwoJICAgICAgfSBlbHNlIGlmIChs
ZW5ndGggPiAyICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdLCBp
dGVyYXRlZXNbMl0pKSB7CgkgICAgICAgIGl0ZXJhdGVlcyA9IFtpdGVyYXRlZXNbMF1dOwoJICAg
ICAgfQoJICAgICAgcmV0dXJuIGJhc2VPcmRlckJ5KGNvbGxlY3Rpb24sIGJhc2VGbGF0dGVuKGl0
ZXJhdGVlcywgMSksIFtdKTsKCSAgICB9KTsKCgkgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCSAg
ICAvKioKCSAgICAgKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNl
Y29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UKCSAgICAgKiB0aGUgVW5peCBlcG9jaCAoMSBK
YW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAg
KiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAyLjQuMAoJICAgICAqIEBjYXRlZ29yeSBEYXRl
CgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXN0YW1wLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHN0YW1wKSB7CgkgICAg
ICogICBjb25zb2xlLmxvZyhfLm5vdygpIC0gc3RhbXApOwoJICAgICAqIH0sIF8ubm93KCkpOwoJ
ICAgICAqIC8vID0+IExvZ3MgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdG9vayBmb3Ig
dGhlIGRlZmVycmVkIGludm9jYXRpb24uCgkgICAgICovCgkgICAgdmFyIG5vdyA9IGN0eE5vdyB8
fCBmdW5jdGlvbigpIHsKCSAgICAgIHJldHVybiByb290LkRhdGUubm93KCk7CgkgICAgfTsKCgkg
ICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCSAgICAvKioKCSAgICAgKiBUaGUgb3Bwb3NpdGUgb2Yg
YF8uYmVmb3JlYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcwoJ
ICAgICAqIGBmdW5jYCBvbmNlIGl0J3MgY2FsbGVkIGBuYCBvciBtb3JlIHRpbWVzLgoJICAgICAq
CgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4w
CgkgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhl
IG51bWJlciBvZiBjYWxscyBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuCgkgICAgICogQHBhcmFt
IHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuCgkgICAgICogQHJldHVy
bnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi4KCSAgICAg
KiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIHNhdmVzID0gWydwcm9maWxlJywgJ3NldHRp
bmdzJ107CgkgICAgICoKCSAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBm
dW5jdGlvbigpIHsKCSAgICAgKiAgIGNvbnNvbGUubG9nKCdkb25lIHNhdmluZyEnKTsKCSAgICAg
KiB9KTsKCSAgICAgKgoJICAgICAqIF8uZm9yRWFjaChzYXZlcywgZnVuY3Rpb24odHlwZSkgewoJ
ICAgICAqICAgYXN5bmNTYXZlKHsgJ3R5cGUnOiB0eXBlLCAnY29tcGxldGUnOiBkb25lIH0pOwoJ
ICAgICAqIH0pOwoJICAgICAqIC8vID0+IExvZ3MgJ2RvbmUgc2F2aW5nIScgYWZ0ZXIgdGhlIHR3
byBhc3luYyBzYXZlcyBoYXZlIGNvbXBsZXRlZC4KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBhZnRl
cihuLCBmdW5jKSB7CgkgICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewoJICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CgkgICAgICB9CgkgICAg
ICBuID0gdG9JbnRlZ2VyKG4pOwoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewoJICAgICAgICBp
ZiAoLS1uIDwgMSkgewoJICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CgkgICAgICAgIH0KCSAgICAgIH07CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVz
IGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCwgd2l0aCB1cCB0byBgbmAgYXJndW1lbnRz
LAoJICAgICAqIGlnbm9yaW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAuMAoJICAg
ICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhl
IGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBb
bj1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IGNhcC4KCSAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtn
dWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBg
LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5j
dGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5tYXAoWyc2JywgJzgnLCAn
MTAnXSwgXy5hcnkocGFyc2VJbnQsIDEpKTsKCSAgICAgKiAvLyA9PiBbNiwgOCwgMTBdCgkgICAg
ICovCgkgICAgZnVuY3Rpb24gYXJ5KGZ1bmMsIG4sIGd1YXJkKSB7CgkgICAgICBuID0gZ3VhcmQg
PyB1bmRlZmluZWQgOiBuOwoJICAgICAgbiA9IChmdW5jICYmIG4gPT0gbnVsbCkgPyBmdW5jLmxl
bmd0aCA6IG47CgkgICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0FSWV9GTEFHLCB1
bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG4pOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdp
dGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMKCSAgICAgKiBvZiB0aGUgY3JlYXRl
ZCBmdW5jdGlvbiwgd2hpbGUgaXQncyBjYWxsZWQgbGVzcyB0aGFuIGBuYCB0aW1lcy4gU3Vic2Vx
dWVudAoJICAgICAqIGNhbGxzIHRvIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVz
dWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVn
b3J5IEZ1bmN0aW9uCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxs
cyBhdCB3aGljaCBgZnVuY2AgaXMgbm8gbG9uZ2VyIGludm9rZWQuCgkgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuCgkgICAgICogQHJldHVybnMg
e0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi4KCSAgICAgKiBA
ZXhhbXBsZQoJICAgICAqCgkgICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIF8uYmVm
b3JlKDUsIGFkZENvbnRhY3RUb0xpc3QpKTsKCSAgICAgKiAvLyA9PiBBbGxvd3MgYWRkaW5nIHVw
IHRvIDQgY29udGFjdHMgdG8gdGhlIGxpc3QuCgkgICAgICovCgkgICAgZnVuY3Rpb24gYmVmb3Jl
KG4sIGZ1bmMpIHsKCSAgICAgIHZhciByZXN1bHQ7CgkgICAgICBpZiAodHlwZW9mIGZ1bmMgIT0g
J2Z1bmN0aW9uJykgewoJICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVY
VCk7CgkgICAgICB9CgkgICAgICBuID0gdG9JbnRlZ2VyKG4pOwoJICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgewoJICAgICAgICBpZiAoLS1uID4gMCkgewoJICAgICAgICAgIHJlc3VsdCA9IGZ1bmMu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKCSAgICAgICAgfQoJICAgICAgICBpZiAobiA8PSAxKSB7
CgkgICAgICAgICAgZnVuYyA9IHVuZGVmaW5lZDsKCSAgICAgICAgfQoJICAgICAgICByZXR1cm4g
cmVzdWx0OwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5j
dGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlz
QXJnYAoJICAgICAqIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0
IHJlY2VpdmVzLgoJICAgICAqCgkgICAgICogVGhlIGBfLmJpbmQucGxhY2Vob2xkZXJgIHZhbHVl
LCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsCgkgICAgICogbWF5
IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRz
LgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFVubGlrZSBuYXRpdmUgYEZ1bmN0aW9uI2JpbmRg
LCB0aGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgImxlbmd0aCIKCSAgICAgKiBwcm9wZXJ0eSBv
ZiBib3VuZCBmdW5jdGlvbnMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJl
ck9mIF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb24KCSAg
ICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBiaW5kLgoJICAgICAq
IEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLgoJICAgICAq
IEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBh
cHBsaWVkLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJvdW5k
IGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBncmVl
dChncmVldGluZywgcHVuY3R1YXRpb24pIHsKCSAgICAgKiAgIHJldHVybiBncmVldGluZyArICcg
JyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIHZh
ciBvYmplY3QgPSB7ICd1c2VyJzogJ2ZyZWQnIH07CgkgICAgICoKCSAgICAgKiB2YXIgYm91bmQg
PSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgJ2hpJyk7CgkgICAgICogYm91bmQoJyEnKTsKCSAgICAg
KiAvLyA9PiAnaGkgZnJlZCEnCgkgICAgICoKCSAgICAgKiAvLyBCb3VuZCB3aXRoIHBsYWNlaG9s
ZGVycy4KCSAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmQoZ3JlZXQsIG9iamVjdCwgXywgJyEnKTsK
CSAgICAgKiBib3VuZCgnaGknKTsKCSAgICAgKiAvLyA9PiAnaGkgZnJlZCEnCgkgICAgICovCgkg
ICAgdmFyIGJpbmQgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykg
ewoJICAgICAgdmFyIGJpdG1hc2sgPSBXUkFQX0JJTkRfRkxBRzsKCSAgICAgIGlmIChwYXJ0aWFs
cy5sZW5ndGgpIHsKCSAgICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFs
cywgZ2V0SG9sZGVyKGJpbmQpKTsKCSAgICAgICAgYml0bWFzayB8PSBXUkFQX1BBUlRJQUxfRkxB
RzsKCSAgICAgIH0KCSAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNB
cmcsIHBhcnRpYWxzLCBob2xkZXJzKTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogQ3JlYXRl
cyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgd2l0
aCBgcGFydGlhbHNgCgkgICAgICogcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2
ZXMuCgkgICAgICoKCSAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYF8uYmluZGAgYnkg
YWxsb3dpbmcgYm91bmQgZnVuY3Rpb25zIHRvIHJlZmVyZW5jZQoJICAgICAqIG1ldGhvZHMgdGhh
dCBtYXkgYmUgcmVkZWZpbmVkIG9yIGRvbid0IHlldCBleGlzdC4gU2VlCgkgICAgICogW1BldGVy
IE1pY2hhdXgncyBhcnRpY2xlXShodHRwOi8vcGV0ZXIubWljaGF1eC5jYS9hcnRpY2xlcy9sYXp5
LWZ1bmN0aW9uLWRlZmluaXRpb24tcGF0dGVybikKCSAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLgoJ
ICAgICAqCgkgICAgICogVGhlIGBfLmJpbmRLZXkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBk
ZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYwoJICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQg
YXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLgoJICAgICAq
CgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMTAu
MAoJICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmpl
Y3QgVGhlIG9iamVjdCB0byBpbnZva2UgdGhlIG1ldGhvZCBvbi4KCSAgICAgKiBAcGFyYW0ge3N0
cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZC4KCSAgICAgKiBAcGFyYW0gey4uLip9IFtw
YXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC4KCSAgICAgKiBA
cmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi4KCSAgICAg
KiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsKCSAgICAgKiAgICd1c2Vy
JzogJ2ZyZWQnLAoJICAgICAqICAgJ2dyZWV0JzogZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0
aW9uKSB7CgkgICAgICogICAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1
bmN0dWF0aW9uOwoJICAgICAqICAgfQoJICAgICAqIH07CgkgICAgICoKCSAgICAgKiB2YXIgYm91
bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCAnaGknKTsKCSAgICAgKiBib3VuZCgnIScp
OwoJICAgICAqIC8vID0+ICdoaSBmcmVkIScKCSAgICAgKgoJICAgICAqIG9iamVjdC5ncmVldCA9
IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikgewoJICAgICAqICAgcmV0dXJuIGdyZWV0
aW5nICsgJ3lhICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjsKCSAgICAgKiB9OwoJICAgICAq
CgkgICAgICogYm91bmQoJyEnKTsKCSAgICAgKiAvLyA9PiAnaGl5YSBmcmVkIScKCSAgICAgKgoJ
ICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLgoJICAgICAqIHZhciBib3VuZCA9IF8u
YmluZEtleShvYmplY3QsICdncmVldCcsIF8sICchJyk7CgkgICAgICogYm91bmQoJ2hpJyk7Cgkg
ICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnCgkgICAgICovCgkgICAgdmFyIGJpbmRLZXkgPSBiYXNl
UmVzdChmdW5jdGlvbihvYmplY3QsIGtleSwgcGFydGlhbHMpIHsKCSAgICAgIHZhciBiaXRtYXNr
ID0gV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUc7CgkgICAgICBpZiAocGFydGlh
bHMubGVuZ3RoKSB7CgkgICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlh
bHMsIGdldEhvbGRlcihiaW5kS2V5KSk7CgkgICAgICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFM
X0ZMQUc7CgkgICAgICB9CgkgICAgICByZXR1cm4gY3JlYXRlV3JhcChrZXksIGJpdG1hc2ssIG9i
amVjdCwgcGFydGlhbHMsIGhvbGRlcnMpOwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBDcmVh
dGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFyZ3VtZW50cyBvZiBgZnVuY2AgYW5kIGVpdGhl
ciBpbnZva2VzCgkgICAgICogYGZ1bmNgIHJldHVybmluZyBpdHMgcmVzdWx0LCBpZiBhdCBsZWFz
dCBgYXJpdHlgIG51bWJlciBvZiBhcmd1bWVudHMgaGF2ZQoJICAgICAqIGJlZW4gcHJvdmlkZWQs
IG9yIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHJlbWFpbmluZyBgZnVuY2AK
CSAgICAgKiBhcmd1bWVudHMsIGFuZCBzbyBvbi4gVGhlIGFyaXR5IG9mIGBmdW5jYCBtYXkgYmUg
c3BlY2lmaWVkIGlmIGBmdW5jLmxlbmd0aGAKCSAgICAgKiBpcyBub3Qgc3VmZmljaWVudC4KCSAg
ICAgKgoJICAgICAqIFRoZSBgXy5jdXJyeS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1
bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcywKCSAgICAgKiBtYXkgYmUgdXNlZCBhcyBh
IHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuCgkgICAgICoKCSAgICAgKiAqKk5v
dGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlICJsZW5ndGgiIHByb3BlcnR5IG9mIGN1
cnJpZWQgZnVuY3Rpb25zLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDIuMC4wCgkgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uCgkgICAg
ICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuCgkgICAgICog
QHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC4K
CSAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0
ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0g
UmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7CgkgICAgICogICByZXR1cm4g
W2EsIGIsIGNdOwoJICAgICAqIH07CgkgICAgICoKCSAgICAgKiB2YXIgY3VycmllZCA9IF8uY3Vy
cnkoYWJjKTsKCSAgICAgKgoJICAgICAqIGN1cnJpZWQoMSkoMikoMyk7CgkgICAgICogLy8gPT4g
WzEsIDIsIDNdCgkgICAgICoKCSAgICAgKiBjdXJyaWVkKDEsIDIpKDMpOwoJICAgICAqIC8vID0+
IFsxLCAyLCAzXQoJICAgICAqCgkgICAgICogY3VycmllZCgxLCAyLCAzKTsKCSAgICAgKiAvLyA9
PiBbMSwgMiwgM10KCSAgICAgKgoJICAgICAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMu
CgkgICAgICogY3VycmllZCgxKShfLCAzKSgyKTsKCSAgICAgKiAvLyA9PiBbMSwgMiwgM10KCSAg
ICAgKi8KCSAgICBmdW5jdGlvbiBjdXJyeShmdW5jLCBhcml0eSwgZ3VhcmQpIHsKCSAgICAgIGFy
aXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTsKCSAgICAgIHZhciByZXN1bHQgPSBjcmVh
dGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTsKCSAgICAgIHJlc3VsdC5wbGFjZWhv
bGRlciA9IGN1cnJ5LnBsYWNlaG9sZGVyOwoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY3VycnlgIGV4Y2VwdCB0aGF0
IGFyZ3VtZW50cyBhcmUgYXBwbGllZCB0byBgZnVuY2AKCSAgICAgKiBpbiB0aGUgbWFubmVyIG9m
IGBfLnBhcnRpYWxSaWdodGAgaW5zdGVhZCBvZiBgXy5wYXJ0aWFsYC4KCSAgICAgKgoJICAgICAq
IFRoZSBgXy5jdXJyeVJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8g
YF9gIGluIG1vbm9saXRoaWMKCSAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vo
b2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBU
aGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgImxlbmd0aCIgcHJvcGVydHkgb2YgY3VycmllZCBm
dW5jdGlvbnMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAg
ICAgKiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb24KCSAgICAgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS4KCSAgICAgKiBAcGFyYW0g
e251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLgoJICAgICAq
IEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3Ig
bWV0aG9kcyBsaWtlIGBfLm1hcGAuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5z
IHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAg
ICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHsKCSAgICAgKiAgIHJldHVybiBbYSwgYiwg
Y107CgkgICAgICogfTsKCSAgICAgKgoJICAgICAqIHZhciBjdXJyaWVkID0gXy5jdXJyeVJpZ2h0
KGFiYyk7CgkgICAgICoKCSAgICAgKiBjdXJyaWVkKDMpKDIpKDEpOwoJICAgICAqIC8vID0+IFsx
LCAyLCAzXQoJICAgICAqCgkgICAgICogY3VycmllZCgyLCAzKSgxKTsKCSAgICAgKiAvLyA9PiBb
MSwgMiwgM10KCSAgICAgKgoJICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7CgkgICAgICogLy8gPT4g
WzEsIDIsIDNdCgkgICAgICoKCSAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLgoJ
ICAgICAqIGN1cnJpZWQoMykoMSwgXykoMik7CgkgICAgICogLy8gPT4gWzEsIDIsIDNdCgkgICAg
ICovCgkgICAgZnVuY3Rpb24gY3VycnlSaWdodChmdW5jLCBhcml0eSwgZ3VhcmQpIHsKCSAgICAg
IGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTsKCSAgICAgIHZhciByZXN1bHQgPSBj
cmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfUklHSFRfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmlu
ZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTsKCSAgICAgIHJlc3Vs
dC5wbGFjZWhvbGRlciA9IGN1cnJ5UmlnaHQucGxhY2Vob2xkZXI7CgkgICAgICByZXR1cm4gcmVz
dWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGRlYm91bmNlZCBmdW5jdGlv
biB0aGF0IGRlbGF5cyBpbnZva2luZyBgZnVuY2AgdW50aWwgYWZ0ZXIgYHdhaXRgCgkgICAgICog
bWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZSBkZWJvdW5j
ZWQgZnVuY3Rpb24gd2FzCgkgICAgICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBj
b21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbAoJICAgICAqIGRlbGF5ZWQgYGZ1
bmNgIGludm9jYXRpb25zIGFuZCBhIGBmbHVzaGAgbWV0aG9kIHRvIGltbWVkaWF0ZWx5IGludm9r
ZSB0aGVtLgoJICAgICAqIFByb3ZpZGUgYG9wdGlvbnNgIHRvIGluZGljYXRlIHdoZXRoZXIgYGZ1
bmNgIHNob3VsZCBiZSBpbnZva2VkIG9uIHRoZQoJICAgICAqIGxlYWRpbmcgYW5kL29yIHRyYWls
aW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWQKCSAg
ICAgKiB3aXRoIHRoZSBsYXN0IGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgZGVib3VuY2VkIGZ1
bmN0aW9uLiBTdWJzZXF1ZW50CgkgICAgICogY2FsbHMgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlv
biByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBgZnVuY2AKCSAgICAgKiBpbnZvY2F0aW9u
LgoJICAgICAqCgkgICAgICogKipOb3RlOioqIElmIGBsZWFkaW5nYCBhbmQgYHRyYWlsaW5nYCBv
cHRpb25zIGFyZSBgdHJ1ZWAsIGBmdW5jYCBpcwoJICAgICAqIGludm9rZWQgb24gdGhlIHRyYWls
aW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uCgkg
ICAgICogaXMgaW52b2tlZCBtb3JlIHRoYW4gb25jZSBkdXJpbmcgdGhlIGB3YWl0YCB0aW1lb3V0
LgoJICAgICAqCgkgICAgICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxz
ZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkCgkgICAgICogdW50aWwgdG8gdGhlIG5l
eHQgdGljaywgc2ltaWxhciB0byBgc2V0VGltZW91dGAgd2l0aCBhIHRpbWVvdXQgb2YgYDBgLgoJ
ICAgICAqCgkgICAgICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3Nz
LXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pCgkg
ICAgICogZm9yIGRldGFpbHMgb3ZlciB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBgXy5kZWJvdW5j
ZWAgYW5kIGBfLnRocm90dGxlYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVt
YmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJ
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlYm91bmNlLgoJ
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2FpdD0wXSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25k
cyB0byBkZWxheS4KCSAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRp
b25zIG9iamVjdC4KCSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFs
c2VdCgkgICAgICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUg
dGltZW91dC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF0KCSAgICAg
KiAgVGhlIG1heGltdW0gdGltZSBgZnVuY2AgaXMgYWxsb3dlZCB0byBiZSBkZWxheWVkIGJlZm9y
ZSBpdCdzIGludm9rZWQuCgkgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGlu
Zz10cnVlXQoJICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9m
IHRoZSB0aW1lb3V0LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3
IGRlYm91bmNlZCBmdW5jdGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogLy8g
QXZvaWQgY29zdGx5IGNhbGN1bGF0aW9ucyB3aGlsZSB0aGUgd2luZG93IHNpemUgaXMgaW4gZmx1
eC4KCSAgICAgKiBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgXy5kZWJvdW5jZShjYWxjdWxh
dGVMYXlvdXQsIDE1MCkpOwoJICAgICAqCgkgICAgICogLy8gSW52b2tlIGBzZW5kTWFpbGAgd2hl
biBjbGlja2VkLCBkZWJvdW5jaW5nIHN1YnNlcXVlbnQgY2FsbHMuCgkgICAgICogalF1ZXJ5KGVs
ZW1lbnQpLm9uKCdjbGljaycsIF8uZGVib3VuY2Uoc2VuZE1haWwsIDMwMCwgewoJICAgICAqICAg
J2xlYWRpbmcnOiB0cnVlLAoJICAgICAqICAgJ3RyYWlsaW5nJzogZmFsc2UKCSAgICAgKiB9KSk7
CgkgICAgICoKCSAgICAgKiAvLyBFbnN1cmUgYGJhdGNoTG9nYCBpcyBpbnZva2VkIG9uY2UgYWZ0
ZXIgMSBzZWNvbmQgb2YgZGVib3VuY2VkIGNhbGxzLgoJICAgICAqIHZhciBkZWJvdW5jZWQgPSBf
LmRlYm91bmNlKGJhdGNoTG9nLCAyNTAsIHsgJ21heFdhaXQnOiAxMDAwIH0pOwoJICAgICAqIHZh
ciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTsKCSAgICAgKiBqUXVlcnkoc291
cmNlKS5vbignbWVzc2FnZScsIGRlYm91bmNlZCk7CgkgICAgICoKCSAgICAgKiAvLyBDYW5jZWwg
dGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLgoJICAgICAqIGpRdWVyeSh3aW5kb3cp
Lm9uKCdwb3BzdGF0ZScsIGRlYm91bmNlZC5jYW5jZWwpOwoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKCSAgICAgIHZhciBsYXN0QXJncywKCSAg
ICAgICAgICBsYXN0VGhpcywKCSAgICAgICAgICBtYXhXYWl0LAoJICAgICAgICAgIHJlc3VsdCwK
CSAgICAgICAgICB0aW1lcklkLAoJICAgICAgICAgIGxhc3RDYWxsVGltZSwKCSAgICAgICAgICBs
YXN0SW52b2tlVGltZSA9IDAsCgkgICAgICAgICAgbGVhZGluZyA9IGZhbHNlLAoJICAgICAgICAg
IG1heGluZyA9IGZhbHNlLAoJICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTsKCgkgICAgICBpZiAo
dHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewoJICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KEZVTkNfRVJST1JfVEVYVCk7CgkgICAgICB9CgkgICAgICB3YWl0ID0gdG9OdW1iZXIod2FpdCkg
fHwgMDsKCSAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkgewoJICAgICAgICBsZWFkaW5nID0g
ISFvcHRpb25zLmxlYWRpbmc7CgkgICAgICAgIG1heGluZyA9ICdtYXhXYWl0JyBpbiBvcHRpb25z
OwoJICAgICAgICBtYXhXYWl0ID0gbWF4aW5nID8gbmF0aXZlTWF4KHRvTnVtYmVyKG9wdGlvbnMu
bWF4V2FpdCkgfHwgMCwgd2FpdCkgOiBtYXhXYWl0OwoJICAgICAgICB0cmFpbGluZyA9ICd0cmFp
bGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nOwoJICAgICAg
fQoKCSAgICAgIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkgewoJICAgICAgICB2YXIgYXJncyA9
IGxhc3RBcmdzLAoJICAgICAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzOwoKCSAgICAgICAgbGFz
dEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDsKCSAgICAgICAgbGFzdEludm9rZVRpbWUgPSB0
aW1lOwoJICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpOwoJICAgICAg
ICByZXR1cm4gcmVzdWx0OwoJICAgICAgfQoKCSAgICAgIGZ1bmN0aW9uIGxlYWRpbmdFZGdlKHRp
bWUpIHsKCSAgICAgICAgLy8gUmVzZXQgYW55IGBtYXhXYWl0YCB0aW1lci4KCSAgICAgICAgbGFz
dEludm9rZVRpbWUgPSB0aW1lOwoJICAgICAgICAvLyBTdGFydCB0aGUgdGltZXIgZm9yIHRoZSB0
cmFpbGluZyBlZGdlLgoJICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQs
IHdhaXQpOwoJICAgICAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS4KCSAgICAgICAgcmV0
dXJuIGxlYWRpbmcgPyBpbnZva2VGdW5jKHRpbWUpIDogcmVzdWx0OwoJICAgICAgfQoKCSAgICAg
IGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkgewoJICAgICAgICB2YXIgdGltZVNpbmNlTGFz
dENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLAoJICAgICAgICAgICAgdGltZVNpbmNlTGFzdElu
dm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSwKCSAgICAgICAgICAgIHRpbWVXYWl0aW5nID0g
d2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsOwoKCSAgICAgICAgcmV0dXJuIG1heGluZwoJICAgICAg
ICAgID8gbmF0aXZlTWluKHRpbWVXYWl0aW5nLCBtYXhXYWl0IC0gdGltZVNpbmNlTGFzdEludm9r
ZSkKCSAgICAgICAgICA6IHRpbWVXYWl0aW5nOwoJICAgICAgfQoKCSAgICAgIGZ1bmN0aW9uIHNo
b3VsZEludm9rZSh0aW1lKSB7CgkgICAgICAgIHZhciB0aW1lU2luY2VMYXN0Q2FsbCA9IHRpbWUg
LSBsYXN0Q2FsbFRpbWUsCgkgICAgICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAt
IGxhc3RJbnZva2VUaW1lOwoKCSAgICAgICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNh
bGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGUKCSAgICAgICAgLy8gdHJh
aWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUg
dHJlYXRpbmcKCSAgICAgICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhp
dCB0aGUgYG1heFdhaXRgIGxpbWl0LgoJICAgICAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0g
dW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fAoJICAgICAgICAgICh0
aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+
PSBtYXhXYWl0KSk7CgkgICAgICB9CgoJICAgICAgZnVuY3Rpb24gdGltZXJFeHBpcmVkKCkgewoJ
ICAgICAgICB2YXIgdGltZSA9IG5vdygpOwoJICAgICAgICBpZiAoc2hvdWxkSW52b2tlKHRpbWUp
KSB7CgkgICAgICAgICAgcmV0dXJuIHRyYWlsaW5nRWRnZSh0aW1lKTsKCSAgICAgICAgfQoJICAg
ICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lci4KCSAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQo
dGltZXJFeHBpcmVkLCByZW1haW5pbmdXYWl0KHRpbWUpKTsKCSAgICAgIH0KCgkgICAgICBmdW5j
dGlvbiB0cmFpbGluZ0VkZ2UodGltZSkgewoJICAgICAgICB0aW1lcklkID0gdW5kZWZpbmVkOwoK
CSAgICAgICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5z
IGBmdW5jYCBoYXMgYmVlbgoJICAgICAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS4KCSAg
ICAgICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7CgkgICAgICAgICAgcmV0dXJuIGludm9r
ZUZ1bmModGltZSk7CgkgICAgICAgIH0KCSAgICAgICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVu
ZGVmaW5lZDsKCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH0KCgkgICAgICBmdW5jdGlv
biBjYW5jZWwoKSB7CgkgICAgICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHsKCSAgICAg
ICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7CgkgICAgICAgIH0KCSAgICAgICAgbGFzdEludm9r
ZVRpbWUgPSAwOwoJICAgICAgICBsYXN0QXJncyA9IGxhc3RDYWxsVGltZSA9IGxhc3RUaGlzID0g
dGltZXJJZCA9IHVuZGVmaW5lZDsKCSAgICAgIH0KCgkgICAgICBmdW5jdGlvbiBmbHVzaCgpIHsK
CSAgICAgICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5n
RWRnZShub3coKSk7CgkgICAgICB9CgoJICAgICAgZnVuY3Rpb24gZGVib3VuY2VkKCkgewoJICAg
ICAgICB2YXIgdGltZSA9IG5vdygpLAoJICAgICAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZElu
dm9rZSh0aW1lKTsKCgkgICAgICAgIGxhc3RBcmdzID0gYXJndW1lbnRzOwoJICAgICAgICBsYXN0
VGhpcyA9IHRoaXM7CgkgICAgICAgIGxhc3RDYWxsVGltZSA9IHRpbWU7CgoJICAgICAgICBpZiAo
aXNJbnZva2luZykgewoJICAgICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHsKCSAg
ICAgICAgICAgIHJldHVybiBsZWFkaW5nRWRnZShsYXN0Q2FsbFRpbWUpOwoJICAgICAgICAgIH0K
CSAgICAgICAgICBpZiAobWF4aW5nKSB7CgkgICAgICAgICAgICAvLyBIYW5kbGUgaW52b2NhdGlv
bnMgaW4gYSB0aWdodCBsb29wLgoJICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpOwoJ
ICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTsKCSAg
ICAgICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7CgkgICAgICAgICAgfQoJ
ICAgICAgICB9CgkgICAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAg
ICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpOwoJICAgICAgICB9Cgkg
ICAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgICB9CgkgICAgICBkZWJvdW5jZWQuY2FuY2VsID0g
Y2FuY2VsOwoJICAgICAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7CgkgICAgICByZXR1cm4gZGVi
b3VuY2VkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogRGVmZXJzIGludm9raW5nIHRoZSBgZnVu
Y2AgdW50aWwgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMgY2xlYXJlZC4gQW55CgkgICAgICog
YWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52
b2tlZC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlZmVyLgoJICAgICAqIEBwYXJhbSB7Li4u
Kn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLgoJICAgICAqIEBy
ZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHRleHQpIHsKCSAgICAgKiAgIGNvbnNvbGUu
bG9nKHRleHQpOwoJICAgICAqIH0sICdkZWZlcnJlZCcpOwoJICAgICAqIC8vID0+IExvZ3MgJ2Rl
ZmVycmVkJyBhZnRlciBvbmUgbWlsbGlzZWNvbmQuCgkgICAgICovCgkgICAgdmFyIGRlZmVyID0g
YmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykgewoJICAgICAgcmV0dXJuIGJhc2VEZWxheShm
dW5jLCAxLCBhcmdzKTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogSW52b2tlcyBgZnVuY2Ag
YWZ0ZXIgYHdhaXRgIG1pbGxpc2Vjb25kcy4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZQoJ
ICAgICAqIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAg
ICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhl
IGZ1bmN0aW9uIHRvIGRlbGF5LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IFRoZSBudW1i
ZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGRlbGF5IGludm9jYXRpb24uCgkgICAgICogQHBhcmFtIHsu
Li4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguCgkgICAgICog
QHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdGltZXIgaWQuCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8uZGVsYXkoZnVuY3Rpb24odGV4dCkgewoJICAgICAqICAgY29uc29s
ZS5sb2codGV4dCk7CgkgICAgICogfSwgMTAwMCwgJ2xhdGVyJyk7CgkgICAgICogLy8gPT4gTG9n
cyAnbGF0ZXInIGFmdGVyIG9uZSBzZWNvbmQuCgkgICAgICovCgkgICAgdmFyIGRlbGF5ID0gYmFz
ZVJlc3QoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykgewoJICAgICAgcmV0dXJuIGJhc2VEZWxh
eShmdW5jLCB0b051bWJlcih3YWl0KSB8fCAwLCBhcmdzKTsKCSAgICB9KTsKCgkgICAgLyoqCgkg
ICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBhcmd1bWVu
dHMgcmV2ZXJzZWQuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb24KCSAgICAgKiBA
cGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBmbGlwIGFyZ3VtZW50cyBmb3Iu
CgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxpcHBlZCBmdW5j
dGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIGZsaXBwZWQgPSBfLmZs
aXAoZnVuY3Rpb24oKSB7CgkgICAgICogICByZXR1cm4gXy50b0FycmF5KGFyZ3VtZW50cyk7Cgkg
ICAgICogfSk7CgkgICAgICoKCSAgICAgKiBmbGlwcGVkKCdhJywgJ2InLCAnYycsICdkJyk7Cgkg
ICAgICogLy8gPT4gWydkJywgJ2MnLCAnYicsICdhJ10KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBm
bGlwKGZ1bmMpIHsKCSAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfRkxJUF9GTEFH
KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9p
emVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzCgkgICAgICogcHJvdmlk
ZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJh
c2VkIG9uIHRoZQoJICAgICAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVu
Y3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudAoJICAgICAqIHByb3ZpZGVkIHRv
IHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUg
YGZ1bmNgCgkgICAgICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUg
bWVtb2l6ZWQgZnVuY3Rpb24uCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlz
IGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkCgkgICAgICog
ZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhl
IGBfLm1lbW9pemUuQ2FjaGVgCgkgICAgICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5z
dGFuY2VzIGltcGxlbWVudCB0aGUKCSAgICAgKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0
aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5
cGUtb2JqZWN0KQoJICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAs
IGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEZ1bmN0
aW9uCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBp
dHMgb3V0cHV0IG1lbW9pemVkLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0g
VGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS4KCSAgICAgKiBAcmV0dXJucyB7
RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi4KCSAgICAgKiBAZXhh
bXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTsKCSAg
ICAgKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07CgkgICAgICoKCSAgICAgKiB2YXIg
dmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTsKCSAgICAgKiB2YWx1ZXMob2JqZWN0KTsKCSAg
ICAgKiAvLyA9PiBbMSwgMl0KCSAgICAgKgoJICAgICAqIHZhbHVlcyhvdGhlcik7CgkgICAgICog
Ly8gPT4gWzMsIDRdCgkgICAgICoKCSAgICAgKiBvYmplY3QuYSA9IDI7CgkgICAgICogdmFsdWVz
KG9iamVjdCk7CgkgICAgICogLy8gPT4gWzEsIDJdCgkgICAgICoKCSAgICAgKiAvLyBNb2RpZnkg
dGhlIHJlc3VsdCBjYWNoZS4KCSAgICAgKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywg
J2InXSk7CgkgICAgICogdmFsdWVzKG9iamVjdCk7CgkgICAgICogLy8gPT4gWydhJywgJ2InXQoJ
ICAgICAqCgkgICAgICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC4KCSAgICAgKiBfLm1l
bW9pemUuQ2FjaGUgPSBXZWFrTWFwOwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG1lbW9pemUoZnVu
YywgcmVzb2x2ZXIpIHsKCSAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChy
ZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkgewoJICAg
ICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CgkgICAgICB9CgkgICAg
ICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHsKCSAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVu
dHMsCgkgICAgICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFy
Z3MpIDogYXJnc1swXSwKCSAgICAgICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7CgoJICAg
ICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHsKCSAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtl
eSk7CgkgICAgICAgIH0KCSAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJn
cyk7CgkgICAgICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBj
YWNoZTsKCSAgICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH07CgkgICAgICBtZW1vaXplZC5j
YWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7CgkgICAgICByZXR1cm4gbWVt
b2l6ZWQ7CgkgICAgfQoKCSAgICAvLyBFeHBvc2UgYE1hcENhY2hlYC4KCSAgICBtZW1vaXplLkNh
Y2hlID0gTWFwQ2FjaGU7CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0
IG5lZ2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJlZGljYXRlIGBmdW5jYC4gVGhlCgkgICAgICog
YGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBh
cmd1bWVudHMgb2YgdGhlCgkgICAgICogY3JlYXRlZCBmdW5jdGlvbi4KCSAgICAgKgoJICAgICAq
IEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAuMAoJICAgICAq
IEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBU
aGUgcHJlZGljYXRlIHRvIG5lZ2F0ZS4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVy
bnMgdGhlIG5ldyBuZWdhdGVkIGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiBmdW5jdGlvbiBpc0V2ZW4obikgewoJICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7Cgkg
ICAgICogfQoJICAgICAqCgkgICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5l
Z2F0ZShpc0V2ZW4pKTsKCSAgICAgKiAvLyA9PiBbMSwgMywgNV0KCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBuZWdhdGUocHJlZGljYXRlKSB7CgkgICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAn
ZnVuY3Rpb24nKSB7CgkgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhU
KTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKCSAgICAgICAgdmFyIGFyZ3Mg
PSBhcmd1bWVudHM7CgkgICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHsKCSAgICAgICAgICBj
YXNlIDA6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcyk7CgkgICAgICAgICAgY2FzZSAxOiBy
ZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0pOwoJICAgICAgICAgIGNhc2UgMjog
cmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdKTsKCSAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSwg
YXJnc1syXSk7CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhp
cywgYXJncyk7CgkgICAgICB9OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1
bmN0aW9uIHRoYXQgaXMgcmVzdHJpY3RlZCB0byBpbnZva2luZyBgZnVuY2Agb25jZS4gUmVwZWF0
IGNhbGxzCgkgICAgICogdG8gdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZp
cnN0IGludm9jYXRpb24uIFRoZSBgZnVuY2AgaXMKCSAgICAgKiBpbnZva2VkIHdpdGggdGhlIGB0
aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0ZWQgZnVuY3Rpb24uCgkgICAg
ICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4x
LjAKCSAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb24KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBm
dW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259
IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiB2YXIgaW5pdGlhbGl6ZSA9IF8ub25jZShjcmVhdGVBcHBsaWNhdGlvbik7
CgkgICAgICogaW5pdGlhbGl6ZSgpOwoJICAgICAqIGluaXRpYWxpemUoKTsKCSAgICAgKiAvLyA9
PiBgY3JlYXRlQXBwbGljYXRpb25gIGlzIGludm9rZWQgb25jZQoJICAgICAqLwoJICAgIGZ1bmN0
aW9uIG9uY2UoZnVuYykgewoJICAgICAgcmV0dXJuIGJlZm9yZSgyLCBmdW5jKTsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdp
dGggaXRzIGFyZ3VtZW50cyB0cmFuc2Zvcm1lZC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBjYXRlZ29yeSBG
dW5jdGlvbgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdy
YXAuCgkgICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFt0cmFuc2Zvcm1z
PVtfLmlkZW50aXR5XV0KCSAgICAgKiAgVGhlIGFyZ3VtZW50IHRyYW5zZm9ybXMuCgkgICAgICog
QHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIGRvdWJsZWQobikgewoJICAgICAqICAgcmV0
dXJuIG4gKiAyOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7
CgkgICAgICogICByZXR1cm4gbiAqIG47CgkgICAgICogfQoJICAgICAqCgkgICAgICogdmFyIGZ1
bmMgPSBfLm92ZXJBcmdzKGZ1bmN0aW9uKHgsIHkpIHsKCSAgICAgKiAgIHJldHVybiBbeCwgeV07
CgkgICAgICogfSwgW3NxdWFyZSwgZG91YmxlZF0pOwoJICAgICAqCgkgICAgICogZnVuYyg5LCAz
KTsKCSAgICAgKiAvLyA9PiBbODEsIDZdCgkgICAgICoKCSAgICAgKiBmdW5jKDEwLCA1KTsKCSAg
ICAgKiAvLyA9PiBbMTAwLCAxMF0KCSAgICAgKi8KCSAgICB2YXIgb3ZlckFyZ3MgPSBjYXN0UmVz
dChmdW5jdGlvbihmdW5jLCB0cmFuc2Zvcm1zKSB7CgkgICAgICB0cmFuc2Zvcm1zID0gKHRyYW5z
Zm9ybXMubGVuZ3RoID09IDEgJiYgaXNBcnJheSh0cmFuc2Zvcm1zWzBdKSkKCSAgICAgICAgPyBh
cnJheU1hcCh0cmFuc2Zvcm1zWzBdLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpCgkgICAgICAg
IDogYXJyYXlNYXAoYmFzZUZsYXR0ZW4odHJhbnNmb3JtcywgMSksIGJhc2VVbmFyeShnZXRJdGVy
YXRlZSgpKSk7CgoJICAgICAgdmFyIGZ1bmNzTGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7Cgkg
ICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykgewoJICAgICAgICB2YXIgaW5kZXgg
PSAtMSwKCSAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihhcmdzLmxlbmd0aCwgZnVuY3NM
ZW5ndGgpOwoKCSAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKCSAgICAgICAgICBh
cmdzW2luZGV4XSA9IHRyYW5zZm9ybXNbaW5kZXhdLmNhbGwodGhpcywgYXJnc1tpbmRleF0pOwoJ
ICAgICAgICB9CgkgICAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBhcmdzKTsKCSAgICAg
IH0pOwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBp
bnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZQoJICAgICAqIGFy
Z3VtZW50cyBpdCByZWNlaXZlcy4gVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5iaW5kYCBleGNlcHQg
aXQgZG9lcyAqKm5vdCoqCgkgICAgICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLgoJICAgICAq
CgkgICAgICogVGhlIGBfLnBhcnRpYWwucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0
cyB0byBgX2AgaW4gbW9ub2xpdGhpYwoJICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBw
bGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLgoJICAgICAqCgkgICAg
ICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSAibGVuZ3RoIiBwcm9wZXJ0
eSBvZiBwYXJ0aWFsbHkKCSAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy4KCSAgICAgKgoJICAgICAq
IEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjIuMAoJICAgICAq
IEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1
bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uCgkgICAgICogQHBhcmFtIHsu
Li4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuCgkg
ICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxp
ZWQgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIGdy
ZWV0KGdyZWV0aW5nLCBuYW1lKSB7CgkgICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBu
YW1lOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFs
KGdyZWV0LCAnaGVsbG8nKTsKCSAgICAgKiBzYXlIZWxsb1RvKCdmcmVkJyk7CgkgICAgICogLy8g
PT4gJ2hlbGxvIGZyZWQnCgkgICAgICoKCSAgICAgKiAvLyBQYXJ0aWFsbHkgYXBwbGllZCB3aXRo
IHBsYWNlaG9sZGVycy4KCSAgICAgKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBf
LCAnZnJlZCcpOwoJICAgICAqIGdyZWV0RnJlZCgnaGknKTsKCSAgICAgKiAvLyA9PiAnaGkgZnJl
ZCcKCSAgICAgKi8KCSAgICB2YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBh
cnRpYWxzKSB7CgkgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBn
ZXRIb2xkZXIocGFydGlhbCkpOwoJICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9Q
QVJUSUFMX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpOwoJICAgIH0pOwoKCSAg
ICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnBhcnRpYWxgIGV4Y2VwdCB0aGF0
IHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cwoJICAgICAqIGFyZSBhcHBlbmRlZCB0byB0aGUg
YXJndW1lbnRzIGl0IHJlY2VpdmVzLgoJICAgICAqCgkgICAgICogVGhlIGBfLnBhcnRpYWxSaWdo
dC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGlj
CgkgICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFs
bHkgYXBwbGllZCBhcmd1bWVudHMuCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRo
b2QgZG9lc24ndCBzZXQgdGhlICJsZW5ndGgiIHByb3BlcnR5IG9mIHBhcnRpYWxseQoJICAgICAq
IGFwcGxpZWQgZnVuY3Rpb25zLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1i
ZXJPZiBfCgkgICAgICogQHNpbmNlIDEuMC4wCgkgICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uCgkg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFw
cGx5IGFyZ3VtZW50cyB0by4KCSAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFy
Z3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rp
b259IFJldHVybnMgdGhlIG5ldyBwYXJ0aWFsbHkgYXBwbGllZCBmdW5jdGlvbi4KCSAgICAgKiBA
ZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gZ3JlZXQoZ3JlZXRpbmcsIG5hbWUpIHsK
CSAgICAgKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7CgkgICAgICogfQoJICAgICAq
CgkgICAgICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnZnJlZCcpOwoJ
ICAgICAqIGdyZWV0RnJlZCgnaGknKTsKCSAgICAgKiAvLyA9PiAnaGkgZnJlZCcKCSAgICAgKgoJ
ICAgICAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLgoJICAgICAqIHZh
ciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsUmlnaHQoZ3JlZXQsICdoZWxsbycsIF8pOwoJICAgICAq
IHNheUhlbGxvVG8oJ2ZyZWQnKTsKCSAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCcKCSAgICAgKi8K
CSAgICB2YXIgcGFydGlhbFJpZ2h0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMp
IHsKCSAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRl
cihwYXJ0aWFsUmlnaHQpKTsKCSAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFS
VElBTF9SSUdIVF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTsKCSAgICB9KTsK
CgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Ag
d2l0aCBhcmd1bWVudHMgYXJyYW5nZWQgYWNjb3JkaW5nCgkgICAgICogdG8gdGhlIHNwZWNpZmll
ZCBgaW5kZXhlc2Agd2hlcmUgdGhlIGFyZ3VtZW50IHZhbHVlIGF0IHRoZSBmaXJzdCBpbmRleCBp
cwoJICAgICAqIHByb3ZpZGVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgdGhlIGFyZ3VtZW50IHZh
bHVlIGF0IHRoZSBzZWNvbmQgaW5kZXggaXMKCSAgICAgKiBwcm92aWRlZCBhcyB0aGUgc2Vjb25k
IGFyZ3VtZW50LCBhbmQgc28gb24uCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1l
bWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb24K
CSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZWFycmFuZ2Ug
YXJndW1lbnRzIGZvci4KCSAgICAgKiBAcGFyYW0gey4uLihudW1iZXJ8bnVtYmVyW10pfSBpbmRl
eGVzIFRoZSBhcnJhbmdlZCBhcmd1bWVudCBpbmRleGVzLgoJICAgICAqIEByZXR1cm5zIHtGdW5j
dGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiB2YXIgcmVhcmdlZCA9IF8ucmVhcmcoZnVuY3Rpb24oYSwgYiwgYykgewoJICAgICAq
ICAgcmV0dXJuIFthLCBiLCBjXTsKCSAgICAgKiB9LCBbMiwgMCwgMV0pOwoJICAgICAqCgkgICAg
ICogcmVhcmdlZCgnYicsICdjJywgJ2EnKQoJICAgICAqIC8vID0+IFsnYScsICdiJywgJ2MnXQoJ
ICAgICAqLwoJICAgIHZhciByZWFyZyA9IGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmMsIGluZGV4ZXMp
IHsKCSAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUkVBUkdfRkxBRywgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5kZXhlcyk7CgkgICAgfSk7CgoJICAgIC8qKgoJ
ICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0
aGlzYCBiaW5kaW5nIG9mIHRoZQoJICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gYW5kIGFyZ3VtZW50
cyBmcm9tIGBzdGFydGAgYW5kIGJleW9uZCBwcm92aWRlZCBhcwoJICAgICAqIGFuIGFycmF5LgoJ
ICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZQoJICAg
ICAqIFtyZXN0IHBhcmFtZXRlcl0oaHR0cHM6Ly9tZG4uaW8vcmVzdF9wYXJhbWV0ZXJzKS4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259
IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uCgkgICAgICog
QHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24g
b2YgdGhlIHJlc3QgcGFyYW1ldGVyLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJu
cyB0aGUgbmV3IGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIg
c2F5ID0gXy5yZXN0KGZ1bmN0aW9uKHdoYXQsIG5hbWVzKSB7CgkgICAgICogICByZXR1cm4gd2hh
dCArICcgJyArIF8uaW5pdGlhbChuYW1lcykuam9pbignLCAnKSArCgkgICAgICogICAgIChfLnNp
emUobmFtZXMpID4gMSA/ICcsICYgJyA6ICcnKSArIF8ubGFzdChuYW1lcyk7CgkgICAgICogfSk7
CgkgICAgICoKCSAgICAgKiBzYXkoJ2hlbGxvJywgJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMn
KTsKCSAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnCgkgICAgICov
CgkgICAgZnVuY3Rpb24gcmVzdChmdW5jLCBzdGFydCkgewoJICAgICAgaWYgKHR5cGVvZiBmdW5j
ICE9ICdmdW5jdGlvbicpIHsKCSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9S
X1RFWFQpOwoJICAgICAgfQoJICAgICAgc3RhcnQgPSBzdGFydCA9PT0gdW5kZWZpbmVkID8gc3Rh
cnQgOiB0b0ludGVnZXIoc3RhcnQpOwoJICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0
KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9r
ZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZQoJICAgICAqIGNyZWF0ZSBm
dW5jdGlvbiBhbmQgYW4gYXJyYXkgb2YgYXJndW1lbnRzIG11Y2ggbGlrZQoJICAgICAqIFtgRnVu
Y3Rpb24jYXBwbHlgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIv
Ny4wLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5KS4KCSAgICAgKgoJICAgICAqICoqTm90
ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUKCSAgICAgKiBbc3ByZWFkIG9wZXJhdG9y
XShodHRwczovL21kbi5pby9zcHJlYWRfb3BlcmF0b3IpLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMi4wCgkgICAgICogQGNhdGVn
b3J5IEZ1bmN0aW9uCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24g
dG8gc3ByZWFkIGFyZ3VtZW50cyBvdmVyLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9
MF0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzcHJlYWQuCgkgICAgICogQHJldHVybnMge0Z1
bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIHZhciBzYXkgPSBfLnNwcmVhZChmdW5jdGlvbih3aG8sIHdoYXQpIHsKCSAgICAg
KiAgIHJldHVybiB3aG8gKyAnIHNheXMgJyArIHdoYXQ7CgkgICAgICogfSk7CgkgICAgICoKCSAg
ICAgKiBzYXkoWydmcmVkJywgJ2hlbGxvJ10pOwoJICAgICAqIC8vID0+ICdmcmVkIHNheXMgaGVs
bG8nCgkgICAgICoKCSAgICAgKiB2YXIgbnVtYmVycyA9IFByb21pc2UuYWxsKFsKCSAgICAgKiAg
IFByb21pc2UucmVzb2x2ZSg0MCksCgkgICAgICogICBQcm9taXNlLnJlc29sdmUoMzYpCgkgICAg
ICogXSk7CgkgICAgICoKCSAgICAgKiBudW1iZXJzLnRoZW4oXy5zcHJlYWQoZnVuY3Rpb24oeCwg
eSkgewoJICAgICAqICAgcmV0dXJuIHggKyB5OwoJICAgICAqIH0pKTsKCSAgICAgKiAvLyA9PiBh
IFByb21pc2Ugb2YgNzYKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBzcHJlYWQoZnVuYywgc3RhcnQp
IHsKCSAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CgkgICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTsKCSAgICAgIH0KCSAgICAgIHN0YXJ0ID0g
c3RhcnQgPT0gbnVsbCA/IDAgOiBuYXRpdmVNYXgodG9JbnRlZ2VyKHN0YXJ0KSwgMCk7CgkgICAg
ICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykgewoJICAgICAgICB2YXIgYXJyYXkgPSBh
cmdzW3N0YXJ0XSwKCSAgICAgICAgICAgIG90aGVyQXJncyA9IGNhc3RTbGljZShhcmdzLCAwLCBz
dGFydCk7CgoJICAgICAgICBpZiAoYXJyYXkpIHsKCSAgICAgICAgICBhcnJheVB1c2gob3RoZXJB
cmdzLCBhcnJheSk7CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMs
IG90aGVyQXJncyk7CgkgICAgICB9KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMg
YSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25j
ZSBwZXIKCSAgICAgKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1
bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYAoJICAgICAqIG1ldGhvZCB0byBjYW5jZWwgZGVs
YXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8KCSAgICAgKiBp
bW1lZGlhdGVseSBpbnZva2UgdGhlbS4gUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hl
dGhlciBgZnVuY2AKCSAgICAgKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQv
b3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgCgkgICAgICogdGltZW91dC4gVGhlIGBmdW5j
YCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZQoJICAg
ICAqIHRocm90dGxlZCBmdW5jdGlvbi4gU3Vic2VxdWVudCBjYWxscyB0byB0aGUgdGhyb3R0bGVk
IGZ1bmN0aW9uIHJldHVybiB0aGUKCSAgICAgKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGlu
dm9jYXRpb24uCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJh
aWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzCgkgICAgICogaW52b2tlZCBvbiB0
aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVu
Y3Rpb24KCSAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRg
IHRpbWVvdXQuCgkgICAgICoKCSAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2Ag
aXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWQKCSAgICAgKiB1bnRpbCB0
byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBv
ZiBgMGAuCgkgICAgICoKCSAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0
cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1w
bGVzLykKCSAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBf
LnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAg
ICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IEZ1
bmN0aW9uCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhy
b3R0bGUuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWls
bGlzZWNvbmRzIHRvIHRocm90dGxlIGludm9jYXRpb25zIHRvLgoJICAgICAqIEBwYXJhbSB7T2Jq
ZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LgoJICAgICAqIEBwYXJhbSB7Ym9v
bGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXQoJICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9u
IHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuCgkgICAgICogQHBhcmFtIHtib29sZWFu
fSBbb3B0aW9ucy50cmFpbGluZz10cnVlXQoJICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRo
ZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlv
bn0gUmV0dXJucyB0aGUgbmV3IHRocm90dGxlZCBmdW5jdGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogLy8gQXZvaWQgZXhjZXNzaXZlbHkgdXBkYXRpbmcgdGhlIHBvc2l0aW9u
IHdoaWxlIHNjcm9sbGluZy4KCSAgICAgKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50
aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7CgkgICAgICoKCSAgICAgKiAvLyBJbnZva2Ug
YHJlbmV3VG9rZW5gIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBidXQgbm90IG1vcmUg
dGhhbiBvbmNlIGV2ZXJ5IDUgbWludXRlcy4KCSAgICAgKiB2YXIgdGhyb3R0bGVkID0gXy50aHJv
dHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7CgkgICAgICog
alF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7CgkgICAgICoKCSAgICAgKiAv
LyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLgoJICAgICAqIGpRdWVy
eSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpOwoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKCSAgICAgIHZhciBsZWFk
aW5nID0gdHJ1ZSwKCSAgICAgICAgICB0cmFpbGluZyA9IHRydWU7CgoJICAgICAgaWYgKHR5cGVv
ZiBmdW5jICE9ICdmdW5jdGlvbicpIHsKCSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5D
X0VSUk9SX1RFWFQpOwoJICAgICAgfQoJICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7Cgkg
ICAgICAgIGxlYWRpbmcgPSAnbGVhZGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy5sZWFkaW5n
IDogbGVhZGluZzsKCSAgICAgICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAh
IW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZzsKCSAgICAgIH0KCSAgICAgIHJldHVybiBkZWJv
dW5jZShmdW5jLCB3YWl0LCB7CgkgICAgICAgICdsZWFkaW5nJzogbGVhZGluZywKCSAgICAgICAg
J21heFdhaXQnOiB3YWl0LAoJICAgICAgICAndHJhaWxpbmcnOiB0cmFpbGluZwoJICAgICAgfSk7
CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRz
IHVwIHRvIG9uZSBhcmd1bWVudCwgaWdub3JpbmcgYW55CgkgICAgICogYWRkaXRpb25hbCBhcmd1
bWVudHMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb24KCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci4KCSAgICAg
KiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uCgkg
ICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8u
dW5hcnkocGFyc2VJbnQpKTsKCSAgICAgKiAvLyA9PiBbNiwgOCwgMTBdCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gdW5hcnkoZnVuYykgewoJICAgICAgcmV0dXJuIGFyeShmdW5jLCAxKTsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGB2YWx1
ZWAgdG8gYHdyYXBwZXJgIGFzIGl0cyBmaXJzdAoJICAgICAqIGFyZ3VtZW50LiBBbnkgYWRkaXRp
b25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZSBhcHBlbmRlZAoJICAg
ICAqIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBgd3JhcHBlcmAuIFRoZSB3cmFwcGVyIGlzIGlu
dm9rZWQgd2l0aCB0aGUgYHRoaXNgCgkgICAgICogYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5j
dGlvbi4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvbgoJICAgICAqIEBwYXJhbSB7
Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3dy
YXBwZXI9aWRlbnRpdHldIFRoZSB3cmFwcGVyIGZ1bmN0aW9uLgoJICAgICAqIEByZXR1cm5zIHtG
dW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAg
ICoKCSAgICAgKiB2YXIgcCA9IF8ud3JhcChfLmVzY2FwZSwgZnVuY3Rpb24oZnVuYywgdGV4dCkg
ewoJICAgICAqICAgcmV0dXJuICc8cD4nICsgZnVuYyh0ZXh0KSArICc8L3A+JzsKCSAgICAgKiB9
KTsKCSAgICAgKgoJICAgICAqIHAoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7CgkgICAgICog
Ly8gPT4gJzxwPmZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlczwvcD4nCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gd3JhcCh2YWx1ZSwgd3JhcHBlcikgewoJICAgICAgcmV0dXJuIHBhcnRpYWwoY2Fz
dEZ1bmN0aW9uKHdyYXBwZXIpLCB2YWx1ZSk7CgkgICAgfQoKCSAgICAvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCgoJICAgIC8qKgoJICAgICAqIENhc3RzIGB2YWx1ZWAgYXMgYW4gYXJyYXkgaWYgaXQncyBu
b3Qgb25lLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAg
ICogQHNpbmNlIDQuNC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0
dXJucyB0aGUgY2FzdCBhcnJheS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5j
YXN0QXJyYXkoMSk7CgkgICAgICogLy8gPT4gWzFdCgkgICAgICoKCSAgICAgKiBfLmNhc3RBcnJh
eSh7ICdhJzogMSB9KTsKCSAgICAgKiAvLyA9PiBbeyAnYSc6IDEgfV0KCSAgICAgKgoJICAgICAq
IF8uY2FzdEFycmF5KCdhYmMnKTsKCSAgICAgKiAvLyA9PiBbJ2FiYyddCgkgICAgICoKCSAgICAg
KiBfLmNhc3RBcnJheShudWxsKTsKCSAgICAgKiAvLyA9PiBbbnVsbF0KCSAgICAgKgoJICAgICAq
IF8uY2FzdEFycmF5KHVuZGVmaW5lZCk7CgkgICAgICogLy8gPT4gW3VuZGVmaW5lZF0KCSAgICAg
KgoJICAgICAqIF8uY2FzdEFycmF5KCk7CgkgICAgICogLy8gPT4gW10KCSAgICAgKgoJICAgICAq
IHZhciBhcnJheSA9IFsxLCAyLCAzXTsKCSAgICAgKiBjb25zb2xlLmxvZyhfLmNhc3RBcnJheShh
cnJheSkgPT09IGFycmF5KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICovCgkgICAgZnVuY3Rp
b24gY2FzdEFycmF5KCkgewoJICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CgkgICAgICAg
IHJldHVybiBbXTsKCSAgICAgIH0KCSAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1swXTsKCSAg
ICAgIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsKCSAgICB9CgoJICAg
IC8qKgoJICAgICAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuCgkgICAgICoK
CSAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGUKCSAg
ICAgKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVy
ZWRfY2xvbmVfYWxnb3JpdGhtKQoJICAgICAqIGFuZCBzdXBwb3J0cyBjbG9uaW5nIGFycmF5cywg
YXJyYXkgYnVmZmVycywgYm9vbGVhbnMsIGRhdGUgb2JqZWN0cywgbWFwcywKCSAgICAgKiBudW1i
ZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBh
bmQgdHlwZWQKCSAgICAgKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9m
IGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZAoJICAgICAqIGFzIHBsYWluIG9iamVjdHMu
IEFuIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2gK
CSAgICAgKiBhcyBlcnJvciBvYmplY3RzLCBmdW5jdGlvbnMsIERPTSBub2RlcywgYW5kIFdlYWtN
YXBzLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICog
QHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZh
bHVlIFRoZSB2YWx1ZSB0byBjbG9uZS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUg
Y2xvbmVkIHZhbHVlLgoJICAgICAqIEBzZWUgXy5jbG9uZURlZXAKCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07Cgkg
ICAgICoKCSAgICAgKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7CgkgICAgICogY29u
c29sZS5sb2coc2hhbGxvd1swXSA9PT0gb2JqZWN0c1swXSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIGNsb25lKHZhbHVlKSB7CgkgICAgICByZXR1cm4gYmFzZUNs
b25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
VGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3Vz
dG9taXplcmAgd2hpY2gKCSAgICAgKiBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGNsb25lZCB2
YWx1ZS4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsCgkgICAgICogY2xvbmlu
ZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBp
bnZva2VkIHdpdGgKCSAgICAgKiB1cCB0byBmb3VyIGFyZ3VtZW50czsgKHZhbHVlIFssIGluZGV4
fGtleSwgb2JqZWN0LCBzdGFja10pLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBt
ZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAg
ICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS4KCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjbG9uaW5n
LgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuCgkgICAgICog
QHNlZSBfLmNsb25lRGVlcFdpdGgKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVu
Y3Rpb24gY3VzdG9taXplcih2YWx1ZSkgewoJICAgICAqICAgaWYgKF8uaXNFbGVtZW50KHZhbHVl
KSkgewoJICAgICAqICAgICByZXR1cm4gdmFsdWUuY2xvbmVOb2RlKGZhbHNlKTsKCSAgICAgKiAg
IH0KCSAgICAgKiB9CgkgICAgICoKCSAgICAgKiB2YXIgZWwgPSBfLmNsb25lV2l0aChkb2N1bWVu
dC5ib2R5LCBjdXN0b21pemVyKTsKCSAgICAgKgoJICAgICAqIGNvbnNvbGUubG9nKGVsID09PSBk
b2N1bWVudC5ib2R5KTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqIGNvbnNvbGUubG9nKGVs
Lm5vZGVOYW1lKTsKCSAgICAgKiAvLyA9PiAnQk9EWScKCSAgICAgKiBjb25zb2xlLmxvZyhlbC5j
aGlsZE5vZGVzLmxlbmd0aCk7CgkgICAgICogLy8gPT4gMAoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGNsb25lV2l0aCh2YWx1ZSwgY3VzdG9taXplcikgewoJICAgICAgY3VzdG9taXplciA9IHR5cGVv
ZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkOwoJICAg
ICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21pemVy
KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVg
IGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLgoJICAgICAqCgkgICAg
ICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDEuMC4wCgkgICAg
ICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBy
ZWN1cnNpdmVseSBjbG9uZS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBj
bG9uZWQgdmFsdWUuCgkgICAgICogQHNlZSBfLmNsb25lCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIHZhciBvYmplY3RzID0gW3sgJ2EnOiAxIH0sIHsgJ2InOiAyIH1dOwoJICAgICAq
CgkgICAgICogdmFyIGRlZXAgPSBfLmNsb25lRGVlcChvYmplY3RzKTsKCSAgICAgKiBjb25zb2xl
LmxvZyhkZWVwWzBdID09PSBvYmplY3RzWzBdKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIGJhc2VDbG9u
ZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVXaXRoYCBleGNlcHQg
dGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC4KCSAgICAgKgoJICAgICAqIEBzdGF0
aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRl
Z29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZl
bHkgY2xvbmUuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5j
dGlvbiB0byBjdXN0b21pemUgY2xvbmluZy4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0
aGUgZGVlcCBjbG9uZWQgdmFsdWUuCgkgICAgICogQHNlZSBfLmNsb25lV2l0aAoJICAgICAqIEBl
eGFtcGxlCgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7CgkgICAg
ICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7CgkgICAgICogICAgIHJldHVybiB2YWx1ZS5j
bG9uZU5vZGUodHJ1ZSk7CgkgICAgICogICB9CgkgICAgICogfQoJICAgICAqCgkgICAgICogdmFy
IGVsID0gXy5jbG9uZURlZXBXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpOwoJICAgICAq
CgkgICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpOwoJICAgICAqIC8vID0+
IGZhbHNlCgkgICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpOwoJICAgICAqIC8vID0+ICdC
T0RZJwoJICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTsKCSAgICAgKiAv
LyA9PiAyMAoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsIGN1c3Rv
bWl6ZXIpIHsKCSAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rp
b24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDsKCSAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFs
dWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7Cgkg
ICAgfQoKCSAgICAvKioKCSAgICAgKiBDaGVja3MgaWYgYG9iamVjdGAgY29uZm9ybXMgdG8gYHNv
dXJjZWAgYnkgaW52b2tpbmcgdGhlIHByZWRpY2F0ZQoJICAgICAqIHByb3BlcnRpZXMgb2YgYHNv
dXJjZWAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAu
CgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBg
Xy5jb25mb3Jtc2Agd2hlbiBgc291cmNlYCBpcwoJICAgICAqIHBhcnRpYWxseSBhcHBsaWVkLgoJ
ICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNl
IDQuMTQuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9i
amVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJj
ZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHByZWRpY2F0ZXMgdG8gY29uZm9ybSB0by4KCSAgICAg
KiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgY29uZm9ybXMs
IGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVj
dCA9IHsgJ2EnOiAxLCAnYic6IDIgfTsKCSAgICAgKgoJICAgICAqIF8uY29uZm9ybXNUbyhvYmpl
Y3QsIHsgJ2InOiBmdW5jdGlvbihuKSB7IHJldHVybiBuID4gMTsgfSB9KTsKCSAgICAgKiAvLyA9
PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rp
b24obikgeyByZXR1cm4gbiA+IDI7IH0gfSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBjb25mb3Jtc1RvKG9iamVjdCwgc291cmNlKSB7CgkgICAgICByZXR1cm4g
c291cmNlID09IG51bGwgfHwgYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIGtleXMoc291
cmNlKSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBQZXJmb3JtcyBhCgkgICAgICogW2BTYW1l
VmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNz
ZWMtc2FtZXZhbHVlemVybykKCSAgICAgKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0
byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC4KCSAgICAgKgoJICAgICAqIEBzdGF0
aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRl
Z29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS4K
CSAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLgoJICAg
ICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBl
cXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IHZhciBvYmplY3QgPSB7ICdhJzogMSB9OwoJICAgICAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07
CgkgICAgICoKCSAgICAgKiBfLmVxKG9iamVjdCwgb2JqZWN0KTsKCSAgICAgKiAvLyA9PiB0cnVl
CgkgICAgICoKCSAgICAgKiBfLmVxKG9iamVjdCwgb3RoZXIpOwoJICAgICAqIC8vID0+IGZhbHNl
CgkgICAgICoKCSAgICAgKiBfLmVxKCdhJywgJ2EnKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAg
ICoKCSAgICAgKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpOwoJICAgICAqIC8vID0+IGZhbHNlCgkg
ICAgICoKCSAgICAgKiBfLmVxKE5hTiwgTmFOKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICov
CgkgICAgZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7CgkgICAgICByZXR1cm4gdmFsdWUgPT09
IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJg
LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNp
bmNlIDMuOS4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBjb21wYXJlLgoJICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVy
IHZhbHVlIHRvIGNvbXBhcmUuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRy
dWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsCgkgICAgICogIGVsc2UgYGZh
bHNlYC4KCSAgICAgKiBAc2VlIF8ubHQKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
Xy5ndCgzLCAxKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmd0KDMsIDMp
OwoJICAgICAqIC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiBfLmd0KDEsIDMpOwoJICAgICAq
IC8vID0+IGZhbHNlCgkgICAgICovCgkgICAgdmFyIGd0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJh
dGlvbihiYXNlR3QpOwoKCSAgICAvKioKCSAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBncmVh
dGVyIHRoYW4gb3IgZXF1YWwgdG8gYG90aGVyYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjkuMAoJICAgICAqIEBjYXRlZ29yeSBM
YW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS4KCSAgICAg
KiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLgoJICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhh
biBvciBlcXVhbCB0bwoJICAgICAqICBgb3RoZXJgLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQHNl
ZSBfLmx0ZQoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmd0ZSgzLCAxKTsKCSAg
ICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmd0ZSgzLCAzKTsKCSAgICAgKiAvLyA9
PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmd0ZSgxLCAzKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJ
ICAgICAqLwoJICAgIHZhciBndGUgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGZ1bmN0aW9u
KHZhbHVlLCBvdGhlcikgewoJICAgICAgcmV0dXJuIHZhbHVlID49IG90aGVyOwoJICAgIH0pOwoK
CSAgICAvKioKCSAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50
c2Agb2JqZWN0LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0g
eyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
UmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsCgkgICAg
ICogIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5pc0Fy
Z3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTsKCSAgICAgKiAvLyA9
PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7CgkgICAgICog
Ly8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICB2YXIgaXNBcmd1bWVudHMgPSBiYXNlSXNBcmd1bWVu
dHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPyBiYXNlSXNBcmd1bWVudHMg
OiBmdW5jdGlvbih2YWx1ZSkgewoJICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYg
aGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmCgkgICAgICAgICFwcm9wZXJ0
eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7CgkgICAgfTsKCgkgICAgLyoqCgkg
ICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVj
dC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1
ZSBUaGUgdmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMg
YHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhh
bXBsZQoJICAgICAqCgkgICAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7CgkgICAgICogLy8gPT4g
dHJ1ZQoJICAgICAqCgkgICAgICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pOwoJ
ICAgICAqIC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiBfLmlzQXJyYXkoJ2FiYycpOwoJICAg
ICAqIC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiBfLmlzQXJyYXkoXy5ub29wKTsKCSAgICAg
KiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsK
CgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBg
QXJyYXlCdWZmZXJgIG9iamVjdC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVt
YmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjMuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAg
ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMg
e2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBl
bHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNBcnJheUJ1
ZmZlcihuZXcgQXJyYXlCdWZmZXIoMikpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAg
ICAqIF8uaXNBcnJheUJ1ZmZlcihuZXcgQXJyYXkoMikpOwoJICAgICAqIC8vID0+IGZhbHNlCgkg
ICAgICovCgkgICAgdmFyIGlzQXJyYXlCdWZmZXIgPSBub2RlSXNBcnJheUJ1ZmZlciA/IGJhc2VV
bmFyeShub2RlSXNBcnJheUJ1ZmZlcikgOiBiYXNlSXNBcnJheUJ1ZmZlcjsKCgkgICAgLyoqCgkg
ICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRl
cmVkIGFycmF5LWxpa2UgaWYgaXQncwoJICAgICAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBg
dmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3IKCSAgICAgKiBl
cXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lO
VEVHRVJgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAg
ICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuCgkgICAg
ICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTsKCSAg
ICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJv
ZHkuY2hpbGRyZW4pOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaXNBcnJh
eUxpa2UoJ2FiYycpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaXNBcnJh
eUxpa2UoXy5ub29wKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IGlzQXJyYXlMaWtlKHZhbHVlKSB7CgkgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xl
bmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTsKCSAgICB9CgoJICAgIC8q
KgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0
IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWAKCSAgICAgKiBpcyBhbiBvYmplY3QuCgkgICAgICoK
CSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAK
CSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVl
IHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBg
dmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LAoJICAgICAqICBlbHNlIGBmYWxzZWAuCgkg
ICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIs
IDNdKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzQXJyYXlMaWtlT2Jq
ZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJ
ICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpOwoJICAgICAqIC8vID0+IGZhbHNlCgkg
ICAgICoKCSAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7CgkgICAgICogLy8gPT4g
ZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkgewoJ
ICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBh
cyBhIGJvb2xlYW4gcHJpbWl0aXZlIG9yIG9iamVjdC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMK
CSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29y
eSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suCgkgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBib29s
ZWFuLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNC
b29sZWFuKGZhbHNlKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzQm9v
bGVhbihudWxsKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlz
Qm9vbGVhbih2YWx1ZSkgewoJICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09
PSBmYWxzZSB8fAoJICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZh
bHVlKSA9PSBib29sVGFnKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFs
dWVgIGlzIGEgYnVmZmVyLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDQuMy4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBA
cGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2Vg
LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIo
MikpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaXNCdWZmZXIobmV3IFVp
bnQ4QXJyYXkoMikpOwoJICAgICAqIC8vID0+IGZhbHNlCgkgICAgICovCgkgICAgdmFyIGlzQnVm
ZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlOwoKCSAgICAvKioKCSAgICAgKiBDaGVj
a3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYERhdGVgIG9iamVjdC4KCSAgICAgKgoJ
ICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjEuMAoJ
ICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUg
dG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2
YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiBfLmlzRGF0ZShuZXcgRGF0ZSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAg
ICAqCgkgICAgICogXy5pc0RhdGUoJ01vbiBBcHJpbCAyMyAyMDEyJyk7CgkgICAgICogLy8gPT4g
ZmFsc2UKCSAgICAgKi8KCSAgICB2YXIgaXNEYXRlID0gbm9kZUlzRGF0ZSA/IGJhc2VVbmFyeShu
b2RlSXNEYXRlKSA6IGJhc2VJc0RhdGU7CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFs
dWVgIGlzIGxpa2VseSBhIERPTSBlbGVtZW50LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAg
ICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IExh
bmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIERPTSBlbGVt
ZW50LCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNF
bGVtZW50KGRvY3VtZW50LmJvZHkpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAq
IF8uaXNFbGVtZW50KCc8Ym9keT4nKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2
YWx1ZSkgJiYgdmFsdWUubm9kZVR5cGUgPT09IDEgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2Jq
ZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC4KCSAgICAgKgoJICAgICAqIE9iamVjdHMgYXJl
IGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBr
ZXllZAoJICAgICAqIHByb3BlcnRpZXMuCgkgICAgICoKCSAgICAgKiBBcnJheS1saWtlIHZhbHVl
cyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywg
b3IKCSAgICAgKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBp
ZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuCgkgICAgICogU2ltaWxhcmx5LCBtYXBzIGFu
ZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAu
CgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2lu
Y2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUg
VGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0
cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8uaXNFbXB0eShudWxsKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAg
ICoKCSAgICAgKiBfLmlzRW1wdHkodHJ1ZSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkg
ICAgICogXy5pc0VtcHR5KDEpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8u
aXNFbXB0eShbMSwgMiwgM10pOwoJICAgICAqIC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiBf
LmlzRW1wdHkoeyAnYSc6IDEgfSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBm
dW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7CgkgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewoJICAg
ICAgICByZXR1cm4gdHJ1ZTsKCSAgICAgIH0KCSAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkg
JiYKCSAgICAgICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcn
IHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fAoJICAgICAgICAgICAgaXNC
dWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUp
KSkgewoJICAgICAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDsKCSAgICAgIH0KCSAgICAgIHZhciB0
YWcgPSBnZXRUYWcodmFsdWUpOwoJICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNl
dFRhZykgewoJICAgICAgICByZXR1cm4gIXZhbHVlLnNpemU7CgkgICAgICB9CgkgICAgICBpZiAo
aXNQcm90b3R5cGUodmFsdWUpKSB7CgkgICAgICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxl
bmd0aDsKCSAgICAgIH0KCSAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkgewoJICAgICAgICBp
ZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgewoJICAgICAgICAgIHJldHVybiBm
YWxzZTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHRydWU7CgkgICAgfQoKCSAg
ICAvKioKCSAgICAgKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1
ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlCgkgICAgICogZXF1aXZhbGVudC4KCSAgICAgKgoJ
ICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBh
cnJheSBidWZmZXJzLCBib29sZWFucywKCSAgICAgKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVj
dHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsCgkgICAgICogc2V0
cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBh
cmUgY29tcGFyZWQKCSAgICAgKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFi
bGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET00KCSAgICAgKiBub2RlcyBhcmUgY29tcGFy
ZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQGNhdGVn
b3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLgoJ
ICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuCgkgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVx
dWl2YWxlbnQsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
dmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07CgkgICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTsK
CSAgICAgKgoJICAgICAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTsKCSAgICAgKiAvLyA9PiB0
cnVlCgkgICAgICoKCSAgICAgKiBvYmplY3QgPT09IG90aGVyOwoJICAgICAqIC8vID0+IGZhbHNl
CgkgICAgICovCgkgICAgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHsKCSAgICAgIHJl
dHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
VGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0VxdWFsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBj
dXN0b21pemVyYCB3aGljaAoJICAgICAqIGlzIGludm9rZWQgdG8gY29tcGFyZSB2YWx1ZXMuIElm
IGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLCBjb21wYXJpc29ucwoJICAgICAqIGFy
ZSBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZv
a2VkIHdpdGggdXAgdG8KCSAgICAgKiBzaXggYXJndW1lbnRzOiAob2JqVmFsdWUsIG90aFZhbHVl
IFssIGluZGV4fGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2tdKS4KCSAgICAgKgoJICAgICAqIEBz
dGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBj
YXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFy
ZS4KCSAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLgoJ
ICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3Vz
dG9taXplIGNvbXBhcmlzb25zLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0
cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIGlzR3JlZXRpbmcodmFsdWUpIHsKCSAg
ICAgKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVzdCh2YWx1ZSk7CgkgICAgICogfQoJICAg
ICAqCgkgICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUpIHsKCSAg
ICAgKiAgIGlmIChpc0dyZWV0aW5nKG9ialZhbHVlKSAmJiBpc0dyZWV0aW5nKG90aFZhbHVlKSkg
ewoJICAgICAqICAgICByZXR1cm4gdHJ1ZTsKCSAgICAgKiAgIH0KCSAgICAgKiB9CgkgICAgICoK
CSAgICAgKiB2YXIgYXJyYXkgPSBbJ2hlbGxvJywgJ2dvb2RieWUnXTsKCSAgICAgKiB2YXIgb3Ro
ZXIgPSBbJ2hpJywgJ2dvb2RieWUnXTsKCSAgICAgKgoJICAgICAqIF8uaXNFcXVhbFdpdGgoYXJy
YXksIG90aGVyLCBjdXN0b21pemVyKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICovCgkgICAg
ZnVuY3Rpb24gaXNFcXVhbFdpdGgodmFsdWUsIG90aGVyLCBjdXN0b21pemVyKSB7CgkgICAgICBj
dXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIg
OiB1bmRlZmluZWQ7CgkgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIo
dmFsdWUsIG90aGVyKSA6IHVuZGVmaW5lZDsKCSAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVm
aW5lZCA/IGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgdW5kZWZpbmVkLCBjdXN0b21pemVyKSA6
ICEhcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMg
YW4gYEVycm9yYCwgYEV2YWxFcnJvcmAsIGBSYW5nZUVycm9yYCwgYFJlZmVyZW5jZUVycm9yYCwK
CSAgICAgKiBgU3ludGF4RXJyb3JgLCBgVHlwZUVycm9yYCwgb3IgYFVSSUVycm9yYCBvYmplY3Qu
CgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2lu
Y2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUg
VGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0
cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGVycm9yIG9iamVjdCwgZWxzZSBgZmFsc2VgLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmlzRXJyb3IobmV3IEVycm9yKTsKCSAgICAgKiAv
LyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzRXJyb3IoRXJyb3IpOwoJICAgICAqIC8vID0+
IGZhbHNlCgkgICAgICovCgkgICAgZnVuY3Rpb24gaXNFcnJvcih2YWx1ZSkgewoJICAgICAgaWYg
KCFpc09iamVjdExpa2UodmFsdWUpKSB7CgkgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgIH0K
CSAgICAgIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTsKCSAgICAgIHJldHVybiB0YWcgPT0g
ZXJyb3JUYWcgfHwgdGFnID09IGRvbUV4Y1RhZyB8fAoJICAgICAgICAodHlwZW9mIHZhbHVlLm1l
c3NhZ2UgPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlLm5hbWUgPT0gJ3N0cmluZycgJiYgIWlz
UGxhaW5PYmplY3QodmFsdWUpKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBg
dmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuCgkgICAgICoKCSAgICAgKiAqKk5v
dGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24KCSAgICAgKiBbYE51bWJlci5pc0Zpbml0ZWBd
KGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0Zpbml0ZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGlj
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdv
cnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAg
ICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZmlu
aXRlIG51bWJlciwgZWxzZSBgZmFsc2VgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAg
KiBfLmlzRmluaXRlKDMpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaXNG
aW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAg
ICogXy5pc0Zpbml0ZShJbmZpbml0eSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKgoJICAg
ICAqIF8uaXNGaW5pdGUoJzMnKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1
bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7CgkgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdu
dW1iZXInICYmIG5hdGl2ZUlzRmluaXRlKHZhbHVlKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC4K
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBU
aGUgdmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRy
dWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLgoJICAgICAqIEBleGFt
cGxlCgkgICAgICoKCSAgICAgKiBfLmlzRnVuY3Rpb24oXyk7CgkgICAgICogLy8gPT4gdHJ1ZQoJ
ICAgICAqCgkgICAgICogXy5pc0Z1bmN0aW9uKC9hYmMvKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHsKCSAgICAgIGlmICghaXNP
YmplY3QodmFsdWUpKSB7CgkgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgIH0KCSAgICAgIC8v
IFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlw
ZW9mYCBvcGVyYXRvcgoJICAgICAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0
JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuCgkgICAgICB2YXIgdGFn
ID0gYmFzZUdldFRhZyh2YWx1ZSk7CgkgICAgICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFn
ID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gaW50ZWdlci4KCSAgICAg
KgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbgoJICAgICAqIFtgTnVt
YmVyLmlzSW50ZWdlcmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0ludGVnZXIpLgoJICAgICAq
CgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4w
CgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1
ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYg
YHZhbHVlYCBpcyBhbiBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIF8uaXNJbnRlZ2VyKDMpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJ
ICAgICAqIF8uaXNJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpOwoJICAgICAqIC8vID0+IGZhbHNl
CgkgICAgICoKCSAgICAgKiBfLmlzSW50ZWdlcihJbmZpbml0eSk7CgkgICAgICogLy8gPT4gZmFs
c2UKCSAgICAgKgoJICAgICAqIF8uaXNJbnRlZ2VyKCczJyk7CgkgICAgICogLy8gPT4gZmFsc2UK
CSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHsKCSAgICAgIHJldHVybiB0
eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT0gdG9JbnRlZ2VyKHZhbHVlKTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXkt
bGlrZSBsZW5ndGguCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9v
c2VseSBiYXNlZCBvbgoJICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuCgkgICAgICoKCSAgICAgKiBAc3Rh
dGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0
ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJ
ICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEg
dmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAg
ICAqIF8uaXNMZW5ndGgoMyk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5p
c0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqCgkg
ICAgICogXy5pc0xlbmd0aChJbmZpbml0eSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKgoJ
ICAgICAqIF8uaXNMZW5ndGgoJzMnKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7CgkgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09
ICdudW1iZXInICYmCgkgICAgICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFs
dWUgPD0gTUFYX1NBRkVfSU5URUdFUjsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBp
ZiBgdmFsdWVgIGlzIHRoZQoJICAgICAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEt
aW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10
eXBlcykKCSAgICAgKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVj
dHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApCgkgICAg
ICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4x
LjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZh
bHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBp
ZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiBfLmlzT2JqZWN0KHt9KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoK
CSAgICAgKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAq
CgkgICAgICogXy5pc09iamVjdChfLm5vb3ApOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJ
ICAgICAqIF8uaXNPYmplY3QobnVsbCk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkgewoJICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFs
dWU7CgkgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0
eXBlID09ICdmdW5jdGlvbicpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2
YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3Qg
YG51bGxgCgkgICAgICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiAib2JqZWN0Ii4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUg
dmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVg
IGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBs
ZQoJICAgICAqCgkgICAgICogXy5pc09iamVjdExpa2Uoe30pOwoJICAgICAqIC8vID0+IHRydWUK
CSAgICAgKgoJICAgICAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7CgkgICAgICogLy8gPT4g
dHJ1ZQoJICAgICAqCgkgICAgICogXy5pc09iamVjdExpa2UoXy5ub29wKTsKCSAgICAgKiAvLyA9
PiBmYWxzZQoJICAgICAqCgkgICAgICogXy5pc09iamVjdExpa2UobnVsbCk7CgkgICAgICogLy8g
PT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHsKCSAg
ICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JzsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMg
YSBgTWFwYCBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9m
IF8KCSAgICAgKiBAc2luY2UgNC4zLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBw
YXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbWFwLCBlbHNlIGBmYWxzZWAuCgkg
ICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNNYXAobmV3IE1hcCk7CgkgICAgICog
Ly8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5pc01hcChuZXcgV2Vha01hcCk7CgkgICAgICog
Ly8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICB2YXIgaXNNYXAgPSBub2RlSXNNYXAgPyBiYXNlVW5h
cnkobm9kZUlzTWFwKSA6IGJhc2VJc01hcDsKCgkgICAgLyoqCgkgICAgICogUGVyZm9ybXMgYSBw
YXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGBvYmplY3RgIGFuZCBgc291cmNlYCB0bwoJ
ICAgICAqIGRldGVybWluZSBpZiBgb2JqZWN0YCBjb250YWlucyBlcXVpdmFsZW50IHByb3BlcnR5
IHZhbHVlcy4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFs
ZW50IHRvIGBfLm1hdGNoZXNgIHdoZW4gYHNvdXJjZWAgaXMKCSAgICAgKiBwYXJ0aWFsbHkgYXBw
bGllZC4KCSAgICAgKgoJICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0
eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgCgkgICAgICogdmFsdWVzIGFnYWluc3Qg
YW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGAK
CSAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy4KCSAgICAg
KgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjAu
MAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBU
aGUgb2JqZWN0IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUg
b2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC4KCSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2Vg
LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEs
ICdiJzogMiB9OwoJICAgICAqCgkgICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDIgfSk7
CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAn
Yic6IDEgfSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc01h
dGNoKG9iamVjdCwgc291cmNlKSB7CgkgICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwg
YmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIGdldE1hdGNoRGF0YShzb3VyY2UpKTsKCSAgICB9
CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNNYXRjaGAgZXhjZXB0
IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2gKCSAgICAgKiBpcyBpbnZva2VkIHRv
IGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29t
cGFyaXNvbnMKCSAgICAgKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBg
Y3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIGZpdmUKCSAgICAgKiBhcmd1bWVudHM6IChvYmpW
YWx1ZSwgc3JjVmFsdWUsIGluZGV4fGtleSwgb2JqZWN0LCBzb3VyY2UpLgoJICAgICAqCgkgICAg
ICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAg
ICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmpl
Y3QgdG8gaW5zcGVjdC4KCSAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qg
b2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtj
dXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLgoJICAgICAq
IEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNo
LCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9u
IGlzR3JlZXRpbmcodmFsdWUpIHsKCSAgICAgKiAgIHJldHVybiAvXmgoPzppfGVsbG8pJC8udGVz
dCh2YWx1ZSk7CgkgICAgICogfQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gY3VzdG9taXplcihv
YmpWYWx1ZSwgc3JjVmFsdWUpIHsKCSAgICAgKiAgIGlmIChpc0dyZWV0aW5nKG9ialZhbHVlKSAm
JiBpc0dyZWV0aW5nKHNyY1ZhbHVlKSkgewoJICAgICAqICAgICByZXR1cm4gdHJ1ZTsKCSAgICAg
KiAgIH0KCSAgICAgKiB9CgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0ID0geyAnZ3JlZXRpbmcn
OiAnaGVsbG8nIH07CgkgICAgICogdmFyIHNvdXJjZSA9IHsgJ2dyZWV0aW5nJzogJ2hpJyB9OwoJ
ICAgICAqCgkgICAgICogXy5pc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcik7
CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzTWF0Y2hXaXRoKG9i
amVjdCwgc291cmNlLCBjdXN0b21pemVyKSB7CgkgICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1
c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7CgkgICAgICBy
ZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIGdldE1hdGNoRGF0YShzb3VyY2UpLCBj
dXN0b21pemVyKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlz
IGBOYU5gLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9u
CgkgICAgICogW2BOdW1iZXIuaXNOYU5gXShodHRwczovL21kbi5pby9OdW1iZXIvaXNOYU4pIGFu
ZCBpcyBub3QgdGhlIHNhbWUgYXMKCSAgICAgKiBnbG9iYWwgW2Bpc05hTmBdKGh0dHBzOi8vbWRu
LmlvL2lzTmFOKSB3aGljaCByZXR1cm5zIGB0cnVlYCBmb3IKCSAgICAgKiBgdW5kZWZpbmVkYCBh
bmQgb3RoZXIgbm9uLW51bWJlciB2YWx1ZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAg
ICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFu
ZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNl
IGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNOYU4oTmFOKTsK
CSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzTmFOKG5ldyBOdW1iZXIoTmFO
KSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogaXNOYU4odW5kZWZpbmVkKTsK
CSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzTmFOKHVuZGVmaW5lZCk7Cgkg
ICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc05hTih2YWx1ZSkgewoJ
ICAgICAgLy8gQW4gYE5hTmAgcHJpbWl0aXZlIGlzIHRoZSBvbmx5IHZhbHVlIHRoYXQgaXMgbm90
IGVxdWFsIHRvIGl0c2VsZi4KCSAgICAgIC8vIFBlcmZvcm0gdGhlIGB0b1N0cmluZ1RhZ2AgY2hl
Y2sgZmlyc3QgdG8gYXZvaWQgZXJyb3JzIHdpdGggc29tZQoJICAgICAgLy8gQWN0aXZlWCBvYmpl
Y3RzIGluIElFLgoJICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFs
dWU7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByaXN0
aW5lIG5hdGl2ZSBmdW5jdGlvbi4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhv
ZCBjYW4ndCByZWxpYWJseSBkZXRlY3QgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUgcHJlc2VuY2UK
CSAgICAgKiBvZiB0aGUgY29yZS1qcyBwYWNrYWdlIGJlY2F1c2UgY29yZS1qcyBjaXJjdW12ZW50
cyB0aGlzIGtpbmQgb2YgZGV0ZWN0aW9uLgoJICAgICAqIERlc3BpdGUgbXVsdGlwbGUgcmVxdWVz
dHMsIHRoZSBjb3JlLWpzIG1haW50YWluZXIgaGFzIG1hZGUgaXQgY2xlYXI6IGFueQoJICAgICAq
IGF0dGVtcHQgdG8gZml4IHRoZSBkZXRlY3Rpb24gd2lsbCBiZSBvYnN0cnVjdGVkLiBBcyBhIHJl
c3VsdCwgd2UncmUgbGVmdAoJICAgICAqIHdpdGggbGl0dGxlIGNob2ljZSBidXQgdG8gdGhyb3cg
YW4gZXJyb3IuIFVuZm9ydHVuYXRlbHksIHRoaXMgYWxzbyBhZmZlY3RzCgkgICAgICogcGFja2Fn
ZXMsIGxpa2UgW2JhYmVsLXBvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9i
YWJlbC1wb2x5ZmlsbCksCgkgICAgICogd2hpY2ggcmVseSBvbiBjb3JlLWpzLgoJICAgICAqCgkg
ICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkg
ICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0
byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZh
bHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbiwKCSAgICAgKiAgZWxzZSBgZmFsc2VgLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNo
KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzTmF0aXZlKF8pOwoJICAg
ICAqIC8vID0+IGZhbHNlCgkgICAgICovCgkgICAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHsK
CSAgICAgIGlmIChpc01hc2thYmxlKHZhbHVlKSkgewoJICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Q09SRV9FUlJPUl9URVhUKTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFs
dWUpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxg
LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNp
bmNlIDAuMS4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBg
dHJ1ZWAgaWYgYHZhbHVlYCBpcyBgbnVsbGAsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBs
ZQoJICAgICAqCgkgICAgICogXy5pc051bGwobnVsbCk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAg
ICAqCgkgICAgICogXy5pc051bGwodm9pZCAwKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAq
LwoJICAgIGZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIHZhbHVlID09PSBu
dWxsOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxg
IG9yIGB1bmRlZmluZWRgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBA
cGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBudWxsaXNoLCBlbHNlIGBmYWxzZWAu
CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNOaWwobnVsbCk7CgkgICAgICog
Ly8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5pc05pbCh2b2lkIDApOwoJICAgICAqIC8vID0+
IHRydWUKCSAgICAgKgoJICAgICAqIF8uaXNOaWwoTmFOKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzTmlsKHZhbHVlKSB7CgkgICAgICByZXR1cm4gdmFsdWUg
PT0gbnVsbDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNs
YXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LgoJICAgICAqCgkgICAg
ICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFO
YCwgd2hpY2ggYXJlCgkgICAgICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlz
RmluaXRlYCBtZXRob2QuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9m
IF8KCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBw
YXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29s
ZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAu
CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNOdW1iZXIoMyk7CgkgICAgICog
Ly8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTsK
CSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzTnVtYmVyKEluZmluaXR5KTsK
CSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzTnVtYmVyKCczJyk7CgkgICAg
ICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkgewoJ
ICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fAoJICAgICAgICAoaXNPYmpl
Y3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRo
YXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZQoJICAgICAqIGBPYmplY3RgIGNvbnN0cnVj
dG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjguMAoJICAg
ICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8g
Y2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1
ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAg
ICAqCgkgICAgICogZnVuY3Rpb24gRm9vKCkgewoJICAgICAqICAgdGhpcy5hID0gMTsKCSAgICAg
KiB9CgkgICAgICoKCSAgICAgKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7CgkgICAgICogLy8g
PT4gZmFsc2UKCSAgICAgKgoJICAgICAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pOwoJICAg
ICAqIC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAs
ICd5JzogMCB9KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzUGxhaW5P
YmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHsKCSAgICAgIGlmICghaXNPYmplY3RM
aWtlKHZhbHVlKSB8fCBiYXNlR2V0VGFnKHZhbHVlKSAhPSBvYmplY3RUYWcpIHsKCSAgICAgICAg
cmV0dXJuIGZhbHNlOwoJICAgICAgfQoJICAgICAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlKHZh
bHVlKTsKCSAgICAgIGlmIChwcm90byA9PT0gbnVsbCkgewoJICAgICAgICByZXR1cm4gdHJ1ZTsK
CSAgICAgIH0KCSAgICAgIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2Nv
bnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7CgkgICAgICByZXR1cm4gdHlwZW9mIEN0
b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJgoJICAgICAgICBmdW5j
VG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9i
amVjdC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAwLjEuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2
YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVy
bnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBA
ZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5pc1JlZ0V4cCgvYWJjLyk7CgkgICAgICogLy8gPT4g
dHJ1ZQoJICAgICAqCgkgICAgICogXy5pc1JlZ0V4cCgnL2FiYy8nKTsKCSAgICAgKiAvLyA9PiBm
YWxzZQoJICAgICAqLwoJICAgIHZhciBpc1JlZ0V4cCA9IG5vZGVJc1JlZ0V4cCA/IGJhc2VVbmFy
eShub2RlSXNSZWdFeHApIDogYmFzZUlzUmVnRXhwOwoKCSAgICAvKioKCSAgICAgKiBDaGVja3Mg
aWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlci4gQW4gaW50ZWdlciBpcyBzYWZlIGlmIGl0J3Mg
YW4gSUVFRS03NTQKCSAgICAgKiBkb3VibGUgcHJlY2lzaW9uIG51bWJlciB3aGljaCBpc24ndCB0
aGUgcmVzdWx0IG9mIGEgcm91bmRlZCB1bnNhZmUgaW50ZWdlci4KCSAgICAgKgoJICAgICAqICoq
Tm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbgoJICAgICAqIFtgTnVtYmVyLmlzU2FmZUlu
dGVnZXJgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNTYWZlSW50ZWdlcikuCgkgICAgICoKCSAg
ICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAg
ICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRv
IGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFs
dWVgIGlzIGEgc2FmZSBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIF8uaXNTYWZlSW50ZWdlcigzKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAg
ICoKCSAgICAgKiBfLmlzU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7CgkgICAgICogLy8g
PT4gZmFsc2UKCSAgICAgKgoJICAgICAqIF8uaXNTYWZlSW50ZWdlcihJbmZpbml0eSk7CgkgICAg
ICogLy8gPT4gZmFsc2UKCSAgICAgKgoJICAgICAqIF8uaXNTYWZlSW50ZWdlcignMycpOwoJICAg
ICAqIC8vID0+IGZhbHNlCgkgICAgICovCgkgICAgZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1
ZSkgewoJICAgICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gLU1BWF9TQUZF
X0lOVEVHRVIgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjsKCSAgICB9CgoJICAgIC8qKgoJ
ICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU2V0YCBvYmplY3Qu
CgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2lu
Y2UgNC4zLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUg
VGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0
cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8uaXNTZXQobmV3IFNldCk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAg
ICAqCgkgICAgICogXy5pc1NldChuZXcgV2Vha1NldCk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAg
ICAgKi8KCSAgICB2YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6
IGJhc2VJc1NldDsKCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3Np
ZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuCgkgICAgICoKCSAgICAgKiBA
c3RhdGljCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBA
Y2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNr
LgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlz
IGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IF8uaXNTdHJpbmcoJ2FiYycpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8u
aXNTdHJpbmcoMSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBp
c1N0cmluZyh2YWx1ZSkgewoJICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8
fAoJICAgICAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFz
ZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENo
ZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Ig
b2JqZWN0LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAg
ICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7Cgkg
ICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5pc1N5bWJvbCgnYWJjJyk7CgkgICAg
ICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkgewoJ
ICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fAoJICAgICAgICAoaXNPYmpl
Y3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5
cGVkIGFycmF5LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0g
eyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
UmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAu
CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50
OEFycmF5KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzVHlwZWRBcnJh
eShbXSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICB2YXIgaXNUeXBlZEFycmF5
ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJ
c1R5cGVkQXJyYXk7CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGB1bmRl
ZmluZWRgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAg
ICAqIEBtZW1iZXJPZiBfCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0
dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgdW5kZWZpbmVkYCwgZWxzZSBgZmFsc2VgLgoJICAg
ICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmlzVW5kZWZpbmVkKHZvaWQgMCk7CgkgICAg
ICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogXy5pc1VuZGVmaW5lZChudWxsKTsKCSAgICAg
KiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7
CgkgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZDsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha01hcGAgb2JqZWN0
LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNp
bmNlIDQuMy4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVl
IFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBg
dHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTsKCSAgICAgKiAv
LyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmlzV2Vha01hcChuZXcgTWFwKTsKCSAgICAgKiAv
LyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkgewoJICAg
ICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSB3ZWFrTWFw
VGFnOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3Np
ZmllZCBhcyBhIGBXZWFrU2V0YCBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAg
ICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4zLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFu
ZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLgoJICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgd2VhayBzZXQs
IGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5pc1dlYWtT
ZXQobmV3IFdlYWtTZXQpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaXNX
ZWFrU2V0KG5ldyBTZXQpOwoJICAgICAqIC8vID0+IGZhbHNlCgkgICAgICovCgkgICAgZnVuY3Rp
b24gaXNXZWFrU2V0KHZhbHVlKSB7CgkgICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAm
JiBiYXNlR2V0VGFnKHZhbHVlKSA9PSB3ZWFrU2V0VGFnOwoJICAgIH0KCgkgICAgLyoqCgkgICAg
ICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIGBvdGhlcmAuCgkgICAgICoKCSAgICAg
KiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy45LjAKCSAgICAg
KiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNv
bXBhcmUuCgkgICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFy
ZS4KCSAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBp
cyBsZXNzIHRoYW4gYG90aGVyYCwKCSAgICAgKiAgZWxzZSBgZmFsc2VgLgoJICAgICAqIEBzZWUg
Xy5ndAoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmx0KDEsIDMpOwoJICAgICAq
IC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8ubHQoMywgMyk7CgkgICAgICogLy8gPT4gZmFs
c2UKCSAgICAgKgoJICAgICAqIF8ubHQoMywgMSk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAg
Ki8KCSAgICB2YXIgbHQgPSBjcmVhdGVSZWxhdGlvbmFsT3BlcmF0aW9uKGJhc2VMdCk7CgoJICAg
IC8qKgoJICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBg
b3RoZXJgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAg
ICogQHNpbmNlIDMuOS4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLgoJICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhl
IG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVy
bnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCgkgICAgICogIGBv
dGhlcmAsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAc2VlIF8uZ3RlCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8ubHRlKDEsIDMpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJ
ICAgICAqIF8ubHRlKDMsIDMpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8u
bHRlKDMsIDEpOwoJICAgICAqIC8vID0+IGZhbHNlCgkgICAgICovCgkgICAgdmFyIGx0ZSA9IGNy
ZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7CgkgICAgICBy
ZXR1cm4gdmFsdWUgPD0gb3RoZXI7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIENvbnZlcnRz
IGB2YWx1ZWAgdG8gYW4gYXJyYXkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNp
bmNlIDAuMS4wCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAg
ICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuCgkgICAgICogQHJldHVy
bnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8udG9BcnJheSh7ICdhJzogMSwgJ2InOiAyIH0pOwoJICAgICAqIC8v
ID0+IFsxLCAyXQoJICAgICAqCgkgICAgICogXy50b0FycmF5KCdhYmMnKTsKCSAgICAgKiAvLyA9
PiBbJ2EnLCAnYicsICdjJ10KCSAgICAgKgoJICAgICAqIF8udG9BcnJheSgxKTsKCSAgICAgKiAv
LyA9PiBbXQoJICAgICAqCgkgICAgICogXy50b0FycmF5KG51bGwpOwoJICAgICAqIC8vID0+IFtd
CgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkgewoJICAgICAgaWYgKCF2YWx1
ZSkgewoJICAgICAgICByZXR1cm4gW107CgkgICAgICB9CgkgICAgICBpZiAoaXNBcnJheUxpa2Uo
dmFsdWUpKSB7CgkgICAgICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyBzdHJpbmdUb0FycmF5
KHZhbHVlKSA6IGNvcHlBcnJheSh2YWx1ZSk7CgkgICAgICB9CgkgICAgICBpZiAoc3ltSXRlcmF0
b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7CgkgICAgICAgIHJldHVybiBpdGVyYXRvclRvQXJy
YXkodmFsdWVbc3ltSXRlcmF0b3JdKCkpOwoJICAgICAgfQoJICAgICAgdmFyIHRhZyA9IGdldFRh
Zyh2YWx1ZSksCgkgICAgICAgICAgZnVuYyA9IHRhZyA9PSBtYXBUYWcgPyBtYXBUb0FycmF5IDog
KHRhZyA9PSBzZXRUYWcgPyBzZXRUb0FycmF5IDogdmFsdWVzKTsKCgkgICAgICByZXR1cm4gZnVu
Yyh2YWx1ZSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEg
ZmluaXRlIG51bWJlci4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2Yg
XwoJICAgICAqIEBzaW5jZSA0LjEyLjAKCSAgICAgKiBAY2F0ZWdvcnkgTGFuZwoJICAgICAqIEBw
YXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuCgkgICAgICogQHJldHVybnMge251
bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci4KCSAgICAgKiBAZXhhbXBsZQoJICAg
ICAqCgkgICAgICogXy50b0Zpbml0ZSgzLjIpOwoJICAgICAqIC8vID0+IDMuMgoJICAgICAqCgkg
ICAgICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTsKCSAgICAgKiAvLyA9PiA1ZS0zMjQK
CSAgICAgKgoJICAgICAqIF8udG9GaW5pdGUoSW5maW5pdHkpOwoJICAgICAqIC8vID0+IDEuNzk3
NjkzMTM0ODYyMzE1N2UrMzA4CgkgICAgICoKCSAgICAgKiBfLnRvRmluaXRlKCczLjInKTsKCSAg
ICAgKiAvLyA9PiAzLjIKCSAgICAgKi8KCSAgICBmdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkgewoJ
ICAgICAgaWYgKCF2YWx1ZSkgewoJICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6
IDA7CgkgICAgICB9CgkgICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTsKCSAgICAgIGlmICh2
YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkgewoJICAgICAgICB2YXIg
c2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpOwoJICAgICAgICByZXR1cm4gc2lnbiAqIE1BWF9J
TlRFR0VSOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDog
MDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdl
ci4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2Vk
IG9uCgkgICAgICogW2BUb0ludGVnZXJgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5v
cmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9pbnRlZ2VyKS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMK
CSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29y
eSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC4KCSAg
ICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci4KCSAg
ICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy50b0ludGVnZXIoMy4yKTsKCSAgICAgKiAv
LyA9PiAzCgkgICAgICoKCSAgICAgKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTsKCSAg
ICAgKiAvLyA9PiAwCgkgICAgICoKCSAgICAgKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7CgkgICAg
ICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgKCSAgICAgKgoJICAgICAqIF8udG9JbnRl
Z2VyKCczLjInKTsKCSAgICAgKiAvLyA9PiAzCgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9JbnRl
Z2VyKHZhbHVlKSB7CgkgICAgICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLAoJICAgICAg
ICAgIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7CgoJICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gcmVz
dWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwOwoJICAg
IH0KCgkgICAgLyoqCgkgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyIHN1aXRh
YmxlIGZvciB1c2UgYXMgdGhlIGxlbmd0aCBvZiBhbgoJICAgICAqIGFycmF5LWxpa2Ugb2JqZWN0
LgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uCgkgICAg
ICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcu
MC8jc2VjLXRvbGVuZ3RoKS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVy
T2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICog
QHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC4KCSAgICAgKiBAcmV0dXJucyB7
bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci4KCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogXy50b0xlbmd0aCgzLjIpOwoJICAgICAqIC8vID0+IDMKCSAgICAgKgoJ
ICAgICAqIF8udG9MZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7CgkgICAgICogLy8gPT4gMAoJICAg
ICAqCgkgICAgICogXy50b0xlbmd0aChJbmZpbml0eSk7CgkgICAgICogLy8gPT4gNDI5NDk2NzI5
NQoJICAgICAqCgkgICAgICogXy50b0xlbmd0aCgnMy4yJyk7CgkgICAgICogLy8gPT4gMwoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIHRvTGVuZ3RoKHZhbHVlKSB7CgkgICAgICByZXR1cm4gdmFsdWUg
PyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgMCwgTUFYX0FSUkFZX0xFTkdUSCkgOiAwOwoJ
ICAgIH0KCgkgICAgLyoqCgkgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIG51bWJlci4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUg
dmFsdWUgdG8gcHJvY2Vzcy4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBu
dW1iZXIuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8udG9OdW1iZXIoMy4yKTsK
CSAgICAgKiAvLyA9PiAzLjIKCSAgICAgKgoJICAgICAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9W
QUxVRSk7CgkgICAgICogLy8gPT4gNWUtMzI0CgkgICAgICoKCSAgICAgKiBfLnRvTnVtYmVyKElu
ZmluaXR5KTsKCSAgICAgKiAvLyA9PiBJbmZpbml0eQoJICAgICAqCgkgICAgICogXy50b051bWJl
cignMy4yJyk7CgkgICAgICogLy8gPT4gMy4yCgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9OdW1i
ZXIodmFsdWUpIHsKCSAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHsKCSAgICAg
ICAgcmV0dXJuIHZhbHVlOwoJICAgICAgfQoJICAgICAgaWYgKGlzU3ltYm9sKHZhbHVlKSkgewoJ
ICAgICAgICByZXR1cm4gTkFOOwoJICAgICAgfQoJICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkg
ewoJICAgICAgICB2YXIgb3RoZXIgPSB0eXBlb2YgdmFsdWUudmFsdWVPZiA9PSAnZnVuY3Rpb24n
ID8gdmFsdWUudmFsdWVPZigpIDogdmFsdWU7CgkgICAgICAgIHZhbHVlID0gaXNPYmplY3Qob3Ro
ZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7CgkgICAgICB9CgkgICAgICBpZiAodHlwZW9mIHZh
bHVlICE9ICdzdHJpbmcnKSB7CgkgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDog
K3ZhbHVlOwoJICAgICAgfQoJICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlVHJpbSwgJycp
OwoJICAgICAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTsKCSAgICAgIHJl
dHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKQoJICAgICAgICA/IGZyZWVQ
YXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOCkKCSAgICAgICAgOiAocmVJ
c0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7CgkgICAgfQoKCSAgICAvKioKCSAg
ICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcGxhaW4gb2JqZWN0IGZsYXR0ZW5pbmcgaW5oZXJp
dGVkIGVudW1lcmFibGUgc3RyaW5nCgkgICAgICoga2V5ZWQgcHJvcGVydGllcyBvZiBgdmFsdWVg
IHRvIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBwbGFpbiBvYmplY3QuCgkgICAgICoKCSAgICAgKiBA
c3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4wLjAKCSAgICAgKiBA
Y2F0ZWdvcnkgTGFuZwoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZl
cnQuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWlu
IG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gRm9vKCkg
ewoJICAgICAqICAgdGhpcy5iID0gMjsKCSAgICAgKiB9CgkgICAgICoKCSAgICAgKiBGb28ucHJv
dG90eXBlLmMgPSAzOwoJICAgICAqCgkgICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZv
byk7CgkgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9CgkgICAgICoKCSAgICAgKiBfLmFz
c2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpOwoJICAgICAqIC8vID0+
IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9CgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9QbGFp
bk9iamVjdCh2YWx1ZSkgewoJICAgICAgcmV0dXJuIGNvcHlPYmplY3QodmFsdWUsIGtleXNJbih2
YWx1ZSkpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHNh
ZmUgaW50ZWdlci4gQSBzYWZlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFuZAoJICAgICAqIHJl
cHJlc2VudGVkIGNvcnJlY3RseS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVt
YmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBMYW5nCgkgICAg
ICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC4KCSAgICAgKiBAcmV0dXJu
cyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci4KCSAgICAgKiBAZXhhbXBs
ZQoJICAgICAqCgkgICAgICogXy50b1NhZmVJbnRlZ2VyKDMuMik7CgkgICAgICogLy8gPT4gMwoJ
ICAgICAqCgkgICAgICogXy50b1NhZmVJbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpOwoJICAgICAq
IC8vID0+IDAKCSAgICAgKgoJICAgICAqIF8udG9TYWZlSW50ZWdlcihJbmZpbml0eSk7CgkgICAg
ICogLy8gPT4gOTAwNzE5OTI1NDc0MDk5MQoJICAgICAqCgkgICAgICogXy50b1NhZmVJbnRlZ2Vy
KCczLjInKTsKCSAgICAgKiAvLyA9PiAzCgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9TYWZlSW50
ZWdlcih2YWx1ZSkgewoJICAgICAgcmV0dXJuIHZhbHVlCgkgICAgICAgID8gYmFzZUNsYW1wKHRv
SW50ZWdlcih2YWx1ZSksIC1NQVhfU0FGRV9JTlRFR0VSLCBNQVhfU0FGRV9JTlRFR0VSKQoJICAg
ICAgICA6ICh2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMCk7CgkgICAgfQoKCSAgICAvKioKCSAgICAg
KiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJu
ZWQgZm9yIGBudWxsYAoJICAgICAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9m
IGAtMGAgaXMgcHJlc2VydmVkLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1i
ZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IExhbmcKCSAgICAg
KiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LgoJICAgICAqIEByZXR1cm5z
IHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8udG9TdHJpbmcobnVsbCk7CgkgICAgICogLy8gPT4gJycKCSAgICAg
KgoJICAgICAqIF8udG9TdHJpbmcoLTApOwoJICAgICAqIC8vID0+ICctMCcKCSAgICAgKgoJICAg
ICAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTsKCSAgICAgKiAvLyA9PiAnMSwyLDMnCgkgICAgICov
CgkgICAgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHsKCSAgICAgIHJldHVybiB2YWx1ZSA9PSBu
dWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpOwoJICAgIH0KCgkgICAgLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwoKCSAgICAvKioKCSAgICAgKiBBc3NpZ25zIG93biBlbnVtZXJhYmxlIHN0cmluZyBr
ZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIHRvIHRoZQoJICAgICAqIGRlc3RpbmF0
aW9uIG9iamVjdC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0
LgoJICAgICAqIFN1YnNlcXVlbnQgc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVu
dHMgb2YgcHJldmlvdXMgc291cmNlcy4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1l
dGhvZCBtdXRhdGVzIGBvYmplY3RgIGFuZCBpcyBsb29zZWx5IGJhc2VkIG9uCgkgICAgICogW2BP
YmplY3QuYXNzaWduYF0oaHR0cHM6Ly9tZG4uaW8vT2JqZWN0L2Fzc2lnbikuCgkgICAgICoKCSAg
ICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4xMC4wCgkg
ICAgICogQGNhdGVnb3J5IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhl
IGRlc3RpbmF0aW9uIG9iamVjdC4KCSAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNd
IFRoZSBzb3VyY2Ugb2JqZWN0cy4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBv
YmplY3RgLgoJICAgICAqIEBzZWUgXy5hc3NpZ25JbgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiBmdW5jdGlvbiBGb28oKSB7CgkgICAgICogICB0aGlzLmEgPSAxOwoJICAgICAqIH0K
CSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEJhcigpIHsKCSAgICAgKiAgIHRoaXMuYyA9IDM7Cgkg
ICAgICogfQoJICAgICAqCgkgICAgICogRm9vLnByb3RvdHlwZS5iID0gMjsKCSAgICAgKiBCYXIu
cHJvdG90eXBlLmQgPSA0OwoJICAgICAqCgkgICAgICogXy5hc3NpZ24oeyAnYSc6IDAgfSwgbmV3
IEZvbywgbmV3IEJhcik7CgkgICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9CgkgICAgICov
CgkgICAgdmFyIGFzc2lnbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNl
KSB7CgkgICAgICBpZiAoaXNQcm90b3R5cGUoc291cmNlKSB8fCBpc0FycmF5TGlrZShzb3VyY2Up
KSB7CgkgICAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7Cgkg
ICAgICAgIHJldHVybjsKCSAgICAgIH0KCSAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsK
CSAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7CgkgICAgICAg
ICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHNvdXJjZVtrZXldKTsKCSAgICAgICAgfQoJICAg
ICAgfQoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFz
c2lnbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBvd24gYW5kCgkgICAgICogaW5oZXJp
dGVkIHNvdXJjZSBwcm9wZXJ0aWVzLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0
aG9kIG11dGF0ZXMgYG9iamVjdGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1l
bWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAYWxpYXMgZXh0ZW5kCgkgICAg
ICogQGNhdGVnb3J5IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRl
c3RpbmF0aW9uIG9iamVjdC4KCSAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRo
ZSBzb3VyY2Ugb2JqZWN0cy4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmpl
Y3RgLgoJICAgICAqIEBzZWUgXy5hc3NpZ24KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAg
ICogZnVuY3Rpb24gRm9vKCkgewoJICAgICAqICAgdGhpcy5hID0gMTsKCSAgICAgKiB9CgkgICAg
ICoKCSAgICAgKiBmdW5jdGlvbiBCYXIoKSB7CgkgICAgICogICB0aGlzLmMgPSAzOwoJICAgICAq
IH0KCSAgICAgKgoJICAgICAqIEZvby5wcm90b3R5cGUuYiA9IDI7CgkgICAgICogQmFyLnByb3Rv
dHlwZS5kID0gNDsKCSAgICAgKgoJICAgICAqIF8uYXNzaWduSW4oeyAnYSc6IDAgfSwgbmV3IEZv
bywgbmV3IEJhcik7CgkgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzLCAnZCc6
IDQgfQoJICAgICAqLwoJICAgIHZhciBhc3NpZ25JbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9u
KG9iamVjdCwgc291cmNlKSB7CgkgICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJj
ZSksIG9iamVjdCk7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxp
a2UgYF8uYXNzaWduSW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgCgkgICAg
ICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBj
dXN0b21pemVyYCByZXR1cm5zCgkgICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFu
ZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAKCSAgICAgKiBpcyBp
bnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2Jq
ZWN0LCBzb3VyY2UpLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0
ZXMgYG9iamVjdGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAYWxpYXMgZXh0ZW5kV2l0aAoJICAgICAqIEBj
YXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5h
dGlvbiBvYmplY3QuCgkgICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJj
ZSBvYmplY3RzLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVu
Y3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy4KCSAgICAgKiBAcmV0dXJucyB7T2Jq
ZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBzZWUgXy5hc3NpZ25XaXRoCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNy
Y1ZhbHVlKSB7CgkgICAgICogICByZXR1cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNW
YWx1ZSA6IG9ialZhbHVlOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIHZhciBkZWZhdWx0cyA9
IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWduSW5XaXRoLCBjdXN0b21pemVyKTsKCSAgICAgKgoJICAg
ICAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pOwoJICAgICAq
IC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfQoJICAgICAqLwoJICAgIHZhciBhc3NpZ25JbldpdGgg
PSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgsIGN1c3Rv
bWl6ZXIpIHsKCSAgICAgIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0
LCBjdXN0b21pemVyKTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMg
bGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgCgkgICAg
ICogd2hpY2ggaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBhc3NpZ25lZCB2YWx1ZXMuIElmIGBj
dXN0b21pemVyYCByZXR1cm5zCgkgICAgICogYHVuZGVmaW5lZGAsIGFzc2lnbm1lbnQgaXMgaGFu
ZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAKCSAgICAgKiBpcyBp
bnZva2VkIHdpdGggZml2ZSBhcmd1bWVudHM6IChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2Jq
ZWN0LCBzb3VyY2UpLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0
ZXMgYG9iamVjdGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBh
cmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LgoJICAgICAqIEBwYXJh
bSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy4KCSAgICAgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25l
ZCB2YWx1ZXMuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC4KCSAg
ICAgKiBAc2VlIF8uYXNzaWduSW5XaXRoCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7CgkgICAgICogICByZXR1
cm4gXy5pc1VuZGVmaW5lZChvYmpWYWx1ZSkgPyBzcmNWYWx1ZSA6IG9ialZhbHVlOwoJICAgICAq
IH0KCSAgICAgKgoJICAgICAqIHZhciBkZWZhdWx0cyA9IF8ucGFydGlhbFJpZ2h0KF8uYXNzaWdu
V2l0aCwgY3VzdG9taXplcik7CgkgICAgICoKCSAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7
ICdiJzogMiB9LCB7ICdhJzogMyB9KTsKCSAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH0K
CSAgICAgKi8KCSAgICB2YXIgYXNzaWduV2l0aCA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9i
amVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplcikgewoJICAgICAgY29weU9iamVjdChz
b3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0LCBjdXN0b21pemVyKTsKCSAgICB9KTsKCgkgICAg
LyoqCgkgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBg
cGF0aHNgIG9mIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1i
ZXJPZiBfCgkgICAgICogQHNpbmNlIDEuMC4wCgkgICAgICogQGNhdGVnb3J5IE9iamVjdAoJICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuCgkg
ICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkg
cGF0aHMgdG8gcGljay4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tl
ZCB2YWx1ZXMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3QgPSB7
ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07CgkgICAgICoKCSAgICAgKiBfLmF0KG9i
amVjdCwgWydhWzBdLmIuYycsICdhWzFdJ10pOwoJICAgICAqIC8vID0+IFszLCA0XQoJICAgICAq
LwoJICAgIHZhciBhdCA9IGZsYXRSZXN0KGJhc2VBdCk7CgoJICAgIC8qKgoJICAgICAqIENyZWF0
ZXMgYW4gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgYHByb3RvdHlwZWAgb2JqZWN0LiBJ
ZiBhCgkgICAgICogYHByb3BlcnRpZXNgIG9iamVjdCBpcyBnaXZlbiwgaXRzIG93biBlbnVtZXJh
YmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzCgkgICAgICogYXJlIGFzc2lnbmVkIHRvIHRoZSBj
cmVhdGVkIG9iamVjdC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2Yg
XwoJICAgICAqIEBzaW5jZSAyLjMuMAoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBA
cGFyYW0ge09iamVjdH0gcHJvdG90eXBlIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLgoJICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllc10gVGhlIHByb3BlcnRpZXMgdG8gYXNzaWdu
IHRvIHRoZSBvYmplY3QuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3
IG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gU2hhcGUo
KSB7CgkgICAgICogICB0aGlzLnggPSAwOwoJICAgICAqICAgdGhpcy55ID0gMDsKCSAgICAgKiB9
CgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBDaXJjbGUoKSB7CgkgICAgICogICBTaGFwZS5jYWxs
KHRoaXMpOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIENpcmNsZS5wcm90b3R5cGUgPSBfLmNy
ZWF0ZShTaGFwZS5wcm90b3R5cGUsIHsKCSAgICAgKiAgICdjb25zdHJ1Y3Rvcic6IENpcmNsZQoJ
ICAgICAqIH0pOwoJICAgICAqCgkgICAgICogdmFyIGNpcmNsZSA9IG5ldyBDaXJjbGU7CgkgICAg
ICogY2lyY2xlIGluc3RhbmNlb2YgQ2lyY2xlOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJ
ICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIFNoYXBlOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAg
Ki8KCSAgICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7CgkgICAgICB2
YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpOwoJICAgICAgcmV0dXJuIHByb3BlcnRp
ZXMgPT0gbnVsbCA/IHJlc3VsdCA6IGJhc2VBc3NpZ24ocmVzdWx0LCBwcm9wZXJ0aWVzKTsKCSAg
ICB9CgoJICAgIC8qKgoJICAgICAqIEFzc2lnbnMgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJs
ZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2UKCSAgICAgKiBvYmplY3RzIHRvIHRo
ZSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGFsbCBkZXN0aW5hdGlvbiBwcm9wZXJ0aWVzIHRoYXQK
CSAgICAgKiByZXNvbHZlIHRvIGB1bmRlZmluZWRgLiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGll
ZCBmcm9tIGxlZnQgdG8gcmlnaHQuCgkgICAgICogT25jZSBhIHByb3BlcnR5IGlzIHNldCwgYWRk
aXRpb25hbCB2YWx1ZXMgb2YgdGhlIHNhbWUgcHJvcGVydHkgYXJlIGlnbm9yZWQuCgkgICAgICoK
CSAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC4KCSAgICAgKgoJ
ICAgICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJ
ICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRo
ZSBkZXN0aW5hdGlvbiBvYmplY3QuCgkgICAgICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2Vz
XSBUaGUgc291cmNlIG9iamVjdHMuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBg
b2JqZWN0YC4KCSAgICAgKiBAc2VlIF8uZGVmYXVsdHNEZWVwCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIF8uZGVmYXVsdHMoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSwgeyAnYSc6IDMg
fSk7CgkgICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9CgkgICAgICovCgkgICAgdmFyIGRl
ZmF1bHRzID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7CgkgICAgICBvYmpl
Y3QgPSBPYmplY3Qob2JqZWN0KTsKCgkgICAgICB2YXIgaW5kZXggPSAtMTsKCSAgICAgIHZhciBs
ZW5ndGggPSBzb3VyY2VzLmxlbmd0aDsKCSAgICAgIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBz
b3VyY2VzWzJdIDogdW5kZWZpbmVkOwoKCSAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2Fs
bChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHsKCSAgICAgICAgbGVuZ3RoID0gMTsK
CSAgICAgIH0KCgkgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICB2YXIg
c291cmNlID0gc291cmNlc1tpbmRleF07CgkgICAgICAgIHZhciBwcm9wcyA9IGtleXNJbihzb3Vy
Y2UpOwoJICAgICAgICB2YXIgcHJvcHNJbmRleCA9IC0xOwoJICAgICAgICB2YXIgcHJvcHNMZW5n
dGggPSBwcm9wcy5sZW5ndGg7CgoJICAgICAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNM
ZW5ndGgpIHsKCSAgICAgICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07CgkgICAgICAg
ICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07CgoJICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5k
ZWZpbmVkIHx8CgkgICAgICAgICAgICAgIChlcSh2YWx1ZSwgb2JqZWN0UHJvdG9ba2V5XSkgJiYg
IWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkgewoJICAgICAgICAgICAgb2JqZWN0
W2tleV0gPSBzb3VyY2Vba2V5XTsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgIH0KCgkg
ICAgICByZXR1cm4gb2JqZWN0OwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhv
ZCBpcyBsaWtlIGBfLmRlZmF1bHRzYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBhc3NpZ25z
CgkgICAgICogZGVmYXVsdCBwcm9wZXJ0aWVzLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRo
aXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAg
ICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4xMC4wCgkgICAgICogQGNhdGVnb3J5IE9i
amVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVj
dC4KCSAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0
cy4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBz
ZWUgXy5kZWZhdWx0cwoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmRlZmF1bHRz
RGVlcCh7ICdhJzogeyAnYic6IDIgfSB9LCB7ICdhJzogeyAnYic6IDEsICdjJzogMyB9IH0pOwoJ
ICAgICAqIC8vID0+IHsgJ2EnOiB7ICdiJzogMiwgJ2MnOiAzIH0gfQoJICAgICAqLwoJICAgIHZh
ciBkZWZhdWx0c0RlZXAgPSBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7CgkgICAgICBhcmdzLnB1
c2godW5kZWZpbmVkLCBjdXN0b21EZWZhdWx0c01lcmdlKTsKCSAgICAgIHJldHVybiBhcHBseSht
ZXJnZVdpdGgsIHVuZGVmaW5lZCwgYXJncyk7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIFRo
aXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUga2V5
IG9mIHRoZSBmaXJzdAoJICAgICAqIGVsZW1lbnQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkg
Zm9yIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDEuMS4wCgkgICAgICogQGNhdGVn
b3J5IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBp
bnNwZWN0LgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0g
VGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7c3Ry
aW5nfHVuZGVmaW5lZH0gUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXRjaGVkIGVsZW1lbnQsCgkg
ICAgICogIGVsc2UgYHVuZGVmaW5lZGAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IHZhciB1c2VycyA9IHsKCSAgICAgKiAgICdiYXJuZXknOiAgeyAnYWdlJzogMzYsICdhY3RpdmUn
OiB0cnVlIH0sCgkgICAgICogICAnZnJlZCc6ICAgIHsgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFs
c2UgfSwKCSAgICAgKiAgICdwZWJibGVzJzogeyAnYWdlJzogMSwgICdhY3RpdmUnOiB0cnVlIH0K
CSAgICAgKiB9OwoJICAgICAqCgkgICAgICogXy5maW5kS2V5KHVzZXJzLCBmdW5jdGlvbihvKSB7
IHJldHVybiBvLmFnZSA8IDQwOyB9KTsKCSAgICAgKiAvLyA9PiAnYmFybmV5JyAoaXRlcmF0aW9u
IG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKQoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNo
ZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbmRLZXkodXNlcnMsIHsgJ2FnZSc6
IDEsICdhY3RpdmUnOiB0cnVlIH0pOwoJICAgICAqIC8vID0+ICdwZWJibGVzJwoJICAgICAqCgkg
ICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAg
ICAqIF8uZmluZEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pOwoJICAgICAqIC8vID0+ICdm
cmVkJwoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhh
bmQuCgkgICAgICogXy5maW5kS2V5KHVzZXJzLCAnYWN0aXZlJyk7CgkgICAgICogLy8gPT4gJ2Jh
cm5leScKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7
CgkgICAgICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUs
IDMpLCBiYXNlRm9yT3duKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlz
IGxpa2UgYF8uZmluZEtleWAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBv
ZgoJICAgICAqIGEgY29sbGVjdGlvbiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuCgkgICAgICoKCSAg
ICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMi4wLjAKCSAg
ICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUg
b2JqZWN0IHRvIGluc3BlY3QuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1f
LmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEBy
ZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hdGNoZWQg
ZWxlbWVudCwKCSAgICAgKiAgZWxzZSBgdW5kZWZpbmVkYC4KCSAgICAgKiBAZXhhbXBsZQoJICAg
ICAqCgkgICAgICogdmFyIHVzZXJzID0gewoJICAgICAqICAgJ2Jhcm5leSc6ICB7ICdhZ2UnOiAz
NiwgJ2FjdGl2ZSc6IHRydWUgfSwKCSAgICAgKiAgICdmcmVkJzogICAgeyAnYWdlJzogNDAsICdh
Y3RpdmUnOiBmYWxzZSB9LAoJICAgICAqICAgJ3BlYmJsZXMnOiB7ICdhZ2UnOiAxLCAgJ2FjdGl2
ZSc6IHRydWUgfQoJICAgICAqIH07CgkgICAgICoKCSAgICAgKiBfLmZpbmRMYXN0S2V5KHVzZXJz
LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZSA8IDQwOyB9KTsKCSAgICAgKiAvLyA9PiByZXR1
cm5zICdwZWJibGVzJyBhc3N1bWluZyBgXy5maW5kS2V5YCByZXR1cm5zICdiYXJuZXknCgkgICAg
ICoKCSAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAq
IF8uZmluZExhc3RLZXkodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTsKCSAg
ICAgKiAvLyA9PiAnYmFybmV5JwoJICAgICAqCgkgICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9w
ZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIFsn
YWN0aXZlJywgZmFsc2VdKTsKCSAgICAgKiAvLyA9PiAnZnJlZCcKCSAgICAgKgoJICAgICAqIC8v
IFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uZmluZExhc3RL
ZXkodXNlcnMsICdhY3RpdmUnKTsKCSAgICAgKiAvLyA9PiAncGViYmxlcycKCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBmaW5kTGFzdEtleShvYmplY3QsIHByZWRpY2F0ZSkgewoJICAgICAgcmV0dXJu
IGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93
blJpZ2h0KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGFuZCBp
bmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbgoJICAgICAq
IG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRl
cmF0ZWUgaXMgaW52b2tlZAoJICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtl
eSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0CgkgICAgICogaXRlcmF0aW9u
IGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuCgkgICAgICoKCSAgICAgKiBA
c3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC4zLjAKCSAgICAgKiBA
Y2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0
IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5p
ZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcmV0
dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBzZWUgXy5mb3JJblJpZ2h0
CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAgICAg
KiAgIHRoaXMuYSA9IDE7CgkgICAgICogICB0aGlzLmIgPSAyOwoJICAgICAqIH0KCSAgICAgKgoJ
ICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7CgkgICAgICoKCSAgICAgKiBfLmZvckluKG5ldyBG
b28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKCSAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7Cgkg
ICAgICogfSk7CgkgICAgICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlv
biBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuCgkgICAgICovCgkgICAgZnVuY3Rpb24gZm9ySW4o
b2JqZWN0LCBpdGVyYXRlZSkgewoJICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsCgkgICAgICAg
ID8gb2JqZWN0CgkgICAgICAgIDogYmFzZUZvcihvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVl
LCAzKSwga2V5c0luKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIGlzIGxp
a2UgYF8uZm9ySW5gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZgoJ
ICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci4KCSAgICAgKgoJICAgICAqIEBz
dGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAyLjAuMAoJICAgICAqIEBj
YXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3Qg
dG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlk
ZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEByZXR1
cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkgICAgICogQHNlZSBfLmZvckluCgkgICAg
ICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAgICAgKiAgIHRo
aXMuYSA9IDE7CgkgICAgICogICB0aGlzLmIgPSAyOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAq
IEZvby5wcm90b3R5cGUuYyA9IDM7CgkgICAgICoKCSAgICAgKiBfLmZvckluUmlnaHQobmV3IEZv
bywgZnVuY3Rpb24odmFsdWUsIGtleSkgewoJICAgICAqICAgY29uc29sZS5sb2coa2V5KTsKCSAg
ICAgKiB9KTsKCSAgICAgKiAvLyA9PiBMb2dzICdjJywgJ2InLCB0aGVuICdhJyBhc3N1bWluZyBg
Xy5mb3JJbmAgbG9ncyAnYScsICdiJywgdGhlbiAnYycuCgkgICAgICovCgkgICAgZnVuY3Rpb24g
Zm9ySW5SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51
bGwKCSAgICAgICAgPyBvYmplY3QKCSAgICAgICAgOiBiYXNlRm9yUmlnaHQob2JqZWN0LCBnZXRJ
dGVyYXRlZShpdGVyYXRlZSwgMyksIGtleXNJbik7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBJ
dGVyYXRlcyBvdmVyIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIGFu
IG9iamVjdCBhbmQKCSAgICAgKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHku
IFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUKCSAgICAgKiBhcmd1bWVudHM6ICh2
YWx1ZSwga2V5LCBvYmplY3QpLiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9u
CgkgICAgICogZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC4KCSAgICAgKgoJ
ICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjMuMAoJ
ICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRo
ZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVy
YXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAg
ICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkgICAgICogQHNlZSBfLmZv
ck93blJpZ2h0CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygp
IHsKCSAgICAgKiAgIHRoaXMuYSA9IDE7CgkgICAgICogICB0aGlzLmIgPSAyOwoJICAgICAqIH0K
CSAgICAgKgoJICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7CgkgICAgICoKCSAgICAgKiBfLmZv
ck93bihuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CgkgICAgICogICBjb25zb2xlLmxv
ZyhrZXkpOwoJICAgICAqIH0pOwoJICAgICAqIC8vID0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVy
YXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLgoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGZv
ck93bihvYmplY3QsIGl0ZXJhdGVlKSB7CgkgICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3JP
d24ob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpOwoJICAgIH0KCgkgICAgLyoqCgkg
ICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JPd25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJh
dGVzIG92ZXIgcHJvcGVydGllcyBvZgoJICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBv
cmRlci4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAyLjAuMAoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09i
amVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIg
aXRlcmF0aW9uLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuCgkg
ICAgICogQHNlZSBfLmZvck93bgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBmdW5j
dGlvbiBGb28oKSB7CgkgICAgICogICB0aGlzLmEgPSAxOwoJICAgICAqICAgdGhpcy5iID0gMjsK
CSAgICAgKiB9CgkgICAgICoKCSAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzOwoJICAgICAqCgkg
ICAgICogXy5mb3JPd25SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CgkgICAg
ICogICBjb25zb2xlLmxvZyhrZXkpOwoJICAgICAqIH0pOwoJICAgICAqIC8vID0+IExvZ3MgJ2In
IHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvck93bmAgbG9ncyAnYScgdGhlbiAnYicuCgkgICAgICov
CgkgICAgZnVuY3Rpb24gZm9yT3duUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkgewoJICAgICAgcmV0
dXJuIG9iamVjdCAmJiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRl
ZSwgMykpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBmdW5j
dGlvbiBwcm9wZXJ0eSBuYW1lcyBmcm9tIG93biBlbnVtZXJhYmxlIHByb3BlcnRpZXMKCSAgICAg
KiBvZiBgb2JqZWN0YC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4x
LjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBA
cGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC4KCSAgICAgKiBAcmV0
dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLgoJICAgICAqIEBzZWUgXy5m
dW5jdGlvbnNJbgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBGb28o
KSB7CgkgICAgICogICB0aGlzLmEgPSBfLmNvbnN0YW50KCdhJyk7CgkgICAgICogICB0aGlzLmIg
PSBfLmNvbnN0YW50KCdiJyk7CgkgICAgICogfQoJICAgICAqCgkgICAgICogRm9vLnByb3RvdHlw
ZS5jID0gXy5jb25zdGFudCgnYycpOwoJICAgICAqCgkgICAgICogXy5mdW5jdGlvbnMobmV3IEZv
byk7CgkgICAgICogLy8gPT4gWydhJywgJ2InXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGZ1bmN0
aW9ucyhvYmplY3QpIHsKCSAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZUZ1
bmN0aW9ucyhvYmplY3QsIGtleXMob2JqZWN0KSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBD
cmVhdGVzIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZyb20gb3duIGFuZCBp
bmhlcml0ZWQKCSAgICAgKiBlbnVtZXJhYmxlIHByb3BlcnRpZXMgb2YgYG9iamVjdGAuCgkgICAg
ICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4w
LjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVj
dCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5z
IHRoZSBmdW5jdGlvbiBuYW1lcy4KCSAgICAgKiBAc2VlIF8uZnVuY3Rpb25zCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAgICAgKiAgIHRoaXMuYSA9
IF8uY29uc3RhbnQoJ2EnKTsKCSAgICAgKiAgIHRoaXMuYiA9IF8uY29uc3RhbnQoJ2InKTsKCSAg
ICAgKiB9CgkgICAgICoKCSAgICAgKiBGb28ucHJvdG90eXBlLmMgPSBfLmNvbnN0YW50KCdjJyk7
CgkgICAgICoKCSAgICAgKiBfLmZ1bmN0aW9uc0luKG5ldyBGb28pOwoJICAgICAqIC8vID0+IFsn
YScsICdiJywgJ2MnXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGZ1bmN0aW9uc0luKG9iamVjdCkg
ewoJICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlRnVuY3Rpb25zKG9iamVj
dCwga2V5c0luKG9iamVjdCkpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogR2V0cyB0aGUgdmFs
dWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXMKCSAgICAg
KiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFj
ZS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSAzLjcuMAoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVj
dH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtBcnJheXxzdHJp
bmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC4KCSAgICAgKiBAcGFyYW0g
eyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVz
b2x2ZWQgdmFsdWVzLgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2
YWx1ZS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsgJ2En
OiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTsKCSAgICAgKgoJICAgICAqIF8uZ2V0KG9iamVjdCwg
J2FbMF0uYi5jJyk7CgkgICAgICogLy8gPT4gMwoJICAgICAqCgkgICAgICogXy5nZXQob2JqZWN0
LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7CgkgICAgICogLy8gPT4gMwoJICAgICAqCgkgICAgICog
Xy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpOwoJICAgICAqIC8vID0+ICdkZWZhdWx0
JwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkg
ewoJICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdl
dChvYmplY3QsIHBhdGgpOwoJICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVm
YXVsdFZhbHVlIDogcmVzdWx0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ2hlY2tzIGlmIGBw
YXRoYCBpcyBhIGRpcmVjdCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC4KCSAgICAgKgoJICAgICAqIEBz
dGF0aWMKCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBj
YXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3Qg
dG8gcXVlcnkuCgkgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8g
Y2hlY2suCgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRo
YCBleGlzdHMsIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
dmFyIG9iamVjdCA9IHsgJ2EnOiB7ICdiJzogMiB9IH07CgkgICAgICogdmFyIG90aGVyID0gXy5j
cmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pOwoJICAgICAqCgkgICAgICogXy5o
YXMob2JqZWN0LCAnYScpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaGFz
KG9iamVjdCwgJ2EuYicpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaGFz
KG9iamVjdCwgWydhJywgJ2InXSk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICog
Xy5oYXMob3RoZXIsICdhJyk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKi8KCSAgICBmdW5j
dGlvbiBoYXMob2JqZWN0LCBwYXRoKSB7CgkgICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYg
aGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXMpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
Q2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9i
amVjdGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtP
YmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7QXJyYXl8
c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFu
fSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuCgkgICAgICog
QGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5j
cmVhdGUoeyAnYic6IDIgfSkgfSk7CgkgICAgICoKCSAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2En
KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmhhc0luKG9iamVjdCwgJ2Eu
YicpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIF8uaGFzSW4ob2JqZWN0LCBb
J2EnLCAnYiddKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmhhc0luKG9i
amVjdCwgJ2InKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGhh
c0luKG9iamVjdCwgcGF0aCkgewoJICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1Bh
dGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3Jl
YXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGludmVydGVkIGtleXMgYW5kIHZhbHVlcyBv
ZiBgb2JqZWN0YC4KCSAgICAgKiBJZiBgb2JqZWN0YCBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVz
LCBzdWJzZXF1ZW50IHZhbHVlcyBvdmVyd3JpdGUKCSAgICAgKiBwcm9wZXJ0eSBhc3NpZ25tZW50
cyBvZiBwcmV2aW91cyB2YWx1ZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1l
bWJlck9mIF8KCSAgICAgKiBAc2luY2UgMC43LjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0Cgkg
ICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC4KCSAgICAg
KiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LgoJICAg
ICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzog
MiwgJ2MnOiAxIH07CgkgICAgICoKCSAgICAgKiBfLmludmVydChvYmplY3QpOwoJICAgICAqIC8v
ID0+IHsgJzEnOiAnYycsICcyJzogJ2InIH0KCSAgICAgKi8KCSAgICB2YXIgaW52ZXJ0ID0gY3Jl
YXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CgkgICAgICBpZiAodmFs
dWUgIT0gbnVsbCAmJgoJICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rp
b24nKSB7CgkgICAgICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7
CgkgICAgICB9CgoJICAgICAgcmVzdWx0W3ZhbHVlXSA9IGtleTsKCSAgICB9LCBjb25zdGFudChp
ZGVudGl0eSkpOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmludmVy
dGAgZXhjZXB0IHRoYXQgdGhlIGludmVydGVkIG9iamVjdCBpcyBnZW5lcmF0ZWQKCSAgICAgKiBm
cm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgZWFjaCBlbGVtZW50IG9mIGBvYmplY3RgIHRocnUg
YGl0ZXJhdGVlYC4gVGhlCgkgICAgICogY29ycmVzcG9uZGluZyBpbnZlcnRlZCB2YWx1ZSBvZiBl
YWNoIGludmVydGVkIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzCgkgICAgICogcmVzcG9uc2libGUg
Zm9yIGdlbmVyYXRpbmcgdGhlIGludmVydGVkIHZhbHVlLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tl
ZAoJICAgICAqIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMS4wCgkgICAgICogQGNh
dGVnb3J5IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0
byBpbnZlcnQuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHld
IFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtPYmpl
Y3R9IFJldHVybnMgdGhlIG5ldyBpbnZlcnRlZCBvYmplY3QuCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfTsKCSAg
ICAgKgoJICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0KTsKCSAgICAgKiAvLyA9PiB7ICcxJzogWydh
JywgJ2MnXSwgJzInOiBbJ2InXSB9CgkgICAgICoKCSAgICAgKiBfLmludmVydEJ5KG9iamVjdCwg
ZnVuY3Rpb24odmFsdWUpIHsKCSAgICAgKiAgIHJldHVybiAnZ3JvdXAnICsgdmFsdWU7CgkgICAg
ICogfSk7CgkgICAgICogLy8gPT4geyAnZ3JvdXAxJzogWydhJywgJ2MnXSwgJ2dyb3VwMic6IFsn
YiddIH0KCSAgICAgKi8KCSAgICB2YXIgaW52ZXJ0QnkgPSBjcmVhdGVJbnZlcnRlcihmdW5jdGlv
bihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKCSAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmCgkgICAg
ICAgICAgdHlwZW9mIHZhbHVlLnRvU3RyaW5nICE9ICdmdW5jdGlvbicpIHsKCSAgICAgICAgdmFs
dWUgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTsKCSAgICAgIH0KCgkgICAgICBp
ZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIHZhbHVlKSkgewoJICAgICAgICByZXN1bHRb
dmFsdWVdLnB1c2goa2V5KTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJlc3VsdFt2YWx1ZV0g
PSBba2V5XTsKCSAgICAgIH0KCSAgICB9LCBnZXRJdGVyYXRlZSk7CgoJICAgIC8qKgoJICAgICAq
IEludm9rZXMgdGhlIG1ldGhvZCBhdCBgcGF0aGAgb2YgYG9iamVjdGAuCgkgICAgICoKCSAgICAg
KiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAg
KiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2Jq
ZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRo
IG9mIHRoZSBtZXRob2QgdG8gaW52b2tlLgoJICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRo
ZSBhcmd1bWVudHMgdG8gaW52b2tlIHRoZSBtZXRob2Qgd2l0aC4KCSAgICAgKiBAcmV0dXJucyB7
Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBpbnZva2VkIG1ldGhvZC4KCSAgICAgKiBAZXhh
bXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiBb
MSwgMiwgMywgNF0gfSB9XSB9OwoJICAgICAqCgkgICAgICogXy5pbnZva2Uob2JqZWN0LCAnYVsw
XS5iLmMuc2xpY2UnLCAxLCAzKTsKCSAgICAgKiAvLyA9PiBbMiwgM10KCSAgICAgKi8KCSAgICB2
YXIgaW52b2tlID0gYmFzZVJlc3QoYmFzZUludm9rZSk7CgoJICAgIC8qKgoJICAgICAqIENyZWF0
ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmpl
Y3RgLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2Vy
Y2VkIHRvIG9iamVjdHMuIFNlZSB0aGUKCSAgICAgKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpCgkgICAgICogZm9y
IG1vcmUgZGV0YWlscy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4x
LjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBA
cGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVy
bnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy4KCSAgICAgKiBA
ZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gRm9vKCkgewoJICAgICAqICAgdGhpcy5h
ID0gMTsKCSAgICAgKiAgIHRoaXMuYiA9IDI7CgkgICAgICogfQoJICAgICAqCgkgICAgICogRm9v
LnByb3RvdHlwZS5jID0gMzsKCSAgICAgKgoJICAgICAqIF8ua2V5cyhuZXcgRm9vKTsKCSAgICAg
KiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpCgkg
ICAgICoKCSAgICAgKiBfLmtleXMoJ2hpJyk7CgkgICAgICogLy8gPT4gWycwJywgJzEnXQoJICAg
ICAqLwoJICAgIGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CgkgICAgICByZXR1cm4gaXNBcnJheUxp
a2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7Cgkg
ICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGlu
aGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLgoJICAgICAqCgkg
ICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMu
CgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2lu
Y2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtPYmplY3R9
IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0
dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAgICAgKiAgIHRoaXMuYSA9IDE7CgkgICAgICog
ICB0aGlzLmIgPSAyOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIEZvby5wcm90b3R5cGUuYyA9
IDM7CgkgICAgICoKCSAgICAgKiBfLmtleXNJbihuZXcgRm9vKTsKCSAgICAgKiAvLyA9PiBbJ2En
LCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkKCSAgICAgKi8K
CSAgICBmdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7CgkgICAgICByZXR1cm4gaXNBcnJheUxpa2Uo
b2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0
KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tYXBWYWx1ZXNg
OyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZQoJICAgICAqIHNhbWUgdmFs
dWVzIGFzIGBvYmplY3RgIGFuZCBrZXlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGVhY2ggb3duIGVu
dW1lcmFibGUKCSAgICAgKiBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydSBg
aXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZAoJICAgICAqIHdpdGggdGhyZWUgYXJn
dW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjguMAoJICAgICAqIEBjYXRlZ29yeSBP
YmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0
ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBU
aGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLgoJICAgICAqIEByZXR1cm5zIHtPYmpl
Y3R9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgb2JqZWN0LgoJICAgICAqIEBzZWUgXy5tYXBWYWx1
ZXMKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5tYXBLZXlzKHsgJ2EnOiAxLCAn
Yic6IDIgfSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewoJICAgICAqICAgcmV0dXJuIGtleSArIHZh
bHVlOwoJICAgICAqIH0pOwoJICAgICAqIC8vID0+IHsgJ2ExJzogMSwgJ2IyJzogMiB9CgkgICAg
ICovCgkgICAgZnVuY3Rpb24gbWFwS2V5cyhvYmplY3QsIGl0ZXJhdGVlKSB7CgkgICAgICB2YXIg
cmVzdWx0ID0ge307CgkgICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTsK
CgkgICAgICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7
CgkgICAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9i
amVjdCksIHZhbHVlKTsKCSAgICAgIH0pOwoJICAgICAgcmV0dXJuIHJlc3VsdDsKCSAgICB9CgoJ
ICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBg
b2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZAoJICAgICAqIGJ5IHJ1bm5pbmcgZWFjaCBvd24g
ZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydQoJICAgICAq
IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRz
OgoJICAgICAqICh2YWx1ZSwga2V5LCBvYmplY3QpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJ
ICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDIuNC4wCgkgICAgICogQGNhdGVnb3J5
IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVy
YXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHld
IFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJldHVybnMge09i
amVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuCgkgICAgICogQHNlZSBfLm1hcEtl
eXMKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIHVzZXJzID0gewoJICAgICAq
ICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSwKCSAgICAgKiAg
ICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfQoJICAgICAqIH07Cgkg
ICAgICoKCSAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5h
Z2U7IH0pOwoJICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJh
dGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkKCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5w
cm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCAn
YWdlJyk7CgkgICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0
aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG1hcFZh
bHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7CgkgICAgICB2YXIgcmVzdWx0ID0ge307CgkgICAgICBp
dGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTsKCgkgICAgICBiYXNlRm9yT3duKG9i
amVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7CgkgICAgICAgIGJhc2VBc3NpZ25W
YWx1ZShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7CgkgICAgICB9
KTsKCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1l
dGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2Vz
IG93biBhbmQKCSAgICAgKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVy
dGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZQoJICAgICAqIGRlc3RpbmF0aW9uIG9iamVj
dC4gU291cmNlIHByb3BlcnRpZXMgdGhhdCByZXNvbHZlIHRvIGB1bmRlZmluZWRgIGFyZQoJICAg
ICAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFp
biBvYmplY3QgcHJvcGVydGllcwoJICAgICAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVy
IG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5CgkgICAgICogYXNzaWdu
bWVudC4gU291cmNlIG9iamVjdHMgYXJlIGFwcGxpZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBTdWJz
ZXF1ZW50CgkgICAgICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2Yg
cHJldmlvdXMgc291cmNlcy4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBt
dXRhdGVzIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDAuNS4wCgkgICAgICogQGNhdGVnb3J5IE9iamVjdAoJICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC4KCSAgICAgKiBA
cGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy4KCSAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBleGFtcGxlCgkgICAg
ICoKCSAgICAgKiB2YXIgb2JqZWN0ID0gewoJICAgICAqICAgJ2EnOiBbeyAnYic6IDIgfSwgeyAn
ZCc6IDQgfV0KCSAgICAgKiB9OwoJICAgICAqCgkgICAgICogdmFyIG90aGVyID0gewoJICAgICAq
ICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV0KCSAgICAgKiB9OwoJICAgICAqCgkgICAg
ICogXy5tZXJnZShvYmplY3QsIG90aGVyKTsKCSAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAy
LCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9CgkgICAgICovCgkgICAgdmFyIG1lcmdl
ID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7Cgkg
ICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTsKCSAgICB9KTsKCgkgICAg
LyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZXJnZWAgZXhjZXB0IHRoYXQgaXQg
YWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2gKCSAgICAgKiBpcyBpbnZva2VkIHRvIHByb2R1Y2Ug
dGhlIG1lcmdlZCB2YWx1ZXMgb2YgdGhlIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UKCSAgICAgKiBw
cm9wZXJ0aWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgbWVyZ2luZyBp
cyBoYW5kbGVkIGJ5IHRoZQoJICAgICAqIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJg
IGlzIGludm9rZWQgd2l0aCBzaXggYXJndW1lbnRzOgoJICAgICAqIChvYmpWYWx1ZSwgc3JjVmFs
dWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKS4KCSAgICAgKgoJICAgICAqICoqTm90ZToq
KiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJ
ICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5
IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9i
amVjdC4KCSAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVj
dHMuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8g
Y3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1
cm5zIGBvYmplY3RgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBj
dXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkgewoJICAgICAqICAgaWYgKF8uaXNBcnJheShv
YmpWYWx1ZSkpIHsKCSAgICAgKiAgICAgcmV0dXJuIG9ialZhbHVlLmNvbmNhdChzcmNWYWx1ZSk7
CgkgICAgICogICB9CgkgICAgICogfQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsgJ2En
OiBbMV0sICdiJzogWzJdIH07CgkgICAgICogdmFyIG90aGVyID0geyAnYSc6IFszXSwgJ2InOiBb
NF0gfTsKCSAgICAgKgoJICAgICAqIF8ubWVyZ2VXaXRoKG9iamVjdCwgb3RoZXIsIGN1c3RvbWl6
ZXIpOwoJICAgICAqIC8vID0+IHsgJ2EnOiBbMSwgM10sICdiJzogWzIsIDRdIH0KCSAgICAgKi8K
CSAgICB2YXIgbWVyZ2VXaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3Vy
Y2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7CgkgICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3Vy
Y2UsIHNyY0luZGV4LCBjdXN0b21pemVyKTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogVGhl
IG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21w
b3NlZCBvZiB0aGUKCSAgICAgKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5
IHBhdGhzIG9mIGBvYmplY3RgIHRoYXQgYXJlIG5vdCBvbWl0dGVkLgoJICAgICAqCgkgICAgICog
KipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNr
YC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBA
bWVtYmVyT2YgXwoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVj
dH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LgoJICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xz
dHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIG9taXQuCgkgICAgICogQHJl
dHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07
CgkgICAgICoKCSAgICAgKiBfLm9taXQob2JqZWN0LCBbJ2EnLCAnYyddKTsKCSAgICAgKiAvLyA9
PiB7ICdiJzogJzInIH0KCSAgICAgKi8KCSAgICB2YXIgb21pdCA9IGZsYXRSZXN0KGZ1bmN0aW9u
KG9iamVjdCwgcGF0aHMpIHsKCSAgICAgIHZhciByZXN1bHQgPSB7fTsKCSAgICAgIGlmIChvYmpl
Y3QgPT0gbnVsbCkgewoJICAgICAgICByZXR1cm4gcmVzdWx0OwoJICAgICAgfQoJICAgICAgdmFy
IGlzRGVlcCA9IGZhbHNlOwoJICAgICAgcGF0aHMgPSBhcnJheU1hcChwYXRocywgZnVuY3Rpb24o
cGF0aCkgewoJICAgICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTsKCSAgICAgICAg
aXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpOwoJICAgICAgICByZXR1cm4gcGF0
aDsKCSAgICAgIH0pOwoJICAgICAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmpl
Y3QpLCByZXN1bHQpOwoJICAgICAgaWYgKGlzRGVlcCkgewoJICAgICAgICByZXN1bHQgPSBiYXNl
Q2xvbmUocmVzdWx0LCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9GTEFUX0ZMQUcgfCBDTE9ORV9T
WU1CT0xTX0ZMQUcsIGN1c3RvbU9taXRDbG9uZSk7CgkgICAgICB9CgkgICAgICB2YXIgbGVuZ3Ro
ID0gcGF0aHMubGVuZ3RoOwoJICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CgkgICAgICAgIGJhc2VV
bnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pOwoJICAgICAgfQoJICAgICAgcmV0dXJuIHJlc3Vs
dDsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tCeWA7
IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mCgkgICAgICogdGhlIG93
biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYG9i
amVjdGAgdGhhdAoJICAgICAqIGBwcmVkaWNhdGVgIGRvZXNuJ3QgcmV0dXJuIHRydXRoeSBmb3Iu
IFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3bwoJICAgICAqIGFyZ3VtZW50czogKHZh
bHVlLCBrZXkpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IE9iamVjdAoJICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuCgkgICAgICogQHBhcmFtIHtGdW5j
dGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJv
cGVydHkuCgkgICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC4K
CSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAn
Yic6ICcyJywgJ2MnOiAzIH07CgkgICAgICoKCSAgICAgKiBfLm9taXRCeShvYmplY3QsIF8uaXNO
dW1iZXIpOwoJICAgICAqIC8vID0+IHsgJ2InOiAnMicgfQoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IG9taXRCeShvYmplY3QsIHByZWRpY2F0ZSkgewoJICAgICAgcmV0dXJuIHBpY2tCeShvYmplY3Qs
IG5lZ2F0ZShnZXRJdGVyYXRlZShwcmVkaWNhdGUpKSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAg
KiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3Bl
cnRpZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNpbmNlIDAuMS4wCgkgICAg
ICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtP
YmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC4KCSAgICAgKiBAcGFyYW0gey4uLihzdHJp
bmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLgoJICAgICAq
IEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuCgkgICAgICogQGV4YW1w
bGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzog
MyB9OwoJICAgICAqCgkgICAgICogXy5waWNrKG9iamVjdCwgWydhJywgJ2MnXSk7CgkgICAgICog
Ly8gPT4geyAnYSc6IDEsICdjJzogMyB9CgkgICAgICovCgkgICAgdmFyIHBpY2sgPSBmbGF0UmVz
dChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwg
PyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpOwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAg
KiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgYG9iamVjdGAgcHJvcGVydGllcyBg
cHJlZGljYXRlYCByZXR1cm5zCgkgICAgICogdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBp
bnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLgoJICAgICAqCgkgICAgICog
QHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICog
QGNhdGVnb3J5IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJj
ZSBvYmplY3QuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5
XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuCgkgICAgICogQHJldHVybnMge09i
amVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkg
ICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6ICcyJywgJ2MnOiAzIH07CgkgICAgICoK
CSAgICAgKiBfLnBpY2tCeShvYmplY3QsIF8uaXNOdW1iZXIpOwoJICAgICAqIC8vID0+IHsgJ2En
OiAxLCAnYyc6IDMgfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHBpY2tCeShvYmplY3QsIHByZWRp
Y2F0ZSkgewoJICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CgkgICAgICAgIHJldHVybiB7fTsK
CSAgICAgIH0KCSAgICAgIHZhciBwcm9wcyA9IGFycmF5TWFwKGdldEFsbEtleXNJbihvYmplY3Qp
LCBmdW5jdGlvbihwcm9wKSB7CgkgICAgICAgIHJldHVybiBbcHJvcF07CgkgICAgICB9KTsKCSAg
ICAgIHByZWRpY2F0ZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSk7CgkgICAgICByZXR1cm4gYmFz
ZVBpY2tCeShvYmplY3QsIHByb3BzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkgewoJICAgICAgICBy
ZXR1cm4gcHJlZGljYXRlKHZhbHVlLCBwYXRoWzBdKTsKCSAgICAgIH0pOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5nZXRgIGV4Y2VwdCB0aGF0IGlmIHRo
ZSByZXNvbHZlZCB2YWx1ZSBpcyBhCgkgICAgICogZnVuY3Rpb24gaXQncyBpbnZva2VkIHdpdGgg
dGhlIGB0aGlzYCBiaW5kaW5nIG9mIGl0cyBwYXJlbnQgb2JqZWN0IGFuZAoJICAgICAqIGl0cyBy
ZXN1bHQgaXMgcmV0dXJuZWQuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNpbmNl
IDAuMS4wCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAg
ICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LgoJICAgICAqIEBw
YXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byByZXNv
bHZlLgoJICAgICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVk
IGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuCgkgICAgICogQHJldHVybnMgeyp9IFJl
dHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAg
KiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYzEnOiAzLCAnYzInOiBfLmNvbnN0YW50
KDQpIH0gfV0gfTsKCSAgICAgKgoJICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMScp
OwoJICAgICAqIC8vID0+IDMKCSAgICAgKgoJICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0u
Yi5jMicpOwoJICAgICAqIC8vID0+IDQKCSAgICAgKgoJICAgICAqIF8ucmVzdWx0KG9iamVjdCwg
J2FbMF0uYi5jMycsICdkZWZhdWx0Jyk7CgkgICAgICogLy8gPT4gJ2RlZmF1bHQnCgkgICAgICoK
CSAgICAgKiBfLnJlc3VsdChvYmplY3QsICdhWzBdLmIuYzMnLCBfLmNvbnN0YW50KCdkZWZhdWx0
JykpOwoJICAgICAqIC8vID0+ICdkZWZhdWx0JwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHJlc3Vs
dChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkgewoJICAgICAgcGF0aCA9IGNhc3RQYXRoKHBh
dGgsIG9iamVjdCk7CgoJICAgICAgdmFyIGluZGV4ID0gLTEsCgkgICAgICAgICAgbGVuZ3RoID0g
cGF0aC5sZW5ndGg7CgoJICAgICAgLy8gRW5zdXJlIHRoZSBsb29wIGlzIGVudGVyZWQgd2hlbiBw
YXRoIGlzIGVtcHR5LgoJICAgICAgaWYgKCFsZW5ndGgpIHsKCSAgICAgICAgbGVuZ3RoID0gMTsK
CSAgICAgICAgb2JqZWN0ID0gdW5kZWZpbmVkOwoJICAgICAgfQoJICAgICAgd2hpbGUgKCsraW5k
ZXggPCBsZW5ndGgpIHsKCSAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRl
ZmluZWQgOiBvYmplY3RbdG9LZXkocGF0aFtpbmRleF0pXTsKCSAgICAgICAgaWYgKHZhbHVlID09
PSB1bmRlZmluZWQpIHsKCSAgICAgICAgICBpbmRleCA9IGxlbmd0aDsKCSAgICAgICAgICB2YWx1
ZSA9IGRlZmF1bHRWYWx1ZTsKCSAgICAgICAgfQoJICAgICAgICBvYmplY3QgPSBpc0Z1bmN0aW9u
KHZhbHVlKSA/IHZhbHVlLmNhbGwob2JqZWN0KSA6IHZhbHVlOwoJICAgICAgfQoJICAgICAgcmV0
dXJuIG9iamVjdDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFNldHMgdGhlIHZhbHVlIGF0IGBw
YXRoYCBvZiBgb2JqZWN0YC4gSWYgYSBwb3J0aW9uIG9mIGBwYXRoYCBkb2Vzbid0IGV4aXN0LAoJ
ICAgICAqIGl0J3MgY3JlYXRlZC4gQXJyYXlzIGFyZSBjcmVhdGVkIGZvciBtaXNzaW5nIGluZGV4
IHByb3BlcnRpZXMgd2hpbGUgb2JqZWN0cwoJICAgICAqIGFyZSBjcmVhdGVkIGZvciBhbGwgb3Ro
ZXIgbWlzc2luZyBwcm9wZXJ0aWVzLiBVc2UgYF8uc2V0V2l0aGAgdG8gY3VzdG9taXplCgkgICAg
ICogYHBhdGhgIGNyZWF0aW9uLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9k
IG11dGF0ZXMgYG9iamVjdGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJl
ck9mIF8KCSAgICAgKiBAc2luY2UgMy43LjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAg
ICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS4KCSAgICAgKiBA
cGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gc2V0
LgoJICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4KCSAgICAgKiBAcmV0
dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9OwoJICAg
ICAqCgkgICAgICogXy5zZXQob2JqZWN0LCAnYVswXS5iLmMnLCA0KTsKCSAgICAgKiBjb25zb2xl
LmxvZyhvYmplY3QuYVswXS5iLmMpOwoJICAgICAqIC8vID0+IDQKCSAgICAgKgoJICAgICAqIF8u
c2V0KG9iamVjdCwgWyd4JywgJzAnLCAneScsICd6J10sIDUpOwoJICAgICAqIGNvbnNvbGUubG9n
KG9iamVjdC54WzBdLnkueik7CgkgICAgICogLy8gPT4gNQoJICAgICAqLwoJICAgIGZ1bmN0aW9u
IHNldChvYmplY3QsIHBhdGgsIHZhbHVlKSB7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwg
PyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpOwoJICAgIH0KCgkgICAgLyoq
CgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGl0IGFjY2Vw
dHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzCgkgICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBv
YmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgCgkg
ICAgICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhl
IGBjdXN0b21pemVyYCBpcyBpbnZva2VkCgkgICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChu
c1ZhbHVlLCBrZXksIG5zT2JqZWN0KS4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1l
dGhvZCBtdXRhdGVzIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBt
ZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IE9iamVjdAoJ
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuCgkgICAg
ICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRv
IHNldC4KCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuCgkgICAgICog
QHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUg
YXNzaWduZWQgdmFsdWVzLgoJICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVj
dGAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3QgPSB7fTsKCSAg
ICAgKgoJICAgICAqIF8uc2V0V2l0aChvYmplY3QsICdbMF1bMV0nLCAnYScsIE9iamVjdCk7Cgkg
ICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9CgkgICAgICovCgkgICAgZnVuY3Rpb24g
c2V0V2l0aChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7CgkgICAgICBjdXN0b21p
emVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRl
ZmluZWQ7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9i
amVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICog
Q3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFp
cnMgZm9yIGBvYmplY3RgCgkgICAgICogd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21Q
YWlyc2AuIElmIGBvYmplY3RgIGlzIGEgbWFwIG9yIHNldCwgaXRzCgkgICAgICogZW50cmllcyBh
cmUgcmV0dXJuZWQuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8K
CSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAYWxpYXMgZW50cmllcwoJICAgICAqIEBjYXRl
Z29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8g
cXVlcnkuCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFp
cnMuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAg
ICAgKiAgIHRoaXMuYSA9IDE7CgkgICAgICogICB0aGlzLmIgPSAyOwoJICAgICAqIH0KCSAgICAg
KgoJICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7CgkgICAgICoKCSAgICAgKiBfLnRvUGFpcnMo
bmV3IEZvbyk7CgkgICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXV0gKGl0ZXJhdGlvbiBv
cmRlciBpcyBub3QgZ3VhcmFudGVlZCkKCSAgICAgKi8KCSAgICB2YXIgdG9QYWlycyA9IGNyZWF0
ZVRvUGFpcnMoa2V5cyk7CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3du
IGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQtdmFsdWUgcGFpcnMKCSAgICAg
KiBmb3IgYG9iamVjdGAgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGBfLmZyb21QYWlyc2AuIElm
IGBvYmplY3RgIGlzIGEgbWFwCgkgICAgICogb3Igc2V0LCBpdHMgZW50cmllcyBhcmUgcmV0dXJu
ZWQuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBA
c2luY2UgNC4wLjAKCSAgICAgKiBAYWxpYXMgZW50cmllc0luCgkgICAgICogQGNhdGVnb3J5IE9i
amVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS4K
CSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy4KCSAg
ICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogZnVuY3Rpb24gRm9vKCkgewoJICAgICAqICAg
dGhpcy5hID0gMTsKCSAgICAgKiAgIHRoaXMuYiA9IDI7CgkgICAgICogfQoJICAgICAqCgkgICAg
ICogRm9vLnByb3RvdHlwZS5jID0gMzsKCSAgICAgKgoJICAgICAqIF8udG9QYWlyc0luKG5ldyBG
b28pOwoJICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl0sIFsnYycsIDNdXSAoaXRlcmF0
aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKQoJICAgICAqLwoJICAgIHZhciB0b1BhaXJzSW4g
PSBjcmVhdGVUb1BhaXJzKGtleXNJbik7CgoJICAgIC8qKgoJICAgICAqIEFuIGFsdGVybmF0aXZl
IHRvIGBfLnJlZHVjZWA7IHRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgYG9iamVjdGAgdG8gYSBuZXcK
CSAgICAgKiBgYWNjdW11bGF0b3JgIG9iamVjdCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5p
bmcgZWFjaCBvZiBpdHMgb3duCgkgICAgICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVy
dGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uCgkgICAgICogcG90ZW50
aWFsbHkgbXV0YXRpbmcgdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBJZiBgYWNjdW11bGF0b3Jg
IGlzIG5vdAoJICAgICAqIHByb3ZpZGVkLCBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBgW1tQ
cm90b3R5cGVdXWAgd2lsbCBiZSB1c2VkLiBUaGUKCSAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2Vk
IHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS4K
CSAgICAgKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4
cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAg
ICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMS4zLjAKCSAgICAgKiBAY2F0ZWdvcnkgT2Jq
ZWN0CgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUg
b3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhl
IGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi4KCSAgICAgKiBAcGFyYW0geyp9IFthY2N1
bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS4KCSAgICAgKiBAcmV0dXJucyB7
Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIF8udHJhbnNmb3JtKFsyLCAzLCA0XSwgZnVuY3Rpb24ocmVzdWx0LCBuKSB7Cgkg
ICAgICogICByZXN1bHQucHVzaChuICo9IG4pOwoJICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7
CgkgICAgICogfSwgW10pOwoJICAgICAqIC8vID0+IFs0LCA5XQoJICAgICAqCgkgICAgICogXy50
cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFs
dWUsIGtleSkgewoJICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBb
XSkpLnB1c2goa2V5KTsKCSAgICAgKiB9LCB7fSk7CgkgICAgICogLy8gPT4geyAnMSc6IFsnYScs
ICdjJ10sICcyJzogWydiJ10gfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShvYmpl
Y3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikgewoJICAgICAgdmFyIGlzQXJyID0gaXNBcnJheShv
YmplY3QpLAoJICAgICAgICAgIGlzQXJyTGlrZSA9IGlzQXJyIHx8IGlzQnVmZmVyKG9iamVjdCkg
fHwgaXNUeXBlZEFycmF5KG9iamVjdCk7CgoJICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShp
dGVyYXRlZSwgNCk7CgkgICAgICBpZiAoYWNjdW11bGF0b3IgPT0gbnVsbCkgewoJICAgICAgICB2
YXIgQ3RvciA9IG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3I7CgkgICAgICAgIGlmIChpc0Fy
ckxpa2UpIHsKCSAgICAgICAgICBhY2N1bXVsYXRvciA9IGlzQXJyID8gbmV3IEN0b3IgOiBbXTsK
CSAgICAgICAgfQoJICAgICAgICBlbHNlIGlmIChpc09iamVjdChvYmplY3QpKSB7CgkgICAgICAg
ICAgYWNjdW11bGF0b3IgPSBpc0Z1bmN0aW9uKEN0b3IpID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5
cGUob2JqZWN0KSkgOiB7fTsKCSAgICAgICAgfQoJICAgICAgICBlbHNlIHsKCSAgICAgICAgICBh
Y2N1bXVsYXRvciA9IHt9OwoJICAgICAgICB9CgkgICAgICB9CgkgICAgICAoaXNBcnJMaWtlID8g
YXJyYXlFYWNoIDogYmFzZUZvck93bikob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIG9i
amVjdCkgewoJICAgICAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRl
eCwgb2JqZWN0KTsKCSAgICAgIH0pOwoJICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogUmVtb3ZlcyB0aGUgcHJvcGVydHkgYXQgYHBhdGhgIG9mIGBvYmpl
Y3RgLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVj
dGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBA
c2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0CgkgICAgICogQHBhcmFtIHtPYmpl
Y3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS4KCSAgICAgKiBAcGFyYW0ge0FycmF5fHN0
cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gdW5zZXQuCgkgICAgICogQHJl
dHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVk
LCBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmpl
Y3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogNyB9IH1dIH07CgkgICAgICogXy51bnNldChvYmpl
Y3QsICdhWzBdLmIuYycpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIGNvbnNv
bGUubG9nKG9iamVjdCk7CgkgICAgICogLy8gPT4geyAnYSc6IFt7ICdiJzoge30gfV0gfTsKCSAg
ICAgKgoJICAgICAqIF8udW5zZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7CgkgICAg
ICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogY29uc29sZS5sb2cob2JqZWN0KTsKCSAgICAg
KiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9OwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHVu
c2V0KG9iamVjdCwgcGF0aCkgewoJICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdHJ1ZSA6
IGJhc2VVbnNldChvYmplY3QsIHBhdGgpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBt
ZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGFjY2VwdHMgYHVwZGF0ZXJgIHRvIHBy
b2R1Y2UgdGhlCgkgICAgICogdmFsdWUgdG8gc2V0LiBVc2UgYF8udXBkYXRlV2l0aGAgdG8gY3Vz
dG9taXplIGBwYXRoYCBjcmVhdGlvbi4gVGhlIGB1cGRhdGVyYAoJICAgICAqIGlzIGludm9rZWQg
d2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogVGhp
cyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAg
KiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjYuMAoJICAgICAqIEBjYXRlZ29yeSBPYmpl
Y3QKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LgoJ
ICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0
eSB0byBzZXQuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24g
dG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBS
ZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2Jq
ZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9OwoJICAgICAqCgkgICAgICogXy51
cGRhdGUob2JqZWN0LCAnYVswXS5iLmMnLCBmdW5jdGlvbihuKSB7IHJldHVybiBuICogbjsgfSk7
CgkgICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTsKCSAgICAgKiAvLyA9PiA5Cgkg
ICAgICoKCSAgICAgKiBfLnVwZGF0ZShvYmplY3QsICd4WzBdLnkueicsIGZ1bmN0aW9uKG4pIHsg
cmV0dXJuIG4gPyBuICsgMSA6IDA7IH0pOwoJICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBd
Lnkueik7CgkgICAgICogLy8gPT4gMAoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHVwZGF0ZShvYmpl
Y3QsIHBhdGgsIHVwZGF0ZXIpIHsKCSAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVj
dCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlcikpOwoJICAg
IH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51cGRhdGVgIGV4Y2Vw
dCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzCgkgICAgICogaW52b2tlZCB0
byBwcm9kdWNlIHRoZSBvYmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5z
IGB1bmRlZmluZWRgCgkgICAgICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRo
b2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkCgkgICAgICogd2l0aCB0aHJl
ZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS4KCSAgICAgKgoJICAgICAqICoq
Tm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuNi4wCgkgICAgICogQGNh
dGVnb3J5IE9iamVjdAoJICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0
byBtb2RpZnkuCgkgICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2Yg
dGhlIHByb3BlcnR5IHRvIHNldC4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRo
ZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLgoJICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVk
IHZhbHVlcy4KCSAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAg
ICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0ID0ge307CgkgICAgICoKCSAg
ICAgKiBfLnVwZGF0ZVdpdGgob2JqZWN0LCAnWzBdWzFdJywgXy5jb25zdGFudCgnYScpLCBPYmpl
Y3QpOwoJICAgICAqIC8vID0+IHsgJzAnOiB7ICcxJzogJ2EnIH0gfQoJICAgICAqLwoJICAgIGZ1
bmN0aW9uIHVwZGF0ZVdpdGgob2JqZWN0LCBwYXRoLCB1cGRhdGVyLCBjdXN0b21pemVyKSB7Cgkg
ICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3Rv
bWl6ZXIgOiB1bmRlZmluZWQ7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3Qg
OiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgY2FzdEZ1bmN0aW9uKHVwZGF0ZXIpLCBjdXN0b21p
emVyKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93
biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuCgkg
ICAgICoKCSAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8g
b2JqZWN0cy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4xLjAKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFyYW0g
e09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMge0Fy
cmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuCgkgICAgICogQGV4YW1w
bGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAgICAgKiAgIHRoaXMuYSA9IDE7
CgkgICAgICogICB0aGlzLmIgPSAyOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIEZvby5wcm90
b3R5cGUuYyA9IDM7CgkgICAgICoKCSAgICAgKiBfLnZhbHVlcyhuZXcgRm9vKTsKCSAgICAgKiAv
LyA9PiBbMSwgMl0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkKCSAgICAgKgoJ
ICAgICAqIF8udmFsdWVzKCdoaScpOwoJICAgICAqIC8vID0+IFsnaCcsICdpJ10KCSAgICAgKi8K
CSAgICBmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7CgkgICAgICByZXR1cm4gb2JqZWN0ID09IG51
bGwgPyBbXSA6IGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51
bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkKCSAgICAgKiB2YWx1ZXMgb2YgYG9iamVjdGAu
CgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQg
dG8gb2JqZWN0cy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJ
ICAgICAqIEBzaW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBPYmplY3QKCSAgICAgKiBAcGFy
YW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMg
e0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9uIEZvbygpIHsKCSAgICAgKiAgIHRoaXMuYSA9
IDE7CgkgICAgICogICB0aGlzLmIgPSAyOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIEZvby5w
cm90b3R5cGUuYyA9IDM7CgkgICAgICoKCSAgICAgKiBfLnZhbHVlc0luKG5ldyBGb28pOwoJICAg
ICAqIC8vID0+IFsxLCAyLCAzXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKQoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIHZhbHVlc0luKG9iamVjdCkgewoJICAgICAgcmV0dXJuIG9i
amVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5c0luKG9iamVjdCkpOwoJ
ICAgIH0KCgkgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCSAgICAvKioKCSAgICAgKiBDbGFtcHMg
YG51bWJlcmAgd2l0aGluIHRoZSBpbmNsdXNpdmUgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMu
CgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2lu
Y2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyCgkgICAgICogQHBhcmFtIHtudW1iZXJ9
IG51bWJlciBUaGUgbnVtYmVyIHRvIGNsYW1wLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93
ZXJdIFRoZSBsb3dlciBib3VuZC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gdXBwZXIgVGhlIHVw
cGVyIGJvdW5kLgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNsYW1wZWQg
bnVtYmVyLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmNsYW1wKC0xMCwgLTUs
IDUpOwoJICAgICAqIC8vID0+IC01CgkgICAgICoKCSAgICAgKiBfLmNsYW1wKDEwLCAtNSwgNSk7
CgkgICAgICogLy8gPT4gNQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgbG93
ZXIsIHVwcGVyKSB7CgkgICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkgewoJICAgICAgICB1
cHBlciA9IGxvd2VyOwoJICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDsKCSAgICAgIH0KCSAgICAg
IGlmICh1cHBlciAhPT0gdW5kZWZpbmVkKSB7CgkgICAgICAgIHVwcGVyID0gdG9OdW1iZXIodXBw
ZXIpOwoJICAgICAgICB1cHBlciA9IHVwcGVyID09PSB1cHBlciA/IHVwcGVyIDogMDsKCSAgICAg
IH0KCSAgICAgIGlmIChsb3dlciAhPT0gdW5kZWZpbmVkKSB7CgkgICAgICAgIGxvd2VyID0gdG9O
dW1iZXIobG93ZXIpOwoJICAgICAgICBsb3dlciA9IGxvd2VyID09PSBsb3dlciA/IGxvd2VyIDog
MDsKCSAgICAgIH0KCSAgICAgIHJldHVybiBiYXNlQ2xhbXAodG9OdW1iZXIobnVtYmVyKSwgbG93
ZXIsIHVwcGVyKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENoZWNrcyBpZiBgbmAgaXMgYmV0
d2VlbiBgc3RhcnRgIGFuZCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBJZgoJICAg
ICAqIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3Rh
cnRgIHRoZW4gc2V0IHRvIGAwYC4KCSAgICAgKiBJZiBgc3RhcnRgIGlzIGdyZWF0ZXIgdGhhbiBg
ZW5kYCB0aGUgcGFyYW1zIGFyZSBzd2FwcGVkIHRvIHN1cHBvcnQKCSAgICAgKiBuZWdhdGl2ZSBy
YW5nZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgMy4zLjAKCSAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyCgkgICAgICogQHBhcmFtIHtu
dW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNoZWNrLgoJICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS4KCSAgICAgKiBAcGFyYW0ge251bWJl
cn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBS
ZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC4K
CSAgICAgKiBAc2VlIF8ucmFuZ2UsIF8ucmFuZ2VSaWdodAoJICAgICAqIEBleGFtcGxlCgkgICAg
ICoKCSAgICAgKiBfLmluUmFuZ2UoMywgMiwgNCk7CgkgICAgICogLy8gPT4gdHJ1ZQoJICAgICAq
CgkgICAgICogXy5pblJhbmdlKDQsIDgpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAg
ICAqIF8uaW5SYW5nZSg0LCAyKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqCgkgICAgICog
Xy5pblJhbmdlKDIsIDIpOwoJICAgICAqIC8vID0+IGZhbHNlCgkgICAgICoKCSAgICAgKiBfLmlu
UmFuZ2UoMS4yLCAyKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoKCSAgICAgKiBfLmluUmFu
Z2UoNS4yLCA0KTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqCgkgICAgICogXy5pblJhbmdl
KC0zLCAtMiwgLTYpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBp
blJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkgewoJICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFy
dCk7CgkgICAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAgZW5kID0gc3RhcnQ7
CgkgICAgICAgIHN0YXJ0ID0gMDsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIGVuZCA9IHRvRmlu
aXRlKGVuZCk7CgkgICAgICB9CgkgICAgICBudW1iZXIgPSB0b051bWJlcihudW1iZXIpOwoJICAg
ICAgcmV0dXJuIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCk7CgkgICAgfQoKCSAgICAv
KioKCSAgICAgKiBQcm9kdWNlcyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiB0aGUgaW5jbHVzaXZl
IGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLgoJICAgICAqIElmIG9ubHkgb25lIGFyZ3VtZW50
IGlzIHByb3ZpZGVkIGEgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCB0aGUgZ2l2ZW4gbnVtYmVyCgkg
ICAgICogaXMgcmV0dXJuZWQuIElmIGBmbG9hdGluZ2AgaXMgYHRydWVgLCBvciBlaXRoZXIgYGxv
d2VyYCBvciBgdXBwZXJgIGFyZQoJICAgICAqIGZsb2F0cywgYSBmbG9hdGluZy1wb2ludCBudW1i
ZXIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBpbnRlZ2VyLgoJICAgICAqCgkgICAgICogKipO
b3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29s
dmluZwoJICAgICAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB3aGljaCBjYW4gcHJvZHVjZSB1bmV4
cGVjdGVkIHJlc3VsdHMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9m
IF8KCSAgICAgKiBAc2luY2UgMC43LjAKCSAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyCgkgICAgICog
QHBhcmFtIHtudW1iZXJ9IFtsb3dlcj0wXSBUaGUgbG93ZXIgYm91bmQuCgkgICAgICogQHBhcmFt
IHtudW1iZXJ9IFt1cHBlcj0xXSBUaGUgdXBwZXIgYm91bmQuCgkgICAgICogQHBhcmFtIHtib29s
ZWFufSBbZmxvYXRpbmddIFNwZWNpZnkgcmV0dXJuaW5nIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVy
LgoJICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJhbmRvbSBudW1iZXIuCgkg
ICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8ucmFuZG9tKDAsIDUpOwoJICAgICAqIC8v
ID0+IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1CgkgICAgICoKCSAgICAgKiBfLnJhbmRvbSg1
KTsKCSAgICAgKiAvLyA9PiBhbHNvIGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCA1CgkgICAgICoK
CSAgICAgKiBfLnJhbmRvbSg1LCB0cnVlKTsKCSAgICAgKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50
IG51bWJlciBiZXR3ZWVuIDAgYW5kIDUKCSAgICAgKgoJICAgICAqIF8ucmFuZG9tKDEuMiwgNS4y
KTsKCSAgICAgKiAvLyA9PiBhIGZsb2F0aW5nLXBvaW50IG51bWJlciBiZXR3ZWVuIDEuMiBhbmQg
NS4yCgkgICAgICovCgkgICAgZnVuY3Rpb24gcmFuZG9tKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcp
IHsKCSAgICAgIGlmIChmbG9hdGluZyAmJiB0eXBlb2YgZmxvYXRpbmcgIT0gJ2Jvb2xlYW4nICYm
IGlzSXRlcmF0ZWVDYWxsKGxvd2VyLCB1cHBlciwgZmxvYXRpbmcpKSB7CgkgICAgICAgIHVwcGVy
ID0gZmxvYXRpbmcgPSB1bmRlZmluZWQ7CgkgICAgICB9CgkgICAgICBpZiAoZmxvYXRpbmcgPT09
IHVuZGVmaW5lZCkgewoJICAgICAgICBpZiAodHlwZW9mIHVwcGVyID09ICdib29sZWFuJykgewoJ
ICAgICAgICAgIGZsb2F0aW5nID0gdXBwZXI7CgkgICAgICAgICAgdXBwZXIgPSB1bmRlZmluZWQ7
CgkgICAgICAgIH0KCSAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvd2VyID09ICdib29sZWFuJykg
ewoJICAgICAgICAgIGZsb2F0aW5nID0gbG93ZXI7CgkgICAgICAgICAgbG93ZXIgPSB1bmRlZmlu
ZWQ7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIGlmIChsb3dlciA9PT0gdW5kZWZpbmVkICYm
IHVwcGVyID09PSB1bmRlZmluZWQpIHsKCSAgICAgICAgbG93ZXIgPSAwOwoJICAgICAgICB1cHBl
ciA9IDE7CgkgICAgICB9CgkgICAgICBlbHNlIHsKCSAgICAgICAgbG93ZXIgPSB0b0Zpbml0ZShs
b3dlcik7CgkgICAgICAgIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7CgkgICAgICAgICAgdXBw
ZXIgPSBsb3dlcjsKCSAgICAgICAgICBsb3dlciA9IDA7CgkgICAgICAgIH0gZWxzZSB7CgkgICAg
ICAgICAgdXBwZXIgPSB0b0Zpbml0ZSh1cHBlcik7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAg
IGlmIChsb3dlciA+IHVwcGVyKSB7CgkgICAgICAgIHZhciB0ZW1wID0gbG93ZXI7CgkgICAgICAg
IGxvd2VyID0gdXBwZXI7CgkgICAgICAgIHVwcGVyID0gdGVtcDsKCSAgICAgIH0KCSAgICAgIGlm
IChmbG9hdGluZyB8fCBsb3dlciAlIDEgfHwgdXBwZXIgJSAxKSB7CgkgICAgICAgIHZhciByYW5k
ID0gbmF0aXZlUmFuZG9tKCk7CgkgICAgICAgIHJldHVybiBuYXRpdmVNaW4obG93ZXIgKyAocmFu
ZCAqICh1cHBlciAtIGxvd2VyICsgZnJlZVBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJyku
bGVuZ3RoIC0gMSkpKSksIHVwcGVyKTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBiYXNlUmFuZG9t
KGxvd2VyLCB1cHBlcik7CgkgICAgfQoKCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAgIC8q
KgoJICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtjYW1lbCBjYXNlXShodHRwczovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9DYW1lbENhc2UpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAg
ICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IFN0
cmluZwoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNv
bnZlcnQuCgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FtZWwgY2FzZWQg
c3RyaW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmNhbWVsQ2FzZSgnRm9v
IEJhcicpOwoJICAgICAqIC8vID0+ICdmb29CYXInCgkgICAgICoKCSAgICAgKiBfLmNhbWVsQ2Fz
ZSgnLS1mb28tYmFyLS0nKTsKCSAgICAgKiAvLyA9PiAnZm9vQmFyJwoJICAgICAqCgkgICAgICog
Xy5jYW1lbENhc2UoJ19fRk9PX0JBUl9fJyk7CgkgICAgICogLy8gPT4gJ2Zvb0JhcicKCSAgICAg
Ki8KCSAgICB2YXIgY2FtZWxDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQs
IHdvcmQsIGluZGV4KSB7CgkgICAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpOwoJICAgICAg
cmV0dXJuIHJlc3VsdCArIChpbmRleCA/IGNhcGl0YWxpemUod29yZCkgOiB3b3JkKTsKCSAgICB9
KTsKCgkgICAgLyoqCgkgICAgICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3Ry
aW5nYCB0byB1cHBlciBjYXNlIGFuZCB0aGUgcmVtYWluaW5nCgkgICAgICogdG8gbG93ZXIgY2Fz
ZS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjYXBpdGFsaXplLgoJICAgICAqIEByZXR1cm5z
IHtzdHJpbmd9IFJldHVybnMgdGhlIGNhcGl0YWxpemVkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBs
ZQoJICAgICAqCgkgICAgICogXy5jYXBpdGFsaXplKCdGUkVEJyk7CgkgICAgICogLy8gPT4gJ0Zy
ZWQnCgkgICAgICovCgkgICAgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHsKCSAgICAgIHJl
dHVybiB1cHBlckZpcnN0KHRvU3RyaW5nKHN0cmluZykudG9Mb3dlckNhc2UoKSk7CgkgICAgfQoK
CSAgICAvKioKCSAgICAgKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmcKCSAgICAgKiBb
TGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0x
X1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSkKCSAgICAgKiBhbmQg
W0xhdGluIEV4dGVuZGVkLUFdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluX0V4
dGVuZGVkLUEpCgkgICAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1v
dmluZwoJICAgICAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuCgkgICAgICoKCSAg
ICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4wLjAKCSAg
ICAgKiBAY2F0ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9Jydd
IFRoZSBzdHJpbmcgdG8gZGVidXJyLgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMg
dGhlIGRlYnVycmVkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5k
ZWJ1cnIoJ2TDqWrDoCB2dScpOwoJICAgICAqIC8vID0+ICdkZWphIHZ1JwoJICAgICAqLwoJICAg
IGZ1bmN0aW9uIGRlYnVycihzdHJpbmcpIHsKCSAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmlu
Zyk7CgkgICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4sIGRlYnVy
ckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpOwoJICAgIH0KCgkgICAgLyoqCgkgICAg
ICogQ2hlY2tzIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy4K
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
W3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuCgkgICAgICogQHBhcmFtIHtudW1i
ZXJ9IFtwb3NpdGlvbj1zdHJpbmcubGVuZ3RoXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIHVwIHRv
LgoJICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBl
bmRzIHdpdGggYHRhcmdldGAsCgkgICAgICogIGVsc2UgYGZhbHNlYC4KCSAgICAgKiBAZXhhbXBs
ZQoJICAgICAqCgkgICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2MnKTsKCSAgICAgKiAvLyA9PiB0
cnVlCgkgICAgICoKCSAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicpOwoJICAgICAqIC8vID0+
IGZhbHNlCgkgICAgICoKCSAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicsIDIpOwoJICAgICAq
IC8vID0+IHRydWUKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmcsIHRhcmdl
dCwgcG9zaXRpb24pIHsKCSAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7CgkgICAgICB0
YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTsKCgkgICAgICB2YXIgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aDsKCSAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT09IHVuZGVmaW5lZAoJICAgICAg
ICA/IGxlbmd0aAoJICAgICAgICA6IGJhc2VDbGFtcCh0b0ludGVnZXIocG9zaXRpb24pLCAwLCBs
ZW5ndGgpOwoKCSAgICAgIHZhciBlbmQgPSBwb3NpdGlvbjsKCSAgICAgIHBvc2l0aW9uIC09IHRh
cmdldC5sZW5ndGg7CgkgICAgICByZXR1cm4gcG9zaXRpb24gPj0gMCAmJiBzdHJpbmcuc2xpY2Uo
cG9zaXRpb24sIGVuZCkgPT0gdGFyZ2V0OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ29udmVy
dHMgdGhlIGNoYXJhY3RlcnMgIiYiLCAiPCIsICI+IiwgJyInLCBhbmQgIiciIGluIGBzdHJpbmdg
IHRvIHRoZWlyCgkgICAgICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLgoJICAgICAqCgkg
ICAgICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2Fw
ZSBhZGRpdGlvbmFsCgkgICAgICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5
IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuCgkgICAgICoKCSAgICAgKiBUaG91Z2gg
dGhlICI+IiBjaGFyYWN0ZXIgaXMgZXNjYXBlZCBmb3Igc3ltbWV0cnksIGNoYXJhY3RlcnMgbGlr
ZQoJICAgICAqICI+IiBhbmQgIi8iIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2
ZSBubyBzcGVjaWFsIG1lYW5pbmcKCSAgICAgKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFn
IG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlCgkgICAgICogW01hdGhpYXMgQnluZW5z
J3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBl
cnNhbmRzKQoJICAgICAqICh1bmRlciAic2VtaS1yZWxhdGVkIGZ1biBmYWN0IikgZm9yIG1vcmUg
ZGV0YWlscy4KCSAgICAgKgoJICAgICAqIFdoZW4gd29ya2luZyB3aXRoIEhUTUwgeW91IHNob3Vs
ZCBhbHdheXMKCSAgICAgKiBbcXVvdGUgYXR0cmlidXRlIHZhbHVlc10oaHR0cDovL3dvbmtvLmNv
bS9wb3N0L2h0bWwtZXNjYXBpbmcpIHRvIHJlZHVjZQoJICAgICAqIFhTUyB2ZWN0b3JzLgoJICAg
ICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQGNhdGVnb3J5IFN0cmluZwoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3Ry
aW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBS
ZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAg
ICogXy5lc2NhcGUoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7CgkgICAgICogLy8gPT4gJ2Zy
ZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlcycKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBlc2NhcGUo
c3RyaW5nKSB7CgkgICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpOwoJICAgICAgcmV0dXJu
IChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSkKCSAgICAgICAgPyBz
dHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKQoJICAgICAgICA6
IHN0cmluZzsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNw
ZWNpYWwgY2hhcmFjdGVycyAiXiIsICIkIiwgIlwiLCAiLiIsICIqIiwgIisiLAoJICAgICAqICI/
IiwgIigiLCAiKSIsICJbIiwgIl0iLCAieyIsICJ9IiwgYW5kICJ8IiBpbiBgc3RyaW5nYC4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAz
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0
cmluZz0nJ10gVGhlIHN0cmluZyB0byBlc2NhcGUuCgkgICAgICogQHJldHVybnMge3N0cmluZ30g
UmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAg
ICAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpOwoJICAg
ICAqIC8vID0+ICdcW2xvZGFzaFxdXChodHRwczovL2xvZGFzaFwuY29tL1wpJwoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHsKCSAgICAgIHN0cmluZyA9IHRvU3Ry
aW5nKHN0cmluZyk7CgkgICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVz
dChzdHJpbmcpKQoJICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcJCYn
KQoJICAgICAgICA6IHN0cmluZzsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENvbnZlcnRzIGBz
dHJpbmdgIHRvCgkgICAgICogW2tlYmFiIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93
aWtpL0xldHRlcl9jYXNlI1NwZWNpYWxfY2FzZV9zdHlsZXMpLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNh
dGVnb3J5IFN0cmluZwoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3Ry
aW5nIHRvIGNvbnZlcnQuCgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUga2Vi
YWIgY2FzZWQgc3RyaW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmtlYmFi
Q2FzZSgnRm9vIEJhcicpOwoJICAgICAqIC8vID0+ICdmb28tYmFyJwoJICAgICAqCgkgICAgICog
Xy5rZWJhYkNhc2UoJ2Zvb0JhcicpOwoJICAgICAqIC8vID0+ICdmb28tYmFyJwoJICAgICAqCgkg
ICAgICogXy5rZWJhYkNhc2UoJ19fRk9PX0JBUl9fJyk7CgkgICAgICogLy8gPT4gJ2Zvby1iYXIn
CgkgICAgICovCgkgICAgdmFyIGtlYmFiQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24o
cmVzdWx0LCB3b3JkLCBpbmRleCkgewoJICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICct
JyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICog
Q29udmVydHMgYHN0cmluZ2AsIGFzIHNwYWNlIHNlcGFyYXRlZCB3b3JkcywgdG8gbG93ZXIgY2Fz
ZS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LgoJICAgICAqIEByZXR1cm5zIHtz
dHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogXy5sb3dlckNhc2UoJy0tRm9vLUJhci0tJyk7CgkgICAgICogLy8gPT4g
J2ZvbyBiYXInCgkgICAgICoKCSAgICAgKiBfLmxvd2VyQ2FzZSgnZm9vQmFyJyk7CgkgICAgICog
Ly8gPT4gJ2ZvbyBiYXInCgkgICAgICoKCSAgICAgKiBfLmxvd2VyQ2FzZSgnX19GT09fQkFSX18n
KTsKCSAgICAgKiAvLyA9PiAnZm9vIGJhcicKCSAgICAgKi8KCSAgICB2YXIgbG93ZXJDYXNlID0g
Y3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7CgkgICAgICBy
ZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgd29yZC50b0xvd2VyQ2FzZSgpOwoJ
ICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9m
IGBzdHJpbmdgIHRvIGxvd2VyIGNhc2UuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICog
QG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5n
CgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVy
dC4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5n
LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZyZWQnKTsK
CSAgICAgKiAvLyA9PiAnZnJlZCcKCSAgICAgKgoJICAgICAqIF8ubG93ZXJGaXJzdCgnRlJFRCcp
OwoJICAgICAqIC8vID0+ICdmUkVEJwoJICAgICAqLwoJICAgIHZhciBsb3dlckZpcnN0ID0gY3Jl
YXRlQ2FzZUZpcnN0KCd0b0xvd2VyQ2FzZScpOwoKCSAgICAvKioKCSAgICAgKiBQYWRzIGBzdHJp
bmdgIG9uIHRoZSBsZWZ0IGFuZCByaWdodCBzaWRlcyBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVu
Z3RoYC4KCSAgICAgKiBQYWRkaW5nIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGNh
bid0IGJlIGV2ZW5seSBkaXZpZGVkIGJ5IGBsZW5ndGhgLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVn
b3J5IFN0cmluZwoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5n
IHRvIHBhZC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0wXSBUaGUgcGFkZGluZyBs
ZW5ndGguCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNl
ZCBhcyBwYWRkaW5nLgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRl
ZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8ucGFkKCdhYmMnLCA4
KTsKCSAgICAgKiAvLyA9PiAnICBhYmMgICAnCgkgICAgICoKCSAgICAgKiBfLnBhZCgnYWJjJywg
OCwgJ18tJyk7CgkgICAgICogLy8gPT4gJ18tYWJjXy1fJwoJICAgICAqCgkgICAgICogXy5wYWQo
J2FiYycsIDMpOwoJICAgICAqIC8vID0+ICdhYmMnCgkgICAgICovCgkgICAgZnVuY3Rpb24gcGFk
KHN0cmluZywgbGVuZ3RoLCBjaGFycykgewoJICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5n
KTsKCSAgICAgIGxlbmd0aCA9IHRvSW50ZWdlcihsZW5ndGgpOwoKCSAgICAgIHZhciBzdHJMZW5n
dGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwOwoJICAgICAgaWYgKCFsZW5ndGgg
fHwgc3RyTGVuZ3RoID49IGxlbmd0aCkgewoJICAgICAgICByZXR1cm4gc3RyaW5nOwoJICAgICAg
fQoJICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMjsKCSAgICAgIHJldHVy
biAoCgkgICAgICAgIGNyZWF0ZVBhZGRpbmcobmF0aXZlRmxvb3IobWlkKSwgY2hhcnMpICsKCSAg
ICAgICAgc3RyaW5nICsKCSAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVDZWlsKG1pZCksIGNo
YXJzKQoJICAgICAgKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFBhZHMgYHN0cmluZ2Agb24g
dGhlIHJpZ2h0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmcKCSAg
ICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuCgkg
ICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2Ug
NC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtz
dHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVu
Z3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC4KCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJz
PScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuCgkgICAgICogQHJldHVybnMge3N0cmlu
Z30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkg
ICAgICogXy5wYWRFbmQoJ2FiYycsIDYpOwoJICAgICAqIC8vID0+ICdhYmMgICAnCgkgICAgICoK
CSAgICAgKiBfLnBhZEVuZCgnYWJjJywgNiwgJ18tJyk7CgkgICAgICogLy8gPT4gJ2FiY18tXycK
CSAgICAgKgoJICAgICAqIF8ucGFkRW5kKCdhYmMnLCAzKTsKCSAgICAgKiAvLyA9PiAnYWJjJwoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHsKCSAg
ICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7CgkgICAgICBsZW5ndGggPSB0b0ludGVnZXIo
bGVuZ3RoKTsKCgkgICAgICB2YXIgc3RyTGVuZ3RoID0gbGVuZ3RoID8gc3RyaW5nU2l6ZShzdHJp
bmcpIDogMDsKCSAgICAgIHJldHVybiAobGVuZ3RoICYmIHN0ckxlbmd0aCA8IGxlbmd0aCkKCSAg
ICAgICAgPyAoc3RyaW5nICsgY3JlYXRlUGFkZGluZyhsZW5ndGggLSBzdHJMZW5ndGgsIGNoYXJz
KSkKCSAgICAgICAgOiBzdHJpbmc7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBQYWRzIGBzdHJp
bmdgIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRp
bmcKCSAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0
aGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBA
c2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJp
bmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLgoJICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC4KCSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
W2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuCgkgICAgICogQHJldHVybnMg
e3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJICAg
ICAqCgkgICAgICogXy5wYWRTdGFydCgnYWJjJywgNik7CgkgICAgICogLy8gPT4gJyAgIGFiYycK
CSAgICAgKgoJICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDYsICdfLScpOwoJICAgICAqIC8vID0+
ICdfLV9hYmMnCgkgICAgICoKCSAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCAzKTsKCSAgICAgKiAv
LyA9PiAnYWJjJwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHBhZFN0YXJ0KHN0cmluZywgbGVuZ3Ro
LCBjaGFycykgewoJICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTsKCSAgICAgIGxlbmd0
aCA9IHRvSW50ZWdlcihsZW5ndGgpOwoKCSAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBz
dHJpbmdTaXplKHN0cmluZykgOiAwOwoJICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3Ro
IDwgbGVuZ3RoKQoJICAgICAgICA/IChjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwg
Y2hhcnMpICsgc3RyaW5nKQoJICAgICAgICA6IHN0cmluZzsKCSAgICB9CgoJICAgIC8qKgoJICAg
ICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGludGVnZXIgb2YgdGhlIHNwZWNpZmllZCByYWRp
eC4gSWYgYHJhZGl4YCBpcwoJICAgICAqIGB1bmRlZmluZWRgIG9yIGAwYCwgYSBgcmFkaXhgIG9m
IGAxMGAgaXMgdXNlZCB1bmxlc3MgYHZhbHVlYCBpcyBhCgkgICAgICogaGV4YWRlY2ltYWwsIGlu
IHdoaWNoIGNhc2UgYSBgcmFkaXhgIG9mIGAxNmAgaXMgdXNlZC4KCSAgICAgKgoJICAgICAqICoq
Tm90ZToqKiBUaGlzIG1ldGhvZCBhbGlnbnMgd2l0aCB0aGUKCSAgICAgKiBbRVM1IGltcGxlbWVu
dGF0aW9uXShodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS4xLjIuMikgb2YgYHBhcnNlSW50YC4K
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSAxLjEuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30g
c3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Jh
ZGl4PTEwXSBUaGUgcmFkaXggdG8gaW50ZXJwcmV0IGB2YWx1ZWAgYnkuCgkgICAgICogQHBhcmFt
LSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2Rz
IGxpa2UgYF8ubWFwYC4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252
ZXJ0ZWQgaW50ZWdlci4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5wYXJzZUlu
dCgnMDgnKTsKCSAgICAgKiAvLyA9PiA4CgkgICAgICoKCSAgICAgKiBfLm1hcChbJzYnLCAnMDgn
LCAnMTAnXSwgXy5wYXJzZUludCk7CgkgICAgICogLy8gPT4gWzYsIDgsIDEwXQoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgsIGd1YXJkKSB7CgkgICAgICBpZiAo
Z3VhcmQgfHwgcmFkaXggPT0gbnVsbCkgewoJICAgICAgICByYWRpeCA9IDA7CgkgICAgICB9IGVs
c2UgaWYgKHJhZGl4KSB7CgkgICAgICAgIHJhZGl4ID0gK3JhZGl4OwoJICAgICAgfQoJICAgICAg
cmV0dXJuIG5hdGl2ZVBhcnNlSW50KHRvU3RyaW5nKHN0cmluZykucmVwbGFjZShyZVRyaW1TdGFy
dCwgJycpLCByYWRpeCB8fCAwKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFJlcGVhdHMgdGhl
IGdpdmVuIHN0cmluZyBgbmAgdGltZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICog
QG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5n
CgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcmVwZWF0
LgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJl
cGVhdCB0aGUgc3RyaW5nLgoJICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVz
IHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuCgkgICAgICogQHJl
dHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLgoJICAgICAqIEBleGFt
cGxlCgkgICAgICoKCSAgICAgKiBfLnJlcGVhdCgnKicsIDMpOwoJICAgICAqIC8vID0+ICcqKion
CgkgICAgICoKCSAgICAgKiBfLnJlcGVhdCgnYWJjJywgMik7CgkgICAgICogLy8gPT4gJ2FiY2Fi
YycKCSAgICAgKgoJICAgICAqIF8ucmVwZWF0KCdhYmMnLCAwKTsKCSAgICAgKiAvLyA9PiAnJwoJ
ICAgICAqLwoJICAgIGZ1bmN0aW9uIHJlcGVhdChzdHJpbmcsIG4sIGd1YXJkKSB7CgkgICAgICBp
ZiAoKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBuLCBndWFyZCkgOiBuID09PSB1bmRl
ZmluZWQpKSB7CgkgICAgICAgIG4gPSAxOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgbiA9IHRv
SW50ZWdlcihuKTsKCSAgICAgIH0KCSAgICAgIHJldHVybiBiYXNlUmVwZWF0KHRvU3RyaW5nKHN0
cmluZyksIG4pOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogUmVwbGFjZXMgbWF0Y2hlcyBmb3Ig
YHBhdHRlcm5gIGluIGBzdHJpbmdgIHdpdGggYHJlcGxhY2VtZW50YC4KCSAgICAgKgoJICAgICAq
ICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvbgoJICAgICAqIFtgU3RyaW5nI3JlcGxh
Y2VgXShodHRwczovL21kbi5pby9TdHJpbmcvcmVwbGFjZSkuCgkgICAgICoKCSAgICAgKiBAc3Rh
dGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0
ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJp
bmcgdG8gbW9kaWZ5LgoJICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gcGF0dGVybiBUaGUg
cGF0dGVybiB0byByZXBsYWNlLgoJICAgICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSByZXBs
YWNlbWVudCBUaGUgbWF0Y2ggcmVwbGFjZW1lbnQuCgkgICAgICogQHJldHVybnMge3N0cmluZ30g
UmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiBfLnJlcGxhY2UoJ0hpIEZyZWQnLCAnRnJlZCcsICdCYXJuZXknKTsKCSAgICAgKiAvLyA9
PiAnSGkgQmFybmV5JwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHJlcGxhY2UoKSB7CgkgICAgICB2
YXIgYXJncyA9IGFyZ3VtZW50cywKCSAgICAgICAgICBzdHJpbmcgPSB0b1N0cmluZyhhcmdzWzBd
KTsKCgkgICAgICByZXR1cm4gYXJncy5sZW5ndGggPCAzID8gc3RyaW5nIDogc3RyaW5nLnJlcGxh
Y2UoYXJnc1sxXSwgYXJnc1syXSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDb252ZXJ0cyBg
c3RyaW5nYCB0bwoJICAgICAqIFtzbmFrZSBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9TbmFrZV9jYXNlKS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVy
T2YgXwoJICAgICAqIEBzaW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAg
KiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LgoJICAg
ICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNuYWtlIGNhc2VkIHN0cmluZy4KCSAg
ICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5zbmFrZUNhc2UoJ0ZvbyBCYXInKTsKCSAg
ICAgKiAvLyA9PiAnZm9vX2JhcicKCSAgICAgKgoJICAgICAqIF8uc25ha2VDYXNlKCdmb29CYXIn
KTsKCSAgICAgKiAvLyA9PiAnZm9vX2JhcicKCSAgICAgKgoJICAgICAqIF8uc25ha2VDYXNlKCct
LUZPTy1CQVItLScpOwoJICAgICAqIC8vID0+ICdmb29fYmFyJwoJICAgICAqLwoJICAgIHZhciBz
bmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgp
IHsKCSAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnXycgOiAnJykgKyB3b3JkLnRvTG93
ZXJDYXNlKCk7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIFNwbGl0cyBgc3RyaW5nYCBieSBg
c2VwYXJhdG9yYC4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNl
ZCBvbgoJICAgICAqIFtgU3RyaW5nI3NwbGl0YF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3NwbGl0
KS4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBzcGxpdC4KCSAgICAgKiBAcGFyYW0ge1JlZ0V4
cHxzdHJpbmd9IHNlcGFyYXRvciBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gc3BsaXQgYnkuCgkg
ICAgICogQHBhcmFtIHtudW1iZXJ9IFtsaW1pdF0gVGhlIGxlbmd0aCB0byB0cnVuY2F0ZSByZXN1
bHRzIHRvLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc3RyaW5nIHNlZ21l
bnRzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnNwbGl0KCdhLWItYycsICct
JywgMik7CgkgICAgICogLy8gPT4gWydhJywgJ2InXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHNw
bGl0KHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCkgewoJICAgICAgaWYgKGxpbWl0ICYmIHR5cGVv
ZiBsaW1pdCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIHNlcGFyYXRvciwg
bGltaXQpKSB7CgkgICAgICAgIHNlcGFyYXRvciA9IGxpbWl0ID0gdW5kZWZpbmVkOwoJICAgICAg
fQoJICAgICAgbGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX0FSUkFZX0xFTkdUSCA6
IGxpbWl0ID4+PiAwOwoJICAgICAgaWYgKCFsaW1pdCkgewoJICAgICAgICByZXR1cm4gW107Cgkg
ICAgICB9CgkgICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpOwoJICAgICAgaWYgKHN0cmlu
ZyAmJiAoCgkgICAgICAgICAgICB0eXBlb2Ygc2VwYXJhdG9yID09ICdzdHJpbmcnIHx8CgkgICAg
ICAgICAgICAoc2VwYXJhdG9yICE9IG51bGwgJiYgIWlzUmVnRXhwKHNlcGFyYXRvcikpCgkgICAg
ICAgICAgKSkgewoJICAgICAgICBzZXBhcmF0b3IgPSBiYXNlVG9TdHJpbmcoc2VwYXJhdG9yKTsK
CSAgICAgICAgaWYgKCFzZXBhcmF0b3IgJiYgaGFzVW5pY29kZShzdHJpbmcpKSB7CgkgICAgICAg
ICAgcmV0dXJuIGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHN0cmluZyksIDAsIGxpbWl0KTsKCSAg
ICAgICAgfQoJICAgICAgfQoJICAgICAgcmV0dXJuIHN0cmluZy5zcGxpdChzZXBhcmF0b3IsIGxp
bWl0KTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvCgkgICAg
ICogW3N0YXJ0IGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xldHRlcl9jYXNl
I1N0eWxpc3RpY19vcl9zcGVjaWFsaXNlZF91c2FnZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGlj
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4xLjAKCSAgICAgKiBAY2F0ZWdv
cnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcg
dG8gY29udmVydC4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdGFydCBj
YXNlZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uc3RhcnRDYXNl
KCctLWZvby1iYXItLScpOwoJICAgICAqIC8vID0+ICdGb28gQmFyJwoJICAgICAqCgkgICAgICog
Xy5zdGFydENhc2UoJ2Zvb0JhcicpOwoJICAgICAqIC8vID0+ICdGb28gQmFyJwoJICAgICAqCgkg
ICAgICogXy5zdGFydENhc2UoJ19fRk9PX0JBUl9fJyk7CgkgICAgICogLy8gPT4gJ0ZPTyBCQVIn
CgkgICAgICovCgkgICAgdmFyIHN0YXJ0Q2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24o
cmVzdWx0LCB3b3JkLCBpbmRleCkgewoJICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcg
JyA6ICcnKSArIHVwcGVyRmlyc3Qod29yZCk7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIENo
ZWNrcyBpZiBgc3RyaW5nYCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAz
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0
cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LgoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBb
dGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9
IFtwb3NpdGlvbj0wXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIGZyb20uCgkgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIGB0YXJn
ZXRgLAoJICAgICAqICBlbHNlIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAg
ICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2EnKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICoK
CSAgICAgKiBfLnN0YXJ0c1dpdGgoJ2FiYycsICdiJyk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAg
ICAgKgoJICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InLCAxKTsKCSAgICAgKiAvLyA9PiB0
cnVlCgkgICAgICovCgkgICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9z
aXRpb24pIHsKCSAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7CgkgICAgICBwb3NpdGlv
biA9IHBvc2l0aW9uID09IG51bGwKCSAgICAgICAgPyAwCgkgICAgICAgIDogYmFzZUNsYW1wKHRv
SW50ZWdlcihwb3NpdGlvbiksIDAsIHN0cmluZy5sZW5ndGgpOwoKCSAgICAgIHRhcmdldCA9IGJh
c2VUb1N0cmluZyh0YXJnZXQpOwoJICAgICAgcmV0dXJuIHN0cmluZy5zbGljZShwb3NpdGlvbiwg
cG9zaXRpb24gKyB0YXJnZXQubGVuZ3RoKSA9PSB0YXJnZXQ7CgkgICAgfQoKCSAgICAvKioKCSAg
ICAgKiBDcmVhdGVzIGEgY29tcGlsZWQgdGVtcGxhdGUgZnVuY3Rpb24gdGhhdCBjYW4gaW50ZXJw
b2xhdGUgZGF0YSBwcm9wZXJ0aWVzCgkgICAgICogaW4gImludGVycG9sYXRlIiBkZWxpbWl0ZXJz
LCBIVE1MLWVzY2FwZSBpbnRlcnBvbGF0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluCgkgICAgICogImVz
Y2FwZSIgZGVsaW1pdGVycywgYW5kIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiAiZXZhbHVhdGUiIGRl
bGltaXRlcnMuIERhdGEKCSAgICAgKiBwcm9wZXJ0aWVzIG1heSBiZSBhY2Nlc3NlZCBhcyBmcmVl
IHZhcmlhYmxlcyBpbiB0aGUgdGVtcGxhdGUuIElmIGEgc2V0dGluZwoJICAgICAqIG9iamVjdCBp
cyBnaXZlbiwgaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGBfLnRlbXBsYXRlU2V0dGluZ3NgIHZh
bHVlcy4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBJbiB0aGUgZGV2ZWxvcG1lbnQgYnVpbGQg
YF8udGVtcGxhdGVgIHV0aWxpemVzCgkgICAgICogW3NvdXJjZVVSTHNdKGh0dHA6Ly93d3cuaHRt
bDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL2RldmVsb3BlcnRvb2xzL3NvdXJjZW1hcHMvI3RvYy1z
b3VyY2V1cmwpCgkgICAgICogZm9yIGVhc2llciBkZWJ1Z2dpbmcuCgkgICAgICoKCSAgICAgKiBG
b3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwcmVjb21waWxpbmcgdGVtcGxhdGVzIHNlZQoJICAgICAq
IFtsb2Rhc2gncyBjdXN0b20gYnVpbGRzIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbG9kYXNoLmNv
bS9jdXN0b20tYnVpbGRzKS4KCSAgICAgKgoJICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9u
IENocm9tZSBleHRlbnNpb24gc2FuZGJveGVzIHNlZQoJICAgICAqIFtDaHJvbWUncyBleHRlbnNp
b25zIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZXh0ZW5zaW9u
cy9zYW5kYm94aW5nRXZhbCkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNpbmNl
IDAuMS4wCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nCgkgICAg
ICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSB0ZW1wbGF0ZSBzdHJpbmcuCgkgICAg
ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuCgkgICAg
ICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmVzY2FwZT1fLnRlbXBsYXRlU2V0dGluZ3MuZXNj
YXBlXQoJICAgICAqICBUaGUgSFRNTCAiZXNjYXBlIiBkZWxpbWl0ZXIuCgkgICAgICogQHBhcmFt
IHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV0K
CSAgICAgKiAgVGhlICJldmFsdWF0ZSIgZGVsaW1pdGVyLgoJICAgICAqIEBwYXJhbSB7T2JqZWN0
fSBbb3B0aW9ucy5pbXBvcnRzPV8udGVtcGxhdGVTZXR0aW5ncy5pbXBvcnRzXQoJICAgICAqICBB
biBvYmplY3QgdG8gaW1wb3J0IGludG8gdGhlIHRlbXBsYXRlIGFzIGZyZWUgdmFyaWFibGVzLgoJ
ICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5pbnRlcnBvbGF0ZT1fLnRlbXBsYXRlU2V0
dGluZ3MuaW50ZXJwb2xhdGVdCgkgICAgICogIFRoZSAiaW50ZXJwb2xhdGUiIGRlbGltaXRlci4K
CSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlVVJMPSdsb2Rhc2gudGVtcGxh
dGVTb3VyY2VzW25dJ10KCSAgICAgKiAgVGhlIHNvdXJjZVVSTCBvZiB0aGUgY29tcGlsZWQgdGVt
cGxhdGUuCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnZhcmlhYmxlPSdvYmonXQoJ
ICAgICAqICBUaGUgZGF0YSBvYmplY3QgdmFyaWFibGUgbmFtZS4KCSAgICAgKiBAcGFyYW0tIHtP
YmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlr
ZSBgXy5tYXBgLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY29tcGls
ZWQgdGVtcGxhdGUgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIC8v
IFVzZSB0aGUgImludGVycG9sYXRlIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVt
cGxhdGUuCgkgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIg
JT4hJyk7CgkgICAgICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTsKCSAgICAgKiAvLyA9
PiAnaGVsbG8gZnJlZCEnCgkgICAgICoKCSAgICAgKiAvLyBVc2UgdGhlIEhUTUwgImVzY2FwZSIg
ZGVsaW1pdGVyIHRvIGVzY2FwZSBkYXRhIHByb3BlcnR5IHZhbHVlcy4KCSAgICAgKiB2YXIgY29t
cGlsZWQgPSBfLnRlbXBsYXRlKCc8Yj48JS0gdmFsdWUgJT48L2I+Jyk7CgkgICAgICogY29tcGls
ZWQoeyAndmFsdWUnOiAnPHNjcmlwdD4nIH0pOwoJICAgICAqIC8vID0+ICc8Yj4mbHQ7c2NyaXB0
Jmd0OzwvYj4nCgkgICAgICoKCSAgICAgKiAvLyBVc2UgdGhlICJldmFsdWF0ZSIgZGVsaW1pdGVy
IHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBhbmQgZ2VuZXJhdGUgSFRNTC4KCSAgICAgKiB2YXIgY29t
cGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBfLmZvckVhY2godXNlcnMsIGZ1bmN0aW9uKHVzZXIpIHsg
JT48bGk+PCUtIHVzZXIgJT48L2xpPjwlIH0pOyAlPicpOwoJICAgICAqIGNvbXBpbGVkKHsgJ3Vz
ZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pOwoJICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+
PGxpPmJhcm5leTwvbGk+JwoJICAgICAqCgkgICAgICogLy8gVXNlIHRoZSBpbnRlcm5hbCBgcHJp
bnRgIGZ1bmN0aW9uIGluICJldmFsdWF0ZSIgZGVsaW1pdGVycy4KCSAgICAgKiB2YXIgY29tcGls
ZWQgPSBfLnRlbXBsYXRlKCc8JSBwcmludCgiaGVsbG8gIiArIHVzZXIpOyAlPiEnKTsKCSAgICAg
KiBjb21waWxlZCh7ICd1c2VyJzogJ2Jhcm5leScgfSk7CgkgICAgICogLy8gPT4gJ2hlbGxvIGJh
cm5leSEnCgkgICAgICoKCSAgICAgKiAvLyBVc2UgdGhlIEVTIHRlbXBsYXRlIGxpdGVyYWwgZGVs
aW1pdGVyIGFzIGFuICJpbnRlcnBvbGF0ZSIgZGVsaW1pdGVyLgoJICAgICAqIC8vIERpc2FibGUg
c3VwcG9ydCBieSByZXBsYWNpbmcgdGhlICJpbnRlcnBvbGF0ZSIgZGVsaW1pdGVyLgoJICAgICAq
IHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvICR7IHVzZXIgfSEnKTsKCSAgICAgKiBj
b21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pOwoJICAgICAqIC8vID0+ICdoZWxsbyBwZWJi
bGVzIScKCSAgICAgKgoJICAgICAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0
ZXJzIGFzIHBsYWluIHRleHQuCgkgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9
ICJcXDwlLSB2YWx1ZSAlXFw+IiAlPicpOwoJICAgICAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJ2ln
bm9yZWQnIH0pOwoJICAgICAqIC8vID0+ICc8JS0gdmFsdWUgJT4nCgkgICAgICoKCSAgICAgKiAv
LyBVc2UgdGhlIGBpbXBvcnRzYCBvcHRpb24gdG8gaW1wb3J0IGBqUXVlcnlgIGFzIGBqcWAuCgkg
ICAgICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxs
aT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JzsKCSAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRl
bXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pOwoJICAgICAqIGNv
bXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pOwoJICAgICAqIC8vID0+ICc8
bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+JwoJICAgICAqCgkgICAgICogLy8gVXNlIHRoZSBg
c291cmNlVVJMYCBvcHRpb24gdG8gc3BlY2lmeSBhIGN1c3RvbSBzb3VyY2VVUkwgZm9yIHRoZSB0
ZW1wbGF0ZS4KCSAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNl
ciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7CgkgICAgICog
Y29tcGlsZWQoZGF0YSk7CgkgICAgICogLy8gPT4gRmluZCB0aGUgc291cmNlIG9mICJncmVldGlu
Zy5qc3QiIHVuZGVyIHRoZSBTb3VyY2VzIHRhYiBvciBSZXNvdXJjZXMgcGFuZWwgb2YgdGhlIHdl
YiBpbnNwZWN0b3IuCgkgICAgICoKCSAgICAgKiAvLyBVc2UgdGhlIGB2YXJpYWJsZWAgb3B0aW9u
IHRvIGVuc3VyZSBhIHdpdGgtc3RhdGVtZW50IGlzbid0IHVzZWQgaW4gdGhlIGNvbXBpbGVkIHRl
bXBsYXRlLgoJICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hpIDwlPSBkYXRhLnVz
ZXIgJT4hJywgeyAndmFyaWFibGUnOiAnZGF0YScgfSk7CgkgICAgICogY29tcGlsZWQuc291cmNl
OwoJICAgICAqIC8vID0+IGZ1bmN0aW9uKGRhdGEpIHsKCSAgICAgKiAvLyAgIHZhciBfX3QsIF9f
cCA9ICcnOwoJICAgICAqIC8vICAgX19wICs9ICdoaSAnICsgKChfX3QgPSAoIGRhdGEudXNlciAp
KSA9PSBudWxsID8gJycgOiBfX3QpICsgJyEnOwoJICAgICAqIC8vICAgcmV0dXJuIF9fcDsKCSAg
ICAgKiAvLyB9CgkgICAgICoKCSAgICAgKiAvLyBVc2UgY3VzdG9tIHRlbXBsYXRlIGRlbGltaXRl
cnMuCgkgICAgICogXy50ZW1wbGF0ZVNldHRpbmdzLmludGVycG9sYXRlID0gL3t7KFtcc1xTXSs/
KX19L2c7CgkgICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8ge3sgdXNlciB9
fSEnKTsKCSAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ211c3RhY2hlJyB9KTsKCSAgICAgKiAv
LyA9PiAnaGVsbG8gbXVzdGFjaGUhJwoJICAgICAqCgkgICAgICogLy8gVXNlIHRoZSBgc291cmNl
YCBwcm9wZXJ0eSB0byBpbmxpbmUgY29tcGlsZWQgdGVtcGxhdGVzIGZvciBtZWFuaW5nZnVsCgkg
ICAgICogLy8gbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIGFuZCBzdGFjayB0cmFjZXMu
CgkgICAgICogZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ2pzdC5q
cycpLCAnXAoJICAgICAqICAgdmFyIEpTVCA9IHtcCgkgICAgICogICAgICJtYWluIjogJyArIF8u
dGVtcGxhdGUobWFpblRleHQpLnNvdXJjZSArICdcCgkgICAgICogICB9O1wKCSAgICAgKiAnKTsK
CSAgICAgKi8KCSAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsIG9wdGlvbnMsIGd1YXJkKSB7
CgkgICAgICAvLyBCYXNlZCBvbiBKb2huIFJlc2lnJ3MgYHRtcGxgIGltcGxlbWVudGF0aW9uCgkg
ICAgICAvLyAoaHR0cDovL2Vqb2huLm9yZy9ibG9nL2phdmFzY3JpcHQtbWljcm8tdGVtcGxhdGlu
Zy8pCgkgICAgICAvLyBhbmQgTGF1cmEgRG9rdG9yb3ZhJ3MgZG9ULmpzIChodHRwczovL2dpdGh1
Yi5jb20vb2xhZG8vZG9UKS4KCSAgICAgIHZhciBzZXR0aW5ncyA9IGxvZGFzaC50ZW1wbGF0ZVNl
dHRpbmdzOwoKCSAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG9wdGlv
bnMsIGd1YXJkKSkgewoJICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkOwoJICAgICAgfQoJICAg
ICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTsKCSAgICAgIG9wdGlvbnMgPSBhc3NpZ25Jbldp
dGgoe30sIG9wdGlvbnMsIHNldHRpbmdzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKTsKCgkgICAg
ICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5n
cy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSwKCSAgICAgICAgICBpbXBvcnRzS2V5
cyA9IGtleXMoaW1wb3J0cyksCgkgICAgICAgICAgaW1wb3J0c1ZhbHVlcyA9IGJhc2VWYWx1ZXMo
aW1wb3J0cywgaW1wb3J0c0tleXMpOwoKCSAgICAgIHZhciBpc0VzY2FwaW5nLAoJICAgICAgICAg
IGlzRXZhbHVhdGluZywKCSAgICAgICAgICBpbmRleCA9IDAsCgkgICAgICAgICAgaW50ZXJwb2xh
dGUgPSBvcHRpb25zLmludGVycG9sYXRlIHx8IHJlTm9NYXRjaCwKCSAgICAgICAgICBzb3VyY2Ug
PSAiX19wICs9ICciOwoKCSAgICAgIC8vIENvbXBpbGUgdGhlIHJlZ2V4cCB0byBtYXRjaCBlYWNo
IGRlbGltaXRlci4KCSAgICAgIHZhciByZURlbGltaXRlcnMgPSBSZWdFeHAoCgkgICAgICAgIChv
cHRpb25zLmVzY2FwZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArCgkgICAgICAgIGludGVy
cG9sYXRlLnNvdXJjZSArICd8JyArCgkgICAgICAgIChpbnRlcnBvbGF0ZSA9PT0gcmVJbnRlcnBv
bGF0ZSA/IHJlRXNUZW1wbGF0ZSA6IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICsKCSAgICAgICAg
KG9wdGlvbnMuZXZhbHVhdGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCQnCgkgICAgICAsICdn
Jyk7CgoJICAgICAgLy8gVXNlIGEgc291cmNlVVJMIGZvciBlYXNpZXIgZGVidWdnaW5nLgoJICAg
ICAgLy8gVGhlIHNvdXJjZVVSTCBnZXRzIGluamVjdGVkIGludG8gdGhlIHNvdXJjZSB0aGF0J3Mg
ZXZhbC1lZCwgc28gYmUgY2FyZWZ1bAoJICAgICAgLy8gd2l0aCBsb29rdXAgKGluIGNhc2Ugb2Yg
ZS5nLiBwcm90b3R5cGUgcG9sbHV0aW9uKSwgYW5kIHN0cmlwIG5ld2xpbmVzIGlmIGFueS4KCSAg
ICAgIC8vIEEgbmV3bGluZSB3b3VsZG4ndCBiZSBhIHZhbGlkIHNvdXJjZVVSTCBhbnl3YXksIGFu
ZCBpdCdkIGVuYWJsZSBjb2RlIGluamVjdGlvbi4KCSAgICAgIHZhciBzb3VyY2VVUkwgPSAnLy8j
IHNvdXJjZVVSTD0nICsKCSAgICAgICAgKGhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3Nv
dXJjZVVSTCcpCgkgICAgICAgICAgPyAob3B0aW9ucy5zb3VyY2VVUkwgKyAnJykucmVwbGFjZSgv
W1xyXG5dL2csICcgJykKCSAgICAgICAgICA6ICgnbG9kYXNoLnRlbXBsYXRlU291cmNlc1snICsg
KCsrdGVtcGxhdGVDb3VudGVyKSArICddJykKCSAgICAgICAgKSArICdcbic7CgoJICAgICAgc3Ry
aW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGlu
dGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7
CgkgICAgICAgIGludGVycG9sYXRlVmFsdWUgfHwgKGludGVycG9sYXRlVmFsdWUgPSBlc1RlbXBs
YXRlVmFsdWUpOwoKCSAgICAgICAgLy8gRXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBjYW4ndCBiZSBp
bmNsdWRlZCBpbiBzdHJpbmcgbGl0ZXJhbHMuCgkgICAgICAgIHNvdXJjZSArPSBzdHJpbmcuc2xp
Y2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShyZVVuZXNjYXBlZFN0cmluZywgZXNjYXBlU3RyaW5n
Q2hhcik7CgoJICAgICAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy4KCSAg
ICAgICAgaWYgKGVzY2FwZVZhbHVlKSB7CgkgICAgICAgICAgaXNFc2NhcGluZyA9IHRydWU7Cgkg
ICAgICAgICAgc291cmNlICs9ICInICtcbl9fZSgiICsgZXNjYXBlVmFsdWUgKyAiKSArXG4nIjsK
CSAgICAgICAgfQoJICAgICAgICBpZiAoZXZhbHVhdGVWYWx1ZSkgewoJICAgICAgICAgIGlzRXZh
bHVhdGluZyA9IHRydWU7CgkgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlVmFs
dWUgKyAiO1xuX19wICs9ICciOwoJICAgICAgICB9CgkgICAgICAgIGlmIChpbnRlcnBvbGF0ZVZh
bHVlKSB7CgkgICAgICAgICAgc291cmNlICs9ICInICtcbigoX190ID0gKCIgKyBpbnRlcnBvbGF0
ZVZhbHVlICsgIikpID09IG51bGwgPyAnJyA6IF9fdCkgK1xuJyI7CgkgICAgICAgIH0KCSAgICAg
ICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CgoJICAgICAgICAvLyBUaGUgSlMgZW5n
aW5lIGVtYmVkZGVkIGluIEFkb2JlIHByb2R1Y3RzIG5lZWRzIGBtYXRjaGAgcmV0dXJuZWQgaW4K
CSAgICAgICAgLy8gb3JkZXIgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBgb2Zmc2V0YCB2YWx1ZS4K
CSAgICAgICAgcmV0dXJuIG1hdGNoOwoJICAgICAgfSk7CgoJICAgICAgc291cmNlICs9ICInO1xu
IjsKCgkgICAgICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgt
c3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkCgkgICAgICAvLyBjb2RlIHRvIGFkZCB0aGUg
ZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uCgkgICAgICAvLyBMaWtl
IHdpdGggc291cmNlVVJMLCB3ZSB0YWtlIGNhcmUgdG8gbm90IGNoZWNrIHRoZSBvcHRpb24ncyBw
cm90b3R5cGUsCgkgICAgICAvLyBhcyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgYSBjb2RlIGluamVj
dGlvbiB2ZWN0b3IuCgkgICAgICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9w
dGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7CgkgICAgICBpZiAoIXZhcmlh
YmxlKSB7CgkgICAgICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcbicgKyBzb3VyY2UgKyAnXG59
XG4nOwoJICAgICAgfQoJICAgICAgLy8gQ2xlYW51cCBjb2RlIGJ5IHN0cmlwcGluZyBlbXB0eSBz
dHJpbmdzLgoJICAgICAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJl
RW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpCgkgICAgICAgIC5yZXBsYWNlKHJlRW1w
dHlTdHJpbmdNaWRkbGUsICckMScpCgkgICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFp
bGluZywgJyQxOycpOwoKCSAgICAgIC8vIEZyYW1lIGNvZGUgYXMgdGhlIGZ1bmN0aW9uIGJvZHku
CgkgICAgICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7
XG4nICsKCSAgICAgICAgKHZhcmlhYmxlCgkgICAgICAgICAgPyAnJwoJICAgICAgICAgIDogJ29i
aiB8fCAob2JqID0ge30pO1xuJwoJICAgICAgICApICsKCSAgICAgICAgInZhciBfX3QsIF9fcCA9
ICcnIiArCgkgICAgICAgIChpc0VzY2FwaW5nCgkgICAgICAgICAgID8gJywgX19lID0gXy5lc2Nh
cGUnCgkgICAgICAgICAgIDogJycKCSAgICAgICAgKSArCgkgICAgICAgIChpc0V2YWx1YXRpbmcK
CSAgICAgICAgICA/ICcsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xuJyArCgkgICAgICAg
ICAgICAiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9
XG4iCgkgICAgICAgICAgOiAnO1xuJwoJICAgICAgICApICsKCSAgICAgICAgc291cmNlICsKCSAg
ICAgICAgJ3JldHVybiBfX3Bcbn0nOwoKCSAgICAgIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0
aW9uKCkgewoJICAgICAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCAr
ICdyZXR1cm4gJyArIHNvdXJjZSkKCSAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRz
VmFsdWVzKTsKCSAgICAgIH0pOwoKCSAgICAgIC8vIFByb3ZpZGUgdGhlIGNvbXBpbGVkIGZ1bmN0
aW9uJ3Mgc291cmNlIGJ5IGl0cyBgdG9TdHJpbmdgIG1ldGhvZCBvcgoJICAgICAgLy8gdGhlIGBz
b3VyY2VgIHByb3BlcnR5IGFzIGEgY29udmVuaWVuY2UgZm9yIGlubGluaW5nIGNvbXBpbGVkIHRl
bXBsYXRlcy4KCSAgICAgIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7CgkgICAgICBpZiAoaXNFcnJv
cihyZXN1bHQpKSB7CgkgICAgICAgIHRocm93IHJlc3VsdDsKCSAgICAgIH0KCSAgICAgIHJldHVy
biByZXN1bHQ7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMg
YSB3aG9sZSwgdG8gbG93ZXIgY2FzZSBqdXN0IGxpa2UKCSAgICAgKiBbU3RyaW5nI3RvTG93ZXJD
YXNlXShodHRwczovL21kbi5pby90b0xvd2VyQ2FzZSkuCgkgICAgICoKCSAgICAgKiBAc3RhdGlj
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdv
cnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcg
dG8gY29udmVydC4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBsb3dlciBj
YXNlZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8udG9Mb3dlcign
LS1Gb28tQmFyLS0nKTsKCSAgICAgKiAvLyA9PiAnLS1mb28tYmFyLS0nCgkgICAgICoKCSAgICAg
KiBfLnRvTG93ZXIoJ2Zvb0JhcicpOwoJICAgICAqIC8vID0+ICdmb29iYXInCgkgICAgICoKCSAg
ICAgKiBfLnRvTG93ZXIoJ19fRk9PX0JBUl9fJyk7CgkgICAgICogLy8gPT4gJ19fZm9vX2Jhcl9f
JwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHRvTG93ZXIodmFsdWUpIHsKCSAgICAgIHJldHVybiB0
b1N0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENv
bnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZQoJICAg
ICAqIFtTdHJpbmcjdG9VcHBlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvVXBwZXJDYXNlKS4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0
cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9
IFJldHVybnMgdGhlIHVwcGVyIGNhc2VkIHN0cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAq
CgkgICAgICogXy50b1VwcGVyKCctLWZvby1iYXItLScpOwoJICAgICAqIC8vID0+ICctLUZPTy1C
QVItLScKCSAgICAgKgoJICAgICAqIF8udG9VcHBlcignZm9vQmFyJyk7CgkgICAgICogLy8gPT4g
J0ZPT0JBUicKCSAgICAgKgoJICAgICAqIF8udG9VcHBlcignX19mb29fYmFyX18nKTsKCSAgICAg
KiAvLyA9PiAnX19GT09fQkFSX18nCgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9VcHBlcih2YWx1
ZSkgewoJICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpOwoJICAgIH0K
CgkgICAgLyoqCgkgICAgICogUmVtb3ZlcyBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNl
IG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuCgkgICAgICoKCSAgICAgKiBA
c3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4wLjAKCSAgICAgKiBA
Y2F0ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBz
dHJpbmcgdG8gdHJpbS4KCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2Vd
IFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uCgkgICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRd
IEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC4KCSAg
ICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy4KCSAgICAg
KiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy50cmltKCcgIGFiYyAgJyk7CgkgICAgICogLy8g
PT4gJ2FiYycKCSAgICAgKgoJICAgICAqIF8udHJpbSgnLV8tYWJjLV8tJywgJ18tJyk7CgkgICAg
ICogLy8gPT4gJ2FiYycKCSAgICAgKgoJICAgICAqIF8ubWFwKFsnICBmb28gICcsICcgIGJhciAg
J10sIF8udHJpbSk7CgkgICAgICogLy8gPT4gWydmb28nLCAnYmFyJ10KCSAgICAgKi8KCSAgICBm
dW5jdGlvbiB0cmltKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7CgkgICAgICBzdHJpbmcgPSB0b1N0
cmluZyhzdHJpbmcpOwoJICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hhcnMgPT09IHVu
ZGVmaW5lZCkpIHsKCSAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJpbSwgJycpOwoJ
ICAgICAgfQoJICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFy
cykpKSB7CgkgICAgICAgIHJldHVybiBzdHJpbmc7CgkgICAgICB9CgkgICAgICB2YXIgc3RyU3lt
Ym9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwKCSAgICAgICAgICBjaHJTeW1ib2xzID0gc3Ry
aW5nVG9BcnJheShjaGFycyksCgkgICAgICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3Ry
U3ltYm9scywgY2hyU3ltYm9scyksCgkgICAgICAgICAgZW5kID0gY2hhcnNFbmRJbmRleChzdHJT
eW1ib2xzLCBjaHJTeW1ib2xzKSArIDE7CgoJICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1i
b2xzLCBzdGFydCwgZW5kKS5qb2luKCcnKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFJlbW92
ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJp
bmdgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICog
QHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IFN0cmluZwoJICAgICAqIEBwYXJhbSB7c3Ry
aW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uCgkgICAgICogQHBhcmFtIHtzdHJp
bmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLgoJICAgICAqIEBw
YXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0
aG9kcyBsaWtlIGBfLm1hcGAuCgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUg
dHJpbW1lZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8udHJpbUVu
ZCgnICBhYmMgICcpOwoJICAgICAqIC8vID0+ICcgIGFiYycKCSAgICAgKgoJICAgICAqIF8udHJp
bUVuZCgnLV8tYWJjLV8tJywgJ18tJyk7CgkgICAgICogLy8gPT4gJy1fLWFiYycKCSAgICAgKi8K
CSAgICBmdW5jdGlvbiB0cmltRW5kKHN0cmluZywgY2hhcnMsIGd1YXJkKSB7CgkgICAgICBzdHJp
bmcgPSB0b1N0cmluZyhzdHJpbmcpOwoJICAgICAgaWYgKHN0cmluZyAmJiAoZ3VhcmQgfHwgY2hh
cnMgPT09IHVuZGVmaW5lZCkpIHsKCSAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVHJp
bUVuZCwgJycpOwoJICAgICAgfQoJICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VU
b1N0cmluZyhjaGFycykpKSB7CgkgICAgICAgIHJldHVybiBzdHJpbmc7CgkgICAgICB9CgkgICAg
ICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSwKCSAgICAgICAgICBlbmQg
PSBjaGFyc0VuZEluZGV4KHN0clN5bWJvbHMsIHN0cmluZ1RvQXJyYXkoY2hhcnMpKSArIDE7CgoJ
ICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpOwoJICAg
IH0KCgkgICAgLyoqCgkgICAgICogUmVtb3ZlcyBsZWFkaW5nIHdoaXRlc3BhY2Ugb3Igc3BlY2lm
aWVkIGNoYXJhY3RlcnMgZnJvbSBgc3RyaW5nYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAg
ICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBT
dHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byB0
cmltLgoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9d2hpdGVzcGFjZV0gVGhlIGNoYXJh
Y3RlcnMgdG8gdHJpbS4KCSAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1
c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLgoJICAgICAqIEByZXR1
cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLgoJICAgICAqIEBleGFtcGxl
CgkgICAgICoKCSAgICAgKiBfLnRyaW1TdGFydCgnICBhYmMgICcpOwoJICAgICAqIC8vID0+ICdh
YmMgICcKCSAgICAgKgoJICAgICAqIF8udHJpbVN0YXJ0KCctXy1hYmMtXy0nLCAnXy0nKTsKCSAg
ICAgKiAvLyA9PiAnYWJjLV8tJwoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHRyaW1TdGFydChzdHJp
bmcsIGNoYXJzLCBndWFyZCkgewoJICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTsKCSAg
ICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7CgkgICAg
ICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVRyaW1TdGFydCwgJycpOwoJICAgICAgfQoJICAg
ICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7CgkgICAg
ICAgIHJldHVybiBzdHJpbmc7CgkgICAgICB9CgkgICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmlu
Z1RvQXJyYXkoc3RyaW5nKSwKCSAgICAgICAgICBzdGFydCA9IGNoYXJzU3RhcnRJbmRleChzdHJT
eW1ib2xzLCBzdHJpbmdUb0FycmF5KGNoYXJzKSk7CgoJICAgICAgcmV0dXJuIGNhc3RTbGljZShz
dHJTeW1ib2xzLCBzdGFydCkuam9pbignJyk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBUcnVu
Y2F0ZXMgYHN0cmluZ2AgaWYgaXQncyBsb25nZXIgdGhhbiB0aGUgZ2l2ZW4gbWF4aW11bSBzdHJp
bmcgbGVuZ3RoLgoJICAgICAqIFRoZSBsYXN0IGNoYXJhY3RlcnMgb2YgdGhlIHRydW5jYXRlZCBz
dHJpbmcgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG9taXNzaW9uCgkgICAgICogc3RyaW5nIHdoaWNo
IGRlZmF1bHRzIHRvICIuLi4iLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1i
ZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IFN0cmluZwoJICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLgoJ
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LgoJ
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5sZW5ndGg9MzBdIFRoZSBtYXhpbXVtIHN0
cmluZyBsZW5ndGguCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScu
Li4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC4KCSAgICAgKiBAcGFy
YW0ge1JlZ0V4cHxzdHJpbmd9IFtvcHRpb25zLnNlcGFyYXRvcl0gVGhlIHNlcGFyYXRvciBwYXR0
ZXJuIHRvIHRydW5jYXRlIHRvLgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhl
IHRydW5jYXRlZCBzdHJpbmcuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8udHJ1
bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nKTsKCSAgICAgKiAvLyA9PiAn
aGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJwoJICAgICAqCgkgICAgICogXy50cnVuY2F0
ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHsKCSAgICAgKiAgICdsZW5ndGgn
OiAyNCwKCSAgICAgKiAgICdzZXBhcmF0b3InOiAnICcKCSAgICAgKiB9KTsKCSAgICAgKiAvLyA9
PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLicKCSAgICAgKgoJICAgICAqIF8udHJ1bmNhdGUoJ2hp
LWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7CgkgICAgICogICAnbGVuZ3RoJzogMjQs
CgkgICAgICogICAnc2VwYXJhdG9yJzogLyw/ICsvCgkgICAgICogfSk7CgkgICAgICogLy8gPT4g
J2hpLWRpZGRseS1obyB0aGVyZS4uLicKCSAgICAgKgoJICAgICAqIF8udHJ1bmNhdGUoJ2hpLWRp
ZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7CgkgICAgICogICAnb21pc3Npb24nOiAnIFsu
Li5dJwoJICAgICAqIH0pOwoJICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWcg
Wy4uLl0nCgkgICAgICovCgkgICAgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyaW5nLCBvcHRpb25zKSB7
CgkgICAgICB2YXIgbGVuZ3RoID0gREVGQVVMVF9UUlVOQ19MRU5HVEgsCgkgICAgICAgICAgb21p
c3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OOwoKCSAgICAgIGlmIChpc09iamVjdChvcHRp
b25zKSkgewoJICAgICAgICB2YXIgc2VwYXJhdG9yID0gJ3NlcGFyYXRvcicgaW4gb3B0aW9ucyA/
IG9wdGlvbnMuc2VwYXJhdG9yIDogc2VwYXJhdG9yOwoJICAgICAgICBsZW5ndGggPSAnbGVuZ3Ro
JyBpbiBvcHRpb25zID8gdG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKSA6IGxlbmd0aDsKCSAgICAg
ICAgb21pc3Npb24gPSAnb21pc3Npb24nIGluIG9wdGlvbnMgPyBiYXNlVG9TdHJpbmcob3B0aW9u
cy5vbWlzc2lvbikgOiBvbWlzc2lvbjsKCSAgICAgIH0KCSAgICAgIHN0cmluZyA9IHRvU3RyaW5n
KHN0cmluZyk7CgoJICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7CgkgICAgICBp
ZiAoaGFzVW5pY29kZShzdHJpbmcpKSB7CgkgICAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5n
VG9BcnJheShzdHJpbmcpOwoJICAgICAgICBzdHJMZW5ndGggPSBzdHJTeW1ib2xzLmxlbmd0aDsK
CSAgICAgIH0KCSAgICAgIGlmIChsZW5ndGggPj0gc3RyTGVuZ3RoKSB7CgkgICAgICAgIHJldHVy
biBzdHJpbmc7CgkgICAgICB9CgkgICAgICB2YXIgZW5kID0gbGVuZ3RoIC0gc3RyaW5nU2l6ZShv
bWlzc2lvbik7CgkgICAgICBpZiAoZW5kIDwgMSkgewoJICAgICAgICByZXR1cm4gb21pc3Npb247
CgkgICAgICB9CgkgICAgICB2YXIgcmVzdWx0ID0gc3RyU3ltYm9scwoJICAgICAgICA/IGNhc3RT
bGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpCgkgICAgICAgIDogc3RyaW5nLnNsaWNl
KDAsIGVuZCk7CgoJICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7CgkgICAgICAg
IHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjsKCSAgICAgIH0KCSAgICAgIGlmIChzdHJTeW1ib2xz
KSB7CgkgICAgICAgIGVuZCArPSAocmVzdWx0Lmxlbmd0aCAtIGVuZCk7CgkgICAgICB9CgkgICAg
ICBpZiAoaXNSZWdFeHAoc2VwYXJhdG9yKSkgewoJICAgICAgICBpZiAoc3RyaW5nLnNsaWNlKGVu
ZCkuc2VhcmNoKHNlcGFyYXRvcikpIHsKCSAgICAgICAgICB2YXIgbWF0Y2gsCgkgICAgICAgICAg
ICAgIHN1YnN0cmluZyA9IHJlc3VsdDsKCgkgICAgICAgICAgaWYgKCFzZXBhcmF0b3IuZ2xvYmFs
KSB7CgkgICAgICAgICAgICBzZXBhcmF0b3IgPSBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgdG9T
dHJpbmcocmVGbGFncy5leGVjKHNlcGFyYXRvcikpICsgJ2cnKTsKCSAgICAgICAgICB9CgkgICAg
ICAgICAgc2VwYXJhdG9yLmxhc3RJbmRleCA9IDA7CgkgICAgICAgICAgd2hpbGUgKChtYXRjaCA9
IHNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpKSB7CgkgICAgICAgICAgICB2YXIgbmV3RW5kID0g
bWF0Y2guaW5kZXg7CgkgICAgICAgICAgfQoJICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGlj
ZSgwLCBuZXdFbmQgPT09IHVuZGVmaW5lZCA/IGVuZCA6IG5ld0VuZCk7CgkgICAgICAgIH0KCSAg
ICAgIH0gZWxzZSBpZiAoc3RyaW5nLmluZGV4T2YoYmFzZVRvU3RyaW5nKHNlcGFyYXRvciksIGVu
ZCkgIT0gZW5kKSB7CgkgICAgICAgIHZhciBpbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZihzZXBh
cmF0b3IpOwoJICAgICAgICBpZiAoaW5kZXggPiAtMSkgewoJICAgICAgICAgIHJlc3VsdCA9IHJl
c3VsdC5zbGljZSgwLCBpbmRleCk7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAgIHJldHVybiBy
ZXN1bHQgKyBvbWlzc2lvbjsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoZSBpbnZlcnNlIG9m
IGBfLmVzY2FwZWA7IHRoaXMgbWV0aG9kIGNvbnZlcnRzIHRoZSBIVE1MIGVudGl0aWVzCgkgICAg
ICogYCZhbXA7YCwgYCZsdDtgLCBgJmd0O2AsIGAmcXVvdDtgLCBhbmQgYCYjMzk7YCBpbiBgc3Ry
aW5nYCB0bwoJICAgICAqIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy4KCSAgICAgKgoJ
ICAgICAqICoqTm90ZToqKiBObyBvdGhlciBIVE1MIGVudGl0aWVzIGFyZSB1bmVzY2FwZWQuIFRv
IHVuZXNjYXBlIGFkZGl0aW9uYWwKCSAgICAgKiBIVE1MIGVudGl0aWVzIHVzZSBhIHRoaXJkLXBh
cnR5IGxpYnJhcnkgbGlrZSBbX2hlX10oaHR0cHM6Ly9tdGhzLmJlL2hlKS4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAwLjYuMAoJICAg
ICAqIEBjYXRlZ29yeSBTdHJpbmcKCSAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10g
VGhlIHN0cmluZyB0byB1bmVzY2FwZS4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5z
IHRoZSB1bmVzY2FwZWQgc3RyaW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBf
LnVuZXNjYXBlKCdmcmVkLCBiYXJuZXksICZhbXA7IHBlYmJsZXMnKTsKCSAgICAgKiAvLyA9PiAn
ZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnCgkgICAgICovCgkgICAgZnVuY3Rpb24gdW5lc2NhcGUo
c3RyaW5nKSB7CgkgICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpOwoJICAgICAgcmV0dXJu
IChzdHJpbmcgJiYgcmVIYXNFc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpCgkgICAgICAgID8gc3Ry
aW5nLnJlcGxhY2UocmVFc2NhcGVkSHRtbCwgdW5lc2NhcGVIdG1sQ2hhcikKCSAgICAgICAgOiBz
dHJpbmc7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3Bh
Y2Ugc2VwYXJhdGVkIHdvcmRzLCB0byB1cHBlciBjYXNlLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVn
b3J5IFN0cmluZwoJICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5n
IHRvIGNvbnZlcnQuCgkgICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdXBwZXIg
Y2FzZWQgc3RyaW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnVwcGVyQ2Fz
ZSgnLS1mb28tYmFyJyk7CgkgICAgICogLy8gPT4gJ0ZPTyBCQVInCgkgICAgICoKCSAgICAgKiBf
LnVwcGVyQ2FzZSgnZm9vQmFyJyk7CgkgICAgICogLy8gPT4gJ0ZPTyBCQVInCgkgICAgICoKCSAg
ICAgKiBfLnVwcGVyQ2FzZSgnX19mb29fYmFyX18nKTsKCSAgICAgKiAvLyA9PiAnRk9PIEJBUicK
CSAgICAgKi8KCSAgICB2YXIgdXBwZXJDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihy
ZXN1bHQsIHdvcmQsIGluZGV4KSB7CgkgICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAn
IDogJycpICsgd29yZC50b1VwcGVyQ2FzZSgpOwoJICAgIH0pOwoKCSAgICAvKioKCSAgICAgKiBD
b252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuCgkg
ICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2Ug
NC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtzdHJpbmd9IFtz
dHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC4KCSAgICAgKiBAcmV0dXJucyB7c3RyaW5n
fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoK
CSAgICAgKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTsKCSAgICAgKiAvLyA9PiAnRnJlZCcKCSAgICAg
KgoJICAgICAqIF8udXBwZXJGaXJzdCgnRlJFRCcpOwoJICAgICAqIC8vID0+ICdGUkVEJwoJICAg
ICAqLwoJICAgIHZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScp
OwoKCSAgICAvKioKCSAgICAgKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMg
d29yZHMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgMy4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nCgkgICAgICogQHBhcmFtIHtz
dHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC4KCSAgICAgKiBAcGFyYW0g
e1JlZ0V4cHxzdHJpbmd9IFtwYXR0ZXJuXSBUaGUgcGF0dGVybiB0byBtYXRjaCB3b3Jkcy4KCSAg
ICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUg
Zm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJu
cyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAq
IF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7CgkgICAgICogLy8gPT4gWydmcmVk
JywgJ2Jhcm5leScsICdwZWJibGVzJ10KCSAgICAgKgoJICAgICAqIF8ud29yZHMoJ2ZyZWQsIGJh
cm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTsKCSAgICAgKiAvLyA9PiBbJ2ZyZWQnLCAnYmFy
bmV5JywgJyYnLCAncGViYmxlcyddCgkgICAgICovCgkgICAgZnVuY3Rpb24gd29yZHMoc3RyaW5n
LCBwYXR0ZXJuLCBndWFyZCkgewoJICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTsKCSAg
ICAgIHBhdHRlcm4gPSBndWFyZCA/IHVuZGVmaW5lZCA6IHBhdHRlcm47CgoJICAgICAgaWYgKHBh
dHRlcm4gPT09IHVuZGVmaW5lZCkgewoJICAgICAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3Ry
aW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpOwoJICAgICAg
fQoJICAgICAgcmV0dXJuIHN0cmluZy5tYXRjaChwYXR0ZXJuKSB8fCBbXTsKCSAgICB9CgoJICAg
IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KCgkgICAgLyoqCgkgICAgICogQXR0ZW1wdHMgdG8gaW52b2tl
IGBmdW5jYCwgcmV0dXJuaW5nIGVpdGhlciB0aGUgcmVzdWx0IG9yIHRoZSBjYXVnaHQgZXJyb3IK
CSAgICAgKiBvYmplY3QuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8g
YGZ1bmNgIHdoZW4gaXQncyBpbnZva2VkLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwK
CSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhdHRlbXB0LgoJ
ICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5j
YCB3aXRoLgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBgZnVuY2AgcmVzdWx0IG9y
IGVycm9yIG9iamVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogLy8gQXZvaWQg
dGhyb3dpbmcgZXJyb3JzIGZvciBpbnZhbGlkIHNlbGVjdG9ycy4KCSAgICAgKiB2YXIgZWxlbWVu
dHMgPSBfLmF0dGVtcHQoZnVuY3Rpb24oc2VsZWN0b3IpIHsKCSAgICAgKiAgIHJldHVybiBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKCSAgICAgKiB9LCAnPl8+Jyk7CgkgICAg
ICoKCSAgICAgKiBpZiAoXy5pc0Vycm9yKGVsZW1lbnRzKSkgewoJICAgICAqICAgZWxlbWVudHMg
PSBbXTsKCSAgICAgKiB9CgkgICAgICovCgkgICAgdmFyIGF0dGVtcHQgPSBiYXNlUmVzdChmdW5j
dGlvbihmdW5jLCBhcmdzKSB7CgkgICAgICB0cnkgewoJICAgICAgICByZXR1cm4gYXBwbHkoZnVu
YywgdW5kZWZpbmVkLCBhcmdzKTsKCSAgICAgIH0gY2F0Y2ggKGUpIHsKCSAgICAgICAgcmV0dXJu
IGlzRXJyb3IoZSkgPyBlIDogbmV3IEVycm9yKGUpOwoJICAgICAgfQoJICAgIH0pOwoKCSAgICAv
KioKCSAgICAgKiBCaW5kcyBtZXRob2RzIG9mIGFuIG9iamVjdCB0byB0aGUgb2JqZWN0IGl0c2Vs
Ziwgb3ZlcndyaXRpbmcgdGhlIGV4aXN0aW5nCgkgICAgICogbWV0aG9kLgoJICAgICAqCgkgICAg
ICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSAibGVuZ3RoIiBwcm9wZXJ0
eSBvZiBib3VuZCBmdW5jdGlvbnMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNp
bmNlIDAuMS4wCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAg
ICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBiaW5kIGFuZCBhc3NpZ24g
dGhlIGJvdW5kIG1ldGhvZHMgdG8uCgkgICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1td
KX0gbWV0aG9kTmFtZXMgVGhlIG9iamVjdCBtZXRob2QgbmFtZXMgdG8gYmluZC4KCSAgICAgKiBA
cmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLgoJICAgICAqIEBleGFtcGxlCgkgICAg
ICoKCSAgICAgKiB2YXIgdmlldyA9IHsKCSAgICAgKiAgICdsYWJlbCc6ICdkb2NzJywKCSAgICAg
KiAgICdjbGljayc6IGZ1bmN0aW9uKCkgewoJICAgICAqICAgICBjb25zb2xlLmxvZygnY2xpY2tl
ZCAnICsgdGhpcy5sYWJlbCk7CgkgICAgICogICB9CgkgICAgICogfTsKCSAgICAgKgoJICAgICAq
IF8uYmluZEFsbCh2aWV3LCBbJ2NsaWNrJ10pOwoJICAgICAqIGpRdWVyeShlbGVtZW50KS5vbign
Y2xpY2snLCB2aWV3LmNsaWNrKTsKCSAgICAgKiAvLyA9PiBMb2dzICdjbGlja2VkIGRvY3MnIHdo
ZW4gY2xpY2tlZC4KCSAgICAgKi8KCSAgICB2YXIgYmluZEFsbCA9IGZsYXRSZXN0KGZ1bmN0aW9u
KG9iamVjdCwgbWV0aG9kTmFtZXMpIHsKCSAgICAgIGFycmF5RWFjaChtZXRob2ROYW1lcywgZnVu
Y3Rpb24oa2V5KSB7CgkgICAgICAgIGtleSA9IHRvS2V5KGtleSk7CgkgICAgICAgIGJhc2VBc3Np
Z25WYWx1ZShvYmplY3QsIGtleSwgYmluZChvYmplY3Rba2V5XSwgb2JqZWN0KSk7CgkgICAgICB9
KTsKCSAgICAgIHJldHVybiBvYmplY3Q7CgkgICAgfSk7CgoJICAgIC8qKgoJICAgICAqIENyZWF0
ZXMgYSBmdW5jdGlvbiB0aGF0IGl0ZXJhdGVzIG92ZXIgYHBhaXJzYCBhbmQgaW52b2tlcyB0aGUg
Y29ycmVzcG9uZGluZwoJICAgICAqIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBwcmVkaWNhdGUgdG8g
cmV0dXJuIHRydXRoeS4gVGhlIHByZWRpY2F0ZS1mdW5jdGlvbgoJICAgICAqIHBhaXJzIGFyZSBp
bnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlIGNyZWF0
ZWQKCSAgICAgKiBmdW5jdGlvbi4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVt
YmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAg
ICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIHByZWRpY2F0ZS1mdW5jdGlvbiBwYWlycy4KCSAg
ICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rp
b24uCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBmdW5jID0gXy5jb25kKFsK
CSAgICAgKiAgIFtfLm1hdGNoZXMoeyAnYSc6IDEgfSksICAgICAgICAgICBfLmNvbnN0YW50KCdt
YXRjaGVzIEEnKV0sCgkgICAgICogICBbXy5jb25mb3Jtcyh7ICdiJzogXy5pc051bWJlciB9KSwg
Xy5jb25zdGFudCgnbWF0Y2hlcyBCJyldLAoJICAgICAqICAgW18uc3R1YlRydWUsICAgICAgICAg
ICAgICAgICAgICAgIF8uY29uc3RhbnQoJ25vIG1hdGNoJyldCgkgICAgICogXSk7CgkgICAgICoK
CSAgICAgKiBmdW5jKHsgJ2EnOiAxLCAnYic6IDIgfSk7CgkgICAgICogLy8gPT4gJ21hdGNoZXMg
QScKCSAgICAgKgoJICAgICAqIGZ1bmMoeyAnYSc6IDAsICdiJzogMSB9KTsKCSAgICAgKiAvLyA9
PiAnbWF0Y2hlcyBCJwoJICAgICAqCgkgICAgICogZnVuYyh7ICdhJzogJzEnLCAnYic6ICcyJyB9
KTsKCSAgICAgKiAvLyA9PiAnbm8gbWF0Y2gnCgkgICAgICovCgkgICAgZnVuY3Rpb24gY29uZChw
YWlycykgewoJICAgICAgdmFyIGxlbmd0aCA9IHBhaXJzID09IG51bGwgPyAwIDogcGFpcnMubGVu
Z3RoLAoJICAgICAgICAgIHRvSXRlcmF0ZWUgPSBnZXRJdGVyYXRlZSgpOwoKCSAgICAgIHBhaXJz
ID0gIWxlbmd0aCA/IFtdIDogYXJyYXlNYXAocGFpcnMsIGZ1bmN0aW9uKHBhaXIpIHsKCSAgICAg
ICAgaWYgKHR5cGVvZiBwYWlyWzFdICE9ICdmdW5jdGlvbicpIHsKCSAgICAgICAgICB0aHJvdyBu
ZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CgkgICAgICAgIH0KCSAgICAgICAgcmV0dXJu
IFt0b0l0ZXJhdGVlKHBhaXJbMF0pLCBwYWlyWzFdXTsKCSAgICAgIH0pOwoKCSAgICAgIHJldHVy
biBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7CgkgICAgICAgIHZhciBpbmRleCA9IC0xOwoJICAg
ICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewoJICAgICAgICAgIHZhciBwYWlyID0gcGFp
cnNbaW5kZXhdOwoJICAgICAgICAgIGlmIChhcHBseShwYWlyWzBdLCB0aGlzLCBhcmdzKSkgewoJ
ICAgICAgICAgICAgcmV0dXJuIGFwcGx5KHBhaXJbMV0sIHRoaXMsIGFyZ3MpOwoJICAgICAgICAg
IH0KCSAgICAgICAgfQoJICAgICAgfSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVz
IGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSBwcmVkaWNhdGUgcHJvcGVydGllcyBvZiBgc291
cmNlYCB3aXRoCgkgICAgICogdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGEg
Z2l2ZW4gb2JqZWN0LCByZXR1cm5pbmcgYHRydWVgIGlmCgkgICAgICogYWxsIHByZWRpY2F0ZXMg
cmV0dXJuIHRydXRoeSwgZWxzZSBgZmFsc2VgLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRo
ZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNUb2Agd2l0aAoJ
ICAgICAqIGBzb3VyY2VgIHBhcnRpYWxseSBhcHBsaWVkLgoJICAgICAqCgkgICAgICogQHN0YXRp
YwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVn
b3J5IFV0aWwKCSAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJv
cGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlv
bn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAg
KgoJICAgICAqIHZhciBvYmplY3RzID0gWwoJICAgICAqICAgeyAnYSc6IDIsICdiJzogMSB9LAoJ
ICAgICAqICAgeyAnYSc6IDEsICdiJzogMiB9CgkgICAgICogXTsKCSAgICAgKgoJICAgICAqIF8u
ZmlsdGVyKG9iamVjdHMsIF8uY29uZm9ybXMoeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4g
PiAxOyB9IH0pKTsKCSAgICAgKiAvLyA9PiBbeyAnYSc6IDEsICdiJzogMiB9XQoJICAgICAqLwoJ
ICAgIGZ1bmN0aW9uIGNvbmZvcm1zKHNvdXJjZSkgewoJICAgICAgcmV0dXJuIGJhc2VDb25mb3Jt
cyhiYXNlQ2xvbmUoc291cmNlLCBDTE9ORV9ERUVQX0ZMQUcpKTsKCSAgICB9CgoJICAgIC8qKgoJ
ICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC4KCSAgICAgKgoJ
ICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAyLjQuMAoJ
ICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUg
dG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rp
b259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6
IDEgfSkpOwoJICAgICAqCgkgICAgICogY29uc29sZS5sb2cob2JqZWN0cyk7CgkgICAgICogLy8g
PT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dCgkgICAgICoKCSAgICAgKiBjb25zb2xlLmxvZyhv
YmplY3RzWzBdID09PSBvYmplY3RzWzFdKTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAgICovCgkg
ICAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHsKCSAgICAgIHJldHVybiBmdW5jdGlvbigpIHsK
CSAgICAgICAgcmV0dXJuIHZhbHVlOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IENoZWNrcyBgdmFsdWVgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZGVmYXVsdCB2YWx1ZSBzaG91
bGQgYmUgcmV0dXJuZWQgaW4KCSAgICAgKiBpdHMgcGxhY2UuIFRoZSBgZGVmYXVsdFZhbHVlYCBp
cyByZXR1cm5lZCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBgbnVsbGAsCgkgICAgICogb3IgYHVuZGVm
aW5lZGAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAg
KiBAc2luY2UgNC4xNC4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAgKiBAcGFyYW0geyp9
IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay4KCSAgICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1
ZSBUaGUgZGVmYXVsdCB2YWx1ZS4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVz
b2x2ZWQgdmFsdWUuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uZGVmYXVsdFRv
KDEsIDEwKTsKCSAgICAgKiAvLyA9PiAxCgkgICAgICoKCSAgICAgKiBfLmRlZmF1bHRUbyh1bmRl
ZmluZWQsIDEwKTsKCSAgICAgKiAvLyA9PiAxMAoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGRlZmF1
bHRUbyh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7CgkgICAgICByZXR1cm4gKHZhbHVlID09IG51bGwg
fHwgdmFsdWUgIT09IHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOwoJICAgIH0KCgkgICAg
LyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9m
IGludm9raW5nIHRoZSBnaXZlbiBmdW5jdGlvbnMKCSAgICAgKiB3aXRoIHRoZSBgdGhpc2AgYmlu
ZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbiwgd2hlcmUgZWFjaCBzdWNjZXNzaXZlCgkgICAg
ICogaW52b2NhdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91
cy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBz
aW5jZSAzLjAuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHsuLi4oRnVu
Y3Rpb258RnVuY3Rpb25bXSl9IFtmdW5jc10gVGhlIGZ1bmN0aW9ucyB0byBpbnZva2UuCgkgICAg
ICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG9zaXRlIGZ1bmN0aW9u
LgoJICAgICAqIEBzZWUgXy5mbG93UmlnaHQKCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAg
ICogZnVuY3Rpb24gc3F1YXJlKG4pIHsKCSAgICAgKiAgIHJldHVybiBuICogbjsKCSAgICAgKiB9
CgkgICAgICoKCSAgICAgKiB2YXIgYWRkU3F1YXJlID0gXy5mbG93KFtfLmFkZCwgc3F1YXJlXSk7
CgkgICAgICogYWRkU3F1YXJlKDEsIDIpOwoJICAgICAqIC8vID0+IDkKCSAgICAgKi8KCSAgICB2
YXIgZmxvdyA9IGNyZWF0ZUZsb3coKTsKCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgaXMg
bGlrZSBgXy5mbG93YCBleGNlcHQgdGhhdCBpdCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdAoJICAg
ICAqIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuCgkgICAg
ICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQG1lbWJlck9m
IF8KCSAgICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1
bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLgoJICAgICAqIEByZXR1
cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi4KCSAgICAg
KiBAc2VlIF8uZmxvdwoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBmdW5jdGlvbiBz
cXVhcmUobikgewoJICAgICAqICAgcmV0dXJuIG4gKiBuOwoJICAgICAqIH0KCSAgICAgKgoJICAg
ICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChbc3F1YXJlLCBfLmFkZF0pOwoJICAgICAq
IGFkZFNxdWFyZSgxLCAyKTsKCSAgICAgKiAvLyA9PiA5CgkgICAgICovCgkgICAgdmFyIGZsb3dS
aWdodCA9IGNyZWF0ZUZsb3codHJ1ZSk7CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9kIHJl
dHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQGNh
dGVnb3J5IFV0aWwKCSAgICAgKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS4KCSAgICAgKiBA
cmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTsKCSAgICAgKgoJICAgICAqIGNvbnNvbGUubG9n
KF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTsKCSAgICAgKiAvLyA9PiB0cnVlCgkgICAg
ICovCgkgICAgZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHsKCSAgICAgIHJldHVybiB2YWx1ZTsK
CSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMg
YGZ1bmNgIHdpdGggdGhlIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZAoJICAgICAqIGZ1bmN0aW9u
LiBJZiBgZnVuY2AgaXMgYSBwcm9wZXJ0eSBuYW1lLCB0aGUgY3JlYXRlZCBmdW5jdGlvbiByZXR1
cm5zIHRoZQoJICAgICAqIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIGVsZW1lbnQuIElmIGBm
dW5jYCBpcyBhbiBhcnJheSBvciBvYmplY3QsIHRoZQoJICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24g
cmV0dXJucyBgdHJ1ZWAgZm9yIGVsZW1lbnRzIHRoYXQgY29udGFpbiB0aGUgZXF1aXZhbGVudAoJ
ICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBgZmFsc2VgLgoJ
ICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBtZW1i
ZXJPZiBfCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAgKiBAcGFyYW0geyp9IFtmdW5jPV8u
aWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgY2FsbGJhY2suCgkgICAgICogQHJl
dHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBjYWxsYmFjay4KCSAgICAgKiBAZXhhbXBsZQoJ
ICAgICAqCgkgICAgICogdmFyIHVzZXJzID0gWwoJICAgICAqICAgeyAndXNlcic6ICdiYXJuZXkn
LCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sCgkgICAgICogICB7ICd1c2VyJzogJ2ZyZWQn
LCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0KCSAgICAgKiBdOwoJICAgICAqCgkgICAg
ICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC4KCSAgICAgKiBfLmZpbHRl
cih1c2VycywgXy5pdGVyYXRlZSh7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0p
KTsKCSAgICAgKiAvLyA9PiBbeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUn
OiB0cnVlIH1dCgkgICAgICoKCSAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVy
YXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5maWx0ZXIodXNlcnMsIF8uaXRlcmF0ZWUoWyd1c2Vy
JywgJ2ZyZWQnXSkpOwoJICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2ZyZWQnLCAnYWdlJzogNDAg
fV0KCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5k
LgoJICAgICAqIF8ubWFwKHVzZXJzLCBfLml0ZXJhdGVlKCd1c2VyJykpOwoJICAgICAqIC8vID0+
IFsnYmFybmV5JywgJ2ZyZWQnXQoJICAgICAqCgkgICAgICogLy8gQ3JlYXRlIGN1c3RvbSBpdGVy
YXRlZSBzaG9ydGhhbmRzLgoJICAgICAqIF8uaXRlcmF0ZWUgPSBfLndyYXAoXy5pdGVyYXRlZSwg
ZnVuY3Rpb24oaXRlcmF0ZWUsIGZ1bmMpIHsKCSAgICAgKiAgIHJldHVybiAhXy5pc1JlZ0V4cChm
dW5jKSA/IGl0ZXJhdGVlKGZ1bmMpIDogZnVuY3Rpb24oc3RyaW5nKSB7CgkgICAgICogICAgIHJl
dHVybiBmdW5jLnRlc3Qoc3RyaW5nKTsKCSAgICAgKiAgIH07CgkgICAgICogfSk7CgkgICAgICoK
CSAgICAgKiBfLmZpbHRlcihbJ2FiYycsICdkZWYnXSwgL2VmLyk7CgkgICAgICogLy8gPT4gWydk
ZWYnXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGl0ZXJhdGVlKGZ1bmMpIHsKCSAgICAgIHJldHVy
biBiYXNlSXRlcmF0ZWUodHlwZW9mIGZ1bmMgPT0gJ2Z1bmN0aW9uJyA/IGZ1bmMgOiBiYXNlQ2xv
bmUoZnVuYywgQ0xPTkVfREVFUF9GTEFHKSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVh
dGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJl
dHdlZW4gYSBnaXZlbgoJICAgICAqIG9iamVjdCBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1
ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudAoJICAgICAqIHByb3BlcnR5IHZh
bHVlcywgZWxzZSBgZmFsc2VgLgoJICAgICAqCgkgICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVk
IGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uaXNNYXRjaGAgd2l0aCBgc291cmNlYAoJICAg
ICAqIHBhcnRpYWxseSBhcHBsaWVkLgoJICAgICAqCgkgICAgICogUGFydGlhbCBjb21wYXJpc29u
cyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWAKCSAgICAg
KiB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHku
IFNlZSBgXy5pc0VxdWFsYAoJICAgICAqIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNv
bXBhcmlzb25zLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAgKiBAcGFyYW0g
e09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLgoJ
ICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24u
CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3RzID0gWwoJICAgICAq
ICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sCgkgICAgICogICB7ICdhJzogNCwgJ2InOiA1
LCAnYyc6IDYgfQoJICAgICAqIF07CgkgICAgICoKCSAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBf
Lm1hdGNoZXMoeyAnYSc6IDQsICdjJzogNiB9KSk7CgkgICAgICogLy8gPT4gW3sgJ2EnOiA0LCAn
Yic6IDUsICdjJzogNiB9XQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG1hdGNoZXMoc291cmNlKSB7
CgkgICAgICByZXR1cm4gYmFzZU1hdGNoZXMoYmFzZUNsb25lKHNvdXJjZSwgQ0xPTkVfREVFUF9G
TEFHKSk7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBw
ZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gdGhlCgkgICAgICogdmFs
dWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0IHRvIGBzcmNWYWx1ZWAsIHJldHVybmluZyBg
dHJ1ZWAgaWYgdGhlCgkgICAgICogb2JqZWN0IHZhbHVlIGlzIGVxdWl2YWxlbnQsIGVsc2UgYGZh
bHNlYC4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBQYXJ0aWFsIGNvbXBhcmlzb25zIHdpbGwg
bWF0Y2ggZW1wdHkgYXJyYXkgYW5kIGVtcHR5IG9iamVjdAoJICAgICAqIGBzcmNWYWx1ZWAgdmFs
dWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUK
CSAgICAgKiBgXy5pc0VxdWFsYCBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJp
c29ucy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSAzLjIuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtBcnJh
eXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC4KCSAgICAgKiBA
cGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC4KCSAgICAgKiBAcmV0dXJucyB7
RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxl
CgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0cyA9IFsKCSAgICAgKiAgIHsgJ2EnOiAxLCAnYic6
IDIsICdjJzogMyB9LAoJICAgICAqICAgeyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH0KCSAgICAg
KiBdOwoJICAgICAqCgkgICAgICogXy5maW5kKG9iamVjdHMsIF8ubWF0Y2hlc1Byb3BlcnR5KCdh
JywgNCkpOwoJICAgICAqIC8vID0+IHsgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9CgkgICAgICov
CgkgICAgZnVuY3Rpb24gbWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7CgkgICAgICBy
ZXR1cm4gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBiYXNlQ2xvbmUoc3JjVmFsdWUsIENMT05F
X0RFRVBfRkxBRykpOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9u
IHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC4KCSAg
ICAgKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2Vk
IG1ldGhvZC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAg
ICAqIEBzaW5jZSAzLjcuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtB
cnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuCgkgICAg
ICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhv
ZCB3aXRoLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9r
ZXIgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3Rz
ID0gWwoJICAgICAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSwKCSAgICAgKiAg
IHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgxKSB9IH0KCSAgICAgKiBdOwoJICAgICAqCgkgICAg
ICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYicpKTsKCSAgICAgKiAvLyA9PiBbMiwgMV0K
CSAgICAgKgoJICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKFsnYScsICdiJ10pKTsKCSAg
ICAgKiAvLyA9PiBbMiwgMV0KCSAgICAgKi8KCSAgICB2YXIgbWV0aG9kID0gYmFzZVJlc3QoZnVu
Y3Rpb24ocGF0aCwgYXJncykgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewoJICAg
ICAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpOwoJICAgICAgfTsKCSAg
ICB9KTsKCgkgICAgLyoqCgkgICAgICogVGhlIG9wcG9zaXRlIG9mIGBfLm1ldGhvZGA7IHRoaXMg
bWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMKCSAgICAgKiB0aGUgbWV0aG9k
IGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC4gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIGFy
ZQoJICAgICAqIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC4KCSAgICAgKgoJICAgICAq
IEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjcuMAoJICAgICAq
IEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0
IHRvIHF1ZXJ5LgoJICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8g
aW52b2tlIHRoZSBtZXRob2Qgd2l0aC4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVy
bnMgdGhlIG5ldyBpbnZva2VyIGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAg
ICAgKiB2YXIgYXJyYXkgPSBfLnRpbWVzKDMsIF8uY29uc3RhbnQpLAoJICAgICAqICAgICBvYmpl
Y3QgPSB7ICdhJzogYXJyYXksICdiJzogYXJyYXksICdjJzogYXJyYXkgfTsKCSAgICAgKgoJICAg
ICAqIF8ubWFwKFsnYVsyXScsICdjWzBdJ10sIF8ubWV0aG9kT2Yob2JqZWN0KSk7CgkgICAgICog
Ly8gPT4gWzIsIDBdCgkgICAgICoKCSAgICAgKiBfLm1hcChbWydhJywgJzInXSwgWydjJywgJzAn
XV0sIF8ubWV0aG9kT2Yob2JqZWN0KSk7CgkgICAgICogLy8gPT4gWzIsIDBdCgkgICAgICovCgkg
ICAgdmFyIG1ldGhvZE9mID0gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBhcmdzKSB7CgkgICAg
ICByZXR1cm4gZnVuY3Rpb24ocGF0aCkgewoJICAgICAgICByZXR1cm4gYmFzZUludm9rZShvYmpl
Y3QsIHBhdGgsIGFyZ3MpOwoJICAgICAgfTsKCSAgICB9KTsKCgkgICAgLyoqCgkgICAgICogQWRk
cyBhbGwgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIGZ1bmN0aW9uIHByb3BlcnRpZXMgb2Yg
YSBzb3VyY2UKCSAgICAgKiBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdC4gSWYgYG9i
amVjdGAgaXMgYSBmdW5jdGlvbiwgdGhlbiBtZXRob2RzCgkgICAgICogYXJlIGFkZGVkIHRvIGl0
cyBwcm90b3R5cGUgYXMgd2VsbC4KCSAgICAgKgoJICAgICAqICoqTm90ZToqKiBVc2UgYF8ucnVu
SW5Db250ZXh0YCB0byBjcmVhdGUgYSBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB0bwoJICAg
ICAqIGF2b2lkIGNvbmZsaWN0cyBjYXVzZWQgYnkgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbC4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAbWVtYmVy
T2YgXwoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbnxPYmpl
Y3R9IFtvYmplY3Q9bG9kYXNoXSBUaGUgZGVzdGluYXRpb24gb2JqZWN0LgoJICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBmdW5jdGlvbnMgdG8gYWRkLgoJICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LgoJICAgICAq
IEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hhaW49dHJ1ZV0gU3BlY2lmeSB3aGV0aGVyIG1p
eGlucyBhcmUgY2hhaW5hYmxlLgoJICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbnxPYmplY3R9IFJl
dHVybnMgYG9iamVjdGAuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIGZ1bmN0aW9u
IHZvd2VscyhzdHJpbmcpIHsKCSAgICAgKiAgIHJldHVybiBfLmZpbHRlcihzdHJpbmcsIGZ1bmN0
aW9uKHYpIHsKCSAgICAgKiAgICAgcmV0dXJuIC9bYWVpb3VdL2kudGVzdCh2KTsKCSAgICAgKiAg
IH0pOwoJICAgICAqIH0KCSAgICAgKgoJICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxz
IH0pOwoJICAgICAqIF8udm93ZWxzKCdmcmVkJyk7CgkgICAgICogLy8gPT4gWydlJ10KCSAgICAg
KgoJICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKS52YWx1ZSgpOwoJICAgICAqIC8vID0+IFsnZSdd
CgkgICAgICoKCSAgICAgKiBfLm1peGluKHsgJ3Zvd2Vscyc6IHZvd2VscyB9LCB7ICdjaGFpbic6
IGZhbHNlIH0pOwoJICAgICAqIF8oJ2ZyZWQnKS52b3dlbHMoKTsKCSAgICAgKiAvLyA9PiBbJ2Un
XQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG1peGluKG9iamVjdCwgc291cmNlLCBvcHRpb25zKSB7
CgkgICAgICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSksCgkgICAgICAgICAgbWV0aG9kTmFtZXMg
PSBiYXNlRnVuY3Rpb25zKHNvdXJjZSwgcHJvcHMpOwoKCSAgICAgIGlmIChvcHRpb25zID09IG51
bGwgJiYKCSAgICAgICAgICAhKGlzT2JqZWN0KHNvdXJjZSkgJiYgKG1ldGhvZE5hbWVzLmxlbmd0
aCB8fCAhcHJvcHMubGVuZ3RoKSkpIHsKCSAgICAgICAgb3B0aW9ucyA9IHNvdXJjZTsKCSAgICAg
ICAgc291cmNlID0gb2JqZWN0OwoJICAgICAgICBvYmplY3QgPSB0aGlzOwoJICAgICAgICBtZXRo
b2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBrZXlzKHNvdXJjZSkpOwoJICAgICAgfQoJ
ICAgICAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlv
bnMpIHx8ICEhb3B0aW9ucy5jaGFpbiwKCSAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9i
amVjdCk7CgoJICAgICAgYXJyYXlFYWNoKG1ldGhvZE5hbWVzLCBmdW5jdGlvbihtZXRob2ROYW1l
KSB7CgkgICAgICAgIHZhciBmdW5jID0gc291cmNlW21ldGhvZE5hbWVdOwoJICAgICAgICBvYmpl
Y3RbbWV0aG9kTmFtZV0gPSBmdW5jOwoJICAgICAgICBpZiAoaXNGdW5jKSB7CgkgICAgICAgICAg
b2JqZWN0LnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewoJICAgICAgICAgICAg
dmFyIGNoYWluQWxsID0gdGhpcy5fX2NoYWluX187CgkgICAgICAgICAgICBpZiAoY2hhaW4gfHwg
Y2hhaW5BbGwpIHsKCSAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCh0aGlzLl9fd3Jh
cHBlZF9fKSwKCSAgICAgICAgICAgICAgICAgIGFjdGlvbnMgPSByZXN1bHQuX19hY3Rpb25zX18g
PSBjb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7CgoJICAgICAgICAgICAgICBhY3Rpb25zLnB1
c2goeyAnZnVuYyc6IGZ1bmMsICdhcmdzJzogYXJndW1lbnRzLCAndGhpc0FyZyc6IG9iamVjdCB9
KTsKCSAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsOwoJICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgcmV0dXJuIGZ1
bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpOwoJ
ICAgICAgICAgIH07CgkgICAgICAgIH0KCSAgICAgIH0pOwoKCSAgICAgIHJldHVybiBvYmplY3Q7
CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBSZXZlcnRzIHRoZSBgX2AgdmFyaWFibGUgdG8gaXRz
IHByZXZpb3VzIHZhbHVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvCgkgICAgICogdGhlIGBs
b2Rhc2hgIGZ1bmN0aW9uLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBzaW5jZSAw
LjEuMAoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAgKiBA
cmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgbG9kYXNoID0gXy5ub0NvbmZsaWN0KCk7Cgkg
ICAgICovCgkgICAgZnVuY3Rpb24gbm9Db25mbGljdCgpIHsKCSAgICAgIGlmIChyb290Ll8gPT09
IHRoaXMpIHsKCSAgICAgICAgcm9vdC5fID0gb2xkRGFzaDsKCSAgICAgIH0KCSAgICAgIHJldHVy
biB0aGlzOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdW5k
ZWZpbmVkYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAg
ICAqIEBzaW5jZSAyLjMuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQGV4YW1wbGUK
CSAgICAgKgoJICAgICAqIF8udGltZXMoMiwgXy5ub29wKTsKCSAgICAgKiAvLyA9PiBbdW5kZWZp
bmVkLCB1bmRlZmluZWRdCgkgICAgICovCgkgICAgZnVuY3Rpb24gbm9vcCgpIHsKCSAgICAgIC8v
IE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuCgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVz
IGEgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBhcmd1bWVudCBhdCBpbmRleCBgbmAuIElmIGBuYCBp
cyBuZWdhdGl2ZSwKCSAgICAgKiB0aGUgbnRoIGFyZ3VtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1
cm5lZC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAq
IEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtudW1i
ZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdG8gcmV0dXJuLgoJICAgICAqIEBy
ZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi4KCSAg
ICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTsKCSAg
ICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7CgkgICAgICogLy8gPT4gJ2InCgkgICAgICoK
CSAgICAgKiB2YXIgZnVuYyA9IF8ubnRoQXJnKC0yKTsKCSAgICAgKiBmdW5jKCdhJywgJ2InLCAn
YycsICdkJyk7CgkgICAgICogLy8gPT4gJ2MnCgkgICAgICovCgkgICAgZnVuY3Rpb24gbnRoQXJn
KG4pIHsKCSAgICAgIG4gPSB0b0ludGVnZXIobik7CgkgICAgICByZXR1cm4gYmFzZVJlc3QoZnVu
Y3Rpb24oYXJncykgewoJICAgICAgICByZXR1cm4gYmFzZU50aChhcmdzLCBuKTsKCSAgICAgIH0p
OwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tl
cyBgaXRlcmF0ZWVzYCB3aXRoIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMKCSAgICAgKiBhbmQg
cmV0dXJucyB0aGVpciByZXN1bHRzLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBt
ZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAg
ICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVu
dGl0eV1dCgkgICAgICogIFRoZSBpdGVyYXRlZXMgdG8gaW52b2tlLgoJICAgICAqIEByZXR1cm5z
IHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkg
ICAgICoKCSAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlcihbTWF0aC5tYXgsIE1hdGgubWluXSk7Cgkg
ICAgICoKCSAgICAgKiBmdW5jKDEsIDIsIDMsIDQpOwoJICAgICAqIC8vID0+IFs0LCAxXQoJICAg
ICAqLwoJICAgIHZhciBvdmVyID0gY3JlYXRlT3ZlcihhcnJheU1hcCk7CgoJICAgIC8qKgoJICAg
ICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiAqKmFsbCoqIG9mIHRoZSBgcHJl
ZGljYXRlc2AgcmV0dXJuCgkgICAgICogdHJ1dGh5IHdoZW4gaW52b2tlZCB3aXRoIHRoZSBhcmd1
bWVudHMgaXQgcmVjZWl2ZXMuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJl
ck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAgICAq
IEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0
eV1dCgkgICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLgoJICAgICAqIEByZXR1cm5zIHtG
dW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLgoJICAgICAqIEBleGFtcGxlCgkgICAg
ICoKCSAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckV2ZXJ5KFtCb29sZWFuLCBpc0Zpbml0ZV0pOwoJ
ICAgICAqCgkgICAgICogZnVuYygnMScpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAg
ICAqIGZ1bmMobnVsbCk7CgkgICAgICogLy8gPT4gZmFsc2UKCSAgICAgKgoJICAgICAqIGZ1bmMo
TmFOKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIHZhciBvdmVyRXZlcnkgPSBj
cmVhdGVPdmVyKGFycmF5RXZlcnkpOwoKCSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rp
b24gdGhhdCBjaGVja3MgaWYgKiphbnkqKiBvZiB0aGUgYHByZWRpY2F0ZXNgIHJldHVybgoJICAg
ICAqIHRydXRoeSB3aGVuIGludm9rZWQgd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLgoJ
ICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNl
IDQuMC4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlv
bnxGdW5jdGlvbltdKX0gW3ByZWRpY2F0ZXM9W18uaWRlbnRpdHldXQoJICAgICAqICBUaGUgcHJl
ZGljYXRlcyB0byBjaGVjay4KCSAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhl
IG5ldyBmdW5jdGlvbi4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIGZ1bmMg
PSBfLm92ZXJTb21lKFtCb29sZWFuLCBpc0Zpbml0ZV0pOwoJICAgICAqCgkgICAgICogZnVuYygn
MScpOwoJICAgICAqIC8vID0+IHRydWUKCSAgICAgKgoJICAgICAqIGZ1bmMobnVsbCk7CgkgICAg
ICogLy8gPT4gdHJ1ZQoJICAgICAqCgkgICAgICogZnVuYyhOYU4pOwoJICAgICAqIC8vID0+IGZh
bHNlCgkgICAgICovCgkgICAgdmFyIG92ZXJTb21lID0gY3JlYXRlT3ZlcihhcnJheVNvbWUpOwoK
CSAgICAvKioKCSAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1
ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkg
ICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMi40LjAKCSAgICAgKiBAY2F0ZWdvcnkg
VXRpbAoJICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBw
cm9wZXJ0eSB0byBnZXQuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBu
ZXcgYWNjZXNzb3IgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIHZh
ciBvYmplY3RzID0gWwoJICAgICAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSwKCSAgICAgKiAgIHsg
J2EnOiB7ICdiJzogMSB9IH0KCSAgICAgKiBdOwoJICAgICAqCgkgICAgICogXy5tYXAob2JqZWN0
cywgXy5wcm9wZXJ0eSgnYS5iJykpOwoJICAgICAqIC8vID0+IFsyLCAxXQoJICAgICAqCgkgICAg
ICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmIn
KTsKCSAgICAgKiAvLyA9PiBbMSwgMl0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBwcm9wZXJ0eShw
YXRoKSB7CgkgICAgICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0
aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRo
ZSBvcHBvc2l0ZSBvZiBgXy5wcm9wZXJ0eWA7IHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmdW5jdGlv
biB0aGF0IHJldHVybnMKCSAgICAgKiB0aGUgdmFsdWUgYXQgYSBnaXZlbiBwYXRoIG9mIGBvYmpl
Y3RgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICog
QHNpbmNlIDMuMC4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAgKiBAcGFyYW0ge09iamVj
dH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuCgkgICAgICogQHJldHVybnMge0Z1bmN0aW9u
fSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIHZhciBhcnJheSA9IFswLCAxLCAyXSwKCSAgICAgKiAgICAgb2JqZWN0ID0g
eyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07CgkgICAgICoKCSAgICAgKiBf
Lm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLnByb3BlcnR5T2Yob2JqZWN0KSk7CgkgICAgICogLy8g
PT4gWzIsIDBdCgkgICAgICoKCSAgICAgKiBfLm1hcChbWydhJywgJzInXSwgWydjJywgJzAnXV0s
IF8ucHJvcGVydHlPZihvYmplY3QpKTsKCSAgICAgKiAvLyA9PiBbMiwgMF0KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCkgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBh
dGgpIHsKCSAgICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdl
dChvYmplY3QsIHBhdGgpOwoJICAgICAgfTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENyZWF0
ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVz
c2luZyBmcm9tCgkgICAgICogYHN0YXJ0YCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRg
LiBBIHN0ZXAgb2YgYC0xYCBpcyB1c2VkIGlmIGEgbmVnYXRpdmUKCSAgICAgKiBgc3RhcnRgIGlz
IHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNw
ZWNpZmllZCwKCSAgICAgKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNl
dCB0byBgMGAuCgkgICAgICoKCSAgICAgKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRo
ZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nCgkgICAgICogZmxvYXRpbmctcG9pbnQg
dmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAc2luY2UgMC4xLjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAg
ICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUg
c3RhcnQgb2YgdGhlIHJhbmdlLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBv
ZiB0aGUgcmFuZ2UuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0
byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LgoJICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0
dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy4KCSAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5n
ZVJpZ2h0CgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8ucmFuZ2UoNCk7CgkgICAg
ICogLy8gPT4gWzAsIDEsIDIsIDNdCgkgICAgICoKCSAgICAgKiBfLnJhbmdlKC00KTsKCSAgICAg
KiAvLyA9PiBbMCwgLTEsIC0yLCAtM10KCSAgICAgKgoJICAgICAqIF8ucmFuZ2UoMSwgNSk7Cgkg
ICAgICogLy8gPT4gWzEsIDIsIDMsIDRdCgkgICAgICoKCSAgICAgKiBfLnJhbmdlKDAsIDIwLCA1
KTsKCSAgICAgKiAvLyA9PiBbMCwgNSwgMTAsIDE1XQoJICAgICAqCgkgICAgICogXy5yYW5nZSgw
LCAtNCwgLTEpOwoJICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXQoJICAgICAqCgkgICAgICog
Xy5yYW5nZSgxLCA0LCAwKTsKCSAgICAgKiAvLyA9PiBbMSwgMSwgMV0KCSAgICAgKgoJICAgICAq
IF8ucmFuZ2UoMCk7CgkgICAgICogLy8gPT4gW10KCSAgICAgKi8KCSAgICB2YXIgcmFuZ2UgPSBj
cmVhdGVSYW5nZSgpOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnJh
bmdlYCBleGNlcHQgdGhhdCBpdCBwb3B1bGF0ZXMgdmFsdWVzIGluCgkgICAgICogZGVzY2VuZGlu
ZyBvcmRlci4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAg
ICAqIEBzaW5jZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHtu
dW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLgoJICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuCgkgICAgICogQHBhcmFtIHtudW1iZXJ9
IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LgoJICAgICAq
IEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy4KCSAgICAgKiBA
c2VlIF8uaW5SYW5nZSwgXy5yYW5nZQoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBf
LnJhbmdlUmlnaHQoNCk7CgkgICAgICogLy8gPT4gWzMsIDIsIDEsIDBdCgkgICAgICoKCSAgICAg
KiBfLnJhbmdlUmlnaHQoLTQpOwoJICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXQoJICAgICAq
CgkgICAgICogXy5yYW5nZVJpZ2h0KDEsIDUpOwoJICAgICAqIC8vID0+IFs0LCAzLCAyLCAxXQoJ
ICAgICAqCgkgICAgICogXy5yYW5nZVJpZ2h0KDAsIDIwLCA1KTsKCSAgICAgKiAvLyA9PiBbMTUs
IDEwLCA1LCAwXQoJICAgICAqCgkgICAgICogXy5yYW5nZVJpZ2h0KDAsIC00LCAtMSk7CgkgICAg
ICogLy8gPT4gWy0zLCAtMiwgLTEsIDBdCgkgICAgICoKCSAgICAgKiBfLnJhbmdlUmlnaHQoMSwg
NCwgMCk7CgkgICAgICogLy8gPT4gWzEsIDEsIDFdCgkgICAgICoKCSAgICAgKiBfLnJhbmdlUmln
aHQoMCk7CgkgICAgICogLy8gPT4gW10KCSAgICAgKi8KCSAgICB2YXIgcmFuZ2VSaWdodCA9IGNy
ZWF0ZVJhbmdlKHRydWUpOwoKCSAgICAvKioKCSAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEg
bmV3IGVtcHR5IGFycmF5LgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJP
ZiBfCgkgICAgICogQHNpbmNlIDQuMTMuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICog
QHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuCgkgICAgICogQGV4
YW1wbGUKCSAgICAgKgoJICAgICAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5
KTsKCSAgICAgKgoJICAgICAqIGNvbnNvbGUubG9nKGFycmF5cyk7CgkgICAgICogLy8gPT4gW1td
LCBbXV0KCSAgICAgKgoJICAgICAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFd
KTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHN0dWJBcnJheSgp
IHsKCSAgICAgIHJldHVybiBbXTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRoaXMgbWV0aG9k
IHJldHVybnMgYGZhbHNlYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVy
T2YgXwoJICAgICAqIEBzaW5jZSA0LjEzLjAKCSAgICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAgICAq
IEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuCgkgICAgICogQGV4YW1wbGUKCSAg
ICAgKgoJICAgICAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpOwoJICAgICAqIC8vID0+IFtmYWxz
ZSwgZmFsc2VdCgkgICAgICovCgkgICAgZnVuY3Rpb24gc3R1YkZhbHNlKCkgewoJICAgICAgcmV0
dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBh
IG5ldyBlbXB0eSBvYmplY3QuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJl
ck9mIF8KCSAgICAgKiBAc2luY2UgNC4xMy4wCgkgICAgICogQGNhdGVnb3J5IFV0aWwKCSAgICAg
KiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgb2JqZWN0LgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5zdHVi
T2JqZWN0KTsKCSAgICAgKgoJICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpOwoJICAgICAqIC8v
ID0+IFt7fSwge31dCgkgICAgICoKCSAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBv
YmplY3RzWzFdKTsKCSAgICAgKiAvLyA9PiBmYWxzZQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHN0
dWJPYmplY3QoKSB7CgkgICAgICByZXR1cm4ge307CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBU
aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KCSAgICAgKgoJICAgICAqIEBzdGF0
aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjEzLjAKCSAgICAgKiBAY2F0
ZWdvcnkgVXRpbAoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVtcHR5IHN0
cmluZy4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy50aW1lcygyLCBfLnN0dWJT
dHJpbmcpOwoJICAgICAqIC8vID0+IFsnJywgJyddCgkgICAgICovCgkgICAgZnVuY3Rpb24gc3R1
YlN0cmluZygpIHsKCSAgICAgIHJldHVybiAnJzsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIFRo
aXMgbWV0aG9kIHJldHVybnMgYHRydWVgLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMTMuMAoJICAgICAqIEBjYXRlZ29yeSBVdGls
CgkgICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgLgoJICAgICAqIEBleGFt
cGxlCgkgICAgICoKCSAgICAgKiBfLnRpbWVzKDIsIF8uc3R1YlRydWUpOwoJICAgICAqIC8vID0+
IFt0cnVlLCB0cnVlXQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHN0dWJUcnVlKCkgewoJICAgICAg
cmV0dXJuIHRydWU7CgkgICAgfQoKCSAgICAvKioKCSAgICAgKiBJbnZva2VzIHRoZSBpdGVyYXRl
ZSBgbmAgdGltZXMsIHJldHVybmluZyBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZgoJICAgICAq
IGVhY2ggaW52b2NhdGlvbi4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1l
bnQ7IChpbmRleCkuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNpbmNlIDAuMS4w
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuCgkg
ICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlv
biBpbnZva2VkIHBlciBpdGVyYXRpb24uCgkgICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5z
IHRoZSBhcnJheSBvZiByZXN1bHRzLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBf
LnRpbWVzKDMsIFN0cmluZyk7CgkgICAgICogLy8gPT4gWycwJywgJzEnLCAnMiddCgkgICAgICoK
CSAgICAgKiAgXy50aW1lcyg0LCBfLmNvbnN0YW50KDApKTsKCSAgICAgKiAvLyA9PiBbMCwgMCwg
MCwgMF0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSkgewoJICAgICAg
biA9IHRvSW50ZWdlcihuKTsKCSAgICAgIGlmIChuIDwgMSB8fCBuID4gTUFYX1NBRkVfSU5URUdF
UikgewoJICAgICAgICByZXR1cm4gW107CgkgICAgICB9CgkgICAgICB2YXIgaW5kZXggPSBNQVhf
QVJSQVlfTEVOR1RILAoJICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlf
TEVOR1RIKTsKCgkgICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlKTsKCSAgICAg
IG4gLT0gTUFYX0FSUkFZX0xFTkdUSDsKCgkgICAgICB2YXIgcmVzdWx0ID0gYmFzZVRpbWVzKGxl
bmd0aCwgaXRlcmF0ZWUpOwoJICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7CgkgICAgICAgIGl0
ZXJhdGVlKGluZGV4KTsKCSAgICAgIH0KCSAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgfQoKCSAg
ICAvKioKCSAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS4K
CSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5j
ZSA0LjAuMAoJICAgICAqIEBjYXRlZ29yeSBVdGlsCgkgICAgICogQHBhcmFtIHsqfSB2YWx1ZSBU
aGUgdmFsdWUgdG8gY29udmVydC4KCSAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhl
IG5ldyBwcm9wZXJ0eSBwYXRoIGFycmF5LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAg
KiBfLnRvUGF0aCgnYS5iLmMnKTsKCSAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10KCSAgICAg
KgoJICAgICAqIF8udG9QYXRoKCdhWzBdLmIuYycpOwoJICAgICAqIC8vID0+IFsnYScsICcwJywg
J2InLCAnYyddCgkgICAgICovCgkgICAgZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7CgkgICAgICBp
ZiAoaXNBcnJheSh2YWx1ZSkpIHsKCSAgICAgICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCB0b0tl
eSk7CgkgICAgICB9CgkgICAgICByZXR1cm4gaXNTeW1ib2wodmFsdWUpID8gW3ZhbHVlXSA6IGNv
cHlBcnJheShzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKSk7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgSUQuIElmIGBwcmVmaXhgIGlzIGdpdmVuLCB0aGUg
SUQgaXMgYXBwZW5kZWQgdG8gaXQuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQHNp
bmNlIDAuMS4wCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAY2F0ZWdvcnkgVXRpbAoJICAg
ICAqIEBwYXJhbSB7c3RyaW5nfSBbcHJlZml4PScnXSBUaGUgdmFsdWUgdG8gcHJlZml4IHRoZSBJ
RCB3aXRoLgoJICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVuaXF1ZSBJRC4K
CSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy51bmlxdWVJZCgnY29udGFjdF8nKTsK
CSAgICAgKiAvLyA9PiAnY29udGFjdF8xMDQnCgkgICAgICoKCSAgICAgKiBfLnVuaXF1ZUlkKCk7
CgkgICAgICogLy8gPT4gJzEwNScKCSAgICAgKi8KCSAgICBmdW5jdGlvbiB1bmlxdWVJZChwcmVm
aXgpIHsKCSAgICAgIHZhciBpZCA9ICsraWRDb3VudGVyOwoJICAgICAgcmV0dXJuIHRvU3RyaW5n
KHByZWZpeCkgKyBpZDsKCSAgICB9CgoJICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCgkgICAgLyoq
CgkgICAgICogQWRkcyB0d28gbnVtYmVycy4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAg
KiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSAzLjQuMAoJICAgICAqIEBjYXRlZ29yeSBNYXRo
CgkgICAgICogQHBhcmFtIHtudW1iZXJ9IGF1Z2VuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGFuIGFk
ZGl0aW9uLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZGRlbmQgVGhlIHNlY29uZCBudW1iZXIg
aW4gYW4gYWRkaXRpb24uCgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdG90
YWwuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uYWRkKDYsIDQpOwoJICAgICAq
IC8vID0+IDEwCgkgICAgICovCgkgICAgdmFyIGFkZCA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVu
Y3Rpb24oYXVnZW5kLCBhZGRlbmQpIHsKCSAgICAgIHJldHVybiBhdWdlbmQgKyBhZGRlbmQ7Cgkg
ICAgfSwgMCk7CgoJICAgIC8qKgoJICAgICAqIENvbXB1dGVzIGBudW1iZXJgIHJvdW5kZWQgdXAg
dG8gYHByZWNpc2lvbmAuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9m
IF8KCSAgICAgKiBAc2luY2UgMy4xMC4wCgkgICAgICogQGNhdGVnb3J5IE1hdGgKCSAgICAgKiBA
cGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQgdXAuCgkgICAgICogQHBh
cmFtIHtudW1iZXJ9IFtwcmVjaXNpb249MF0gVGhlIHByZWNpc2lvbiB0byByb3VuZCB1cCB0by4K
CSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByb3VuZGVkIHVwIG51bWJlci4K
CSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogXy5jZWlsKDQuMDA2KTsKCSAgICAgKiAv
LyA9PiA1CgkgICAgICoKCSAgICAgKiBfLmNlaWwoNi4wMDQsIDIpOwoJICAgICAqIC8vID0+IDYu
MDEKCSAgICAgKgoJICAgICAqIF8uY2VpbCg2MDQwLCAtMik7CgkgICAgICogLy8gPT4gNjEwMAoJ
ICAgICAqLwoJICAgIHZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTsKCgkgICAgLyoqCgkg
ICAgICogRGl2aWRlIHR3byBudW1iZXJzLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuNy4wCgkgICAgICogQGNhdGVnb3J5IE1hdGgK
CSAgICAgKiBAcGFyYW0ge251bWJlcn0gZGl2aWRlbmQgVGhlIGZpcnN0IG51bWJlciBpbiBhIGRp
dmlzaW9uLgoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpc29yIFRoZSBzZWNvbmQgbnVtYmVy
IGluIGEgZGl2aXNpb24uCgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcXVv
dGllbnQuCgkgICAgICogQGV4YW1wbGUKCSAgICAgKgoJICAgICAqIF8uZGl2aWRlKDYsIDQpOwoJ
ICAgICAqIC8vID0+IDEuNQoJICAgICAqLwoJICAgIHZhciBkaXZpZGUgPSBjcmVhdGVNYXRoT3Bl
cmF0aW9uKGZ1bmN0aW9uKGRpdmlkZW5kLCBkaXZpc29yKSB7CgkgICAgICByZXR1cm4gZGl2aWRl
bmQgLyBkaXZpc29yOwoJICAgIH0sIDEpOwoKCSAgICAvKioKCSAgICAgKiBDb21wdXRlcyBgbnVt
YmVyYCByb3VuZGVkIGRvd24gdG8gYHByZWNpc2lvbmAuCgkgICAgICoKCSAgICAgKiBAc3RhdGlj
CgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy4xMC4wCgkgICAgICogQGNhdGVn
b3J5IE1hdGgKCSAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91
bmQgZG93bi4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lz
aW9uIHRvIHJvdW5kIGRvd24gdG8uCgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0
aGUgcm91bmRlZCBkb3duIG51bWJlci4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICog
Xy5mbG9vcig0LjAwNik7CgkgICAgICogLy8gPT4gNAoJICAgICAqCgkgICAgICogXy5mbG9vcigw
LjA0NiwgMik7CgkgICAgICogLy8gPT4gMC4wNAoJICAgICAqCgkgICAgICogXy5mbG9vcig0MDYw
LCAtMik7CgkgICAgICogLy8gPT4gNDAwMAoJICAgICAqLwoJICAgIHZhciBmbG9vciA9IGNyZWF0
ZVJvdW5kKCdmbG9vcicpOwoKCSAgICAvKioKCSAgICAgKiBDb21wdXRlcyB0aGUgbWF4aW11bSB2
YWx1ZSBvZiBgYXJyYXlgLiBJZiBgYXJyYXlgIGlzIGVtcHR5IG9yIGZhbHNleSwKCSAgICAgKiBg
dW5kZWZpbmVkYCBpcyByZXR1cm5lZC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBA
c2luY2UgMC4xLjAKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBjYXRlZ29yeSBNYXRoCgkg
ICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KCSAg
ICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZS4KCSAgICAgKiBAZXhh
bXBsZQoJICAgICAqCgkgICAgICogXy5tYXgoWzQsIDIsIDgsIDZdKTsKCSAgICAgKiAvLyA9PiA4
CgkgICAgICoKCSAgICAgKiBfLm1heChbXSk7CgkgICAgICogLy8gPT4gdW5kZWZpbmVkCgkgICAg
ICovCgkgICAgZnVuY3Rpb24gbWF4KGFycmF5KSB7CgkgICAgICByZXR1cm4gKGFycmF5ICYmIGFy
cmF5Lmxlbmd0aCkKCSAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGlkZW50aXR5LCBiYXNl
R3QpCgkgICAgICAgIDogdW5kZWZpbmVkOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhpcyBt
ZXRob2QgaXMgbGlrZSBgXy5tYXhgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3
aGljaCBpcwoJICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdl
bmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2gKCSAgICAgKiB0aGUgdmFsdWUgaXMgcmFua2Vk
LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS4KCSAg
ICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0
LjAuMAoJICAgICAqIEBjYXRlZ29yeSBNYXRoCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkg
VGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRl
cmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuCgkgICAg
ICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuCgkgICAgICogQGV4YW1w
bGUKCSAgICAgKgoJICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiAxIH0sIHsgJ24nOiAyIH1d
OwoJICAgICAqCgkgICAgICogXy5tYXhCeShvYmplY3RzLCBmdW5jdGlvbihvKSB7IHJldHVybiBv
Lm47IH0pOwoJICAgICAqIC8vID0+IHsgJ24nOiAyIH0KCSAgICAgKgoJICAgICAqIC8vIFRoZSBg
Xy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8ubWF4Qnkob2JqZWN0cywg
J24nKTsKCSAgICAgKiAvLyA9PiB7ICduJzogMiB9CgkgICAgICovCgkgICAgZnVuY3Rpb24gbWF4
QnkoYXJyYXksIGl0ZXJhdGVlKSB7CgkgICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0
aCkKCSAgICAgICAgPyBiYXNlRXh0cmVtdW0oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAy
KSwgYmFzZUd0KQoJICAgICAgICA6IHVuZGVmaW5lZDsKCSAgICB9CgoJICAgIC8qKgoJICAgICAq
IENvbXB1dGVzIHRoZSBtZWFuIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC4KCSAgICAgKgoJICAg
ICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0LjAuMAoJICAg
ICAqIEBjYXRlZ29yeSBNYXRoCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5
IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBt
ZWFuLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLm1lYW4oWzQsIDIsIDgsIDZd
KTsKCSAgICAgKiAvLyA9PiA1CgkgICAgICovCgkgICAgZnVuY3Rpb24gbWVhbihhcnJheSkgewoJ
ICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBpZGVudGl0eSk7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1lYW5gIGV4Y2VwdCB0aGF0IGl0IGFjY2Vw
dHMgYGl0ZXJhdGVlYCB3aGljaCBpcwoJICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBp
biBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBhdmVyYWdlZC4KCSAgICAgKiBU
aGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS4KCSAgICAg
KgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVyT2YgXwoJICAgICAqIEBzaW5jZSA0Ljcu
MAoJICAgICAqIEBjYXRlZ29yeSBNYXRoCgkgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhl
IGFycmF5IHRvIGl0ZXJhdGUgb3Zlci4KCSAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0
ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuCgkgICAgICog
QHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbWVhbi4KCSAgICAgKiBAZXhhbXBsZQoJICAg
ICAqCgkgICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6
IDggfSwgeyAnbic6IDYgfV07CgkgICAgICoKCSAgICAgKiBfLm1lYW5CeShvYmplY3RzLCBmdW5j
dGlvbihvKSB7IHJldHVybiBvLm47IH0pOwoJICAgICAqIC8vID0+IDUKCSAgICAgKgoJICAgICAq
IC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8ubWVhbkJ5
KG9iamVjdHMsICduJyk7CgkgICAgICogLy8gPT4gNQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIG1l
YW5CeShhcnJheSwgaXRlcmF0ZWUpIHsKCSAgICAgIHJldHVybiBiYXNlTWVhbihhcnJheSwgZ2V0
SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTsKCSAgICB9CgoJICAgIC8qKgoJICAgICAqIENvbXB1dGVz
IHRoZSBtaW5pbXVtIHZhbHVlIG9mIGBhcnJheWAuIElmIGBhcnJheWAgaXMgZW1wdHkgb3IgZmFs
c2V5LAoJICAgICAqIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLgoJICAgICAqCgkgICAgICogQHN0
YXRpYwoJICAgICAqIEBzaW5jZSAwLjEuMAoJICAgICAqIEBtZW1iZXJPZiBfCgkgICAgICogQGNh
dGVnb3J5IE1hdGgKCSAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRl
cmF0ZSBvdmVyLgoJICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtaW5pbXVtIHZhbHVl
LgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLm1pbihbNCwgMiwgOCwgNl0pOwoJ
ICAgICAqIC8vID0+IDIKCSAgICAgKgoJICAgICAqIF8ubWluKFtdKTsKCSAgICAgKiAvLyA9PiB1
bmRlZmluZWQKCSAgICAgKi8KCSAgICBmdW5jdGlvbiBtaW4oYXJyYXkpIHsKCSAgICAgIHJldHVy
biAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKQoJICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwg
aWRlbnRpdHksIGJhc2VMdCkKCSAgICAgICAgOiB1bmRlZmluZWQ7CgkgICAgfQoKCSAgICAvKioK
CSAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1pbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0
cyBgaXRlcmF0ZWVgIHdoaWNoIGlzCgkgICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGlu
IGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaAoJICAgICAqIHRoZSB2
YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50
OiAodmFsdWUpLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAqIEBtZW1iZXJPZiBfCgkg
ICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IE1hdGgKCSAgICAgKiBAcGFyYW0g
e0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLgoJICAgICAqIEBwYXJhbSB7
RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIg
ZWxlbWVudC4KCSAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZS4K
CSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDEg
fSwgeyAnbic6IDIgfV07CgkgICAgICoKCSAgICAgKiBfLm1pbkJ5KG9iamVjdHMsIGZ1bmN0aW9u
KG8pIHsgcmV0dXJuIG8ubjsgfSk7CgkgICAgICogLy8gPT4geyAnbic6IDEgfQoJICAgICAqCgkg
ICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuCgkgICAgICogXy5t
aW5CeShvYmplY3RzLCAnbicpOwoJICAgICAqIC8vID0+IHsgJ24nOiAxIH0KCSAgICAgKi8KCSAg
ICBmdW5jdGlvbiBtaW5CeShhcnJheSwgaXRlcmF0ZWUpIHsKCSAgICAgIHJldHVybiAoYXJyYXkg
JiYgYXJyYXkubGVuZ3RoKQoJICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgZ2V0SXRlcmF0
ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlTHQpCgkgICAgICAgIDogdW5kZWZpbmVkOwoJICAgIH0KCgkg
ICAgLyoqCgkgICAgICogTXVsdGlwbHkgdHdvIG51bWJlcnMuCgkgICAgICoKCSAgICAgKiBAc3Rh
dGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC43LjAKCSAgICAgKiBAY2F0
ZWdvcnkgTWF0aAoJICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aXBsaWVyIFRoZSBmaXJzdCBu
dW1iZXIgaW4gYSBtdWx0aXBsaWNhdGlvbi4KCSAgICAgKiBAcGFyYW0ge251bWJlcn0gbXVsdGlw
bGljYW5kIFRoZSBzZWNvbmQgbnVtYmVyIGluIGEgbXVsdGlwbGljYXRpb24uCgkgICAgICogQHJl
dHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcHJvZHVjdC4KCSAgICAgKiBAZXhhbXBsZQoJICAg
ICAqCgkgICAgICogXy5tdWx0aXBseSg2LCA0KTsKCSAgICAgKiAvLyA9PiAyNAoJICAgICAqLwoJ
ICAgIHZhciBtdWx0aXBseSA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24obXVsdGlwbGll
ciwgbXVsdGlwbGljYW5kKSB7CgkgICAgICByZXR1cm4gbXVsdGlwbGllciAqIG11bHRpcGxpY2Fu
ZDsKCSAgICB9LCAxKTsKCgkgICAgLyoqCgkgICAgICogQ29tcHV0ZXMgYG51bWJlcmAgcm91bmRl
ZCB0byBgcHJlY2lzaW9uYC4KCSAgICAgKgoJICAgICAqIEBzdGF0aWMKCSAgICAgKiBAbWVtYmVy
T2YgXwoJICAgICAqIEBzaW5jZSAzLjEwLjAKCSAgICAgKiBAY2F0ZWdvcnkgTWF0aAoJICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgVGhlIG51bWJlciB0byByb3VuZC4KCSAgICAgKiBAcGFy
YW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIHRvLgoJICAg
ICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHJvdW5kZWQgbnVtYmVyLgoJICAgICAq
IEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnJvdW5kKDQuMDA2KTsKCSAgICAgKiAvLyA9PiA0
CgkgICAgICoKCSAgICAgKiBfLnJvdW5kKDQuMDA2LCAyKTsKCSAgICAgKiAvLyA9PiA0LjAxCgkg
ICAgICoKCSAgICAgKiBfLnJvdW5kKDQwNjAsIC0yKTsKCSAgICAgKiAvLyA9PiA0MTAwCgkgICAg
ICovCgkgICAgdmFyIHJvdW5kID0gY3JlYXRlUm91bmQoJ3JvdW5kJyk7CgoJICAgIC8qKgoJICAg
ICAqIFN1YnRyYWN0IHR3byBudW1iZXJzLgoJICAgICAqCgkgICAgICogQHN0YXRpYwoJICAgICAq
IEBtZW1iZXJPZiBfCgkgICAgICogQHNpbmNlIDQuMC4wCgkgICAgICogQGNhdGVnb3J5IE1hdGgK
CSAgICAgKiBAcGFyYW0ge251bWJlcn0gbWludWVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgc3Vi
dHJhY3Rpb24uCgkgICAgICogQHBhcmFtIHtudW1iZXJ9IHN1YnRyYWhlbmQgVGhlIHNlY29uZCBu
dW1iZXIgaW4gYSBzdWJ0cmFjdGlvbi4KCSAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5z
IHRoZSBkaWZmZXJlbmNlLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnN1YnRy
YWN0KDYsIDQpOwoJICAgICAqIC8vID0+IDIKCSAgICAgKi8KCSAgICB2YXIgc3VidHJhY3QgPSBj
cmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKG1pbnVlbmQsIHN1YnRyYWhlbmQpIHsKCSAgICAg
IHJldHVybiBtaW51ZW5kIC0gc3VidHJhaGVuZDsKCSAgICB9LCAwKTsKCgkgICAgLyoqCgkgICAg
ICogQ29tcHV0ZXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIGluIGBhcnJheWAuCgkgICAgICoKCSAg
ICAgKiBAc3RhdGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgMy40LjAKCSAg
ICAgKiBAY2F0ZWdvcnkgTWF0aAoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJh
eSB0byBpdGVyYXRlIG92ZXIuCgkgICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUg
c3VtLgoJICAgICAqIEBleGFtcGxlCgkgICAgICoKCSAgICAgKiBfLnN1bShbNCwgMiwgOCwgNl0p
OwoJICAgICAqIC8vID0+IDIwCgkgICAgICovCgkgICAgZnVuY3Rpb24gc3VtKGFycmF5KSB7Cgkg
ICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkKCSAgICAgICAgPyBiYXNlU3VtKGFy
cmF5LCBpZGVudGl0eSkKCSAgICAgICAgOiAwOwoJICAgIH0KCgkgICAgLyoqCgkgICAgICogVGhp
cyBtZXRob2QgaXMgbGlrZSBgXy5zdW1gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVl
YCB3aGljaCBpcwoJICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRv
IGdlbmVyYXRlIHRoZSB2YWx1ZSB0byBiZSBzdW1tZWQuCgkgICAgICogVGhlIGl0ZXJhdGVlIGlz
IGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuCgkgICAgICoKCSAgICAgKiBAc3Rh
dGljCgkgICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAc2luY2UgNC4wLjAKCSAgICAgKiBAY2F0
ZWdvcnkgTWF0aAoJICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVy
YXRlIG92ZXIuCgkgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHld
IFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LgoJICAgICAqIEByZXR1cm5zIHtudW1i
ZXJ9IFJldHVybnMgdGhlIHN1bS4KCSAgICAgKiBAZXhhbXBsZQoJICAgICAqCgkgICAgICogdmFy
IG9iamVjdHMgPSBbeyAnbic6IDQgfSwgeyAnbic6IDIgfSwgeyAnbic6IDggfSwgeyAnbic6IDYg
fV07CgkgICAgICoKCSAgICAgKiBfLnN1bUJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJu
IG8ubjsgfSk7CgkgICAgICogLy8gPT4gMjAKCSAgICAgKgoJICAgICAqIC8vIFRoZSBgXy5wcm9w
ZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLgoJICAgICAqIF8uc3VtQnkob2JqZWN0cywgJ24nKTsK
CSAgICAgKiAvLyA9PiAyMAoJICAgICAqLwoJICAgIGZ1bmN0aW9uIHN1bUJ5KGFycmF5LCBpdGVy
YXRlZSkgewoJICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpCgkgICAgICAgID8g
YmFzZVN1bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKQoJICAgICAgICA6IDA7Cgkg
ICAgfQoKCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAgIC8vIEFkZCBtZXRob2RzIHRoYXQg
cmV0dXJuIHdyYXBwZWQgdmFsdWVzIGluIGNoYWluIHNlcXVlbmNlcy4KCSAgICBsb2Rhc2guYWZ0
ZXIgPSBhZnRlcjsKCSAgICBsb2Rhc2guYXJ5ID0gYXJ5OwoJICAgIGxvZGFzaC5hc3NpZ24gPSBh
c3NpZ247CgkgICAgbG9kYXNoLmFzc2lnbkluID0gYXNzaWduSW47CgkgICAgbG9kYXNoLmFzc2ln
bkluV2l0aCA9IGFzc2lnbkluV2l0aDsKCSAgICBsb2Rhc2guYXNzaWduV2l0aCA9IGFzc2lnbldp
dGg7CgkgICAgbG9kYXNoLmF0ID0gYXQ7CgkgICAgbG9kYXNoLmJlZm9yZSA9IGJlZm9yZTsKCSAg
ICBsb2Rhc2guYmluZCA9IGJpbmQ7CgkgICAgbG9kYXNoLmJpbmRBbGwgPSBiaW5kQWxsOwoJICAg
IGxvZGFzaC5iaW5kS2V5ID0gYmluZEtleTsKCSAgICBsb2Rhc2guY2FzdEFycmF5ID0gY2FzdEFy
cmF5OwoJICAgIGxvZGFzaC5jaGFpbiA9IGNoYWluOwoJICAgIGxvZGFzaC5jaHVuayA9IGNodW5r
OwoJICAgIGxvZGFzaC5jb21wYWN0ID0gY29tcGFjdDsKCSAgICBsb2Rhc2guY29uY2F0ID0gY29u
Y2F0OwoJICAgIGxvZGFzaC5jb25kID0gY29uZDsKCSAgICBsb2Rhc2guY29uZm9ybXMgPSBjb25m
b3JtczsKCSAgICBsb2Rhc2guY29uc3RhbnQgPSBjb25zdGFudDsKCSAgICBsb2Rhc2guY291bnRC
eSA9IGNvdW50Qnk7CgkgICAgbG9kYXNoLmNyZWF0ZSA9IGNyZWF0ZTsKCSAgICBsb2Rhc2guY3Vy
cnkgPSBjdXJyeTsKCSAgICBsb2Rhc2guY3VycnlSaWdodCA9IGN1cnJ5UmlnaHQ7CgkgICAgbG9k
YXNoLmRlYm91bmNlID0gZGVib3VuY2U7CgkgICAgbG9kYXNoLmRlZmF1bHRzID0gZGVmYXVsdHM7
CgkgICAgbG9kYXNoLmRlZmF1bHRzRGVlcCA9IGRlZmF1bHRzRGVlcDsKCSAgICBsb2Rhc2guZGVm
ZXIgPSBkZWZlcjsKCSAgICBsb2Rhc2guZGVsYXkgPSBkZWxheTsKCSAgICBsb2Rhc2guZGlmZmVy
ZW5jZSA9IGRpZmZlcmVuY2U7CgkgICAgbG9kYXNoLmRpZmZlcmVuY2VCeSA9IGRpZmZlcmVuY2VC
eTsKCSAgICBsb2Rhc2guZGlmZmVyZW5jZVdpdGggPSBkaWZmZXJlbmNlV2l0aDsKCSAgICBsb2Rh
c2guZHJvcCA9IGRyb3A7CgkgICAgbG9kYXNoLmRyb3BSaWdodCA9IGRyb3BSaWdodDsKCSAgICBs
b2Rhc2guZHJvcFJpZ2h0V2hpbGUgPSBkcm9wUmlnaHRXaGlsZTsKCSAgICBsb2Rhc2guZHJvcFdo
aWxlID0gZHJvcFdoaWxlOwoJICAgIGxvZGFzaC5maWxsID0gZmlsbDsKCSAgICBsb2Rhc2guZmls
dGVyID0gZmlsdGVyOwoJICAgIGxvZGFzaC5mbGF0TWFwID0gZmxhdE1hcDsKCSAgICBsb2Rhc2gu
ZmxhdE1hcERlZXAgPSBmbGF0TWFwRGVlcDsKCSAgICBsb2Rhc2guZmxhdE1hcERlcHRoID0gZmxh
dE1hcERlcHRoOwoJICAgIGxvZGFzaC5mbGF0dGVuID0gZmxhdHRlbjsKCSAgICBsb2Rhc2guZmxh
dHRlbkRlZXAgPSBmbGF0dGVuRGVlcDsKCSAgICBsb2Rhc2guZmxhdHRlbkRlcHRoID0gZmxhdHRl
bkRlcHRoOwoJICAgIGxvZGFzaC5mbGlwID0gZmxpcDsKCSAgICBsb2Rhc2guZmxvdyA9IGZsb3c7
CgkgICAgbG9kYXNoLmZsb3dSaWdodCA9IGZsb3dSaWdodDsKCSAgICBsb2Rhc2guZnJvbVBhaXJz
ID0gZnJvbVBhaXJzOwoJICAgIGxvZGFzaC5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7CgkgICAgbG9k
YXNoLmZ1bmN0aW9uc0luID0gZnVuY3Rpb25zSW47CgkgICAgbG9kYXNoLmdyb3VwQnkgPSBncm91
cEJ5OwoJICAgIGxvZGFzaC5pbml0aWFsID0gaW5pdGlhbDsKCSAgICBsb2Rhc2guaW50ZXJzZWN0
aW9uID0gaW50ZXJzZWN0aW9uOwoJICAgIGxvZGFzaC5pbnRlcnNlY3Rpb25CeSA9IGludGVyc2Vj
dGlvbkJ5OwoJICAgIGxvZGFzaC5pbnRlcnNlY3Rpb25XaXRoID0gaW50ZXJzZWN0aW9uV2l0aDsK
CSAgICBsb2Rhc2guaW52ZXJ0ID0gaW52ZXJ0OwoJICAgIGxvZGFzaC5pbnZlcnRCeSA9IGludmVy
dEJ5OwoJICAgIGxvZGFzaC5pbnZva2VNYXAgPSBpbnZva2VNYXA7CgkgICAgbG9kYXNoLml0ZXJh
dGVlID0gaXRlcmF0ZWU7CgkgICAgbG9kYXNoLmtleUJ5ID0ga2V5Qnk7CgkgICAgbG9kYXNoLmtl
eXMgPSBrZXlzOwoJICAgIGxvZGFzaC5rZXlzSW4gPSBrZXlzSW47CgkgICAgbG9kYXNoLm1hcCA9
IG1hcDsKCSAgICBsb2Rhc2gubWFwS2V5cyA9IG1hcEtleXM7CgkgICAgbG9kYXNoLm1hcFZhbHVl
cyA9IG1hcFZhbHVlczsKCSAgICBsb2Rhc2gubWF0Y2hlcyA9IG1hdGNoZXM7CgkgICAgbG9kYXNo
Lm1hdGNoZXNQcm9wZXJ0eSA9IG1hdGNoZXNQcm9wZXJ0eTsKCSAgICBsb2Rhc2gubWVtb2l6ZSA9
IG1lbW9pemU7CgkgICAgbG9kYXNoLm1lcmdlID0gbWVyZ2U7CgkgICAgbG9kYXNoLm1lcmdlV2l0
aCA9IG1lcmdlV2l0aDsKCSAgICBsb2Rhc2gubWV0aG9kID0gbWV0aG9kOwoJICAgIGxvZGFzaC5t
ZXRob2RPZiA9IG1ldGhvZE9mOwoJICAgIGxvZGFzaC5taXhpbiA9IG1peGluOwoJICAgIGxvZGFz
aC5uZWdhdGUgPSBuZWdhdGU7CgkgICAgbG9kYXNoLm50aEFyZyA9IG50aEFyZzsKCSAgICBsb2Rh
c2gub21pdCA9IG9taXQ7CgkgICAgbG9kYXNoLm9taXRCeSA9IG9taXRCeTsKCSAgICBsb2Rhc2gu
b25jZSA9IG9uY2U7CgkgICAgbG9kYXNoLm9yZGVyQnkgPSBvcmRlckJ5OwoJICAgIGxvZGFzaC5v
dmVyID0gb3ZlcjsKCSAgICBsb2Rhc2gub3ZlckFyZ3MgPSBvdmVyQXJnczsKCSAgICBsb2Rhc2gu
b3ZlckV2ZXJ5ID0gb3ZlckV2ZXJ5OwoJICAgIGxvZGFzaC5vdmVyU29tZSA9IG92ZXJTb21lOwoJ
ICAgIGxvZGFzaC5wYXJ0aWFsID0gcGFydGlhbDsKCSAgICBsb2Rhc2gucGFydGlhbFJpZ2h0ID0g
cGFydGlhbFJpZ2h0OwoJICAgIGxvZGFzaC5wYXJ0aXRpb24gPSBwYXJ0aXRpb247CgkgICAgbG9k
YXNoLnBpY2sgPSBwaWNrOwoJICAgIGxvZGFzaC5waWNrQnkgPSBwaWNrQnk7CgkgICAgbG9kYXNo
LnByb3BlcnR5ID0gcHJvcGVydHk7CgkgICAgbG9kYXNoLnByb3BlcnR5T2YgPSBwcm9wZXJ0eU9m
OwoJICAgIGxvZGFzaC5wdWxsID0gcHVsbDsKCSAgICBsb2Rhc2gucHVsbEFsbCA9IHB1bGxBbGw7
CgkgICAgbG9kYXNoLnB1bGxBbGxCeSA9IHB1bGxBbGxCeTsKCSAgICBsb2Rhc2gucHVsbEFsbFdp
dGggPSBwdWxsQWxsV2l0aDsKCSAgICBsb2Rhc2gucHVsbEF0ID0gcHVsbEF0OwoJICAgIGxvZGFz
aC5yYW5nZSA9IHJhbmdlOwoJICAgIGxvZGFzaC5yYW5nZVJpZ2h0ID0gcmFuZ2VSaWdodDsKCSAg
ICBsb2Rhc2gucmVhcmcgPSByZWFyZzsKCSAgICBsb2Rhc2gucmVqZWN0ID0gcmVqZWN0OwoJICAg
IGxvZGFzaC5yZW1vdmUgPSByZW1vdmU7CgkgICAgbG9kYXNoLnJlc3QgPSByZXN0OwoJICAgIGxv
ZGFzaC5yZXZlcnNlID0gcmV2ZXJzZTsKCSAgICBsb2Rhc2guc2FtcGxlU2l6ZSA9IHNhbXBsZVNp
emU7CgkgICAgbG9kYXNoLnNldCA9IHNldDsKCSAgICBsb2Rhc2guc2V0V2l0aCA9IHNldFdpdGg7
CgkgICAgbG9kYXNoLnNodWZmbGUgPSBzaHVmZmxlOwoJICAgIGxvZGFzaC5zbGljZSA9IHNsaWNl
OwoJICAgIGxvZGFzaC5zb3J0QnkgPSBzb3J0Qnk7CgkgICAgbG9kYXNoLnNvcnRlZFVuaXEgPSBz
b3J0ZWRVbmlxOwoJICAgIGxvZGFzaC5zb3J0ZWRVbmlxQnkgPSBzb3J0ZWRVbmlxQnk7CgkgICAg
bG9kYXNoLnNwbGl0ID0gc3BsaXQ7CgkgICAgbG9kYXNoLnNwcmVhZCA9IHNwcmVhZDsKCSAgICBs
b2Rhc2gudGFpbCA9IHRhaWw7CgkgICAgbG9kYXNoLnRha2UgPSB0YWtlOwoJICAgIGxvZGFzaC50
YWtlUmlnaHQgPSB0YWtlUmlnaHQ7CgkgICAgbG9kYXNoLnRha2VSaWdodFdoaWxlID0gdGFrZVJp
Z2h0V2hpbGU7CgkgICAgbG9kYXNoLnRha2VXaGlsZSA9IHRha2VXaGlsZTsKCSAgICBsb2Rhc2gu
dGFwID0gdGFwOwoJICAgIGxvZGFzaC50aHJvdHRsZSA9IHRocm90dGxlOwoJICAgIGxvZGFzaC50
aHJ1ID0gdGhydTsKCSAgICBsb2Rhc2gudG9BcnJheSA9IHRvQXJyYXk7CgkgICAgbG9kYXNoLnRv
UGFpcnMgPSB0b1BhaXJzOwoJICAgIGxvZGFzaC50b1BhaXJzSW4gPSB0b1BhaXJzSW47CgkgICAg
bG9kYXNoLnRvUGF0aCA9IHRvUGF0aDsKCSAgICBsb2Rhc2gudG9QbGFpbk9iamVjdCA9IHRvUGxh
aW5PYmplY3Q7CgkgICAgbG9kYXNoLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKCSAgICBsb2Rhc2gu
dW5hcnkgPSB1bmFyeTsKCSAgICBsb2Rhc2gudW5pb24gPSB1bmlvbjsKCSAgICBsb2Rhc2gudW5p
b25CeSA9IHVuaW9uQnk7CgkgICAgbG9kYXNoLnVuaW9uV2l0aCA9IHVuaW9uV2l0aDsKCSAgICBs
b2Rhc2gudW5pcSA9IHVuaXE7CgkgICAgbG9kYXNoLnVuaXFCeSA9IHVuaXFCeTsKCSAgICBsb2Rh
c2gudW5pcVdpdGggPSB1bmlxV2l0aDsKCSAgICBsb2Rhc2gudW5zZXQgPSB1bnNldDsKCSAgICBs
b2Rhc2gudW56aXAgPSB1bnppcDsKCSAgICBsb2Rhc2gudW56aXBXaXRoID0gdW56aXBXaXRoOwoJ
ICAgIGxvZGFzaC51cGRhdGUgPSB1cGRhdGU7CgkgICAgbG9kYXNoLnVwZGF0ZVdpdGggPSB1cGRh
dGVXaXRoOwoJICAgIGxvZGFzaC52YWx1ZXMgPSB2YWx1ZXM7CgkgICAgbG9kYXNoLnZhbHVlc0lu
ID0gdmFsdWVzSW47CgkgICAgbG9kYXNoLndpdGhvdXQgPSB3aXRob3V0OwoJICAgIGxvZGFzaC53
b3JkcyA9IHdvcmRzOwoJICAgIGxvZGFzaC53cmFwID0gd3JhcDsKCSAgICBsb2Rhc2gueG9yID0g
eG9yOwoJICAgIGxvZGFzaC54b3JCeSA9IHhvckJ5OwoJICAgIGxvZGFzaC54b3JXaXRoID0geG9y
V2l0aDsKCSAgICBsb2Rhc2guemlwID0gemlwOwoJICAgIGxvZGFzaC56aXBPYmplY3QgPSB6aXBP
YmplY3Q7CgkgICAgbG9kYXNoLnppcE9iamVjdERlZXAgPSB6aXBPYmplY3REZWVwOwoJICAgIGxv
ZGFzaC56aXBXaXRoID0gemlwV2l0aDsKCgkgICAgLy8gQWRkIGFsaWFzZXMuCgkgICAgbG9kYXNo
LmVudHJpZXMgPSB0b1BhaXJzOwoJICAgIGxvZGFzaC5lbnRyaWVzSW4gPSB0b1BhaXJzSW47Cgkg
ICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbkluOwoJICAgIGxvZGFzaC5leHRlbmRXaXRoID0gYXNz
aWduSW5XaXRoOwoKCSAgICAvLyBBZGQgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuCgkg
ICAgbWl4aW4obG9kYXNoLCBsb2Rhc2gpOwoKCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAg
IC8vIEFkZCBtZXRob2RzIHRoYXQgcmV0dXJuIHVud3JhcHBlZCB2YWx1ZXMgaW4gY2hhaW4gc2Vx
dWVuY2VzLgoJICAgIGxvZGFzaC5hZGQgPSBhZGQ7CgkgICAgbG9kYXNoLmF0dGVtcHQgPSBhdHRl
bXB0OwoJICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7CgkgICAgbG9kYXNoLmNhcGl0
YWxpemUgPSBjYXBpdGFsaXplOwoJICAgIGxvZGFzaC5jZWlsID0gY2VpbDsKCSAgICBsb2Rhc2gu
Y2xhbXAgPSBjbGFtcDsKCSAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTsKCSAgICBsb2Rhc2guY2xv
bmVEZWVwID0gY2xvbmVEZWVwOwoJICAgIGxvZGFzaC5jbG9uZURlZXBXaXRoID0gY2xvbmVEZWVw
V2l0aDsKCSAgICBsb2Rhc2guY2xvbmVXaXRoID0gY2xvbmVXaXRoOwoJICAgIGxvZGFzaC5jb25m
b3Jtc1RvID0gY29uZm9ybXNUbzsKCSAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyOwoJICAgIGxv
ZGFzaC5kZWZhdWx0VG8gPSBkZWZhdWx0VG87CgkgICAgbG9kYXNoLmRpdmlkZSA9IGRpdmlkZTsK
CSAgICBsb2Rhc2guZW5kc1dpdGggPSBlbmRzV2l0aDsKCSAgICBsb2Rhc2guZXEgPSBlcTsKCSAg
ICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlOwoJICAgIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2Nh
cGVSZWdFeHA7CgkgICAgbG9kYXNoLmV2ZXJ5ID0gZXZlcnk7CgkgICAgbG9kYXNoLmZpbmQgPSBm
aW5kOwoJICAgIGxvZGFzaC5maW5kSW5kZXggPSBmaW5kSW5kZXg7CgkgICAgbG9kYXNoLmZpbmRL
ZXkgPSBmaW5kS2V5OwoJICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0OwoJICAgIGxvZGFz
aC5maW5kTGFzdEluZGV4ID0gZmluZExhc3RJbmRleDsKCSAgICBsb2Rhc2guZmluZExhc3RLZXkg
PSBmaW5kTGFzdEtleTsKCSAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjsKCSAgICBsb2Rhc2guZm9y
RWFjaCA9IGZvckVhY2g7CgkgICAgbG9kYXNoLmZvckVhY2hSaWdodCA9IGZvckVhY2hSaWdodDsK
CSAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjsKCSAgICBsb2Rhc2guZm9ySW5SaWdodCA9IGZvcklu
UmlnaHQ7CgkgICAgbG9kYXNoLmZvck93biA9IGZvck93bjsKCSAgICBsb2Rhc2guZm9yT3duUmln
aHQgPSBmb3JPd25SaWdodDsKCSAgICBsb2Rhc2guZ2V0ID0gZ2V0OwoJICAgIGxvZGFzaC5ndCA9
IGd0OwoJICAgIGxvZGFzaC5ndGUgPSBndGU7CgkgICAgbG9kYXNoLmhhcyA9IGhhczsKCSAgICBs
b2Rhc2guaGFzSW4gPSBoYXNJbjsKCSAgICBsb2Rhc2guaGVhZCA9IGhlYWQ7CgkgICAgbG9kYXNo
LmlkZW50aXR5ID0gaWRlbnRpdHk7CgkgICAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7Cgkg
ICAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mOwoJICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5n
ZTsKCSAgICBsb2Rhc2guaW52b2tlID0gaW52b2tlOwoJICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9
IGlzQXJndW1lbnRzOwoJICAgIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTsKCSAgICBsb2Rhc2gu
aXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7CgkgICAgbG9kYXNoLmlzQXJyYXlMaWtlID0g
aXNBcnJheUxpa2U7CgkgICAgbG9kYXNoLmlzQXJyYXlMaWtlT2JqZWN0ID0gaXNBcnJheUxpa2VP
YmplY3Q7CgkgICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjsKCSAgICBsb2Rhc2guaXNC
dWZmZXIgPSBpc0J1ZmZlcjsKCSAgICBsb2Rhc2guaXNEYXRlID0gaXNEYXRlOwoJICAgIGxvZGFz
aC5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7CgkgICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5OwoJ
ICAgIGxvZGFzaC5pc0VxdWFsID0gaXNFcXVhbDsKCSAgICBsb2Rhc2guaXNFcXVhbFdpdGggPSBp
c0VxdWFsV2l0aDsKCSAgICBsb2Rhc2guaXNFcnJvciA9IGlzRXJyb3I7CgkgICAgbG9kYXNoLmlz
RmluaXRlID0gaXNGaW5pdGU7CgkgICAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uOwoJ
ICAgIGxvZGFzaC5pc0ludGVnZXIgPSBpc0ludGVnZXI7CgkgICAgbG9kYXNoLmlzTGVuZ3RoID0g
aXNMZW5ndGg7CgkgICAgbG9kYXNoLmlzTWFwID0gaXNNYXA7CgkgICAgbG9kYXNoLmlzTWF0Y2gg
PSBpc01hdGNoOwoJICAgIGxvZGFzaC5pc01hdGNoV2l0aCA9IGlzTWF0Y2hXaXRoOwoJICAgIGxv
ZGFzaC5pc05hTiA9IGlzTmFOOwoJICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlOwoJICAg
IGxvZGFzaC5pc05pbCA9IGlzTmlsOwoJICAgIGxvZGFzaC5pc051bGwgPSBpc051bGw7CgkgICAg
bG9kYXNoLmlzTnVtYmVyID0gaXNOdW1iZXI7CgkgICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmpl
Y3Q7CgkgICAgbG9kYXNoLmlzT2JqZWN0TGlrZSA9IGlzT2JqZWN0TGlrZTsKCSAgICBsb2Rhc2gu
aXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7CgkgICAgbG9kYXNoLmlzUmVnRXhwID0gaXNS
ZWdFeHA7CgkgICAgbG9kYXNoLmlzU2FmZUludGVnZXIgPSBpc1NhZmVJbnRlZ2VyOwoJICAgIGxv
ZGFzaC5pc1NldCA9IGlzU2V0OwoJICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nOwoJICAg
IGxvZGFzaC5pc1N5bWJvbCA9IGlzU3ltYm9sOwoJICAgIGxvZGFzaC5pc1R5cGVkQXJyYXkgPSBp
c1R5cGVkQXJyYXk7CgkgICAgbG9kYXNoLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7CgkgICAg
bG9kYXNoLmlzV2Vha01hcCA9IGlzV2Vha01hcDsKCSAgICBsb2Rhc2guaXNXZWFrU2V0ID0gaXNX
ZWFrU2V0OwoJICAgIGxvZGFzaC5qb2luID0gam9pbjsKCSAgICBsb2Rhc2gua2ViYWJDYXNlID0g
a2ViYWJDYXNlOwoJICAgIGxvZGFzaC5sYXN0ID0gbGFzdDsKCSAgICBsb2Rhc2gubGFzdEluZGV4
T2YgPSBsYXN0SW5kZXhPZjsKCSAgICBsb2Rhc2gubG93ZXJDYXNlID0gbG93ZXJDYXNlOwoJICAg
IGxvZGFzaC5sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDsKCSAgICBsb2Rhc2gubHQgPSBsdDsKCSAg
ICBsb2Rhc2gubHRlID0gbHRlOwoJICAgIGxvZGFzaC5tYXggPSBtYXg7CgkgICAgbG9kYXNoLm1h
eEJ5ID0gbWF4Qnk7CgkgICAgbG9kYXNoLm1lYW4gPSBtZWFuOwoJICAgIGxvZGFzaC5tZWFuQnkg
PSBtZWFuQnk7CgkgICAgbG9kYXNoLm1pbiA9IG1pbjsKCSAgICBsb2Rhc2gubWluQnkgPSBtaW5C
eTsKCSAgICBsb2Rhc2guc3R1YkFycmF5ID0gc3R1YkFycmF5OwoJICAgIGxvZGFzaC5zdHViRmFs
c2UgPSBzdHViRmFsc2U7CgkgICAgbG9kYXNoLnN0dWJPYmplY3QgPSBzdHViT2JqZWN0OwoJICAg
IGxvZGFzaC5zdHViU3RyaW5nID0gc3R1YlN0cmluZzsKCSAgICBsb2Rhc2guc3R1YlRydWUgPSBz
dHViVHJ1ZTsKCSAgICBsb2Rhc2gubXVsdGlwbHkgPSBtdWx0aXBseTsKCSAgICBsb2Rhc2gubnRo
ID0gbnRoOwoJICAgIGxvZGFzaC5ub0NvbmZsaWN0ID0gbm9Db25mbGljdDsKCSAgICBsb2Rhc2gu
bm9vcCA9IG5vb3A7CgkgICAgbG9kYXNoLm5vdyA9IG5vdzsKCSAgICBsb2Rhc2gucGFkID0gcGFk
OwoJICAgIGxvZGFzaC5wYWRFbmQgPSBwYWRFbmQ7CgkgICAgbG9kYXNoLnBhZFN0YXJ0ID0gcGFk
U3RhcnQ7CgkgICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7CgkgICAgbG9kYXNoLnJhbmRv
bSA9IHJhbmRvbTsKCSAgICBsb2Rhc2gucmVkdWNlID0gcmVkdWNlOwoJICAgIGxvZGFzaC5yZWR1
Y2VSaWdodCA9IHJlZHVjZVJpZ2h0OwoJICAgIGxvZGFzaC5yZXBlYXQgPSByZXBlYXQ7CgkgICAg
bG9kYXNoLnJlcGxhY2UgPSByZXBsYWNlOwoJICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7Cgkg
ICAgbG9kYXNoLnJvdW5kID0gcm91bmQ7CgkgICAgbG9kYXNoLnJ1bkluQ29udGV4dCA9IHJ1bklu
Q29udGV4dDsKCSAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlOwoJICAgIGxvZGFzaC5zaXplID0g
c2l6ZTsKCSAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlOwoJICAgIGxvZGFzaC5zb21l
ID0gc29tZTsKCSAgICBsb2Rhc2guc29ydGVkSW5kZXggPSBzb3J0ZWRJbmRleDsKCSAgICBsb2Rh
c2guc29ydGVkSW5kZXhCeSA9IHNvcnRlZEluZGV4Qnk7CgkgICAgbG9kYXNoLnNvcnRlZEluZGV4
T2YgPSBzb3J0ZWRJbmRleE9mOwoJICAgIGxvZGFzaC5zb3J0ZWRMYXN0SW5kZXggPSBzb3J0ZWRM
YXN0SW5kZXg7CgkgICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleEJ5ID0gc29ydGVkTGFzdEluZGV4
Qnk7CgkgICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleE9mID0gc29ydGVkTGFzdEluZGV4T2Y7Cgkg
ICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTsKCSAgICBsb2Rhc2guc3RhcnRzV2l0aCA9
IHN0YXJ0c1dpdGg7CgkgICAgbG9kYXNoLnN1YnRyYWN0ID0gc3VidHJhY3Q7CgkgICAgbG9kYXNo
LnN1bSA9IHN1bTsKCSAgICBsb2Rhc2guc3VtQnkgPSBzdW1CeTsKCSAgICBsb2Rhc2gudGVtcGxh
dGUgPSB0ZW1wbGF0ZTsKCSAgICBsb2Rhc2gudGltZXMgPSB0aW1lczsKCSAgICBsb2Rhc2gudG9G
aW5pdGUgPSB0b0Zpbml0ZTsKCSAgICBsb2Rhc2gudG9JbnRlZ2VyID0gdG9JbnRlZ2VyOwoJICAg
IGxvZGFzaC50b0xlbmd0aCA9IHRvTGVuZ3RoOwoJICAgIGxvZGFzaC50b0xvd2VyID0gdG9Mb3dl
cjsKCSAgICBsb2Rhc2gudG9OdW1iZXIgPSB0b051bWJlcjsKCSAgICBsb2Rhc2gudG9TYWZlSW50
ZWdlciA9IHRvU2FmZUludGVnZXI7CgkgICAgbG9kYXNoLnRvU3RyaW5nID0gdG9TdHJpbmc7Cgkg
ICAgbG9kYXNoLnRvVXBwZXIgPSB0b1VwcGVyOwoJICAgIGxvZGFzaC50cmltID0gdHJpbTsKCSAg
ICBsb2Rhc2gudHJpbUVuZCA9IHRyaW1FbmQ7CgkgICAgbG9kYXNoLnRyaW1TdGFydCA9IHRyaW1T
dGFydDsKCSAgICBsb2Rhc2gudHJ1bmNhdGUgPSB0cnVuY2F0ZTsKCSAgICBsb2Rhc2gudW5lc2Nh
cGUgPSB1bmVzY2FwZTsKCSAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDsKCSAgICBsb2Rh
c2gudXBwZXJDYXNlID0gdXBwZXJDYXNlOwoJICAgIGxvZGFzaC51cHBlckZpcnN0ID0gdXBwZXJG
aXJzdDsKCgkgICAgLy8gQWRkIGFsaWFzZXMuCgkgICAgbG9kYXNoLmVhY2ggPSBmb3JFYWNoOwoJ
ICAgIGxvZGFzaC5lYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7CgkgICAgbG9kYXNoLmZpcnN0ID0g
aGVhZDsKCgkgICAgbWl4aW4obG9kYXNoLCAoZnVuY3Rpb24oKSB7CgkgICAgICB2YXIgc291cmNl
ID0ge307CgkgICAgICBiYXNlRm9yT3duKGxvZGFzaCwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFt
ZSkgewoJICAgICAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwobG9kYXNoLnByb3RvdHlwZSwg
bWV0aG9kTmFtZSkpIHsKCSAgICAgICAgICBzb3VyY2VbbWV0aG9kTmFtZV0gPSBmdW5jOwoJICAg
ICAgICB9CgkgICAgICB9KTsKCSAgICAgIHJldHVybiBzb3VyY2U7CgkgICAgfSgpKSwgeyAnY2hh
aW4nOiBmYWxzZSB9KTsKCgkgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCSAgICAvKioKCSAgICAg
KiBUaGUgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIuCgkgICAgICoKCSAgICAgKiBAc3RhdGljCgkg
ICAgICogQG1lbWJlck9mIF8KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoJICAgIGxv
ZGFzaC5WRVJTSU9OID0gVkVSU0lPTjsKCgkgICAgLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xk
ZXJzLgoJICAgIGFycmF5RWFjaChbJ2JpbmQnLCAnYmluZEtleScsICdjdXJyeScsICdjdXJyeVJp
Z2h0JywgJ3BhcnRpYWwnLCAncGFydGlhbFJpZ2h0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsK
CSAgICAgIGxvZGFzaFttZXRob2ROYW1lXS5wbGFjZWhvbGRlciA9IGxvZGFzaDsKCSAgICB9KTsK
CgkgICAgLy8gQWRkIGBMYXp5V3JhcHBlcmAgbWV0aG9kcyBmb3IgYF8uZHJvcGAgYW5kIGBfLnRh
a2VgIHZhcmlhbnRzLgoJICAgIGFycmF5RWFjaChbJ2Ryb3AnLCAndGFrZSddLCBmdW5jdGlvbiht
ZXRob2ROYW1lLCBpbmRleCkgewoJICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5h
bWVdID0gZnVuY3Rpb24obikgewoJICAgICAgICBuID0gbiA9PT0gdW5kZWZpbmVkID8gMSA6IG5h
dGl2ZU1heCh0b0ludGVnZXIobiksIDApOwoKCSAgICAgICAgdmFyIHJlc3VsdCA9ICh0aGlzLl9f
ZmlsdGVyZWRfXyAmJiAhaW5kZXgpCgkgICAgICAgICAgPyBuZXcgTGF6eVdyYXBwZXIodGhpcykK
CSAgICAgICAgICA6IHRoaXMuY2xvbmUoKTsKCgkgICAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJl
ZF9fKSB7CgkgICAgICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSBuYXRpdmVNaW4obiwgcmVz
dWx0Ll9fdGFrZUNvdW50X18pOwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIHJlc3VsdC5f
X3ZpZXdzX18ucHVzaCh7CgkgICAgICAgICAgICAnc2l6ZSc6IG5hdGl2ZU1pbihuLCBNQVhfQVJS
QVlfTEVOR1RIKSwKCSAgICAgICAgICAgICd0eXBlJzogbWV0aG9kTmFtZSArIChyZXN1bHQuX19k
aXJfXyA8IDAgPyAnUmlnaHQnIDogJycpCgkgICAgICAgICAgfSk7CgkgICAgICAgIH0KCSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKCSAgICAgIH07CgoJICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBl
W21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHsKCSAgICAgICAgcmV0dXJuIHRo
aXMucmV2ZXJzZSgpW21ldGhvZE5hbWVdKG4pLnJldmVyc2UoKTsKCSAgICAgIH07CgkgICAgfSk7
CgoJICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgdGhhdCBhY2NlcHQgYW4gYGl0ZXJh
dGVlYCB2YWx1ZS4KCSAgICBhcnJheUVhY2goWydmaWx0ZXInLCAnbWFwJywgJ3Rha2VXaGlsZSdd
LCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkgewoJICAgICAgdmFyIHR5cGUgPSBpbmRleCAr
IDEsCgkgICAgICAgICAgaXNGaWx0ZXIgPSB0eXBlID09IExBWllfRklMVEVSX0ZMQUcgfHwgdHlw
ZSA9PSBMQVpZX1dISUxFX0ZMQUc7CgoJICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhv
ZE5hbWVdID0gZnVuY3Rpb24oaXRlcmF0ZWUpIHsKCSAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMu
Y2xvbmUoKTsKCSAgICAgICAgcmVzdWx0Ll9faXRlcmF0ZWVzX18ucHVzaCh7CgkgICAgICAgICAg
J2l0ZXJhdGVlJzogZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpLAoJICAgICAgICAgICd0eXBlJzog
dHlwZQoJICAgICAgICB9KTsKCSAgICAgICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHJlc3VsdC5f
X2ZpbHRlcmVkX18gfHwgaXNGaWx0ZXI7CgkgICAgICAgIHJldHVybiByZXN1bHQ7CgkgICAgICB9
OwoJICAgIH0pOwoKCSAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5oZWFk
YCBhbmQgYF8ubGFzdGAuCgkgICAgYXJyYXlFYWNoKFsnaGVhZCcsICdsYXN0J10sIGZ1bmN0aW9u
KG1ldGhvZE5hbWUsIGluZGV4KSB7CgkgICAgICB2YXIgdGFrZU5hbWUgPSAndGFrZScgKyAoaW5k
ZXggPyAnUmlnaHQnIDogJycpOwoKCSAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2RO
YW1lXSA9IGZ1bmN0aW9uKCkgewoJICAgICAgICByZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFs
dWUoKVswXTsKCSAgICAgIH07CgkgICAgfSk7CgoJICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1l
dGhvZHMgZm9yIGBfLmluaXRpYWxgIGFuZCBgXy50YWlsYC4KCSAgICBhcnJheUVhY2goWydpbml0
aWFsJywgJ3RhaWwnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHsKCSAgICAgIHZhciBk
cm9wTmFtZSA9ICdkcm9wJyArIChpbmRleCA/ICcnIDogJ1JpZ2h0Jyk7CgoJICAgICAgTGF6eVdy
YXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7CgkgICAgICAgIHJldHVy
biB0aGlzLl9fZmlsdGVyZWRfXyA/IG5ldyBMYXp5V3JhcHBlcih0aGlzKSA6IHRoaXNbZHJvcE5h
bWVdKDEpOwoJICAgICAgfTsKCSAgICB9KTsKCgkgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNv
bXBhY3QgPSBmdW5jdGlvbigpIHsKCSAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7
CgkgICAgfTsKCgkgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbihwcmVk
aWNhdGUpIHsKCSAgICAgIHJldHVybiB0aGlzLmZpbHRlcihwcmVkaWNhdGUpLmhlYWQoKTsKCSAg
ICB9OwoKCSAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuZmluZExhc3QgPSBmdW5jdGlvbihwcmVk
aWNhdGUpIHsKCSAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS5maW5kKHByZWRpY2F0ZSk7Cgkg
ICAgfTsKCgkgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmludm9rZU1hcCA9IGJhc2VSZXN0KGZ1
bmN0aW9uKHBhdGgsIGFyZ3MpIHsKCSAgICAgIGlmICh0eXBlb2YgcGF0aCA9PSAnZnVuY3Rpb24n
KSB7CgkgICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7CgkgICAgICB9CgkgICAg
ICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpIHsKCSAgICAgICAgcmV0dXJuIGJhc2VJ
bnZva2UodmFsdWUsIHBhdGgsIGFyZ3MpOwoJICAgICAgfSk7CgkgICAgfSk7CgoJICAgIExhenlX
cmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHsKCSAgICAgIHJl
dHVybiB0aGlzLmZpbHRlcihuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlKSkpOwoJICAgIH07
CgoJICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQp
IHsKCSAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTsKCgkgICAgICB2YXIgcmVzdWx0ID0g
dGhpczsKCSAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5k
IDwgMCkpIHsKCSAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpOwoJICAgICAg
fQoJICAgICAgaWYgKHN0YXJ0IDwgMCkgewoJICAgICAgICByZXN1bHQgPSByZXN1bHQudGFrZVJp
Z2h0KC1zdGFydCk7CgkgICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7CgkgICAgICAgIHJlc3VsdCA9
IHJlc3VsdC5kcm9wKHN0YXJ0KTsKCSAgICAgIH0KCSAgICAgIGlmIChlbmQgIT09IHVuZGVmaW5l
ZCkgewoJICAgICAgICBlbmQgPSB0b0ludGVnZXIoZW5kKTsKCSAgICAgICAgcmVzdWx0ID0gZW5k
IDwgMCA/IHJlc3VsdC5kcm9wUmlnaHQoLWVuZCkgOiByZXN1bHQudGFrZShlbmQgLSBzdGFydCk7
CgkgICAgICB9CgkgICAgICByZXR1cm4gcmVzdWx0OwoJICAgIH07CgoJICAgIExhenlXcmFwcGVy
LnByb3RvdHlwZS50YWtlUmlnaHRXaGlsZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkgewoJICAgICAg
cmV0dXJuIHRoaXMucmV2ZXJzZSgpLnRha2VXaGlsZShwcmVkaWNhdGUpLnJldmVyc2UoKTsKCSAg
ICB9OwoKCSAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkgewoJ
ICAgICAgcmV0dXJuIHRoaXMudGFrZShNQVhfQVJSQVlfTEVOR1RIKTsKCSAgICB9OwoKCSAgICAv
LyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC4KCSAgICBi
YXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFt
ZSkgewoJICAgICAgdmFyIGNoZWNrSXRlcmF0ZWUgPSAvXig/OmZpbHRlcnxmaW5kfG1hcHxyZWpl
Y3QpfFdoaWxlJC8udGVzdChtZXRob2ROYW1lKSwKCSAgICAgICAgICBpc1Rha2VyID0gL14oPzpo
ZWFkfGxhc3QpJC8udGVzdChtZXRob2ROYW1lKSwKCSAgICAgICAgICBsb2Rhc2hGdW5jID0gbG9k
YXNoW2lzVGFrZXIgPyAoJ3Rha2UnICsgKG1ldGhvZE5hbWUgPT0gJ2xhc3QnID8gJ1JpZ2h0JyA6
ICcnKSkgOiBtZXRob2ROYW1lXSwKCSAgICAgICAgICByZXRVbndyYXBwZWQgPSBpc1Rha2VyIHx8
IC9eZmluZC8udGVzdChtZXRob2ROYW1lKTsKCgkgICAgICBpZiAoIWxvZGFzaEZ1bmMpIHsKCSAg
ICAgICAgcmV0dXJuOwoJICAgICAgfQoJICAgICAgbG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1l
XSA9IGZ1bmN0aW9uKCkgewoJICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fLAoJ
ICAgICAgICAgICAgYXJncyA9IGlzVGFrZXIgPyBbMV0gOiBhcmd1bWVudHMsCgkgICAgICAgICAg
ICBpc0xhenkgPSB2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyLAoJICAgICAgICAgICAgaXRl
cmF0ZWUgPSBhcmdzWzBdLAoJICAgICAgICAgICAgdXNlTGF6eSA9IGlzTGF6eSB8fCBpc0FycmF5
KHZhbHVlKTsKCgkgICAgICAgIHZhciBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKHZhbHVlKSB7Cgkg
ICAgICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaEZ1bmMuYXBwbHkobG9kYXNoLCBhcnJheVB1c2go
W3ZhbHVlXSwgYXJncykpOwoJICAgICAgICAgIHJldHVybiAoaXNUYWtlciAmJiBjaGFpbkFsbCkg
PyByZXN1bHRbMF0gOiByZXN1bHQ7CgkgICAgICAgIH07CgoJICAgICAgICBpZiAodXNlTGF6eSAm
JiBjaGVja0l0ZXJhdGVlICYmIHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIGl0ZXJh
dGVlLmxlbmd0aCAhPSAxKSB7CgkgICAgICAgICAgLy8gQXZvaWQgbGF6eSB1c2UgaWYgdGhlIGl0
ZXJhdGVlIGhhcyBhICJsZW5ndGgiIHZhbHVlIG90aGVyIHRoYW4gYDFgLgoJICAgICAgICAgIGlz
TGF6eSA9IHVzZUxhenkgPSBmYWxzZTsKCSAgICAgICAgfQoJICAgICAgICB2YXIgY2hhaW5BbGwg
PSB0aGlzLl9fY2hhaW5fXywKCSAgICAgICAgICAgIGlzSHlicmlkID0gISF0aGlzLl9fYWN0aW9u
c19fLmxlbmd0aCwKCSAgICAgICAgICAgIGlzVW53cmFwcGVkID0gcmV0VW53cmFwcGVkICYmICFj
aGFpbkFsbCwKCSAgICAgICAgICAgIG9ubHlMYXp5ID0gaXNMYXp5ICYmICFpc0h5YnJpZDsKCgkg
ICAgICAgIGlmICghcmV0VW53cmFwcGVkICYmIHVzZUxhenkpIHsKCSAgICAgICAgICB2YWx1ZSA9
IG9ubHlMYXp5ID8gdmFsdWUgOiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7CgkgICAgICAgICAgdmFy
IHJlc3VsdCA9IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpOwoJICAgICAgICAgIHJlc3VsdC5fX2Fj
dGlvbnNfXy5wdXNoKHsgJ2Z1bmMnOiB0aHJ1LCAnYXJncyc6IFtpbnRlcmNlcHRvcl0sICd0aGlz
QXJnJzogdW5kZWZpbmVkIH0pOwoJICAgICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihy
ZXN1bHQsIGNoYWluQWxsKTsKCSAgICAgICAgfQoJICAgICAgICBpZiAoaXNVbndyYXBwZWQgJiYg
b25seUxhenkpIHsKCSAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsKCSAg
ICAgICAgfQoJICAgICAgICByZXN1bHQgPSB0aGlzLnRocnUoaW50ZXJjZXB0b3IpOwoJICAgICAg
ICByZXR1cm4gaXNVbndyYXBwZWQgPyAoaXNUYWtlciA/IHJlc3VsdC52YWx1ZSgpWzBdIDogcmVz
dWx0LnZhbHVlKCkpIDogcmVzdWx0OwoJICAgICAgfTsKCSAgICB9KTsKCgkgICAgLy8gQWRkIGBB
cnJheWAgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuCgkgICAgYXJyYXlFYWNoKFsncG9w
JywgJ3B1c2gnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlv
bihtZXRob2ROYW1lKSB7CgkgICAgICB2YXIgZnVuYyA9IGFycmF5UHJvdG9bbWV0aG9kTmFtZV0s
CgkgICAgICAgICAgY2hhaW5OYW1lID0gL14oPzpwdXNofHNvcnR8dW5zaGlmdCkkLy50ZXN0KG1l
dGhvZE5hbWUpID8gJ3RhcCcgOiAndGhydScsCgkgICAgICAgICAgcmV0VW53cmFwcGVkID0gL14o
Pzpwb3B8c2hpZnQpJC8udGVzdChtZXRob2ROYW1lKTsKCgkgICAgICBsb2Rhc2gucHJvdG90eXBl
W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7CgkgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRz
OwoJICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICF0aGlzLl9fY2hhaW5fXykgewoJICAgICAg
ICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUoKTsKCSAgICAgICAgICByZXR1cm4gZnVuYy5hcHBs
eShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpOwoJICAgICAgICB9CgkgICAgICAg
IHJldHVybiB0aGlzW2NoYWluTmFtZV0oZnVuY3Rpb24odmFsdWUpIHsKCSAgICAgICAgICByZXR1
cm4gZnVuYy5hcHBseShpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10sIGFyZ3MpOwoJICAgICAg
ICB9KTsKCSAgICAgIH07CgkgICAgfSk7CgoJICAgIC8vIE1hcCBtaW5pZmllZCBtZXRob2QgbmFt
ZXMgdG8gdGhlaXIgcmVhbCBuYW1lcy4KCSAgICBiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3Rv
dHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkgewoJICAgICAgdmFyIGxvZGFzaEZ1bmMg
PSBsb2Rhc2hbbWV0aG9kTmFtZV07CgkgICAgICBpZiAobG9kYXNoRnVuYykgewoJICAgICAgICB2
YXIga2V5ID0gbG9kYXNoRnVuYy5uYW1lICsgJyc7CgkgICAgICAgIGlmICghaGFzT3duUHJvcGVy
dHkuY2FsbChyZWFsTmFtZXMsIGtleSkpIHsKCSAgICAgICAgICByZWFsTmFtZXNba2V5XSA9IFtd
OwoJICAgICAgICB9CgkgICAgICAgIHJlYWxOYW1lc1trZXldLnB1c2goeyAnbmFtZSc6IG1ldGhv
ZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTsKCSAgICAgIH0KCSAgICB9KTsKCgkgICAgcmVh
bE5hbWVzW2NyZWF0ZUh5YnJpZCh1bmRlZmluZWQsIFdSQVBfQklORF9LRVlfRkxBRykubmFtZV0g
PSBbewoJICAgICAgJ25hbWUnOiAnd3JhcHBlcicsCgkgICAgICAnZnVuYyc6IHVuZGVmaW5lZAoJ
ICAgIH1dOwoKCSAgICAvLyBBZGQgbWV0aG9kcyB0byBgTGF6eVdyYXBwZXJgLgoJICAgIExhenlX
cmFwcGVyLnByb3RvdHlwZS5jbG9uZSA9IGxhenlDbG9uZTsKCSAgICBMYXp5V3JhcHBlci5wcm90
b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlOwoJICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS52
YWx1ZSA9IGxhenlWYWx1ZTsKCgkgICAgLy8gQWRkIGNoYWluIHNlcXVlbmNlIG1ldGhvZHMgdG8g
dGhlIGBsb2Rhc2hgIHdyYXBwZXIuCgkgICAgbG9kYXNoLnByb3RvdHlwZS5hdCA9IHdyYXBwZXJB
dDsKCSAgICBsb2Rhc2gucHJvdG90eXBlLmNoYWluID0gd3JhcHBlckNoYWluOwoJICAgIGxvZGFz
aC5wcm90b3R5cGUuY29tbWl0ID0gd3JhcHBlckNvbW1pdDsKCSAgICBsb2Rhc2gucHJvdG90eXBl
Lm5leHQgPSB3cmFwcGVyTmV4dDsKCSAgICBsb2Rhc2gucHJvdG90eXBlLnBsYW50ID0gd3JhcHBl
clBsYW50OwoJICAgIGxvZGFzaC5wcm90b3R5cGUucmV2ZXJzZSA9IHdyYXBwZXJSZXZlcnNlOwoJ
ICAgIGxvZGFzaC5wcm90b3R5cGUudG9KU09OID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZU9mID0g
bG9kYXNoLnByb3RvdHlwZS52YWx1ZSA9IHdyYXBwZXJWYWx1ZTsKCgkgICAgLy8gQWRkIGxhenkg
YWxpYXNlcy4KCSAgICBsb2Rhc2gucHJvdG90eXBlLmZpcnN0ID0gbG9kYXNoLnByb3RvdHlwZS5o
ZWFkOwoKCSAgICBpZiAoc3ltSXRlcmF0b3IpIHsKCSAgICAgIGxvZGFzaC5wcm90b3R5cGVbc3lt
SXRlcmF0b3JdID0gd3JhcHBlclRvSXRlcmF0b3I7CgkgICAgfQoJICAgIHJldHVybiBsb2Rhc2g7
CgkgIH0pOwoKCSAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJICAvLyBFeHBvcnQgbG9kYXNoLgoJ
ICB2YXIgXyA9IHJ1bkluQ29udGV4dCgpOwoKCSAgLy8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVy
cywgbGlrZSByLmpzLCBjaGVjayBmb3IgY29uZGl0aW9uIHBhdHRlcm5zIGxpa2U6CgkgIGlmICh0
cnVlKSB7CgkgICAgLy8gRXhwb3NlIExvZGFzaCBvbiB0aGUgZ2xvYmFsIG9iamVjdCB0byBwcmV2
ZW50IGVycm9ycyB3aGVuIExvZGFzaCBpcwoJICAgIC8vIGxvYWRlZCBieSBhIHNjcmlwdCB0YWcg
aW4gdGhlIHByZXNlbmNlIG9mIGFuIEFNRCBsb2FkZXIuCgkgICAgLy8gU2VlIGh0dHA6Ly9yZXF1
aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjbWlzbWF0Y2ggZm9yIG1vcmUgZGV0YWlscy4KCSAg
ICAvLyBVc2UgYF8ubm9Db25mbGljdGAgdG8gcmVtb3ZlIExvZGFzaCBmcm9tIHRoZSBnbG9iYWwg
b2JqZWN0LgoJICAgIHJvb3QuXyA9IF87CgoJICAgIC8vIERlZmluZSBhcyBhbiBhbm9ueW1vdXMg
bW9kdWxlIHNvLCB0aHJvdWdoIHBhdGggbWFwcGluZywgaXQgY2FuIGJlCgkgICAgLy8gcmVmZXJl
bmNlZCBhcyB0aGUgInVuZGVyc2NvcmUiIG1vZHVsZS4KCSAgICAhKF9fV0VCUEFDS19BTURfREVG
SU5FX1JFU1VMVF9fID0gZnVuY3Rpb24oKSB7CgkgICAgICByZXR1cm4gXzsKCSAgICB9LmNhbGwo
ZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSwgX19XRUJQQUNL
X0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBf
X1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpOwoJICB9CgkgIC8vIENoZWNrIGZvciBgZXhw
b3J0c2AgYWZ0ZXIgYGRlZmluZWAgaW4gY2FzZSBhIGJ1aWxkIG9wdGltaXplciBhZGRzIGl0LgoJ
ICBlbHNlIGlmIChmcmVlTW9kdWxlKSB7CgkgICAgLy8gRXhwb3J0IGZvciBOb2RlLmpzLgoJICAg
IChmcmVlTW9kdWxlLmV4cG9ydHMgPSBfKS5fID0gXzsKCSAgICAvLyBFeHBvcnQgZm9yIENvbW1v
bkpTIHN1cHBvcnQuCgkgICAgZnJlZUV4cG9ydHMuXyA9IF87CgkgIH0KCSAgZWxzZSB7CgkgICAg
Ly8gRXhwb3J0IHRvIHRoZSBnbG9iYWwgb2JqZWN0LgoJICAgIHJvb3QuXyA9IF87CgkgIH0KCX0u
Y2FsbCh0aGlzKSk7CgoJLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMs
IChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0oKSksIF9fd2VicGFja19yZXF1aXJlX18oMTEy
KShtb2R1bGUpKSkKCi8qKiovIH0pLAovKiAxMTIgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cykgewoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7CgkJaWYoIW1v
ZHVsZS53ZWJwYWNrUG9seWZpbGwpIHsKCQkJbW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkg
e307CgkJCW1vZHVsZS5wYXRocyA9IFtdOwoJCQkvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVk
IGJ5IGRlZmF1bHQKCQkJbW9kdWxlLmNoaWxkcmVuID0gW107CgkJCW1vZHVsZS53ZWJwYWNrUG9s
eWZpbGwgPSAxOwoJCX0KCQlyZXR1cm4gbW9kdWxlOwoJfQoKCi8qKiovIH0pLAovKiAxMTMgKi8K
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoK
CS8vIEpTT04ucHJ1bmUgOiBhIGZ1bmN0aW9uIHRvIHN0cmluZ2lmeSBhbnkgb2JqZWN0IHdpdGhv
dXQgb3ZlcmZsb3cKCS8vIHR3byBhZGRpdGlvbmFsIG9wdGlvbmFsIHBhcmFtZXRlcnMgOgoJLy8g
ICAtIHRoZSBtYXhpbWFsIGRlcHRoIChkZWZhdWx0IDogNikKCS8vICAgLSB0aGUgbWF4aW1hbCBs
ZW5ndGggb2YgYXJyYXlzIChkZWZhdWx0IDogNTApCgkvLyBZb3UgY2FuIGFsc28gcGFzcyBhbiAi
b3B0aW9ucyIgb2JqZWN0LgoJLy8gZXhhbXBsZXMgOgoJLy8gICB2YXIganNvbiA9IEpTT04ucHJ1
bmUod2luZG93KQoJLy8gICB2YXIgYXJyID0gQXJyYXkuYXBwbHkoMCxBcnJheSgxMDAwKSk7IHZh
ciBqc29uID0gSlNPTi5wcnVuZShhcnIsIDQsIDIwKQoJLy8gICB2YXIganNvbiA9IEpTT04ucHJ1
bmUod2luZG93LmxvY2F0aW9uLCB7aW5oZXJpdGVkUHJvcGVydGllczp0cnVlfSkKCS8vIFdlYiBz
aXRlIDogaHR0cDovL2R5c3Ryb3kub3JnL0pTT04ucHJ1bmUvCgkvLyBKU09OLnBydW5lIG9uIGdp
dGh1YiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9DYW5vcC9KU09OLnBydW5lCgkvLyBUaGlzIHdhcyBk
aXNjdXNzZWQgaGVyZSA6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzEzODYxMjU0LzI2MzUy
NQoJLy8gVGhlIGNvZGUgaXMgYmFzZWQgb24gRG91Z2xhcyBDcm9ja2ZvcmQncyBjb2RlIDogaHR0
cHM6Ly9naXRodWIuY29tL2RvdWdsYXNjcm9ja2ZvcmQvSlNPTi1qcy9ibG9iL21hc3Rlci9qc29u
Mi5qcwoJLy8gTm8gZWZmb3J0IHdhcyBkb25lIHRvIHN1cHBvcnQgb2xkIGJyb3dzZXJzLiBKU09O
LnBydW5lIHdpbGwgZmFpbCBvbiBJRTguCgkoZnVuY3Rpb24gKCkgewoJCSd1c2Ugc3RyaWN0JzsK
CgkJdmFyIERFRkFVTFRfTUFYX0RFUFRIID0gNjsKCQl2YXIgREVGQVVMVF9BUlJBWV9NQVhfTEVO
R1RIID0gNTA7CgkJdmFyIERFRkFVTFRfUFJVTkVEX1ZBTFVFID0gJyItcHJ1bmVkLSInOwoJCXZh
ciBzZWVuOyAvLyBTYW1lIHZhcmlhYmxlIHVzZWQgZm9yIGFsbCBzdHJpbmdpZmljYXRpb25zCgkJ
dmFyIGl0ZXJhdG9yOyAvLyBlaXRoZXIgZm9yRWFjaEVudW1lcmFibGVPd25Qcm9wZXJ0eSwgZm9y
RWFjaEVudW1lcmFibGVQcm9wZXJ0eSBvciBmb3JFYWNoUHJvcGVydHkKCgkJLy8gaXRlcmF0ZXMg
b24gZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyAoZGVmYXVsdCBiZWhhdmlvcikKCQl2YXIgZm9y
RWFjaEVudW1lcmFibGVPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgY2FsbGJhY2spIHsKCQkJ
Zm9yICh2YXIgayBpbiBvYmopIHsKCQkJCWlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl
cnR5LmNhbGwob2JqLCBrKSkgY2FsbGJhY2soayk7CgkJCX0KCQl9OwoJCS8vIGl0ZXJhdGVzIG9u
IGVudW1lcmFibGUgcHJvcGVydGllcwoJCXZhciBmb3JFYWNoRW51bWVyYWJsZVByb3BlcnR5ID0g
ZnVuY3Rpb24ob2JqLCBjYWxsYmFjaykgewoJCQlmb3IgKHZhciBrIGluIG9iaikgY2FsbGJhY2so
ayk7CgkJfTsKCQkvLyBpdGVyYXRlcyBvbiBwcm9wZXJ0aWVzLCBldmVuIG5vbiBlbnVtZXJhYmxl
IGFuZCBpbmhlcml0ZWQgb25lcwoJCS8vIFRoaXMgaXMgZGFuZ2Vyb3VzCgkJdmFyIGZvckVhY2hQ
cm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgY2FsbGJhY2ssIGV4Y2x1ZGVkKSB7CgkJCWlmIChvYmo9
PW51bGwpIHJldHVybjsKCQkJZXhjbHVkZWQgPSBleGNsdWRlZCB8fCB7fTsKCQkJT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKGspewoJCQkJaWYgKCFleGNs
dWRlZFtrXSkgewoJCQkJCWNhbGxiYWNrKGspOwoJCQkJCWV4Y2x1ZGVkW2tdID0gdHJ1ZTsKCQkJ
CX0KCQkJfSk7CgkJCWZvckVhY2hQcm9wZXJ0eShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSwg
Y2FsbGJhY2ssIGV4Y2x1ZGVkKTsKCQl9OwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0ZS5w
cm90b3R5cGUsICJ0b1BydW5lZEpTT04iLCB7dmFsdWU6RGF0ZS5wcm90b3R5cGUudG9KU09OfSk7
CgoJCXZhcgljeCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdi
NVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZm
ZmZdL2csCgkJCWVzY2FwYWJsZSA9IC9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYw
MC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2
MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nLAoJCQltZXRhID0gewkvLyB0YWJsZSBvZiBj
aGFyYWN0ZXIgc3Vic3RpdHV0aW9ucwoJCQkJJ1xiJzogJ1xcYicsCgkJCQknXHQnOiAnXFx0JywK
CQkJCSdcbic6ICdcXG4nLAoJCQkJJ1xmJzogJ1xcZicsCgkJCQknXHInOiAnXFxyJywKCQkJCSci
JyA6ICdcXCInLAoJCQkJJ1xcJzogJ1xcXFwnCgkJCX07CgoJCWZ1bmN0aW9uIHF1b3RlKHN0cmlu
ZykgewoJCQllc2NhcGFibGUubGFzdEluZGV4ID0gMDsKCQkJcmV0dXJuIGVzY2FwYWJsZS50ZXN0
KHN0cmluZykgPyAnIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7
CgkJCQl2YXIgYyA9IG1ldGFbYV07CgkJCQlyZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnCgkJ
CQkJPyBjCgkJCQkJOiAnXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmco
MTYpKS5zbGljZSgtNCk7CgkJCX0pICsgJyInIDogJyInICsgc3RyaW5nICsgJyInOwoJCX0KCgoJ
CXZhciBwcnVuZSA9IGZ1bmN0aW9uICh2YWx1ZSwgZGVwdGhEZWNyLCBhcnJheU1heExlbmd0aCkg
ewoJCQl2YXIgcHJ1bmVkU3RyaW5nID0gREVGQVVMVF9QUlVORURfVkFMVUU7CgkJCXZhciByZXBs
YWNlcjsKCQkJaWYgKHR5cGVvZiBkZXB0aERlY3IgPT0gIm9iamVjdCIpIHsKCQkJCXZhciBvcHRp
b25zID0gZGVwdGhEZWNyOwoJCQkJZGVwdGhEZWNyID0gb3B0aW9ucy5kZXB0aERlY3I7CgkJCQlh
cnJheU1heExlbmd0aCA9IG9wdGlvbnMuYXJyYXlNYXhMZW5ndGg7CgkJCQlpdGVyYXRvciA9IG9w
dGlvbnMuaXRlcmF0b3IgfHwgZm9yRWFjaEVudW1lcmFibGVPd25Qcm9wZXJ0eTsKCQkJCWlmIChv
cHRpb25zLmFsbFByb3BlcnRpZXMpIGl0ZXJhdG9yID0gZm9yRWFjaFByb3BlcnR5OwoJCQkJZWxz
ZSBpZiAob3B0aW9ucy5pbmhlcml0ZWRQcm9wZXJ0aWVzKSBpdGVyYXRvciA9IGZvckVhY2hFbnVt
ZXJhYmxlUHJvcGVydHkKCQkJCWlmICgicHJ1bmVkU3RyaW5nIiBpbiBvcHRpb25zKSB7CgkJCQkJ
cHJ1bmVkU3RyaW5nID0gb3B0aW9ucy5wcnVuZWRTdHJpbmc7CgkJCQl9CgkJCQlpZiAob3B0aW9u
cy5yZXBsYWNlcikgewoJCQkJCXJlcGxhY2VyID0gb3B0aW9ucy5yZXBsYWNlcjsKCQkJCX0KCQkJ
fSBlbHNlIHsKCQkJCWl0ZXJhdG9yID0gZm9yRWFjaEVudW1lcmFibGVPd25Qcm9wZXJ0eTsKCQkJ
fQoJCQlzZWVuID0gW107CgkJCWRlcHRoRGVjciA9IGRlcHRoRGVjciB8fCBERUZBVUxUX01BWF9E
RVBUSDsKCQkJYXJyYXlNYXhMZW5ndGggPSBhcnJheU1heExlbmd0aCB8fCBERUZBVUxUX0FSUkFZ
X01BWF9MRU5HVEg7CgkJCWZ1bmN0aW9uIHN0cihrZXksIGhvbGRlciwgZGVwdGhEZWNyKSB7CgkJ
CQl2YXIgaSwgaywgdiwgbGVuZ3RoLCBwYXJ0aWFsLCB2YWx1ZSA9IGhvbGRlcltrZXldOwoKCQkJ
CWlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50
b1BydW5lZEpTT04gPT09ICdmdW5jdGlvbicpIHsKCQkJCQl2YWx1ZSA9IHZhbHVlLnRvUHJ1bmVk
SlNPTihrZXkpOwoJCQkJfQoJCQkJaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09
ICdmdW5jdGlvbicpIHsKCQkJCQl2YWx1ZSA9IHZhbHVlLnRvSlNPTigpOwoJCQkJfQoKCQkJCXN3
aXRjaCAodHlwZW9mIHZhbHVlKSB7CgkJCQljYXNlICdzdHJpbmcnOgoJCQkJCXJldHVybiBxdW90
ZSh2YWx1ZSk7CgkJCQljYXNlICdudW1iZXInOgoJCQkJCXJldHVybiBpc0Zpbml0ZSh2YWx1ZSkg
PyBTdHJpbmcodmFsdWUpIDogJ251bGwnOwoJCQkJY2FzZSAnYm9vbGVhbic6CgkJCQljYXNlICdu
dWxsJzoKCQkJCQlyZXR1cm4gU3RyaW5nKHZhbHVlKTsKCQkJCWNhc2UgJ29iamVjdCc6CgkJCQkJ
aWYgKCF2YWx1ZSkgewoJCQkJCQlyZXR1cm4gJ251bGwnOwoJCQkJCX0KCQkJCQlpZiAoZGVwdGhE
ZWNyPD0wIHx8IHNlZW4uaW5kZXhPZih2YWx1ZSkhPT0tMSkgewoJCQkJCQlpZiAocmVwbGFjZXIp
IHsKCQkJCQkJCXZhciByZXBsYWNlbWVudCA9IHJlcGxhY2VyKHZhbHVlLCBwcnVuZWRTdHJpbmcs
IHRydWUpOwoJCQkJCQkJcmV0dXJuIHJlcGxhY2VtZW50PT09dW5kZWZpbmVkID8gdW5kZWZpbmVk
IDogJycrcmVwbGFjZW1lbnQ7CgkJCQkJCX0KCQkJCQkJcmV0dXJuIHBydW5lZFN0cmluZzsKCQkJ
CQl9CgkJCQkJc2Vlbi5wdXNoKHZhbHVlKTsKCQkJCQlwYXJ0aWFsID0gW107CgkJCQkJaWYgKE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0n
KSB7CgkJCQkJCWxlbmd0aCA9IE1hdGgubWluKHZhbHVlLmxlbmd0aCwgYXJyYXlNYXhMZW5ndGgp
OwoJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKCQkJCQkJCXBhcnRpYWxb
aV0gPSBzdHIoaSwgdmFsdWUsIGRlcHRoRGVjci0xKSB8fCAnbnVsbCc7CgkJCQkJCX0KCQkJCQkJ
diA9ICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nOwoJCQkJCQlpZiAocmVwbGFjZXIgJiYg
dmFsdWUubGVuZ3RoPmFycmF5TWF4TGVuZ3RoKSByZXR1cm4gcmVwbGFjZXIodmFsdWUsIHYsIGZh
bHNlKTsKCQkJCQkJcmV0dXJuIHY7CgkJCQkJfQoJCQkJCWl0ZXJhdG9yKHZhbHVlLCBmdW5jdGlv
bihrKSB7CgkJCQkJCXRyeSB7CgkJCQkJCQl2ID0gc3RyKGssIHZhbHVlLCBkZXB0aERlY3ItMSk7
CgkJCQkJCQlpZiAodikgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgJzonICsgdik7CgkJCQkJCX0g
Y2F0Y2ggKGUpIHsKCQkJCQkJCS8vIHRoaXMgdHJ5L2NhdGNoIGR1ZSB0byBmb3JiaWRkZW4gYWNj
ZXNzb3JzIG9uIHNvbWUgb2JqZWN0cwoJCQkJCQl9CgkJCQkJfSk7CgkJCQkJcmV0dXJuICd7JyAr
IHBhcnRpYWwuam9pbignLCcpICsgJ30nOwoJCQkJY2FzZSAnZnVuY3Rpb24nOgoJCQkJY2FzZSAn
dW5kZWZpbmVkJzoKCQkJCQlyZXR1cm4gcmVwbGFjZXIgPyByZXBsYWNlcih2YWx1ZSwgdW5kZWZp
bmVkLCBmYWxzZSkgOiB1bmRlZmluZWQ7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHN0cignJywgeycn
OiB2YWx1ZX0sIGRlcHRoRGVjcik7CgkJfTsKCgkJcHJ1bmUubG9nID0gZnVuY3Rpb24oKSB7CgkJ
CWNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChhcmd1
bWVudHMsIGZ1bmN0aW9uKHYpIHsKCQkJCXJldHVybiBKU09OLnBhcnNlKEpTT04ucHJ1bmUodikp
OwoJCQl9KSk7CgkJfTsKCQlwcnVuZS5mb3JFYWNoUHJvcGVydHkgPSBmb3JFYWNoUHJvcGVydHk7
IC8vIHlvdSBtaWdodCB3YW50IHRvIGFsc28gYXNzaWduIGl0IHRvIE9iamVjdC5mb3JFYWNoUHJv
cGVydHkKCgkJaWYgKHRydWUpIG1vZHVsZS5leHBvcnRzID0gcHJ1bmU7CgkJZWxzZSBKU09OLnBy
dW5lID0gcHJ1bmU7Cgl9KCkpOwoKCi8qKiovIH0pLAovKiAxMTQgKi8KLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8qKgoJICogQGxpY2Vu
c2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkg
KgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkg
Ki8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgYXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpOwoJ
dmFyIHBhcnNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzEpOwoJdmFyIHNlcmlhbGl6ZSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTI4KTsKCgkvLyBDb25zdHJ1Y3QgcGFyc2VyIGFuZCBzdG9yZSB0
b2tlbml6ZWQgZmFjdG9yaWVzLgoJLy8gVE9ETzogVG9rZW5pemVkIGZhY3RvcmllcyBzaG91bGQg
YmUgYWNjZXNzaWJsZSB3aXRob3V0IGNvbnN0cnVjdGluZwoJLy8gYSBwYXJzZXIuCgl2YXIgcGFy
c2VyID0gbmV3IHBhcnNlLlRva2VuUGFyc2VyQ29udHJvbGxlcigpOwoJdmFyIHRzZXEgPSBwYXJz
ZXIuZmFjdG9yaWVzLnRzZXE7Cgl2YXIgdHNlcTEgPSBwYXJzZXIuZmFjdG9yaWVzLnRzZXExOwoJ
dmFyIHRyZXBlYXQgPSBwYXJzZXIuZmFjdG9yaWVzLnRyZXBlYXQ7Cgl2YXIgdHBsdXMgPSBwYXJz
ZXIuZmFjdG9yaWVzLnRwbHVzOwoKCS8vIEltcG9ydCBwYXJzZXIgZmFjdG9yaWVzLgoJdmFyIGZz
ID0gcGFyc2VyLmZhY3RvcmllczsKCXZhciBhbHQgPSBmcy5hbHQ7Cgl2YXIgYW55Q2hhciA9IGZz
LmFueUNoYXI7Cgl2YXIgY29weUlucHV0ID0gZnMuY29weUlucHV0OwoJdmFyIGRlYnVnID0gZnMu
ZGVidWc7Cgl2YXIgbGl0ZXJhbCA9IGZzLmxpdGVyYWw7Cgl2YXIgbGl0ZXJhbF9pYyA9IGZzLmxp
dGVyYWxfaWM7Cgl2YXIgbG9nID0gZnMubG9nOwoJdmFyIGxvb2thaGVhZCA9IGZzLmxvb2thaGVh
ZDsKCXZhciBub2RlYnVnID0gZnMubm9kZWJ1ZzsKCXZhciBub3NraXAgPSBmcy5ub3NraXA7Cgl2
YXIgbm90ID0gZnMubm90OwoJdmFyIG5vdENoYXIgPSBmcy5ub3RDaGFyOwoJdmFyIG5vdENoYXJz
ID0gZnMubm90Q2hhcnM7Cgl2YXIgb3B0aW9uYWwgPSBmcy5vcHRpb25hbDsKCXZhciBwaWNrID0g
ZnMucGljazsKCXZhciBwbHVzID0gZnMucGx1czsKCXZhciBwbHVzMCA9IGZzLnBsdXMwOwoJdmFy
IHJhbmdlID0gZnMucmFuZ2U7Cgl2YXIgcmVwZWF0ID0gZnMucmVwZWF0OwoJdmFyIHJlcGVhdDAg
PSBmcy5yZXBlYXQwOwoJdmFyIHNlcSA9IGZzLnNlcTsKCXZhciBzZXExID0gZnMuc2VxMTsKCXZh
ciBzZXFFdmVuID0gZnMuc2VxRXZlbjsKCXZhciBzaW1wbGVBbHQgPSBmcy5zaW1wbGVBbHQ7Cgl2
YXIgc3RyID0gZnMuc3RyOwoJdmFyIHN5bSA9IGZzLnN5bTsKCgkvLyBJbXBvcnQgcGFyc2Vycy4K
CXZhciBnID0gcGFyc2UuZ3JhbW1hcjsKCXZhciBhbHBoYUNoYXIgPSBnLmFscGhhQ2hhcjsKCXZh
ciBhbHBoYU51bUNoYXIgPSBnLmFscGhhTnVtQ2hhcjsKCXZhciBjU3R5bGVDb21tZW50XyA9IGcu
Y1N0eWxlQ29tbWVudF87Cgl2YXIgZmFpbCA9IGcuZmFpbDsKCXZhciBtdWx0aWxpbmVDb21tZW50
XyA9IGcubXVsdGlsaW5lQ29tbWVudF87Cgl2YXIgc2luZ2xlTGluZUNvbW1lbnRfID0gZy5zaW5n
bGVMaW5lQ29tbWVudF87Cgl2YXIgd2hpdGVzcGFjZV8gPSBnLndoaXRlc3BhY2VfOwoJdmFyIHdv
cmRDaGFyID0gZy53b3JkQ2hhcjsKCglwYXJzZXIuZ3JhbW1hciA9IHsKCSAgLy8gQ29tbW9uIHBh
dHRlcm5zLgoJICBfMDk6IHJhbmdlKCcwJywgJzknKSwKCSAgcjA5OiBzdHIocmVwZWF0KHN5bSgn
XzA5JykpKSwKCSAgcDA5OiBzdHIocGx1cyhzeW0oJ18wOScpKSksCgkgIG9tOiBvcHRpb25hbCgn
LScpLAoJICBvcG06IG9wdGlvbmFsKGFsdCgnKycsICctJykpLAoJICBFZTogYWx0KCdFJywgJ2Un
KSwKCSAgQVo6IHJhbmdlKCdBJywgJ1onKSwKCSAgYXo6IHJhbmdlKCdhJywgJ3onKSwKCgkgIC8v
IENvbW1vbiB0b2tlbnMuCgkgIGludGVnZXI6IG5vZGVidWcoc3RyKHNlcSgKCSAgICBzeW0oJ29t
JyksCgkgICAgYWx0KAoJICAgICAgc3RyKHNlcShyYW5nZSgnMScsICc5JyksIHN5bSgncjA5Jykp
KSwKCSAgICAgIHN0cihzZXEoJzAnLCBhbHQoJ1gnLCAneCcpLCBzdHIocGx1cyhhbHQoCgkgICAg
ICAgIHJhbmdlKCcwJywgJzknKSwgcmFuZ2UoJ0EnLCAnRicpLCByYW5nZSgnYScsICdmJykpKSkp
KSwKCSAgICAgIHN0cihzZXEoJzAnLCBzdHIocmVwZWF0KHJhbmdlKCcwJywgJzcnKSkpKSkpKSkp
LAoJICBmbG9hdDogbm9kZWJ1ZyhzdHIoc2VxKAoJICAgIHN5bSgnb20nKSwKCSAgICBhbHQoCgkg
ICAgICBzdHIoc2VxKAoJICAgICAgICBhbHQoCgkgICAgICAgICAgc3RyKHNlcShzeW0oJ3AwOScp
LCAnLicsIHN5bSgncjA5JykpKSwKCSAgICAgICAgICBzdHIoc2VxKHN5bSgncjA5JyksICcuJywg
c3ltKCdwMDknKSkpKSwKCSAgICAgICAgb3B0aW9uYWwoCgkgICAgICAgICAgc3RyKHNlcShzeW0o
J0VlJyksIHN5bSgnb3BtJyksIHN5bSgncDA5JykpKSkpKSwKCSAgICAgIHN0cihzZXEoc3ltKCdw
MDknKSwgc3ltKCdFZScpLCBzeW0oJ29wbScpLCBzeW0oJ3AwOScpKSkpKSkpLAoJICAvLyBUT0RP
OiBUaGlzIGhhcyBiZWVuIHJlbGF4ZWQgdG8gcGFyc2UgaWRlbnRpZmllcnMgbGlrZSAiX19jb250
ZW50IiBpbgoJICAvLyBHZWNrbydzIElETC4gSXQgc2hvdWxkIGJlIC9fP1tBLVphLXpdWzAtOUEt
Wl9hLXotXSovLgoJICBpZGVudGlmaWVyOiBub2RlYnVnKHNlcSgKCSAgICBhbHQoc3ltKCdBWicp
LCBzeW0oJ2F6JyksIHN5bSgnXzA5JyksICdfJyksCgkgICAgc3RyKHJlcGVhdChhbHQoc3ltKCdB
WicpLCBzeW0oJ2F6JyksIHN5bSgnXzA5JyksICdfJywgJy0nKSkpKSksCgkgIHN0cmluZzogbm9k
ZWJ1ZyhzZXExKDEsICciJywgc3RyKHJlcGVhdChub3RDaGFyKCciJykpKSwgJyInKSksCgoJICAv
LyBOT1RFOiBUcmFpbGluZyAiOyJzIG5vdCBvcHRpb25hbCBpbiBzcGVjLgoJICBTZW1pQ29sb246
IG9wdGlvbmFsKCc7JyksCgoJICAvLyBQYXJzZXIncyBpbml0IGZ1bmN0aW9uIHdvdWxkIHRha2Ug
Y2FyZSBvZiB0aGlzIGZvciB1cyBpZiB3ZSBwcm92aWRlZAoJICAvLyB0aGUgZ3JhbW1hciBhdCBp
bml0IHRpbWUuCgkgIFNUQVJUOiBzZXEocGFyc2VyLnNlcGFyYXRvciwgc3ltKCdEZWZpbml0aW9u
cycpKSwKCgkgIC8vIERlZmluaXRpb25zLgoJICBEZWZpbml0aW9uczogdHJlcGVhdCh0c2VxKHN5
bSgnRXh0ZW5kZWRBdHRyaWJ1dGVMaXN0JyksCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3ltKCdEZWZpbml0aW9uJykpKSwKCSAgRGVmaW5pdGlvbjogYWx0KHN5bSgnQ2FsbGJhY2tPcklu
dGVyZmFjZUxpa2UnKSwKCSAgICAgICAgICAgICAgICAgIHN5bSgnTmFtZXNwYWNlJyksCgkgICAg
ICAgICAgICAgICAgICBzeW0oJ1BhcnRpYWwnKSwKCSAgICAgICAgICAgICAgICAgIHN5bSgnRGlj
dGlvbmFyeScpLAoJICAgICAgICAgICAgICAgICAgc3ltKCdFbnVtJyksCgkgICAgICAgICAgICAg
ICAgICBzeW0oJ1R5cGVkZWYnKSwKCSAgICAgICAgICAgICAgICAgIHN5bSgnSW1wbGVtZW50c1N0
YXRlbWVudCcpKSwKCgkgIC8vIENhbGxiYWNrcyBhbmQgaW50ZXJmYWNlcy4KCSAgQ2FsbGJhY2tP
ckludGVyZmFjZUxpa2U6IGFsdChzeW0oJ0NhbGxiYWNrJyksIHN5bSgnSW50ZXJmYWNlTGlrZScp
KSwKCSAgQ2FsbGJhY2s6IHRzZXEoJ2NhbGxiYWNrJywgc3ltKCdDYWxsYmFja1Jlc3RPckludGVy
ZmFjZUxpa2UnKSksCgkgIC8vIFRPRE86IERvIHdlIGhhdmUgc2VtYW50aWMgYWN0aW9ucyB0aGF0
IHJlcXVpcmUgdGhpcyBwcm9kdWN0aW9uPwoJICBDYWxsYmFja1Jlc3RPckludGVyZmFjZUxpa2U6
IGFsdChzeW0oJ0NhbGxiYWNrUmVzdCcpLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzeW0oJ0ludGVyZmFjZUxpa2UnKSksCgkgIEludGVyZmFjZUxpa2U6IHRzZXEoYWx0KCdp
bnRlcmZhY2UnLCAnZXhjZXB0aW9uJyksCgkgICAgICAgICAgICAgICAgICAgICAgc3ltKCdpZGVu
dGlmaWVyJyksIHN5bSgnSW5oZXJpdGFuY2UnKSwgJ3snLAoJICAgICAgICAgICAgICAgICAgICAg
IHN5bSgnSW50ZXJmYWNlTWVtYmVycycpLCAnfScsICc7JyksCgkgIENhbGxiYWNrUmVzdDogdHNl
cShzeW0oJ2lkZW50aWZpZXInKSwgJz0nLCBzeW0oJ1R5cGUnKSwgJygnLAoJICAgICAgICAgICAg
ICAgICAgICAgc3ltKCdBcmd1bWVudExpc3QnKSwgJyknLCBzeW0oJ1NlbWlDb2xvbicpKSwKCSAg
SW5oZXJpdGFuY2U6IG9wdGlvbmFsKHRzZXExKDEsICc6Jywgc3ltKCdpZGVudGlmaWVyJykpKSwK
CgkgIC8vIE5hbWVzcGFjZXMuCgkgIE5hbWVzcGFjZTogdHNlcSgnbmFtZXNwYWNlJywgc3ltKCdp
ZGVudGlmaWVyJyksICd7JywKCSAgICAgICAgICAgICAgICAgIHN5bSgnTmFtZXNwYWNlTWVtYmVy
cycpLCAnfScsIHN5bSgnU2VtaUNvbG9uJykpLAoJICBOYW1lc3BhY2VNZW1iZXJzOiByZXBlYXQo
dHNlcShzeW0oJ0V4dGVuZGVkQXR0cmlidXRlTGlzdCcpLAoJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeW0oJ05hbWVzcGFjZU1lbWJlcicpKSksCgkgIC8vIE5PVEU6IFNwZWMgdXNl
cyAiUmV0dXJuVHlwZSIgYmVsb3csIGluc3RlYWQgb2YgVHlwZS4gUmVseSBvbiBzZW1hbnRpYwoJ
ICAvLyBhY3Rpb25zIHRvIGNhcmUgYWJvdXQgdGhlIGRpZmZlcmVuY2UuCgkgIC8vIFRPRE86IE5h
bWVzcGFjZSBtZW1iZXJzIHNob3VsZCBvbmx5IGluY2x1ZGUgT3BlcmF0aW9uLiBDb25zdCBhZGRl
ZCBoZXJlCgkgIC8vIHRvIGRlYWwgd2l0aCBHZWNrbydzIHVzZSBvZiBjb25zdHMgaW4gImNvbnNv
bGUiIG5hbWVzcGFjZS4KCSAgTmFtZXNwYWNlTWVtYmVyOiBhbHQoc3ltKCdDb25zdCcpLCBzeW0o
J09wZXJhdGlvbicpKSwKCgkgIC8vIFBhcnRpYWxzLgoJICBQYXJ0aWFsOiB0c2VxKCdwYXJ0aWFs
Jywgc3ltKCdQYXJ0aWFsRGVmaW5pdGlvbicpKSwKCSAgUGFydGlhbERlZmluaXRpb246IGFsdChz
eW0oJ1BhcnRpYWxJbnRlcmZhY2UnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ1Bh
cnRpYWxEaWN0aW9uYXJ5JyksCgkgICAgICAgICAgICAgICAgICAgICAgICAgc3ltKCdOYW1lc3Bh
Y2UnKSksCgkgIFBhcnRpYWxJbnRlcmZhY2U6CXRzZXEoJ2ludGVyZmFjZScsIHN5bSgnaWRlbnRp
ZmllcicpLCAneycsCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bSgnSW50ZXJmYWNl
TWVtYmVycycpLCAnfScsIHN5bSgnU2VtaUNvbG9uJykpLAoJICBQYXJ0aWFsRGljdGlvbmFyeTog
dHNlcSgnZGljdGlvbmFyeScsIHN5bSgnaWRlbnRpZmllcicpLCAneycsCgkgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN5bSgnRGljdGlvbmFyeU1lbWJlcnMnKSwgJ30nLCBzeW0oJ1NlbWlDb2xv
bicpKSwKCgkgIC8vIERpY3Rpb25hcmllcy4KCSAgRGljdGlvbmFyeTogdHNlcSgnZGljdGlvbmFy
eScsIHN5bSgnaWRlbnRpZmllcicpLCBzeW0oJ0luaGVyaXRhbmNlJyksICd7JywKCSAgICAgICAg
ICAgICAgICAgICBzeW0oJ0RpY3Rpb25hcnlNZW1iZXJzJyksICd9Jywgc3ltKCdTZW1pQ29sb24n
KSksCgkgIERpY3Rpb25hcnlNZW1iZXJzOiB0cmVwZWF0KHRzZXEoc3ltKCdFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ0RpY3Rp
b25hcnlNZW1iZXInKSkpLAoJICBEaWN0aW9uYXJ5TWVtYmVyOiB0c2VxKHN5bSgnUmVxdWlyZWQn
KSwgc3ltKCdUeXBlJyksIHN5bSgnaWRlbnRpZmllcicpLAoJICAgICAgICAgICAgICAgICAgICAg
ICAgIHN5bSgnRGVmYXVsdCcpLCBzeW0oJ1NlbWlDb2xvbicpKSwKCSAgUmVxdWlyZWQ6IG9wdGlv
bmFsKCdyZXF1aXJlZCcpLAoKCSAgLy8gRW51bXMuCgkgIEVudW06IHRzZXEoJ2VudW0nLCBzeW0o
J2lkZW50aWZpZXInKSwgJ3snLCBzeW0oJ0VudW1WYWx1ZUxpc3QnKSwgJ30nLAoJICAgICAgICAg
ICAgIHN5bSgnU2VtaUNvbG9uJykpLAoJICBFbnVtVmFsdWVMaXN0OiB0cGx1cyhzeW0oJ3N0cmlu
ZycpLCAnLCcpLAoKCSAgLy8gVHlwZWRlZnMuCgkgIFR5cGVkZWY6IHRzZXEoJ3R5cGVkZWYnLCBz
eW0oJ1R5cGUnKSwgc3ltKCdpZGVudGlmaWVyJyksCgkgICAgICAgICAgICAgICAgc3ltKCdTZW1p
Q29sb24nKSksCgoJICAvLyBJbXBsZW1lbnRzIHN0YXRlbWVudHMuCgkgIEltcGxlbWVudHNTdGF0
ZW1lbnQ6IHRzZXEoc3ltKCdpZGVudGlmaWVyJyksICdpbXBsZW1lbnRzJywgc3ltKCdpZGVudGlm
aWVyJyksCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltKCdTZW1pQ29sb24nKSksCgoJ
ICAvLyBJbnRlcmZhY2UgbWVtYmVycy4KCSAgSW50ZXJmYWNlTWVtYmVyczogdHJlcGVhdCh0c2Vx
KHN5bSgnRXh0ZW5kZWRBdHRyaWJ1dGVMaXN0JyksCgkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzeW0oJ0ludGVyZmFjZU1lbWJlcicpKSksCgkgIEludGVyZmFjZU1lbWJlcjogYWx0
KHN5bSgnQ29uc3QnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgc3ltKCdTZXJpYWxpemVyJyks
CgkgICAgICAgICAgICAgICAgICAgICAgIHN5bSgnU3RyaW5naWZpZXInKSwKCSAgICAgICAgICAg
ICAgICAgICAgICAgc3ltKCdTdGF0aWNNZW1iZXInKSwKCSAgICAgICAgICAgICAgICAgICAgICAg
c3ltKCdPcGVyYXRpb24nKSwKCSAgICAgICAgICAgICAgICAgICAgICAgc3ltKCdJdGVyYWJsZScp
LAoJICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ01lbWJlcicpKSwKCSAgLy8gTk9URTogVHlw
ZSBzaG91bGQgYmUgY29uc3RyYWluZWQgIkNvbnN0VHlwZSIgZnJvbSBzcGVjOyByZWx5IG9uCgkg
IC8vIHNlbXRhbnRpYyBhY3Rpb25zIHRvIGNoZWNrIHRoaXMuCgkgIENvbnN0OiB0c2VxKCdjb25z
dCcsIHN5bSgnVHlwZScpLCBzeW0oJ2lkZW50aWZpZXInKSwgJz0nLAoJICAgICAgICAgICAgICBz
eW0oJ0NvbnN0VmFsdWUnKSwgc3ltKCdTZW1pQ29sb24nKSksCgkgIC8vIE5PVEU6IFR5cGUgc2hv
dWxkIGJlIGNvbnN0cmFpbmVkICJSZXR1cm5UeXBlIiBmcm9tIHNwZWM7IHJlbHkgb24KCSAgLy8g
c2VtdGFudGljIGFjdGlvbnMgdG8gY2hlY2sgdGhpcy4KCSAgT3BlcmF0aW9uOiB0c2VxKHN5bSgn
U3BlY2lhbHMnKSwgc3ltKCdUeXBlJyksIHN5bSgnT3BlcmF0aW9uUmVzdCcpKSwKCSAgU2VyaWFs
aXplcjogdHNlcSgnc2VyaWFsaXplcicsIHN5bSgnU2VyaWFsaXplclJlc3QnKSksCgkgIFN0cmlu
Z2lmaWVyOiB0c2VxKCdzdHJpbmdpZmllcicsCgkgICAgICAgICAgICAgICAgICAgIGFsdChsaXRl
cmFsKCc7JyksCgkgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ1JlYWRPbmx5QXR0cmlidXRl
UmVzdE9yT3BlcmF0aW9uJykpKSwKCSAgU3RhdGljTWVtYmVyOiB0c2VxKCdzdGF0aWMnLAoJICAg
ICAgICAgICAgICAgICAgICAgc3ltKCdSZWFkT25seUF0dHJpYnV0ZVJlc3RPck9wZXJhdGlvbicp
KSwKCSAgSXRlcmFibGU6IHRzZXEoJ2l0ZXJhYmxlJywgJzwnLCBzeW0oJ1R5cGUnKSwgc3ltKCdP
cHRpb25hbFR5cGUnKSwgJz4nLAoJICAgICAgICAgICAgICAgICBzeW0oJ1NlbWlDb2xvbicpKSwK
CSAgTWVtYmVyOiB0c2VxKHN5bSgnSW5oZXJpdCcpLCBzeW0oJ1JlYWRPbmx5JyksCgkgICAgICAg
ICAgICAgICBzeW0oJ01lbWJlclJlc3QnKSksCgkgIE1lbWJlclJlc3Q6IGFsdChzeW0oJ0F0dHJp
YnV0ZVJlc3QnKSwKCSAgICAgICAgICAgICAgICAgIHN5bSgnTWFwbGlrZVJlc3QnKSwKCSAgICAg
ICAgICAgICAgICAgIHN5bSgnU2V0bGlrZVJlc3QnKSksCgkgIEluaGVyaXQ6IG9wdGlvbmFsKCdp
bmhlcml0JyksCgkgIFJlYWRPbmx5QXR0cmlidXRlUmVzdDogdHNlcShzeW0oJ1JlYWRPbmx5Jyks
IHN5bSgnQXR0cmlidXRlUmVzdCcpKSwKCSAgUmVhZE9ubHk6IG9wdGlvbmFsKCdyZWFkb25seScp
LAoJICAvLyBSZWFkT25seU1lbWJlcjogdHNlcSgncmVhZG9ubHknLCBzeW0oJ01lbWJlclJlc3Qn
KSksCgkgIC8vIFRPRE86ICdpbmhlcml0JyByZXF1aXJlZCB0byBkaXNhbWJpZ3VhdGUgZnJvbSBS
ZWFkT25seU1lbWJlcj8KCSAgLy8gUGVyaGFwcyB3ZSB3YW50IG9wdGlvbmFsKGFsdCh0c2VxKCdp
bmhlcml0JywgJ3JlYWRvbmx5JyksICdpbmhlcml0JykpCgkgIC8vIHRvIGNhcHR1cmUgbm8taW5o
ZXJpdC1wcmVmaXgtYnV0LXN0aWxsLXJlYWQtd3JpdGUgY2FzZT8KCSAgLy8gQWxzbywgY2FuIHJl
YWRvbmx5IGF0dHJpYnV0ZXMgYmUgaW5oZXJpdGVkPyBJZiBzbywgc2hvdWxkbid0IHRoZXkKCSAg
Ly8gTk9UIGJlIHBhcnNlZCBhcyBSZWFkV3JpdGVBdHRyaWJ1dGU/IE1lbWJlcnMgYW5kIGF0dHJp
YnV0ZXMgY2FuCgkgIC8vIHByb2JhYmx5IGJlIHNpbXBsaWZpZWQgcmFkaWNhbGx5IGJ5IHNpbXBs
eSBzdXBwb3J0aW5nIG9wdGlvbmFsCgkgIC8vIHF1YWxpZmllcnMgYmVmb3JlIEF0dHJpYnV0ZVJl
c3QgYW5kIE1hcC9TZXQtbGlrZXMuIENoZWNrCgkgIC8vIEJORiBhbmQgd2ViIElETCB0ZXN0cyB0
byBjb25maXJtLgoJICAvLyBSZWFkV3JpdGVNZW1iZXI6IHRzZXEoc3ltKCdSZWFkT25seScpLAoJ
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltKCdBdHRyaWJ1dGVSZXN0JykpLAoJICAv
LyBJbmhlcml0OiBvcHRpb25hbCgnaW5oZXJpdCcpLAoJICAvLyBUT0RPOiBEbyB3ZSBuZWVkIHRo
aXM/IFNlbWFudGljIGFjdGlvbiB0aGF0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4KCSAgLy8gdGhl
c2UgYW5kIHRoZWlyICJyZXN0InM/CgkgIC8vIFJlYWRXcml0ZU1hcGxpa2U6IHN5bSgnTWFwbGlr
ZVJlc3QnKSwKCSAgLy8gUmVhZFdyaXRlU2V0bGlrZTogc3ltKCdTZXRsaWtlUmVzdCcpLAoKCSAg
Ly8gV2l0aGluIGludGVyZmFjZSBtZW1iZXJzLgoJICBTcGVjaWFsczogdHJlcGVhdChhbHQoJ2dl
dHRlcicsCgkgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dGVyJywKCSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFRPRE86ICJjcmVhdG9yIiBpcyBhIHByb3ByaWV0YXJ5IGV4dGVuc2lvbiB1
c2VkIGJ5CgkgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZWNrby4KCSAgICAgICAgICAgICAg
ICAgICAgICAgICdjcmVhdG9yJywKCSAgICAgICAgICAgICAgICAgICAgICAgICdkZWxldGVyJywK
CSAgICAgICAgICAgICAgICAgICAgICAgICdsZWdhY3ljYWxsZXInKSksCgkgIE9wZXJhdGlvblJl
c3Q6IHRzZXEob3B0aW9uYWwoc3ltKCdpZGVudGlmaWVyJykpLCAnKCcsCgkgICAgICAgICAgICAg
ICAgICAgICAgc3ltKCdBcmd1bWVudExpc3QnKSwgJyknLCBzeW0oJ1NlbWlDb2xvbicpKSwKCSAg
U2VyaWFsaXplclJlc3Q6IGFsdChzeW0oJ1NlcmlhbGl6ZXJSZXN0T3BlcmF0aW9uJyksCgkgICAg
ICAgICAgICAgICAgICAgICAgc3ltKCdTZXJpYWxpemVyUmVzdFBhdHRlcm4nKSwKCSAgICAgICAg
ICAgICAgICAgICAgICBzeW0oJ1NlcmlhbGl6ZXJSZXN0RW1wdHknKSksCgkgIFNlcmlhbGl6ZXJS
ZXN0T3BlcmF0aW9uOiB0c2VxKG9wdGlvbmFsKHN5bSgnVHlwZScpKSwKCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ltKCdPcGVyYXRpb25SZXN0JykpLAoJICBTZXJpYWxpemVyUmVz
dFBhdHRlcm46IHRzZXExKDEsICc9Jywgc3ltKCdTZXJpYWxpemF0aW9uUGF0dGVybicpLAoJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bSgnU2VtaUNvbG9uJykpLAoJICBTZXJpYWxp
emVyUmVzdEVtcHR5OiBsaXRlcmFsKCc7JyksCgkgIFNlcmlhbGl6YXRpb25QYXR0ZXJuOiBhbHQo
dHNlcSgneycsIHN5bSgnU2VyaWFsaXphdGlvblBhdHRlcm5Jbm5lcicpLAoJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ30nKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
c2VxKCdbJywgc3ltKCdTZXJpYWxpemF0aW9uUGF0dGVybklubmVyJyksCgkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnXScpLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5
bSgnaWRlbnRpZmllcicpKSwKCSAgU2VyaWFsaXphdGlvblBhdHRlcm5Jbm5lcjogb3B0aW9uYWwo
YWx0KHRzZXEoJ2dldHRlcicpLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIHNwZWMgc3BlY2lhbGx5IGxpc3RzOgoJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gImluaGVyaXQsIGlkMSwgaWQsIC4uLiIKCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBTZXJpYWxpemF0aW9u
UGF0dGVybk1hcAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y2FzZSBvbmx5LiBMZWF2ZSBkZXRlY3Rpb24gb2YKCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoaXMgdG8gc2VtYW50aWMgYWN0aW9ucy4KCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bSgnSWRlbnRpZmllckxpc3QnKSkpLAoJ
ICAvLyBOT1RFOiAiUmV0dXJuVHlwZSIgaW4gc3BlYy4KCSAgUmVhZE9ubHlBdHRyaWJ1dGVSZXN0
T3JPcGVyYXRpb246IGFsdCgKCSAgICBzeW0oJ1JlYWRPbmx5QXR0cmlidXRlUmVzdCcpLCBzeW0o
J09wZXJhdGlvbicpKSwKCSAgLy8gTk9URTogU3BlYyBzYXlzIEF0dHJpYnV0ZU5hbWUgKGlkZW50
aWZpZXIgYmVsb3cpIGlzOgoJICAvLyAoQXR0cmlidXRlTmFtZUtleXdvcmR8aWRlbnRpZmllcikg
YW5kIHRoYXQgQXR0cmlidXRlTmFtZUtleXdvcmQgaXM6CgkgIC8vICJyZXF1aXJlZCIuIExlYXZl
IHRoaXMgdG8gc2VtYW50aWMgYWN0aW9ucy4KCSAgQXR0cmlidXRlUmVzdDogdHNlcSgnYXR0cmli
dXRlJywgc3ltKCdUeXBlJyksIHN5bSgnaWRlbnRpZmllcicpLAoJICAgICAgICAgICAgICAgICAg
ICAgIHN5bSgnU2VtaUNvbG9uJykpLAoJICBNYXBsaWtlUmVzdDogdHNlcSgnbWFwbGlrZScsICc8
Jywgc3ltKCdUeXBlJyksICcsJywgc3ltKCdUeXBlJyksICc+JywKCSAgICAgICAgICAgICAgICAg
ICAgc3ltKCdTZW1pQ29sb24nKSksCgkgIFNldGxpa2VSZXN0OiB0c2VxKCdzZXRsaWtlJywgJzwn
LCBzeW0oJ1R5cGUnKSwgJz4nLAoJICAgICAgICAgICAgICAgICAgICBzeW0oJ1NlbWlDb2xvbicp
KSwKCgkgIC8vIElkZW50aWZpZXJzIGFuZCBhcmd1bWVudHMuCgkgIElkZW50aWZpZXJMaXN0OiB0
cGx1cyhzeW0oJ2lkZW50aWZpZXInKSwgJywnKSwKCSAgQXJndW1lbnRMaXN0OiB0cmVwZWF0KHN5
bSgnQXJndW1lbnQnKSwgJywnKSwKCSAgQXJndW1lbnQ6IHRzZXEoc3ltKCdFeHRlbmRlZEF0dHJp
YnV0ZUxpc3QnKSwKCSAgICAgICAgICAgICAgICAgc3ltKCdPcHRpb25hbE9yUmVxdWlyZWRBcmd1
bWVudCcpKSwKCSAgT3B0aW9uYWxPclJlcXVpcmVkQXJndW1lbnQ6IGFsdChzeW0oJ09wdGlvbmFs
QXJndW1lbnQnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ1JlcXVp
cmVkQXJndW1lbnQnKSksCgkgIE9wdGlvbmFsQXJndW1lbnQ6IHRzZXEoJ29wdGlvbmFsJywgc3lt
KCdUeXBlJyksIHN5bSgnQXJndW1lbnROYW1lJyksIHN5bSgnRGVmYXVsdCcpKSwKCSAgUmVxdWly
ZWRBcmd1bWVudDogdHNlcShzeW0oJ1R5cGUnKSwgc3ltKCdFbGxpcHNpcycpLCBzeW0oJ0FyZ3Vt
ZW50TmFtZScpKSwKCSAgRGVmYXVsdDogb3B0aW9uYWwodHNlcSgnPScsIGFsdChzeW0oJ0NvbnN0
VmFsdWUnKSwgc3ltKCdzdHJpbmcnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0c2VxKCdbJywgJ10nKSkpKSwKCSAgLy8gTk9URTogU2hvdWxkIGJlIChBcmd1bWVudE5hbWVL
ZXl3b3JkfGlkZW50aWZpZXIpOyB3ZSBsZWF2ZSBkZWFsaW5nIHdpdGgKCSAgLy8ga2V5d29yZHMg
dG8gc2VtYW50aWMgYWN0aW9ucy4KCSAgQXJndW1lbnROYW1lOiBzeW0oJ2lkZW50aWZpZXInKSwK
CSAgRWxsaXBzaXM6IG9wdGlvbmFsKCcuLi4nKSwKCgkgIC8vIFZhbHVlcy4KCSAgLy8gTk9URTog
VGhpcyBhcHByb3hpbWF0ZXMgdGhlIHVuaW9uIG9mIGEgYnVuY2ggb2YgbGl0ZXJhbHMuIFRoZSAt
CgkgIC8vIGlkZW50aWZpZXIgcGFydCBpcyBmb3IgbGl0ZXJhbHMgbGlrZSAiLUluZmluaXR5Ii4K
CSAgQ29uc3RWYWx1ZTogYWx0KHN5bSgnQ29uc3RWYWx1ZUNvcm5lckNhc2UnKSwKCSAgICAgICAg
ICAgICAgICAgIHN5bSgnZmxvYXQnKSwKCSAgICAgICAgICAgICAgICAgIHN5bSgnaW50ZWdlcicp
LAoJICAgICAgICAgICAgICAgICAgc3ltKCdpZGVudGlmaWVyJykpLAoJICBDb25zdFZhbHVlQ29y
bmVyQ2FzZTogdHNlcSgnLScsIHN5bSgnaWRlbnRpZmllcicpKSwKCgkgIC8vIFR5cGVzLgoJICAv
LyBOT1RFOiBXZSBkb24ndCBwYXJzZSB0aGUgdHlwZSBuYW1lICJhbnkiIHNwZWNpYWxseS4gVGhp
cyBtZWFucyB0aGF0IHdlCgkgIC8vIG1heSwgZm9yIGV4YW1wbGUsIHBhcnNlICJhbnk8Rm9vPiIg
YXMgYSB0eXBlLCB0aG91Z2ggaXQncyBub3QgYWxsb3dlZC4KCSAgVHlwZTogYWx0KHN5bSgnVW5p
b25UeXBlJyksIHN5bSgnTm9uVW5pb25UeXBlJykpLAoJICBVbmlvblR5cGU6IHRzZXEoJygnLCB0
cGx1cyhzeW0oJ1VuaW9uTWVtYmVyVHlwZScpLCAnb3InKSwgJyknLAoJICAgICAgICAgICAgICAg
ICAgc3ltKCdUeXBlU3VmZml4ZXMnKSksCgkgIC8vIE5PVEU6IFdlIHN1cHBvcnQgbmVzdGluZyBv
ZiB1bmlvbiB0eXBlcywgdGhvdWdoIHRoZSBzdGFuZGFyZCBkb2VzIG5vdC4KCSAgVW5pb25NZW1i
ZXJUeXBlOiBzeW0oJ1R5cGUnKSwKCSAgTm9uVW5pb25UeXBlOiBhbHQoc3ltKCdQYXJhbWV0ZXJp
emVkVHlwZScpLCBzeW0oJ1NpbXBsZVR5cGUnKSksCgkgIFBhcmFtZXRlcml6ZWRUeXBlOiB0c2Vx
KHN5bSgnU2ltcGxlVHlwZScpLCAnPCcsIHRwbHVzKHN5bSgnVHlwZScpLCAnLCcpLCAnPicsCgkg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN5bSgnVHlwZVN1ZmZpeGVzJykpLAoJICBTaW1wbGVU
eXBlOiB0c2VxKGFsdChzeW0oJ0J1aWx0SW5UeXBlTmFtZScpLCBzeW0oJ2lkZW50aWZpZXInKSks
CgkgICAgICAgICAgICAgICAgICAgc3ltKCdUeXBlU3VmZml4ZXMnKSksCgkgIC8vIEFwcHJveGlt
YXRpb24gb2YgbXVsdGktdG9rZW4gYnVpbHQtaW4gdHlwZSBuYW1lcy4KCSAgLy8gVE9ETzogUGFy
c2UgdGhpcyBjb3JyZWN0bHkuCgkgIEJ1aWx0SW5UeXBlTmFtZTogdHBsdXMoYWx0KCd1bnNpZ25l
ZCcsICdzaG9ydCcsICdsb25nJywgJ3VucmVzdHJpY3RlZCcsCgkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdmbG9hdCcsICdkb3VibGUnLCAnYnl0ZScsICdvY3RldCcpKSwKCSAgLy8gVE9E
TzogTWFrZSB0aGlzIHByb2R1Y3Rpb24gbW9yZSBjb21wcmVoZW5zaWJsZS4KCSAgLy8gSXQgYWxs
b3dzIGZvciBhIHNlcmllcyBvZiAiW10iIGFuZCAiPyIgd2l0aCBubyAiPz8icy4KCSAgVHlwZVN1
ZmZpeGVzOiBvcHRpb25hbChhbHQoCgkgICAgdHNlcShzeW0oJ051bGxhYmxlJyksCgkgICAgICAg
ICBvcHRpb25hbCh0c2VxKHN5bSgnQXJyYXknKSwgc3ltKCdUeXBlU3VmZml4ZXMnKSkpKSwKCSAg
ICB0c2VxKHN5bSgnQXJyYXknKSwgb3B0aW9uYWwoc3ltKCdUeXBlU3VmZml4ZXMnKSkpKSksCgkg
IE51bGxhYmxlOiBsaXRlcmFsKCc/JyksCgkgIEFycmF5OiB0c2VxKCdbJywgJ10nKSwKCSAgT3B0
aW9uYWxUeXBlOiBvcHRpb25hbCh0c2VxKCcsJywgc3ltKCdUeXBlJykpKSwKCgkgIC8vIEV4dGVu
ZGVkIGF0dHJpYnV0ZXMuCgkgIEV4dGVuZGVkQXR0cmlidXRlTGlzdDogb3B0aW9uYWwoCgkgICAg
dHNlcTEoMSwgJ1snLCB0cmVwZWF0KHN5bSgnRXh0ZW5kZWRBdHRyaWJ1dGUnKSwgJywnKSwgJ10n
KSksCgkgIEV4dGVuZGVkQXR0cmlidXRlOiBhbHQoc3ltKCdFeHRlbmRlZEF0dHJpYnV0ZUlkZW50
TGlzdCcpLAoJICAgICAgICAgICAgICAgICAgICAgICAgIHN5bSgnRXh0ZW5kZWRBdHRyaWJ1dGVO
YW1lZEFyZ0xpc3QnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ0V4dGVuZGVkQXR0
cmlidXRlSWRlbnRpZmllck9yU3RyaW5nJyksCgkgICAgICAgICAgICAgICAgICAgICAgICAgc3lt
KCdFeHRlbmRlZEF0dHJpYnV0ZUFyZ0xpc3QnKSwKCSAgICAgICAgICAgICAgICAgICAgICAgICBz
eW0oJ0V4dGVuZGVkQXR0cmlidXRlTm9BcmdzJykpLAoJICBFeHRlbmRlZEF0dHJpYnV0ZUlkZW50
TGlzdDogdHNlcShzeW0oJ2lkZW50aWZpZXInKSwgJz0nLCAnKCcsCgkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN5bSgnSWRlbnRpZmllck9yU3RyaW5nTGlzdCcpLCAnKScpLAoJ
ICBFeHRlbmRlZEF0dHJpYnV0ZU5hbWVkQXJnTGlzdDogdHNlcShzeW0oJ2lkZW50aWZpZXInKSwg
Jz0nLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ2lkZW50aWZp
ZXInKSwgJygnLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW0oJ0Fy
Z3VtZW50TGlzdCcpLCAnKScpLAoJICBFeHRlbmRlZEF0dHJpYnV0ZUlkZW50aWZpZXJPclN0cmlu
ZzogdHNlcShzeW0oJ2lkZW50aWZpZXInKSwgJz0nLAoJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzeW0oJ0lkZW50aWZpZXJPclN0cmluZycpKSwKCSAgRXh0ZW5k
ZWRBdHRyaWJ1dGVTdHI6IHRzZXEoc3ltKCdpZGVudGlmaWVyJyksICc9JywKCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ltKCdzdHJpbmcnKSksCgkgIEV4dGVuZGVkQXR0cmlidXRlQXJn
TGlzdDogdHNlcShzeW0oJ2lkZW50aWZpZXInKSwgJygnLAoJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ltKCdBcmd1bWVudExpc3QnKSwgJyknKSwKCSAgRXh0ZW5kZWRBdHRyaWJ1
dGVOb0FyZ3M6IHN5bSgnaWRlbnRpZmllcicpLAoKCSAgSWRlbnRpZmllck9yU3RyaW5nOiBhbHQo
c3ltKCdpZGVudGlmaWVyJyksIHN5bSgnc3RyaW5nJykpLAoJICBJZGVudGlmaWVyT3JTdHJpbmdM
aXN0OiB0cGx1cyhzeW0oJ0lkZW50aWZpZXJPclN0cmluZycpLCAnLCcpLAoJfTsKCglmdW5jdGlv
biBmU29ydChmcywgYSwgYikgewoJICB2YXIgYVZhbHVlOwoJICB2YXIgYlZhbHVlOwoJICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCBmcy5sZW5ndGg7IGkrKyApIHsKCSAgICBhVmFsdWUgPSBmc1tpXShh
KTsKCSAgICBiVmFsdWUgPSBmc1tpXShiKTsKCSAgICBpZiAoYVZhbHVlICE9PSB1bmRlZmluZWQg
JiYgYlZhbHVlICE9PSB1bmRlZmluZWQpIGJyZWFrOwoJICB9CgkgIGlmIChhVmFsdWUgPCBiVmFs
dWUpIHJldHVybiAtMTsKCSAgZWxzZSBpZiAoYVZhbHVlID4gYlZhbHVlKSByZXR1cm4gMTsKCSAg
cmV0dXJuIDA7Cgl9Cgl2YXIgc29ydCA9IGZTb3J0LmJpbmQodGhpcywgWwoJICBmdW5jdGlvbih2
KSB7IHJldHVybiB2Lm5hbWU7IH0sCgkgIGZ1bmN0aW9uKHYpIHsgcmV0dXJuIHYuaW1wbGVtZW50
ZXI7IH0sCgkgIGZ1bmN0aW9uKHYpIHsgcmV0dXJuIHYuY29uc3RydWN0b3IubmFtZTsgfSwKCV0p
OwoKCXBhcnNlci5hZGRBY3Rpb25zKAoJICBmdW5jdGlvbiBpZGVudGlmaWVyKHYpIHsKCSAgICBy
ZXR1cm4gdlswXSArIHZbMV07CgkgIH0sCgkgIGZ1bmN0aW9uIFNUQVJUKHYpIHsKCSAgICByZXR1
cm4gdlsxXTsKCSAgfSwKCSAgZnVuY3Rpb24gRGVmaW5pdGlvbnModikgewoJICAgIGlmICggdiA9
PT0gbnVsbCApIHJldHVybiBudWxsOwoJICAgIHJldHVybiB2Lm1hcChmdW5jdGlvbihhdHRyc0Fu
ZE1lbWJlcikgewoJICAgICAgaWYgKCBhdHRyc0FuZE1lbWJlclswXSAhPT0gbnVsbCApCgkgICAg
ICAgIGF0dHJzQW5kTWVtYmVyWzFdLmF0dHJzID0gYXR0cnNBbmRNZW1iZXJbMF07CgkgICAgICBy
ZXR1cm4gYXR0cnNBbmRNZW1iZXJbMV07CgkgICAgfSk7CgkgIH0sCgkgIGZ1bmN0aW9uIENhbGxi
YWNrKHYpIHsKCSAgICByZXR1cm4gbmV3IGFzdC5DYWxsYmFjayh2WzFdKTsKCSAgfSwKCSAgZnVu
Y3Rpb24gSW50ZXJmYWNlTGlrZSh2KSB7CgkgICAgdmFyIHR5cGVOYW1lID0gdlswXS5jaGFyQXQo
MCkudG9VcHBlckNhc2UoKSArIHZbMF0uc3Vic3RyKDEpOwoJICAgIHJldHVybiB2WzJdID09PSBu
dWxsID8KCSAgICAgIG5ldyBhc3RbdHlwZU5hbWVdKHsgbmFtZTogdlsxXSwgbWVtYmVyczogdls0
XSB9KSA6CgkgICAgICBuZXcgYXN0W3R5cGVOYW1lXSh7IGluaGVyaXRzRnJvbTogdlsyXSwgbmFt
ZTogdlsxXSwgbWVtYmVyczogdls0XSB9KTsKCSAgfSwKCSAgZnVuY3Rpb24gQ2FsbGJhY2tSZXN0
KHYpIHsKCSAgICByZXR1cm4gdls0XS5sZW5ndGggPT09IDAgPyB7IG5hbWU6IHZbMF0sIHJldHVy
blR5cGU6IHZbMl0gfSA6CgkgICAgeyBuYW1lOiB2WzBdLCByZXR1cm5UeXBlOiB2WzJdLCBhcmdz
OiB2WzRdIH07CgkgIH0sCgkgIGZ1bmN0aW9uIE5hbWVzcGFjZSh2KSB7CgkgICAgcmV0dXJuIG5l
dyBhc3QuTmFtZXNwYWNlKHsgbmFtZTogdlsxXSwgbWVtYmVyczogdlszXSB9KTsKCSAgfSwKCSAg
ZnVuY3Rpb24gTmFtZXNwYWNlTWVtYmVycyh2KSB7CgkgICAgaWYgKCB2ID09PSBudWxsICkgcmV0
dXJuIG51bGw7CgkgICAgcmV0dXJuIHYubWFwKGZ1bmN0aW9uKGF0dHJzQW5kTWVtYmVyKSB7Cgkg
ICAgICBpZiAoIGF0dHJzQW5kTWVtYmVyWzBdICE9PSBudWxsICkKCSAgICAgICAgYXR0cnNBbmRN
ZW1iZXJbMV0uYXR0cnMgPSBhdHRyc0FuZE1lbWJlclswXTsKCSAgICAgIHJldHVybiBhdHRyc0Fu
ZE1lbWJlclsxXTsKCSAgICB9KS5zb3J0KHNvcnQpOwoJICB9LAoJICBmdW5jdGlvbiBQYXJ0aWFs
KHYpIHsKCSAgICB2WzFdLmlzUGFydGlhbCA9IHRydWU7CgkgICAgcmV0dXJuIHZbMV07CgkgIH0s
CgkgIGZ1bmN0aW9uIFBhcnRpYWxJbnRlcmZhY2UodikgewoJICAgIHJldHVybiBuZXcgYXN0LlBh
cnRpYWxJbnRlcmZhY2UoeyBuYW1lOiB2WzFdLCBtZW1iZXJzOiB2WzNdIH0pOwoJICB9LAoJICBm
dW5jdGlvbiBQYXJ0aWFsRGljdGlvbmFyeSh2KSB7CgkgICAgcmV0dXJuIG5ldyBhc3QuRGljdGlv
bmFyeSh7IG5hbWU6IHZbMV0sIG1lbWJlcnM6IHZbM10gfSk7CgkgIH0sCgkgIGZ1bmN0aW9uIERp
Y3Rpb25hcnkodikgewoJICAgIHJldHVybiB2WzJdID09PSBudWxsID8KCSAgICAgIG5ldyBhc3Qu
RGljdGlvbmFyeSh7IG5hbWU6IHZbMV0sIG1lbWJlcnM6IHZbNF0gfSkgOgoJICAgICAgbmV3IGFz
dC5EaWN0aW9uYXJ5KHsKCSAgICAgICAgaW5oZXJpdHNGcm9tOiB2WzJdLAoJICAgICAgICBuYW1l
OiB2WzFdLAoJICAgICAgICBtZW1iZXJzOiB2WzRdLAoJICAgICAgfSk7CgkgIH0sCgkgIGZ1bmN0
aW9uIERpY3Rpb25hcnlNZW1iZXJzKHYpIHsKCSAgICBpZiAoIHYgPT09IG51bGwgKSByZXR1cm4g
bnVsbDsKCSAgICByZXR1cm4gdi5tYXAoZnVuY3Rpb24oYXR0cnNBbmRNZW1iZXIpIHsKCSAgICAg
IGlmICggYXR0cnNBbmRNZW1iZXJbMF0gIT09IG51bGwgKQoJICAgICAgICBhdHRyc0FuZE1lbWJl
clsxXS5hdHRycyA9IGF0dHJzQW5kTWVtYmVyWzBdOwoJICAgICAgcmV0dXJuIGF0dHJzQW5kTWVt
YmVyWzFdOwoJICAgIH0pLnNvcnQoc29ydCk7CgkgIH0sCgkgIGZ1bmN0aW9uIERpY3Rpb25hcnlN
ZW1iZXIodikgewoJICAgIHZhciByZXQgPSB7IHR5cGU6IHZbMV0sIG5hbWU6IHZbMl0gfTsKCSAg
ICBpZiAoIHZbMF0gIT09IG51bGwgKSByZXQuaXNSZXF1aXJlZCA9IHRydWU7CgkgICAgaWYgKCB2
WzNdICE9PSBudWxsICkgcmV0LmRlZmF1bHRWYWx1ZSA9IHZbM107CgkgICAgcmV0dXJuIHJldDsK
CSAgfSwKCSAgZnVuY3Rpb24gRW51bSh2KSB7CgkgICAgcmV0dXJuIG5ldyBhc3QuRW51bSh7IG5h
bWU6IHZbMV0sIHZhbHVlOiB2WzNdIH0pOwoJICB9LAoJICBmdW5jdGlvbiBUeXBlZGVmKHYpIHsK
CSAgICByZXR1cm4gbmV3IGFzdC5UeXBlZGVmKHsgdHlwZTogdlsxXSwgbmFtZTogdlsyXSB9KTsK
CSAgfSwKCSAgZnVuY3Rpb24gSW1wbGVtZW50c1N0YXRlbWVudCh2KSB7CgkgICAgcmV0dXJuIG5l
dyBhc3QuSW1wbGVtZW50cyh7IGltcGxlbWVudGVyOiB2WzBdLCBpbXBsZW1lbnRlZDogdlsyXSB9
KTsKCSAgfSwKCSAgZnVuY3Rpb24gSW50ZXJmYWNlTWVtYmVycyh2KSB7CgkgICAgaWYgKCB2ID09
PSBudWxsICkgcmV0dXJuIG51bGw7CgkgICAgcmV0dXJuIHYubWFwKGZ1bmN0aW9uKGF0dHJzQW5k
TWVtYmVyKSB7CgkgICAgICBpZiAoIGF0dHJzQW5kTWVtYmVyWzBdICE9PSBudWxsICkKCSAgICAg
ICAgYXR0cnNBbmRNZW1iZXJbMV0uYXR0cnMgPSBhdHRyc0FuZE1lbWJlclswXTsKCSAgICAgIHJl
dHVybiBhdHRyc0FuZE1lbWJlclsxXTsKCSAgICB9KS5zb3J0KHNvcnQpOwoJICB9LAoJICBmdW5j
dGlvbiBDb25zdCh2KSB7CgkgICAgcmV0dXJuIHsgaXNDb25zdDogdHJ1ZSwgdHlwZTogdlsxXSwg
bmFtZTogdlsyXSwgdmFsdWU6IHZbNF0gfTsKCSAgfSwKCSAgZnVuY3Rpb24gT3BlcmF0aW9uKHYp
IHsKCSAgICBpZiAoIHZbMF0ubGVuZ3RoID4gMCApIHZbMl0uc3BlY2lhbHMgPSB2WzBdOwoJICAg
IHZbMl0ucmV0dXJuVHlwZSA9IHZbMV07CgkgICAgcmV0dXJuIHZbMl07CgkgIH0sCgkgIGZ1bmN0
aW9uIFNwZWNpYWxzKHYpIHsKCSAgICByZXR1cm4gdjsKCSAgfSwKCSAgZnVuY3Rpb24gU2VyaWFs
aXplcih2KSB7CgkgICAgcmV0dXJuIG5ldyBhc3QuU2VyaWFsaXplcih2WzFdKTsKCSAgfSwKCSAg
ZnVuY3Rpb24gU3RyaW5naWZpZXIodikgewoJICAgIGlmICggdlsxXSA9PT0gJzsnICkgcmV0dXJu
IG5ldyBhc3QuU3RyaW5naWZpZXIoe30pOwoJICAgIHJldHVybiBuZXcgYXN0LlN0cmluZ2lmaWVy
KHZbMV0pOwoJICB9LAoJICBmdW5jdGlvbiBTdGF0aWNNZW1iZXIodikgewoJICAgIHZbMV0uaXNT
dGF0aWMgPSB0cnVlOwoJICAgIHJldHVybiB2WzFdOwoJICB9LAoJICBmdW5jdGlvbiBJdGVyYWJs
ZSh2KSB7CgkgICAgcmV0dXJuIHZbM10gPT09IG51bGwgPyBuZXcgYXN0Lkl0ZXJhYmxlKHsgdmFs
dWVUeXBlOiB2WzJdIH0pIDoKCSAgICAgIG5ldyBhc3QuSXRlcmFibGUoeyBrZXlUeXBlOiB2WzJd
LCB2YWx1ZVR5cGU6IHZbM10gfSk7CgkgIH0sCgkgIGZ1bmN0aW9uIE1lbWJlcih2KSB7CgkgICAg
aWYgKCB2WzBdICE9PSBudWxsICkgdlsyXS5pc0luaGVyaXRlZCA9IHRydWU7CgkgICAgaWYgKCB2
WzFdICE9PSBudWxsICkgdlsyXS5pc1JlYWRPbmx5ID0gdHJ1ZTsKCSAgICByZXR1cm4gdlsyXTsK
CSAgfSwKCSAgZnVuY3Rpb24gUmVhZE9ubHlBdHRyaWJ1dGVSZXN0KHYpIHsKCSAgICBpZiAoIHZb
MF0gIT09IG51bGwgKSB2WzFdLmlzUmVhZE9ubHkgPSB0cnVlOwoJICAgIHJldHVybiB2WzFdOwoJ
ICB9LAoJICBmdW5jdGlvbiBPcGVyYXRpb25SZXN0KHYpIHsKCSAgICB2YXIgcmV0ID0ge307Cgkg
ICAgaWYgKCB2WzJdLmxlbmd0aCA+IDAgKSByZXQuYXJncyA9IHZbMl07CgkgICAgaWYgKCB2WzBd
ID09PSBudWxsICkgcmV0dXJuIHJldDsKCSAgICByZXQubmFtZSA9IHZbMF07CgkgICAgcmV0dXJu
IHJldDsKCSAgfSwKCSAgZnVuY3Rpb24gU2VyaWFsaXplclJlc3RPcGVyYXRpb24odikgewoJICAg
IGlmICggdlswXSA9PT0gbnVsbCApIHJldHVybiB2WzFdOwoJICAgIHZbMV0udHlwZSA9IHZbMF07
CgkgICAgcmV0dXJuIHZbMV07CgkgIH0sCgkgIGZ1bmN0aW9uIFNlcmlhbGl6ZXJSZXN0RW1wdHko
dikgewoJICAgIHJldHVybiB7fTsKCSAgfSwKCSAgZnVuY3Rpb24gU2VyaWFsaXphdGlvblBhdHRl
cm4odikgewoJICAgIGlmICggdlswXSA9PT0gJ3snICkgcmV0dXJuIHsgbWFwUGF0dGVybjogdlsx
XSB9OwoJICAgIHJldHVybiB7IGFycmF5UGF0dGVybjogdlsxXSB9OwoJICB9LAoJICBmdW5jdGlv
biBBdHRyaWJ1dGVSZXN0KHYpIHsKCSAgICByZXR1cm4gbmV3IGFzdC5BdHRyaWJ1dGUoeyB0eXBl
OiB2WzFdLCBuYW1lOiB2WzJdIH0pOwoJICB9LAoJICBmdW5jdGlvbiBNYXBsaWtlUmVzdCh2KSB7
CgkgICAgcmV0dXJuIG5ldyBhc3QuTWFwTGlrZSh7IGtleVR5cGU6IHZbMl0sIHZhbHVlVHlwZTog
dls0XSB9KTsKCSAgfSwKCSAgZnVuY3Rpb24gU2V0bGlrZVJlc3QodikgewoJICAgIHJldHVybiBu
ZXcgYXN0LlNldExpa2UoeyB0eXBlOiB2WzJdIH0pOwoJICB9LAoJICBmdW5jdGlvbiBBcmd1bWVu
dCh2KSB7CgkgICAgaWYgKCB2WzBdICkgdlsxXS5hdHRycyA9IHZbMF07CgkgICAgcmV0dXJuIHZb
MV07CgkgIH0sCgkgIGZ1bmN0aW9uIE9wdGlvbmFsQXJndW1lbnQodikgewoJICAgIHJldHVybiB2
WzNdID09PSBudWxsID8geyB0eXBlOiB2WzFdLCBuYW1lOiB2WzJdLCBvcHRpb25hbDogdHJ1ZSB9
IDoKCSAgICB7IHR5cGU6IHZbMV0sIG5hbWU6IHZbMl0sIG9wdGlvbmFsOiB0cnVlLCBkZWZhdWx0
VmFsdWU6IHZbM10gfTsKCSAgfSwKCSAgZnVuY3Rpb24gUmVxdWlyZWRBcmd1bWVudCh2KSB7Cgkg
ICAgcmV0dXJuIHZbMV0gPT09IG51bGwgPyB7IHR5cGU6IHZbMF0sIG5hbWU6IHZbMl0gfSA6Cgkg
ICAgeyB0eXBlOiB2WzBdLCBuYW1lOiB2WzJdLCBpc1ZhcmlhZGljOiB0cnVlIH07CgkgIH0sCgkg
IGZ1bmN0aW9uIERlZmF1bHQodikgewoJICAgIGlmICggdiA9PT0gbnVsbCApIHJldHVybiBudWxs
OwoJICAgIHJldHVybiB2WzFdOwoJICB9LAoJICBmdW5jdGlvbiBDb25zdFZhbHVlQ29ybmVyQ2Fz
ZSh2KSB7CgkgICAgcmV0dXJuIHYuam9pbignJyk7CgkgIH0sCgkgIGZ1bmN0aW9uIFVuaW9uVHlw
ZSh2KSB7CgkgICAgcmV0dXJuIHZbM10gPT09IG51bGwgPyBuZXcgYXN0LlVuaW9uVHlwZSh7IHR5
cGVzOiB2WzFdIH0pIDoKCSAgICAgIG5ldyBhc3QuVW5pb25UeXBlKHsgdHlwZXM6IHZbMV0sIHBh
cmFtczogdlszXSB9KTsKCSAgfSwKCSAgZnVuY3Rpb24gUGFyYW1ldGVyaXplZFR5cGUodikgewoJ
ICAgIGlmICggdlswXS5wYXJhbXMgKSB2WzBdLnBhcmFtcyA9IHZbMF0ucGFyYW1zLmNvbmNhdCh2
WzJdKTsKCSAgICBlbHNlICAgICAgICAgICAgICAgdlswXS5wYXJhbXMgPSB2WzJdOwoJICAgIGlm
ICggdls0XSAhPT0gbnVsbCApIHZbMF0ucGFyYW1zID0gdlswXS5wYXJhbXMuY29uY2F0KHZbNF0p
OwoJICAgIHJldHVybiB2WzBdOwoJICB9LAoJICBmdW5jdGlvbiBTaW1wbGVUeXBlKHYpIHsKCSAg
ICByZXR1cm4gdiA9PT0gbnVsbCA/IG51bGwgOgoJICAgICAgdlsxXSA9PT0gbnVsbCA/IHsgbmFt
ZTogdlswXSB9IDogeyBuYW1lOiB2WzBdLCBwYXJhbXM6IHZbMV0gfTsKCSAgfSwKCSAgZnVuY3Rp
b24gQnVpbHRJblR5cGVOYW1lKHYpIHsKCSAgICBpZiAoIHYgPT09IG51bGwgKSByZXR1cm4gbnVs
bDsKCSAgICByZXR1cm4gdi5qb2luKCcgJyk7CgkgIH0sCgkgIGZ1bmN0aW9uIFR5cGVTdWZmaXhl
cyh2KSB7CgkgICAgaWYgKCB2ID09PSBudWxsICkgcmV0dXJuIG51bGw7CgkgICAgaWYgKCB2WzFd
ID09PSBudWxsICkgcmV0dXJuIFsgdlswXSBdOwoJICAgIGlmICggdlswXSA9PT0gJ251bGxhYmxl
JyApIHJldHVybiBbIHZbMF0sIHZbMV1bMF0gXS5jb25jYXQodlsxXVsxXSk7CgkgICAgZWxzZSAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsgdlswXSBdLmNvbmNhdCh2WzFdKTsKCSAgICBp
ZiAoIHZbMV0gKSByZXR1cm4gdlswXS5jb25jYXQodlsxXSk7CgkgICAgcmV0dXJuIFsgdlswXSBd
OwoJICB9LAoJICBmdW5jdGlvbiBOdWxsYWJsZSh2KSB7CgkgICAgcmV0dXJuICdudWxsYWJsZSc7
CgkgIH0sCgkgIGZ1bmN0aW9uIEFycmF5KHYpIHsKCSAgICByZXR1cm4gJ2FycmF5JzsKCSAgfSwK
CSAgZnVuY3Rpb24gT3B0aW9uYWxUeXBlKHYpIHsKCSAgICByZXR1cm4gdiA9PT0gbnVsbCA/IG51
bGwgOiB2WzFdOwoJICB9LAoJICBmdW5jdGlvbiBFeHRlbmRlZEF0dHJpYnV0ZUxpc3QodikgewoJ
ICAgIGlmICggdiA9PT0gbnVsbCApIHJldHVybiBudWxsOwoJICAgIHJldHVybiB2LnNvcnQoc29y
dCk7CgkgIH0sCgkgIGZ1bmN0aW9uIEV4dGVuZGVkQXR0cmlidXRlKHYpIHsKCSAgICByZXR1cm4g
bmV3IGFzdC5FeHRlbmRlZEF0dHJpYnV0ZSh2KTsKCSAgfSwKCSAgZnVuY3Rpb24gRXh0ZW5kZWRB
dHRyaWJ1dGVJZGVudExpc3QodikgewoJICAgIC8vIEUuZy4sICJmb289KGEsIGIpIgoJICAgIHJl
dHVybiB7IG5hbWU6IHZbMF0sIGlkZW50aWZpZXJzOiB2WzNdIH07CgkgIH0sCgkgIGZ1bmN0aW9u
IEV4dGVuZGVkQXR0cmlidXRlTmFtZWRBcmdMaXN0KHYpIHsKCSAgICAvLyBFLmcuLCAiYT1iKFQx
IGMsIFQyIGQpIgoJICAgIHJldHVybiB2WzRdLmxlbmd0aCA9PT0gMCA/IHsgbmFtZTogdlswXSwg
b3BOYW1lOiB2WzJdIH0gOgoJICAgIHsgbmFtZTogdlswXSwgb3BOYW1lOiB2WzJdLCBhcmdzOiB2
WzRdIH07CgkgIH0sCgkgIGZ1bmN0aW9uIEV4dGVuZGVkQXR0cmlidXRlSWRlbnRpZmllck9yU3Ry
aW5nKHYpIHsKCSAgICByZXR1cm4geyBuYW1lOiB2WzBdLCB2YWx1ZTogdlsyXSB9OwoJICB9LAoJ
ICBmdW5jdGlvbiBFeHRlbmRlZEF0dHJpYnV0ZUFyZ0xpc3QodikgewoJICAgIHJldHVybiB2WzJd
Lmxlbmd0aCA9PT0gMCA/IHsgbmFtZTogdlswXSB9IDoKCSAgICB7IG5hbWU6IHZbMF0sIGFyZ3M6
IHZbMl0gfTsKCSAgfSwKCSAgZnVuY3Rpb24gRXh0ZW5kZWRBdHRyaWJ1dGVOb0FyZ3ModikgewoJ
ICAgIHJldHVybiB7IG5hbWU6IHYgfTsKCSAgfQoJKTsKCgkvLyBBdHRhY2ggZXhwb3J0ZWQgbW9k
dWxlcy90eXBlcyB0byBtb2R1bGUgZXhwb3J0cy4KCXZhciBEQiA9IF9fd2VicGFja19yZXF1aXJl
X18oMTMyKTsKCXZhciBWaXNpdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzYpOwoJdmFyIFZp
c2l0b3JHZW5lcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNyk7Cgltb2R1bGUuZXhwb3J0
cyA9IHsKCSAgcGFyc2VyOiBwYXJzZXIsCgkgIGFzdDogYXN0LAoJICBEQjogREIsCgkgIFZpc2l0
b3I6IFZpc2l0b3IsCgkgIFZpc2l0b3JHZW5lcmF0b3I6IFZpc2l0b3JHZW5lcmF0b3IsCgl9OwoK
Ci8qKiovIH0pLAovKiAxMTUgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193
ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8qKgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCgkgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAg
ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJ
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2
YXIgX2dldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTYpOwoKCXZhciBfZ2V0
UHJvdG90eXBlT2YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0UHJvdG90eXBlT2YpOwoK
CXZhciBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEx
OSk7CgoJdmFyIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMyA9IF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yKTsKCgl2YXIgX2luaGVyaXRzMiA9IF9f
d2VicGFja19yZXF1aXJlX18oMTIwKTsKCgl2YXIgX2luaGVyaXRzMyA9IF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQoX2luaGVyaXRzMik7CgoJdmFyIF9nZXRJdGVyYXRvcjIgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fKDcyKTsKCgl2YXIgX2dldEl0ZXJhdG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQo
X2dldEl0ZXJhdG9yMik7CgoJdmFyIF9hc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3KTsK
Cgl2YXIgX2Fzc2lnbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3NpZ24pOwoKCXZhciBf
Y2xhc3NDYWxsQ2hlY2syID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDEpOwoKCXZhciBfY2xhc3ND
YWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hlY2syKTsKCgl2
YXIgX2NyZWF0ZUNsYXNzMiA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTsKCgl2YXIgX2NyZWF0
ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7CgoJZnVuY3Rp
b24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01v
ZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCgl2YXIgc2VyaWFsaXplID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxMjgpOwoJdmFyIGRlZmF1bHRSZWdpc3RyeSA9IHNlcmlhbGl6ZS5yZWdp
c3RyeTsKCXZhciBqc29uTW9kdWxlID0gc2VyaWFsaXplLkpTT047CgoJdmFyIEJhc2UgPSBmdW5j
dGlvbiAoKSB7CgkgIGZ1bmN0aW9uIEJhc2Uob3B0cykgewoJICAgICgwLCBfY2xhc3NDYWxsQ2hl
Y2szLmRlZmF1bHQpKHRoaXMsIEJhc2UpOwoKCSAgICB0aGlzLmluaXQob3B0cyB8fCB7fSk7Cgkg
IH0KCgkgICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEJhc2UsIFt7CgkgICAga2V5OiAnaW5p
dCcsCgkgICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQob3B0cykgewoJICAgICAgKDAsIF9hc3NpZ24y
LmRlZmF1bHQpKHRoaXMsIG9wdHMpOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogJ2NvbmNyZXRp
emUnLAoJICAgIHZhbHVlOiBmdW5jdGlvbiBjb25jcmV0aXplKGRiKSB7CgkgICAgICBpZiAodGhp
cy5pc0NvbmNyZXRlXykgcmV0dXJuIHRoaXM7CgoJICAgICAgdmFyIHJldCA9IHZvaWQgMDsKCSAg
ICAgIHRyeSB7CgkgICAgICAgIHJldCA9IHRoaXMuY29uY3JldGl6ZV8oZGIpOwoJICAgICAgfSBj
YXRjaCAoZSkgewoJICAgICAgICBjb25zb2xlLndhcm4oZSk7CgkgICAgICAgIHJldCA9IHRoaXM7
CgkgICAgICB9CgkgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAnaXNDb25jcmV0ZV8n
LCB7CgkgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAoJICAgICAgICB2YWx1ZTogdHJ1ZQoJICAg
ICAgfSk7CgoJICAgICAgcmV0dXJuIHJldDsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICdjb25j
cmV0aXplXycsCgkgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbmNyZXRpemVfKGRiKSB7CgkgICAgICBy
ZXR1cm4gdGhpczsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICdjYW5vbmljYWxpemUnLAoJICAg
IHZhbHVlOiBmdW5jdGlvbiBjYW5vbmljYWxpemUoZGIpIHsKCSAgICAgIGlmICh0aGlzLmlzQ2Fu
b25pY2FsXykgcmV0dXJuIHRoaXM7CgkgICAgICBpZiAoIXRoaXMuaXNDb25jcmV0ZV8pIHRocm93
IG5ldyBFcnJvcignRXhwZWN0IGNhbm9uaWNhbGl6ZWQgdG8gYmUgY29uY3JldGUnKTsKCgkgICAg
ICB2YXIgcmV0ID0gdm9pZCAwOwoJICAgICAgdHJ5IHsKCSAgICAgICAgcmV0ID0gdGhpcy5jYW5v
bmljYWxpemVfKGRiKTsKCSAgICAgIH0gY2F0Y2ggKGUpIHsKCSAgICAgICAgY29uc29sZS53YXJu
KGUpOwoJICAgICAgICByZXQgPSB0aGlzOwoJICAgICAgfQoKCSAgICAgIGlmIChyZXQubmFtZSkg
ewoJICAgICAgICB2YXIgcmVzdWx0ID0gZGIuZmluZCgnbmFtZScsIHJldC5uYW1lKTsKCSAgICAg
ICAgaWYgKHJlc3VsdC5sZW5ndGggIT09IDEpIHRocm93IG5ldyBFcnJvcignRXhwZWN0IHRvIGZp
bmQgc2luZ2xlIGVudGl0eSBhZnRlciBjYW5vbmljYWxpemF0aW9uJyk7CgkgICAgICAgIGlmIChy
ZXN1bHRbMF0gIT09IHJldCkgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3QgdG8gZmluZCB0aGlzIGVu
dGl0eSBhZnRlciBjYW5vbmljYWxpemF0aW9uJyk7CgkgICAgICB9CgoJICAgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHJldCwgJ2lzQ2Fub25pY2FsXycsIHsKCSAgICAgICAgZW51bWVyYWJsZTog
ZmFsc2UsCgkgICAgICAgIHZhbHVlOiB0cnVlCgkgICAgICB9KTsKCgkgICAgICByZXR1cm4gcmV0
OwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogJ2Nhbm9uaWNhbGl6ZV8nLAoJICAgIHZhbHVlOiBm
dW5jdGlvbiBjYW5vbmljYWxpemVfKGRiKSB7CgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9Cgkg
IH1dKTsKCSAgcmV0dXJuIEJhc2U7Cgl9KCk7CgoJZnVuY3Rpb24gY29uY3JldGl6ZUluaGVyaXRh
bmNlKGRiKSB7CgkgIGlmICghdGhpcy5pbmhlcml0c0Zyb20pIHJldHVybiB0aGlzOwoKCSAgdmFy
IHJlc3VsdCA9IGRiLmZpbmQoJ25hbWUnLCB0aGlzLmluaGVyaXRzRnJvbSk7CgkgIGlmIChyZXN1
bHQubGVuZ3RoICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdCB0byBmaW5kIHNpbmdsZSBl
bnRpdHkgdG8gaW5oZXJpdCBmcm9tJyk7CgoJICB2YXIgaW5oZXJpdHNGcm9tID0gcmVzdWx0WzBd
OwoJICBpbmhlcml0c0Zyb20uY29uY3JldGl6ZSgpOwoKCSAgdmFyIF9pdGVyYXRvck5vcm1hbENv
bXBsZXRpb24gPSB0cnVlOwoJICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTsKCSAgdmFy
IF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkOwoKCSAgdHJ5IHsKCSAgICBmb3IgKHZhciBfaXRl
cmF0b3IgPSAoMCwgX2dldEl0ZXJhdG9yMy5kZWZhdWx0KShpbmhlcml0c0Zyb20ubWVtYmVycyks
IF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3Iu
bmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHsKCSAgICAg
IHZhciBtZW1iZXIgPSBfc3RlcC52YWx1ZTsKCgkgICAgICB2YXIgbmV3TWVtYmVyID0ganNvbk1v
ZHVsZS5kZWVwQ2xvbmUobWVtYmVyKTsKCSAgICAgIGlmICghbmV3TWVtYmVyLmZyb20pIG5ld01l
bWJlci5mcm9tID0gdGhpcy5pbmhlcml0c0Zyb207CgkgICAgICB0aGlzLm1lbWJlcnMucHVzaChu
ZXdNZW1iZXIpOwoJICAgIH0KCSAgfSBjYXRjaCAoZXJyKSB7CgkgICAgX2RpZEl0ZXJhdG9yRXJy
b3IgPSB0cnVlOwoJICAgIF9pdGVyYXRvckVycm9yID0gZXJyOwoJICB9IGZpbmFsbHkgewoJICAg
IHRyeSB7CgkgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9y
LnJldHVybikgewoJICAgICAgICBfaXRlcmF0b3IucmV0dXJuKCk7CgkgICAgICB9CgkgICAgfSBm
aW5hbGx5IHsKCSAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikgewoJICAgICAgICB0aHJvdyBf
aXRlcmF0b3JFcnJvcjsKCSAgICAgIH0KCSAgICB9CgkgIH0KCgkgIHJldHVybiB0aGlzOwoJfQoK
CXZhciBDYWxsYmFjayA9IGZ1bmN0aW9uIChfQmFzZSkgewoJICAoMCwgX2luaGVyaXRzMy5kZWZh
dWx0KShDYWxsYmFjaywgX0Jhc2UpOwoKCSAgZnVuY3Rpb24gQ2FsbGJhY2soKSB7CgkgICAgKDAs
IF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgQ2FsbGJhY2spOwoJICAgIHJldHVybiAo
MCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChDYWxsYmFjay5f
X3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoQ2FsbGJhY2spKS5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpKTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCko
Q2FsbGJhY2ssIG51bGwsIFt7CgkgICAga2V5OiAnbmFtZScsCgkgICAgZ2V0OiBmdW5jdGlvbiBn
ZXQoKSB7CgkgICAgICByZXR1cm4gJ0NhbGxiYWNrJzsKCSAgICB9CgkgIH1dKTsKCSAgcmV0dXJu
IENhbGxiYWNrOwoJfShCYXNlKTsKCglkZWZhdWx0UmVnaXN0cnkucmVnaXN0ZXIoQ2FsbGJhY2sp
OwoKCXZhciBFeGNlcHRpb24gPSBmdW5jdGlvbiAoX0Jhc2UyKSB7CgkgICgwLCBfaW5oZXJpdHMz
LmRlZmF1bHQpKEV4Y2VwdGlvbiwgX0Jhc2UyKTsKCgkgIGZ1bmN0aW9uIEV4Y2VwdGlvbigpIHsK
CSAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBFeGNlcHRpb24pOwoJICAg
IHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChF
eGNlcHRpb24uX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKEV4Y2Vw
dGlvbikpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwoJICB9CgoJICAoMCwgX2NyZWF0ZUNsYXNz
My5kZWZhdWx0KShFeGNlcHRpb24sIG51bGwsIFt7CgkgICAga2V5OiAnbmFtZScsCgkgICAgZ2V0
OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gJ0V4Y2VwdGlvbic7CgkgICAgfQoJICB9
XSk7CgkgIHJldHVybiBFeGNlcHRpb247Cgl9KEJhc2UpOwoKCWRlZmF1bHRSZWdpc3RyeS5yZWdp
c3RlcihFeGNlcHRpb24pOwoKCXZhciBJbnRlcmZhY2UgPSBmdW5jdGlvbiAoX0Jhc2UzKSB7Cgkg
ICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKEludGVyZmFjZSwgX0Jhc2UzKTsKCgkgIGZ1bmN0aW9u
IEludGVyZmFjZSgpIHsKCSAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBJ
bnRlcmZhY2UpOwoJICAgIHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRl
ZmF1bHQpKHRoaXMsIChJbnRlcmZhY2UuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2Yy
LmRlZmF1bHQpKEludGVyZmFjZSkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwoJICB9CgoJICAo
MCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShJbnRlcmZhY2UsIG51bGwsIFt7CgkgICAga2V5OiAn
bmFtZScsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gJ0ludGVyZmFj
ZSc7CgkgICAgfQoJICB9XSk7CgkgIHJldHVybiBJbnRlcmZhY2U7Cgl9KEJhc2UpOwoKCUludGVy
ZmFjZS5wcm90b3R5cGUuY29uY3JldGl6ZV8gPSBjb25jcmV0aXplSW5oZXJpdGFuY2U7CglkZWZh
dWx0UmVnaXN0cnkucmVnaXN0ZXIoSW50ZXJmYWNlKTsKCgl2YXIgTmFtZXNwYWNlID0gZnVuY3Rp
b24gKF9CYXNlNCkgewoJICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShOYW1lc3BhY2UsIF9CYXNl
NCk7CgoJICBmdW5jdGlvbiBOYW1lc3BhY2UoKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMu
ZGVmYXVsdCkodGhpcywgTmFtZXNwYWNlKTsKCSAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoTmFtZXNwYWNlLl9fcHJvdG9fXyB8fCAoMCwg
X2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShOYW1lc3BhY2UpKS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpKTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoTmFtZXNwYWNlLCBudWxs
LCBbewoJICAgIGtleTogJ25hbWUnLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAg
cmV0dXJuICdOYW1lc3BhY2UnOwoJICAgIH0KCSAgfV0pOwoJICByZXR1cm4gTmFtZXNwYWNlOwoJ
fShCYXNlKTsKCglkZWZhdWx0UmVnaXN0cnkucmVnaXN0ZXIoTmFtZXNwYWNlKTsKCgl2YXIgUGFy
dGlhbEludGVyZmFjZSA9IGZ1bmN0aW9uIChfQmFzZTUpIHsKCSAgKDAsIF9pbmhlcml0czMuZGVm
YXVsdCkoUGFydGlhbEludGVyZmFjZSwgX0Jhc2U1KTsKCgkgIGZ1bmN0aW9uIFBhcnRpYWxJbnRl
cmZhY2UoKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgUGFydGlh
bEludGVyZmFjZSk7CgkgICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMu
ZGVmYXVsdCkodGhpcywgKFBhcnRpYWxJbnRlcmZhY2UuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJv
dG90eXBlT2YyLmRlZmF1bHQpKFBhcnRpYWxJbnRlcmZhY2UpKS5hcHBseSh0aGlzLCBhcmd1bWVu
dHMpKTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoUGFydGlhbEludGVyZmFj
ZSwgW3sKCSAgICBrZXk6ICdjb25jcmV0aXplXycsCgkgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbmNy
ZXRpemVfKGRiKSB7CgkgICAgICB2YXIgX3RoaXM2ID0gdGhpczsKCgkgICAgICB2YXIgcmVzdWx0
ID0gZGIuZmluZCgnbmFtZScsIHRoaXMubmFtZSkuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7Cgkg
ICAgICAgIHJldHVybiBpdGVtICE9PSBfdGhpczY7CgkgICAgICB9KTsKCgkgICAgICB2YXIgX2l0
ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlOwoJICAgICAgdmFyIF9kaWRJdGVyYXRvckVy
cm9yMiA9IGZhbHNlOwoJICAgICAgdmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDsKCgkg
ICAgICB0cnkgewoJICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyID0gKDAsIF9nZXRJdGVyYXRv
cjMuZGVmYXVsdCkodGhpcy5tZW1iZXJzKSwgX3N0ZXAyOyAhKF9pdGVyYXRvck5vcm1hbENvbXBs
ZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9y
bWFsQ29tcGxldGlvbjIgPSB0cnVlKSB7CgkgICAgICAgICAgdmFyIG1lbWJlciA9IF9zdGVwMi52
YWx1ZTsKCgkgICAgICAgICAgbWVtYmVyLmZyb20gPSB0aGlzOwoJICAgICAgICB9CgkgICAgICB9
IGNhdGNoIChlcnIpIHsKCSAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTsKCSAgICAg
ICAgX2l0ZXJhdG9yRXJyb3IyID0gZXJyOwoJICAgICAgfSBmaW5hbGx5IHsKCSAgICAgICAgdHJ5
IHsKCSAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRv
cjIucmV0dXJuKSB7CgkgICAgICAgICAgICBfaXRlcmF0b3IyLnJldHVybigpOwoJICAgICAgICAg
IH0KCSAgICAgICAgfSBmaW5hbGx5IHsKCSAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3Iy
KSB7CgkgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7CgkgICAgICAgICAgfQoJICAg
ICAgICB9CgkgICAgICB9CgoJICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0g
dHJ1ZTsKCSAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTsKCSAgICAgIHZhciBf
aXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7CgoJICAgICAgdHJ5IHsKCSAgICAgICAgZm9yICh2
YXIgX2l0ZXJhdG9yMyA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1bHQpKHJlc3VsdCksIF9zdGVw
MzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5l
eHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkgewoJICAgICAg
ICAgIHZhciBwYXJ0aWFsID0gX3N0ZXAzLnZhbHVlOwoKCSAgICAgICAgICBwYXJ0aWFsLmNvbmNy
ZXRpemUoKTsKCSAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVl
OwoJICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjQgPSBmYWxzZTsKCSAgICAgICAgICB2
YXIgX2l0ZXJhdG9yRXJyb3I0ID0gdW5kZWZpbmVkOwoKCSAgICAgICAgICB0cnkgewoJICAgICAg
ICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNCA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1bHQpKHBh
cnRpYWwubWVtYmVycyksIF9zdGVwNDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IChf
c3RlcDQgPSBfaXRlcmF0b3I0Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRp
b240ID0gdHJ1ZSkgewoJICAgICAgICAgICAgICB2YXIgX21lbWJlciA9IF9zdGVwNC52YWx1ZTsK
CgkgICAgICAgICAgICAgIHZhciBuZXdNZW1iZXIgPSBqc29uTW9kdWxlLmRlZXBDbG9uZShfbWVt
YmVyKTsKCSAgICAgICAgICAgICAgaWYgKCFuZXdNZW1iZXIuZnJvbSkgbmV3TWVtYmVyLmZyb20g
PSBwYXJ0aWFsOwoJICAgICAgICAgICAgICB0aGlzLm1lbWJlcnMucHVzaChuZXdNZW1iZXIpOwoJ
ICAgICAgICAgICAgfQoJICAgICAgICAgIH0gY2F0Y2ggKGVycikgewoJICAgICAgICAgICAgX2Rp
ZEl0ZXJhdG9yRXJyb3I0ID0gdHJ1ZTsKCSAgICAgICAgICAgIF9pdGVyYXRvckVycm9yNCA9IGVy
cjsKCSAgICAgICAgICB9IGZpbmFsbHkgewoJICAgICAgICAgICAgdHJ5IHsKCSAgICAgICAgICAg
ICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCAmJiBfaXRlcmF0b3I0LnJldHVybikg
ewoJICAgICAgICAgICAgICAgIF9pdGVyYXRvcjQucmV0dXJuKCk7CgkgICAgICAgICAgICAgIH0K
CSAgICAgICAgICAgIH0gZmluYWxseSB7CgkgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JF
cnJvcjQpIHsKCSAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjQ7CgkgICAgICAg
ICAgICAgIH0KCSAgICAgICAgICAgIH0KCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgIH0g
Y2F0Y2ggKGVycikgewoJICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlOwoJICAgICAg
ICBfaXRlcmF0b3JFcnJvcjMgPSBlcnI7CgkgICAgICB9IGZpbmFsbHkgewoJICAgICAgICB0cnkg
ewoJICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgJiYgX2l0ZXJhdG9y
My5yZXR1cm4pIHsKCSAgICAgICAgICAgIF9pdGVyYXRvcjMucmV0dXJuKCk7CgkgICAgICAgICAg
fQoJICAgICAgICB9IGZpbmFsbHkgewoJICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjMp
IHsKCSAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMzsKCSAgICAgICAgICB9CgkgICAg
ICAgIH0KCSAgICAgIH0KCgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9CgkgIH0sIHsKCSAgICBr
ZXk6ICdjYW5vbmljYWxpemVfJywKCSAgICB2YWx1ZTogZnVuY3Rpb24gY2Fub25pY2FsaXplXyhk
YikgewoJICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CgoJICAgICAgdmFyIHJlc3VsdCA9IGRiLmZp
bmQoJ25hbWUnLCB0aGlzLm5hbWUpLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgewoJICAgICAgICBy
ZXR1cm4gaXRlbSAhPT0gX3RoaXM3OwoJICAgICAgfSk7CgoJICAgICAgdmFyIF9pdGVyYXRvck5v
cm1hbENvbXBsZXRpb241ID0gdHJ1ZTsKCSAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjUgPSBm
YWxzZTsKCSAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjUgPSB1bmRlZmluZWQ7CgoJICAgICAgdHJ5
IHsKCSAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNSA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1
bHQpKHJlc3VsdCksIF9zdGVwNTsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IChfc3Rl
cDUgPSBfaXRlcmF0b3I1Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241
ID0gdHJ1ZSkgewoJICAgICAgICAgIHZhciBwYXJ0aWFsID0gX3N0ZXA1LnZhbHVlOwoKCSAgICAg
ICAgICBkYi5yZW1vdmUocGFydGlhbCk7CgkgICAgICAgIH0KCSAgICAgIH0gY2F0Y2ggKGVycikg
ewoJICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjUgPSB0cnVlOwoJICAgICAgICBfaXRlcmF0b3JF
cnJvcjUgPSBlcnI7CgkgICAgICB9IGZpbmFsbHkgewoJICAgICAgICB0cnkgewoJICAgICAgICAg
IGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgJiYgX2l0ZXJhdG9yNS5yZXR1cm4pIHsK
CSAgICAgICAgICAgIF9pdGVyYXRvcjUucmV0dXJuKCk7CgkgICAgICAgICAgfQoJICAgICAgICB9
IGZpbmFsbHkgewoJICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjUpIHsKCSAgICAgICAg
ICAgIHRocm93IF9pdGVyYXRvckVycm9yNTsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAg
IH0KCgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9CgkgIH1dLCBbewoJICAgIGtleTogJ25hbWUn
LAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuICdQYXJ0aWFsSW50ZXJm
YWNlJzsKCSAgICB9CgkgIH1dKTsKCSAgcmV0dXJuIFBhcnRpYWxJbnRlcmZhY2U7Cgl9KEJhc2Up
OwoKCWRlZmF1bHRSZWdpc3RyeS5yZWdpc3RlcihQYXJ0aWFsSW50ZXJmYWNlKTsKCgl2YXIgRGlj
dGlvbmFyeSA9IGZ1bmN0aW9uIChfQmFzZTYpIHsKCSAgKDAsIF9pbmhlcml0czMuZGVmYXVsdCko
RGljdGlvbmFyeSwgX0Jhc2U2KTsKCgkgIGZ1bmN0aW9uIERpY3Rpb25hcnkoKSB7CgkgICAgKDAs
IF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRGljdGlvbmFyeSk7CgkgICAgcmV0dXJu
ICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKERpY3Rpb25h
cnkuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKERpY3Rpb25hcnkp
KS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVm
YXVsdCkoRGljdGlvbmFyeSwgbnVsbCwgW3sKCSAgICBrZXk6ICduYW1lJywKCSAgICBnZXQ6IGZ1
bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiAnRGljdGlvbmFyeSc7CgkgICAgfQoJICB9XSk7
CgkgIHJldHVybiBEaWN0aW9uYXJ5OwoJfShCYXNlKTsKCglEaWN0aW9uYXJ5LnByb3RvdHlwZS5j
b25jcmV0aXplXyA9IGNvbmNyZXRpemVJbmhlcml0YW5jZTsKCWRlZmF1bHRSZWdpc3RyeS5yZWdp
c3RlcihEaWN0aW9uYXJ5KTsKCgl2YXIgRW51bSA9IGZ1bmN0aW9uIChfQmFzZTcpIHsKCSAgKDAs
IF9pbmhlcml0czMuZGVmYXVsdCkoRW51bSwgX0Jhc2U3KTsKCgkgIGZ1bmN0aW9uIEVudW0oKSB7
CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgRW51bSk7CgkgICAgcmV0
dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKEVudW0u
X19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90eXBlT2YyLmRlZmF1bHQpKEVudW0pKS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpKTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoRW51
bSwgbnVsbCwgW3sKCSAgICBrZXk6ICduYW1lJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsK
CSAgICAgIHJldHVybiAnRW51bSc7CgkgICAgfQoJICB9XSk7CgkgIHJldHVybiBFbnVtOwoJfShC
YXNlKTsKCglkZWZhdWx0UmVnaXN0cnkucmVnaXN0ZXIoRW51bSk7CgoJdmFyIFR5cGVkZWYgPSBm
dW5jdGlvbiAoX0Jhc2U4KSB7CgkgICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKFR5cGVkZWYsIF9C
YXNlOCk7CgoJICBmdW5jdGlvbiBUeXBlZGVmKCkgewoJICAgICgwLCBfY2xhc3NDYWxsQ2hlY2sz
LmRlZmF1bHQpKHRoaXMsIFR5cGVkZWYpOwoJICAgIHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRoaXMsIChUeXBlZGVmLl9fcHJvdG9fXyB8fCAoMCwgX2dl
dFByb3RvdHlwZU9mMi5kZWZhdWx0KShUeXBlZGVmKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7
CgkgIH0KCgkgICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFR5cGVkZWYsIG51bGwsIFt7Cgkg
ICAga2V5OiAnbmFtZScsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4g
J1R5cGVkZWYnOwoJICAgIH0KCSAgfV0pOwoJICByZXR1cm4gVHlwZWRlZjsKCX0oQmFzZSk7CgoJ
ZGVmYXVsdFJlZ2lzdHJ5LnJlZ2lzdGVyKFR5cGVkZWYpOwoKCXZhciBJbXBsZW1lbnRzID0gZnVu
Y3Rpb24gKF9CYXNlOSkgewoJICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShJbXBsZW1lbnRzLCBf
QmFzZTkpOwoKCSAgZnVuY3Rpb24gSW1wbGVtZW50cygpIHsKCSAgICAoMCwgX2NsYXNzQ2FsbENo
ZWNrMy5kZWZhdWx0KSh0aGlzLCBJbXBsZW1lbnRzKTsKCSAgICByZXR1cm4gKDAsIF9wb3NzaWJs
ZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoSW1wbGVtZW50cy5fX3Byb3RvX18g
fHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoSW1wbGVtZW50cykpLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cykpOwoJICB9CgoJICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShJbXBsZW1l
bnRzLCBudWxsLCBbewoJICAgIGtleTogJ25hbWUnLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkg
ewoJICAgICAgcmV0dXJuICdJbXBsZW1lbnRzJzsKCSAgICB9CgkgIH1dKTsKCSAgcmV0dXJuIElt
cGxlbWVudHM7Cgl9KEJhc2UpOwoKCWRlZmF1bHRSZWdpc3RyeS5yZWdpc3RlcihJbXBsZW1lbnRz
KTsKCgl2YXIgU2VyaWFsaXplciA9IGZ1bmN0aW9uIChfQmFzZTEwKSB7CgkgICgwLCBfaW5oZXJp
dHMzLmRlZmF1bHQpKFNlcmlhbGl6ZXIsIF9CYXNlMTApOwoKCSAgZnVuY3Rpb24gU2VyaWFsaXpl
cigpIHsKCSAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBTZXJpYWxpemVy
KTsKCSAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMy5kZWZhdWx0KSh0
aGlzLCAoU2VyaWFsaXplci5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVs
dCkoU2VyaWFsaXplcikpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwoJICB9CgoJICAoMCwgX2Ny
ZWF0ZUNsYXNzMy5kZWZhdWx0KShTZXJpYWxpemVyLCBudWxsLCBbewoJICAgIGtleTogJ25hbWUn
LAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuICdTZXJpYWxpemVyJzsK
CSAgICB9CgkgIH1dKTsKCSAgcmV0dXJuIFNlcmlhbGl6ZXI7Cgl9KEJhc2UpOwoKCWRlZmF1bHRS
ZWdpc3RyeS5yZWdpc3RlcihTZXJpYWxpemVyKTsKCgl2YXIgU3RyaW5naWZpZXIgPSBmdW5jdGlv
biAoX0Jhc2UxMSkgewoJICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShTdHJpbmdpZmllciwgX0Jh
c2UxMSk7CgoJICBmdW5jdGlvbiBTdHJpbmdpZmllcigpIHsKCSAgICAoMCwgX2NsYXNzQ2FsbENo
ZWNrMy5kZWZhdWx0KSh0aGlzLCBTdHJpbmdpZmllcik7CgkgICAgcmV0dXJuICgwLCBfcG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybjMuZGVmYXVsdCkodGhpcywgKFN0cmluZ2lmaWVyLl9fcHJvdG9f
XyB8fCAoMCwgX2dldFByb3RvdHlwZU9mMi5kZWZhdWx0KShTdHJpbmdpZmllcikpLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cykpOwoJICB9CgoJICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShTdHJp
bmdpZmllciwgbnVsbCwgW3sKCSAgICBrZXk6ICduYW1lJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdl
dCgpIHsKCSAgICAgIHJldHVybiAnU3RyaW5naWZpZXInOwoJICAgIH0KCSAgfV0pOwoJICByZXR1
cm4gU3RyaW5naWZpZXI7Cgl9KEJhc2UpOwoKCWRlZmF1bHRSZWdpc3RyeS5yZWdpc3RlcihTdHJp
bmdpZmllcik7CgoJdmFyIEl0ZXJhYmxlID0gZnVuY3Rpb24gKF9CYXNlMTIpIHsKCSAgKDAsIF9p
bmhlcml0czMuZGVmYXVsdCkoSXRlcmFibGUsIF9CYXNlMTIpOwoKCSAgZnVuY3Rpb24gSXRlcmFi
bGUoKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgSXRlcmFibGUp
OwoJICAgIHJldHVybiAoMCwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4zLmRlZmF1bHQpKHRo
aXMsIChJdGVyYWJsZS5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVPZjIuZGVmYXVsdCko
SXRlcmFibGUpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVD
bGFzczMuZGVmYXVsdCkoSXRlcmFibGUsIG51bGwsIFt7CgkgICAga2V5OiAnbmFtZScsCgkgICAg
Z2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gJ0l0ZXJhYmxlJzsKCSAgICB9Cgkg
IH1dKTsKCSAgcmV0dXJuIEl0ZXJhYmxlOwoJfShCYXNlKTsKCglkZWZhdWx0UmVnaXN0cnkucmVn
aXN0ZXIoSXRlcmFibGUpOwoKCXZhciBBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoX0Jhc2UxMykgewoJ
ICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShBdHRyaWJ1dGUsIF9CYXNlMTMpOwoKCSAgZnVuY3Rp
b24gQXR0cmlidXRlKCkgewoJICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMs
IEF0dHJpYnV0ZSk7CgkgICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjMu
ZGVmYXVsdCkodGhpcywgKEF0dHJpYnV0ZS5fX3Byb3RvX18gfHwgKDAsIF9nZXRQcm90b3R5cGVP
ZjIuZGVmYXVsdCkoQXR0cmlidXRlKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7CgkgIH0KCgkg
ICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKEF0dHJpYnV0ZSwgbnVsbCwgW3sKCSAgICBrZXk6
ICduYW1lJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiAnQXR0cmli
dXRlJzsKCSAgICB9CgkgIH1dKTsKCSAgcmV0dXJuIEF0dHJpYnV0ZTsKCX0oQmFzZSk7CgoJZGVm
YXVsdFJlZ2lzdHJ5LnJlZ2lzdGVyKEF0dHJpYnV0ZSk7CgoJdmFyIE1hcExpa2UgPSBmdW5jdGlv
biAoX0Jhc2UxNCkgewoJICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShNYXBMaWtlLCBfQmFzZTE0
KTsKCgkgIGZ1bmN0aW9uIE1hcExpa2UoKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVm
YXVsdCkodGhpcywgTWFwTGlrZSk7CgkgICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybjMuZGVmYXVsdCkodGhpcywgKE1hcExpa2UuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJv
dG90eXBlT2YyLmRlZmF1bHQpKE1hcExpa2UpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKCSAg
fQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoTWFwTGlrZSwgbnVsbCwgW3sKCSAgICBr
ZXk6ICduYW1lJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiAnTWFw
TGlrZSc7CgkgICAgfQoJICB9XSk7CgkgIHJldHVybiBNYXBMaWtlOwoJfShCYXNlKTsKCglkZWZh
dWx0UmVnaXN0cnkucmVnaXN0ZXIoTWFwTGlrZSk7CgoJdmFyIFNldExpa2UgPSBmdW5jdGlvbiAo
X0Jhc2UxNSkgewoJICAoMCwgX2luaGVyaXRzMy5kZWZhdWx0KShTZXRMaWtlLCBfQmFzZTE1KTsK
CgkgIGZ1bmN0aW9uIFNldExpa2UoKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVs
dCkodGhpcywgU2V0TGlrZSk7CgkgICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJl
dHVybjMuZGVmYXVsdCkodGhpcywgKFNldExpa2UuX19wcm90b19fIHx8ICgwLCBfZ2V0UHJvdG90
eXBlT2YyLmRlZmF1bHQpKFNldExpa2UpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKCSAgfQoK
CSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoU2V0TGlrZSwgbnVsbCwgW3sKCSAgICBrZXk6
ICduYW1lJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiAnU2V0TGlr
ZSc7CgkgICAgfQoJICB9XSk7CgkgIHJldHVybiBTZXRMaWtlOwoJfShCYXNlKTsKCglkZWZhdWx0
UmVnaXN0cnkucmVnaXN0ZXIoU2V0TGlrZSk7CgoJdmFyIFVuaW9uVHlwZSA9IGZ1bmN0aW9uIChf
QmFzZTE2KSB7CgkgICgwLCBfaW5oZXJpdHMzLmRlZmF1bHQpKFVuaW9uVHlwZSwgX0Jhc2UxNik7
CgoJICBmdW5jdGlvbiBVbmlvblR5cGUoKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVm
YXVsdCkodGhpcywgVW5pb25UeXBlKTsKCSAgICByZXR1cm4gKDAsIF9wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuMy5kZWZhdWx0KSh0aGlzLCAoVW5pb25UeXBlLl9fcHJvdG9fXyB8fCAoMCwgX2dl
dFByb3RvdHlwZU9mMi5kZWZhdWx0KShVbmlvblR5cGUpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMp
KTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVW5pb25UeXBlLCBudWxsLCBb
ewoJICAgIGtleTogJ25hbWUnLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0
dXJuICdVbmlvblR5cGUnOwoJICAgIH0KCSAgfV0pOwoJICByZXR1cm4gVW5pb25UeXBlOwoJfShC
YXNlKTsKCglkZWZhdWx0UmVnaXN0cnkucmVnaXN0ZXIoVW5pb25UeXBlKTsKCgl2YXIgRXh0ZW5k
ZWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoX0Jhc2UxNykgewoJICAoMCwgX2luaGVyaXRzMy5kZWZh
dWx0KShFeHRlbmRlZEF0dHJpYnV0ZSwgX0Jhc2UxNyk7CgoJICBmdW5jdGlvbiBFeHRlbmRlZEF0
dHJpYnV0ZSgpIHsKCSAgICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBFeHRl
bmRlZEF0dHJpYnV0ZSk7CgkgICAgcmV0dXJuICgwLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVy
bjMuZGVmYXVsdCkodGhpcywgKEV4dGVuZGVkQXR0cmlidXRlLl9fcHJvdG9fXyB8fCAoMCwgX2dl
dFByb3RvdHlwZU9mMi5kZWZhdWx0KShFeHRlbmRlZEF0dHJpYnV0ZSkpLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykpOwoJICB9CgoJICAoMCwgX2NyZWF0ZUNsYXNzMy5kZWZhdWx0KShFeHRlbmRlZEF0
dHJpYnV0ZSwgbnVsbCwgW3sKCSAgICBrZXk6ICduYW1lJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdl
dCgpIHsKCSAgICAgIHJldHVybiAnRXh0ZW5kZWRBdHRyaWJ1dGUnOwoJICAgIH0KCSAgfV0pOwoJ
ICByZXR1cm4gRXh0ZW5kZWRBdHRyaWJ1dGU7Cgl9KEJhc2UpOwoKCWRlZmF1bHRSZWdpc3RyeS5y
ZWdpc3RlcihFeHRlbmRlZEF0dHJpYnV0ZSk7CgoJbW9kdWxlLmV4cG9ydHMgPSB7CgkgIENhbGxi
YWNrOiBDYWxsYmFjaywKCSAgRXhjZXB0aW9uOiBFeGNlcHRpb24sCgkgIEludGVyZmFjZTogSW50
ZXJmYWNlLAoJICBOYW1lc3BhY2U6IE5hbWVzcGFjZSwKCSAgUGFydGlhbEludGVyZmFjZTogUGFy
dGlhbEludGVyZmFjZSwKCSAgRGljdGlvbmFyeTogRGljdGlvbmFyeSwKCSAgRW51bTogRW51bSwK
CSAgVHlwZWRlZjogVHlwZWRlZiwKCSAgSW1wbGVtZW50czogSW1wbGVtZW50cywKCSAgU2VyaWFs
aXplcjogU2VyaWFsaXplciwKCSAgU3RyaW5naWZpZXI6IFN0cmluZ2lmaWVyLAoJICBJdGVyYWJs
ZTogSXRlcmFibGUsCgkgIEF0dHJpYnV0ZTogQXR0cmlidXRlLAoJICBNYXBMaWtlOiBNYXBMaWtl
LAoJICBTZXRMaWtlOiBTZXRMaWtlLAoJICBVbmlvblR5cGU6IFVuaW9uVHlwZSwKCSAgRXh0ZW5k
ZWRBdHRyaWJ1dGU6IEV4dGVuZGVkQXR0cmlidXRlLAoJICByZWdpc3RyeTogZGVmYXVsdFJlZ2lz
dHJ5Cgl9OwoKLyoqKi8gfSksCi8qIDExNiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSB7ICJkZWZhdWx0
IjogX193ZWJwYWNrX3JlcXVpcmVfXygxMTcpLCBfX2VzTW9kdWxlOiB0cnVlIH07CgovKioqLyB9
KSwKLyogMTE3ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKCglfX3dlYnBhY2tfcmVxdWlyZV9fKDExOCk7Cgltb2R1bGUuZXhwb3J0cyA9
IF9fd2VicGFja19yZXF1aXJlX18oMTIpLk9iamVjdC5nZXRQcm90b3R5cGVPZjsKCgovKioqLyB9
KSwKLyogMTE4ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHsKCgkvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTykKCXZhciB0
b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpOwoJdmFyICRnZXRQcm90b3R5cGVPZiA9
IF9fd2VicGFja19yZXF1aXJlX18oNDYpOwoKCV9fd2VicGFja19yZXF1aXJlX18oNzgpKCdnZXRQ
cm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlw
ZU9mKGl0KSB7CgkgICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpOwoJICB9
OwoJfSk7CgoKLyoqKi8gfSksCi8qIDExOSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJInVzZSBzdHJpY3QiOwoKCWV4cG9ydHMuX19l
c01vZHVsZSA9IHRydWU7CgoJdmFyIF90eXBlb2YyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7
CgoJdmFyIF90eXBlb2YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHlwZW9mMik7CgoJZnVu
Y3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19l
c01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCglleHBvcnRzLmRlZmF1bHQgPSBm
dW5jdGlvbiAoc2VsZiwgY2FsbCkgewoJICBpZiAoIXNlbGYpIHsKCSAgICB0aHJvdyBuZXcgUmVm
ZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24n
dCBiZWVuIGNhbGxlZCIpOwoJICB9CgoJICByZXR1cm4gY2FsbCAmJiAoKHR5cGVvZiBjYWxsID09
PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKGNhbGwp
KSA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNl
bGY7Cgl9OwoKLyoqKi8gfSksCi8qIDEyMCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJInVzZSBzdHJpY3QiOwoKCWV4cG9ydHMuX19l
c01vZHVsZSA9IHRydWU7CgoJdmFyIF9zZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJl
X18oMTIxKTsKCgl2YXIgX3NldFByb3RvdHlwZU9mMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQo
X3NldFByb3RvdHlwZU9mKTsKCgl2YXIgX2NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1
KTsKCgl2YXIgX2NyZWF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGUpOwoKCXZh
ciBfdHlwZW9mMiA9IF9fd2VicGFja19yZXF1aXJlX18oNzkpOwoKCXZhciBfdHlwZW9mMyA9IF9p
bnRlcm9wUmVxdWlyZURlZmF1bHQoX3R5cGVvZjIpOwoKCWZ1bmN0aW9uIF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRl
ZmF1bHQ6IG9iaiB9OyB9CgoJZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBz
dXBlckNsYXNzKSB7CgkgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBz
dXBlckNsYXNzICE9PSBudWxsKSB7CgkgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhw
cmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiICsgKHR5cGVv
ZiBzdXBlckNsYXNzID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogKDAsIF90eXBlb2Yz
LmRlZmF1bHQpKHN1cGVyQ2xhc3MpKSk7CgkgIH0KCgkgIHN1YkNsYXNzLnByb3RvdHlwZSA9ICgw
LCBfY3JlYXRlMi5kZWZhdWx0KShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7
CgkgICAgY29uc3RydWN0b3I6IHsKCSAgICAgIHZhbHVlOiBzdWJDbGFzcywKCSAgICAgIGVudW1l
cmFibGU6IGZhbHNlLAoJICAgICAgd3JpdGFibGU6IHRydWUsCgkgICAgICBjb25maWd1cmFibGU6
IHRydWUKCSAgICB9CgkgIH0pOwoJICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mMi5k
ZWZhdWx0ID8gKDAsIF9zZXRQcm90b3R5cGVPZjIuZGVmYXVsdCkoc3ViQ2xhc3MsIHN1cGVyQ2xh
c3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsKCX07CgovKioqLyB9KSwKLyog
MTIxICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJl
X18pIHsKCgltb2R1bGUuZXhwb3J0cyA9IHsgImRlZmF1bHQiOiBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEyMiksIF9fZXNNb2R1bGU6IHRydWUgfTsKCi8qKiovIH0pLAovKiAxMjIgKi8KLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCV9fd2VicGFj
a19yZXF1aXJlX18oMTIzKTsKCW1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygx
MikuT2JqZWN0LnNldFByb3RvdHlwZU9mOwoKCi8qKiovIH0pLAovKiAxMjMgKi8KLyoqKi8gKGZ1
bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIDE5LjEu
My4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pCgl2YXIgJGV4cG9ydCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMTApOwoJJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFBy
b3RvdHlwZU9mOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNCkuc2V0IH0pOwoKCi8qKiovIH0pLAov
KiAxMjQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVp
cmVfXykgewoKCS8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3Jr
IHdpdGggbnVsbCBwcm90byBvYmplY3RzLgoJLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi8K
CXZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpOwoJdmFyIGFuT2JqZWN0ID0g
X193ZWJwYWNrX3JlcXVpcmVfXygxNyk7Cgl2YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8p
IHsKCSAgYW5PYmplY3QoTyk7CgkgIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBu
dWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyAiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIp
OwoJfTsKCW1vZHVsZS5leHBvcnRzID0gewoJICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8
fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lCgkgICAgZnVuY3Rp
b24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHsKCSAgICAgIHRyeSB7CgkgICAgICAgIHNldCA9IF9fd2Vi
cGFja19yZXF1aXJlX18oMTMpKEZ1bmN0aW9uLmNhbGwsIF9fd2VicGFja19yZXF1aXJlX18oOTQp
LmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7CgkgICAgICAgIHNldCh0
ZXN0LCBbXSk7CgkgICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpOwoJICAg
ICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH0KCSAgICAgIHJldHVybiBmdW5jdGlvbiBz
ZXRQcm90b3R5cGVPZihPLCBwcm90bykgewoJICAgICAgICBjaGVjayhPLCBwcm90byk7CgkgICAg
ICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bzsKCSAgICAgICAgZWxzZSBzZXQoTywg
cHJvdG8pOwoJICAgICAgICByZXR1cm4gTzsKCSAgICAgIH07CgkgICAgfSh7fSwgZmFsc2UpIDog
dW5kZWZpbmVkKSwKCSAgY2hlY2s6IGNoZWNrCgl9OwoKCi8qKiovIH0pLAovKiAxMjUgKi8KLyoq
Ki8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCW1v
ZHVsZS5leHBvcnRzID0geyAiZGVmYXVsdCI6IF9fd2VicGFja19yZXF1aXJlX18oMTI2KSwgX19l
c01vZHVsZTogdHJ1ZSB9OwoKLyoqKi8gfSksCi8qIDEyNiAqLwovKioqLyAoZnVuY3Rpb24obW9k
dWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJX193ZWJwYWNrX3JlcXVpcmVf
XygxMjcpOwoJdmFyICRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5PYmplY3Q7Cglt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7CgkgIHJldHVybiAkT2JqZWN0
LmNyZWF0ZShQLCBEKTsKCX07CgoKLyoqKi8gfSksCi8qIDEyNyAqLwovKioqLyAoZnVuY3Rpb24o
bW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJdmFyICRleHBvcnQgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKCS8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNy
ZWF0ZShPIFssIFByb3BlcnRpZXNdKQoJJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNy
ZWF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXygyOSkgfSk7CgoKLyoqKi8gfSksCi8qIDEyOCAqLwov
KioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJ
LyoqCgkgKiBAbGljZW5zZQoJICogQ29weXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KCSAqCgkgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKCSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KCSAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoJICoKCSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCSAqCgkgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCgkgKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAoJ
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCgkgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCgkgKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KCSAqLwoJJ3VzZSBzdHJpY3QnOwoKCXZhciByZWdpc3RyeU1vZHVsZSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTI5KTsKCXZhciBqc29uTW9kdWxlID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxMzApOwoKCW1vZHVsZS5leHBvcnRzID0gewoJICBKU09OOiBqc29uTW9kdWxlLAoJICBS
ZWdpc3RyeTogcmVnaXN0cnlNb2R1bGUuUmVnaXN0cnksCgkgIHJlZ2lzdHJ5OiByZWdpc3RyeU1v
ZHVsZS5yZWdpc3RyeQoJfTsKCi8qKiovIH0pLAovKiAxMjkgKi8KLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8qKgoJICogQGxpY2Vuc2UK
CSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkgKgoJ
ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO
U0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vu
c2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FSUkFO
VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk
LgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n
IHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkgKi8K
CSd1c2Ugc3RyaWN0JzsKCgl2YXIgX2NsYXNzQ2FsbENoZWNrMiA9IF9fd2VicGFja19yZXF1aXJl
X18oMTAxKTsKCgl2YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQo
X2NsYXNzQ2FsbENoZWNrMik7CgoJdmFyIF9jcmVhdGVDbGFzczIgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDEwMik7CgoJdmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9j
cmVhdGVDbGFzczIpOwoKCWZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJl
dHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CgoJ
dmFyIFJlZ2lzdHJ5ID0gZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBSZWdpc3RyeSgpIHsKCSAg
ICAoMCwgX2NsYXNzQ2FsbENoZWNrMy5kZWZhdWx0KSh0aGlzLCBSZWdpc3RyeSk7CgkgIH0KCgkg
ICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1bHQpKFJlZ2lzdHJ5LCBbewoJICAgIGtleTogJ3JlZ2lz
dGVyJywKCSAgICB2YWx1ZTogZnVuY3Rpb24gcmVnaXN0ZXIoQ3RvcikgewoJICAgICAgY29uc29s
ZS5hc3NlcnQoIXRoaXNbQ3Rvci5uYW1lXSk7CgkgICAgICB0aGlzW0N0b3IubmFtZV0gPSBDdG9y
OwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogJ2xvb2t1cCcsCgkgICAgdmFsdWU6IGZ1bmN0aW9u
IGxvb2t1cChuYW1lKSB7CgkgICAgICByZXR1cm4gdGhpc1tuYW1lXSB8fCBudWxsOwoJICAgIH0K
CSAgfV0pOwoJICByZXR1cm4gUmVnaXN0cnk7Cgl9KCk7CgoJdmFyIHJlZ2lzdHJ5ID0gbmV3IFJl
Z2lzdHJ5KCk7CgoJbW9kdWxlLmV4cG9ydHMgPSB7CgkgIFJlZ2lzdHJ5OiBSZWdpc3RyeSwKCSAg
cmVnaXN0cnk6IHJlZ2lzdHJ5LAoJICByZWdpc3RlcjogcmVnaXN0cnkucmVnaXN0ZXIuYmluZChy
ZWdpc3RyeSksCgkgIGxvb2t1cDogcmVnaXN0cnkubG9va3VwLmJpbmQocmVnaXN0cnkpCgl9OwoK
LyoqKi8gfSksCi8qIDEzMCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CgoJLyoqCgkgKiBAbGljZW5zZQoJICogQ29weXJpZ2h0IDIwMTYg
R29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCSAqCgkgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKCSAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KCSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoJICoKCSAqICAg
ICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCSAqCgkgKiBVbmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv
ZnR3YXJlCgkgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLAoJICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCgkgKiBTZWUgdGhlIExpY2Vu
c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCgkg
KiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCSAqLwoJJ3VzZSBzdHJpY3QnOwoKCXZh
ciBfYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7CgoJdmFyIF9hc3NpZ24yID0gX2lu
dGVyb3BSZXF1aXJlRGVmYXVsdChfYXNzaWduKTsKCgl2YXIgX3R5cGVvZjIgPSBfX3dlYnBhY2tf
cmVxdWlyZV9fKDc5KTsKCgl2YXIgX3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90
eXBlb2YyKTsKCglmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4g
b2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKCXZhciBf
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpOwoJdmFyIHJlZ2lzdHJ5TW9kdWxlID0gX193ZWJw
YWNrX3JlcXVpcmVfXygxMjkpOwoJdmFyIGRlZmF1bHRSZWdpc3RyeSA9IHJlZ2lzdHJ5TW9kdWxl
LnJlZ2lzdHJ5OwoKCWZ1bmN0aW9uIGNsb25lKG8sIEN0b3IpIHsKCSAgdmFyIFJlYWxDdG9yID0g
Q3RvciB8fCBvLmNvbnN0cnVjdG9yOwoJICBjb25zb2xlLmFzc2VydChSZWFsQ3Rvci5wcm90b3R5
cGUuY2xvbmUgfHwgUmVhbEN0b3IucHJvdG90eXBlLmluaXQsICdFeHBlY3QgY2xvbmVhYmxlcyB0
byBpbXBsZW1lbnQgcHJvdG90eXBlLmNsb25lKCkgb3IgcHJvdG90eXBlLmluaXQoKScpOwoJICBp
ZiAoby5jbG9uZSkgcmV0dXJuIG8uY2xvbmUoKTsKCSAgdmFyIHJldCA9IG5ldyBSZWFsQ3Rvcigp
OwoJICByZXQuaW5pdChvKTsKCSAgcmV0dXJuIHJldDsKCX0KCglmdW5jdGlvbiBkZWVwQ2xvbmUo
bywgQ3RvcikgewoJICB2YXIgdHlwZSA9IHR5cGVvZiBvID09PSAndW5kZWZpbmVkJyA/ICd1bmRl
ZmluZWQnIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKG8pOwoJICBpZiAobyA9PT0gbnVsbCB8fCB0
eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Z1bmN0
aW9uJyB8fCB0eXBlID09PSAnbnVtYmVyJykgcmV0dXJuIG87CgoJICB2YXIgUmVhbEN0b3IgPSBD
dG9yIHx8IG8uY29uc3RydWN0b3I7CgkgIGlmIChvLmRlZXBDbG9uZSkgcmV0dXJuIG8uZGVlcENs
b25lKCk7CgoJICB2YXIgcmV0ID0gbmV3IFJlYWxDdG9yKCk7CgkgIGlmIChyZXQuaW5pdCkgewoJ
ICAgIHJldC5pbml0KF8ubWFwVmFsdWVzKG8sIGZ1bmN0aW9uICh2YWx1ZSkgewoJICAgICAgcmV0
dXJuIGRlZXBDbG9uZSh2YWx1ZSk7CgkgICAgfSkpOwoJICB9IGVsc2UgewoJICAgICgwLCBfYXNz
aWduMi5kZWZhdWx0KShyZXQsIF8ubWFwVmFsdWVzKG8sIGZ1bmN0aW9uICh2YWx1ZSkgewoJICAg
ICAgcmV0dXJuIGRlZXBDbG9uZSh2YWx1ZSk7CgkgICAgfSkpOwoJICB9CgoJICByZXR1cm4gcmV0
OwoJfQoKCWZ1bmN0aW9uIGZyb21KU09OKGpzb24sIHJlZ2lzdHJ5KSB7CgkgIHZhciBfdGhpcyA9
IHRoaXM7CgoJICB2YXIgdHlwZSA9IHR5cGVvZiBqc29uID09PSAndW5kZWZpbmVkJyA/ICd1bmRl
ZmluZWQnIDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKGpzb24pOwoJICBpZiAoanNvbiA9PT0gbnVs
bCB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0g
J2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnbnVtYmVyJykgcmV0dXJuIGpzb247CgoJICB2YXIgS0VZ
ID0gdGhpcy5rZXlfOwoKCSAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHJldHVybiBqc29uLm1h
cChmdW5jdGlvbiAoZGF0dW0pIHsKCSAgICByZXR1cm4gX3RoaXMuZnJvbUpTT04oZGF0dW0sIHJl
Z2lzdHJ5KTsKCSAgfSk7CgoJICB2YXIgVHlwZWRDdG9yID0gdm9pZCAwOwoJICB2YXIgdmFsdWVz
ID0gdm9pZCAwOwoJICBpZiAoanNvbltLRVldKSB7CgkgICAgVHlwZWRDdG9yID0gKHJlZ2lzdHJ5
IHx8IGRlZmF1bHRSZWdpc3RyeSkubG9va3VwKGpzb25bS0VZXSkgfHwgT2JqZWN0OwoJICAgIHZh
bHVlcyA9IHRoaXMuZnJvbUpTT04oXy5vbWl0KGpzb24sIFtLRVldKSwgcmVnaXN0cnkpOwoJICB9
IGVsc2UgewoJICAgIFR5cGVkQ3RvciA9IE9iamVjdDsKCSAgICB2YWx1ZXMgPSBfLm1hcFZhbHVl
cyhqc29uLCBmdW5jdGlvbiAodmFsdWUpIHsKCSAgICAgIHJldHVybiBfdGhpcy5mcm9tSlNPTih2
YWx1ZSwgcmVnaXN0cnkpOwoJICAgIH0pOwoJICB9CgoJICBpZiAoVHlwZWRDdG9yLmZyb21KU09O
KSByZXR1cm4gVHlwZWRDdG9yLmZyb21KU09OKHZhbHVlcywgcmVnaXN0cnkpOwoJICBpZiAoVHlw
ZWRDdG9yLnByb3RvdHlwZS5pbml0KSByZXR1cm4gdGhpcy5jbG9uZSh2YWx1ZXMsIFR5cGVkQ3Rv
cik7CgoJICByZXR1cm4gdmFsdWVzOwoJfQoKCWZ1bmN0aW9uIHRvSlNPTihvLCByZWdpc3RyeSkg
ewoJICB2YXIgX3RoaXMyID0gdGhpczsKCgkgIHZhciB0eXBlID0gdHlwZW9mIG8gPT09ICd1bmRl
ZmluZWQnID8gJ3VuZGVmaW5lZCcgOiAoMCwgX3R5cGVvZjMuZGVmYXVsdCkobyk7CgkgIGlmIChv
ID09PSBudWxsIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCB0
eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGUgPT09ICdudW1iZXInKSByZXR1cm4gbzsKCgkgIGlm
IChvLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHJldHVybiBfLm1hcFZhbHVlcyhvLCBmdW5jdGlv
biAodmFsdWUpIHsKCSAgICByZXR1cm4gX3RoaXMyLnRvSlNPTih2YWx1ZSwgcmVnaXN0cnkpOwoJ
ICB9KTsKCSAgaWYgKEFycmF5LmlzQXJyYXkobykpIHJldHVybiBvLm1hcChmdW5jdGlvbiAobzIp
IHsKCSAgICByZXR1cm4gX3RoaXMyLnRvSlNPTihvMiwgcmVnaXN0cnkpOwoJICB9KTsKCgkgIHZh
ciBDdG9yID0gby5jb25zdHJ1Y3RvcjsKCSAgdmFyIGFjdHVhbFJlZ2lzdHJ5ID0gcmVnaXN0cnkg
fHwgZGVmYXVsdFJlZ2lzdHJ5OwoJICBpZiAoIWFjdHVhbFJlZ2lzdHJ5Lmxvb2t1cChDdG9yLm5h
bWUpKSBhY3R1YWxSZWdpc3RyeS5yZWdpc3RlcihDdG9yKTtlbHNlIGNvbnNvbGUuYXNzZXJ0KGFj
dHVhbFJlZ2lzdHJ5Lmxvb2t1cChDdG9yLm5hbWUpID09PSBDdG9yKTsKCgkgIGlmIChvLnRvSlNP
TikgcmV0dXJuIG8udG9KU09OKHJlZ2lzdHJ5KTsKCgkgIHZhciBqc29uID0gQ3RvciAmJiBDdG9y
Lmpzb25LZXlzID8gXy5waWNrKG8sIEN0b3IuanNvbktleXMpIDogbzsKCSAganNvbiA9IF8ubWFw
VmFsdWVzKGpzb24sIGZ1bmN0aW9uICh2YWx1ZSkgewoJICAgIHJldHVybiBfdGhpczIudG9KU09O
KHZhbHVlLCByZWdpc3RyeSk7CgkgIH0pOwoKCSAgdmFyIGRlZmF1bHRzID0ge307CgkgIGRlZmF1
bHRzW3RoaXMua2V5X10gPSBDdG9yLm5hbWU7CgkgIHJldHVybiAoMCwgX2Fzc2lnbjIuZGVmYXVs
dCkoZGVmYXVsdHMsIGpzb24pOwoJfQoKCW1vZHVsZS5leHBvcnRzID0geyBjbG9uZTogY2xvbmUs
IGRlZXBDbG9uZTogZGVlcENsb25lLCBmcm9tSlNPTjogZnJvbUpTT04sIHRvSlNPTjogdG9KU09O
LCBrZXlfOiAndHlwZV8nIH07CgovKioqLyB9KSwKLyogMTMxICovCi8qKiovIChmdW5jdGlvbiht
b2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvKioKCSAqIEBsaWNlbnNl
CgkgKiBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoJICoK
CSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi
TGljZW5zZSIpOwoJICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLgoJICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM
aWNlbnNlIGF0CgkgKgoJICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAoJICoKCSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKCSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCgkgKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KCSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKCSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoJICov
CgkndXNlIHN0cmljdCc7CgoJLy8gTW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZm9h
bS1mcmFtZXdvcmsvZm9hbS9ibG9iL21hc3Rlci9jb3JlL3BhcnNlLmpzLgoKCXZhciBzdGRsaWIg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7CgoJdmFyIERFQlVHX0lOX1BBUlNFID0gMTsKCXZh
ciBERUJVR19PVVRfUEFSU0UgPSAxOwoJdmFyIERFQlVHX0lOX0JSRUFLID0gMTsKCXZhciBERUJV
R19PVVRfQlJFQUsgPSAxOwoJdmFyIERFQlVHX1BBUlNFID0gMDsKCXZhciBwYXJzZXJWZXJzaW9u
XyA9IDE7CgoJdmFyIHBhcnNlID0geyBmYWN0b3JpZXNfOiB7fSB9OwoKCS8vCgkvLyBUaGUgUGFy
c2VyU3RyZWFtIGludGVyZmFjZQoJLy8KCglmdW5jdGlvbiBQYXJzZXJTdHJlYW0oKSB7fQoJUGFy
c2VyU3RyZWFtLnByb3RvdHlwZSA9IHsKCSAgLy8gVGhpcyBzdHJlYW0ncyBub3Rpb24gb2YgIm5v
IGNoYXJhY3RlciIuIEUuZy4sIGVtcHR5IHN0cmluZyBmb3IKCSAgLy8gU3RyaW5nUGFyc2VyU3Ry
ZWFtLgoJICBudWxsQ2hhcjogbnVsbCwKCSAgLy8gQ2hhcmFjdGVyIHBvc2l0aW9uIGluIHN0cmVh
bS4KCSAgcG9zOiAwLAoKCSAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHsKCSAgICB0aGlzLnBvcyA9
IDA7CgkgIH0sCgoJICAvLyBHZXQgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3RyZWFtLgoJICBnZXRD
aGFyOiBmdW5jdGlvbiBnZXRDaGFyKHBvcykgeyByZXR1cm4gdGhpcy5udWxsQ2hhcjsgfSwKCSAg
Ly8gU2hhbGxvdyBjb3B5IG9mIGEgc3RyZWFtLiBVc2VkIGludGVybmFsbHkgZm9yIGFkdmFuY2lu
ZyBzdHJlYW0uCgkgIGNsb25lOiBmdW5jdGlvbiBjbG9uZShvcHRfbykgewoJICAgIHZhciByZXQg
PSBvcHRfbyB8fCBPYmplY3QuY3JlYXRlKHRoaXMuX19wcm90b19fKTsKCSAgICB2YXIga2V5cyA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpOwoJICAgIGZvciAoIHZhciBpID0gMDsg
aSA8IGtleXMubGVuZ3RoOyBpKysgKSB7CgkgICAgICByZXRba2V5c1tpXV0gPSB0aGlzW2tleXNb
aV1dOwoJICAgIH0KCSAgICByZXR1cm4gcmV0OwoJICB9LAoJICAvLyBTZXQgdGhlIHBhcnNlciBv
dXRwdXQgZm9yIHRoaXMgc3BlY2lmaWMgc3RyZWFtIG9iamVjdC4KCSAgc2V0VmFsdWU6IGZ1bmN0
aW9uIHNldFZhbHVlKHYpIHsKCSAgICB2YXIgcmV0ID0gdGhpcy5jbG9uZSgpOwoJICAgIHJldC52
YWx1ZV8gPSB2OwoJICAgIHJldHVybiByZXQ7CgkgIH0sCgkgIC8vIElzIHRoaXMgc3RyZWFtIGp1
c3QgdXNlZCBmb3Igc3BlY3VsYXRpdmUgcGFyc2luZyBkZWNpc2lvbnM/CgkgIC8vIEUuZy4sIGFs
dCguLi4pICJ0cmllcyIgYWx0ZXJuYXRpdmVzIGJlZm9yZSBhZHZhbmNpbmcgb25lIG9mIHRoZW0g
ImZvcgoJICAvLyByZWFsIiBhZnRlciB0aGUgdHJpZXMuCgkgIGlzU3BlY3VsYXRpdmU6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSwKCSAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewoJICAgIHJl
dHVybiAnUGFyc2VyU3RyZWFtJyArIEpTT04uc3RyaW5naWZ5KHsKCSAgICAgIHBvczogc3RkbGli
LnRvU3RyaW5nKHRoaXMucG9zKSwKCSAgICAgIGhlYWQ6IHN0ZGxpYi50b1N0cmluZyh0aGlzLmhl
YWQpLAoJICAgICAgdmFsdWU6IHN0ZGxpYi50b1N0cmluZyh0aGlzLnZhbHVlKQoJICAgIH0sIG51
bGwsIDIpOwoJICB9LAoJfTsKCU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBhcnNlclN0cmVhbS5w
cm90b3R5cGUsIHsKCSAgLy8gUGFyc2VyIG91dHB1dCB2YWx1ZS4KCSAgdmFsdWU6IHsKCSAgICBn
ZXQ6IGZ1bmN0aW9uKCkgewoJICAgICAgcmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoJ3ZhbHVl
XycpID8gdGhpcy52YWx1ZV8gOgoJICAgICAgICB0aGlzLmdldENoYXIodGhpcy5wb3MgLSAxKTsK
CSAgICB9LAoJICB9LAoJICAvLyBOZXh0IGNoYXJhY3RlciB0byBiZSBwYXJzZWQuCgkgIGhlYWQ6
IHsKCSAgICBnZXQ6IGZ1bmN0aW9uKCkgewoJICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hhcih0aGlz
LnBvcyk7CgkgICAgfSwKCSAgfSwKCSAgLy8gUmVzdWx0IG9mIGFkdmFuY2luZyB0aGUgc3RyZWFt
IGJ5IDEgY2hhcmFjdGVyLgoJICB0YWlsOiB7CgkgICAgZ2V0OiBmdW5jdGlvbigpIHsKCSAgICAg
IHZhciByZXQgPSB0aGlzLmNsb25lKCk7CgkgICAgICByZXQucG9zKys7CgkgICAgICByZXR1cm4g
cmV0OwoJICAgIH0sCgkgIH0sCgl9KTsKCgkvLwoJLy8gQSBwYXJzZXIgc3RyZWFtIGZvciBzdHJp
bmdzCgkvLwoJZnVuY3Rpb24gU3RyaW5nUGFyc2VyU3RyZWFtKHN0cikgeyB0aGlzLmluaXQoc3Ry
KTsgfQoJU3RyaW5nUGFyc2VyU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2Vy
U3RyZWFtLnByb3RvdHlwZSwgewoJICBudWxsQ2hhcjogeyB2YWx1ZTogJycgfSwKCSAgaW5pdDog
ewoJICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KHN0cikgewoJICAgICAgU3RyaW5nUGFyc2VyU3Ry
ZWFtLnByb3RvdHlwZS5fX3Byb3RvX18uaW5pdC5jYWxsKHRoaXMpOwoJICAgICAgLy8gc3RyXyBh
bmQgdGFpbF8gYXJlIHBvaW50ZXJzIHRvIGEgdmFsdWUuIFVzZSBhbiBhcnJheSBmb3IgdGhpcy4K
CSAgICAgIHRoaXMuc3RyXyA9IFtzdHJdOwoJICAgICAgdGhpcy50YWlsXyA9IFtdOwoJICAgIH0s
CgkgIH0sCgkgIGdldENoYXI6IHsKCSAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Y2hhcihwb3MpIHsK
CSAgICAgIHJldHVybiB0aGlzLnBvcyA+PSAwICYmIHRoaXMucG9zIDwgdGhpcy5zdHJfWzBdLmxl
bmd0aCA/CgkgICAgICAgIHRoaXMuc3RyX1swXS5jaGFyQXQocG9zKSA6IHRoaXMubnVsbENoYXI7
CgkgICAgfSwKCSAgfSwKCSAgLy8gUG9pbnRlciB0byBjb21wbGV0ZSBzdHJpbmcgcGFyc2VkIGJ5
IG9uIHRoaXMgc3RyZWFtLgoJICBzdHI6IHsgc2V0OiBmdW5jdGlvbihzdHIpIHsgdGhpcy5zdHJf
WzBdID0gc3RyOyB9IH0sCgkgIC8vIEEgc3RyZWFtIHRoYXQgZm9sbG93cyBwYXJzaW5nIGhlYWQu
CgkgIHRhaWw6IHsKCSAgICBnZXQ6IGZ1bmN0aW9uKCkgewoJICAgICAgaWYgKCAhIHRoaXMudGFp
bF9bMF0gKSB7CgkgICAgICAgIHZhciB0YWlsID0gdGhpcy5jbG9uZSgpOwoJICAgICAgICB0YWls
LnBvcyA9IHRoaXMucG9zICsgMTsKCSAgICAgICAgdGFpbC50YWlsXyA9IFtdOwoJICAgICAgICB0
aGlzLnRhaWxfWzBdID0gdGFpbDsKCSAgICAgIH0KCSAgICAgIHJldHVybiB0aGlzLnRhaWxfWzBd
OwoJICAgIH0sCgkgIH0sCgkgIC8vIFNldCBwYXJzZWQgcG9ydGlvbiBvZiBzdHJlYW0uCgkgIHNl
dFZhbHVlOiB7CgkgICAgdmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7CgkgICAgICB2YXIgcmV0ID0g
T2JqZWN0LmNyZWF0ZSh0aGlzLl9fcHJvdG9fXyk7CgoJICAgICAgcmV0LnN0cl8gPSB0aGlzLnN0
cl87CgkgICAgICByZXQucG9zID0gdGhpcy5wb3M7CgkgICAgICByZXQudGFpbF8gPSB0aGlzLnRh
aWxfOwoJICAgICAgcmV0LnZhbHVlXyA9IHZhbHVlOwoKCSAgICAgIHJldHVybiByZXQ7CgkgICAg
fSwKCSAgfSwKCSAgLy8gU3RyaW5nUGFyc2VyU3RyZWFtcyBhcmUgdXNlZCB0byBhY3R1YWxseSBh
ZHZhbmNlIGEgY29uY3JldGUgcGFyc2UuCgkgIGlzU3BlY3VsYXRpdmU6IHsgdmFsdWU6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0gfSwKCSAgdG9TdHJpbmc6IHsKCSAgICB2YWx1ZTogZnVu
Y3Rpb24oKSB7CgkgICAgICByZXR1cm4gJ1N0cmluZ1BhcnNlclN0cmVhbScgKyBKU09OLnN0cmlu
Z2lmeSh7CgkgICAgICAgIHBvczogIHN0ZGxpYi50b1N0cmluZyh0aGlzLnBvcyksCgkgICAgICAg
IG5leHQ6IHN0ZGxpYi50b1N0cmluZyh0aGlzLnN0cl9bMF0uc3Vic3RyKHRoaXMucG9zLCA5KSks
CgkgICAgICAgIHZhbHVlOiBzdGRsaWIudG9TdHJpbmcodGhpcy52YWx1ZSksCgkgICAgICB9LCBu
dWxsLCAyKTsKCSAgICB9LAoJICB9LAoJfSk7CgoJLy8KCS8vIEEgcGFyc2VyIHN0cmVhbSBmb3Ig
c3BlY3VsYXRpdmUgcGFyc2luZwoJLy8KCS8vIFRPRE86IFNob3VsZCBpbXBsZW1lbnQgdGhpcyB3
aXRoIGEgZGlmZmVyZW50IHBhdHRlcm4uIEl0IG5lZWQgbm90IG9wZXJhdGUKCS8vIG92ZXIgc3Ry
aW5ncy4KCWZ1bmN0aW9uIFNwZWN1bGF0aXZlUGFyc2VyU3RyZWFtKHBzKSB7IHRoaXMuaW5pdChw
cyk7IH07CglTcGVjdWxhdGl2ZVBhcnNlclN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KAoJICBTdHJpbmdQYXJzZXJTdHJlYW0ucHJvdG90eXBlLCB7CgkgICAgaW5pdDogeyB2YWx1ZTog
ZnVuY3Rpb24gaW5pdChwcykgeyBwcy5jbG9uZSh0aGlzKTsgfSB9LAoJICAgIGlzU3BlY3VsYXRp
dmU6IHsgdmFsdWU6IGZ1bmN0aW9uIGlzU3BlY3VsYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9IH0s
CgkgICAgdG9TdHJpbmc6IHsKCSAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b1N0cmluZygpIHsKCSAg
ICAgICAgcmV0dXJuICdTcGVjdWxhdGl2ZVBhcnNlclN0cmVhbScgKyBKU09OLnN0cmluZ2lmeSh7
CgkgICAgICAgICAgcG9zOiBzdGRsaWIudG9TdHJpbmcodGhpcy5wb3MpLAoJICAgICAgICAgIGhl
YWQ6IHN0ZGxpYi50b1N0cmluZyh0aGlzLmhlYWQpLAoJICAgICAgICAgIHZhbHVlOiBzdGRsaWIu
dG9TdHJpbmcodGhpcy52YWx1ZSksCgkgICAgICAgIH0sIG51bGwsIDIpOwoJICAgICAgfSwKCSAg
ICB9LAoJICB9CgkpOwoJU3BlY3VsYXRpdmVQYXJzZXJTdHJlYW0ubWF5YmVXcmFwID0gZnVuY3Rp
b24ocHMsIG9wdF9jdG9yKSB7CgkgIHZhciBDdG9yID0gb3B0X2N0b3IgfHwgU3BlY3VsYXRpdmVQ
YXJzZXJTdHJlYW07CgkgIGlmICggISBwcy5pc1NwZWN1bGF0aXZlKCkgKSByZXR1cm4gbmV3IEN0
b3IocHMpOwoJICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBzOwoJfTsKCgkv
LwoJLy8gQSBwYXJzZXIgc3RyZWFtIGZvciB0cmFwcGluZyBhZnRlciBwcm9jZXNzaW5nIG9uZSBj
aGFyYWN0ZXIKCS8vCglmdW5jdGlvbiBUcmFwUGFyc2VyU3RyZWFtKHBzKSB7IHRoaXMuaW5pdChw
cyk7IH0KCVRyYXBQYXJzZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSgKCSAgU3Bl
Y3VsYXRpdmVQYXJzZXJTdHJlYW0ucHJvdG90eXBlLCB7CgkgICAgZ29vZENoYXI6IHsgdmFsdWU6
IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSB9LAoJICAgIGhlYWQ6IHsgdmFsdWU6IG51bGwsIHdyaXRh
YmxlOiB0cnVlIH0sCgkgICAgdmFsdWU6IHsgdmFsdWU6IG51bGwsIHdyaXRhYmxlOiB0cnVlIH0s
CgoJICAgIGluaXQ6IHsKCSAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KHBzKSB7CgkgICAgICAg
IFRyYXBQYXJzZXJTdHJlYW0ucHJvdG90eXBlLl9fcHJvdG9fXy5pbml0LmNhbGwodGhpcywgcHMp
OwoJICAgICAgICAvLyBTdG9yZSBoZWFkIGFzIHN0YXRpYyB2YWx1ZS4KCSAgICAgICAgdGhpcy5o
ZWFkID0gdGhpcy5nZXRDaGFyKHRoaXMucG9zKTsKCSAgICAgIH0sCgkgICAgfSwKCSAgICAvLyBE
byBub3QgY2xvbmUgb24gc2V0VmFsdWUuCgkgICAgc2V0VmFsdWU6IHsKCSAgICAgIHZhbHVlOiBm
dW5jdGlvbiBzZXRWYWx1ZSh2KSB7CgkgICAgICAgIHRoaXMudmFsdWVfID0gdGhpcy52YWx1ZSA9
IHY7CgkgICAgICAgIHJldHVybiB0aGlzOwoJICAgICAgfSwKCSAgICB9LAoJICAgIHRhaWw6IHsK
CSAgICAgIGdldDogZnVuY3Rpb24oKSB7CgkgICAgICAgIC8vIFN0b3JlIGluZm86IFN1Y2Nlc3Nm
dWxseSBwYXJzZWQgb25lIGNoYXJhY3Rlci4KCSAgICAgICAgdGhpcy5nb29kQ2hhciA9IHRydWU7
CgkgICAgICAgIHRoaXMucG9zKys7CgkgICAgICAgIC8vIFByZXZlbnQgZnVydGhlciBwYXJzaW5n
IGJ5IHNldHRpbmcgaGVhZCB0byAibm8gY2hhcmFjdGVyIi4KCSAgICAgICAgdGhpcy5oZWFkID0g
dGhpcy5udWxsQ2hhcjsKCSAgICAgICAgLy8gSW52b2tlIGdldHRlciBpbiBwcm90b3R5cGUgY2hh
aW4uCgkgICAgICAgIHZhciB2ID0gdGhpcy52YWx1ZTsKCSAgICAgICAgLy8gU3RvcmUgdmFsdWUg
b24gY3VycmVudCBvYmplY3QuCgkgICAgICAgIHRoaXMudmFsdWUgPSB2OwoJICAgICAgICByZXR1
cm4gdGhpczsKCSAgICAgIH0sCgkgICAgfSwKCSAgICB0b1N0cmluZzogewoJICAgICAgdmFsdWU6
IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewoJICAgICAgICByZXR1cm4gJ1RyYXBQYXJzZXJTdHJlYW0n
ICsgSlNPTi5zdHJpbmdpZnkoewoJICAgICAgICAgIHBvczogc3RkbGliLnRvU3RyaW5nKHRoaXMu
cG9zKSwKCSAgICAgICAgICBnb29kQ2hhcjogc3RkbGliLnRvU3RyaW5nKHRoaXMuZ29vZENoYXIp
LAoJICAgICAgICB9LCBudWxsLCAyKTsKCSAgICAgIH0sCgkgICAgfSwKCSAgfQoJKTsKCgkvLwoJ
Ly8gSGVscGVyIGZ1bmN0aW9ucwoJLy8KCglmdW5jdGlvbiBjbG9uZShvKSB7CgkgIHZhciBydG4g
PSB7fTsKCSAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKTsKCSAgZm9y
ICggdmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyApIHsKCSAgICBydG5ba2V5c1tpXV0g
PSBvW2tleXNbaV1dOwoJICB9CgkgIHJldHVybiBydG47Cgl9CglmdW5jdGlvbiB0b0pTT04obykg
ewoJICB2YXIgdHlwZSA9IHR5cGVvZiBvOwoJICBpZiAoIHR5cGUgPT09ICd1bmRlZmluZWQnICkg
cmV0dXJuIHVuZGVmaW5lZDsKCSAgaWYgKCBvID09PSBudWxsICkgcmV0dXJuIG51bGw7CgkgIGlm
ICggdHlwZW9mIG8udG9KU09OID09PSAnZnVuY3Rpb24nICkKCSAgICByZXR1cm4gby50b0pTT04u
YXBwbHkobywgQXJyYXkuZnJvbShhcmd1bWVudHMpLnNsaWNlKDEpKTsKCSAgLy8gVE9ETzogRG8g
YWxsIHJlbGV2YW50IHBsYXRmb3JtcyBzdXBwb3J0IEFycmF5LmlzQXJyYXk/CgkgIGVsc2UgaWYg
KCBBcnJheS5pc0FycmF5KG8pICkKCSAgICByZXR1cm4gby5tYXAodG9KU09OKTsKCSAgZWxzZSBp
ZiAoIHR5cGUgPT09ICdmdW5jdGlvbicgKQoJICAgIHJldHVybiBmdW5jVG9KU09OKG8pOwoJICBl
bHNlCgkgICAgcmV0dXJuIG87Cgl9CglmdW5jdGlvbiBmcm9tSlNPTihvKSB7CgkgIGlmICggdHlw
ZSA9PT0gJ3VuZGVmaW5lZCcgKSByZXR1cm4gdW5kZWZpbmVkOwoJICBpZiAoIG8gPT09IG51bGwg
KSByZXR1cm4gbnVsbDsKCSAgaWYgKCB0eXBlb2Ygby5jdG9yID09PSAnc3RyaW5nJyApIHsKCSAg
ICB2YXIgY3RvcjsKCSAgICBldmFsKCdjdG9yID0gJyArIG8uY3Rvcik7CgkgICAgaWYgKCB0eXBl
b2YgY3Rvci5mcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJyApIHsKCSAgICAgIGRlbGV0ZSBvLmN0b3I7
CgkgICAgICB2YXIgcnRuID0gY3Rvci5mcm9tSlNPTihvKTsKCSAgICAgIG8uY3RvciA9IGN0b3I7
CgkgICAgICByZXR1cm4gcnRuOwoJICAgIH0KCSAgfQoJICByZXR1cm4gbzsKCX0KCWZ1bmN0aW9u
IGZ1bmNUb0pTT04oZikgewoJICB2YXIganNvbiA9IHsKCSAgICBjdG9yOiAncGFyc2UuZnVuY3Rp
b24nLAoJICAgIF9fZnVuY3Rpb25fXzogRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo
ZiksCgkgICAgbGFiZWw6IGYubGFiZWwgPyBmLmxhYmVsIDogZi5uYW1lCgkgIH07CgkgIGpzb24u
Y29udGV4dCA9IHRvSlNPTihmLmNvbnRleHQgfHwgbnVsbCk7CgkgIGpzb24uY2xvc3VyZSA9IGYu
Y2xvc3VyZSA/IHN0ZGxpYi5tYXBNYXAoZi5jbG9zdXJlLCB0b0pTT04pIDoge307CgkgIGpzb24u
YXJncyA9IGYuYXJncyA/IGYuYXJncy5zbGljZSgpIDogW107CgkgIHJldHVybiBqc29uOwoJfQoJ
ZnVuY3Rpb24gZnVuY0Zyb21KU09OKF9fX19fX19fXykgewoJICB2YXIgcmV0OwoJICBldmFsKChm
dW5jdGlvbigpIHsKCSAgICB2YXIganNvbiA9IF9fX19fX19fXzsKCSAgICB2YXIgc3RyID0gJ3Zh
ciBfX2Z1bmN0aW9uX18gPSAnICsganNvbi5fX2Z1bmN0aW9uX18gKwoJICAgICAgICAgICc7XG4n
OwoJICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5S2V5cyhqc29uLmNsb3N1cmUp
OwoJICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKysgKSB7CgkgICAgICB2
YXIga2V5ID0ga2V5c1tpXTsKCSAgICAgIHZhciB2YWx1ZSA9IGpzb24uY2xvc3VyZVtrZXldOwoJ
ICAgICAgc3RyICs9ICd2YXIgJyArIGtleSArICcgPSBmcm9tSlNPTignICsgSlNPTi5zdHJpbmdp
ZnkodmFsdWUpICsgJyknOwoJICAgIH0KCSAgICBpZiAoIGpzb24uY29udGV4dCA9PT0gbnVsbCAp
IHsKCSAgICAgIGlmICgganNvbi5hcmdzLmxlbmd0aCA+IDAgKSB7CgkgICAgICAgIHN0ciArPSAn
dmFyIF9fYXJnc19fID0gJyArIGpzb24uYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7CgkgICAgICAg
ICAgcmV0dXJuICdmcm9tSlNPTignICsgSlNPTi5zdHJpbmdpZnkoYXJnKSArICcpJzsKCSAgICAg
ICAgfSk7CgkgICAgICB9CgkgICAgICBzdHIgKz0gJ3JldCA9IGZ1bmN0aW9uICcgKyBqc29uLmxh
YmVsICsgJygpIHsgJyArCgkgICAgICAgICdyZXR1cm4gX19mdW5jdGlvbl9fLmFwcGx5KHRoaXMs
IF9fYXJnc19fLmNvbmNhdCgnICsKCSAgICAgICAgJ0FycmF5LmZyb20oYXJndW1lbnRzKSkpOyB9
JzsKCSAgICB9IGVsc2UgewoJICAgICAgc3RyICs9ICdyZXQgPSBfX2Z1bmN0aW9uX18uYmluZChm
cm9tSlNPTignICsKCSAgICAgICAgSlNPTi5zdHJpbmdpZnkoanNvbi5jb250ZXh0KSArICcpJyAr
IGpzb24uYXJncy5tYXAoZnVuY3Rpb24oYXJnKSB7CgkgICAgICAgICAgcmV0dXJuICdmcm9tSlNP
TignICsgSlNPTi5zdHJpbmdpZnkoYXJnKSArICcpJzsKCSAgICAgICAgfSkgKyAnKTsnOwoJICAg
IH0KCSAgICByZXR1cm4gc3RyOwoJICB9KSgpKTsKCSAgcmV0dXJuIHJldDsKCX0KCWZ1bmN0aW9u
IGZfdG9KU09OKCkgewoJICByZXR1cm4gZnVuY1RvSlNPTih0aGlzKTsKCX0KCWZ1bmN0aW9uIGZf
dG9TdHJpbmcoKSB7CgkgIHJldHVybiAnZnVuY3Rpb24gJyArIHRoaXMubGFiZWwgKyAnKCcgKyB0
aGlzLmFyZ3Muam9pbignLCAnKSArCgkgICAgJykgeyAuLi4gfSc7Cgl9CglmdW5jdGlvbiBwX3Rv
U3RyaW5nKCkgewoJICB2YXIgc3RyID0gdGhpcy5sYWJlbDsKCSAgdmFyIGtleXMgPSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLmNsb3N1cmUpOwoJICBpZiAoIGtleXMubGVuZ3RoID09
PSAxICYmIGtleXNbMF0gPT09ICdhcmd1bWVudHMnICkgewoJICAgIHN0ciArPSBzdGRsaWIudG9T
dHJpbmcodGhpcy5jbG9zdXJlLmFyZ3VtZW50cyk7CgkgIH0gZWxzZSB7CgkgICAgdmFyIHNlcCA9
IGtleXMubGVuZ3RoID4gMyA/ICdcbicgOiAnICc7CgkgICAgc3RyICs9ICd7JyArIHNlcDsKCSAg
ICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrICkgewoJICAgICAgc3RyICs9
IGtleXNbaV0gKyAnOiAnICsgc3RkbGliLnRvU3RyaW5nKHRoaXMuY2xvc3VyZVtrZXlzW2ldXSkg
KycsJwoJICAgICAgICArIHNlcDsKCSAgICB9CgkgICAgc3RyICs9ICd9JzsKCSAgfQoJICByZXR1
cm4gc3RyOwoJfQoJZnVuY3Rpb24gZGVjb3JhdGVGdW5jdGlvbihmLCBvcHRzKSB7CgkgIG9wdHMg
PSBvcHRzIHx8IHt9OwoJICBmLmxhYmVsID0gb3B0cy5sYWJlbCB8fCBmLm5hbWU7CgkgIGNvbnNv
bGUuYXNzZXJ0KGYubGFiZWwsICdEZWNvcmF0ZWQgZnVuY3Rpb25zIG11c3QgYmUgbGFiZWxlZCcp
OwoJICBmLmNvbnRleHQgPSBvcHRzLmNvbnRleHQgfHwgbnVsbDsKCSAgZi5jbG9zdXJlID0gb3B0
cy5jbG9zdXJlIHx8IHt9OwoJICBmLmFyZ3MgPSBvcHRzLmFyZ3MgfHwgW107CgkgIGYudG9KU09O
ID0gb3B0cy50b0pTT04gfHwgZl90b0pTT047CgkgIGYudG9TdHJpbmcgPSBvcHRzLnRvU3RyaW5n
IHx8IGZfdG9TdHJpbmc7CgkgIHJldHVybiBmOwoJfQoKCXBhcnNlLmZ1bmN0aW9uID0gewoJICBm
cm9tSlNPTjogZnVuY0Zyb21KU09OLAoJICB0b0pTT046IGZ1bmNUb0pTT04sCgl9OwoKCS8vCgkv
LyBQYXJzZXIgY29udHJvbGxlcnM6IFBhcnNlcnMgY2FsbCBpbnRvIHRoZWlyIGNvbnRyb2xsZXIg
dG8gaW52b2tlIG90aGVyCgkvLyBwYXJzZXJzLiBUaGlzIGludmVyc2lvbiBvZiBjb250cm9sIGFs
bG93cyBmb3IgYWRkaXRpb25hbCBib29ra2VlcGluZwoJLy8gaW5kZXBlbmRlbnQgb2YgcGFyc2Vy
IGltcGxlbWVudGF0aW9ucy4KCS8vCgoJZnVuY3Rpb24gUGFyc2VyQ29udHJvbGxlcihvcHRzKSB7
IHRoaXMuaW5pdChvcHRzKTsgfQoJUGFyc2VyQ29udHJvbGxlci5wcm90b3R5cGUuaW5pdCA9IGZ1
bmN0aW9uKG9wdHMpIHsKCSAgb3B0cyA9IG9wdHMgfHwge307CgkgIHRoaXMuZmFjdG9yaWVzID0g
b3B0cy5mYWN0b3JpZXMgfHwgY2xvbmUocGFyc2UuZmFjdG9yaWVzXyk7CgkgIHRoaXMuYmluZEZh
Y3Rvcmllc18oKTsKCgkgIHRoaXMuZ3JhbW1hciA9IG9wdHMuZ3JhbW1hciB8fCB7IFNUQVJUOiBw
YXJzZS5ncmFtbWFyLmZhaWwgfTsKCSAgdGhpcy5ncmFtbWFyLmZhaWwgPSB0aGlzLmdyYW1tYXIu
ZmFpbCB8fCBwYXJzZS5ncmFtbWFyLmZhaWw7CgkgIHRoaXMuYWN0aW9ucyA9IHt9OwoJICB0aGlz
LmdyZWF0ZXN0UG9zID0gLTE7CgoJICBpZiAoICEgb3B0cy5hY3Rpb25zICkgcmV0dXJuOwoKCSAg
dGhpcy5hZGRBY3Rpb25zKG9wdHMuYWN0aW9ucyk7Cgl9OwoJUGFyc2VyQ29udHJvbGxlci5wcm90
b3R5cGUucGFyc2UgPSBmdW5jdGlvbihwYXJzZXIsIHBzdHJlYW0pIHsKCSAgaWYgKCBERUJVR19Q
QVJTRSAhPT0gMCAmJiAhIHBzdHJlYW0uaXNTcGVjdWxhdGl2ZSgpICkgewoJICAgIGlmICggREVC
VUdfUEFSU0UgJSBERUJVR19JTl9QQVJTRSA9PT0gKCBERUJVR19JTl9QQVJTRSAtIDEgKSApIHsK
CSAgICAgIGNvbnNvbGUubG9nKHBzdHJlYW0uaGVhZCwgJ0AnLCBwc3RyZWFtLnBvcyk7CgkgICAg
ICBjb25zb2xlLmxvZygnPj4+PicsIHBhcnNlci50b1N0cmluZygpKTsKCSAgICB9CgkgICAgaWYg
KCBERUJVR19QQVJTRSAlIERFQlVHX0lOX0JSRUFLID09PSAoIERFQlVHX0lOX0JSRUFLIC0gMSAp
ICkKCSAgICAgIGRlYnVnZ2VyOwoJICAgIERFQlVHX1BBUlNFKys7CgkgIH0KCgkgIHZhciByZXQg
PSBwYXJzZXIuY2FsbCh0aGlzLCBwc3RyZWFtKTsKCSAgaWYgKCByZXQgIT09IG51bGwgJiYgcmV0
LnBvcyA+IHRoaXMuZ3JlYXRlc3RQb3MgKQoJICAgIHRoaXMuZ3JlYXRlc3RQb3MgPSByZXQucG9z
OwoKCSAgaWYgKCBERUJVR19QQVJTRSAhPT0gMCAmJiAhIHBzdHJlYW0uaXNTcGVjdWxhdGl2ZSgp
ICkgewoJICAgIERFQlVHX1BBUlNFLS07CgkgICAgaWYgKCBERUJVR19QQVJTRSAlIERFQlVHX09V
VF9QQVJTRSA9PT0gKCBERUJVR19PVVRfUEFSU0UgLSAxICkgKSB7CgkgICAgICBpZiAoIHJldCAp
CgkgICAgICAgIGNvbnNvbGUubG9nKHBhcnNlci50b1N0cmluZygpLCAnPDw8PCcsIHJldC5oZWFk
LCAnQCcsIHJldC5wb3MpOwoJICAgICAgZWxzZQoJICAgICAgICBjb25zb2xlLmxvZyhwYXJzZXIu
dG9TdHJpbmcoKSwgJzw8PDwnLCByZXQpOwoJICAgIH0KCSAgICBpZiAoIERFQlVHX1BBUlNFICUg
REVCVUdfT1VUX0JSRUFLID09PSAoIERFQlVHX09VVF9CUkVBSyAtIDEgKSApCgkgICAgICBkZWJ1
Z2dlcjsKCSAgfQoKCSAgcmV0dXJuIHJldDsKCX07CglQYXJzZXJDb250cm9sbGVyLnByb3RvdHlw
ZS5wYXJzZVN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgb3B0X3N0YXJ0KSB7CgkgIC8vIFRPRE86IFRo
aXMgZG9lc24ndCByZS11c2UgYSBwYXJzZXIgc3RyZWFtIHRvIHNhdmUgbWVtb3J5LiBJcyBzdWNo
IGEKCSAgLy8gbWVhc3VyZSBiZSBuZWNlc3Nhcnk/CgkgIHRoaXMuZ3JlYXRlc3RQb3MgPSAtMTsK
CSAgdmFyIHJlcyA9IHRoaXMucGFyc2Uob3B0X3N0YXJ0IHx8IHRoaXMuZ3JhbW1hci5TVEFSVCwK
CSAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1BhcnNlclN0cmVhbShzdHIpKTsKCgkg
IHJldHVybiBbIHJlcyAmJiByZXMucG9zID09PSBzdHIubGVuZ3RoLCByZXMgJiYgcmVzLnZhbHVl
LCByZXMgXTsKCX07CglQYXJzZXJDb250cm9sbGVyLnByb3RvdHlwZS5iaW5kRmFjdG9yaWVzXyA9
IGZ1bmN0aW9uKHN5bSwgYWN0aW9uKSB7CgkgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3Bl
cnR5TmFtZXModGhpcy5mYWN0b3JpZXMpOwoJICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBrZXlzLmxl
bmd0aDsgaSsrICkgewoJICAgIHRoaXMuZmFjdG9yaWVzW2tleXNbaV1dID0gdGhpcy5mYWN0b3Jp
ZXNba2V5c1tpXV0uYmluZCh0aGlzKTsKCSAgfQoJfTsKCVBhcnNlckNvbnRyb2xsZXIucHJvdG90
eXBlLndyYXBJbkFjdGlvbl8gPSBmdW5jdGlvbihzeW0sIGFjdGlvbikgewoJICB2YXIgZiA9IHRo
aXMuZ3JhbW1hcltzeW1dOwoKCSAgdmFyIHAyID0gZGVjb3JhdGVGdW5jdGlvbihmdW5jdGlvbihw
cykgewoJICAgIHZhciBwID0gZjsKCSAgICB2YXIgdmFsID0gcHMudmFsdWU7CgkgICAgdmFyIHBz
MiA9IHRoaXMucGFyc2UocCwgcHMpOwoKCSAgICByZXR1cm4gcHMyICYmIHBzMi5zZXRWYWx1ZShh
Y3Rpb24uY2FsbCh0aGlzLCBwczIudmFsdWUsIHZhbCkpOwoJICB9LCB7IGxhYmVsOiBzeW0sIGNs
b3N1cmU6IHsgZjogZiwgYWN0aW9uOiBhY3Rpb24gfSB9KTsKCSAgdGhpcy5ncmFtbWFyW3N5bV0g
PSBwMjsKCX07CglQYXJzZXJDb250cm9sbGVyLnByb3RvdHlwZS5hZGRBY3Rpb24gPSBmdW5jdGlv
bihzeW0sIGYpIHsKCSAgdmFyIGFjdGlvbiA9IGRlY29yYXRlRnVuY3Rpb24oZiwgeyBsYWJlbDog
c3ltIH0pOwoJICB0aGlzLndyYXBJbkFjdGlvbl8oc3ltLCBhY3Rpb24pOwoKCSAgLy8gU3RvcmUg
YWN0aW9uIGZvciByZS13cmFwcGluZyBhZ2FpbnN0IEpTT04gcm91dGluZXMuCgkgIHZhciBhcyA9
IHRoaXMuYWN0aW9uc1tzeW1dID0gdGhpcy5hY3Rpb25zW3N5bV0gfHwgW107CgkgIGFzLnB1c2go
YWN0aW9uKTsKCX07CglQYXJzZXJDb250cm9sbGVyLnByb3RvdHlwZS5hZGRBY3Rpb25zID0gZnVu
Y3Rpb24oKSB7CgkgIHZhciBhY3Rpb25zID0gYXJndW1lbnRzOwoJICBmb3IgKCB2YXIgaSA9IDA7
IGkgPCBhY3Rpb25zLmxlbmd0aDsgaSsrICkgewoJICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbnNb
aV0ubmFtZSwgYWN0aW9uc1tpXSk7CgkgIH0KCX07CglQYXJzZXJDb250cm9sbGVyLnByb3RvdHlw
ZS50b0pTT04gPSBmdW5jdGlvbigpIHsKCSAgcmV0dXJuIHsKCSAgICBjdG9yOiAncGFyc2UuUGFy
c2VyQ29udHJvbGxlcicsCgkgICAgZmFjdG9yaWVzOiBzdGRsaWIubWFwTWFwKHRoaXMuZmFjdG9y
aWVzLCB0b0pTT04pLAoJICAgIGdyYW1tYXI6IHN0ZGxpYi5tYXBNYXAodGhpcy5ncmFtbWFyLCB0
b0pTT04pLAoJICAgIGFjdGlvbnM6IHN0ZGxpYi5tYXBNYXAodGhpcy5hY3Rpb25zLCB0b0pTT04p
LAoJICB9OwoJICByZXR1cm4gcnRuOwoJfTsKCVBhcnNlckNvbnRyb2xsZXIuZnJvbUpTT04gPSBm
dW5jdGlvbihqc29uLCBvcHRfbykgewoJICB2YXIgbyA9IG9wdF9vIHx8IE9iamVjdC5jcmVhdGUo
UGFyc2VyQ29udHJvbGxlci5wcm90b3R5cGUpOwoJICBvLmluaXQoKTsKCgkgIC8vIG8uZmFjdG9y
aWVzID0ganNvbi5mYWN0b3JpZXMgPyBzdGRsaWIubWFwTWFwKGpzb24uZmFjdG9yaWVzLCBmdW5j
RnJvbUpTT04pIDoKCSAgLy8gICBjbG9uZShwYXJzZS5mYWN0b3JpZXNfKTsKCSAgLy8gby5iaW5k
RmFjdG9yaWVzXygpOwoKCSAgLy8gby5ncmFtbWFyID0ganNvbi5ncmFtbWFyID8gc3RkbGliLm1h
cE1hcChqc29uLmdyYW1tYXIsIGZ1bmNGcm9tSlNPTikgOgoJICAvLyAgIHsgU1RBUlQ6IHBhcnNl
LmdyYW1tYXIuZmFpbCB9OwoJICAvLyBvLmdyYW1tYXIuZmFpbCA9IG8uZ3JhbW1hci5mYWlsIHx8
IHBhcnNlLmdyYW1tYXIuZmFpbDsKCgkgIC8vIG8uYWN0aW9ucyA9IHt9OwoKCSAgLy8gaWYgKCBq
c29uLmFjdGlvbnMgKQoJICAvLyAgIG8uYWRkQWN0aW9ucyhzdGRsaWIubWFwTWFwKGpzb24uYWN0
aW9ucywgZnVuY0Zyb21KU09OKSk7CgoJICByZXR1cm4gbzsKCX07CglwYXJzZS5wcmVwID0gUGFy
c2VyQ29udHJvbGxlci5wcm90b3R5cGUucHJlcCA9IGZ1bmN0aW9uKGFyZykgewoJICBpZiAoIHR5
cGVvZiBhcmcgPT09ICdzdHJpbmcnICkgcmV0dXJuIHRoaXMuZmFjdG9yaWVzLmxpdGVyYWwoYXJn
KTsKCSAgcmV0dXJuIGFyZzsKCX07CglwYXJzZS5wcmVwQXJncyA9IFBhcnNlckNvbnRyb2xsZXIu
cHJvdG90eXBlLnByZXBBcmdzID0gZnVuY3Rpb24oYXJncykgewoJICBmb3IgKCB2YXIgaSA9IDAg
OyBpIDwgYXJncy5sZW5ndGggOyBpKysgKSB7CgkgICAgYXJnc1tpXSA9IHRoaXMucHJlcChhcmdz
W2ldKTsKCSAgfQoJICByZXR1cm4gYXJnczsKCX07CgoJLy8gVE9ETzogVGhpcyBjb250cm9sbGVy
IHN0cmF0ZWd5IGlzIGJyb2tlbi4KCS8vIEUuZy4sIGEgcGFyc2VyIHRoYXQgc2tpcHMgY29tbWVu
dHMgcGFyc2VzICJBLyogY29tbWVudCAqL0IiIGFzICJBQiIuCglmdW5jdGlvbiBTa2lwUGFyc2Vy
Q29udHJvbGxlcihvcHRzKSB7CgkgIG9wdHMgPSBvcHRzIHx8IHt9OwoJICB0aGlzLnNraXBfID0g
dHJ1ZTsKCSAgdGhpcy5pbml0KG9wdHMpOwoJICB0aGlzLnNraXBQYXJzZXIgPSBvcHRzLnNraXBQ
YXJzZXIgfHwgdGhpcy5ncmFtbWFyLmZhaWw7Cgl9CglTa2lwUGFyc2VyQ29udHJvbGxlci5wcm90
b3R5cGUgPSBPYmplY3QuY3JlYXRlKAoJICBQYXJzZXJDb250cm9sbGVyLnByb3RvdHlwZSwgewoJ
ICAgIHBhcnNlOiB7CgkgICAgICB2YWx1aWU6ICBmdW5jdGlvbiBwYXJzZShwYXJzZXIsIHBzdHJl
YW0pIHsKCSAgICAgICAgaWYgKCAhIHRoaXMuc2tpcF8gKQoJICAgICAgICAgIHJldHVybiBTa2lw
UGFyc2VyQ29udHJvbGxlci5wcm90b3R5cGUuX19wcm90b19fLnBhcnNlLmNhbGwoCgkgICAgICAg
ICAgICB0aGlzLCBwYXJzZXIsIHBzdHJlYW0pOwoKCSAgICAgICAgdGhpcy5za2lwXyA9IGZhbHNl
OwoJICAgICAgICB2YXIgc2tpcHBzdHJlYW0gPSBwc3RyZWFtOwoJICAgICAgICB3aGlsZSAoIHNr
aXBwc3RyZWFtICE9PSBudWxsICkgewoJICAgICAgICAgIHNraXBwc3RyZWFtID0gdGhpcy5za2lw
UGFyc2VyLmNhbGwodGhpcywgc2tpcHBzdHJlYW0pOwoJICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHNraXBwc3RyZWFtID09PSBudWxsIHx8IHNraXBwc3RyZWFtLnBvcyA+IHBzdHJlYW0ucG9zLAoJ
ICAgICAgICAgICAgICAgICAgICAgICAgICdTa2lwIHBhcnNlciBuZWl0aGVyIGZhaWxlZCBub3Ig
YWR2YW5jZWQnKTsKCSAgICAgICAgICBwc3RyZWFtID0gc2tpcHBzdHJlYW0gfHwgcHN0cmVhbTsK
CSAgICAgICAgfQoJICAgICAgICB0aGlzLnNraXBfID0gdHJ1ZTsKCgkgICAgICAgIHJldHVybiBT
a2lwUGFyc2VyQ29udHJvbGxlci5wcm90b3R5cGUuX19wcm90b19fLnBhcnNlLmNhbGwoCgkgICAg
ICAgICAgdGhpcywgcGFyc2VyLCBwc3RyZWFtKTsKCSAgICAgIH0sCgkgICAgfSwKCSAgfQoJKTsK
CS8vIFRPRE86IEFkZCBkZWxlZ2F0aW5nIHRvL2Zyb20gSlNPTi4KCglmdW5jdGlvbiBUb2tlblBh
cnNlckNvbnRyb2xsZXIob3B0cykgeyB0aGlzLmluaXQob3B0cyk7IH0KCVRva2VuUGFyc2VyQ29u
dHJvbGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKAoJICBQYXJzZXJDb250cm9sbGVyLnBy
b3RvdHlwZSwgewoJICAgIGluaXQ6IHsKCSAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KG9wdHMp
IHsKCSAgICAgICAgb3B0cyA9IG9wdHMgfHwge307CgkgICAgICAgIGlmICggb3B0cy5zZXBhcmF0
b3IgKSB7CgkgICAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSBwYXJzZS5mYWN0b3JpZXMubm9kZWJ1
ZyhvcHRzLnNlcGFyYXRvcik7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgdmFyIGZzID0g
cGFyc2UuZmFjdG9yaWVzOwoJICAgICAgICAgIHZhciBwcyA9IHBhcnNlLmdyYW1tYXI7CgkgICAg
ICAgICAgdGhpcy5zZXBhcmF0b3IgPSBmcy5ub2RlYnVnKAoJICAgICAgICAgICAgZnMucmVwZWF0
MChmcy5hbHQocHMud2hpdGVzcGFjZV8sIHBzLmNTdHlsZUNvbW1lbnRfKSkKCSAgICAgICAgICAp
OwoJICAgICAgICB9CgoJICAgICAgICB2YXIgZmFjdG9yaWVzID0gb3B0cy5mYWN0b3JpZXMgPQoJ
ICAgICAgICAgICAgICBvcHRzLmZhY3RvcmllcyB8fCBjbG9uZShwYXJzZS5mYWN0b3JpZXNfKTsK
CgkgICAgICAgIGRlZmluZVBhcnNlckZhY3Rvcmllcy5jYWxsKAoJICAgICAgICAgIGZhY3Rvcmll
cywKCSAgICAgICAgICBmdW5jdGlvbiB0c2VxKC8qIHRva2VucyAqLykgewoJICAgICAgICAgICAg
dmFyIHRva2VuaXplZFNlcSA9IFtdOwoJICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwg
YXJndW1lbnRzLmxlbmd0aDsgaSsrICkgewoJICAgICAgICAgICAgICB0b2tlbml6ZWRTZXEucHVz
aChhcmd1bWVudHNbaV0sIHRoaXMuc2VwYXJhdG9yKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAg
ICAgIHZhciBzZXFQYXJzZXIgPSB0aGlzLmZhY3Rvcmllcy5zZXEuYXBwbHkodGhpcywgdG9rZW5p
emVkU2VxKTsKCSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihwcykgewoJICAgICAgICAgICAg
ICB2YXIgcmV0ID0gdGhpcy5wYXJzZShzZXFQYXJzZXIsIHBzKTsKCSAgICAgICAgICAgICAgaWYg
KCByZXQgPT09IG51bGwgfHwgcmV0LnZhbHVlID09PSBudWxsICkgcmV0dXJuIHJldDsKCSAgICAg
ICAgICAgICAgdmFyIHYxID0gcmV0LnZhbHVlLCB2MiA9IFtdOwoJICAgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKyApIHsKCSAgICAgICAgICAgICAgICBpZiAo
ICggaSAlIDIgKSA9PT0gMCApIHYyLnB1c2godjFbaV0pOwoJICAgICAgICAgICAgICB9CgkgICAg
ICAgICAgICAgIHJldHVybiByZXQuc2V0VmFsdWUodjIpOwoJICAgICAgICAgICAgfTsKCSAgICAg
ICAgICB9LAoJICAgICAgICAgIGZ1bmN0aW9uIHRzZXExKG4pIHsKCSAgICAgICAgICAgIHZhciB0
c2VxUGFyc2VyID0gdGhpcy5mYWN0b3JpZXMudHNlcS5hcHBseSgKCSAgICAgICAgICAgICAgdGhp
cywgQXJyYXkuZnJvbShhcmd1bWVudHMpLnNsaWNlKDEpKTsKCSAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbihwcykgewoJICAgICAgICAgICAgICB2YXIgcmV0ID0gdGhpcy5wYXJzZSh0c2VxUGFy
c2VyLCBwcyk7CgkgICAgICAgICAgICAgIGlmICggcmV0ID09PSBudWxsIHx8IHJldC52YWx1ZSA9
PT0gbnVsbCApIHJldHVybiByZXQ7CgkgICAgICAgICAgICAgIHJldHVybiByZXQuc2V0VmFsdWUo
cmV0LnZhbHVlW25dKTsKCSAgICAgICAgICAgIH07CgkgICAgICAgICAgfSwKCSAgICAgICAgICBm
dW5jdGlvbiB0cmVwZWF0KHAsIG9wdF9kZWxpbSwgb3B0X21pbiwgb3B0X21heCkgewoJICAgICAg
ICAgICAgb3B0X2RlbGltID0gb3B0X2RlbGltID8KCSAgICAgICAgICAgICAgdGhpcy5mYWN0b3Jp
ZXMuc2VxKG9wdF9kZWxpbSwgdGhpcy5zZXBhcmF0b3IpIDogb3B0X2RlbGltOwoJICAgICAgICAg
ICAgdmFyIHJlcGVhdFBhcnNlciA9IHRoaXMuZmFjdG9yaWVzLnJlcGVhdCgKCSAgICAgICAgICAg
ICAgdGhpcy5mYWN0b3JpZXMudHNlcShwKSwgb3B0X2RlbGltLCBvcHRfbWluLAoJICAgICAgICAg
ICAgICBvcHRfbWF4KTsKCSAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihwcykgewoJICAgICAg
ICAgICAgICB2YXIgcmV0ID0gdGhpcy5wYXJzZShyZXBlYXRQYXJzZXIsIHBzKTsKCSAgICAgICAg
ICAgICAgaWYgKCByZXQgPT09IG51bGwgfHwgcmV0LnZhbHVlID09PSBudWxsICkgcmV0dXJuIHJl
dDsKCSAgICAgICAgICAgICAgcmV0dXJuIHJldC5zZXRWYWx1ZShyZXQudmFsdWUubWFwKGZ1bmN0
aW9uKG9uZVBhcnRTZXEpIHsKCSAgICAgICAgICAgICAgICByZXR1cm4gb25lUGFydFNlcVswXTsK
CSAgICAgICAgICAgICAgfSkpOwoJICAgICAgICAgICAgfTsKCSAgICAgICAgICB9LAoJICAgICAg
ICAgIGZ1bmN0aW9uIHRwbHVzKHAsIG9wdF9kZWxpbSkgewoJICAgICAgICAgICAgb3B0X2RlbGlt
ID0gb3B0X2RlbGltID8KCSAgICAgICAgICAgICAgdGhpcy5mYWN0b3JpZXMudHNlcShvcHRfZGVs
aW0pIDogb3B0X2RlbGltOwoJICAgICAgICAgICAgdmFyIHBsdXNQYXJzZXIgPSB0aGlzLmZhY3Rv
cmllcy5wbHVzKAoJICAgICAgICAgICAgICB0aGlzLmZhY3Rvcmllcy50c2VxKHApLCBvcHRfZGVs
aW0pOwoJICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBzKSB7CgkgICAgICAgICAgICAgIHZh
ciByZXQgPSB0aGlzLnBhcnNlKHBsdXNQYXJzZXIsIHBzKTsKCSAgICAgICAgICAgICAgaWYgKCBy
ZXQgPT09IG51bGwgfHwgcmV0LnZhbHVlID09PSBudWxsICkgcmV0dXJuIHJldDsKCSAgICAgICAg
ICAgICAgcmV0dXJuIHJldC5zZXRWYWx1ZShyZXQudmFsdWUubWFwKGZ1bmN0aW9uKG9uZVBhcnRT
ZXEpIHsKCSAgICAgICAgICAgICAgICByZXR1cm4gb25lUGFydFNlcVswXTsKCSAgICAgICAgICAg
ICAgfSkpOwoJICAgICAgICAgICAgfTsKCSAgICAgICAgICB9CgkgICAgICAgICk7CgoJICAgICAg
ICBUb2tlblBhcnNlckNvbnRyb2xsZXIucHJvdG90eXBlLl9fcHJvdG9fXy5pbml0LmNhbGwodGhp
cywgb3B0cyk7CgoJICAgICAgICB2YXIga2V5ID0gJ1NUQVJUJzsKCSAgICAgICAgd2hpbGUgKCB0
aGlzLmdyYW1tYXIuaGFzT3duUHJvcGVydHkoa2V5KSApIGtleSArPSAnXyc7CgkgICAgICAgIGlm
ICgga2V5ICE9PSAnU1RBUlQnICkgewoJICAgICAgICAgIHRoaXMuZ3JhbW1hcltrZXldID0gdGhp
cy5ncmFtbWFyLlNUQVJUOwoJICAgICAgICAgIHRoaXMuZ3JhbW1hci5TVEFSVCA9IHRoaXMuZmFj
dG9yaWVzLnNlcSh0aGlzLnNlcGFyYXRvciwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWN0b3JpZXMuc3ltKGtleSkpOwoJICAgICAgICB9
CgkgICAgICB9LAoJICAgIH0sCgkgIH0KCSk7CgkvLyBUT0RPOiBBZGQgZGVsZWdhdGluZyB0by9m
cm9tIEpTT04uCgoJLy8KCS8vIFBhcnNlciBmYWN0b3JpZXMKCS8vCgkvLyBUaGVzZSBhcmUgZnVu
Y3Rpb25zIChwYXJzZXIgY29tYmluYXRvcnMpIHRoYXQgcmV0dXJuIGEgZnVuY3Rpb24gKGEKCS8v
IHBhcnNlcikgb2YgdGhlIGZvbGxvd2luZyB0eXBlOgoJLy8KCS8vIFBhcnNlclN0cmVhbSA9PiBQ
YXJzZXJTdHJlYW18bnVsbC4KCS8vCgkvLyBBIHBhcnNlciByZXR1cm5zIG51bGwgaWYgYW5kIG9u
bHkgaWYgdGhlIHBhcnNlciBmYWlsZWQgYWdhaW5zdCB0aGUgaW5wdXQKCS8vIHN0cmVhbS4KCS8v
CgoJZnVuY3Rpb24gZGVmaW5lUGFyc2VyRmFjdG9yaWVzKCkgewoJICBmdW5jdGlvbiBkZWNvcmF0
ZVBhcnNlckZhY3RvcnkoZikgewoJICAgIHZhciBhcmdOYW1lcyA9IHN0ZGxpYi5nZXRBcmdOYW1l
cyhmKTsKCSAgICB2YXIgZjIgPSBkZWNvcmF0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCkgewoJICAgICAg
dmFyIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7CgkgICAgICB2YXIgY2xvc3VyZSA9IHt9
LCBpOwoJICAgICAgZm9yICggaSA9IDA7IGkgPCBhcmdOYW1lcy5sZW5ndGg7IGkrKyApIHsKCSAg
ICAgICAgY2xvc3VyZVthcmdOYW1lc1tpXV0gPSBhcmdzW2ldOwoJICAgICAgfQoJICAgICAgaWYg
KCBpIDwgYXJncy5sZW5ndGggKSBjbG9zdXJlLmFyZ3VtZW50cyA9IGFyZ3Muc2xpY2UoaSk7Cgkg
ICAgICByZXR1cm4gZGVjb3JhdGVGdW5jdGlvbigKCSAgICAgICAgZi5hcHBseSh0aGlzLCBhcmdz
KSwKCSAgICAgICAgewoJICAgICAgICAgIGxhYmVsOiBmLm5hbWUgKyAnUGFyc2VyJywKCSAgICAg
ICAgICBjbG9zdXJlOiBjbG9zdXJlLAoJICAgICAgICAgIHRvU3RyaW5nOiBwX3RvU3RyaW5nLAoJ
ICAgICAgICB9CgkgICAgICApOwoJICAgIH0sIHsgbGFiZWw6IGYubmFtZSwgY2xvc3VyZTogeyBm
OiBmIH0gfSk7CgkgICAgcmV0dXJuIGYyOwoJICB9CgoJICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBh
cmd1bWVudHMubGVuZ3RoOyBpKysgKSB7CgkgICAgdmFyIGYgPSBhcmd1bWVudHNbaV07CgkgICAg
dGhpc1tmLm5hbWVdID0gZGVjb3JhdGVQYXJzZXJGYWN0b3J5KGYpOwoJICB9CgoJICByZXR1cm4g
dGhpczsKCX0KCgl2YXIgYWRkUGFyc2VyRmFjdG9yaWVzID0gZGVmaW5lUGFyc2VyRmFjdG9yaWVz
LmJpbmQocGFyc2UuZmFjdG9yaWVzXyk7CgoJYWRkUGFyc2VyRmFjdG9yaWVzKAoJICAvLyBVbmlj
b2RlIHJhbmdlIGZyb20gYzEgdG8gYzIsIGluY2x1c2l2ZS4KCSAgZnVuY3Rpb24gcmFuZ2UoYzEs
IGMyKSB7CgkgICAgcmV0dXJuIGZ1bmN0aW9uKHBzKSB7CgkgICAgICBpZiAoIHBzLmhlYWQgPT09
IHBzLm51bGxDaGFyICkgcmV0dXJuIG51bGw7CgkgICAgICBpZiAoIHBzLmhlYWQgPCBjMSB8fCBw
cy5oZWFkID4gYzIgKSByZXR1cm4gbnVsbDsKCSAgICAgIHJldHVybiBwcy50YWlsLnNldFZhbHVl
KHBzLmhlYWQpOwoJICAgIH07CgkgIH0sCgoJICAvLyBMaXRlcmFsIHN0cmluZyB2YWx1ZS4gT3B0
aW9uYWxseSByZXBvcnQgYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB3aGF0IGlzCgkgIC8vIGFjdHVh
bGx5IHBhcnNlZC4KCSAgKGZ1bmN0aW9uIGxpdGVyYWxfX2Nsb3N1cmUoKSB7CgkgICAgLy8gQ2Fj
aGUgb2YgbGl0ZXJhbCBwYXJzZXJzLCB3aGljaCByZXBlYXQgYSBsb3QuCgkgICAgdmFyIGNhY2hl
ID0ge307CgoJICAgIHJldHVybiBmdW5jdGlvbiBsaXRlcmFsKHN0ciwgb3B0X3ZhbHVlKSB7Cgkg
ICAgICAvLyBObyBjYWNoaW5nIHdoZW4gaW52b2tlZCB3aXRoIGN1c3RvbSB2YWx1ZS4KCSAgICAg
IGlmICggISBvcHRfdmFsdWUgJiYgY2FjaGVbc3RyXSApIHJldHVybiBjYWNoZVtzdHJdOwoKCSAg
ICAgIHZhciBmOwoJICAgICAgaWYgKCBzdHIubGVuZ3RoID09PSAxICkgewoJICAgICAgICBmID0g
ZnVuY3Rpb24ocHMpIHsKCSAgICAgICAgICByZXR1cm4gc3RyID09PSBwcy5oZWFkID8gcHMudGFp
bC5zZXRWYWx1ZShvcHRfdmFsdWUgfHwgc3RyKSA6IG51bGw7CgkgICAgICAgIH07CgkgICAgICB9
IGVsc2UgewoJICAgICAgICBmID0gZnVuY3Rpb24ocHMpIHsKCSAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDAgOyBpIDwgc3RyLmxlbmd0aCA7IGkrKywgcHMgPSBwcy50YWlsICkgewoJICAgICAgICAg
ICAgaWYgKCBzdHIuY2hhckF0KGkpICE9PSBwcy5oZWFkICkgcmV0dXJuIG51bGw7CgkgICAgICAg
ICAgfQoKCSAgICAgICAgICByZXR1cm4gcHMuc2V0VmFsdWUob3B0X3ZhbHVlIHx8IHN0cik7Cgkg
ICAgICAgIH07CgkgICAgICB9CgoJICAgICAgLy8gTm8gY2FjaGluZyB3aGVuIGludm9rZWQgd2l0
aCBjdXN0b20gdmFsdWUuCgkgICAgICBpZiAoICEgb3B0X3ZhbHVlICkgcmV0dXJuIGNhY2hlW3N0
cl0gPSBmOwoKCSAgICAgIHJldHVybiBmOwoJICAgIH07CgkgIH0pKCksCgoJICAvLyBTYW1lIGFz
IGFib3ZlLCBidXQgY2FzZS1pbnNlbnNpdGl2ZS4gTk9URTogRG9lc24ndCB3b3JrIGZvciBVbmlj
b2RlCgkgIC8vIGNoYXJhY3RlcnMuCgkgIGZ1bmN0aW9uIGxpdGVyYWxfaWMoc3RyLCBvcHRfdmFs
dWUpIHsKCSAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTsKCSAgICByZXR1cm4gZnVuY3Rpb24o
cHMpIHsKCSAgICAgIGZvciAoIHZhciBpID0gMCA7IGkgPCBzdHIubGVuZ3RoIDsgaSsrLCBwcyA9
IHBzLnRhaWwgKSB7CgkgICAgICAgIGlmICggcHMuaGVhZCA9PT0gcHMubnVsbENoYXIgfHwKCSAg
ICAgICAgICAgICBzdHIuY2hhckF0KGkpICE9PSBwcy5oZWFkLnRvTG93ZXJDYXNlKCkgKSByZXR1
cm4gbnVsbDsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gcHMuc2V0VmFsdWUob3B0X3ZhbHVlIHx8
IHN0cik7CgkgICAgfTsKCSAgfSwKCgkgIC8vIFNpbmdsZSBjaGFyYWN0ZXI7IGFueSBjaGFyYWN0
ZXIgYnV0IGMuCgkgIGZ1bmN0aW9uIG5vdENoYXIoYykgewoJICAgIHJldHVybiBmdW5jdGlvbihw
cykgewoJICAgICAgcmV0dXJuIHBzLmhlYWQgIT09IHBzLm51bGxDaGFyICYmIHBzLmhlYWQgIT09
IGMgPyBwcy50YWlsLnNldFZhbHVlKHBzLmhlYWQpIDoKCSAgICAgICAgbnVsbDsKCSAgICB9OwoJ
ICB9LAoKCSAgLy8gU2luZ2xlIGNoYXJhY3RlcjsgYW55IGNoYXJhY3RlciBidXQgdGhvc2UgbGlz
dGVkIGluIHMuCgkgIGZ1bmN0aW9uIG5vdENoYXJzKHMpIHsKCSAgICByZXR1cm4gZnVuY3Rpb24o
cHMpIHsKCSAgICAgIHJldHVybiBwcy5oZWFkICE9PSBwcy5udWxsQ2hhciAmJiBzLmluZGV4T2Yo
cHMuaGVhZCkgPT09IC0xID8KCSAgICAgICAgcHMudGFpbC5zZXRWYWx1ZShwcy5oZWFkKSA6IG51
bGw7CgkgICAgfTsKCSAgfSwKCgkgIC8vIE5lZ2F0ZSBwYXJzZXIgcDsgb3B0aW9uYWxseSBydW4g
b3B0X2Vsc2UgYWZ0ZXIgbmVnYXRpb24gKHRoaXMgaXMgdXNlZnVsCgkgIC8vIGZvciBlbnN1cmlu
ZyB0aGF0IGlucHV0IGFkdmFuY2VzIHdoZW4gcmVwZWF0aW5nIGFnYWluc3Qgbm90KC4uLikpLgoJ
ICBmdW5jdGlvbiBub3QocCwgb3B0X2Vsc2UpIHsKCSAgICBwID0gdGhpcy5wcmVwKHApOwoJICAg
IG9wdF9lbHNlID0gdGhpcy5wcmVwKG9wdF9lbHNlKTsKCSAgICByZXR1cm4gZnVuY3Rpb24ocHMp
IHsKCSAgICAgIHJldHVybiB0aGlzLnBhcnNlKHAsIHBzKSA/IG51bGwgOgoJICAgICAgICBvcHRf
ZWxzZSA/IHRoaXMucGFyc2Uob3B0X2Vsc2UsIHBzKSA6IHBzOwoJICAgIH07CgkgIH0sCgoJICAv
LyBJbnRlcnByZXQgaW5wdXQgcGFyc2VyLCBwLCBhcyBvcHRpb25hbC4KCSAgLy8gVE9ETzogSW4g
ZGVidWcgbW9kZSB1c2UgYSBzcGVjdWxhdGl2ZSBwYXJzZXIsIHRoZW4gcmUtcnVuLgoJICBmdW5j
dGlvbiBvcHRpb25hbChwKSB7CgkgICAgcCA9IHRoaXMucHJlcChwKTsKCSAgICByZXR1cm4gZnVu
Y3Rpb24ocHMpIHsgcmV0dXJuIHRoaXMucGFyc2UocCwgcHMpIHx8IHBzLnNldFZhbHVlKG51bGwp
OyB9OwoJICB9LAoKCSAgZnVuY3Rpb24gY29weUlucHV0KHApIHsKCSAgICBwID0gdGhpcy5wcmVw
KHApOwoJICAgIHJldHVybiBmdW5jdGlvbihwcykgewoJICAgICAgdmFyIHJlcyA9IHRoaXMucGFy
c2UocCwgcHMpOwoKCSAgICAgIHJldHVybiByZXMgIT09IG51bGwgPwoJICAgICAgICByZXMuc2V0
VmFsdWUocHMuc3RyXy50b1N0cmluZygpLnN1YnN0cmluZyhwcy5wb3MsIHJlcy5wb3MpKSA6IHJl
czsKCSAgICB9OwoJICB9LAoKCSAgLy8gUGFyc2VzIGlmIHRoZSBwIHBhcnNlcywgYnV0IGRvZXNu
J3QgYWR2YW5jZSBpbnB1dCBhcyBhIHJlc3VsdCBvZgoJICAvLyBydW5uaW5nIHAuCgkgIGZ1bmN0
aW9uIGxvb2thaGVhZChwKSB7CgkgICAgcCA9IHRoaXMucHJlcChwKTsKCSAgICByZXR1cm4gZnVu
Y3Rpb24ocHMpIHsgcmV0dXJuIHRoaXMucGFyc2UocCwgcHMpICYmIHBzOyB9OwoJICB9LAoKCSAg
Ly8gUmVwZWF0IHBhcnNlciwgcCwgemVybyBvciBtb3JlIHRpbWVzLiBPcHRpb25hbGx5IHVzZSBv
cHRfZGVsaW0gdG8gcGFyc2UKCSAgLy8gZGVsaW1pdGVycyBiZXR3ZWVuIHBhcnNlcyB1c2luZyBw
LiBBbHNvIG9wdGlvbmFsOiBzdWNjZWVkIGlmIGFuZCBvbmx5CgkgIC8vIGlmIG51bWJlciBvZiBz
dWNjZXNzZnVsIHAgcGFyc2VzIGlzIGluIHRoZSByYW5nZSBbb3B0X21pbiwgb3B0X21heF0uCgkg
IC8vIFRPRE86IEluIGRlYnVnIG1vZGUgdXNlIGEgc3BlY3VsYXRpdmUgcGFyc2VyLCB0aGVuIHJl
LXJ1bi4KCSAgZnVuY3Rpb24gcmVwZWF0KHAsIG9wdF9kZWxpbSwgb3B0X21pbiwgb3B0X21heCkg
ewoJICAgIHAgPSB0aGlzLnByZXAocCk7CgkgICAgb3B0X2RlbGltID0gdGhpcy5wcmVwKG9wdF9k
ZWxpbSk7CgoJICAgIHJldHVybiBmdW5jdGlvbihwcykgewoJICAgICAgdmFyIHJldCA9IFtdOwoK
CSAgICAgIGZvciAoIHZhciBpID0gMCA7ICEgb3B0X21heCB8fCBpIDwgb3B0X21heDsgaSsrICkg
ewoJICAgICAgICB2YXIgcmVzOwoKCSAgICAgICAgaWYgKCBvcHRfZGVsaW0gJiYgcmV0Lmxlbmd0
aCAhPT0gMCApIHsKCSAgICAgICAgICBpZiAoICEgKCByZXMgPSB0aGlzLnBhcnNlKG9wdF9kZWxp
bSwgcHMpICkgKSBicmVhazsKCSAgICAgICAgICBwcyA9IHJlczsKCSAgICAgICAgfQoKCSAgICAg
ICAgaWYgKCAhICggcmVzID0gdGhpcy5wYXJzZShwLCBwcykgKSApIGJyZWFrOwoKCSAgICAgICAg
cmV0LnB1c2gocmVzLnZhbHVlKTsKCSAgICAgICAgcHMgPSByZXM7CgkgICAgICB9CgoJICAgICAg
aWYgKCBvcHRfbWluICYmIHJldC5sZW5ndGggPCBvcHRfbWluICkgcmV0dXJuIG51bGw7CgoJICAg
ICAgcmV0dXJuIHBzLnNldFZhbHVlKHJldCk7CgkgICAgfTsKCSAgfSwKCgkgIC8vIE9uZSBvciBt
b3JlIHBhcnNlcyBvZiBwLCBvcHRpb25hbGx5IHNlcGFyYXRlZCBieSBwYXJzZXIsIG9wdF9kZWxp
bS4KCSAgZnVuY3Rpb24gcGx1cyhwLCBvcHRfZGVsaW0pIHsKCSAgICByZXR1cm4gdGhpcy5mYWN0
b3JpZXMucmVwZWF0KHAsIG9wdF9kZWxpbSwgMSk7CgkgIH0sCgoJICAvLyBGb3JiaWQgYWN0aXZh
dGluZyB0aGUgInNraXAgcGFyc2VyIiBpbiBwYXJzaW5nIHAKCSAgZnVuY3Rpb24gbm9za2lwKHAp
IHsKCSAgICByZXR1cm4gZnVuY3Rpb24ocHMpIHsKCSAgICAgIHRoaXMuc2tpcF8gPSBmYWxzZTsK
CSAgICAgIHBzID0gdGhpcy5wYXJzZShwLCBwcyk7CgkgICAgICB0aGlzLnNraXBfID0gdHJ1ZTsK
CSAgICAgIHJldHVybiBwczsKCSAgICB9OwoJICB9LAoKCSAgLy8gTGlrZSByZXBlYXQsIGV4Y2Vw
dCBkb2Vzbid0IHN0b3JlIHJlc3VsdHMKCSAgZnVuY3Rpb24gcmVwZWF0MChwKSB7CgkgICAgcCA9
IHRoaXMucHJlcChwKTsKCgkgICAgcmV0dXJuIGZ1bmN0aW9uKHBzKSB7CgkgICAgICB2YXIgcmVz
OwoJICAgICAgd2hpbGUgKCByZXMgPSB0aGlzLnBhcnNlKHAsIHBzKSApIHBzID0gcmVzOwoJICAg
ICAgcmV0dXJuIHBzLnNldFZhbHVlKCcnKTsKCSAgICB9OwoJICB9LAoKCSAgLy8gTGlrZSBwbHVz
LCBleGNlcHQgZG9lc24ndCBzdG9yZSByZXN1bHRzCgkgIGZ1bmN0aW9uIHBsdXMwKHApIHsKCSAg
ICBwID0gdGhpcy5wcmVwKHApOwoKCSAgICByZXR1cm4gZnVuY3Rpb24ocHMpIHsKCSAgICAgIHZh
ciByZXM7CgkgICAgICBpZiAoICEgKHJlcyA9IHRoaXMucGFyc2UocCwgcHMpKSApIHJldHVybiBu
dWxsOwoJICAgICAgcHMgPSByZXM7CgkgICAgICB3aGlsZSAoIHJlcyA9IHRoaXMucGFyc2UocCwg
cHMpICkgcHMgPSByZXM7CgkgICAgICByZXR1cm4gcHMuc2V0VmFsdWUoJycpOwoJICAgIH07Cgkg
IH0sCgoJICAvLyBSdW4gYSBzZXF1ZW5jZSBvZiBwYXJzZXJzCgkgIGZ1bmN0aW9uIHNlcSgvKiB2
YXJncyAqLykgewoJICAgIHZhciBhcmdzID0gdGhpcy5wcmVwQXJncyhhcmd1bWVudHMpOwoKCSAg
ICByZXR1cm4gZnVuY3Rpb24ocHMpIHsKCSAgICAgIHZhciByZXQgPSBbXTsKCgkgICAgICBmb3Ig
KCB2YXIgaSA9IDAgOyBpIDwgYXJncy5sZW5ndGggOyBpKysgKSB7CgkgICAgICAgIGlmICggISAo
IHBzID0gdGhpcy5wYXJzZShhcmdzW2ldLCBwcykgKSApIHJldHVybiBudWxsOwoJICAgICAgICBy
ZXQucHVzaChwcy52YWx1ZSk7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIHBzLnNldFZhbHVlKHJl
dCk7CgkgICAgfTsKCSAgfSwKCgkgIC8vIExpa2Ugc2VxLCBleGNlcHQgcmV0dXJucyByZXN1bHQg
b2Ygbid0aCBwYXJzZXIuCgkgIGZ1bmN0aW9uIHNlcTEobiAvKiwgdmFyZ3MgKi8pIHsKCSAgICB2
YXIgYXJncyA9IHRoaXMucHJlcEFyZ3MoQXJyYXkuZnJvbShhcmd1bWVudHMpLnNsaWNlKDEpKTsK
CgkgICAgcmV0dXJuIGZ1bmN0aW9uKHBzKSB7CgkgICAgICB2YXIgcmVzID0gdGhpcy5mYWN0b3Jp
ZXMuc2VxLmFwcGx5KHRoaXMsIGFyZ3MpLmNhbGwodGhpcywgcHMpOwoJICAgICAgcmV0dXJuIHJl
cyAhPT0gbnVsbCA/IHJlcy5zZXRWYWx1ZShyZXMudmFsdWVbbl0pIDogcmVzOwoJICAgIH07Cgkg
IH0sCgoJICAvLyBTaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG9mIGFsdAoJICBmdW5jdGlvbiBz
aW1wbGVBbHQoLyogdmFyZ3MgKi8pIHsKCSAgICB2YXIgYXJncyA9IHRoaXMucHJlcEFyZ3MoYXJn
dW1lbnRzKTsKCgkgICAgaWYgKCBhcmdzLmxlbmd0aCA9PSAxICkgcmV0dXJuIGFyZ3NbMF07CgoJ
ICAgIHJldHVybiBmdW5jdGlvbihwcykgewoJICAgICAgdmFyIGFsdFBTID0gU3BlY3VsYXRpdmVQ
YXJzZXJTdHJlYW0ubWF5YmVXcmFwKHBzKTsKCSAgICAgIHZhciByZXMgPSBudWxsLCBwb3MgPSAt
MSwgcCA9IG51bGw7CgkgICAgICBmb3IgKCB2YXIgaSA9IDAgOyBpIDwgYXJncy5sZW5ndGggOyBp
KysgKSB7CgkgICAgICAgIHJlcyA9IHRoaXMucGFyc2UoYXJnc1tpXSwgYWx0UFMpOwoJICAgICAg
ICBpZiAoIHJlcyAhPT0gbnVsbCAmJiBwb3MgPCByZXMucG9zICkgewoJICAgICAgICAgIHAgPSBh
cmdzW2ldOwoJICAgICAgICAgIHBvcyA9IHJlcy5wb3M7CgkgICAgICAgIH0KCSAgICAgIH0KCSAg
ICAgIHJldHVybiBwICE9PSBudWxsID8gdGhpcy5wYXJzZShwLCBwcykgOiBudWxsOwoJICAgIH07
CgkgIH0sCgoJICAvLyBNYXRjaCBvbmUgb2YgdGhlIGFsdGVybmF0ZSBwYXJzZXJzIGluIGFyZ3Vt
ZW50czsgbW9yZSBjb21wcmVoZW5zaXZlCgkgIC8vIGFsZ29yaXRobSB0aGFuIHNpbXBsZUFsdAoJ
ICBmdW5jdGlvbiBhbHQoLyogdmFyZ3MgKi8pIHsKCSAgICAvKiB2YXIgU0lNUExFX0FMVCA9IHBh
cnNlLmZhY3Rvcmllcy5zaW1wbGVBbHQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgKi8KCSAgICB2
YXIgYXJncyA9IHRoaXMucHJlcEFyZ3MoYXJndW1lbnRzKTsKCSAgICB2YXIgbWFwICA9IHt9OwoJ
ICAgIHZhciBwYXJzZXJWZXJzaW9uID0gcGFyc2VyVmVyc2lvbl87CgoJICAgIHZhciBudWxsUGFy
c2VyID0gdGhpcy5ncmFtbWFyLmZhaWw7CgoJICAgIGZ1bmN0aW9uIHRlc3RQYXJzZXIocCwgcHMp
IHsKCSAgICAgIC8vIFVzZSBhIHNwZWNpYWxpemVkIHBhcnNlciB0byBjYXB0dXJlIHdoZXRoZXIg
cCBjYW4gY29uc3VtZSBvbmUgY2hhciwKCSAgICAgIC8vIGJ1dCBwcmV2ZW50IHAgZnJvbSBwYXJz
aW5nIGJleW9uZCBvbmUgY2hhci4KCSAgICAgIHZhciB0cmFwUFMgPSBuZXcgVHJhcFBhcnNlclN0
cmVhbShwcyk7CgkgICAgICB2YXIgcmV0ID0gdGhpcy5wYXJzZShwLCB0cmFwUFMpOwoJICAgICAg
Ly8gVGhpcyBwYXJzZXIgaXMgYSBjYW5kaWRhdGUgaWZmOgoJICAgICAgLy8gKDEpIGl0IHBhcnNl
cyBzdWNjZXNzZnVsbHkgKGV2ZW4gaWYgaXQgY29uc3VtZXMgbm8gaW5wdXQpLCBvcgoJICAgICAg
Ly8gKDIpIGl0IGNvbnN1bWVkIGEgY2hhcmFjdGVyLgoJICAgICAgcmV0dXJuICggISEgcmV0ICkg
fHwgdHJhcFBTLmdvb2RDaGFyOwoJICAgIH0KCgkgICAgZnVuY3Rpb24gZ2V0UGFyc2VyRm9yQ2hh
cihwcykgewoJICAgICAgaWYgKCBwcy5oZWFkID09PSBwcy5udWxsQ2hhciApIHJldHVybiBudWxs
UGFyc2VyOwoKCSAgICAgIHZhciBjID0gcHMuaGVhZDsKCSAgICAgIHZhciBwID0gbWFwW2NdOwoK
CSAgICAgIGlmICggISBwICkgewoJICAgICAgICB2YXIgYWx0cyA9IFtdOwoKCSAgICAgICAgZm9y
ICggdmFyIGkgPSAwIDsgaSA8IGFyZ3MubGVuZ3RoIDsgaSsrICkgewoJICAgICAgICAgIHZhciBw
YXJzZXIgPSBhcmdzW2ldOwoJICAgICAgICAgIGlmICggdGVzdFBhcnNlci5jYWxsKHRoaXMsIHBh
cnNlciwgcHMpICkgYWx0cy5wdXNoKHBhcnNlcik7CgkgICAgICAgIH0KCgkgICAgICAgIHAgPSBh
bHRzLmxlbmd0aCA9PSAwID8gbnVsbFBhcnNlciA6CgkgICAgICAgICAgYWx0cy5sZW5ndGggPT0g
MSA/IGFsdHNbMF0gOgoJICAgICAgICAgIHRoaXMuZmFjdG9yaWVzLnNpbXBsZUFsdC5hcHBseSh0
aGlzLCBhbHRzKTsKCgkgICAgICAgIG1hcFtjXSA9IHA7CgkgICAgICB9CgoJICAgICAgcmV0dXJu
IHA7CgkgICAgfQoKCSAgICByZXR1cm4gZnVuY3Rpb24ocHMpIHsKCSAgICAgIGlmICggcGFyc2Vy
VmVyc2lvbiAhPT0gcGFyc2VyVmVyc2lvbl8gKSB7CgkgICAgICAgIG1hcCA9IHt9OwoJICAgICAg
ICBwYXJzZXJWZXJzaW9uID0gcGFyc2VyVmVyc2lvbl87CgkgICAgICB9CgkgICAgICB2YXIgcDEg
PSBnZXRQYXJzZXJGb3JDaGFyLmNhbGwodGhpcywgcHMpOwoJICAgICAgdmFyIHIxID0gdGhpcy5w
YXJzZSgKCSAgICAgICAgcDEsCgkgICAgICAgIHBzKTsKCSAgICAgIC8vIElmIGFsdCBhbmQgc2lt
cGxlQWx0IGRvbid0IHJldHVybiBzYW1lIHZhbHVlIHRoZW4gdW5jb21tZW50IHRoaXMKCSAgICAg
IC8vIHNlY3Rpb24gdG8gZmluZCBvdXQgd2hlcmUgdGhlIHByb2JsZW0gaXMgb2NjdXJpbmcuCgkg
ICAgICAvKgoJICAgICAgIHZhciByMiA9IHRoaXMucGFyc2UoU0lNUExFX0FMVCwgcHMpOwoJICAg
ICAgIGlmICggISByMSAhPT0gISByMiApIGRlYnVnZ2VyOwoJICAgICAgIGlmICggcjEgJiYgKCBy
MS5wb3MgIT09IHIyLnBvcyApICkgZGVidWdnZXI7CgkgICAgICAgKi8KCSAgICAgIHJldHVybiBy
MTsKCSAgICB9OwoJICB9LAoKCSAgLy8gQ29uY2F0ZW5hdGUgcmVzdWx0cyBvZiBhIHBhcnNlciB0
aHQgcmV0dXJucyBhIHN0cmluZy1hcnJheS4KCSAgZnVuY3Rpb24gc3RyKHApIHsKCSAgICBwID0g
dGhpcy5wcmVwKHApOwoJICAgIHJldHVybiBmdW5jdGlvbihwcykgewoJICAgICAgcHMgPSB0aGlz
LnBhcnNlKHAsIHBzKTsKCSAgICAgIHJldHVybiBwcyA/IHBzLnNldFZhbHVlKHBzLnZhbHVlICE9
PSBudWxsID8gcHMudmFsdWUuam9pbignJykgOiAnJykgOgoJICAgICAgbnVsbDsKCSAgICB9OwoJ
ICB9LAoKCSAgLy8gUGljayBhcnJheSBpbmRpY2VzIG91dCBvZiBwYXJzZXIgcmVzdWx0CgkgIC8v
IEUuZy4sIHBpY2soWzAsIDJdLCBzZXEoc3ltKCdsYWJlbCcpLCAnPScsIHN5bSgndmFsdWUnKSkp
CgkgIGZ1bmN0aW9uIHBpY2soYXMsIHApIHsKCSAgICBwID0gdGhpcy5wcmVwKHApOwoJICAgIHJl
dHVybiBmdW5jdGlvbihwcykgewoJICAgICAgcHMgPSB0aGlzLnBhcnNlKHAsIHBzKTsKCSAgICAg
IGlmICggISBwcyApIHJldHVybiBudWxsOwoJICAgICAgdmFyIHJldCA9IFtdOwoJICAgICAgZm9y
ICggdmFyIGkgPSAwIDsgaSA8IGFzLmxlbmd0aCA7IGkrKyApIHJldC5wdXNoKHBzLnZhbHVlW2Fz
W2ldXSk7CgkgICAgICByZXR1cm4gcHMuc2V0VmFsdWUocmV0KTsKCSAgICB9OwoJICB9LAoKCSAg
Ly8gTGlrZSBzZXEsIGV4Y2VwdCBzdG9yZXMgZXZlcnkgb3RoZXIgcGFyc2VyOyB1c2VmdWwgd2l0
aCBpbnRlcmxlYXZpbmcKCSAgLy8gdG9rZW4gYW5kIHNlcGFyYXRvciBwYXJzZXJzCgkgIGZ1bmN0
aW9uIHNlcUV2ZW4oLyogdmFyZ3MgKi8pIHsKCSAgICB2YXIgYXJncyA9IHRoaXMucHJlcEFyZ3Mo
YXJndW1lbnRzKTsKCgkgICAgdmFyIGluZGljZXMgPSBbXTsKCSAgICBmb3IgKCB2YXIgaSA9IDA7
IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDIgKSBpbmRpY2VzLnB1c2goaSk7CgoJICAgIHJl
dHVybiB0aGlzLmZhY3Rvcmllcy5waWNrKAoJICAgICAgaW5kaWNlcywgdGhpcy5mYWN0b3JpZXMu
c2VxLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwoJICB9LAoKCSAgLy8gRGVidWcgcGFyc2VyLCBw
CgkgIGZ1bmN0aW9uIGRlYnVnKHApIHsKCSAgICByZXR1cm4gZnVuY3Rpb24ocHMpIHsKCSAgICAg
IGlmICggISBwcy5pc1NwZWN1bGF0aXZlKCkgKQoJICAgICAgICBkZWJ1Z2dlcjsKCgkgICAgICB2
YXIgb2xkID0gREVCVUdfUEFSU0U7CgkgICAgICBERUJVR19QQVJTRSA9IDE7CgkgICAgICB2YXIg
cmV0ID0gdGhpcy5wYXJzZShwLCBwcyk7CgkgICAgICBERUJVR19QQVJTRSA9IG9sZDsKCgkgICAg
ICBpZiAoICEgcHMuaXNTcGVjdWxhdGl2ZSgpICkKCSAgICAgICAgZGVidWdnZXI7CgoJICAgICAg
cmV0dXJuIHJldDsKCSAgICB9OwoJICB9LAoKCSAgLy8gRGlzYWJsZWQgZGVidWdnaW5nIG9uIHBh
cnNlciwgcAoJICBmdW5jdGlvbiBub2RlYnVnKHApIHsKCSAgICByZXR1cm4gZnVuY3Rpb24ocHMp
IHsKCSAgICAgIHZhciBvbGQgPSBERUJVR19QQVJTRTsKCSAgICAgIERFQlVHX1BBUlNFID0gMDsK
CSAgICAgIHZhciByZXQgPSB0aGlzLnBhcnNlKHAsIHBzKTsKCSAgICAgIERFQlVHX1BBUlNFID0g
b2xkOwoJICAgICAgcmV0dXJuIHJldDsKCSAgICB9OwoJICB9LAoKCSAgLy8gTG9nIGEgcGFyc2Vy
J3Mgb3V0cHV0CgkgIGZ1bmN0aW9uIGxvZyhwKSB7CgkgICAgcmV0dXJuIGZ1bmN0aW9uKHBzKSB7
CgkgICAgICB2YXIgcmV0ID0gdGhpcy5wYXJzZShwLCBwcyk7CgoJICAgICAgaWYgKCByZXQgJiYg
ISBwcy5pc1NwZWN1bGF0aXZlKCkgKQoJICAgICAgICBjb25zb2xlLmxvZyhwLmxhYmVsLCByZXQu
dmFsdWUpOwoKCSAgICAgIHJldHVybiByZXQ7CgkgICAgfTsKCSAgfSwKCgkgIC8vIFJlZmVyIHRv
IGludGVybmVkIHBhcnNlciBuYW1lLgoJICAvLyBFLmcuLCB7IG9zOiBwbHVzKCdvJyksIGJvbzog
c2VxKCdiJywgc3ltKCdvcycpKSB9CgkgIGZ1bmN0aW9uIHN5bShuYW1lKSB7CgkgICAgcmV0dXJu
IGZ1bmN0aW9uKHBzKSB7CgkgICAgICB2YXIgcCA9IHRoaXMuZ3JhbW1hcltuYW1lXTsKCgkgICAg
ICBpZiAoICEgcCApCgkgICAgICAgIHRocm93IG5ldyBFcnJvcignUEFSU0UgRVJST1I6IFVua25v
d24gU3ltYm9sIDwnICsgbmFtZSArICc+Jyk7CgoJICAgICAgcmV0dXJuIHRoaXMucGFyc2UocCwg
cHMpOwoJICAgIH07CgkgIH0sCgoJICAvLyBBbnkgc2luZ2xlIGNoYXJhY3RlcgoJICBmdW5jdGlv
biBhbnlDaGFyKHBzKSB7CgkgICAgLy8gVE9ETzogV2h5IGlzIHRoaXMgY29tbWVudGVkLW91dD8K
CSAgICByZXR1cm4gcHMuaGVhZCA/IHBzLnRhaWwvKi5zZXRWYWx1ZShwcy5oZWFkKSovIDogbnVs
bDsKCSAgfQoJKTsKCglwYXJzZS5mYWN0b3JpZXMgPSBzdGRsaWIubWFwTWFwKAoJICBwYXJzZS5m
YWN0b3JpZXNfLAoJICBmdW5jdGlvbihmYWN0b3J5KSB7IHJldHVybiBmYWN0b3J5LmJpbmQocGFy
c2UpOyB9CgkpOwoKCS8vCgkvLyBDb252ZW5pZW5jZSBwYXJzZXJzCgkvLwoJKGZ1bmN0aW9uKCQp
IHsKCSAgLy8gQXNzaWduIHBhcnNlLmdyYW1tYXIgZWFnZXJseTogb3RoZXIgcGFyc2VycyBkZXBl
bmQgb24KCSAgLy8gbG9va3VwIG9mIHBhcnNlLmdyYW1tYXIuZmFpbC4KCSAgdmFyIGcgPSBwYXJz
ZS5ncmFtbWFyID0gewoJICAgIGZhaWw6IGRlY29yYXRlRnVuY3Rpb24oCgkgICAgICBmdW5jdGlv
biBmYWlsKHBzKSB7IHJldHVybiBudWxsOyB9LAoJICAgICAgewoJICAgICAgICBsYWJlbDogJ2Zh
aWxQYXJzZXInLAoJICAgICAgICB0b1N0cmluZzogcF90b1N0cmluZywKCSAgICAgIH0KCSAgICAp
LAoJICB9OwoJICBnLmFscGhhQ2hhciA9ICAkLmFsdCgkLnJhbmdlKCdhJywneicpLCAkLnJhbmdl
KCdBJywgJ1onKSk7CgkgIGcuYWxwaGFOdW1DaGFyID0gJC5hbHQoJC5hbHBoYUNoYXIsICQucmFu
Z2UoJzAnLCAnOScpKTsKCSAgZy53b3JkQ2hhciA9ICQuYWx0KCQuYWxwaGFOdW1DaGFyLCAnXycp
OwoJICBnLndoaXRlc3BhY2VfID0gJC5wbHVzMCgkLmFsdCgnICcsICdcdCcsICdcbicsICdccics
ICdcZicpKTsKCSAgZy5tdWx0aWxpbmVDb21tZW50XyA9ICQuc2VxMSgKCSAgICAxLAoJICAgICcv
KicsCgkgICAgJC5yZXBlYXQwKCQuYWx0KCQubm90Q2hhcignKicpLCAkLnNlcSgnKicsICQubm90
Q2hhcignXC8nKSkpKSwKCSAgICAnKlwvJyk7CgkgIGcuc2luZ2xlTGluZUNvbW1lbnRfID0gJC5z
ZXEoCgkgICAgJy8vJywKCSAgICAkLnJlcGVhdDAoJC5ub3RDaGFycygnXHJcbicpKSwgJC5hbHQo
J1xyXG4nLCAnXG4nKSk7CgkgIGcuY1N0eWxlQ29tbWVudF8gPSAkLnBsdXMwKCQuYWx0KGcuc2lu
Z2xlTGluZUNvbW1lbnRfLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLm11
bHRpbGluZUNvbW1lbnRfKSk7Cgl9KShwYXJzZS5mYWN0b3JpZXMpOwoKCWZ1bmN0aW9uIGludmFs
aWRhdGVQYXJzZXJzKCkgewoJICBwYXJzZXJWZXJzaW9uXysrOwoJfQoKCS8vIENvZGUgdG8gZXhw
b3NlIHBhcnNlciBmYWN0b3JpZXMgYW5kIGdyYW1tYXIgQVBJIGxvY2FsbHkuCglwYXJzZS5nZXRG
YWN0b3J5VmFyc0NvZGVTdHIgPSBmdW5jdGlvbigpIHsKCSAgcmV0dXJuICd2YXIgZnMgPSBwYXJz
ZS5mYWN0b3JpZXM7XG4nICsKCSAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJzZS5m
YWN0b3JpZXMpLm1hcChmdW5jdGlvbihrZXkpIHsKCSAgICAgIHJldHVybiAndmFyICcgKyBrZXkg
KyAnID0gZnMuJyArIGtleSArICc7JzsKCSAgICB9KS5zb3J0KCkuam9pbignXG4nKSArCgkgICAg
J3ZhciBnID0gcGFyc2UuZ3JhbW1hcjtcbicgKwoJICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
bWVzKHBhcnNlLmdyYW1tYXIpLm1hcChmdW5jdGlvbihrZXkpIHsKCSAgICAgIHJldHVybiAndmFy
ICcgKyBrZXkgKyAnID0gZy4nICsga2V5ICsgJzsnOwoJICAgIH0pLnNvcnQoKS5qb2luKCdcbicp
OwoJfTsKCXZhciBmS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcnNlLmZhY3Rv
cmllcyk7Cgl2YXIgZ0tleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJzZS5ncmFt
bWFyKTsKCWZvciAoIHZhciBpID0gMDsgaSA8IGZLZXlzLmxlbmd0aDsgaSsrICkgewoJICBjb25z
b2xlLmFzc2VydChnS2V5cy5pbmRleE9mKGZLZXlzW2ldKSA9PT0gLTEsCgkgICAgICAgICAgICAg
ICAgICdJZGVudGljYWwgcGFyc2UgbGlicmFyeSBmYWN0b3J5IGFuZCBncmFtbWFyIGtleTogIicg
KwoJICAgICAgICAgICAgICAgICBmS2V5c1tpXSArICciJyk7Cgl9CgoJcGFyc2UuUGFyc2VyU3Ry
ZWFtID0gUGFyc2VyU3RyZWFtOwoJcGFyc2UuU3RyaW5nUGFyc2VyU3RyZWFtID0gU3RyaW5nUGFy
c2VyU3RyZWFtOwoJcGFyc2UuU3BlY3VsYXRpdmVQYXJzZXJTdHJlYW0gPSBTcGVjdWxhdGl2ZVBh
cnNlclN0cmVhbTsKCXBhcnNlLlRyYXBQYXJzZXJTdHJlYW0gPSBUcmFwUGFyc2VyU3RyZWFtOwoJ
cGFyc2UuUGFyc2VyQ29udHJvbGxlciA9IFBhcnNlckNvbnRyb2xsZXI7CglwYXJzZS5Ta2lwUGFy
c2VyQ29udHJvbGxlciA9IFNraXBQYXJzZXJDb250cm9sbGVyOwoJcGFyc2UuVG9rZW5QYXJzZXJD
b250cm9sbGVyID0gVG9rZW5QYXJzZXJDb250cm9sbGVyOwoJcGFyc2UuaW52YWxpZGF0ZVBhcnNl
cnMgPSBpbnZhbGlkYXRlUGFyc2VyczsKCgltb2R1bGUuZXhwb3J0cyA9IHBhcnNlOwoKCi8qKiov
IH0pLAovKiAxMzIgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykgewoKCS8qKgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2ds
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFw
YWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkg
KiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJl
cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy
ZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g
IkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO
WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZv
ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGlt
aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgX2dl
dE93blByb3BlcnR5TmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7CgoJdmFyIF9nZXRP
d25Qcm9wZXJ0eU5hbWVzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldE93blByb3BlcnR5
TmFtZXMpOwoKCXZhciBfZ2V0SXRlcmF0b3IyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7CgoJ
dmFyIF9nZXRJdGVyYXRvcjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJdGVyYXRvcjIp
OwoKCXZhciBfY2xhc3NDYWxsQ2hlY2syID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDEpOwoKCXZh
ciBfY2xhc3NDYWxsQ2hlY2szID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xhc3NDYWxsQ2hl
Y2syKTsKCgl2YXIgX2NyZWF0ZUNsYXNzMiA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTsKCgl2
YXIgX2NyZWF0ZUNsYXNzMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUNsYXNzMik7
CgoJZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBv
YmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCgl2YXIgSW5kZXhlciA9
IGZ1bmN0aW9uICgpIHsKCSAgZnVuY3Rpb24gSW5kZXhlcihvcHRzKSB7CgkgICAgKDAsIF9jbGFz
c0NhbGxDaGVjazMuZGVmYXVsdCkodGhpcywgSW5kZXhlcik7CgoJICAgIHRoaXMuaW5pdChvcHRz
IHx8IHt9KTsKCSAgfQoKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoSW5kZXhlciwgW3sK
CSAgICBrZXk6ICdpbml0JywKCSAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChvcHRzKSB7CgkgICAg
ICB0aGlzLmJ5ID0ge307CgkgICAgICBpZiAoIW9wdHMua2V5cykgcmV0dXJuOwoJICAgICAgdmFy
IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlOwoJICAgICAgdmFyIF9kaWRJdGVyYXRv
ckVycm9yID0gZmFsc2U7CgkgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7CgoJ
ICAgICAgdHJ5IHsKCSAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gKDAsIF9nZXRJdGVyYXRv
cjMuZGVmYXVsdCkob3B0cy5rZXlzKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlv
biA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21w
bGV0aW9uID0gdHJ1ZSkgewoJICAgICAgICAgIHZhciBrZXkgPSBfc3RlcC52YWx1ZTsKCgkgICAg
ICAgICAgdGhpcy5hZGRJbmRleChrZXkpOwoJICAgICAgICB9CgkgICAgICB9IGNhdGNoIChlcnIp
IHsKCSAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlOwoJICAgICAgICBfaXRlcmF0b3JF
cnJvciA9IGVycjsKCSAgICAgIH0gZmluYWxseSB7CgkgICAgICAgIHRyeSB7CgkgICAgICAgICAg
aWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHsKCSAg
ICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTsKCSAgICAgICAgICB9CgkgICAgICAgIH0gZmlu
YWxseSB7CgkgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7CgkgICAgICAgICAgICB0
aHJvdyBfaXRlcmF0b3JFcnJvcjsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgIH0KCSAg
ICB9CgkgIH0sIHsKCSAgICBrZXk6ICdoYXNJbmRleCcsCgkgICAgdmFsdWU6IGZ1bmN0aW9uIGhh
c0luZGV4KG5hbWUpIHsKCSAgICAgIHJldHVybiAhIXRoaXMuYnlbbmFtZV07CgkgICAgfQoJICB9
LCB7CgkgICAga2V5OiAnYWRkSW5kZXgnLAoJICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRJbmRleChu
YW1lKSB7CgkgICAgICB0aGlzLmJ5W25hbWVdID0ge307CgkgICAgICByZXR1cm4gdGhpcy5ieVtu
YW1lXTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICdwdXQnLAoJICAgIHZhbHVlOiBmdW5jdGlv
biBwdXQobmFtZSwgZGF0YSkgewoJICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRh
W25hbWVdID09PSB1bmRlZmluZWQpIHJldHVybjsKCSAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMu
YnlbbmFtZV0pOwoJICAgICAgaWYgKCF0aGlzLmJ5W25hbWVdW2RhdGFbbmFtZV1dKSB0aGlzLmJ5
W25hbWVdW2RhdGFbbmFtZV1dID0gW107CgkgICAgICB0aGlzLmJ5W25hbWVdW2RhdGFbbmFtZV1d
LnB1c2goZGF0YSk7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAncmVtb3ZlJywKCSAgICB2YWx1
ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUsIGRhdGEpIHsKCSAgICAgIGlmIChkYXRhID09PSB1bmRl
ZmluZWQgfHwgZGF0YVtuYW1lXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47CgkgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLmJ5W25hbWVdKTsKCSAgICAgIHRoaXMuYnlbbmFtZV1bZGF0YVtuYW1lXV0g
PSB0aGlzLmJ5W25hbWVdW2RhdGFbbmFtZV1dLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkgewoJICAg
ICAgICByZXR1cm4gaXRlbSAhPT0gZGF0YTsKCSAgICAgIH0pOwoJICAgIH0KCSAgfSwgewoJICAg
IGtleTogJ2ZpbmQnLAoJICAgIHZhbHVlOiBmdW5jdGlvbiBmaW5kKGtleSwgdmFsdWUpIHsKCSAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuYnlba2V5XSk7CgkgICAgICByZXR1cm4gdGhpcy5ieVtr
ZXldW3ZhbHVlXSA/IHRoaXMuYnlba2V5XVt2YWx1ZV0uc2xpY2UoKSA6IFtdOwoJICAgIH0KCSAg
fSwgewoJICAgIGtleTogJ3B1dFRvQWxsJywKCSAgICB2YWx1ZTogZnVuY3Rpb24gcHV0VG9BbGwo
ZGF0YSkgewoJICAgICAgdmFyIGlkeHMgPSAoMCwgX2dldE93blByb3BlcnR5TmFtZXMyLmRlZmF1
bHQpKHRoaXMuYnkpOwoJICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1
ZTsKCSAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTsKCSAgICAgIHZhciBfaXRl
cmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7CgoJICAgICAgdHJ5IHsKCSAgICAgICAgZm9yICh2YXIg
X2l0ZXJhdG9yMiA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1bHQpKGlkeHMpLCBfc3RlcDI7ICEo
X2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkp
LmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWUpIHsKCSAgICAgICAgICB2
YXIgaWR4ID0gX3N0ZXAyLnZhbHVlOwoKCSAgICAgICAgICB0aGlzLnB1dChpZHgsIGRhdGEpOwoJ
ICAgICAgICB9CgkgICAgICB9IGNhdGNoIChlcnIpIHsKCSAgICAgICAgX2RpZEl0ZXJhdG9yRXJy
b3IyID0gdHJ1ZTsKCSAgICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gZXJyOwoJICAgICAgfSBmaW5h
bGx5IHsKCSAgICAgICAgdHJ5IHsKCSAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBs
ZXRpb24yICYmIF9pdGVyYXRvcjIucmV0dXJuKSB7CgkgICAgICAgICAgICBfaXRlcmF0b3IyLnJl
dHVybigpOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBmaW5hbGx5IHsKCSAgICAgICAgICBpZiAo
X2RpZEl0ZXJhdG9yRXJyb3IyKSB7CgkgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7
CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoJICB9LCB7CgkgICAga2V5
OiAncmVtb3ZlRnJvbUFsbCcsCgkgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUZyb21BbGwoZGF0
YSkgewoJICAgICAgdmFyIGlkeHMgPSAoMCwgX2dldE93blByb3BlcnR5TmFtZXMyLmRlZmF1bHQp
KHRoaXMuYnkpOwoJICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZTsK
CSAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTsKCSAgICAgIHZhciBfaXRlcmF0
b3JFcnJvcjMgPSB1bmRlZmluZWQ7CgoJICAgICAgdHJ5IHsKCSAgICAgICAgZm9yICh2YXIgX2l0
ZXJhdG9yMyA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1bHQpKGlkeHMpLCBfc3RlcDM7ICEoX2l0
ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSAoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uZXh0KCkpLmRv
bmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWUpIHsKCSAgICAgICAgICB2YXIg
aWR4ID0gX3N0ZXAzLnZhbHVlOwoKCSAgICAgICAgICB0aGlzLnJlbW92ZShpZHgsIGRhdGEpOwoJ
ICAgICAgICB9CgkgICAgICB9IGNhdGNoIChlcnIpIHsKCSAgICAgICAgX2RpZEl0ZXJhdG9yRXJy
b3IzID0gdHJ1ZTsKCSAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gZXJyOwoJICAgICAgfSBmaW5h
bGx5IHsKCSAgICAgICAgdHJ5IHsKCSAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBs
ZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7CgkgICAgICAgICAgICBfaXRlcmF0b3IzLnJl
dHVybigpOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBmaW5hbGx5IHsKCSAgICAgICAgICBpZiAo
X2RpZEl0ZXJhdG9yRXJyb3IzKSB7CgkgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjM7
CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoJICB9XSk7CgkgIHJldHVy
biBJbmRleGVyOwoJfSgpOwoKCXZhciBEQiA9IGZ1bmN0aW9uICgpIHsKCSAgKDAsIF9jcmVhdGVD
bGFzczMuZGVmYXVsdCkoREIsIG51bGwsIFt7CgkgICAga2V5OiAnZnJvbUpTT04nLAoJICAgIHZh
bHVlOiBmdW5jdGlvbiBmcm9tSlNPTihqc29uLCBvcHRzKSB7CgkgICAgICB2YXIgZGIgPSBuZXcg
REIob3B0cyk7CgkgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlOwoJ
ICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yNCA9IGZhbHNlOwoJICAgICAgdmFyIF9pdGVyYXRv
ckVycm9yNCA9IHVuZGVmaW5lZDsKCgkgICAgICB0cnkgewoJICAgICAgICBmb3IgKHZhciBfaXRl
cmF0b3I0ID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoanNvbiksIF9zdGVwNDsgIShfaXRl
cmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IChfc3RlcDQgPSBfaXRlcmF0b3I0Lm5leHQoKSkuZG9u
ZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gdHJ1ZSkgewoJICAgICAgICAgIHZhciBp
dGVtID0gX3N0ZXA0LnZhbHVlOwoKCSAgICAgICAgICBkYi5wdXQoaXRlbSk7CgkgICAgICAgIH0K
CSAgICAgIH0gY2F0Y2ggKGVycikgewoJICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjQgPSB0cnVl
OwoJICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSBlcnI7CgkgICAgICB9IGZpbmFsbHkgewoJICAg
ICAgICB0cnkgewoJICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgJiYg
X2l0ZXJhdG9yNC5yZXR1cm4pIHsKCSAgICAgICAgICAgIF9pdGVyYXRvcjQucmV0dXJuKCk7Cgkg
ICAgICAgICAgfQoJICAgICAgICB9IGZpbmFsbHkgewoJICAgICAgICAgIGlmIChfZGlkSXRlcmF0
b3JFcnJvcjQpIHsKCSAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNDsKCSAgICAgICAg
ICB9CgkgICAgICAgIH0KCSAgICAgIH0KCgkgICAgICByZXR1cm4gZGI7CgkgICAgfQoJICB9XSk7
CgoJICBmdW5jdGlvbiBEQihvcHRzKSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMuZGVmYXVs
dCkodGhpcywgREIpOwoKCSAgICB0aGlzLmluaXQob3B0cyB8fCB7fSk7CgkgIH0KCgkgICgwLCBf
Y3JlYXRlQ2xhc3MzLmRlZmF1bHQpKERCLCBbewoJICAgIGtleTogJ2luaXQnLAoJICAgIHZhbHVl
OiBmdW5jdGlvbiBpbml0KG9wdHMpIHsKCSAgICAgIG9wdHMgPSBvcHRzIHx8IHt9OwoJICAgICAg
dGhpcy5uYW1lID0gb3B0cy5uYW1lIHx8ICcnOwoJICAgICAgdGhpcy5kYXRhID0gW107CgkgICAg
ICB0aGlzLnN1YnMgPSB7fTsKCSAgICAgIHRoaXMuaWR4ID0gbmV3IEluZGV4ZXIoeyBrZXlzOiBv
cHRzLmlkeEtleXMgfSk7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAncHV0JywKCSAgICB2YWx1
ZTogZnVuY3Rpb24gcHV0KGRhdGEpIHsKCSAgICAgIHRoaXMuZGF0YS5wdXNoKGRhdGEpOwoJICAg
ICAgdGhpcy5pZHgucHV0VG9BbGwoZGF0YSk7CgkgICAgICBpZiAoZGF0YS5wdXRUbykgZGF0YS5w
dXRUbyh0aGlzKTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICdyZW1vdmUnLAoJICAgIHZhbHVl
OiBmdW5jdGlvbiByZW1vdmUoZGF0YSwgZmlsdGVyKSB7CgkgICAgICBmaWx0ZXIgPSBmaWx0ZXIg
fHwgZnVuY3Rpb24gKGl0ZW0pIHsKCSAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGRhdGE7CgkgICAg
ICB9OwoJICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmZpbHRlcihmaWx0ZXIpOwoJICAgICAg
dGhpcy5pZHgucmVtb3ZlRnJvbUFsbChkYXRhKTsKCSAgICAgIGlmIChkYXRhLnJlbW92ZUZyb20p
IGRhdGEucmVtb3ZlRnJvbSh0aGlzKTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICdmaW5kJywK
CSAgICB2YWx1ZTogZnVuY3Rpb24gZmluZChrZXksIHZhbHVlKSB7CgkgICAgICByZXR1cm4gdGhp
cy5pZHguZmluZChrZXksIHZhbHVlKTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICdzZWxlY3Qn
LAoJICAgIHZhbHVlOiBmdW5jdGlvbiBzZWxlY3QoY2FsbGJhY2spIHsKCSAgICAgIHZhciBfaXRl
cmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IHRydWU7CgkgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJy
b3I1ID0gZmFsc2U7CgkgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3I1ID0gdW5kZWZpbmVkOwoKCSAg
ICAgIHRyeSB7CgkgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjUgPSAoMCwgX2dldEl0ZXJhdG9y
My5kZWZhdWx0KSh0aGlzLmRhdGEpLCBfc3RlcDU7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlv
bjUgPSAoX3N0ZXA1ID0gX2l0ZXJhdG9yNS5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxD
b21wbGV0aW9uNSA9IHRydWUpIHsKCSAgICAgICAgICB2YXIgZGF0dW0gPSBfc3RlcDUudmFsdWU7
CgoJICAgICAgICAgIGNhbGxiYWNrKGRhdHVtKTsKCSAgICAgICAgfQoJICAgICAgfSBjYXRjaCAo
ZXJyKSB7CgkgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNSA9IHRydWU7CgkgICAgICAgIF9pdGVy
YXRvckVycm9yNSA9IGVycjsKCSAgICAgIH0gZmluYWxseSB7CgkgICAgICAgIHRyeSB7CgkgICAg
ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSAmJiBfaXRlcmF0b3I1LnJldHVy
bikgewoJICAgICAgICAgICAgX2l0ZXJhdG9yNS5yZXR1cm4oKTsKCSAgICAgICAgICB9CgkgICAg
ICAgIH0gZmluYWxseSB7CgkgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yNSkgewoJICAg
ICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I1OwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJ
ICAgICAgfQoJICAgIH0KCSAgfV0pOwoJICByZXR1cm4gREI7Cgl9KCk7CgoJbW9kdWxlLmV4cG9y
dHMgPSBEQjsKCi8qKiovIH0pLAovKiAxMzMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhw
b3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCW1vZHVsZS5leHBvcnRzID0geyAiZGVmYXVs
dCI6IF9fd2VicGFja19yZXF1aXJlX18oMTM0KSwgX19lc01vZHVsZTogdHJ1ZSB9OwoKLyoqKi8g
fSksCi8qIDEzNCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CgoJX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpOwoJdmFyICRPYmplY3QgPSBf
X3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5PYmplY3Q7Cgltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
IGdldE93blByb3BlcnR5TmFtZXMoaXQpIHsKCSAgcmV0dXJuICRPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcyhpdCk7Cgl9OwoKCi8qKiovIH0pLAovKiAxMzUgKi8KLyoqKi8gKGZ1bmN0aW9uKG1v
ZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8vIDE5LjEuMi43IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pCglfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KSgnZ2V0T3du
UHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJl
X18oOTIpLmY7Cgl9KTsKCgovKioqLyB9KSwKLyogMTM2ICovCi8qKiovIChmdW5jdGlvbihtb2R1
bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvKioKCSAqIEBsaWNlbnNlCgkg
KiBDb3B5cmlnaHQgMjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoJICoKCSAq
IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj
ZW5zZSIpOwoJICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j
ZSB3aXRoIHRoZSBMaWNlbnNlLgoJICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNl
bnNlIGF0CgkgKgoJICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF
LTIuMAoJICoKCSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg
dG8gaW4gd3JpdGluZywgc29mdHdhcmUKCSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl
IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCgkgKiBXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
CSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw
ZXJtaXNzaW9ucyBhbmQKCSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoJICovCgkn
dXNlIHN0cmljdCc7CgoJdmFyIF9jbGFzc0NhbGxDaGVjazIgPSBfX3dlYnBhY2tfcmVxdWlyZV9f
KDEwMSk7CgoJdmFyIF9jbGFzc0NhbGxDaGVjazMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9j
bGFzc0NhbGxDaGVjazIpOwoKCXZhciBfY3JlYXRlQ2xhc3MyID0gX193ZWJwYWNrX3JlcXVpcmVf
XygxMDIpOwoKCXZhciBfY3JlYXRlQ2xhc3MzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3Jl
YXRlQ2xhc3MyKTsKCglmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1
cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKCXZh
ciBfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpOwoJdmFyIHNlcmlhbGl6ZSA9IF9fd2VicGFj
a19yZXF1aXJlX18oMTI4KTsKCXZhciBkZWZhdWx0UmVnaXN0cnkgPSBzZXJpYWxpemUucmVnaXN0
cnk7CgoJZnVuY3Rpb24gbm9vcCgpIHt9CglmdW5jdGlvbiB0cnVlRigpIHsKCSAgcmV0dXJuIHRy
dWU7Cgl9CglmdW5jdGlvbiBmYWxzZUYoKSB7CgkgIHJldHVybiBmYWxzZTsKCX0KCgl2YXIgVmlz
aXRvciA9IGZ1bmN0aW9uICgpIHsKCSAgKDAsIF9jcmVhdGVDbGFzczMuZGVmYXVsdCkoVmlzaXRv
ciwgbnVsbCwgW3sKCSAgICBrZXk6ICdub29wJywKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsK
CSAgICAgIHJldHVybiBub29wOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogJ3RydWVGJywKCSAg
ICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0cnVlRjsKCSAgICB9CgkgIH0s
IHsKCSAgICBrZXk6ICdmYWxzZUYnLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAg
cmV0dXJuIGZhbHNlRjsKCSAgICB9CgkgIH1dKTsKCgkgIGZ1bmN0aW9uIFZpc2l0b3Iob3B0cykg
ewoJICAgICgwLCBfY2xhc3NDYWxsQ2hlY2szLmRlZmF1bHQpKHRoaXMsIFZpc2l0b3IpOwoKCSAg
ICB0aGlzLmluaXQob3B0cyB8fCB7fSk7CgkgIH0KCgkgICgwLCBfY3JlYXRlQ2xhc3MzLmRlZmF1
bHQpKFZpc2l0b3IsIFt7CgkgICAga2V5OiAnaW5pdCcsCgkgICAgdmFsdWU6IGZ1bmN0aW9uIGlu
aXQob3B0cykgewoJICAgICAgdGhpcy5zaG91bGRWaXNpdE5vZGUgPSBvcHRzLnNob3VsZFZpc2l0
Tm9kZSB8fCBmYWxzZUY7CgkgICAgICB0aGlzLnNob3VsZFZpc2l0VHJlZSA9IG9wdHMuc2hvdWxk
VmlzaXRUcmVlIHx8IGZhbHNlRjsKCSAgICAgIHRoaXMudmlzaXQgPSBvcHRzLnZpc2l0IHx8IG5v
b3A7CgkgICAgICB0aGlzLnJlZ2lzdHJ5ID0gb3B0cy5yZWdpc3RyeSB8fCBkZWZhdWx0UmVnaXN0
cnk7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAndmlzaXROb2RlJywKCSAgICB2YWx1ZTogZnVu
Y3Rpb24gdmlzaXROb2RlKG5vZGUpIHsKCSAgICAgIGlmICghdGhpcy5zaG91bGRWaXNpdE5vZGUo
bm9kZSkpIHJldHVybjsKCSAgICAgIHRoaXMudmlzaXQobm9kZSk7CgkgICAgfQoJICB9LCB7Cgkg
ICAga2V5OiAndmlzaXRUcmVlJywKCSAgICB2YWx1ZTogZnVuY3Rpb24gdmlzaXRUcmVlKHJvb3Qp
IHsKCSAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgoJICAgICAgaWYgKCF0aGlzLnNob3VsZFZpc2l0
VHJlZShyb290KSkgcmV0dXJuOwoJICAgICAgdGhpcy52aXNpdE5vZGUocm9vdCk7CgkgICAgICBf
LmZvck93bihyb290LCBmdW5jdGlvbiAobm9kZSkgewoJICAgICAgICByZXR1cm4gX3RoaXMudmlz
aXRUcmVlKG5vZGUpOwoJICAgICAgfSk7CgkgICAgfQoJICB9XSk7CgkgIHJldHVybiBWaXNpdG9y
OwoJfSgpOwoKCW1vZHVsZS5leHBvcnRzID0gVmlzaXRvcjsKCi8qKiovIH0pLAovKiAxMzcgKi8K
LyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoK
CS8qKgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW
ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3UgbWF5IG9idGFp
biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
CSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgX2NsYXNzQ2FsbENoZWNrMiA9
IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTsKCgl2YXIgX2NsYXNzQ2FsbENoZWNrMyA9IF9pbnRl
cm9wUmVxdWlyZURlZmF1bHQoX2NsYXNzQ2FsbENoZWNrMik7CgoJdmFyIF9jcmVhdGVDbGFzczIg
PSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMik7CgoJdmFyIF9jcmVhdGVDbGFzczMgPSBfaW50ZXJv
cFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVDbGFzczIpOwoKCWZ1bmN0aW9uIF9pbnRlcm9wUmVxdWly
ZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRl
ZmF1bHQ6IG9iaiB9OyB9CgoJdmFyIF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7Cgl2YXIg
VmlzaXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oMTM2KTsKCXZhciBzZXJpYWxpemUgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKDEyOCk7Cgl2YXIgZGVmYXVsdFJlZ2lzdHJ5ID0gc2VyaWFsaXplLnJl
Z2lzdHJ5OwoKCXZhciBWaXNpdG9yR2VuZXJhdG9yID0gZnVuY3Rpb24gKCkgewoJICBmdW5jdGlv
biBWaXNpdG9yR2VuZXJhdG9yKHJlZ2lzdHJ5KSB7CgkgICAgKDAsIF9jbGFzc0NhbGxDaGVjazMu
ZGVmYXVsdCkodGhpcywgVmlzaXRvckdlbmVyYXRvcik7CgoJICAgIHRoaXMucmVnaXN0cnkgPSBy
ZWdpc3RyeSB8fCBkZWZhdWx0UmVnaXN0cnk7CgkgIH0KCgkgICgwLCBfY3JlYXRlQ2xhc3MzLmRl
ZmF1bHQpKFZpc2l0b3JHZW5lcmF0b3IsIFt7CgkgICAga2V5OiAnZ2VuZXJhdGUnLAoJICAgIHZh
bHVlOiBmdW5jdGlvbiBnZW5lcmF0ZShDdG9yKSB7CgkgICAgICB2YXIgdmlzaXQgPSBDdG9yLnBy
b3RvdHlwZS52aXNpdDsKCSAgICAgIHZhciB0eXBlcyA9IFtdOwoKCSAgICAgIF8uZWFjaE93bihD
dG9yLnByb3RvdHlwZSwgZnVuY3Rpb24gKG1lbWJlcikgewoJICAgICAgICBpZiAodHlwZW9mIG1l
bWJlciAhPT0gJ2Z1bmN0aW9uJyB8fCAhbWVtYmVyLm5hbWUubWF0Y2goL152aXNpdFtBLVpdW0Et
WmEtel9dKiQvKSkgcmV0dXJuOwoJICAgICAgICB0eXBlcy5wdXNoKG1lbWJlci5uYW1lLnN1YnN0
cigndmlzaXQnLmxlbmd0aCkpOwoJICAgICAgfSk7CgoJICAgICAgdmFyIHNob3VsZFZpc2l0Tm9k
ZSA9IGZ1bmN0aW9uIHNob3VsZFZpc2l0Tm9kZShub2RlKSB7CgkgICAgICAgIHZhciBfdGhpcyA9
IHRoaXM7CgoJICAgICAgICB0eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlTmFtZSkgewoJICAg
ICAgICAgIHZhciBDdG9yID0gX3RoaXMucmVnaXN0cnkubG9va3VwKHR5cGVOYW1lKTsKCSAgICAg
ICAgICBpZiAoIUN0b3IpIHJldHVybjsKCSAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEN0
b3IpIF90aGlzLnZpc2l0KG5vZGUpOwoJICAgICAgICB9KTsKCSAgICAgIH07CgoJICAgICAgcmV0
dXJuIG5ldyBWaXNpdG9yKHsKCSAgICAgICAgc2hvdWxkVmlzaXRUcmVlOiBWaXNpdG9yLnRydWVG
LAoJICAgICAgICByZWdpc3RyeTogdGhpcy5yZWdpc3RyeSwKCSAgICAgICAgc2hvdWxkVmlzaXRO
b2RlOiBzaG91bGRWaXNpdE5vZGUsCgkgICAgICAgIHZpc2l0OiB2aXNpdAoJICAgICAgfSk7Cgkg
ICAgfQoJICB9XSk7CgkgIHJldHVybiBWaXNpdG9yR2VuZXJhdG9yOwoJfSgpOwoKCW1vZHVsZS5l
eHBvcnRzID0gVmlzaXRvckdlbmVyYXRvcjsKCi8qKiovIH0pLAovKiAxMzggKi8sCi8qIDEzOSAq
LwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7
CgoJbW9kdWxlLmV4cG9ydHMgPSB7ICJkZWZhdWx0IjogX193ZWJwYWNrX3JlcXVpcmVfXygxNDAp
LCBfX2VzTW9kdWxlOiB0cnVlIH07CgovKioqLyB9KSwKLyogMTQwICovCi8qKiovIChmdW5jdGlv
bihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgl2YXIgY29yZSA9IF9f
d2VicGFja19yZXF1aXJlX18oMTIpOwoJdmFyICRKU09OID0gY29yZS5KU09OIHx8IChjb3JlLkpT
T04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfSk7Cgltb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uIHN0cmluZ2lmeShpdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12
YXJzCgkgIHJldHVybiAkSlNPTi5zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3VtZW50cyk7Cgl9
OwoKCi8qKiovIH0pLAovKiAxNDEgKi8sCi8qIDE0MiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxl
LCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJInVzZSBzdHJpY3QiOwoKCWV4cG9y
dHMuX19lc01vZHVsZSA9IHRydWU7CgoJdmFyIF9kZWZpbmVQcm9wZXJ0eSA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTAzKTsKCgl2YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURl
ZmF1bHQoX2RlZmluZVByb3BlcnR5KTsKCglmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0
KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBv
YmogfTsgfQoKCWV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHsK
CSAgaWYgKGtleSBpbiBvYmopIHsKCSAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KShv
YmosIGtleSwgewoJICAgICAgdmFsdWU6IHZhbHVlLAoJICAgICAgZW51bWVyYWJsZTogdHJ1ZSwK
CSAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKCSAgICAgIHdyaXRhYmxlOiB0cnVlCgkgICAgfSk7
CgkgIH0gZWxzZSB7CgkgICAgb2JqW2tleV0gPSB2YWx1ZTsKCSAgfQoKCSAgcmV0dXJuIG9iajsK
CX07CgovKioqLyB9KSwKLyogMTQzICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMs
IF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvKioKCSAqIEBsaWNlbnNlCgkgKiBDb3B5cmlnaHQg
MjAxNiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgoJICoKCSAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwoJICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgoJICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgkgKgoJ
ICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoJICoKCSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKCSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCgkgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KCSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKCSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoJICovCgkndXNlIHN0cmljdCc7
CgoJbW9kdWxlLmV4cG9ydHMgPSB7CgkgIE5hbWVSZXdyaXRlcjogX193ZWJwYWNrX3JlcXVpcmVf
XygxNDQpLAoJICBUYXNrUXVldWU6IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KSwKCSAgT2JqZWN0
R3JhcGg6IF9fd2VicGFja19yZXF1aXJlX18oMTQ3KSwKCSAgQnJvd3Nlck9iamVjdEdyYXBoOiBf
X3dlYnBhY2tfcmVxdWlyZV9fKDE1MiksCgkgIGFuYWx5c2lzOiBfX3dlYnBhY2tfcmVxdWlyZV9f
KDE1MyksCgl9OwoKCi8qKiovIH0pLAovKiAxNDQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwg
ZXhwb3J0cykgewoKCS8qKgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVp
cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJ
ICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT
IElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0
aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRh
dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgTmFtZVJl
d3JpdGVyID0gZnVuY3Rpb24ob3B0cykgewoJICBvcHRzID0gb3B0cyB8fCB7fTsKCSAgdGhpcy5y
ZXdyaXRlcyA9IG9wdHMucmV3cml0ZXMgfHwKCSAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
bWVzKE9iamVjdC5wcm90b3R5cGUpLm1hcChmdW5jdGlvbihuYW1lKSB7CgkgICAgICAgIHJldHVy
biBbIG5hbWUsICcrJyArIG5hbWUgKyAnKycgXTsKCSAgICAgIH0pOwoJICB0aGlzLmJyb3dzZXJz
ID0gb3B0cy5icm93c2VycyB8fCB0aGlzLmJyb3dzZXJzLnNsaWNlKCk7CgkgIHRoaXMucGxhdGZv
cm1zID0gb3B0cy5wbGF0Zm9ybXMgfHwgdGhpcy5wbGF0Zm9ybXMuc2xpY2UoKTsKCX07CgoJLy8g
U29tZSB1c2VyIGFnZW50cyB3aWxsIG1hdGNoIG11bHRpcGxlIHBhdHRlcm5zLiBUaGUgZmlyc3Qg
bWF0Y2ggd2lsbCBiZSB1c2VkLAoJLy8gc28gdGhlIG9yZGVyIGlzIGltcG9ydGFudC4gKENocm9t
aXVtLWJhc2VkIGJyb3dzZXJzIGJlZm9yZSBDaHJvbWUsIGV0Yy4pCglOYW1lUmV3cml0ZXIucHJv
dG90eXBlLmJyb3dzZXJzID0gWwoJICB7CgkgICAgbmFtZTogJ0NvY0NvYycsCgkgICAgcmU6IC8o
Y29jX2NvY19icm93c2VyKVwvKFswLTlfLl0rKS8sCgkgIH0sCgkgIHsKCSAgICBuYW1lOiAnRWRn
ZScsCgkgICAgcmU6IC8oRWRnZSlcLyhbMC05Xy5dKykvLAoJICB9LAoJICB7CgkgICAgbmFtZTog
J1FRJywKCSAgICByZTogLyhNP1FRQnJvd3NlcilcLyhbMC05Xy5dKykvLAoJICB9LAoJICB7Cgkg
ICAgbmFtZTogJ1VDJywKCSAgICByZTogLyhVQz9Ccm93c2VyKVwvKFswLTlfLl0rKS8sCgkgIH0s
CgkgIHsKCSAgICBuYW1lOiAnWWFuZGV4JywKCSAgICByZTogLyhZYUJyb3dzZXIpXC8oWzAtOV8u
XSspLywKCSAgfSwKCSAgewoJICAgIG5hbWU6ICdPcGVyYScsCgkgICAgcmU6IC8oT1BSKVwvKFsw
LTlfLl0rKS8sCgkgIH0sCgkgIHsKCSAgICBuYW1lOiAnU2Ftc3VuZycsCgkgICAgcmU6IC8oU2Ft
c3VuZ0Jyb3dzZXIpXC8oWzAtOV8uXSspLywKCSAgfSwKCSAgewoJICAgIG5hbWU6ICdGaXJlZm94
JywKCSAgICByZTogLyhGaXJlZm94fEZ4aU9TKVwvKFswLTlfLl0rKS8sCgkgIH0sCgkgIHsKCSAg
ICBuYW1lOiAnQ2hyb21lJywKCSAgICByZTogLyhDaHJvbWV8Q3JpT1MpXC8oWzAtOV8uXSspLywK
CSAgfSwKCSAgewoJICAgIG5hbWU6ICdTYWZhcmknLAoJICAgIHJlOiAvKFZlcnNpb24pXC8oWzAt
OV8uXSspLiooU2FmYXJpKVwvKFswLTlfLl0rKS8sCgkgIH0sCgkgIHsKCSAgICBuYW1lOiAnSUUn
LAoJICAgIHJlOiAvKE1TSUUpIChbMC05Xy5dKykvLAoJICB9LAoJICB7CgkgICAgbmFtZTogJ0lF
JywKCSAgICByZTogLyhUcmlkZW50KS4qcnY6KFswLTlfLl0rKS8sCgkgIH0sCgldOwoKCU5hbWVS
ZXdyaXRlci5wcm90b3R5cGUucGxhdGZvcm1zID0gWwoJICB7CgkgICAgbmFtZTogJ2lQaG9uZScs
CgkgICAgcmU6IC8oaVBob25lKSBPUyAoWzAtOV8uXSspLywKCSAgfSwKCSAgewoJICAgIG5hbWU6
ICdpUGFkJywKCSAgICByZTogLyhpUGFkKVteMC05XSooWzAtOV8uXSspLywKCSAgfSwKCSAgewoJ
ICAgIG5hbWU6ICdBbmRyb2lkJywKCSAgICByZTogLyhBbmRyb2lkKSAoWzAtOV8uXSspLywKCSAg
fSwKCSAgewoJICAgIG5hbWU6ICdPU1gnLAoJICAgIHJlOiAvKE9TIFgpIChbMC05Xy5dKykvLAoJ
ICB9LAoJICB7CgkgICAgbmFtZTogJ1dpbmRvd3MnLAoJICAgIHJlOiAvKFdpbmRvd3MpIE5UIChb
MC05Xy5dKykvLAoJICB9LAoJICB7CgkgICAgbmFtZTogJ0xpbnV4JywKCSAgICByZTogLyhMaW51
eCkgKFtBLVphLXowLTlfLl0rKS8sCgkgIH0sCgldOwoKCU5hbWVSZXdyaXRlci5wcm90b3R5cGUu
cmV3cml0ZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7CgkgIGZvciAoIHZhciBpID0gMDsgaSA8IHRo
aXMucmV3cml0ZXMubGVuZ3RoOyBpKysgKSB7CgkgICAgaWYgKCBuYW1lID09PSB0aGlzLnJld3Jp
dGVzW2ldWzBdICkgcmV0dXJuIHRoaXMucmV3cml0ZXNbaV1bMV07CgkgIH0KCSAgcmV0dXJuIG5h
bWU7Cgl9OwoKCU5hbWVSZXdyaXRlci5wcm90b3R5cGUudW5yZXdyaXRlTmFtZSA9IGZ1bmN0aW9u
KG5hbWUpIHsKCSAgZm9yICggdmFyIGkgPSAwOyBpIDwgdGhpcy5yZXdyaXRlcy5sZW5ndGg7IGkr
KyApIHsKCSAgICBpZiAoIG5hbWUgPT09IHRoaXMucmV3cml0ZXNbaV1bMV0gKSByZXR1cm4gdGhp
cy5yZXdyaXRlc1tpXVswXTsKCSAgfQoJICByZXR1cm4gbmFtZTsKCX07CgoJTmFtZVJld3JpdGVy
LnByb3RvdHlwZS51c2VyQWdlbnRBc1BsYXRmb3JtSW5mbyA9IGZ1bmN0aW9uKHVhU3RyKSB7Cgkg
IGZ1bmN0aW9uIGZpbmRNYXRjaChtYXRjaGVycykgewoJICAgIGZvciAoIHZhciBpID0gMDsgaSA8
IG1hdGNoZXJzLmxlbmd0aDsgaSsrICkgewoJICAgICAgdmFyIG1hdGNoZXIgPSBtYXRjaGVyc1tp
XTsKCSAgICAgIHZhciBtYXRjaDsKCSAgICAgIGlmICggKCBtYXRjaCA9IHVhU3RyLm1hdGNoKG1h
dGNoZXIucmUpICkgIT09IG51bGwgKQoJICAgICAgcmV0dXJuIHsKCSAgICAgICAgbmFtZTogbWF0
Y2hlci5uYW1lLAoJICAgICAgICB2ZXJzaW9uOiBtYXRjaFsyXS5yZXBsYWNlKC9fL2csICcuJyks
CgkgICAgICB9OwoJICAgIH0KCSAgICByZXR1cm4gbnVsbDsKCSAgfQoJICByZXR1cm4gewoJICAg
IGJyb3dzZXI6IGZpbmRNYXRjaCh0aGlzLmJyb3dzZXJzKSwKCSAgICBwbGF0Zm9ybTogZmluZE1h
dGNoKHRoaXMucGxhdGZvcm1zKSwKCSAgfTsKCX07CgoJbW9kdWxlLmV4cG9ydHMgPSBOYW1lUmV3
cml0ZXI7CgoKLyoqKi8gfSksCi8qIDE0NSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBv
cnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLyoqCgkgKiBAbGljZW5zZQoJICogQ29weXJp
Z2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCSAqCgkgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
CSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KCSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoJ
ICoKCSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCSAq
CgkgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy
aXRpbmcsIHNvZnR3YXJlCgkgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0
cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAoJICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP
TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCgkgKiBTZWUg
dGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lv
bnMgYW5kCgkgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCSAqLwoJJ3VzZSBzdHJp
Y3QnOwoKCXZhciBmYWNhZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nik7CgoJLy8gVmVyeSBz
aW1wbGUgYXN5bmMgdGFzayBxdWV1ZS4KCXZhciBUYXNrUXVldWUgPSBmdW5jdGlvbihvcHRzKSB7
CgkgIG9wdHMgPSBvcHRzIHx8IHt9OwoJICB0aGlzLnEgPSBbXTsKCSAgdGhpcy5tYXhEZXF1ZXVl
U2l6ZSA9IG9wdHMubWF4RGVxdWV1ZVNpemUgfHwgdGhpcy5tYXhEZXF1ZXVlU2l6ZTsKCSAgdGhp
cy5vblRpY2sgPSBvcHRzLm9uVGljayB8fCB0aGlzLm9uVGljazsKCSAgdGhpcy5vbkRvbmUgPSBv
cHRzLm9uRG9uZSB8fCB0aGlzLm9uRG9uZTsKCX07CgoJLy8gTnVtYmVyIG9mIHF1ZXVlZCBmdW5j
dGlvbnMgdG8gcnVuIGJlZm9yZSBhbGxvd2luZyBhc3luYyB0aWNrLgoJVGFza1F1ZXVlLnByb3Rv
dHlwZS5tYXhEZXF1ZXVlU2l6ZSA9IDEwOwoJLy8gU2luZ2xldG9uIGxpc3RlbmVycyBmb3IgcXVl
dWUtZnVsbHktZmx1c2hlZCBhbmQgYXN5bmMtdGljay4KCVRhc2tRdWV1ZS5wcm90b3R5cGUub25E
b25lID0gVGFza1F1ZXVlLnByb3RvdHlwZS5vblRpY2sgPSBmdW5jdGlvbigpIHt9OwoKCVRhc2tR
dWV1ZS5wcm90b3R5cGUuYXN5bmMgPSBmdW5jdGlvbihmKSB7CgkgIHdpbmRvdy5zZXRUaW1lb3V0
KGYsIDApOwoJfTsKCgkvLyBFbnF1ZXVlIGEgbnVtYmVyIG9mIHRhc2tzLgoJVGFza1F1ZXVlLnBy
b3RvdHlwZS5lbnF1ZXVlID0gZnVuY3Rpb24oLyogZnMgKi8pIHsKCSAgZm9yICggdmFyIGkgPSAw
OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgewoJICAgIHRoaXMucS5wdXNoKGFyZ3VtZW50
c1tpXSk7CgkgIH0KCX07CgoJLy8gRmx1c2ggYXQgbW9zdCB0aGlzLm1heERlcXVldWVTaXplIHRh
c2tzLgoJVGFza1F1ZXVlLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKCkgewoJICB0aGlzLm9u
VGljaygpOwoJICBmb3IgKCB2YXIgaSA9IDA7IGkgPCB0aGlzLm1heERlcXVldWVTaXplICYmIHRo
aXMucS5sZW5ndGggPiAwOyBpKysgKSB7CgkgICAgdmFyIGYgPSB0aGlzLnEuc2hpZnQoKTsKCSAg
ICBmKCk7CgkgIH0KCSAgaWYgKCB0aGlzLnEubGVuZ3RoID4gMCApIHRoaXMuYXN5bmModGhpcy5m
bHVzaC5iaW5kKHRoaXMpKTsKCSAgZWxzZSAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Eb25l
KCk7Cgl9OwoKCS8vIFJldHVybiBpZiB0aGUgdGFzayBxdWV1ZSBpcyBlbXB0eS4KCVRhc2tRdWV1
ZS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbigpIHsKCSAgcmV0dXJuIHRoaXMucS5sZW5ndGgg
PT09IDA7Cgl9OwoKCW1vZHVsZS5leHBvcnRzID0gZmFjYWRlKFRhc2tRdWV1ZSwgewoJICBwcm9w
ZXJ0aWVzOiBbICdtYXhEZXF1ZXVlU2l6ZScsICdvblRpY2snLCAnb25Eb25lJyBdLAoJICBtZXRo
b2RzOiB7IGVucXVldWU6IDEsIGZsdXNoOiAxLCBlbXB0eTogMSB9LAoJfSk7CgoKLyoqKi8gfSks
Ci8qIDE0NiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CgoJLyoqCgkgKiBA
bGljZW5zZQoJICogQ29weXJpZ2h0IDIwMTYgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KCSAqCgkgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w
ICh0aGUgIkxpY2Vuc2UiKTsKCSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu
IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KCSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBv
ZiB0aGUgTGljZW5zZSBhdAoJICoKCSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKCSAqCgkgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCgkgKiBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAoJICogV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCgkgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCgkgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KCSAqLwoJJ3VzZSBzdHJpY3QnOwoKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmFjYWRl
KGN0b3IsIG9wdHMpIHsKCSAgdmFyIGZhY3RvcnkgPSBmdW5jdGlvbihvKSB7CgkgICAgdGhpcy5f
ID0gbzsKCSAgICB2YXIgaTsKCgkgICAgaWYgKCBvcHRzLnByb3BlcnRpZXMgKSB7CgkgICAgICBm
b3IgKCBpID0gMDsgaSA8IG9wdHMucHJvcGVydGllcy5sZW5ndGg7IGkrKyApIHsKCSAgICAgICAg
KGZ1bmN0aW9uKG5hbWUpIHsKCSAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywg
bmFtZSwgewoJICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX1tuYW1l
XTsgfSwKCSAgICAgICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHRoaXMuX1tu
YW1lXSA9IHZhbHVlOyB9LAoJICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKCSAgICAgICAg
ICB9KTsKCSAgICAgICAgfS5iaW5kKHRoaXMpKShvcHRzLnByb3BlcnRpZXNbaV0pOwoJICAgICAg
fQoJICAgIH0KCSAgICBpZiAoIG9wdHMubWV0aG9kcyApIHsKCSAgICAgIGtleXMgPSBPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyhvcHRzLm1ldGhvZHMpOwoJICAgICAgZm9yICggaSA9IDA7IGkg
PCBrZXlzLmxlbmd0aDsgaSsrICkgewoJICAgICAgICB0aGlzW2tleXNbaV1dID0gdGhpc1trZXlz
W2ldXS5iaW5kKHRoaXMpOwoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXM7CgkgIH07
CgoJICB2YXIgQ3RvciA9IGZ1bmN0aW9uKCkgewoJICAgIGZhY3RvcnkuY2FsbCh0aGlzLCBPYmpl
Y3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKSk7CgoJICAgIGN0b3IuYXBwbHkodGhpcy5fLCBhcmd1
bWVudHMpOwoJICB9OwoKCSAgdmFyIGtleXMsIGk7CgoJICBpZiAoIG9wdHMubWV0aG9kcyApIHsK
CSAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0cy5tZXRob2RzKTsKCSAg
ICBmb3IgKCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKysgKSB7CgkgICAgICAoZnVuY3Rpb24o
a2V5KSB7CgkgICAgICAgIGlmICggdHlwZW9mIG9wdHMubWV0aG9kc1trZXldICE9PSAnZnVuY3Rp
b24nICkgewoJICAgICAgICAgIEN0b3IucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbigpIHsKCSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9ba2V5XS5hcHBseSh0aGlzLl8sIGFyZ3VtZW50cyk7Cgkg
ICAgICAgICAgfTsKCSAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICBDdG9yLnByb3RvdHlwZVtr
ZXldID0gZnVuY3Rpb24oKSB7CgkgICAgICAgICAgICByZXR1cm4gb3B0cy5tZXRob2RzW2tleV0u
YXBwbHkodGhpcy5fLCBhcmd1bWVudHMpOwoJICAgICAgICAgIH07CgkgICAgICAgIH0KCSAgICAg
IH0pKGtleXNbaV0pOwoJICAgIH0KCSAgfQoKCSAgaWYgKCBvcHRzLmNsYXNzRm5zKSB7CgkgICAg
a2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdHMuY2xhc3NGbnMpOwoJICAgIGZv
ciAoIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyApIHsKCSAgICAgIChmdW5jdGlvbihrZXkp
IHsKCSAgICAgICAgaWYgKCB0eXBlb2Ygb3B0cy5jbGFzc0Zuc1trZXldID09PSAnZnVuY3Rpb24n
ICkgewoJICAgICAgICAgIEN0b3Jba2V5XSA9IGZ1bmN0aW9uKCkgewoJICAgICAgICAgICAgcmV0
dXJuIG9wdHMuY2xhc3NGbnNba2V5XS5hcHBseShjdG9yLCBhcmd1bWVudHMpOwoJICAgICAgICAg
IH07CgkgICAgICAgIH0gZWxzZSBpZiAoIG9wdHMuY2xhc3NGbnNba2V5XSA9PT0gJ2ZhY3Rvcnkn
ICkgewoJICAgICAgICAgIEN0b3Jba2V5XSA9IGZ1bmN0aW9uKCkgewoJICAgICAgICAgICAgcmV0
dXJuIGZhY3RvcnkuY2FsbChPYmplY3QuY3JlYXRlKEN0b3IucHJvdG90eXBlKSwKCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3RvcltrZXldLmFwcGx5KGN0b3IsIGFyZ3VtZW50cykp
OwoJICAgICAgICAgIH07CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgQ3RvcltrZXldID0g
ZnVuY3Rpb24oKSB7CgkgICAgICAgICAgICByZXR1cm4gY3RvcltrZXldLmFwcGx5KGN0b3IsIGFy
Z3VtZW50cyk7CgkgICAgICAgICAgfTsKCSAgICAgICAgfQoJICAgICAgfSkoa2V5c1tpXSk7Cgkg
ICAgfQoJICB9CgoJICByZXR1cm4gQ3RvcjsKCX07CgoKLyoqKi8gfSksCi8qIDE0NyAqLwovKioq
LyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLyog
V0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qKgoJICogQGxpY2Vu
c2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkg
KgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkg
Ki8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgX2Fzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oOTcp
OwoKCXZhciBfYXNzaWduMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Fzc2lnbik7CgoJdmFy
IF9nZXRJdGVyYXRvcjIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTsKCgl2YXIgX2dldEl0ZXJh
dG9yMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2dldEl0ZXJhdG9yMik7CgoJdmFyIF9nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OCk7CgoJdmFyIF9n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKTsKCgl2YXIgX2dldE93blByb3BlcnR5TmFtZXMgPSBfX3dlYnBh
Y2tfcmVxdWlyZV9fKDEzMyk7CgoJdmFyIF9nZXRPd25Qcm9wZXJ0eU5hbWVzMiA9IF9pbnRlcm9w
UmVxdWlyZURlZmF1bHQoX2dldE93blByb3BlcnR5TmFtZXMpOwoKCXZhciBfa2V5cyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNzUpOwoKCXZhciBfa2V5czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0
KF9rZXlzKTsKCgl2YXIgX3R5cGVvZjIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTsKCgl2YXIg
X3R5cGVvZjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90eXBlb2YyKTsKCglmdW5jdGlvbiBf
aW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxl
ID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKCXZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWly
ZV9fKDE1MSkoKTsKCXZhciBzdGRsaWIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7Cgl2YXIg
cmVtYXAgPSBzdGRsaWIucmVtYXA7Cgl2YXIgTmFtZVJld3JpdGVyID0gX193ZWJwYWNrX3JlcXVp
cmVfXygxNDQpOwoJdmFyIFRhc2tRdWV1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTsKCXZh
ciBlbXB0eUFycmF5ID0gW107CgoJLy8gT2JqZWN0IGlkZW50aXR5IGFuZC9vciBwcmltaXRpdmUg
dHlwZSBkYXRhIHN0b3JhZ2UuCglmdW5jdGlvbiBPYmplY3RHcmFwaChvcHRzKSB7CgkgIG9wdHMg
PSBvcHRzIHx8IHt9OwoJICB0aGlzLmluaXQob3B0cyk7Cgl9OwoKCWZ1bmN0aW9uIGNsb25lRGVl
cChvYmopIHsKCSAgaWYgKCh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQn
IDogKDAsIF90eXBlb2YzLmRlZmF1bHQpKG9iaikpICE9PSAnb2JqZWN0JykgewoJICAgIHJldHVy
biBvYmo7CgkgIH0KCSAgdmFyIG5ld09iamVjdCA9IHt9OwoJICB2YXIgcHJvcGVydGllcyA9ICgw
LCBfa2V5czIuZGVmYXVsdCkob2JqKTsKCSAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVz
Lmxlbmd0aDsgaSsrKSB7CgkgICAgbmV3T2JqZWN0W3Byb3BlcnRpZXNbaV1dID0gY2xvbmVEZWVw
KG9ialtwcm9wZXJ0aWVzW2ldXSk7CgkgIH0KCSAgcmV0dXJuIG5ld09iamVjdDsKCX07CgoJT2Jq
ZWN0R3JhcGgucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAob3B0cykgewoJICB0aGlzLnEgPSBu
ZXcgVGFza1F1ZXVlKG9wdHMpOwoJICAvLyBUT0RPOiBtYWtlIGluc3RhbmNlIGV4cGxvcmVyIGlu
dG8gYSBwbHVnaW4gb3IgZXh0ZW5zaW9uLgoJICB0aGlzLmluc3RhbmNlUXVldWUgPSBuZXcgVGFz
a1F1ZXVlKCk7CgkgIHRoaXMuYnVzeSA9IGZhbHNlOwoJICB0aGlzLmJsYWNrbGlzdGVkT2JqZWN0
cyA9IG9wdHMuYmxhY2tsaXN0ZWRPYmplY3RzIHx8IHRoaXMuYmxhY2tsaXN0ZWRPYmplY3RzLnNs
aWNlKCk7CgkgIHRoaXMubmFtZVJld3JpdGVyID0gb3B0cy5uYW1lUmV3cml0ZXIgfHwgbmV3IE5h
bWVSZXdyaXRlcigpOwoJICB0aGlzLmtleXNDYWNoZSA9IG9wdHMua2V5c0NhY2hlIHx8IHt9OwoK
CSAgLy8gVHJ5IHRvIHByZXZlbnQgcmVjdXJzaW9uIGludG8gaW50ZXJuYWwgc3RydWN0dXJlcy4K
CSAgdGhpcy5ibGFja2xpc3RlZE9iamVjdHMucHVzaCh0aGlzKTsKCgkgIC8vIE5vIGRlZmF1bHQg
dXNlckFnZW50IG9yIGVudmlyb25tZW50LgoJICB0aGlzLnVzZXJBZ2VudCA9IG51bGw7CgkgIHRo
aXMuZW52aXJvbm1lbnQgPSBudWxsOwoJfTsKCgkvLyBNYXAgb2YgcHJpbWl0aXZlIHR5cGVzIChs
ZWF2ZXMgaW4gb2JqZWN0IGdyYXBoKS4KCS8vIE5PVEU6IEl0IG11c3QgYmUgaW1wb3NzaWJsZSBm
b3IgK1VJRHMgb2YgdmlzaXRlZCBvYmplY3RzIHRvIHRha2Ugb24gdGhlc2UKCS8vIHZhbHVlcy4K
CU9iamVjdEdyYXBoLnByb3RvdHlwZS5GSVJTVF9UWVBFID0gT2JqZWN0R3JhcGguRklSU1RfVFlQ
RSA9IDE7CglPYmplY3RHcmFwaC5wcm90b3R5cGUuTEFTVF9UWVBFID0gT2JqZWN0R3JhcGguTEFT
VF9UWVBFID0gNzsKCU9iamVjdEdyYXBoLnByb3RvdHlwZS50eXBlcyA9IE9iamVjdEdyYXBoLnR5
cGVzID0gewoJICAndW5kZWZpbmVkJzogMSwKCSAgJ2Jvb2xlYW4nOiAyLAoJICAnbnVtYmVyJzog
MywKCSAgJ3N0cmluZyc6IDQsCgkgICdzeW1ib2wnOiA1LAoJICAnbnVsbCc6IDYsCgkgICdleGNl
cHRpb24nOiA3Cgl9OwoKCS8vIE5ldmVyIHZpc2l0L3N0b3JlIHRoZXNlIG9iamVjdCBrZXlzLgoJ
T2JqZWN0R3JhcGgucHJvdG90eXBlLmJsYWNrbGlzdGVkS2V5cyA9IFt1aWQua2V5LCB1aWQua2V5
X18sICdfX3Byb3RvX18nLCAnJFVJRCcsIC8vICRVSUQgYW5kICRVSURfXyBhcmUgdW5pcXVlIGlk
cyBhc3NpZ25lZCBieSBGT0FNIEZyYW1ld29yay4KCSckVUlEX18nXTsKCS8vIE5ldmVyIHZpc2l0
L3N0b3JlIHRoZXNlIG9iamVjdHMuIERlZmF1bHRzIHRvIHNvbWUga25vd24gbmFtZXNwYWNlIHBv
bGx1dGVycwoJLy8gdGhhdCB3ZSByZWx5IG9uLgoJLy8gVE9ETzogRmlsZSBidWdzIGFnYWluc3Qg
b2ZmZW5kZXJzIQoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmJsYWNrbGlzdGVkT2JqZWN0cyA9IFsn
XycsIC8vIGxvZGFzaC4KCSdfX2NvcmUtanNfc2hhcmVkX18nLCAvLyBQYXJ0IG9mIGNvcmUtanMg
aW4gYmFiZWwtcnVudGltZS4KCSd3ZWJwYWNrSnNvbnBDYWxsYmFjaycsICd3ZWJwYWNrSnNvbnAn
LCAvLyBXZWJwYWNrIGdlbmVyYXRlZCBzY3JpcHRzLgoJJ2ZvYW0nLCAvLyBHbG9iYWwgb2JqZWN0
IGV4cG9zZWQgYnkgRk9BTSBGcmFtZXdvcmsuCgknY29tJ10ubWFwKGZ1bmN0aW9uIChrZXkpIHsK
CSAgcmV0dXJuIHRoaXNba2V5XTsKCX0uYmluZCh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVk
JyA/IGdsb2JhbCA6IHdpbmRvdykpLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsKCSAgcmV0dXJu
IHZhbHVlICE9PSB1bmRlZmluZWQ7Cgl9KTsKCU9iamVjdEdyYXBoLnByb3RvdHlwZS5ibGFja2xp
c3RlZFByb3BlcnRpZXMgPSBbCgkvLyBNaW1lVHlwZSdzIGVuYWJsZWRQbHVnaW4gd2lsbCByZXR1
cm4gYSBuZXcgTWltZVR5cGUgb2JqZWN0CgkvLyBpbiBDaHJvbWUgKHZlcnNpb248PTQyKSwgd2hp
Y2ggd2lsbCBjYXVzZSBhIGluZmluaXRlCgkvLyByZWN1cnNpb24gaW4gdGhlIG9iamVjdCBncmFw
aHMuCglbJ01pbWVUeXBlJywgJ2VuYWJsZWRQbHVnaW4nXV07CgoJT2JqZWN0R3JhcGguRlVOQ1RJ
T05fTkFNRV9SRUdfRVhQID0gL15mdW5jdGlvblxzKyhbQS1aYS16XyRdWzAtOUEtWmEtel8kXSop
XHMqXCgvOwoJT2JqZWN0R3JhcGguRlVOQ1RJT05fTkFNRV9SRUdfRVhQX01BVENIX05BTUVfSURY
ID0gMTsKCU9iamVjdEdyYXBoLk9CSkVDVF9DVE9SX1JFR19FWFAgPSAvXlxbb2JqZWN0IChbQS1a
YS16XyRdWzAtOUEtWmEtel8kXSopXF0kLzsKCU9iamVjdEdyYXBoLk9CSkVDVF9DVE9SX05BTUVf
TUFUQ0hfSURYID0gMTsKCU9iamVjdEdyYXBoLkNUT1JfU1VGRklYID0gJ0NvbnN0cnVjdG9yJzsK
CglPYmplY3RHcmFwaC5wcm90b3R5cGUuaW5pdExhenlEYXRhID0gZnVuY3Rpb24gKCkgewoJICB2
YXIgX3RoaXMgPSB0aGlzOwoKCSAgc3RkbGliLm1lbW8odGhpcywgJ2ludlR5cGVzJywgZnVuY3Rp
b24gKCkgewoJICAgIHZhciBpbnZUeXBlcyA9IHt9OwoJICAgIGZvciAodmFyIHR5cGUgaW4gX3Ro
aXMudHlwZXMpIHsKCSAgICAgIGlmIChfdGhpcy50eXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkg
ewoJICAgICAgICBpbnZUeXBlc1tfdGhpcy50eXBlc1t0eXBlXV0gPSB0eXBlOwoJICAgICAgfQoJ
ICAgIH0KCSAgICByZXR1cm4gaW52VHlwZXM7CgkgIH0pOwoJICBzdGRsaWIubWVtbyh0aGlzLCAn
aW52RGF0YScsIHJlbWFwWydhOmI6Yz0+YzpiOlthXSddLmJpbmQodGhpcywgdGhpcy5kYXRhKSk7
CgkgIHN0ZGxpYi5tZW1vKHRoaXMsICduYW1lZERhdGEnLCByZW1hcFsnYTpiOmM9PmI6WyhhLGMp
XSddLmJpbmQodGhpcywgdGhpcy5kYXRhKSk7CgkgIHN0ZGxpYi5tZW1vKHRoaXMsICdpbnZQcm90
b3MnLCByZW1hcFsnYTpiPT5iOlthXSddLmJpbmQodGhpcywgdGhpcy5wcm90b3MpKTsKCSAgc3Rk
bGliLm1lbW8odGhpcywgJ2FsbElkc18nLCB0aGlzLmdldEFsbElkc18uYmluZCh0aGlzKSk7Cgkg
IHN0ZGxpYi5tZW1vKHRoaXMsICdhbGxLZXlzXycsIHRoaXMuZ2V0QWxsS2V5c18uYmluZCh0aGlz
KSk7CgkgIHN0ZGxpYi5tZW1vKHRoaXMsICdhbGxLZXlzTWFwXycsIHRoaXMuZ2V0QWxsS2V5c01h
cF8uYmluZCh0aGlzKSk7CgoJICB0aGlzLmtleXNDYWNoZSA9IHt9OwoJfTsKCglPYmplY3RHcmFw
aC5wcm90b3R5cGUuc3RvcmVPYmplY3QgPSBmdW5jdGlvbiAoaWQpIHsKCSAgY29uc29sZS5hc3Nl
cnQoIXRoaXMuZGF0YVtpZF0sICdSZXBlYXRlZCBzdG9yZS1pZCcpOwoJICBjb25zb2xlLmFzc2Vy
dCh0eXBlb2YgaWQgPT09ICdudW1iZXInLCAnSWxsZWdhbCBvYmplY3QgaWQnKTsKCSAgdGhpcy5k
YXRhW2lkXSA9IHt9OwoJICByZXR1cm4gdGhpcy5kYXRhW2lkXTsKCX07CgoJT2JqZWN0R3JhcGgu
cHJvdG90eXBlLnN0b3JlTWV0YWRhdGEgPSBmdW5jdGlvbiAoaWQpIHsKCSAgY29uc29sZS5hc3Nl
cnQoIXRoaXMubWV0YWRhdGFbaWRdLCAnUmVwZWF0ZWQgc3RvcmUtbWV0YWRhdGEtaWQnKTsKCSAg
dGhpcy5tZXRhZGF0YVtpZF0gPSB7fTsKCSAgcmV0dXJuIHRoaXMubWV0YWRhdGFbaWRdOwoJfTsK
CglPYmplY3RHcmFwaC5wcm90b3R5cGUuc3RvcmVUb1N0cmluZyA9IGZ1bmN0aW9uIChvSWQsIG8p
IHsKCSAgY29uc29sZS5hc3NlcnQoIXRoaXMudG9TdHJpbmdzW29JZF0sICdSZXBlYXRlZCBzdG9y
ZS10b1N0cmluZycpOwoJICB0cnkgewoJICAgIHRoaXMudG9TdHJpbmdzW29JZF0gPSBvLnRvU3Ry
aW5nKCk7CgkgIH0gY2F0Y2ggKGUpIHt9Cgl9OwoKCU9iamVjdEdyYXBoLnByb3RvdHlwZS5zdG9y
ZVByb3RvID0gZnVuY3Rpb24gKG9JZCwgcHJvdG9JZCkgewoJICBjb25zb2xlLmFzc2VydCghdGhp
cy5wcm90b3Nbb0lkXSwgJ1JlcGVhdGVkIHN0b3JlLXByb3RvJyk7CgkgIHRoaXMucHJvdG9zW29J
ZF0gPSBwcm90b0lkOwoJfTsKCglPYmplY3RHcmFwaC5wcm90b3R5cGUuZ2V0TmFtZUZyb21Db25z
dHJ1Y3RvciA9IGZ1bmN0aW9uIChvKSB7CgkgIGlmIChvLm5hbWUpIHsKCSAgICByZXR1cm4gby5u
YW1lOwoJICB9CgoJICBpZiAoIW8udG9TdHJpbmcpIHsKCSAgICByZXR1cm4gJyc7CgkgIH0KCgkg
IHZhciB0b1N0cmluZyA9IG8udG9TdHJpbmcoKTsKCSAgdmFyIGZOYW1lTWF0Y2ggPSB0b1N0cmlu
Zy5tYXRjaChPYmplY3RHcmFwaC5GVU5DVElPTl9OQU1FX1JFR19FWFApOwoJICBpZiAoZk5hbWVN
YXRjaCAhPT0gbnVsbCkgewoJICAgIHJldHVybiBmTmFtZU1hdGNoW09iamVjdEdyYXBoLkZVTkNU
SU9OX05BTUVfUkVHX0VYUF9NQVRDSF9OQU1FX0lEWF07CgkgIH0KCgkgIHZhciBvTmFtZU1hdGNo
ID0gdG9TdHJpbmcubWF0Y2goT2JqZWN0R3JhcGguT0JKRUNUX0NUT1JfUkVHX0VYUCk7CgkgIGlm
IChvTmFtZU1hdGNoICE9PSBudWxsKSB7CgkgICAgdmFyIGZ1bGxOYW1lID0gb05hbWVNYXRjaFtP
YmplY3RHcmFwaC5PQkpFQ1RfQ1RPUl9OQU1FX01BVENIX0lEWF07CgkgICAgdmFyIHN1ZmZpeERp
ZmYgPSBmdWxsTmFtZS5sZW5ndGggLSBPYmplY3RHcmFwaC5DVE9SX1NVRkZJWC5sZW5ndGg7Cgkg
ICAgaWYgKGZ1bGxOYW1lLmVuZHNXaXRoKE9iamVjdEdyYXBoLkNUT1JfU1VGRklYKSkgewoJICAg
ICAgZnVsbE5hbWUgPSBmdWxsTmFtZS5zdWJzdHIoMCwgc3VmZml4RGlmZik7CgkgICAgfQoJICAg
IHJldHVybiBmdWxsTmFtZTsKCSAgfQoKCSAgcmV0dXJuICcnOwoJfTsKCglPYmplY3RHcmFwaC5w
cm90b3R5cGUuYmxhY2tsaXN0T2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKCSAgdGhpcy5ibGFja2xp
c3RlZE9iamVjdHMucHVzaChvKTsKCX07CgoJT2JqZWN0R3JhcGguYmxhY2tsaXN0T2JqZWN0ID0g
ZnVuY3Rpb24gKG8pIHsKCSAgdGhpcy5wcm90b3R5cGUuYmxhY2tsaXN0ZWRPYmplY3RzLnB1c2go
byk7Cgl9OwoKCS8vIFJldHVybiBhbiBpZCBhc3NvY2lhdGVkIHdpdGggbyBpZiBhbmQgb25seSBp
ZiBvYmplY3Rba2V5XSB0cmF2ZXJzYWwgb2YgbwoJLy8gc2hvdWxkIGJlIHNraXBwZWQuIE90aGVy
d2lzZSwgcmV0dXJuIG51bGwuCgkvLwoJLy8gRXhhbXBsZSBvZiB3aGVuIG9iamVjdFtrZXldIHRy
YXZlcnNhbCBzaG91bGQgYmUgc2tpcHBlZCBpbmNsdWRlIHdoZW4gbyBpcwoJLy8gb2YgcHJpbWl0
aXZlIHR5cGUgKG9yIHZhbHVlOyBlLmcuLCBudWxsKSwgb3Igd2hlbiBvIGhhcyBhbHJlYWR5IGJl
ZW4KCS8vIHZpc2l0ZWQuCglPYmplY3RHcmFwaC5wcm90b3R5cGUubWF5YmVTa2lwID0gZnVuY3Rp
b24gKG8pIHsKCSAgaWYgKG8gPT09IG51bGwpIHJldHVybiB0aGlzLnR5cGVzWydudWxsJ107Cgkg
IHZhciB0eXBlT2YgPSB0eXBlb2YgbyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6ICgw
LCBfdHlwZW9mMy5kZWZhdWx0KShvKTsKCSAgaWYgKHRoaXMudHlwZXNbdHlwZU9mXSkgcmV0dXJu
IHRoaXMudHlwZXNbdHlwZU9mXTsKCSAgaWYgKHRoaXMuZGF0YVt1aWQuZ2V0SWQobyldKSByZXR1
cm4gdWlkLmdldElkKG8pOwoJICByZXR1cm4gbnVsbDsKCX07CgoJLy8gUmV0dXJuIHRydWUgaWYg
YW5kIG9ubHkgaWY6CgkvLyAoMSkga2V5ICsgbydzIHR5cGUgKGJ5IGNvbnN0cnVjdG9yIG5hbWUp
IGlzIGJsYWNrbGlzdGVkLCBPUgoJLy8gKDIpIG9ba2V5XSBpcyBhIGJsYWNrbGlzdGVkIG9iamVj
dC4KCU9iamVjdEdyYXBoLnByb3RvdHlwZS5pc1Byb3BlcnR5QmxhY2tsaXN0ZWQgPSBmdW5jdGlv
biAobywga2V5KSB7CgkgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibGFja2xpc3RlZFByb3Bl
cnRpZXMubGVuZ3RoOyBpKyspIHsKCSAgICBpZiAoby5jb25zdHJ1Y3RvciAmJiBrZXkgPT09IHRo
aXMuYmxhY2tsaXN0ZWRQcm9wZXJ0aWVzW2ldWzFdICYmIHRoaXMuZ2V0TmFtZUZyb21Db25zdHJ1
Y3RvcihvLmNvbnN0cnVjdG9yKSA9PT0gdGhpcy5ibGFja2xpc3RlZFByb3BlcnRpZXNbaV1bMF0p
IHsKCSAgICAgIHJldHVybiB0cnVlOwoJICAgIH0KCSAgfQoJICB2YXIgdmFsdWU7CgkgIHRyeSB7
CgkgICAgdmFsdWUgPSBvW2tleV07CgkgIH0gY2F0Y2ggKGUpIHsKCSAgICByZXR1cm4gZmFsc2U7
CgkgIH0KCSAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsYWNrbGlzdGVkT2JqZWN0cy5sZW5n
dGg7IGkrKykgewoJICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5ibGFja2xpc3RlZE9iamVjdHNbaV0p
IHJldHVybiB0cnVlOwoJICB9CgkgIHJldHVybiBmYWxzZTsKCX07CgoJLy8gUmV0dXJuIHRydWUg
aWYgYW5kIG9ubHkgaWYgbmFtZSBpcyBhIGJsYWNrbGlzdGVkIGtleS4KCU9iamVjdEdyYXBoLnBy
b3RvdHlwZS5pc0tleUJsYWNrbGlzdGVkID0gZnVuY3Rpb24gKG5hbWUpIHsKCSAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLmJsYWNrbGlzdGVkS2V5cy5sZW5ndGg7IGkrKykgewoJICAgIGlmIChu
YW1lID09PSB0aGlzLmJsYWNrbGlzdGVkS2V5c1tpXSkgcmV0dXJuIHRydWU7CgkgIH0KCSAgcmV0
dXJuIGZhbHNlOwoJfTsKCgkvLyBSZXR1cm4gYSBzdHJpbmcgKHBvc3NpYmx5IGlkZW50aWNhbCB0
byBuYW1lKSB0aGF0IGlzIHNhZmUgdG8gc3RvcmUgYXMgYQoJLy8gSmF2YXNjcmlwdCBvYmplY3Qg
a2V5IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGludGVybmFsIGJlaGF2aW91ciBvZiB0aGUKCS8vIG9i
amVjdC4KCU9iamVjdEdyYXBoLnByb3RvdHlwZS5yZXdyaXRlTmFtZSA9IGZ1bmN0aW9uIChuYW1l
KSB7CgkgIHJldHVybiB0aGlzLm5hbWVSZXdyaXRlci5yZXdyaXRlTmFtZShuYW1lKTsKCX07CgoJ
Ly8gVmlzaXQgdGhlIHByb3RvdHlwZSBvZiBvLCBnaXZlbiBpdHMgZGF0YU1hcC4KCU9iamVjdEdy
YXBoLnByb3RvdHlwZS52aXNpdFByb3RvdHlwZSA9IGZ1bmN0aW9uIChvLCBkYXRhTWFwKSB7Cgkg
IHRoaXMuc3RvcmVQcm90byh1aWQuZ2V0SWQobyksIHRoaXMudmlzaXRPYmplY3Qoby5fX3Byb3Rv
X18sIHsgcHJvdG86IHRydWUgfSkpOwoJfTsKCgkvLyBnZXRQcm90b1Byb3BlcnR5TmFtZXMgcmV0
dXJucyBhbGwgaW5oZXJpdGVkIHByb3BlcnRpZXMKCS8vIHRoYXQgaGF2ZSBleGNlcHRpb24gdmFs
dWVzIGluIHRoZWlyIHByb3RvdHlwZXMuCgkvLyBXZSBhc3N1bWUgdGhhdCB0aGUgdGhyb3duIGV4
Y2VwdGlvbiB3YXMgYSBUeXBlRXJyb3IgaW5kaWNhdGluZyB0aGF0IHRoZQoJLy8gbWV0aG9kIGV4
cGVjdGVkIGFuIGluc3RhbmNlLCBub3QgdGhlIHByb3RvdHlwZSB0byBiZSB0aGlzIG9uIGludm9j
YXRpb24uCglPYmplY3RHcmFwaC5wcm90b3R5cGUuZ2V0UHJvdG9Qcm9wZXJ0eU5hbWVzID0gZnVu
Y3Rpb24gKGlkKSB7CgkgIHZhciBfdGhpczIgPSB0aGlzOwoKCSAgdmFyIHByb3RvSWQgPSB0aGlz
LmdldFByb3RvdHlwZShpZCk7CgkgIGlmICghcHJvdG9JZCB8fCB0aGlzLmlzVHlwZShwcm90b0lk
KSkgcmV0dXJuIGVtcHR5QXJyYXk7CgkgIHZhciBleGNlcHRpb25Qcm9wcyA9IHRoaXMuZ2V0T2Jq
ZWN0S2V5cyhpZCwgZnVuY3Rpb24gKHByb3AsIGtleSkgewoJICAgIHJldHVybiBwcm9wID09PSBf
dGhpczIudHlwZXMuZXhjZXB0aW9uIHx8IHByb3AgPT09IF90aGlzMi50eXBlcy51bmRlZmluZWQ7
CgkgIH0pOwoJICByZXR1cm4gZXhjZXB0aW9uUHJvcHMuY29uY2F0KHRoaXMuZ2V0UHJvdG9Qcm9w
ZXJ0eU5hbWVzKHByb3RvSWQpKTsKCX07CgoJLy8gVmlzaXQgdGhlIGluaGVyaXRlZCBwcm9wZXJ0
aWVzIG9mIG8sIGdpdmVuIGl0cyBkYXRhTWFwLgoJLy8gbyBtdXN0IGJlIGFuIGluc3RhbmNlIG9i
amVjdC4KCU9iamVjdEdyYXBoLnByb3RvdHlwZS52aXNpdEluc3RhbmNlID0gZnVuY3Rpb24gKG8s
IGRhdGFNYXApIHsKCSAgdmFyIGluaGVyaXRlZFByb3BzID0gdGhpcy5nZXRQcm90b1Byb3BlcnR5
TmFtZXModWlkLmdldElkKG8pKTsKCSAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhlcml0ZWRQcm9w
cy5sZW5ndGg7IGkrKykgewoJICAgIGlmICh0aGlzLmlzS2V5QmxhY2tsaXN0ZWQoaW5oZXJpdGVk
UHJvcHNbaV0pIHx8IHRoaXMuaXNQcm9wZXJ0eUJsYWNrbGlzdGVkKG8sIGluaGVyaXRlZFByb3Bz
W2ldKSkgY29udGludWU7CgkgICAgLy8gRW5xdWV1ZSB3b3JrOiBWaXNpdCBvJ3MgcHJvcGVydHku
CgkgICAgdGhpcy5xLmVucXVldWUodGhpcy52aXNpdFByb3BlcnR5LmJpbmQodGhpcywgbywgaW5o
ZXJpdGVkUHJvcHNbaV0sIGRhdGFNYXApKTsKCSAgfQoJfTsKCgkvLyBWaXNpdCB0aGUgcHJvcGVy
dHkgb2YgbyBuYW1lZCBwcm9wZXJ0eU5hbWUsIGdpdmVuIG8ncyBkYXRhTWFwLgoJT2JqZWN0R3Jh
cGgucHJvdG90eXBlLnZpc2l0UHJvcGVydHkgPSBmdW5jdGlvbiAobywgcHJvcGVydHlOYW1lLCBk
YXRhTWFwKSB7CgkgIHZhciBuYW1lID0gdGhpcy5yZXdyaXRlTmFtZShwcm9wZXJ0eU5hbWUpOwoJ
ICB0cnkgewoJICAgIGRhdGFNYXBbbmFtZV0gPSB0aGlzLnZpc2l0T2JqZWN0KG9bcHJvcGVydHlO
YW1lXSk7CgkgIH0gY2F0Y2ggKGUpIHsKCSAgICAvLyBjb25zb2xlLndhcm4oJ0Vycm9yIGFjY2Vz
c2luZycsIG9bJytVSUQnXSwgJy4nLCBwcm9wZXJ0eU5hbWUpOwoJICAgIGRhdGFNYXBbbmFtZV0g
PSB0aGlzLnR5cGVzLmV4Y2VwdGlvbjsKCSAgfQoJfTsKCglPYmplY3RHcmFwaC5wcm90b3R5cGUu
Z2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIChvKSB7CgkgIHJldHVybiAoMCwgX2dldE93
blByb3BlcnR5TmFtZXMyLmRlZmF1bHQpKG8pOwoJfTsKCglPYmplY3RHcmFwaC5wcm90b3R5cGUu
dmlzaXRQcm9wZXJ0eURlc2NyaXB0b3JzID0gZnVuY3Rpb24gKG8sIG1ldGFkYXRhTWFwKSB7Cgkg
IHZhciBuYW1lcyA9IHRoaXMuZ2V0T3duUHJvcGVydHlOYW1lcyhvKTsKCSAgLy8gVmlzaXQgYWxs
IG9mIG8ncyBwcm9wZXJ0eSBkZXNjcmlwdG9ycyAoc2tpcHBpbmcgYmxhY2tsaXN0ZWQKCSAgLy8g
cHJvcGVydGllcykuCgkgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsK
CSAgICBpZiAodGhpcy5pc0tleUJsYWNrbGlzdGVkKG5hbWVzW2ldKSB8fCB0aGlzLmlzUHJvcGVy
dHlCbGFja2xpc3RlZChvLCBuYW1lc1tpXSkpIGNvbnRpbnVlOwoKCSAgICB2YXIgbmFtZSA9IG5h
bWVzW2ldOwoJICAgIHZhciBkZXNjcmlwdG9yOwoJICAgIHRyeSB7CgkgICAgICBkZXNjcmlwdG9y
ID0gKDAsIF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IyLmRlZmF1bHQpKG8sIG5hbWUpOwoJICAg
IH0gY2F0Y2ggKGUpIHt9CgkgICAgaWYgKGRlc2NyaXB0b3IpIHsKCSAgICAgIG1ldGFkYXRhTWFw
W25hbWVdID0gc3RkbGliLm1hcE1hcChkZXNjcmlwdG9yLCBmdW5jdGlvbiAoZGVzY3JpcHRvclBh
cnQpIHsKCSAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JQYXJ0ID09PSB1bmRlZmluZWQgfHwgZGVz
Y3JpcHRvclBhcnQgPT09IGZhbHNlID8gMCA6IDE7CgkgICAgICB9KTsKCSAgICB9IGVsc2UgewoJ
ICAgICAgY29uc29sZS53YXJuKCdNaXNzaW5nIGRlc2NyaXB0b3IgZm9yIG5hbWUgIicgKyBuYW1l
ICsgJyIgb24gb2JqZWN0ICcgKyB1aWQuZ2V0SWQobykpOwoJICAgIH0KCSAgfQoJfTsKCgkvLyBW
aXNpdCBhbiBvYmplY3QsIG8uIFJldHVybiBhbiBpZCBmb3IgdGhlIG9iamVjdCwgd2hpY2ggbWF5
IGNvbnRhaW4gdHlwZQoJLy8gaW5mb3JtYXRpb24gKGUuZy4sIG51bWJlciwgYm9vbGVhbiwgbnVs
bCksIG9yIGluZGljYXRlIHRoZSB1bmlxdWUgaWRlbnRpdHkKCS8vIG9mIHRoZSBvYmplY3QgaXRz
ZWxmLgoJLy8gb3B0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgb2JqZWN0LgoJLy8g
ICAgIHByb3RvOiBpZiB0aGlzIG9iamVjdCBpcyB2aXNpdCBhcyBhIF9fcHJvdG9fXyBvZiBvdGhl
ciBvYmplY3QuCglPYmplY3RHcmFwaC5wcm90b3R5cGUudmlzaXRPYmplY3QgPSBmdW5jdGlvbiAo
bywgb3B0KSB7CgkgIG9wdCA9IG9wdCB8fCB7fTsKCSAgdmFyIHByb3RvID0gb3B0LnByb3RvIHx8
IGZhbHNlOwoJICAvLyBEb24ndCBwcm9jZXNzIG9iamVjdCB1bmxlc3Mgd2UgaGF2ZSB0by4KCSAg
dmFyIHNraXAgPSB0aGlzLm1heWJlU2tpcChvKTsKCSAgaWYgKHNraXAgIT09IG51bGwpIHJldHVy
biBza2lwOwoKCSAgdmFyIGlkID0gdWlkLmdldElkKG8pOwoKCSAgLy8gU3RvcmUgZnVuY3Rpb24t
dHlwZSBpbmZvIGluIGEgc3BlY2lhbCBwbGFjZS4gV2UgdmlzaXQgdGhlbSBsaWtlIGFueQoJICAv
LyBvdGhlciBvYmplY3Qgd2l0aCBpZGVudGl0eSwgc28gdGhlaXIgaWQgd2lsbCBub3QgaW5kaWNh
dGUgdGhlaXIgdHlwZS4KCSAgaWYgKHR5cGVvZiBvID09PSAnZnVuY3Rpb24nIHx8IG8gaW5zdGFu
Y2VvZiBGdW5jdGlvbikgewoJICAgIHZhciBmTmFtZSA9IHRoaXMuZ2V0TmFtZUZyb21Db25zdHJ1
Y3RvcihvKTsKCSAgICBpZiAoZk5hbWUgPT09ICcnKSBjb25zb2xlLndhcm4oJ1NhdmluZyB1bm5h
bWVkIGZ1bmN0aW9uJyk7CgkgICAgdGhpcy5mdW5jdGlvbnNbaWRdID0gZk5hbWU7CgkgIH0KCgkg
IHZhciBkYXRhTWFwID0gdGhpcy5zdG9yZU9iamVjdChpZCk7CgkgIHZhciBtZXRhZGF0YU1hcCA9
IHRoaXMuc3RvcmVNZXRhZGF0YShpZCk7CgoJICBpZiAoIXRoaXMuaXNUeXBlKGlkKSkgdGhpcy5z
dG9yZVRvU3RyaW5nKGlkLCBvKTsKCgkgIC8vIEVucXVldWUgd29yazogVmlzaXQgbydzIHByb3Rv
dHlwZSBhbmQgcHJvcGVydHkgZGVzY3JpcHRvcnMuCgkgIHRoaXMucS5lbnF1ZXVlKHRoaXMudmlz
aXRQcm90b3R5cGUuYmluZCh0aGlzLCBvLCBkYXRhTWFwKSk7CgkgIHRoaXMucS5lbnF1ZXVlKHRo
aXMudmlzaXRQcm9wZXJ0eURlc2NyaXB0b3JzLmJpbmQodGhpcywgbywgbWV0YWRhdGFNYXApKTsK
CgkgIC8vIFZpc2l0IGFsbCBvZiBvJ3MgcHJvcGVydGllcyAoc2tpcHBpbmcgYmxhY2tsaXN0ZWQg
b25lcykuCgkgIHZhciBuYW1lcyA9IHRoaXMuZ2V0T3duUHJvcGVydHlOYW1lcyhvKTsKCSAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewoJICAgIGlmICh0aGlzLmlzS2V5
QmxhY2tsaXN0ZWQobmFtZXNbaV0pIHx8IHRoaXMuaXNQcm9wZXJ0eUJsYWNrbGlzdGVkKG8sIG5h
bWVzW2ldKSkgY29udGludWU7CgkgICAgLy8gRW5xdWV1ZSB3b3JrOiBWaXNpdCBvJ3MgcHJvcGVy
dHkuCgkgICAgdGhpcy5xLmVucXVldWUodGhpcy52aXNpdFByb3BlcnR5LmJpbmQodGhpcywgbywg
bmFtZXNbaV0sIGRhdGFNYXApKTsKCSAgfQoKCSAgLy8gQSBpbnN0YW5jZSBpcyBhbiBvYmplY3Qg
dGhhdCBpcyBub3QgYSBfX3Byb3RvX18gb2Ygb3RoZXIgb2JqZWN0LAoJICAvLyBhbmQgaXQgZG9l
cyBub3QgaGF2ZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS4KCSAgLy8gVE9ETzogVGhpcyBzdHJhdGVn
eSBpc24ndCBzb3VuZCwgd2hldGhlciBhIG9iamVjdCBpcyBhIHByb3RvdHlwZSBvciBub3QKCSAg
Ly8gaXMgbm90IHN1cmUgdW50aWwgdGhlIGVudGlyZSBvYmplY3QgaXMgdmlzaXRlZC4KCSAgaWYg
KHByb3RvICE9PSB0cnVlICYmICh0eXBlb2YgbyA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVk
JyA6ICgwLCBfdHlwZW9mMy5kZWZhdWx0KShvKSkgPT09ICdvYmplY3QnKSB7CgkgICAgdGhpcy5p
bnN0YW5jZVF1ZXVlLmVucXVldWUodGhpcy52aXNpdEluc3RhbmNlLmJpbmQodGhpcywgbywgZGF0
YU1hcCkpOwoJICB9CgoJICByZXR1cm4gaWQ7Cgl9OwoKCS8vIEludGVyZmFjZSBtZXRob2Q6IENs
b25lIGFuIE9iamVjdEdyYXBoLgoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rp
b24gKCkgewoJICByZXR1cm4gdGhpcy5jbG9uZVdpdGhvdXQoW10pOwoJfTsKCgkvLyBJbnRlcmZh
Y2UgbWV0aG9kOiBDbG9uZSBhbiBPYmplY3RHcmFwaCB3aXRoIHNvbWUgSURzIHJlbW92ZWQuCglP
YmplY3RHcmFwaC5wcm90b3R5cGUuY2xvbmVXaXRob3V0ID0gZnVuY3Rpb24gKHdpdGhvdXRJZHMp
IHsKCSAgdmFyIGNsb25lID0gbmV3IE9iamVjdEdyYXBoKHRoaXMpOwoKCSAgY2xvbmUua2V5ID0g
dGhpcy5rZXk7CgkgIGNsb25lLnJvb3QgPSB0aGlzLnJvb3Q7CgkgIGNsb25lLmRhdGEgPSBjbG9u
ZURlZXAodGhpcy5kYXRhKTsKCSAgY2xvbmUubWV0YWRhdGEgPSBjbG9uZURlZXAodGhpcy5tZXRh
ZGF0YSk7CgkgIGNsb25lLnByb3RvcyA9IGNsb25lRGVlcCh0aGlzLnByb3Rvcyk7CgkgIGNsb25l
LnRvU3RyaW5ncyA9IGNsb25lRGVlcCh0aGlzLnRvU3RyaW5ncyk7CgkgIGNsb25lLmZ1bmN0aW9u
cyA9IGNsb25lRGVlcCh0aGlzLmZ1bmN0aW9ucyk7CgoJICBjbG9uZS5pbml0TGF6eURhdGEoKTsK
CgkgIHJldHVybiBjbG9uZS5yZW1vdmVJZHMod2l0aG91dElkcyk7Cgl9OwoKCS8vIEludGVyZmFj
ZSBtZXRob2Q6IFZpc2l0IHRoZSBvYmplY3QgZ3JhcGggcm9vdGVkIGF0IG8uCgkvLyBTdXBwb3J0
ZWQgb3B0aW9uczoKCS8vICAgb25Eb25lOiBDYWxsYmFjayB3aGVuIHZpc2l0aW5nIGlzIGZpbmlz
aGVkLgoJLy8gICAgICAgICAgIGFyZ3VtZW50cyA9IFt0aGlzXQoJLy8gICBrZXk6IEluaXRpYWwg
c3RyaW5nIGtleSB0aGF0IHJlZmVycyB0byByb290IG9iamVjdC4KCU9iamVjdEdyYXBoLnByb3Rv
dHlwZS5jYXB0dXJlID0gZnVuY3Rpb24gKG8sIG9wdHMpIHsKCSAgb3B0cyA9IG9wdHMgfHwge307
CgkgIHZhciBwcmV2T25Eb25lID0gdGhpcy5xLm9uRG9uZTsKCSAgaWYgKHRoaXMuYnVzeSkgewoJ
ICAgIHRoaXMucS5vbkRvbmUgPSBmdW5jdGlvbiAoKSB7CgkgICAgICBwcmV2T25Eb25lLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CgkgICAgICB0aGlzLmNhcHR1cmUobywgb3B0cyk7CgkgICAgfS5i
aW5kKHRoaXMpOwoJICAgIHJldHVybiB0aGlzOwoJICB9CgkgIHRoaXMuYnVzeSA9IHRydWU7CgoJ
ICAvLyBMb2NrLWluIHVzZXIgYWdlbnQgYnkgKHBvdGVudGlhbGx5KSBjb3B5aW5nIGl0IGludG8g
YW4gb3duIHByb3BlcnR5LgoJICB0aGlzLnVzZXJBZ2VudCA9IHRoaXMudXNlckFnZW50OwoKCSAg
dGhpcy50aW1lc3RhbXAgPSBudWxsOwoJICB0aGlzLmtleSA9IG9wdHMua2V5IHx8ICcnOwoJICB0
aGlzLnJvb3QgPSAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiAoMCwg
X3R5cGVvZjMuZGVmYXVsdCkobykpID09PSAnb2JqZWN0JyAmJiBvICE9PSBudWxsID8gb1snK1VJ
RCddIDogbzsKCSAgdGhpcy5kYXRhID0ge307CgkgIHRoaXMubWV0YWRhdGEgPSB7fTsKCSAgdGhp
cy5wcm90b3MgPSB7fTsKCSAgdGhpcy50b1N0cmluZ3MgPSB7fTsKCSAgdGhpcy5mdW5jdGlvbnMg
PSB7fTsKCSAgdGhpcy5rZXlzQ2FjaGUgPSB7fTsKCgkgIHRoaXMucS5vbkRvbmUgPSBmdW5jdGlv
biAoKSB7CgkgICAgdGhpcy50aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCSAgICB0
aGlzLmluaXRMYXp5RGF0YSgpOwoJICAgIG9wdHMub25Eb25lICYmIG9wdHMub25Eb25lKHRoaXMp
OwoJICAgIHRoaXMuYnVzeSA9IGZhbHNlOwoJICAgIHRoaXMuaW5zdGFuY2VRdWV1ZS5vbkRvbmUg
PSBmdW5jdGlvbiAoKSB7CgkgICAgICBpZiAoIXRoaXMucS5lbXB0eSgpKSB0aGlzLnEuZmx1c2go
KTtlbHNlIHByZXZPbkRvbmUodGhpcyk7CgkgICAgfS5iaW5kKHRoaXMpOwoJICAgIHRoaXMucS5v
bkRvbmUgPSBmdW5jdGlvbiAoKSB7CgkgICAgICBpZiAoIXRoaXMuaW5zdGFuY2VRdWV1ZS5lbXB0
eSgpKSB0aGlzLmluc3RhbmNlUXVldWUuZmx1c2goKTtlbHNlIHByZXZPbkRvbmUodGhpcyk7Cgkg
ICAgfS5iaW5kKHRoaXMpOwoJICAgIHRoaXMuaW5zdGFuY2VRdWV1ZS5mbHVzaCgpOwoJICB9LmJp
bmQodGhpcyk7CgoJICAvLyBFZGdlIGNhc2U6IFBhc3NlZC1pbiBvYmplY3QgaXMgYmxhY2tsaXN0
ZWQuIFRoaXMgaXMgbm90IGNhdWdodCBieQoJICAvLyAuaXNQcm9wZXJ0eUJsYWNrbGlzdGVkKCku
CgkgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibGFja2xpc3RlZE9iamVjdHMubGVuZ3RoOyBp
KyspIHsKCSAgICBpZiAobyA9PT0gdGhpcy5ibGFja2xpc3RlZE9iamVjdHNbaV0pIHsKCSAgICAg
IHRoaXMucS5mbHVzaCgpOwoJICAgICAgcmV0dXJuIHRoaXM7CgkgICAgfQoJICB9CgoJICB0aGlz
LnZpc2l0T2JqZWN0KG8pOwoJICB0aGlzLnEuZmx1c2goKTsKCgkgIHJldHVybiB0aGlzOwoJfTsK
CglPYmplY3RHcmFwaC5wcm90b3R5cGUucmVtb3ZlUmVmc18gPSBmdW5jdGlvbiAoaWQsIGlkcykg
ewoJICB2YXIgX3RoaXMzID0gdGhpczsKCgkgIHZhciBmb3VuZCA9IGZhbHNlOwoJICB2YXIgaW52
RGF0YSA9IHRoaXMuaW52RGF0YVtpZF07CgkgIGlmIChpbnZEYXRhKSB7CgkgICAgZm9yICh2YXIg
a2V5IGluIGludkRhdGEpIHsKCSAgICAgIGlmIChpbnZEYXRhLmhhc093blByb3BlcnR5KGtleSkp
IHsKCSAgICAgICAgdmFyIHJlZklkcyA9IGludkRhdGFba2V5XTsKCSAgICAgICAgcmVmSWRzLmZv
ckVhY2goZnVuY3Rpb24gKHJlZklkKSB7CgkgICAgICAgICAgZm91bmQgPSB0cnVlOwoJICAgICAg
ICAgIGRlbGV0ZSBfdGhpczMuZGF0YVtyZWZJZF1ba2V5XTsKCSAgICAgICAgfSk7CgkgICAgICB9
CgkgICAgfQoJICB9CgkgIHZhciBpbnZQcm90b0lkcyA9IHRoaXMuaW52UHJvdG9zW2lkXTsKCSAg
aWYgKGludlByb3RvSWRzKSB7CgkgICAgdmFyIG5ld1Byb3RvID0gaWQ7CgkgICAgd2hpbGUgKCF0
aGlzLmlzVHlwZShuZXdQcm90bykgJiYgaWRzLnNvbWUoZnVuY3Rpb24gKHByb3RvSWQpIHsKCSAg
ICAgIHJldHVybiBwcm90b0lkID09PSBuZXdQcm90bzsKCSAgICB9KSkgewoJICAgICAgbmV3UHJv
dG8gPSB0aGlzLmdldFByb3RvdHlwZShuZXdQcm90byk7CgkgICAgfWludlByb3RvSWRzLmZvckVh
Y2goZnVuY3Rpb24gKGludlByb3RvSWQpIHsKCSAgICAgIGZvdW5kID0gdHJ1ZTsKCSAgICAgIGNv
bnNvbGUuYXNzZXJ0KF90aGlzMy5wcm90b3NbaW52UHJvdG9JZF0gPT09IGlkKTsKCSAgICAgIF90
aGlzMy5wcm90b3NbaW52UHJvdG9JZF0gPSBuZXdQcm90bzsKCSAgICB9KTsKCSAgfQoJICByZXR1
cm4gZm91bmQ7Cgl9OwoKCU9iamVjdEdyYXBoLnByb3RvdHlwZS5yZW1vdmVEYXRhXyA9IGZ1bmN0
aW9uIChpZCkgewoJICBkZWxldGUgdGhpcy5kYXRhW2lkXTsKCSAgZGVsZXRlIHRoaXMucHJvdG9z
W2lkXTsKCSAgLy8gVE9ETzogT3V0LW9mLWRhdGUgZGF0YSBhcHBlYXJzIHRvIGJlIGNhdXNpbmcg
dGhlIG5lZWQgZm9yIHRoaXMgY2hlY2suCgkgIGlmICh0aGlzLm1ldGFkYXRhICE9PSB1bmRlZmlu
ZWQgJiYgdGhpcy5tZXRhZGF0YVtpZF0gIT09IHVuZGVmaW5lZCkgZGVsZXRlIHRoaXMubWV0YWRh
dGFbaWRdOwoJICByZXR1cm4gdHJ1ZTsKCX07CgoJLy8gSW50ZXJmYWNlIG1ldGhvZDogUmVtb3Zl
IGlkcyBmcm9tIHRoZSBvYmplY3QgZ3JhcGguCgkvLyBBbHNvIGNsZWFuIHVwIG9iamVjdHMgb3Jw
aGFuZWQgYnkgaWQgcmVtb3ZhbHMuCglPYmplY3RHcmFwaC5wcm90b3R5cGUucmVtb3ZlSWRzID0g
ZnVuY3Rpb24gKGlkcykgewoJICB2YXIgX3RoaXM0ID0gdGhpczsKCgkgIC8vIERvIG5vdCB0b3Vj
aCByb290IG9iamVjdCBvciByZWZlcmVuY2VzIHRvIGl0LgoJICBpZHMgPSBpZHMuZmlsdGVyKGZ1
bmN0aW9uIChpZCkgewoJICAgIHJldHVybiBpZCAhPT0gX3RoaXM0LnJvb3Q7CgkgIH0pOwoKCSAg
Ly8gS2VlcCByZW1vdmluZyBvYmplY3RzIHVudGlsIG5vIHJlbWFpbmluZyBvYmplY3RzIGFyZSBv
cnBoYW5lZCBmcm9tIHJvb3QuCgkgIGRvIHsKCSAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxl
dGlvbiA9IHRydWU7CgkgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7CgkgICAgdmFy
IF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkOwoKCSAgICB0cnkgewoJICAgICAgZm9yICh2YXIg
X2l0ZXJhdG9yID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoaWRzKSwgX3N0ZXA7ICEoX2l0
ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUp
OyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkgewoJICAgICAgICB2YXIgaWQgPSBf
c3RlcC52YWx1ZTsKCgkgICAgICAgIHRoaXMucmVtb3ZlUmVmc18oaWQsIGlkcyk7CgkgICAgICB9
CgkgICAgfSBjYXRjaCAoZXJyKSB7CgkgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7Cgkg
ICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjsKCSAgICB9IGZpbmFsbHkgewoJICAgICAgdHJ5IHsK
CSAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1
cm4pIHsKCSAgICAgICAgICBfaXRlcmF0b3IucmV0dXJuKCk7CgkgICAgICAgIH0KCSAgICAgIH0g
ZmluYWxseSB7CgkgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikgewoJICAgICAgICAgIHRo
cm93IF9pdGVyYXRvckVycm9yOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoKCSAgICB2YXIg
X2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlOwoJICAgIHZhciBfZGlkSXRlcmF0b3JF
cnJvcjIgPSBmYWxzZTsKCSAgICB2YXIgX2l0ZXJhdG9yRXJyb3IyID0gdW5kZWZpbmVkOwoKCSAg
ICB0cnkgewoJICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRl
ZmF1bHQpKGlkcyksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3Rl
cDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24y
ID0gdHJ1ZSkgewoJICAgICAgICB2YXIgX2lkID0gX3N0ZXAyLnZhbHVlOwoKCSAgICAgICAgdGhp
cy5yZW1vdmVEYXRhXyhfaWQpOwoJICAgICAgfQoJICAgIH0gY2F0Y2ggKGVycikgewoJICAgICAg
X2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTsKCSAgICAgIF9pdGVyYXRvckVycm9yMiA9IGVycjsK
CSAgICB9IGZpbmFsbHkgewoJICAgICAgdHJ5IHsKCSAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3Jt
YWxDb21wbGV0aW9uMiAmJiBfaXRlcmF0b3IyLnJldHVybikgewoJICAgICAgICAgIF9pdGVyYXRv
cjIucmV0dXJuKCk7CgkgICAgICAgIH0KCSAgICAgIH0gZmluYWxseSB7CgkgICAgICAgIGlmIChf
ZGlkSXRlcmF0b3JFcnJvcjIpIHsKCSAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7Cgkg
ICAgICAgIH0KCSAgICAgIH0KCSAgICB9CgoJICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0
aW9uMyA9IHRydWU7CgkgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlOwoJICAgIHZh
ciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7CgoJICAgIHRyeSB7CgkgICAgICBmb3IgKHZh
ciBfaXRlcmF0b3IzID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoaWRzKSwgX3N0ZXAzOyAh
KF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgp
KS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlKSB7CgkgICAgICAgIHZh
ciBfaWQyID0gX3N0ZXAzLnZhbHVlOwoKCSAgICAgICAgaWYgKF9pZDIgaW4gdGhpcy5mdW5jdGlv
bnMpIHsKCSAgICAgICAgICBkZWxldGUgdGhpcy5mdW5jdGlvbnNbX2lkMl07CgkgICAgICAgIH0K
CSAgICAgIH0KCSAgICAgIC8vIE9iamVjdCBncmFwaCBoYXMgY2hhbmdlZCEgRmx1c2ggbGF6aWx5
IGNvbXB1dGVkIGRhdGEuCgkgICAgfSBjYXRjaCAoZXJyKSB7CgkgICAgICBfZGlkSXRlcmF0b3JF
cnJvcjMgPSB0cnVlOwoJICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gZXJyOwoJICAgIH0gZmluYWxs
eSB7CgkgICAgICB0cnkgewoJICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24z
ICYmIF9pdGVyYXRvcjMucmV0dXJuKSB7CgkgICAgICAgICAgX2l0ZXJhdG9yMy5yZXR1cm4oKTsK
CSAgICAgICAgfQoJICAgICAgfSBmaW5hbGx5IHsKCSAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVy
cm9yMykgewoJICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMzsKCSAgICAgICAgfQoJICAg
ICAgfQoJICAgIH0KCgkgICAgdGhpcy5pbml0TGF6eURhdGEoKTsKCgkgICAgaWRzID0gdGhpcy5n
ZXRBbGxJZHMoKS5maWx0ZXIoZnVuY3Rpb24gKGlkKSB7CgkgICAgICByZXR1cm4gX3RoaXM0Lmdl
dFNob3J0ZXN0S2V5KGlkKSA9PT0gbnVsbDsKCSAgICB9KTsKCSAgfSB3aGlsZSAoaWRzLmxlbmd0
aCA+IDApOwoKCSAgcmV0dXJuIHRoaXM7Cgl9OwoKCS8vIEludGVyZmFjZSBtZXRob2Q6IFJlbW92
ZSBpZCA9PiBrZXkgbWFwcGluZ3MuCglPYmplY3RHcmFwaC5wcm90b3R5cGUucmVtb3ZlUHJpbWl0
aXZlcyA9IGZ1bmN0aW9uIChpZEtleVBhaXJzKSB7CgkgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21w
bGV0aW9uNCA9IHRydWU7CgkgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjQgPSBmYWxzZTsKCSAgdmFy
IF9pdGVyYXRvckVycm9yNCA9IHVuZGVmaW5lZDsKCgkgIHRyeSB7CgkgICAgZm9yICh2YXIgX2l0
ZXJhdG9yNCA9ICgwLCBfZ2V0SXRlcmF0b3IzLmRlZmF1bHQpKGlkS2V5UGFpcnMpLCBfc3RlcDQ7
ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSAoX3N0ZXA0ID0gX2l0ZXJhdG9yNC5uZXh0
KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IHRydWUpIHsKCSAgICAgIHZh
ciBfc3RlcDQkdmFsdWUgPSBfc3RlcDQudmFsdWUsCgkgICAgICAgICAgaWQgPSBfc3RlcDQkdmFs
dWUuaWQsCgkgICAgICAgICAga2V5ID0gX3N0ZXA0JHZhbHVlLmtleTsKCgkgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLmRhdGFbaWRdICYmIHRoaXMuaXNUeXBlKHRoaXMuZGF0YVtpZF1ba2V5XSks
ICdBdHRlbXB0IHRvIHJlbW92ZSBub24tcHJpbWl0aXZlLCAnICsgaWQgKyAnIC4gICAgICAgICAg
ICAgICAgICAgICcgKyBrZXkgKyAnLCB3aXRoIHJlbW92ZVByaW1pdGl2ZXMoKScpOwoJICAgICAg
ZGVsZXRlIHRoaXMuZGF0YVtpZF1ba2V5XTsKCSAgICB9CgkgIH0gY2F0Y2ggKGVycikgewoJICAg
IF9kaWRJdGVyYXRvckVycm9yNCA9IHRydWU7CgkgICAgX2l0ZXJhdG9yRXJyb3I0ID0gZXJyOwoJ
ICB9IGZpbmFsbHkgewoJICAgIHRyeSB7CgkgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBs
ZXRpb240ICYmIF9pdGVyYXRvcjQucmV0dXJuKSB7CgkgICAgICAgIF9pdGVyYXRvcjQucmV0dXJu
KCk7CgkgICAgICB9CgkgICAgfSBmaW5hbGx5IHsKCSAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJv
cjQpIHsKCSAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I0OwoJICAgICAgfQoJICAgIH0KCSAg
fQoKCSAgdGhpcy5pbml0TGF6eURhdGEoKTsKCgkgIHJldHVybiB0aGlzOwoJfTsKCgkvLyBJbnRl
cmZhY2UgbWV0aG9kOiBEb2VzIHRoaXMgaWQgcmVmZXIgdG8gYSB0eXBlPwoJT2JqZWN0R3JhcGgu
cHJvdG90eXBlLmlzVHlwZSA9IGZ1bmN0aW9uIChpZCkgewoJICByZXR1cm4gaWQgPj0gKHRoaXMu
RklSU1RfVFlQRSB8fCBPYmplY3RHcmFwaC5GSVJTVF9UWVBFKSAmJiBpZCA8PSAodGhpcy5MQVNU
X1RZUEUgfHwgT2JqZWN0R3JhcGguTEFTVF9UWVBFKTsKCX07CgoJLy8gSW50ZXJmYWNlIG1ldGhv
ZDogR2V0IHR5cGUgYXNzb2NpYXRlZCB3aXRoIGlkLgoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmdl
dFR5cGUgPSBmdW5jdGlvbiAoaWQpIHsKCSAgaWYgKHRoaXMuaXNUeXBlKGlkKSkgcmV0dXJuIHRo
aXMuaW52VHlwZXNbaWRdOwoJICByZXR1cm4gJ29iamVjdCc7Cgl9OwoKCS8vIEludGVyZmFjZSBt
ZXRob2Q6IERvZXMgaWQgcmVmZXIgdG8gYSBmdW5jdGlvbj8KCU9iamVjdEdyYXBoLnByb3RvdHlw
ZS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGlkKSB7CgkgIGlmICghaWQpIHJldHVybiBmYWxzZTsK
CSAgcmV0dXJuIGlkIGluIHRoaXMuZnVuY3Rpb25zOwoJfTsKCgkvLyBJbnRlcmZhY2UgbWV0aG9k
OiBHZXQgaWRzIG9mIGFsbCBvYmplY3RzIHRoYXQgYXJlIGZ1bmN0aW9ucy4KCU9iamVjdEdyYXBo
LnByb3RvdHlwZS5nZXRGdW5jdGlvbnMgPSBmdW5jdGlvbiAoKSB7CgkgIHJldHVybiAoMCwgX2tl
eXMyLmRlZmF1bHQpKHRoaXMuZnVuY3Rpb25zKTsKCX07CgoJLy8gSW50ZXJmYWNlIG1ldGhvZDog
R2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0IGJ5IGlkLgoJT2JqZWN0
R3JhcGgucHJvdG90eXBlLmdldFRvU3RyaW5nID0gZnVuY3Rpb24gKGlkKSB7CgkgIHJldHVybiB0
aGlzLnRvU3RyaW5ncyAmJiB0aGlzLnRvU3RyaW5nc1tpZF07Cgl9OwoKCS8vIEludGVyZmFjZSBt
ZXRob2Q6IEdldCB0aGUgbmFtZSBvZiBnaXZlbiBmdW5jdGlvbiBpZC4KCU9iamVjdEdyYXBoLnBy
b3RvdHlwZS5nZXRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiAoaWQpIHsKCSAgcmV0dXJuIHRoaXMu
bmFtZVJld3JpdGVyLnVucmV3cml0ZU5hbWUodGhpcy5mdW5jdGlvbnNbaWRdKTsKCX07CgoJLy8g
SW50ZXJmYWNlIG1ldGhvZDogZ2V0IHRoZSByb290IG9mIG9iamVjdCBncmFwaC4KCU9iamVjdEdy
YXBoLnByb3RvdHlwZS5nZXRSb290ID0gZnVuY3Rpb24gKCkgewoJICByZXR1cm4gdGhpcy5yb290
OwoJfTsKCgkvLyBJbnRlcmZhY2UgbWV0aG9kOiBHZXQgYXR0cmlidXRlIGFuZCBpZCBiZWxvbmcg
dG8gZ2l2ZW4gaWQuCglPYmplY3RHcmFwaC5wcm90b3R5cGUuZ2V0UHJvcGVydGllc0lkcyA9IGZ1
bmN0aW9uIChpZCkgewoJICByZXR1cm4gKDAsIF9hc3NpZ24yLmRlZmF1bHQpKHt9LCB0aGlzLmRh
dGFbaWRdKTsKCX07CgoJLy8gSW50ZXJmYWNlIG1ldGhvZDogR2V0IGFsbCBpZHMgaW4gdGhlIHN5
c3RlbS4KCU9iamVjdEdyYXBoLnByb3RvdHlwZS5nZXRBbGxJZHMgPSBmdW5jdGlvbiAoKSB7Cgkg
IHJldHVybiB0aGlzLmFsbElkc187Cgl9OwoKCU9iamVjdEdyYXBoLnByb3RvdHlwZS5nZXRBbGxJ
ZHNfID0gZnVuY3Rpb24gKCkgewoJICB2YXIgaWRzID0gW107CgkgIHZhciBzdHJJZHMgPSB0aGlz
LmdldE93blByb3BlcnR5TmFtZXModGhpcy5kYXRhKTsKCSAgZm9yICh2YXIgaSA9IDA7IGkgPCBz
dHJJZHMubGVuZ3RoOyBpKyspIHsKCSAgICBpZiAodGhpcy5pc0tleUJsYWNrbGlzdGVkKHN0cklk
c1tpXSkpIGNvbnRpbnVlOwoJICAgIHZhciBpZCA9IHBhcnNlSW50KHN0cklkc1tpXSk7CgkgICAg
Y29uc29sZS5hc3NlcnQoIWlzTmFOKGlkKSwgJ05vbi1udW1lcmljIGlkJyk7CgkgICAgaWRzLnB1
c2goaWQpOwoJICB9CgkgIHJldHVybiBpZHMuc29ydCgpOwoJfTsKCgkvLyBJbnRlcmZhY2UgbWV0
aG9kOiBHZXQgb2JqZWN0J3Mga2V5IG5hbWVzLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5CgkvLyBv
cHRfcHJlZGljYXRlLgoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmdldE9iamVjdEtleXMgPSBmdW5j
dGlvbiAoaWQsIG9wdF9wcmVkaWNhdGUpIHsKCSAgaWYgKCF0aGlzLmRhdGFbaWRdKSByZXR1cm4g
W107CgkgIHZhciBkYXRhID0gdGhpcy5kYXRhW2lkXTsKCSAgdmFyIGtleXMgPSB0aGlzLmdldE93
blByb3BlcnR5TmFtZXMoZGF0YSkubWFwKHRoaXMubmFtZVJld3JpdGVyLnVucmV3cml0ZU5hbWUu
YmluZCh0aGlzLm5hbWVSZXdyaXRlcikpOwoJICBpZiAoIW9wdF9wcmVkaWNhdGUpIHJldHVybiBr
ZXlzLnNvcnQoKTsKCSAgcmV0dXJuIGtleXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsKCSAgICBy
ZXR1cm4gb3B0X3ByZWRpY2F0ZShkYXRhW2tleV0sIGtleSk7CgkgIH0pLnNvcnQoKTsKCX07CgoJ
Ly8gSW50ZXJmYWNlIG1ldGhvZDogR2V0IGFsbCBrZXlzIHRoYXQgcmVmZXIgdG8gYW4gb2JqZWN0
IGlkLgoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmdldEtleXMgPSBmdW5jdGlvbiAoaWQpIHsKCSAg
Ly8gRG9pbmcgb25lIEJGUyBmb3IgYWxsIGtleSBuYW1lcyBpcyBtdWNoIG1vcmUgZWZmaWNpZW50
IHRoYW4gcmVwZWF0aW5nIGl0CgkgIC8vIGxhemlseS4gVHJpZ2dlciBjb21wbGV0ZSBjYWNoZSBm
aWxsIHdpdGggZ2V0QWxsS2V5cygpLgoJICB2YXIga2V5cyA9IHRoaXMuZ2V0QWxsS2V5cygpW2lk
XTsKCSAgcmV0dXJuIGtleXMgPyBrZXlzLnNsaWNlKCkgOiBbXTsKCX07CgoJLy8gSW50ZXJmYWNl
IG1ldGhvZDogR2V0IHNob3J0ZXN0IGtleSB0aGF0IHJlZmVycyB0byBhbiBvYmplY3QgaWQuCglP
YmplY3RHcmFwaC5wcm90b3R5cGUuZ2V0U2hvcnRlc3RLZXkgPSBmdW5jdGlvbiAoaWQpIHsKCSAg
cmV0dXJuIHRoaXMuZ2V0S2V5cyhpZClbMF0gfHwgbnVsbDsKCX07CgoJLy8gSW50ZXJmYWNlIG1l
dGhvZDogR2V0IGFsbCBrZXlzIGZvciBhbGwgaWRzOyByZXR1cm5zIGEgbWFwIG9mIHRoZSBmb3Jt
OgoJLy8geyBpZDogW2tleXNdIH0uCglPYmplY3RHcmFwaC5wcm90b3R5cGUuZ2V0QWxsS2V5cyA9
IGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIHRoaXMuYWxsS2V5c187Cgl9OwoKCS8vIENvbXB1dGUg
Y29tcGxldGUgc2V0IG9mIGxvb2t1cCBrZXlzIGZvciBvYmplY3RzLgoJLy8gVE9ETzogRG9pbmcg
dGhpcyBpbiByZXZlcnNlLCBleHBsb2l0aW5nIGNhY2hlZCBwcmVmaXhlcyB3b3VsZCBhbGxvdyB1
cyB0bwoJLy8gYmUgbW9yZSBpbmNyZW1lbnRhbCBhYm91dCB0aGlzLgoJT2JqZWN0R3JhcGgucHJv
dG90eXBlLmdldEFsbEtleXNfID0gZnVuY3Rpb24gKCkgewoJICB2YXIgX3RoaXM1ID0gdGhpczsK
CgkgIHZhciBxID0gW3sgaWQ6IHRoaXMucm9vdCwga2V5OiB0aGlzLmtleSB9XTsKCSAgdmFyIHNl
ZW4gPSB7fTsKCSAgdmFyIHN0cnMgPSB7fTsKCgkgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29w
KGkpIHsKCSAgICB2YXIgaXRlbSA9IHFbaV07CgkgICAgX3RoaXM1LmtleXNDYWNoZVtpdGVtLmlk
XSA9IHN0cnNbaXRlbS5pZF0gPSBzdHJzW2l0ZW0uaWRdIHx8IFtdOwoJICAgIHN0cnNbaXRlbS5p
ZF0ucHVzaChpdGVtLmtleSk7CgkgICAgaWYgKHNlZW5baXRlbS5pZF0pIHJldHVybiAnY29udGlu
dWUnOwoJICAgIHNlZW5baXRlbS5pZF0gPSB0cnVlOwoJICAgIGlmIChfdGhpczUuaXNUeXBlKGl0
ZW0uaWQpKSByZXR1cm4gJ2NvbnRpbnVlJzsKCSAgICB2YXIga2V5cyA9IF90aGlzNS5nZXRPd25Q
cm9wZXJ0eU5hbWVzKF90aGlzNS5kYXRhW2l0ZW0uaWRdKTsKCSAgICBxLnB1c2guYXBwbHkocSwg
a2V5cy5tYXAoZnVuY3Rpb24gKGtleSkgewoJICAgICAgcmV0dXJuIHsgaWQ6IF90aGlzNS5kYXRh
W2l0ZW0uaWRdW2tleV0sIGtleTogaXRlbS5rZXkgKyAnLicgKyBrZXkgfTsKCSAgICB9KS5jb25j
YXQoW3sKCSAgICAgIGlkOiBfdGhpczUuZ2V0UHJvdG90eXBlKGl0ZW0uaWQpLAoJICAgICAga2V5
OiBpdGVtLmtleSArICcuX19wcm90b19fJwoJICAgIH1dKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7
CgkgICAgICByZXR1cm4gYS5rZXkubGVuZ3RoIC0gYi5rZXkubGVuZ3RoOwoJICAgIH0pKTsKCSAg
fTsKCgkgIGZvciAodmFyIGkgPSAwOyBpIDwgcS5sZW5ndGg7IGkrKykgewoJICAgIHZhciBfcmV0
ID0gX2xvb3AoaSk7CgoJICAgIGlmIChfcmV0ID09PSAnY29udGludWUnKSBjb250aW51ZTsKCSAg
fQoKCSAgdmFyIHVucmV3cml0ZU5hbWUgPSB0aGlzLm5hbWVSZXdyaXRlci51bnJld3JpdGVOYW1l
LmJpbmQodGhpcy5uYW1lUmV3cml0ZXIpOwoJICBmb3IgKHZhciBpZCBpbiBzdHJzKSB7CgkgICAg
aWYgKCFzdHJzLmhhc093blByb3BlcnR5KGlkKSkgY29udGludWU7CgkgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdHJzW2lkXS5sZW5ndGg7IGkrKykgewoJICAgICAgdmFyIHBhcnRzID0gc3Ryc1tp
ZF1baV0uc3BsaXQoJy4nKTsKCSAgICAgIHZhciB1bnJld3JpdHRlblBhcnRzID0gcGFydHMubWFw
KHVucmV3cml0ZU5hbWUpOwoJICAgICAgc3Ryc1tpZF1baV0gPSB1bnJld3JpdHRlblBhcnRzLmpv
aW4oJy4nKTsKCSAgICB9CgkgIH0KCgkgIHJldHVybiBzdHJzOwoJfTsKCgkvLyBJbnRlcmZhY2Ug
bWV0aG9kOiBHZXQgQWxsIGV4aXN0aW5nIGtleXMKCU9iamVjdEdyYXBoLnByb3RvdHlwZS5nZXRB
bGxLZXlzTWFwID0gZnVuY3Rpb24gKCkgewoJICByZXR1cm4gdGhpcy5hbGxLZXlzTWFwXzsKCX07
CgoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmdldEFsbEtleXNNYXBfID0gZnVuY3Rpb24gKCkgewoJ
ICB2YXIgYWxsS2V5cyA9IHRoaXMuZ2V0QWxsS2V5cygpOwoJICB2YXIgbWFwID0ge307CgkgIHZh
ciBpZHMgPSB0aGlzLmdldE93blByb3BlcnR5TmFtZXMoYWxsS2V5cyk7CgkgIGZvciAodmFyIGkg
PSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CgkgICAgdmFyIGtleXMgPSBhbGxLZXlzW2lkc1tp
XV07CgkgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7CgkgICAgICBt
YXBba2V5c1tqXV0gPSAxOwoJICAgIH0KCSAgfQoJICByZXR1cm4gbWFwOwoJfTsKCgkvLyBJbnRl
cmZhY2UgbWV0aG9kOiBHZXQgcHJvdG90eXBlIGZvciBpZC4KCU9iamVjdEdyYXBoLnByb3RvdHlw
ZS5nZXRQcm90b3R5cGUgPSBmdW5jdGlvbiAoaWQpIHsKCSAgcmV0dXJuIHRoaXMucHJvdG9zW2lk
XSB8fCB0aGlzLnR5cGVzWydudWxsJ107Cgl9OwoKCS8vIEludGVyZmFjZSBtZXRob2Q6IEdldCBv
YmplY3RzIHRoYXQgaGF2ZSBpZCBhcyB0aGVpciBwcm90b3R5cGUuCglPYmplY3RHcmFwaC5wcm90
b3R5cGUuZ2V0U3VwZXJzID0gZnVuY3Rpb24gKGlkKSB7CgkgIHZhciBzdXBlcnMgPSB0aGlzLmlu
dlByb3Rvc1tpZF07CgkgIGlmICghc3VwZXJzKSByZXR1cm4gW107CgkgIHJldHVybiBzdXBlcnMu
bWFwKGZ1bmN0aW9uIChzdHJJZCkgewoJICAgIHZhciBpZCA9IHBhcnNlSW50KHN0cklkKTsKCSAg
ICBjb25zb2xlLmFzc2VydCghaXNOYU4oaWQpLCAnTm9uLW51bWVyaWMgaWQgc3RvcmUgaW4gaW52
UHJvdG8nKTsKCSAgICByZXR1cm4gaWQ7CgkgIH0pOwoJfTsKCgkvLyBIZWxwZXIgdG8gLmxvb2t1
cCgpIGludGVyZmFjZSBtZXRob2Q7IG9wZXJhdGVzIG92ZXIgcGF0aCBhcnJheSBzdGFydGluZwoJ
Ly8gZnJvbSByb290LgoJT2JqZWN0R3JhcGgucHJvdG90eXBlLmxvb2t1cF8gPSBmdW5jdGlvbiAo
cGF0aCwgcm9vdCkgewoJICB2YXIgaWQgPSByb290LAoJICAgICAgbmV4dElkOwoJICBmb3IgKHZh
ciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKCSAgICB2YXIgbmFtZSA9IHBhdGhbaV07
CgkgICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSB7CgkgICAgICBuZXh0SWQgPSB0aGlzLmdl
dFByb3RvdHlwZShpZCk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHdoaWxlICghdGhpcy5pc1R5cGUo
aWQpICYmICEobmV4dElkID0gdGhpcy5kYXRhW2lkXVtuYW1lXSkpIHsKCSAgICAgICAgaWQgPSB0
aGlzLmdldFByb3RvdHlwZShpZCk7CgkgICAgICB9CgkgICAgfQoJICAgIGlmICh0aGlzLmlzVHlw
ZShpZCkpIHJldHVybiBudWxsOwoJICAgIC8vIFRPRE8obWFya2RpdHRtZXIsKTogV2hhdCByZWdy
ZXNzaW9uIHdhcyB0aGlzIGludHJvZHVjZWQgdG8gY2F0Y2g/CgkgICAgLy8gaWYgKCB0eXBlb2Yg
bmV4dElkICE9PSAnbnVtYmVyJyApIGRlYnVnZ2VyOwoJICAgIGlkID0gbmV4dElkOwoJICB9Cgkg
IHJldHVybiBpZCB8fCBudWxsOwoJfTsKCgkvLyBJbnRlcmZhY2UgbWV0aG9kOiBQZXJmb3JtIHBy
b3BlcnR5IGxvb2t1cCBvdmVyIGEgZG90LXNlcGFyYXRlZCBrZXkuCgkvLyBFLmcuLCAubG9va3Vw
KCJmb28uYmFyLmJheiIpIHdpbGwgc3RhcnQgd2l0aCB0aGUgcm9vdCBvYmplY3QsIHRoZW4KCS8v
IHBlcmZvcm0gcHJvcGVydHkgbG9va3VwIGZvciAiZm9vIiwgdGhlbiAiYmFyIiwgdGhlbiAiYmF6
IiwgZmFsbGluZyBiYWNrIG9uCgkvLyBwcm90b3R5cGVzIGFzIG5lY2Vzc2FyeS4KCU9iamVjdEdy
YXBoLnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbiAoa2V5LCBvcHRfcm9vdCkgewoJICB2YXIg
cm9vdCA9IG9wdF9yb290IHx8IHRoaXMucm9vdDsKCSAgcmV0dXJuIHRoaXMubG9va3VwXyhrZXku
c3BsaXQoJy4nKSwgcm9vdCk7Cgl9OwoKCS8vIExvb2sgdXAgbWV0YWRhdGEgZm9yIGEgcHJvcGVy
dHkgYmVsb25nIHRvIHRoZSBnaXZlbiBpZC4KCU9iamVjdEdyYXBoLnByb3RvdHlwZS5sb29rdXBN
ZXRhRGF0YSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgb3B0X2lkKSB7CgkgIHZhciByb290ID0gb3B0
X2lkIHx8IHRoaXMucm9vdDsKCSAgcmV0dXJuICgwLCBfYXNzaWduMi5kZWZhdWx0KSh7fSwgdGhp
cy5tZXRhZGF0YVtyb290XVtwcm9wZXJ0eV0pOwoJfTsKCgkvLyBXaGF0IHRvIHN0b3JlIHdoZW4g
aW52b2tpbmcgdG9KU09OLgoJT2JqZWN0R3JhcGguanNvbktleXMgPSBbJ2JsYWNrbGlzdGVkS2V5
cycsICdkYXRhJywgJ2Vudmlyb25tZW50JywgJ2Z1bmN0aW9ucycsICdrZXknLCAna2V5cycsICdt
ZXRhZGF0YScsICdwcm90b3MnLCAncm9vdCcsICd0aW1lc3RhbXAnLCAndG9TdHJpbmdzJywgJ3R5
cGVzJywgJ3VzZXJBZ2VudCddLnNvcnQoKTsKCgkvLyBTdG9yZSBtaW5pbWFsIGRhdGEgZm9yIHNl
cmlhbGl6YXRpb24uCglPYmplY3RHcmFwaC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkg
ewoJICB2YXIgbyA9IHt9OwoJICB2YXIga2V5cyA9IE9iamVjdEdyYXBoLmpzb25LZXlzOwoJICBm
b3IgKHZhciBpID0gMDsgaSA8IE9iamVjdEdyYXBoLmpzb25LZXlzLmxlbmd0aDsgaSsrKSB7Cgkg
ICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5c1tpXSkpIG9ba2V5c1tpXV0gPSB0aGlzW2tl
eXNbaV1dOwoJICB9CgkgIHJldHVybiBvOwoJfTsKCgkvLyBMb2FkIG1pbmltYWwgZGF0YSBmcm9t
IHNlcmlhbGl6YXRpb24uCglPYmplY3RHcmFwaC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChvKSB7Cgkg
IHZhciBvdiA9IG5ldyBPYmplY3RHcmFwaCgpOwoJICB2YXIga2V5cyA9IE9iamVjdEdyYXBoLmpz
b25LZXlzOwoJICBmb3IgKHZhciBpID0gMDsgaSA8IE9iamVjdEdyYXBoLmpzb25LZXlzLmxlbmd0
aDsgaSsrKSB7CgkgICAgaWYgKG8uaGFzT3duUHJvcGVydHkoa2V5c1tpXSkpIG92W2tleXNbaV1d
ID0gb1trZXlzW2ldXTsKCSAgfQoJICBvdi5pbml0TGF6eURhdGEoKTsKCSAgcmV0dXJuIG92OwoJ
fTsKCgltb2R1bGUuZXhwb3J0cyA9IE9iamVjdEdyYXBoOwoJLyogV0VCUEFDSyBWQVIgSU5KRUNU
SU9OICovfS5jYWxsKGV4cG9ydHMsIChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0oKSkpKQoK
LyoqKi8gfSksCi8qIDE0OCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dl
YnBhY2tfcmVxdWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSB7ICJkZWZhdWx0IjogX193ZWJw
YWNrX3JlcXVpcmVfXygxNDkpLCBfX2VzTW9kdWxlOiB0cnVlIH07CgovKioqLyB9KSwKLyogMTQ5
ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18p
IHsKCglfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MCk7Cgl2YXIgJE9iamVjdCA9IF9fd2VicGFja19y
ZXF1aXJlX18oMTIpLk9iamVjdDsKCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHsKCSAgcmV0dXJuICRPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGl0LCBrZXkpOwoJfTsKCgovKioqLyB9KSwKLyogMTUwICovCi8qKiovIChm
dW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCgkvLyAxOS4x
LjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApCgl2YXIgdG9JT2JqZWN0
ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7Cgl2YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRv
ciA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpLmY7CgoJX193ZWJwYWNrX3JlcXVpcmVfXyg3OCko
J2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHsKCSAgcmV0dXJuIGZ1bmN0
aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7CgkgICAgcmV0dXJuICRnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTsKCSAgfTsKCX0pOwoKCi8q
KiovIH0pLAovKiAxNTEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKCS8q
KgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz
aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4
Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3UgbWF5IG9idGFpbiBh
IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3Jn
L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQg
dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKCSAq
IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhw
cmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu
Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlvbnMgdW5kZXIgdGhl
IExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgaW5zdGFsbGVkSWRzID0gW107CgoJ
Ly8gUHJvdmlkZSBhIHVuaXF1ZSBpZCBmb3IgZXZlcnkgb2JqZWN0LgoJbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihvcHRzKSB7CgkgIG9wdHMgPSBvcHRzIHx8IHt9OwoKCSAgdmFyIGtleSA9IG9w
dHMua2V5IHx8ICcrVUlEJzsKCgkgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5zdGFsbGVkSWRzLmxl
bmd0aDsgaSsrKSB7CgkgICAgaWYgKGluc3RhbGxlZElkc1tpXS5rZXkgPT09IGtleSkgewoJICAg
ICAgaWYgKCFpbnN0YWxsZWRJZHNbaV0uZGF0YSkgdGhyb3cgbmV3IEVycm9yKCdJZCBpbnN0YWxs
IHJlLWVudHJ5Jyk7CgkgICAgICByZXR1cm4gaW5zdGFsbGVkSWRzW2ldLmRhdGE7CgkgICAgfQoJ
ICB9CgkgIHZhciBpbnN0YWxsZWRJZCA9IHtrZXk6IGtleX07CgkgIGluc3RhbGxlZElkcy5wdXNo
KGluc3RhbGxlZElkKTsKCgkgIHZhciBrZXlfXyA9IGtleSArICdfXyc7CgkgIHZhciBzdGFydCA9
IHR5cGVvZiBvcHRzLnN0YXJ0ID09PSAnbnVtYmVyJyA/IG9wdHMuc3RhcnQgOiAxMDAwMDsKCSAg
dmFyIGlzVmFsaWRJZCA9IG9wdHMuaXNWYWxpZElkIHx8IGZ1bmN0aW9uKGlkKSB7CgkgICAgcmV0
dXJuIHR5cGVvZiBpZCA9PT0gJ251bWJlcicgJiYgaWQgPj0gc3RhcnQ7CgkgIH07CgkgIHZhciBu
ZXh0SWQgPSBvcHRzLm5leHRJZCB8fCAoZnVuY3Rpb24oKSB7CgkgICAgLy8gTGVhdmUgc3BhY2Ug
Zm9yICJyZXNlcnZlZCBJRHMiLiBVc2VmdWwgd2hlbiB2YWx1ZXMgbWF5IG1lYW4KCSAgICAvLyAi
b2JqZWN0IGlkIG9yIFtzb21lIG90aGVyIGlkXSIuCgkgICAgdmFyIGlkID0gc3RhcnQ7CgkgICAg
cmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gaWQrKzsgfTsKCSAgfSkoKTsKCgkgIC8vIFNvbWUg
b2JqZWN0cyBjYW5ub3QgYmUgdHJ1c3RlZCB0byB0byBzdG9yZSB0aGVpciBpZCBhcyBhbiBvd24g
cHJvcGVydHkKCSAgLy8gd2l0aG91dCBzdWJzZXF1ZW50IGdldHMgb2YgdGhlIHByb3BlcnR5IGRl
bGVnYXRpbmcgdG8gdGhlaXIgcHJvdG90eXBlLgoJICAvLyBUaGlzIG9jY3VycyBpbiB0aGUgIG5v
bi1bT3ZlcnJpZGVCdWlsdGluc10gY2FzZSBvZiBwbGF0Zm9ybSBvYmplY3RzIHdpdGgKCSAgLy8g
YSBuYW1lZCBwcm9wZXJ0eSBnZXR0ZXIgYW5kIHNldHRlci4KCSAgLy8gSXQgYWxzbyBvY2N1cnMg
b24gc29tZSBzeXN0ZW1zIHdoZXJlIHNwZWNpYWwgb2JqZWN0cyBzdWNoIGFzIHRoZSAibmFtZWQK
CSAgLy8gcHJvcGVydGllcyBvYmplY3QiIGluIEZpcmVmb3ggZG8gbm90IHN1cHBvcnQgT2JqZWN0
LmRlZmluZVByb3BlcnR5KCkuCgkgIC8vIFRvIGRlYWwgd2l0aCBzdWNoIGNhc2VzLCBzdG9yZSBh
IHNob3J0IGxpc3Qgb2YgKG9iamVjdCwgaWQpIHBhaXJzLgoJICB2YXIgb2JqZWN0SWRQYWlycyA9
IFtdOwoJICBmdW5jdGlvbiBnZXRQYWlyZWRJZChvKSB7CgkgICAgZm9yICggdmFyIGkgPSAwOyBp
IDwgb2JqZWN0SWRQYWlycy5sZW5ndGg7IGkrKyApIHsKCSAgICAgIGlmICggbyA9PT0gb2JqZWN0
SWRQYWlyc1tpXVswXSApIHJldHVybiBvYmplY3RJZFBhaXJzW2ldWzFdOwoJICAgIH0KCgkgICAg
dmFyIGlkID0gbmV4dElkKCk7CgkgICAgb2JqZWN0SWRQYWlycy5wdXNoKFtvLCBpZF0pOwoJICAg
IHJldHVybiBpZDsKCSAgfQoKCSAgdmFyIGRlc2NyaXB0b3IgPSB7CgkgICAgZ2V0OiBmdW5jdGlv
bigpIHsKCSAgICAgIGlmICggISB0aGlzLmhhc093blByb3BlcnR5KGtleV9fKSApIHsKCSAgICAg
ICAgdHJ5IHsKCSAgICAgICAgICB2YXIgZXhpc3RpbmdMb2NhbElkID0gdGhpc1trZXlfX107Cgkg
ICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleV9fLCB7CgkgICAgICAgICAg
ICB2YWx1ZTogbmV4dElkKCksCgkgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKCSAgICAg
ICAgICB9KTsKCSAgICAgICAgICBpZiAoIGV4aXN0aW5nTG9jYWxJZCA9PT0gdGhpc1trZXlfX10g
KSByZXR1cm4gZ2V0UGFpcmVkSWQodGhpcyk7CgkgICAgICAgIH0gY2F0Y2ggKGUpIHsKCSAgICAg
ICAgICByZXR1cm4gZ2V0UGFpcmVkSWQodGhpcyk7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICAg
IC8vIEdldCBwYWlyZWQgSWQgaWYgb3duIHByb3BlcnR5IG9mIHRoaXNba2V5X19dIHdhcyBub3Qg
Y3JlYXRlZC4KCSAgICAgIC8vIEZvciBleGFtcGxlOiBzZXNzaW9uU3RvcmFnZSBhbmQgbG9jYWxT
dG9yYWdlIGFyZSBzb21lCgkgICAgICAvLyBzcGVjaWFsIG9iamVjdHMgc2hhcmVkIGFtb25nIHBh
Z2VzLiBUaGUgK1VJRCB3aWxsIGJlIHN0b3JlZAoJICAgICAgLy8gaW4gdGhlIHN0b3JhZ2Ugb2Jq
ZWN0IGlmIHRoZSBicm93c2VyIG9yIHBhZ2UgaXMgbm90IGNsb3NlZC4KCSAgICAgIC8vIFRoaXMg
cmVzdWx0cyB0byBlcnJvciBpbiBtYW51YWwgb2JqZWN0IGdyYXBoIGNvbGxlY3Rpb24uCgkgICAg
ICBpZiAodGhpcy5fX3Byb3RvX18gJiYgdGhpcy5fX3Byb3RvX19ba2V5XSA9PT0gdGhpc1trZXlf
X10pIHsKCSAgICAgICAgcmV0dXJuIGdldFBhaXJlZElkKHRoaXMpOwoJICAgICAgfSBlbHNlIHsK
CSAgICAgICAgcmV0dXJuIHRoaXNba2V5X19dOwoJICAgICAgfQoJICAgIH0sCgkgICAgZW51bWVy
YWJsZTogZmFsc2UsCgkgIH07CgoJICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3Rv
dHlwZSwga2V5LCBkZXNjcmlwdG9yKTsKCgkgIGZ1bmN0aW9uIGdldElkKHYpIHsKCSAgICAvLyBV
c3VhbCBjYXNlOiBwcm9wZXJ0eSBnZW5lcmF0ZXMgaWQuCgkgICAgdmFyIGlkID0gdltrZXldOwoJ
ICAgIGlmICggaXNWYWxpZElkKGlkKSApIHJldHVybiBpZDsKCgkgICAgY29uc29sZS5sb2coJyEh
ISBFeHRyYSBpZCBwcm9wZXJ0eSBkZWZpbmUnKTsKCgkgICAgLy8gQ29ybmVyIGNhc2U6IE9iamVj
dCBkb2Vzbid0IGRlc2NlbmQgZnJvbSBPYmplY3QucHJvdG90eXBlLiBEZWZpbmUKCSAgICAvLyBw
cm9wZXJ0eSBtYW51YWxseS4KCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodiwga2V5LCBkZXNj
cmlwdG9yKTsKCSAgICBpZCA9IHZba2V5XTsKCSAgICBpZiAoIGlzVmFsaWRJZChpZCkgKSByZXR1
cm4gaWQ7CgoJICAgIGNvbnNvbGUubG9nKCchISEgRmFsbGJhY2sgb24gcGFpcmVkIGlkJyk7CgoJ
ICAgIC8vIExhc3QgZGl0Y2ggZWZmb3J0OiBKdXN0IHN0b3JlIGEgcGFpcmVkIGlkLgoJICAgIHJl
dHVybiBnZXRQYWlyZWRJZCh2KTsKCSAgfQoKCSAgaW5zdGFsbGVkSWQuZGF0YSA9IHsKCSAgICBr
ZXk6IGtleSwKCSAgICBrZXlfXzoga2V5X18sCgkgICAgaXNWYWxpZElkOiBpc1ZhbGlkSWQsCgkg
ICAgbmV4dElkOiBuZXh0SWQsCgkgICAgZ2V0SWQ6IGdldElkLAoJICB9OwoKCSAgcmV0dXJuIGlu
c3RhbGxlZElkLmRhdGE7Cgl9OwoKCi8qKiovIH0pLAovKiAxNTIgKi8KLyoqKi8gKGZ1bmN0aW9u
KG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8qKgoJICogQGxpY2Vu
c2UKCSAqIENvcHlyaWdodCAyMDE4IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkg
KgoJICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7CgkgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCgkgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKCSAqCgkgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCgkgKgoJICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgoJICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAoJICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkg
Ki8KCSd1c2Ugc3RyaWN0JzsKCgl2YXIgX2dldEl0ZXJhdG9yMiA9IF9fd2VicGFja19yZXF1aXJl
X18oNzIpOwoKCXZhciBfZ2V0SXRlcmF0b3IzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0
SXRlcmF0b3IyKTsKCgl2YXIgX2NyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTsKCgl2
YXIgX2NyZWF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGUpOwoKCXZhciBfZ2V0
T3duUHJvcGVydHlOYW1lcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTsKCgl2YXIgX2dldE93
blByb3BlcnR5TmFtZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZ2V0T3duUHJvcGVydHlO
YW1lcyk7CgoJZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9i
aiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCgl2YXIgT2Jq
ZWN0R3JhcGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7CgoJLy8gQnJvd3Nlck9iamVjdEdy
YXBoIGlzIGFuIE9iamVjdEdyYXBoIHdpdGggY3VzdG9tIGFwcGxpY2F0aW9uIGxvZ2ljIHRvIHBy
b2JlCgkvLyBmb3IgaW50ZXJmYWNlIG1lbWJlcnMgdGhhdCBtYXkgZ28gdW5kZXRlY3RlZCB1c2lu
ZyBvYmplY3QgcmVmbGVjdGlvbi4KCWZ1bmN0aW9uIEJyb3dzZXJPYmplY3RHcmFwaChvcHRzKSB7
CgkgIHRoaXMuaW5pdChvcHRzIHx8IHt9KTsKCX07CgoJLy8gQ29weSBjbGFzcy1sZXZlbCBwcm9w
ZXJ0aWVzIGZyb20gT2JqZWN0R3JhcGguCgl2YXIgb2dDbGFzc1Byb3BlcnRpZXMgPSAoMCwgX2dl
dE93blByb3BlcnR5TmFtZXMyLmRlZmF1bHQpKE9iamVjdEdyYXBoKTsKCXZhciBib2dDbGFzc1By
b3BlcnRpZXMgPSAoMCwgX2dldE93blByb3BlcnR5TmFtZXMyLmRlZmF1bHQpKEJyb3dzZXJPYmpl
Y3RHcmFwaCk7Cgl2YXIgZXh0cmFDbGFzc1Byb3BlcnRpZXMgPSBvZ0NsYXNzUHJvcGVydGllcy5m
aWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHsKCSAgcmV0dXJuIGJvZ0NsYXNzUHJvcGVydGllcy5pbmRl
eE9mKG5hbWUpID09PSAtMTsKCX0pOwoJdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0
cnVlOwoJdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7Cgl2YXIgX2l0ZXJhdG9yRXJyb3Ig
PSB1bmRlZmluZWQ7CgoJdHJ5IHsKCSAgZm9yICh2YXIgX2l0ZXJhdG9yID0gKDAsIF9nZXRJdGVy
YXRvcjMuZGVmYXVsdCkoZXh0cmFDbGFzc1Byb3BlcnRpZXMpLCBfc3RlcDsgIShfaXRlcmF0b3JO
b3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVy
YXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7CgkgICAgdmFyIGtleSA9IF9zdGVwLnZhbHVl
OwoKCSAgICBCcm93c2VyT2JqZWN0R3JhcGhba2V5XSA9IE9iamVjdEdyYXBoW2tleV07CgkgIH0K
CX0gY2F0Y2ggKGVycikgewoJICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7CgkgIF9pdGVyYXRv
ckVycm9yID0gZXJyOwoJfSBmaW5hbGx5IHsKCSAgdHJ5IHsKCSAgICBpZiAoIV9pdGVyYXRvck5v
cm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikgewoJICAgICAgX2l0ZXJhdG9yLnJl
dHVybigpOwoJICAgIH0KCSAgfSBmaW5hbGx5IHsKCSAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3Ip
IHsKCSAgICAgIHRocm93IF9pdGVyYXRvckVycm9yOwoJICAgIH0KCSAgfQoJfQoKCUJyb3dzZXJP
YmplY3RHcmFwaC5wcm90b3R5cGUgPSAoMCwgX2NyZWF0ZTIuZGVmYXVsdCkoT2JqZWN0R3JhcGgu
cHJvdG90eXBlKTsKCglCcm93c2VyT2JqZWN0R3JhcGgucHJvdG90eXBlLmlzQ1NTU3R5bGVEZWNs
XyA9IHR5cGVvZiBDU1NTdHlsZURlY2xhcmF0aW9uID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24g
KG8pIHsKCSAgcmV0dXJuIG8gPT09IENTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlIHx8IG8g
aW5zdGFuY2VvZiBDU1NTdHlsZURlY2xhcmF0aW9uOwoJfSA6IGZ1bmN0aW9uIChvKSB7CgkgIHJl
dHVybiBvLmJhY2tncm91bmQgIT09IHVuZGVmaW5lZCAmJiBvLmJvcmRlciAhPT0gdW5kZWZpbmVk
ICYmIG8uY29sb3IgIT09IHVuZGVmaW5lZCAmJiBvLm1hcmdpbiAhPT0gdW5kZWZpbmVkICYmIG8u
cGFkZGluZyAhPT0gdW5kZWZpbmVkOwoJfTsKCglCcm93c2VyT2JqZWN0R3JhcGgucHJvdG90eXBl
LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiAobykgewoJICBpZiAoIXRoaXMuaXNDU1NT
dHlsZURlY2xfKG8pKSB7CgkgICAgcmV0dXJuIE9iamVjdEdyYXBoLnByb3RvdHlwZS5nZXRPd25Q
cm9wZXJ0eU5hbWVzLmNhbGwodGhpcywgbyk7CgkgIH0KCgkgIHZhciBwcm9wTmFtZXMgPSAoMCwg
X2dldE93blByb3BlcnR5TmFtZXMyLmRlZmF1bHQpKG8pOwoJICB2YXIgbmV3UHJvcE5hbWVzID0g
W107CgkgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7CgkgIHZhciBfZGlk
SXRlcmF0b3JFcnJvcjIgPSBmYWxzZTsKCSAgdmFyIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5l
ZDsKCgkgIHRyeSB7CgkgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9ICgwLCBfZ2V0SXRlcmF0b3Iz
LmRlZmF1bHQpKHByb3BOYW1lcyksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9u
MiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENv
bXBsZXRpb24yID0gdHJ1ZSkgewoJICAgICAgdmFyIHByb3BOYW1lID0gX3N0ZXAyLnZhbHVlOwoK
CSAgICAgIGlmIChwcm9wTmFtZS5zdGFydHNXaXRoKCd3ZWJraXQnKSkgY29udGludWU7CgoJICAg
ICAgdmFyIHdlYmtpdE5hbWUgPSAnd2Via2l0JyArIHByb3BOYW1lLmNoYXJBdCgwKS50b1VwcGVy
Q2FzZSgpICsgcHJvcE5hbWUuc3Vic3RyKDEpOwoJICAgICAgaWYgKHByb3BOYW1lcy5pbmRleE9m
KHdlYmtpdE5hbWUpID49IDApIGNvbnRpbnVlOwoJICAgICAgaWYgKG5ld1Byb3BOYW1lcy5pbmRl
eE9mKHdlYmtpdE5hbWUpID49IDApIGNvbnRpbnVlOwoKCSAgICAgIHRyeSB7CgkgICAgICAgIHZh
ciB2YWx1ZSA9IG9bd2Via2l0TmFtZV07CgkgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVk
KSB7CgkgICAgICAgICAgLy8gRm91bmQgImhpZGRlbiIgd2Via2l0LXByZWZpeGVkIENTU1N0eWxl
RGVjbGFyYXRpb24KCSAgICAgICAgICAvLyBwcm9wZXJ0eS4KCSAgICAgICAgICBuZXdQcm9wTmFt
ZXMucHVzaCh3ZWJraXROYW1lKTsKCSAgICAgICAgfQoJICAgICAgfSBjYXRjaCAoZSkgewoJICAg
ICAgICAvLyBBc3N1bXB0aW9uOiBFcnJvciBpcyAiSWxsZWdhbCBpbnZvY2F0aW9uIiBvZiBnZXR0
ZXIgb24KCSAgICAgICAgLy8gcHJvdG90eXBlLgoJICAgICAgICBjb25zb2xlLndhcm4oIlRyZWF0
aW5nIGVycm9yIGFjY2Vzc2luZyIsIHdlYmtpdE5hbWUsICJhcyBzaWduIG9mIHByb3BlcnR5Iiwg
ZSk7CgkgICAgICAgIG5ld1Byb3BOYW1lcy5wdXNoKHdlYmtpdE5hbWUpOwoJICAgICAgfQoJICAg
IH0KCSAgfSBjYXRjaCAoZXJyKSB7CgkgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTsKCSAg
ICBfaXRlcmF0b3JFcnJvcjIgPSBlcnI7CgkgIH0gZmluYWxseSB7CgkgICAgdHJ5IHsKCSAgICAg
IGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4pIHsK
CSAgICAgICAgX2l0ZXJhdG9yMi5yZXR1cm4oKTsKCSAgICAgIH0KCSAgICB9IGZpbmFsbHkgewoJ
ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMikgewoJICAgICAgICB0aHJvdyBfaXRlcmF0b3JF
cnJvcjI7CgkgICAgICB9CgkgICAgfQoJICB9CgoJICByZXR1cm4gcHJvcE5hbWVzLmNvbmNhdChu
ZXdQcm9wTmFtZXMpOwoJfTsKCgltb2R1bGUuZXhwb3J0cyA9IEJyb3dzZXJPYmplY3RHcmFwaDsK
Ci8qKiovIH0pLAovKiAxNTMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193
ZWJwYWNrX3JlcXVpcmVfXykgewoKCS8qKgoJICogQGxpY2Vuc2UKCSAqIENvcHlyaWdodCAyMDE2
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgkgKgoJICogTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CgkgKiB5b3Ug
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuCgkgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCSAqCgkgKiAg
ICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgkgKgoJICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQoJICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKCSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgoJICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAoJ
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgkgKi8KCSd1c2Ugc3RyaWN0JzsKCgl2
YXIgX3JlZ2VuZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTQpOwoKCXZhciBfcmVnZW5l
cmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVnZW5lcmF0b3IpOwoKCXZhciBfZ2V0
SXRlcmF0b3IyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7CgoJdmFyIF9nZXRJdGVyYXRvcjMg
PSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9nZXRJdGVyYXRvcjIpOwoKCWZ1bmN0aW9uIF9pbnRl
cm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBv
YmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CgoJdmFyIF9tYXJrZWQgPSAvKiNfX1BVUkVfXyovX3Jl
Z2VuZXJhdG9yMi5kZWZhdWx0Lm1hcmsob2JqZWN0R3JhcGhHZW5lcmF0b3IpLAoJICAgIF9tYXJr
ZWQyID0gLyojX19QVVJFX18qL19yZWdlbmVyYXRvcjIuZGVmYXVsdC5tYXJrKG9iamVjdE93bkdl
bmVyYXRvcik7CgoJZnVuY3Rpb24gb2JqZWN0R3JhcGhHZW5lcmF0b3IoZ3JhcGgpIHsKCSAgdmFy
IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24sIF9kaWRJdGVyYXRvckVycm9yLCBfaXRlcmF0b3JF
cnJvciwgX2l0ZXJhdG9yLCBfc3RlcCwgaWQ7CgoJICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5kZWZh
dWx0LndyYXAoZnVuY3Rpb24gb2JqZWN0R3JhcGhHZW5lcmF0b3IkKF9jb250ZXh0KSB7CgkgICAg
d2hpbGUgKDEpIHsKCSAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQp
IHsKCSAgICAgICAgY2FzZSAwOgoJICAgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24g
PSB0cnVlOwoJICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7CgkgICAgICAgICAg
X2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7CgkgICAgICAgICAgX2NvbnRleHQucHJldiA9IDM7
CgkgICAgICAgICAgX2l0ZXJhdG9yID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoZ3JhcGgu
Z2V0QWxsSWRzKCkpOwoKCSAgICAgICAgY2FzZSA1OgoJICAgICAgICAgIGlmIChfaXRlcmF0b3JO
b3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSkgewoJICAg
ICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEyOwoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAg
ICAgfQoKCSAgICAgICAgICBpZCA9IF9zdGVwLnZhbHVlOwoJICAgICAgICAgIF9jb250ZXh0Lm5l
eHQgPSA5OwoJICAgICAgICAgIHJldHVybiBpZDsKCgkgICAgICAgIGNhc2UgOToKCSAgICAgICAg
ICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTsKCSAgICAgICAgICBfY29udGV4dC5u
ZXh0ID0gNTsKCSAgICAgICAgICBicmVhazsKCgkgICAgICAgIGNhc2UgMTI6CgkgICAgICAgICAg
X2NvbnRleHQubmV4dCA9IDE4OwoJICAgICAgICAgIGJyZWFrOwoKCSAgICAgICAgY2FzZSAxNDoK
CSAgICAgICAgICBfY29udGV4dC5wcmV2ID0gMTQ7CgkgICAgICAgICAgX2NvbnRleHQudDAgPSBf
Y29udGV4dFsnY2F0Y2gnXSgzKTsKCSAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7
CgkgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBfY29udGV4dC50MDsKCgkgICAgICAgIGNhc2Ug
MTg6CgkgICAgICAgICAgX2NvbnRleHQucHJldiA9IDE4OwoJICAgICAgICAgIF9jb250ZXh0LnBy
ZXYgPSAxOTsKCgkgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9p
dGVyYXRvci5yZXR1cm4pIHsKCSAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTsKCSAgICAg
ICAgICB9CgoJICAgICAgICBjYXNlIDIxOgoJICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAyMTsK
CgkgICAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcikgewoJICAgICAgICAgICAgX2NvbnRl
eHQubmV4dCA9IDI0OwoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgICAgfQoKCSAgICAgICAg
ICB0aHJvdyBfaXRlcmF0b3JFcnJvcjsKCgkgICAgICAgIGNhc2UgMjQ6CgkgICAgICAgICAgcmV0
dXJuIF9jb250ZXh0LmZpbmlzaCgyMSk7CgoJICAgICAgICBjYXNlIDI1OgoJICAgICAgICAgIHJl
dHVybiBfY29udGV4dC5maW5pc2goMTgpOwoKCSAgICAgICAgY2FzZSAyNjoKCSAgICAgICAgY2Fz
ZSAnZW5kJzoKCSAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwoJICAgICAgfQoJICAg
IH0KCSAgfSwgX21hcmtlZCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0p
OwoJfQoKCWZ1bmN0aW9uIG9iamVjdE93bkdlbmVyYXRvcihncmFwaCwgaWQpIHsKCSAgdmFyIF9p
dGVyYXRvck5vcm1hbENvbXBsZXRpb24yLCBfZGlkSXRlcmF0b3JFcnJvcjIsIF9pdGVyYXRvckVy
cm9yMiwgX2l0ZXJhdG9yMiwgX3N0ZXAyLCBrZXk7CgoJICByZXR1cm4gX3JlZ2VuZXJhdG9yMi5k
ZWZhdWx0LndyYXAoZnVuY3Rpb24gb2JqZWN0T3duR2VuZXJhdG9yJChfY29udGV4dDIpIHsKCSAg
ICB3aGlsZSAoMSkgewoJICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5u
ZXh0KSB7CgkgICAgICAgIGNhc2UgMDoKCSAgICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0
aW9uMiA9IHRydWU7CgkgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gZmFsc2U7CgkgICAg
ICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gdW5kZWZpbmVkOwoJICAgICAgICAgIF9jb250ZXh0Mi5w
cmV2ID0gMzsKCSAgICAgICAgICBfaXRlcmF0b3IyID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVs
dCkoZ3JhcGguZ2V0T2JqZWN0S2V5cyhpZCkpOwoKCSAgICAgICAgY2FzZSA1OgoJICAgICAgICAg
IGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5l
eHQoKSkuZG9uZSkgewoJICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMjsKCSAgICAgICAg
ICAgIGJyZWFrOwoJICAgICAgICAgIH0KCgkgICAgICAgICAga2V5ID0gX3N0ZXAyLnZhbHVlOwoJ
ICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gOTsKCSAgICAgICAgICByZXR1cm4geyBrZXk6IGtl
eSwgdmFsdWU6IGdyYXBoLmxvb2t1cChrZXksIGlkKSB9OwoKCSAgICAgICAgY2FzZSA5OgoJICAg
ICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTsKCSAgICAgICAgICBfY29u
dGV4dDIubmV4dCA9IDU7CgkgICAgICAgICAgYnJlYWs7CgoJICAgICAgICBjYXNlIDEyOgoJICAg
ICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTg7CgkgICAgICAgICAgYnJlYWs7CgoJICAgICAgICBj
YXNlIDE0OgoJICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gMTQ7CgkgICAgICAgICAgX2NvbnRl
eHQyLnQwID0gX2NvbnRleHQyWydjYXRjaCddKDMpOwoJICAgICAgICAgIF9kaWRJdGVyYXRvckVy
cm9yMiA9IHRydWU7CgkgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gX2NvbnRleHQyLnQwOwoK
CSAgICAgICAgY2FzZSAxODoKCSAgICAgICAgICBfY29udGV4dDIucHJldiA9IDE4OwoJICAgICAg
ICAgIF9jb250ZXh0Mi5wcmV2ID0gMTk7CgoJICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFs
Q29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4pIHsKCSAgICAgICAgICAgIF9pdGVyYXRv
cjIucmV0dXJuKCk7CgkgICAgICAgICAgfQoKCSAgICAgICAgY2FzZSAyMToKCSAgICAgICAgICBf
Y29udGV4dDIucHJldiA9IDIxOwoKCSAgICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMikg
ewoJICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyNDsKCSAgICAgICAgICAgIGJyZWFrOwoJ
ICAgICAgICAgIH0KCgkgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyOwoKCSAgICAgICAg
Y2FzZSAyNDoKCSAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmZpbmlzaCgyMSk7CgoJICAgICAg
ICBjYXNlIDI1OgoJICAgICAgICAgIHJldHVybiBfY29udGV4dDIuZmluaXNoKDE4KTsKCgkgICAg
ICAgIGNhc2UgMjY6CgkgICAgICAgIGNhc2UgJ2VuZCc6CgkgICAgICAgICAgcmV0dXJuIF9jb250
ZXh0Mi5zdG9wKCk7CgkgICAgICB9CgkgICAgfQoJICB9LCBfbWFya2VkMiwgdGhpcywgW1szLCAx
NCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pOwoJfQoKCS8vIGZ1bmN0aW9uKiBvYmplY3RHZW5l
cmF0b3IoZ3JhcGgsIGlkKSB7CgkvLyAgIHZhciBrZXlzID0gW107CgkvLyAgIHZhciBwcm90b0lk
ID0gaWQ7CgkvLyAgIHdoaWxlICghZ3JhcGguaXNUeXBlKHByb3RvSWQpKSB7CgkvLyAgICAga2V5
cyA9IF8uc29ydGVkVW5pcShrZXlzLmNvbmNhdChncmFwaC5nZXRPYmplY3RLZXlzKHByb3RvSWQp
KSk7CgkvLyAgICAgcHJvdG9JZCA9IGdyYXBoLmdldFByb3RvdHlwZShwcm90b0lkKTsKCS8vICAg
fQoJLy8gICBmb3IgKGxldCBrZXkgb2Yga2V5cykKCS8vICAgICB5aWVsZCB7a2V5OiBrZXksIHZh
bHVlOiBncmFwaD4ubG9va3VwKGtleSwgaWQpfTsKCS8vIH0KCglmdW5jdGlvbiBhbnlBbnlHcmFw
aE1hdGNoZXIoaWQxLCBnMSwgZzIpIHsKCSAgcmV0dXJuIGcxLmdldEtleXMoaWQxKS5zb21lKGZ1
bmN0aW9uIChrZXkxKSB7CgkgICAgcmV0dXJuIGcyLmdldEFsbEtleXNNYXAoKVtrZXkxXTsKCSAg
fSk7Cgl9CgoJZnVuY3Rpb24gZmlyc3RBbnlHcmFwaE1hdGNoZXIoaWQxLCBnMSwgZzIpIHsKCSAg
cmV0dXJuICEhZzIuZ2V0QWxsS2V5c01hcCgpW2cxLmdldFNob3J0ZXN0S2V5KGlkMSldOwoJfQoK
CWZ1bmN0aW9uIGludGVyc2VjdGlvbklkczEoZzEsIGcyKSB7CgkgIHZhciBtYXRjaCA9IGFyZ3Vt
ZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRz
WzJdIDogYW55QW55R3JhcGhNYXRjaGVyOwoKCSAgdmFyIGdlbjEgPSBvYmplY3RHcmFwaEdlbmVy
YXRvcihnMSk7CgkgIHZhciByZXQgPSBbXTsKCSAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRp
b24zID0gdHJ1ZTsKCSAgdmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlOwoJICB2YXIgX2l0
ZXJhdG9yRXJyb3IzID0gdW5kZWZpbmVkOwoKCSAgdHJ5IHsKCSAgICBmb3IgKHZhciBfaXRlcmF0
b3IzID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkoZ2VuMSksIF9zdGVwMzsgIShfaXRlcmF0
b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7
IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkgewoJICAgICAgdmFyIGlkMSA9IF9z
dGVwMy52YWx1ZTsKCgkgICAgICBpZiAobWF0Y2goaWQxLCBnMSwgZzIpKSByZXQucHVzaChpZDEp
OwoJICAgIH0KCSAgfSBjYXRjaCAoZXJyKSB7CgkgICAgX2RpZEl0ZXJhdG9yRXJyb3IzID0gdHJ1
ZTsKCSAgICBfaXRlcmF0b3JFcnJvcjMgPSBlcnI7CgkgIH0gZmluYWxseSB7CgkgICAgdHJ5IHsK
CSAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgJiYgX2l0ZXJhdG9yMy5yZXR1
cm4pIHsKCSAgICAgICAgX2l0ZXJhdG9yMy5yZXR1cm4oKTsKCSAgICAgIH0KCSAgICB9IGZpbmFs
bHkgewoJICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykgewoJICAgICAgICB0aHJvdyBfaXRl
cmF0b3JFcnJvcjM7CgkgICAgICB9CgkgICAgfQoJICB9CgoJICByZXR1cm4gcmV0OwoJfQoKCWZ1
bmN0aW9uIGRpZmZlcmVuY2VJZHMxKGcxLCBnMikgewoJICB2YXIgbWF0Y2ggPSBhcmd1bWVudHMu
bGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6
IGFueUFueUdyYXBoTWF0Y2hlcjsKCgkgIHZhciBkaWZmQXJyYXkgPSBbXTsKCSAgdmFyIG1pbnVl
bmRBcnIgPSBnMS5nZXRBbGxJZHMoKTsKCSAgdmFyIHN1YnRyYWhlbmRBcnIgPSBpbnRlcnNlY3Rp
b25JZHMxKGcxLCBnMiwgbWF0Y2gpOwoJICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbnVlbmRBcnIu
bGVuZ3RoOyBpKyspIHsKCSAgICBpZiAoc3VidHJhaGVuZEFyci5pbmRleE9mKG1pbnVlbmRBcnJb
aV0pID09PSAtMSkgewoJICAgICAgZGlmZkFycmF5LnB1c2gobWludWVuZEFycltpXSk7CgkgICAg
fQoJICB9CgkgIHJldHVybiBkaWZmQXJyYXk7Cgl9CgoJZnVuY3Rpb24gbG9va3VwRXEoaWQxLCBr
ZXksIGcxLCBnMikgewoJICB2YXIgdmFsdWUxID0gZzEubG9va3VwKGtleSwgaWQxKTsKCSAgdmFy
IHZhbHVlMiA9IGcyLmxvb2t1cChnMS5nZXRTaG9ydGVzdEtleShpZDEpICsgJy4nICsga2V5KTsK
CSAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyOwoJfQoKCWZ1bmN0aW9uIGxvb2t1cE5lcShpZDEs
IGtleSwgZzEsIGcyKSB7CgkgIHJldHVybiAhbG9va3VwRXEoaWQxLCBrZXksIGcxLCBnMik7Cgl9
CgoJZnVuY3Rpb24gbWF0Y2hQcmltaXRpdmVzKGcxLCBnMikgewoJICB2YXIgbWF0Y2ggPSBhcmd1
bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50
c1syXSA6IGxvb2t1cEVxOwoKCSAgdmFyIHByaW1pdGl2ZXMgPSBbXTsKCSAgdmFyIF9pdGVyYXRv
ck5vcm1hbENvbXBsZXRpb240ID0gdHJ1ZTsKCSAgdmFyIF9kaWRJdGVyYXRvckVycm9yNCA9IGZh
bHNlOwoJICB2YXIgX2l0ZXJhdG9yRXJyb3I0ID0gdW5kZWZpbmVkOwoKCSAgdHJ5IHsKCSAgICBm
b3IgKHZhciBfaXRlcmF0b3I0ID0gKDAsIF9nZXRJdGVyYXRvcjMuZGVmYXVsdCkob2JqZWN0R3Jh
cGhHZW5lcmF0b3IoZzEpKSwgX3N0ZXA0OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0g
KF9zdGVwNCA9IF9pdGVyYXRvcjQubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxl
dGlvbjQgPSB0cnVlKSB7CgkgICAgICB2YXIgaWQxID0gX3N0ZXA0LnZhbHVlOwoJICAgICAgdmFy
IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZTsKCSAgICAgIHZhciBfZGlkSXRlcmF0
b3JFcnJvcjUgPSBmYWxzZTsKCSAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjUgPSB1bmRlZmluZWQ7
CgoJICAgICAgdHJ5IHsKCSAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yNSA9ICgwLCBfZ2V0SXRl
cmF0b3IzLmRlZmF1bHQpKG9iamVjdE93bkdlbmVyYXRvcihnMSwgaWQxKSksIF9zdGVwNTsgIShf
aXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IChfc3RlcDUgPSBfaXRlcmF0b3I1Lm5leHQoKSku
ZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZSkgewoJICAgICAgICAgIHZh
ciBfc3RlcDUkdmFsdWUgPSBfc3RlcDUudmFsdWUsCgkgICAgICAgICAgICAgIGtleSA9IF9zdGVw
NSR2YWx1ZS5rZXksCgkgICAgICAgICAgICAgIHZhbHVlID0gX3N0ZXA1JHZhbHVlLnZhbHVlOwoK
CSAgICAgICAgICBpZiAoZzEuaXNUeXBlKHZhbHVlKSAmJiBtYXRjaChpZDEsIGtleSwgZzEsIGcy
KSkgewoJICAgICAgICAgICAgcHJpbWl0aXZlcy5wdXNoKHsgaWQ6IGlkMSwga2V5OiBrZXkgfSk7
CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9IGNhdGNoIChlcnIpIHsKCSAgICAgICAg
X2RpZEl0ZXJhdG9yRXJyb3I1ID0gdHJ1ZTsKCSAgICAgICAgX2l0ZXJhdG9yRXJyb3I1ID0gZXJy
OwoJICAgICAgfSBmaW5hbGx5IHsKCSAgICAgICAgdHJ5IHsKCSAgICAgICAgICBpZiAoIV9pdGVy
YXRvck5vcm1hbENvbXBsZXRpb241ICYmIF9pdGVyYXRvcjUucmV0dXJuKSB7CgkgICAgICAgICAg
ICBfaXRlcmF0b3I1LnJldHVybigpOwoJICAgICAgICAgIH0KCSAgICAgICAgfSBmaW5hbGx5IHsK
CSAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3I1KSB7CgkgICAgICAgICAgICB0aHJvdyBf
aXRlcmF0b3JFcnJvcjU7CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoJ
ICB9IGNhdGNoIChlcnIpIHsKCSAgICBfZGlkSXRlcmF0b3JFcnJvcjQgPSB0cnVlOwoJICAgIF9p
dGVyYXRvckVycm9yNCA9IGVycjsKCSAgfSBmaW5hbGx5IHsKCSAgICB0cnkgewoJICAgICAgaWYg
KCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCAmJiBfaXRlcmF0b3I0LnJldHVybikgewoJICAg
ICAgICBfaXRlcmF0b3I0LnJldHVybigpOwoJICAgICAgfQoJICAgIH0gZmluYWxseSB7CgkgICAg
ICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3I0KSB7CgkgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9y
NDsKCSAgICAgIH0KCSAgICB9CgkgIH0KCgkgIHJldHVybiBwcmltaXRpdmVzOwoJfQoKCWZ1bmN0
aW9uIGludGVyc2VjdGlvbihnMSwgZzIpIHsKCSAgdmFyIG1hdGNoID0gYXJndW1lbnRzLmxlbmd0
aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBhbnlB
bnlHcmFwaE1hdGNoZXI7CgoJICB2YXIgZzMgPSBnMS5jbG9uZVdpdGhvdXQoZGlmZmVyZW5jZUlk
czEoZzEsIGcyLCBtYXRjaCkpOwoJICByZXR1cm4gZzMucmVtb3ZlUHJpbWl0aXZlcyhtYXRjaFBy
aW1pdGl2ZXMoZzMsIGcyLCBsb29rdXBOZXEpKTsKCX0KCglmdW5jdGlvbiBkaWZmZXJlbmNlKGcx
LCBnMikgewoJICB2YXIgbWF0Y2ggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNb
Ml0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGFueUFueUdyYXBoTWF0Y2hlcjsKCgkg
IHZhciBnMyA9IGcxLmNsb25lV2l0aG91dChpbnRlcnNlY3Rpb25JZHMxKGcxLCBnMiwgbWF0Y2gp
KTsKCSAgcmV0dXJuIGczLnJlbW92ZVByaW1pdGl2ZXMobWF0Y2hQcmltaXRpdmVzKGczLCBnMiwg
bG9va3VwRXEpKTsKCX0KCglmdW5jdGlvbiBpbnRlcnNlY3REaWZmZXJlbmNlKGluR3JhcGhzLCBl
eEdyYXBocykgewoJICB2YXIgbWF0Y2ggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVu
dHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGFueUFueUdyYXBoTWF0Y2hlcjsK
CgkgIC8vIE11c3Qgc3RhcnQgd2l0aCBzb21lIGdyYXBoLgoJICBjb25zb2xlLmFzc2VydChpbkdy
YXBocy5sZW5ndGggPiAwKTsKCSAgLy8gRWRnZSBjYXNlOiBDbG9uZSBsb25lIGdyYXBoIHdoZW4g
bm8gb3RoZXIgZ3JhcGhzIHBhc3NlZCBpbi4KCSAgaWYgKGluR3JhcGhzLmxlbmd0aCA9PT0gMSAm
JiBleEdyYXBocy5sZW5ndGggPT09IDApIHJldHVybiBpbkdyYXBoc1swXS5jbG9uZSgpOwoKCSAg
cmV0dXJuIGV4R3JhcGhzLnJlZHVjZShmdW5jdGlvbiAoZzEsIGcyKSB7CgkgICAgcmV0dXJuIGRp
ZmZlcmVuY2UoZzEsIGcyLCBtYXRjaCk7CgkgIH0sIGluR3JhcGhzLnJlZHVjZShmdW5jdGlvbiAo
ZzEsIGcyKSB7CgkgICAgcmV0dXJuIGludGVyc2VjdGlvbihnMSwgZzIsIG1hdGNoKTsKCSAgfSkp
OwoJfQoKCW1vZHVsZS5leHBvcnRzID0gewoJICBhbnlBbnlHcmFwaE1hdGNoZXI6IGFueUFueUdy
YXBoTWF0Y2hlciwKCSAgZmlyc3RBbnlHcmFwaE1hdGNoZXI6IGZpcnN0QW55R3JhcGhNYXRjaGVy
LAoJICBpbnRlcnNlY3REaWZmZXJlbmNlOiBpbnRlcnNlY3REaWZmZXJlbmNlCgl9OwoKLyoqKi8g
fSksCi8qIDE1NCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tf
cmVxdWlyZV9fKSB7CgoJbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7
CgoKLyoqKi8gfSksCi8qIDE1NSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoJLyoqCgkgKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KCSAqCgkgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKCSAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KCSAqLwoKCS8vIFRoaXMgbWV0aG9k
IG9mIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBuZWVkcyB0byBi
ZQoJLy8ga2VwdCBpZGVudGljYWwgdG8gdGhlIHdheSBpdCBpcyBvYnRhaW5lZCBpbiBydW50aW1l
LmpzCgl2YXIgZyA9IChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMgfSkoKSB8fCBGdW5jdGlvbigi
cmV0dXJuIHRoaXMiKSgpOwoKCS8vIFVzZSBgZ2V0T3duUHJvcGVydHlOYW1lc2AgYmVjYXVzZSBu
b3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgY2FsbGluZwoJLy8gYGhhc093blByb3BlcnR5YCBvbiB0
aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLgoJdmFyIGhhZFJ1
bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJgoJICBPYmplY3QuZ2V0T3duUHJvcGVydHlO
YW1lcyhnKS5pbmRleE9mKCJyZWdlbmVyYXRvclJ1bnRpbWUiKSA+PSAwOwoKCS8vIFNhdmUgdGhl
IG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBs
YXRlci4KCXZhciBvbGRSdW50aW1lID0gaGFkUnVudGltZSAmJiBnLnJlZ2VuZXJhdG9yUnVudGlt
ZTsKCgkvLyBGb3JjZSByZWV2YWx1dGF0aW9uIG9mIHJ1bnRpbWUuanMuCglnLnJlZ2VuZXJhdG9y
UnVudGltZSA9IHVuZGVmaW5lZDsKCgltb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJl
X18oMTU2KTsKCglpZiAoaGFkUnVudGltZSkgewoJICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBy
dW50aW1lLgoJICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7Cgl9IGVsc2UgewoJ
ICAvLyBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wZXJ0eSBhZGRlZCBieSBydW50aW1lLmpzLgoJICB0
cnkgewoJICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTsKCSAgfSBjYXRjaChlKSB7Cgkg
ICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7CgkgIH0KCX0KCgovKioqLyB9KSwK
LyogMTU2ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHsKCgkvKioKCSAqIENv
cHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgoJICoKCSAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQoJ
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LgoJICovCgoJIShmdW5jdGlvbihnbG9iYWwpIHsKCSAgInVzZSBzdHJpY3QiOwoKCSAgdmFyIE9w
ID0gT2JqZWN0LnByb3RvdHlwZTsKCSAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5OwoJ
ICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC4KCSAgdmFy
ICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iID8gU3ltYm9sIDoge307Cgkg
IHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgIkBAaXRlcmF0b3IiOwoJ
ICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCAiQEBh
c3luY0l0ZXJhdG9yIjsKCSAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmlu
Z1RhZyB8fCAiQEB0b1N0cmluZ1RhZyI7CgoJICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxl
ID09PSAib2JqZWN0IjsKCSAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1l
OwoJICBpZiAocnVudGltZSkgewoJICAgIGlmIChpbk1vZHVsZSkgewoJICAgICAgLy8gSWYgcmVn
ZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxl
LAoJICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJh
dG9yUnVudGltZS4KCSAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTsKCSAgICB9CgkgICAg
Ly8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBy
dW50aW1lIHdhcwoJICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS4KCSAgICByZXR1cm47
CgkgIH0KCgkgIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkg
Z2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlcgoJICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUg
aW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuCgkgIHJ1bnRpbWUgPSBnbG9iYWwu
cmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9OwoKCSAg
ZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkgewoJICAg
IC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJh
dG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLgoJICAgIHZh
ciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2Vv
ZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yOwoJICAgIHZhciBnZW5lcmF0b3IgPSBP
YmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7CgkgICAgdmFyIGNvbnRleHQg
PSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7CgoJICAgIC8vIFRoZSAuX2ludm9rZSBt
ZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCwKCSAgICAvLyAu
dGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuCgkgICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtl
SW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpOwoKCSAgICByZXR1cm4gZ2VuZXJh
dG9yOwoJICB9CgkgIHJ1bnRpbWUud3JhcCA9IHdyYXA7CgoJICAvLyBUcnkvY2F0Y2ggaGVscGVy
IHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb24KCSAgLy8g
cmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJm
YWNlIGNvdWxkCgkgIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0
byB0YWtlIGEgY2xvc3VyZSB0byBiZQoJICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBi
dXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlCgkgIC8vIGFscmVhZHkgaGF2ZSBh
biBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWQKCSAg
Ly8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkg
d2l0aCBhc3N1bWluZwoJICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50
LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZQoJICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3
ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGUKCSAgLy8gb25s
eSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3Jk
LCB3aGljaAoJICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQg
YmUgY2hlYXAgdG8gYWxsb2NhdGUuCgkgIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykg
ewoJICAgIHRyeSB7CgkgICAgICByZXR1cm4geyB0eXBlOiAibm9ybWFsIiwgYXJnOiBmbi5jYWxs
KG9iaiwgYXJnKSB9OwoJICAgIH0gY2F0Y2ggKGVycikgewoJICAgICAgcmV0dXJuIHsgdHlwZTog
InRocm93IiwgYXJnOiBlcnIgfTsKCSAgICB9CgkgIH0KCgkgIHZhciBHZW5TdGF0ZVN1c3BlbmRl
ZFN0YXJ0ID0gInN1c3BlbmRlZFN0YXJ0IjsKCSAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQg
PSAic3VzcGVuZGVkWWllbGQiOwoJICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSAiZXhlY3V0aW5n
IjsKCSAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gImNvbXBsZXRlZCI7CgoJICAvLyBSZXR1cm5p
bmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzCgkg
IC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC4KCSAgdmFy
IENvbnRpbnVlU2VudGluZWwgPSB7fTsKCgkgIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9u
cyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZAoJICAvLyAuY29uc3RydWN0b3Iu
cHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3IK
CSAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8g
Y29uZmlndXJlIHlvdXIKCSAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2Yg
dGhlc2UgdHdvIGZ1bmN0aW9ucy4KCSAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge30KCSAgZnVuY3Rp
b24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fQoJICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblBy
b3RvdHlwZSgpIHt9CgoJICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3Rv
dHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0CgkgIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQg
aXQuCgkgIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9OwoJICBJdGVyYXRvclByb3RvdHlwZVtp
dGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7CgkgICAgcmV0dXJuIHRoaXM7CgkgIH07CgoJ
ICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7CgkgIHZhciBOYXRpdmVJdGVy
YXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkp
KTsKCSAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmCgkgICAgICBOYXRpdmVJdGVyYXRv
clByb3RvdHlwZSAhPT0gT3AgJiYKCSAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJv
dG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHsKCSAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBh
IG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZAoJICAgIC8vIG9mIHRo
ZSBwb2x5ZmlsbC4KCSAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90
eXBlOwoJICB9CgoJICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5
cGUgPQoJICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJv
dG90eXBlKTsKCSAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3Ig
PSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTsKCSAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5
cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjsKCSAgR2VuZXJhdG9yRnVuY3Rpb25Q
cm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID0KCSAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNw
bGF5TmFtZSA9ICJHZW5lcmF0b3JGdW5jdGlvbiI7CgoJICAvLyBIZWxwZXIgZm9yIGRlZmluaW5n
IHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZQoJICAvLyBJdGVy
YXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLgoJICBm
dW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7CgkgICAgWyJuZXh0Iiwg
InRocm93IiwgInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7CgkgICAgICBwcm90
b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykgewoJICAgICAgICByZXR1cm4gdGhpcy5faW52
b2tlKG1ldGhvZCwgYXJnKTsKCSAgICAgIH07CgkgICAgfSk7CgkgIH0KCgkgIHJ1bnRpbWUuaXNH
ZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikgewoJICAgIHZhciBjdG9yID0gdHlw
ZW9mIGdlbkZ1biA9PT0gImZ1bmN0aW9uIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7CgkgICAgcmV0
dXJuIGN0b3IKCSAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwKCSAgICAgICAg
Ly8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0
IHdlIGNhbgoJICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuCgkg
ICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09ICJHZW5lcmF0b3JGdW5j
dGlvbiIKCSAgICAgIDogZmFsc2U7CgkgIH07CgoJICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihn
ZW5GdW4pIHsKCSAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7CgkgICAgICBPYmplY3Qu
c2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7CgkgICAg
fSBlbHNlIHsKCSAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3Rv
dHlwZTsKCSAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHsKCSAgICAg
ICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9ICJHZW5lcmF0b3JGdW5jdGlvbiI7CgkgICAg
ICB9CgkgICAgfQoJICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTsKCSAg
ICByZXR1cm4gZ2VuRnVuOwoJICB9OwoKCSAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3lu
YyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvCgkgIC8vIGB5aWVsZCByZWdl
bmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0Cgkg
IC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgIl9fYXdhaXQiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5
aWVsZGVkIHZhbHVlIGlzCgkgIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuCgkgIHJ1bnRpbWUuYXdy
YXAgPSBmdW5jdGlvbihhcmcpIHsKCSAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTsKCSAgfTsK
CgkgIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7CgkgICAgZnVuY3Rpb24gaW52
b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHsKCSAgICAgIHZhciByZWNvcmQgPSB0
cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpOwoJICAgICAgaWYgKHJl
Y29yZC50eXBlID09PSAidGhyb3ciKSB7CgkgICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTsKCSAg
ICAgIH0gZWxzZSB7CgkgICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnOwoJICAgICAgICB2
YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7CgkgICAgICAgIGlmICh2YWx1ZSAmJgoJICAgICAgICAg
ICAgdHlwZW9mIHZhbHVlID09PSAib2JqZWN0IiAmJgoJICAgICAgICAgICAgaGFzT3duLmNhbGwo
dmFsdWUsICJfX2F3YWl0IikpIHsKCSAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZh
bHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHsKCSAgICAgICAgICAgIGludm9rZSgi
bmV4dCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpOwoJICAgICAgICAgIH0sIGZ1bmN0aW9uKGVy
cikgewoJICAgICAgICAgICAgaW52b2tlKCJ0aHJvdyIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTsK
CSAgICAgICAgICB9KTsKCSAgICAgICAgfQoKCSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2
ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHsKCSAgICAgICAgICAvLyBXaGVuIGEg
eWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lcwoJICAg
ICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQg
Zm9yIHRoZQoJICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBp
cyByZWplY3RlZCwgaG93ZXZlciwgdGhlCgkgICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0
ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWUKCSAgICAgICAgICAvLyByZWFz
b24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdAoJICAg
ICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMg
dGhlIGNhc2UKCSAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3Rl
ZC4gVGhpcyBkaWZmZXJlbmNlIGluCgkgICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVs
ZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0CgkgICAgICAgICAgLy8gYWxsb3dz
IHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkCgkgICAg
ICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRo
cm93IGl0IGJhY2sKCSAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRl
cmF0aW9uLCB3aGF0ZXZlcikuIFdpdGgKCSAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3Qs
IHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlCgkgICAgICAgICAgLy8gcmVq
ZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZQoJICAg
ICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJl
c3Npb24sIGFuZAoJICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRs
ZSB0aGUgZXhjZXB0aW9uLgoJICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDsKCSAg
ICAgICAgICByZXNvbHZlKHJlc3VsdCk7CgkgICAgICAgIH0sIHJlamVjdCk7CgkgICAgICB9Cgkg
ICAgfQoKCSAgICB2YXIgcHJldmlvdXNQcm9taXNlOwoKCSAgICBmdW5jdGlvbiBlbnF1ZXVlKG1l
dGhvZCwgYXJnKSB7CgkgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygp
IHsKCSAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkg
ewoJICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTsKCSAgICAg
ICAgfSk7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9CgkgICAgICAg
IC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdh
aXQgdW50aWwKCSAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNv
bHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsCgkgICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBh
cmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWYKCSAgICAgICAgLy8g
ZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQg
dG8KCSAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBv
biBhIGNhbGxiYWNrIHRvIGZpcmUsCgkgICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVy
YXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvCgkgICAgICAgIC8vIGFueSBu
ZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHkK
CSAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkg
aW52b2tlcyBpdHMKCSAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMg
ZnVuY3Rpb25zIHN5bmNocm9ub3VzbHkKCSAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0
aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGUKCSAgICAgICAgLy8gYXN5
bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFs
bHkKCSAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBp
dCByZXF1aXJlcyBjYXJlLgoJICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21p
c2UudGhlbigKCSAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywKCSAgICAgICAg
ICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBs
YXRlcgoJICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci4KCSAgICAgICAg
ICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZwoJICAgICAgICApIDogY2FsbEludm9rZVdpdGhN
ZXRob2RBbmRBcmcoKTsKCSAgICB9CgoJICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIg
bWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsCgkgICAgLy8gLnRocm93LCBh
bmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuCgkgICAgdGhpcy5faW52b2tl
ID0gZW5xdWV1ZTsKCSAgfQoKCSAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3Iu
cHJvdG90eXBlKTsKCSAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJv
bF0gPSBmdW5jdGlvbiAoKSB7CgkgICAgcmV0dXJuIHRoaXM7CgkgIH07CgkgIHJ1bnRpbWUuQXN5
bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7CgoJICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5j
IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mCgkgIC8vIEFzeW5jSXRlcmF0b3Ig
b2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZgoJICAv
LyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci4KCSAgcnVudGltZS5h
c3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7Cgkg
ICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcigKCSAgICAgIHdyYXAoaW5uZXJGbiwgb3V0
ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpCgkgICAgKTsKCgkgICAgcmV0dXJuIHJ1bnRpbWUuaXNH
ZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKQoJICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMg
YSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci4KCSAgICAgIDogaXRlci5uZXh0
KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKCSAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUg
PyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTsKCSAgICAgICAgfSk7CgkgIH07CgoJICBmdW5j
dGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHsKCSAgICB2YXIg
c3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0OwoKCSAgICByZXR1cm4gZnVuY3Rpb24gaW52
b2tlKG1ldGhvZCwgYXJnKSB7CgkgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5n
KSB7CgkgICAgICAgIHRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmlu
ZyIpOwoJICAgICAgfQoKCSAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHsK
CSAgICAgICAgaWYgKG1ldGhvZCA9PT0gInRocm93IikgewoJICAgICAgICAgIHRocm93IGFyZzsK
CSAgICAgICAgfQoKCSAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0
aGUgc3BlYzoKCSAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9y
ZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZQoJICAgICAgICByZXR1cm4gZG9u
ZVJlc3VsdCgpOwoJICAgICAgfQoKCSAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kOwoJICAg
ICAgY29udGV4dC5hcmcgPSBhcmc7CgoJICAgICAgd2hpbGUgKHRydWUpIHsKCSAgICAgICAgdmFy
IGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTsKCSAgICAgICAgaWYgKGRlbGVnYXRlKSB7Cgkg
ICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0
ZSwgY29udGV4dCk7CgkgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7CgkgICAgICAgICAg
ICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlOwoJICAg
ICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0OwoJICAgICAgICAgIH0KCSAgICAgICAgfQoK
CSAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSAibmV4dCIpIHsKCSAgICAgICAgICAvLyBT
ZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3MKCSAgICAg
ICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLgoJICAgICAgICAgIGNvbnRleHQu
c2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZzsKCgkgICAgICAgIH0gZWxzZSBpZiAo
Y29udGV4dC5tZXRob2QgPT09ICJ0aHJvdyIpIHsKCSAgICAgICAgICBpZiAoc3RhdGUgPT09IEdl
blN0YXRlU3VzcGVuZGVkU3RhcnQpIHsKCSAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21w
bGV0ZWQ7CgkgICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZzsKCSAgICAgICAgICB9CgoJICAg
ICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpOwoKCSAgICAgICAg
fSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gInJldHVybiIpIHsKCSAgICAgICAgICBjb250
ZXh0LmFicnVwdCgicmV0dXJuIiwgY29udGV4dC5hcmcpOwoJICAgICAgICB9CgoJICAgICAgICBz
dGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nOwoKCSAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNo
KGlubmVyRm4sIHNlbGYsIGNvbnRleHQpOwoJICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09ICJu
b3JtYWwiKSB7CgkgICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlu
bmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PQoJICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5n
IGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi4KCSAgICAgICAgICBzdGF0ZSA9
IGNvbnRleHQuZG9uZQoJICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZAoJICAgICAgICAg
ICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkOwoKCSAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9
PT0gQ29udGludWVTZW50aW5lbCkgewoJICAgICAgICAgICAgY29udGludWU7CgkgICAgICAgICAg
fQoKCSAgICAgICAgICByZXR1cm4gewoJICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsCgkg
ICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmUKCSAgICAgICAgICB9OwoKCSAgICAgICAgfSBl
bHNlIGlmIChyZWNvcmQudHlwZSA9PT0gInRocm93IikgewoJICAgICAgICAgIHN0YXRlID0gR2Vu
U3RhdGVDb21wbGV0ZWQ7CgkgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBs
b29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZQoJICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hF
eGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuCgkgICAgICAgICAgY29udGV4dC5tZXRo
b2QgPSAidGhyb3ciOwoJICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZzsKCSAgICAg
ICAgfQoJICAgICAgfQoJICAgIH07CgkgIH0KCgkgIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3Jb
Y29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZQoJICAvLyByZXN1bHQs
IGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlCgkg
IC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5k
IGNvbnRleHQuYXJnLAoJICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5k
IHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC4KCSAgZnVuY3Rpb24gbWF5YmVJbnZva2VE
ZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkgewoJICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5p
dGVyYXRvcltjb250ZXh0Lm1ldGhvZF07CgkgICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7
CgkgICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9y
IGhhcyBubyAudGhyb3cKCSAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWll
bGQqIGxvb3AuCgkgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDsKCgkgICAgICBpZiAoY29u
dGV4dC5tZXRob2QgPT09ICJ0aHJvdyIpIHsKCSAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9y
LnJldHVybikgewoJICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSBy
ZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGEKCSAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAu
CgkgICAgICAgICAgY29udGV4dC5tZXRob2QgPSAicmV0dXJuIjsKCSAgICAgICAgICBjb250ZXh0
LmFyZyA9IHVuZGVmaW5lZDsKCSAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRl
LCBjb250ZXh0KTsKCgkgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSAidGhyb3ciKSB7
CgkgICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQg
Y29udGV4dC5tZXRob2QgZnJvbQoJICAgICAgICAgICAgLy8gInJldHVybiIgdG8gInRocm93Iiwg
bGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy4KCSAgICAgICAgICAgIHJldHVy
biBDb250aW51ZVNlbnRpbmVsOwoJICAgICAgICAgIH0KCSAgICAgICAgfQoKCSAgICAgICAgY29u
dGV4dC5tZXRob2QgPSAidGhyb3ciOwoJICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJy
b3IoCgkgICAgICAgICAgIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBt
ZXRob2QiKTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDsKCSAgICB9
CgoJICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBj
b250ZXh0LmFyZyk7CgoJICAgIGlmIChyZWNvcmQudHlwZSA9PT0gInRocm93IikgewoJICAgICAg
Y29udGV4dC5tZXRob2QgPSAidGhyb3ciOwoJICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJn
OwoJICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7CgkgICAgICByZXR1cm4gQ29udGludWVT
ZW50aW5lbDsKCSAgICB9CgoJICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZzsKCgkgICAgaWYgKCEg
aW5mbykgewoJICAgICAgY29udGV4dC5tZXRob2QgPSAidGhyb3ciOwoJICAgICAgY29udGV4dC5h
cmcgPSBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpOwoJ
ICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7CgkgICAgICByZXR1cm4gQ29udGludWVTZW50
aW5lbDsKCSAgICB9CgoJICAgIGlmIChpbmZvLmRvbmUpIHsKCSAgICAgIC8vIEFzc2lnbiB0aGUg
cmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5CgkgICAgICAv
LyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRl
WWllbGQpLgoJICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7
CgoJICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2Vl
IGRlbGVnYXRlWWllbGQpLgoJICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYzsK
CgkgICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgInRocm93IiBidXQgdGhlIGRlbGVnYXRl
IGhhbmRsZWQgdGhlCgkgICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9y
IHByb2NlZWQgbm9ybWFsbHkuIElmCgkgICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgIm5leHQi
LCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW4KCSAgICAgIC8vICJjb25zdW1l
ZCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXMKCSAgICAg
IC8vICJyZXR1cm4iLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVl
IGluIHRoZQoJICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLgoJICAgICAgaWYgKGNvbnRleHQubWV0
aG9kICE9PSAicmV0dXJuIikgewoJICAgICAgICBjb250ZXh0Lm1ldGhvZCA9ICJuZXh0IjsKCSAg
ICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7CgkgICAgICB9CgoJICAgIH0gZWxzZSB7Cgkg
ICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRo
b2QuCgkgICAgICByZXR1cm4gaW5mbzsKCSAgICB9CgoJICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVy
YXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoCgkgICAgLy8g
dGhlIG91dGVyIGdlbmVyYXRvci4KCSAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDsKCSAgICBy
ZXR1cm4gQ29udGludWVTZW50aW5lbDsKCSAgfQoKCSAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90
b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGUKCSAgLy8gdW5pZmllZCAu
X2ludm9rZSBoZWxwZXIgbWV0aG9kLgoJICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApOwoKCSAg
R3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gIkdlbmVyYXRvciI7CgoJICAvLyBBIEdlbmVyYXRvciBz
aG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRo
ZQoJICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2Vy
cycgaW1wbGVtZW50YXRpb25zIG9mIHRoZQoJICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4g
aW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvcgoJICAvLyBv
YmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhh
dCBkb2Vzbid0IGhhcHBlbi4KCSAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9y
ZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuCgkgIEdwW2l0ZXJhdG9yU3lt
Ym9sXSA9IGZ1bmN0aW9uKCkgewoJICAgIHJldHVybiB0aGlzOwoJICB9OwoKCSAgR3AudG9TdHJp
bmcgPSBmdW5jdGlvbigpIHsKCSAgICByZXR1cm4gIltvYmplY3QgR2VuZXJhdG9yXSI7CgkgIH07
CgoJICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykgewoJICAgIHZhciBlbnRyeSA9IHsgdHJ5
TG9jOiBsb2NzWzBdIH07CgoJICAgIGlmICgxIGluIGxvY3MpIHsKCSAgICAgIGVudHJ5LmNhdGNo
TG9jID0gbG9jc1sxXTsKCSAgICB9CgoJICAgIGlmICgyIGluIGxvY3MpIHsKCSAgICAgIGVudHJ5
LmZpbmFsbHlMb2MgPSBsb2NzWzJdOwoJICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdOwoJ
ICAgIH0KCgkgICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpOwoJICB9CgoJICBmdW5jdGlv
biByZXNldFRyeUVudHJ5KGVudHJ5KSB7CgkgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRp
b24gfHwge307CgkgICAgcmVjb3JkLnR5cGUgPSAibm9ybWFsIjsKCSAgICBkZWxldGUgcmVjb3Jk
LmFyZzsKCSAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkOwoJICB9CgoJICBmdW5jdGlvbiBD
b250ZXh0KHRyeUxvY3NMaXN0KSB7CgkgICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZl
Y3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoCgkgICAgLy8gb3IgYSBmaW5h
bGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbQoJ
ICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVu
dC4KCSAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6ICJyb290IiB9XTsKCSAgICB0cnlM
b2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7CgkgICAgdGhpcy5yZXNldCh0cnVl
KTsKCSAgfQoKCSAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7CgkgICAgdmFyIGtl
eXMgPSBbXTsKCSAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7CgkgICAgICBrZXlzLnB1c2go
a2V5KTsKCSAgICB9CgkgICAga2V5cy5yZXZlcnNlKCk7CgoJICAgIC8vIFJhdGhlciB0aGFuIHJl
dHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwCgkgICAgLy8gdGhp
bmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi4KCSAgICByZXR1
cm4gZnVuY3Rpb24gbmV4dCgpIHsKCSAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkgewoJICAgICAg
ICB2YXIga2V5ID0ga2V5cy5wb3AoKTsKCSAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHsKCSAg
ICAgICAgICBuZXh0LnZhbHVlID0ga2V5OwoJICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlOwoJ
ICAgICAgICAgIHJldHVybiBuZXh0OwoJICAgICAgICB9CgkgICAgICB9CgoJICAgICAgLy8gVG8g
YXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZh
bHVlCgkgICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24g
b2JqZWN0IGl0c2VsZi4gVGhpcwoJICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlm
aWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uCgkgICAgICBuZXh0LmRvbmUgPSB0
cnVlOwoJICAgICAgcmV0dXJuIG5leHQ7CgkgICAgfTsKCSAgfTsKCgkgIGZ1bmN0aW9uIHZhbHVl
cyhpdGVyYWJsZSkgewoJICAgIGlmIChpdGVyYWJsZSkgewoJICAgICAgdmFyIGl0ZXJhdG9yTWV0
aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdOwoJICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9k
KSB7CgkgICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTsKCSAgICAg
IH0KCgkgICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09ICJmdW5jdGlvbiIpIHsKCSAg
ICAgICAgcmV0dXJuIGl0ZXJhYmxlOwoJICAgICAgfQoKCSAgICAgIGlmICghaXNOYU4oaXRlcmFi
bGUubGVuZ3RoKSkgewoJICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgp
IHsKCSAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7CgkgICAgICAgICAg
ICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7CgkgICAgICAgICAgICAgIG5leHQudmFs
dWUgPSBpdGVyYWJsZVtpXTsKCSAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7CgkgICAg
ICAgICAgICAgIHJldHVybiBuZXh0OwoJICAgICAgICAgICAgfQoJICAgICAgICAgIH0KCgkgICAg
ICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDsKCSAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVl
OwoKCSAgICAgICAgICByZXR1cm4gbmV4dDsKCSAgICAgICAgfTsKCgkgICAgICAgIHJldHVybiBu
ZXh0Lm5leHQgPSBuZXh0OwoJICAgICAgfQoJICAgIH0KCgkgICAgLy8gUmV0dXJuIGFuIGl0ZXJh
dG9yIHdpdGggbm8gdmFsdWVzLgoJICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTsKCSAg
fQoJICBydW50aW1lLnZhbHVlcyA9IHZhbHVlczsKCgkgIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7
CgkgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9OwoJICB9CgoJICBD
b250ZXh0LnByb3RvdHlwZSA9IHsKCSAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCwKCgkgICAgcmVz
ZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHsKCSAgICAgIHRoaXMucHJldiA9IDA7CgkgICAg
ICB0aGlzLm5leHQgPSAwOwoJICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxl
Z2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3MKCSAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50
YXRpb24uCgkgICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkOwoJICAgICAg
dGhpcy5kb25lID0gZmFsc2U7CgkgICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDsKCgkgICAgICB0
aGlzLm1ldGhvZCA9ICJuZXh0IjsKCSAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkOwoKCSAgICAg
IHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpOwoKCSAgICAgIGlmICghc2tp
cFRlbXBSZXNldCkgewoJICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHsKCSAgICAgICAg
ICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25z
OgoJICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gInQiICYmCgkgICAgICAgICAgICAg
IGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmCgkgICAgICAgICAgICAgICFpc05hTigrbmFtZS5z
bGljZSgxKSkpIHsKCSAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7CgkgICAgICAg
ICAgfQoJICAgICAgICB9CgkgICAgICB9CgkgICAgfSwKCgkgICAgc3RvcDogZnVuY3Rpb24oKSB7
CgkgICAgICB0aGlzLmRvbmUgPSB0cnVlOwoKCSAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRy
eUVudHJpZXNbMF07CgkgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9u
OwoJICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gInRocm93IikgewoJICAgICAgICB0aHJv
dyByb290UmVjb3JkLmFyZzsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gdGhpcy5ydmFsOwoJICAg
IH0sCgoJICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHsKCSAgICAg
IGlmICh0aGlzLmRvbmUpIHsKCSAgICAgICAgdGhyb3cgZXhjZXB0aW9uOwoJICAgICAgfQoKCSAg
ICAgIHZhciBjb250ZXh0ID0gdGhpczsKCSAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdo
dCkgewoJICAgICAgICByZWNvcmQudHlwZSA9ICJ0aHJvdyI7CgkgICAgICAgIHJlY29yZC5hcmcg
PSBleGNlcHRpb247CgkgICAgICAgIGNvbnRleHQubmV4dCA9IGxvYzsKCgkgICAgICAgIGlmIChj
YXVnaHQpIHsKCSAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNh
dWdodCBieSBhIGNhdGNoIGJsb2NrLAoJICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2gg
YmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuCgkgICAgICAgICAgY29udGV4dC5t
ZXRob2QgPSAibmV4dCI7CgkgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7CgkgICAg
ICAgIH0KCgkgICAgICAgIHJldHVybiAhISBjYXVnaHQ7CgkgICAgICB9CgoJICAgICAgZm9yICh2
YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewoJICAgICAg
ICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07CgkgICAgICAgIHZhciByZWNvcmQgPSBl
bnRyeS5jb21wbGV0aW9uOwoKCSAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gInJvb3QiKSB7
CgkgICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sg
dGhhdCBjb3VsZCBoYW5kbGUKCSAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9u
IHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG8KCSAgICAgICAgICAvLyB0aHJvdyB0aGUg
ZXhjZXB0aW9uLgoJICAgICAgICAgIHJldHVybiBoYW5kbGUoImVuZCIpOwoJICAgICAgICB9CgoJ
ICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikgewoJICAgICAgICAgIHZhciBo
YXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCAiY2F0Y2hMb2MiKTsKCSAgICAgICAgICB2YXIg
aGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCAiZmluYWxseUxvYyIpOwoKCSAgICAgICAg
ICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkgewoJICAgICAgICAgICAgaWYgKHRoaXMucHJl
diA8IGVudHJ5LmNhdGNoTG9jKSB7CgkgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnku
Y2F0Y2hMb2MsIHRydWUpOwoJICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRy
eS5maW5hbGx5TG9jKSB7CgkgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxs
eUxvYyk7CgkgICAgICAgICAgICB9CgoJICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHsK
CSAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgewoJICAgICAgICAg
ICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTsKCSAgICAgICAgICAgIH0K
CgkgICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7CgkgICAgICAgICAgICBpZiAodGhp
cy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgewoJICAgICAgICAgICAgICByZXR1cm4gaGFuZGxl
KGVudHJ5LmZpbmFsbHlMb2MpOwoJICAgICAgICAgICAgfQoKCSAgICAgICAgICB9IGVsc2UgewoJ
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2gg
b3IgZmluYWxseSIpOwoJICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgICAgfQoJICAgIH0sCgoJ
ICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7CgkgICAgICBmb3IgKHZhciBpID0gdGhp
cy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CgkgICAgICAgIHZhciBlbnRy
eSA9IHRoaXMudHJ5RW50cmllc1tpXTsKCSAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlz
LnByZXYgJiYKCSAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCAiZmluYWxseUxvYyIpICYm
CgkgICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7CgkgICAgICAgICAg
dmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5OwoJICAgICAgICAgIGJyZWFrOwoJICAgICAgICB9Cgkg
ICAgICB9CgoJICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJgoJICAgICAgICAgICh0eXBlID09PSAi
YnJlYWsiIHx8CgkgICAgICAgICAgIHR5cGUgPT09ICJjb250aW51ZSIpICYmCgkgICAgICAgICAg
ZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYKCSAgICAgICAgICBhcmcgPD0gZmluYWxseUVu
dHJ5LmZpbmFsbHlMb2MpIHsKCSAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlm
IGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYQoJICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRl
IHRoZSB0cnkvY2F0Y2ggYmxvY2suCgkgICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7CgkgICAg
ICB9CgoJICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21w
bGV0aW9uIDoge307CgkgICAgICByZWNvcmQudHlwZSA9IHR5cGU7CgkgICAgICByZWNvcmQuYXJn
ID0gYXJnOwoKCSAgICAgIGlmIChmaW5hbGx5RW50cnkpIHsKCSAgICAgICAgdGhpcy5tZXRob2Qg
PSAibmV4dCI7CgkgICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jOwoJ
ICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDsKCSAgICAgIH0KCgkgICAgICByZXR1cm4g
dGhpcy5jb21wbGV0ZShyZWNvcmQpOwoJICAgIH0sCgoJICAgIGNvbXBsZXRlOiBmdW5jdGlvbihy
ZWNvcmQsIGFmdGVyTG9jKSB7CgkgICAgICBpZiAocmVjb3JkLnR5cGUgPT09ICJ0aHJvdyIpIHsK
CSAgICAgICAgdGhyb3cgcmVjb3JkLmFyZzsKCSAgICAgIH0KCgkgICAgICBpZiAocmVjb3JkLnR5
cGUgPT09ICJicmVhayIgfHwKCSAgICAgICAgICByZWNvcmQudHlwZSA9PT0gImNvbnRpbnVlIikg
ewoJICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnOwoJICAgICAgfSBlbHNlIGlmIChyZWNv
cmQudHlwZSA9PT0gInJldHVybiIpIHsKCSAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSBy
ZWNvcmQuYXJnOwoJICAgICAgICB0aGlzLm1ldGhvZCA9ICJyZXR1cm4iOwoJICAgICAgICB0aGlz
Lm5leHQgPSAiZW5kIjsKCSAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09ICJub3JtYWwi
ICYmIGFmdGVyTG9jKSB7CgkgICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jOwoJICAgICAgfQoK
CSAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsOwoJICAgIH0sCgoJICAgIGZpbmlzaDogZnVu
Y3Rpb24oZmluYWxseUxvYykgewoJICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5s
ZW5ndGggLSAxOyBpID49IDA7IC0taSkgewoJICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVu
dHJpZXNbaV07CgkgICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7
CgkgICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxv
Yyk7CgkgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7CgkgICAgICAgICAgcmV0dXJuIENv
bnRpbnVlU2VudGluZWw7CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICB9LAoKCSAgICAiY2F0Y2gi
OiBmdW5jdGlvbih0cnlMb2MpIHsKCSAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMu
bGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKCSAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlF
bnRyaWVzW2ldOwoJICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHsKCSAgICAg
ICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjsKCSAgICAgICAgICBpZiAocmVjb3Jk
LnR5cGUgPT09ICJ0aHJvdyIpIHsKCSAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJn
OwoJICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7CgkgICAgICAgICAgfQoJICAgICAg
ICAgIHJldHVybiB0aHJvd247CgkgICAgICAgIH0KCSAgICAgIH0KCgkgICAgICAvLyBUaGUgY29u
dGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb24KCSAg
ICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay4K
CSAgICAgIHRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iik7CgkgICAgfSwK
CgkgICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRM
b2MpIHsKCSAgICAgIHRoaXMuZGVsZWdhdGUgPSB7CgkgICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMo
aXRlcmFibGUpLAoJICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLAoJICAgICAgICBuZXh0
TG9jOiBuZXh0TG9jCgkgICAgICB9OwoKCSAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gIm5leHQi
KSB7CgkgICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBz
byB0aGF0IHdlIGRvbid0CgkgICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRo
ZSBkZWxlZ2F0ZS4KCSAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7CgkgICAgICB9CgoJICAg
ICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7CgkgICAgfQoJICB9OwoJfSkoCgkgIC8vIEluIHNs
b3BweSBtb2RlLCB1bmJvdW5kIGB0aGlzYCByZWZlcnMgdG8gdGhlIGdsb2JhbCBvYmplY3QsIGZh
bGxiYWNrIHRvCgkgIC8vIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlmIHdlJ3JlIGluIGdsb2JhbCBz
dHJpY3QgbW9kZS4gVGhhdCBpcyBzYWRseSBhIGZvcm0KCSAgLy8gb2YgaW5kaXJlY3QgZXZhbCB3
aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeS4KCSAgKGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdGhpcyB9KSgpIHx8IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkKCSk7CgoKLyoqKi8g
fSkKLyoqKioqKi8gXSk7Cjwvc2NyaXB0Pgo8c2NyaXB0PgovLyBtYWluLmJ1bmRsZS5qcwp3ZWJw
YWNrSnNvbnAoWzJdLFsKLyogMCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBf
X3dlYnBhY2tfcmVxdWlyZV9fKSB7CgkndXNlIHN0cmljdCc7CgoJdmFyIG9nID0gX193ZWJwYWNr
X3JlcXVpcmVfXygxNDMpOwoJdmFyIE9iamVjdEdyYXBoID0gb2cuQnJvd3Nlck9iamVjdEdyYXBo
OwoKCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkgIHZhciBncmFwaCA9IG5ldyBPYmplY3RHcmFw
aCh7CgkgICAgbWF4RGVxdWV1ZVNpemU6IDEwMDAsCgkgIH0pOwoJICBncmFwaC5jYXB0dXJlKHdp
bmRvdywge2tleTogJ3dpbmRvdyd9KTsKCSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXR1
cycpLnRleHRDb250ZW50ID0gJ05vISc7Cgl9LCAxMDApOwovKioqLyB9KQpdKTsKPC9zY3JpcHQ+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401252</attachid>
            <date>2020-06-06 05:48:44 -0700</date>
            <delta_ts>2020-06-06 06:05:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212458-20200606054843.patch</filename>
            <type>text/plain</type>
            <size>7341</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk4NzY5YTk0NzgyNTIx
MDdkNDcxMjUxN2JkYzFmZmFmNWQ0NDU5MC4uNTI5NTAyZGM4ODEyYjY4ZmU0MmQ0NDM4NmFjNTk2
M2MyN2M2MGYzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA2LTA2ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggd2hlbiBydW5u
aW5nIHdlYi1hcGlzIGRhdGEgY29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDoganMvZG9tL2RvbS1hdHRyaWJ1dGUtZ2V0dGVyLXNl
dHRlci5odG1sCisKKyAgICAgICAgRm9yIHByb3BlcnRpZXMgdXNpbmcgRE9NQXR0cmlidXRlIHBy
b3BlcnR5IGF0dHJpYnV0ZSBpbiB0aGUgdGFibGUsIGNvZGUgZ2VuZXJhdG9yIG11c3QgdXNlIERP
TUF0dHJpYnV0ZUdldHRlclNldHRlciBpbnN0ZWFkIG9mIEN1c3RvbUdldHRlclNldHRlci4KKwor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisKIDIwMjAtMDYtMDUgIERhdmlkIEtpbHplciAgPGRk
a2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbSVBDXSBBZG9wdCBlbnVtIGNsYXNzIGZvciBB
dXRvY2FwaXRhbGl6ZVR5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMjg0MDQ2OTlmNjFlNTkzY2I2ODRkYTZhZDliOWE0
MWRlZGFlM2VmNi4uNDM3NjY0YTBkZjFmN2VlZTQzNjBjOWE4ZThlMWQzMGNmODBmOTYxZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KQEAgLTQzMzQsNyArNDMzNCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9
XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgLy8gQWRkaW5nIGJhY2sgYXR0cmlidXRlLCBidXQgYXMgcmVhZG9ubHksIGFm
dGVyIHJlbW92aW5nIHRoZSByZWFkLXdyaXRlIHZhcmlhbnQgYWJvdmUuIFxuIik7CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEke3J1bnRpbWVFbmFibGVDb25k
aXRpb25hbFN0cmluZ30pXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLiIgLiAkYXR0cmlidXRlTmFt
ZSAuICJQdWJsaWNOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCAkZ2V0dGVy
LCAkc2V0dGVyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSgkanNjQXR0cmlidXRlcykpO1xuIik7
CisgICAgICAgICAgICAgICAgaWYgKElzQWNjZWxlcmF0ZWRET01BdHRyaWJ1dGUoJGludGVyZmFj
ZSwgJGF0dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGNsYXNzRm9yVGhpcyA9
ICIke2NsYXNzTmFtZX06OmluZm8oKSI7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuIiAuICRhdHRy
aWJ1dGVOYW1lIC4gIlB1YmxpY05hbWUoKSwgSlNDOjpET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6
OmNyZWF0ZSh2bSwgJGdldHRlciwgJHNldHRlciwgSlNDOjpET01BdHRyaWJ1dGVBbm5vdGF0aW9u
IHsgJGNsYXNzRm9yVGhpcywgbnVsbHB0ciB9KSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSgkanNj
QXR0cmlidXRlcykpO1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vz
c29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWls
dGluTmFtZXMoKS4iIC4gJGF0dHJpYnV0ZU5hbWUgLiAiUHVibGljTmFtZSgpLCBDdXN0b21HZXR0
ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgJGdldHRlciwgJHNldHRlciksIGF0dHJpYnV0ZXNGb3JTdHJ1
Y3R1cmUoJGpzY0F0dHJpYnV0ZXMpKTtcbiIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGNvbmRpdGlvbmFsU3Ry
aW5nOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NDU5LDcgKzQ0NjQsMTIgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0g
JGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZSk7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICgke3J1bnRpbWVFbmFibGVDb25kaXRpb25hbFN0cmluZ30pXG4iKTsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNf
Y2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS4iIC4g
JGF0dHJpYnV0ZU5hbWUgLiAiUHVibGljTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0
ZSh2bSwgJGdldHRlciwgJHNldHRlciksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoJGpzY0F0dHJp
YnV0ZXMpKTtcbiIpOworICAgICAgICBpZiAoSXNBY2NlbGVyYXRlZERPTUF0dHJpYnV0ZSgkaW50
ZXJmYWNlLCAkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgbXkgJGNsYXNzRm9yVGhpcyA9ICIk
e2NsYXNzTmFtZX06OmluZm8oKSI7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnRE
YXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLiIgLiAkYXR0cmlidXRlTmFtZSAu
ICJQdWJsaWNOYW1lKCksIEpTQzo6RE9NQXR0cmlidXRlR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0s
ICRnZXR0ZXIsICRzZXR0ZXIsIEpTQzo6RE9NQXR0cmlidXRlQW5ub3RhdGlvbiB7ICRjbGFzc0Zv
clRoaXMsIG51bGxwdHIgfSksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoJGpzY0F0dHJpYnV0ZXMp
KTtcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS4iIC4gJGF0dHJpYnV0ZU5h
bWUgLiAiUHVibGljTmFtZSgpLCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgJGdldHRl
ciwgJHNldHRlciksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoJGpzY0F0dHJpYnV0ZXMpKTtcbiIp
OworICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAk
Y29uZGl0aW9uYWxTdHJpbmc7CiAgICAgfQogCkBAIC00NDc0LDcgKzQ0ODQsMTIgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgbXkgJGdldHRlciA9IEdldEF0dHJpYnV0ZUdl
dHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0dHJpYnV0ZSk7CiAKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25k
aXRpb25hbFN0cmluZzsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHV0RGlyZWN0
Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSktPmJ1aWx0aW5OYW1lcygpLiIgLiAkYXR0cmlidXRlTmFtZSAuICJQcml2YXRlTmFtZSgp
LCBDdXN0b21HZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgJGdldHRlciwgbnVsbHB0ciksIGF0dHJp
YnV0ZXNGb3JTdHJ1Y3R1cmUoSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSk7XG4iKTsKKyAgICAgICAgaWYgKElzQWNj
ZWxlcmF0ZWRET01BdHRyaWJ1dGUoJGludGVyZmFjZSwgJGF0dHJpYnV0ZSkpIHsKKyAgICAgICAg
ICAgIG15ICRjbGFzc0ZvclRoaXMgPSAiJHtjbGFzc05hbWV9OjppbmZvKCkiOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygp
LiIgLiAkYXR0cmlidXRlTmFtZSAuICJQcml2YXRlTmFtZSgpLCBKU0M6OkRPTUF0dHJpYnV0ZUdl
dHRlclNldHRlcjo6Y3JlYXRlKHZtLCAkZ2V0dGVyLCBudWxscHRyLCBKU0M6OkRPTUF0dHJpYnV0
ZUFubm90YXRpb24geyAkY2xhc3NGb3JUaGlzLCBudWxscHRyIH0pLCBhdHRyaWJ1dGVzRm9yU3Ry
dWN0dXJlKEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSkpO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCku
IiAuICRhdHRyaWJ1dGVOYW1lIC4gIlByaXZhdGVOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6
Y3JlYXRlKHZtLCAkZ2V0dGVyLCBudWxscHRyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
UmVhZE9ubHkpKTtcbiIpOworICAgICAgICB9CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
I2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgfQogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjFiN2E5
NDQyODVlZTQ1ZDU3OWM5NTRiZjk2OGQ5MzA4NGI1Mjk3OS4uYjI2ZmVkOWFjZDAwMmJjNGI5ZmJh
N2I4YjVlNGUxZDJkZmExZjE4OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTA2ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggd2hlbiBy
dW5uaW5nIHdlYi1hcGlzIGRhdGEgY29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0
dGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9tL2RvbS1hdHRyaWJ1dGUt
Z2V0dGVyLXNldHRlci5odG1sOiBBZGRlZC4KKwogMjAyMC0wNi0wNSAgUnlhbiBIYWRkYWQgIDxy
eWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2
MjYxOSwgcjI2MjYyNSwgYW5kIHIyNjI2NDEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9k
b20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2pzL2RvbS9kb20tYXR0cmlidXRlLWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ3NzRhYzEyNjcwNTg0ZDk0ZmQxY2Y0OWI0YzVlYzBhNGE2MWIyNGMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0dGVyLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgY29uc29sZS5sb2codHlwZW9mIEFuaW1h
dGlvbi5wcm90b3R5cGUudGltZWxpbmUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFRoZSBB
bmltYXRpb24udGltZWxpbmUgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9m
IEFuaW1hdGlvbi4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0
ZXItc2V0dGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXIt
c2V0dGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA3Mjk2ZTAxODBlMDA2YTMxYjJiN2Y2YzU3ZTk1MTIz
NjUxZjhhNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb20tYXR0cmli
dXRlLWdldHRlci1zZXR0ZXIuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTD4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK3Nob3VsZFRocm93RXJy
b3JOYW1lKGBjb25zb2xlLmxvZyh0eXBlb2YgQW5pbWF0aW9uLnByb3RvdHlwZS50aW1lbGluZSlg
LCBgVHlwZUVycm9yYCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401253</attachid>
            <date>2020-06-06 06:05:59 -0700</date>
            <delta_ts>2020-06-06 07:28:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212458-20200606060558.patch</filename>
            <type>text/plain</type>
            <size>9213</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNjY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk4NzY5YTk0NzgyNTIx
MDdkNDcxMjUxN2JkYzFmZmFmNWQ0NDU5MC4uMWUzYWFlNWQxYTg1NjczMzcyZjgzOTYyMjM0Yzdk
M2U2OTc1YTgxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA2LTA2ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggd2hlbiBydW5u
aW5nIHdlYi1hcGlzIGRhdGEgY29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdDoganMvZG9tL2RvbS1hdHRyaWJ1dGUtZ2V0dGVyLXNl
dHRlci5odG1sCisKKyAgICAgICAgRm9yIHByb3BlcnRpZXMgdXNpbmcgRE9NQXR0cmlidXRlIHBy
b3BlcnR5IGF0dHJpYnV0ZSBpbiB0aGUgdGFibGUsIGNvZGUgZ2VuZXJhdG9yIG11c3QgdXNlIERP
TUF0dHJpYnV0ZUdldHRlclNldHRlciBpbnN0ZWFkIG9mIEN1c3RvbUdldHRlclNldHRlci4KKwor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmpQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMC0wNi0wNSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFtJUENdIEFkb3B0IGVudW0gY2xhc3MgZm9yIEF1dG9jYXBp
dGFsaXplVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQppbmRleCAyODQwNDY5OWY2MWU1OTNjYjY4NGRhNmFkOWI5YTQxZGVkYWUz
ZWY2Li40Mzc2NjRhMGRmMWY3ZWVlNDM2MGM5YThlOGUxZDMwY2Y4MGY5NjFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAt
NDMzNCw3ICs0MzM0LDEyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAvLyBBZGRpbmcgYmFjayBhdHRyaWJ1dGUsIGJ1dCBhcyByZWFkb25seSwgYWZ0ZXIgcmVt
b3ZpbmcgdGhlIHJlYWQtd3JpdGUgdmFyaWFudCBhYm92ZS4gXG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISR7cnVudGltZUVuYWJsZUNvbmRpdGlvbmFs
U3RyaW5nfSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuIiAuICRhdHRyaWJ1dGVOYW1lIC4gIlB1
YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sICRnZXR0ZXIsICRzZXR0
ZXIpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKCRqc2NBdHRyaWJ1dGVzKSk7XG4iKTsKKyAgICAg
ICAgICAgICAgICBpZiAoSXNBY2NlbGVyYXRlZERPTUF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAkYXR0
cmlidXRlKSkgeworICAgICAgICAgICAgICAgICAgICBteSAkY2xhc3NGb3JUaGlzID0gIiR7Y2xh
c3NOYW1lfTo6aW5mbygpIjsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS4iIC4gJGF0dHJpYnV0ZU5h
bWUgLiAiUHVibGljTmFtZSgpLCBKU0M6OkRPTUF0dHJpYnV0ZUdldHRlclNldHRlcjo6Y3JlYXRl
KHZtLCAkZ2V0dGVyLCAkc2V0dGVyLCBKU0M6OkRPTUF0dHJpYnV0ZUFubm90YXRpb24geyAkY2xh
c3NGb3JUaGlzLCBudWxscHRyIH0pLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKCRqc2NBdHRyaWJ1
dGVzKSk7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0s
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1l
cygpLiIgLiAkYXR0cmlidXRlTmFtZSAuICJQdWJsaWNOYW1lKCksIEN1c3RvbUdldHRlclNldHRl
cjo6Y3JlYXRlKHZtLCAkZ2V0dGVyLCAkc2V0dGVyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSgk
anNjQXR0cmlidXRlcykpO1xuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ0NTksNyArNDQ2NCwxMiBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdl
bmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25k
aXRpb25hbFN0cmluZzsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCR7cnVu
dGltZUVuYWJsZUNvbmRpdGlvbmFsU3RyaW5nfSlcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLiIgLiAkYXR0cmli
dXRlTmFtZSAuICJQdWJsaWNOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCAk
Z2V0dGVyLCAkc2V0dGVyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSgkanNjQXR0cmlidXRlcykp
O1xuIik7CisgICAgICAgIGlmIChJc0FjY2VsZXJhdGVkRE9NQXR0cmlidXRlKCRpbnRlcmZhY2Us
ICRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICBteSAkY2xhc3NGb3JUaGlzID0gIiR7Y2xhc3NO
YW1lfTo6aW5mbygpIjsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBw
dXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuIiAuICRhdHRyaWJ1dGVOYW1lIC4gIlB1Ymxp
Y05hbWUoKSwgSlNDOjpET01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgJGdldHRl
ciwgJHNldHRlciwgSlNDOjpET01BdHRyaWJ1dGVBbm5vdGF0aW9uIHsgJGNsYXNzRm9yVGhpcywg
bnVsbHB0ciB9KSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSgkanNjQXR0cmlidXRlcykpO1xuIik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4odm0uY2xpZW50RGF0YSktPmJ1aWx0aW5OYW1lcygpLiIgLiAkYXR0cmlidXRlTmFtZSAuICJQ
dWJsaWNOYW1lKCksIEN1c3RvbUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCAkZ2V0dGVyLCAkc2V0
dGVyKSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZSgkanNjQXR0cmlidXRlcykpO1xuIik7CisgICAg
ICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKICAgICB9CiAKQEAgLTQ0NzQsNyArNDQ4NCwxMiBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICBteSAkZ2V0dGVyID0gR2V0QXR0cmlidXRlR2V0dGVyTmFt
ZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKIAogICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBwdXREaXJlY3RDdXN0b21B
Y2Nlc3Nvcih2bSwgc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+
YnVpbHRpbk5hbWVzKCkuIiAuICRhdHRyaWJ1dGVOYW1lIC4gIlByaXZhdGVOYW1lKCksIEN1c3Rv
bUdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCAkZ2V0dGVyLCBudWxscHRyKSwgYXR0cmlidXRlc0Zv
clN0cnVjdHVyZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpKTtcbiIpOworICAgICAgICBpZiAoSXNBY2NlbGVyYXRl
ZERPTUF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgbXkg
JGNsYXNzRm9yVGhpcyA9ICIke2NsYXNzTmFtZX06OmluZm8oKSI7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKS0+YnVpbHRpbk5hbWVzKCkuIiAuICRh
dHRyaWJ1dGVOYW1lIC4gIlByaXZhdGVOYW1lKCksIEpTQzo6RE9NQXR0cmlidXRlR2V0dGVyU2V0
dGVyOjpjcmVhdGUodm0sICRnZXR0ZXIsIG51bGxwdHIsIEpTQzo6RE9NQXR0cmlidXRlQW5ub3Rh
dGlvbiB7ICRjbGFzc0ZvclRoaXMsIG51bGxwdHIgfSksIGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUo
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KSk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2Fz
dDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS4iIC4gJGF0
dHJpYnV0ZU5hbWUgLiAiUHJpdmF0ZU5hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUo
dm0sICRnZXR0ZXIsIG51bGxwdHIpLCBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSkpO1xuIik7CisgICAgICAgIH0KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZc
biIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggNDg1OTIx
YzliMzI3ZGRjNjNhMzA2N2UzNTQ1NWY0ZWIxZmZjZTY3Mi4uNDFkMzEyMjc0ZDAwOTRiMjU4YjBi
MzM1NTM5Nzc3YWY4ZmNhY2Y2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTI0NTIsNyArMjQ1Miw3IEBAIHZv
aWQgSlNUZXN0T2JqUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgfQogICAg
IC8vIEFkZGluZyBiYWNrIGF0dHJpYnV0ZSwgYnV0IGFzIHJlYWRvbmx5LCBhZnRlciByZW1vdmlu
ZyB0aGUgcmVhZC13cml0ZSB2YXJpYW50IGFib3ZlLiAKICAgICBpZiAoIVJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkudGVzdEZlYXR1cmVFbmFibGVkKCkpCi0gICAgICAg
IHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5ydW50aW1lQ29uZGl0aW9uYWxseVJlYWRX
cml0ZUF0dHJpYnV0ZVB1YmxpY05hbWUoKSwgQ3VzdG9tR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0s
IGpzVGVzdE9ialJ1bnRpbWVDb25kaXRpb25hbGx5UmVhZFdyaXRlQXR0cmlidXRlLCBudWxscHRy
KSwgYXR0cmlidXRlc0ZvclN0cnVjdHVyZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
T01BdHRyaWJ1dGUpKSk7CisgICAgICAgIHB1dERpcmVjdEN1c3RvbUFjY2Vzc29yKHZtLCBzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpLT5idWlsdGluTmFtZXMoKS5y
dW50aW1lQ29uZGl0aW9uYWxseVJlYWRXcml0ZUF0dHJpYnV0ZVB1YmxpY05hbWUoKSwgSlNDOjpE
T01BdHRyaWJ1dGVHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwganNUZXN0T2JqUnVudGltZUNvbmRp
dGlvbmFsbHlSZWFkV3JpdGVBdHRyaWJ1dGUsIG51bGxwdHIsIEpTQzo6RE9NQXR0cmlidXRlQW5u
b3RhdGlvbiB7IEpTVGVzdE9iajo6aW5mbygpLCBudWxscHRyIH0pLCBhdHRyaWJ1dGVzRm9yU3Ry
dWN0dXJlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSkpKTsKICAg
ICBpZiAoaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyAmJiBzdHJ1Y3R1cmUoKS0+aXNEaWN0
aW9uYXJ5KCkpCiAgICAgICAgIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKICAgICBwdXRE
aXJlY3Qodm0sIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSktPmJ1
aWx0aW5OYW1lcygpLnByaXZhdGVNZXRob2RQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCgpLCAwLCBTdHJpbmcoKSwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Qcml2YXRlTWV0aG9kKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjFiN2E5NDQyODVlZTQ1
ZDU3OWM5NTRiZjk2OGQ5MzA4NGI1Mjk3OS4uYjI2ZmVkOWFjZDAwMmJjNGI5ZmJhN2I4YjVlNGUx
ZDJkZmExZjE4OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTA2ICBZdXN1a2UgU3V6
dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggd2hlbiBydW5uaW5nIHdl
Yi1hcGlzIGRhdGEgY29sbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyNDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBqcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0dGVyLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvZG9tL2RvbS1hdHRyaWJ1dGUtZ2V0dGVyLXNl
dHRlci5odG1sOiBBZGRlZC4KKwogMjAyMC0wNi0wNSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFk
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI2MjYxOSwgcjI2
MjYyNSwgYW5kIHIyNjI2NDEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0
dHJpYnV0ZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RvbS9k
b20tYXR0cmlidXRlLWdldHRlci1zZXR0ZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3NzRh
YzEyNjcwNTg0ZDk0ZmQxY2Y0OWI0YzVlYzBhNGE2MWIyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0dGVyLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDUgQEAKK1BBU1MgY29uc29sZS5sb2codHlwZW9mIEFuaW1hdGlvbi5wcm90
b3R5cGUudGltZWxpbmUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFRoZSBBbmltYXRpb24u
dGltZWxpbmUgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mIEFuaW1hdGlv
bi4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0dGVy
Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9kb20vZG9tLWF0dHJpYnV0ZS1nZXR0ZXItc2V0dGVyLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODA3Mjk2ZTAxODBlMDA2YTMxYjJiN2Y2YzU3ZTk1MTIzNjUxZjhhNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS9kb20tYXR0cmlidXRlLWdldHRl
ci1zZXR0ZXIuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK3Nob3VsZFRocm93RXJyb3JOYW1lKGBj
b25zb2xlLmxvZyh0eXBlb2YgQW5pbWF0aW9uLnByb3RvdHlwZS50aW1lbGluZSlgLCBgVHlwZUVy
cm9yYCk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="416663"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>