<?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>27431</bug_id>
          
          <creation_ts>2009-07-19 15:16:11 -0700</creation_ts>
          <short_desc>splitting CodeGeneratorGObject.pm into library files</short_desc>
          <delta_ts>2018-06-10 13:07:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16401</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Luke Kenneth Casson Leighton">lkcl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133028</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 15:16:11 -0700</bug_when>
    <thetext>this is part of the series of patches to split #16401 into smaller
patches, as part of an agreement recommended by david.

CodeGeneratorGObjectLibrary1.pm is the remainder of CodeGeneratorGObject.pm which was split in order to shrink its size, so that it would be more acceptable in size for reviewers.  in order to maintain the code in a working state, the GObject Code Generator will be split into as many files as it takes for reviewers to accept them.  each split will go under its own bugreport, such that discussions of the issues for that fragment can be kept to a manageable minimum.

if the reviewers or anyone else would like to make a better suggestion in advance - one that will save both themselves and myself vast amounts of time - now would be a good time to make it.  i&apos;m quite prepared to split the file up into 1,500 patches of 1 line each if that&apos;s what it takes (and will happily write a program to do so that will make that possible for me to do with no effort involved, thus placing the burden onto the reviewers, not myself).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133029</commentid>
    <comment_count>1</comment_count>
      <attachid>33060</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 15:19:06 -0700</bug_when>
    <thetext>Created attachment 33060
code generator gobject library #1

anyone got any better suggestions that will save everyone time, please make them known....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134294</commentid>
    <comment_count>2</comment_count>
      <attachid>33060</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-23 15:49:41 -0700</bug_when>
    <thetext>Comment on attachment 33060
code generator gobject library #1

cancelling review request after changes made under  https://bugs.webkit.org/show_bug.cgi?id=27424 which affect this patch.

will re-submit (and take the opportunity to correct the ChangeLog entry layout)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137950</commentid>
    <comment_count>3</comment_count>
      <attachid>34289</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 10:20:05 -0700</bug_when>
    <thetext>Created attachment 34289
updated from other review comments

ok - suggestions on how this [large] file should be reviewed easier welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138028</commentid>
    <comment_count>4</comment_count>
      <attachid>34289</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 12:04:01 -0700</bug_when>
    <thetext>Comment on attachment 34289
updated from other review comments

This looks like a big hack.  If we&apos;re going to do this, lets do it right.  No commented out code.  No long lists of exclusions.  Nicely named methods which actually follow WebKit style guidlines.  Small files that reviewers have a chance of understanding.  Detailed ChangeLogs.  Use of sets/hashes instead of long lists of copy/paste ifs.  

As is, either you&apos;re just looking for a rubber-stamp.  Or you don&apos;t realize how much patches like this are just a waste of time.

Glad to have you contributing.  But if you&apos;re going to contribute to a product as mature as WebKit, you need to expect to take a bit longer on your patches, and write mature, well structured patches instead of hacks.

Contributing to a large project like WebKit is a lot of work. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138081</commentid>
    <comment_count>5</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 13:11:55 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 34289 [details])
&gt; This looks like a big hack.

 yep!  you got that right :)

  it&apos;s pieced together from _both_ the CodeGeneratorJS.pm _and_ the CodeGeneratorObjC.pm, and is the only major piece of perl programming i&apos;ve ever forced myself to work on.  i&apos;m deeply proud of both how much of a dog&apos;s dinner it is and that it actually works at all. *beam* :)


&gt;  If we&apos;re going to do this, lets do it right.  No
&gt; commented out code.  No long lists of exclusions.  Nicely named methods which
&gt; actually follow WebKit style guidlines.  Small files that reviewers have a
&gt; chance of understanding.  Detailed ChangeLogs.  Use of sets/hashes instead of
&gt; long lists of copy/paste ifs.  

 .... not being funny or anything, but... seriously, take a look at the code from which this was cut/paste copied (verbatim in some cases).  i&apos;m just looking through it, now, but some of the stuff that _was_ there has gone.

* UsesManualToGDOMImplementation came from the august 2008 version of CodeGeneratorObjC.pm.  it&apos;s gone, now.

* likewise isGDOMSubClass - that was cut/paste verbatim conceptually from the other CodeGenerators - but they&apos;re gone, now, too.

* see addIncludesForType in CodeGeneratorObjC.pm - that concept is still there, you can see it shining through in addIncHdr and addPropIncHdr.

* look at the code-density of lines 1082 to 1206 in CodeGeneratorJS.pm!  

* 1325 to 1334 in CodeGeneratorJS.pm i&apos;m particularly fond of :)  makes me feel like i&apos;m 5 years old again, just slide down the brackets, wheeeee :)

* GetNativeType is the _new_ version of what i originally cut/paste from CodeGeneratorJS.pm, to create GetGType() and GetPropGType().



so, what you&apos;re seeing now is what the code _used_ to look like back in august 2008, when this work was in active development, when an intelligent non-perl-programmer gets their hands on it and just goes, &quot;err, where&apos;s something i can blatantly copy that will get me from a to b?  oh look - _there_!&quot;

so - _fortunately_, there is yet more examples for me to blatantly cut-and-paste (GetNativeType)








&gt; As is, either you&apos;re just looking for a rubber-stamp.  Or you don&apos;t realize how
&gt; much patches like this are just a waste of time.

 not quiiite true - and not quite fair, either.  do take a look at the older versions of CodeGeneratorJS.pm and CodeGeneratorObjC.pm:

 http://svn.webkit.org/repository/webkit/trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm?r=26579

http://svn.webkit.org/repository/webkit/trunk/WebCore/bindings/scripts/CodeGeneratorObjC.pm?r=26579

take a look at TypeCanFailConversion, GetNativeType, UsesManualToJSImplementation and you&apos;ll soon see that i&apos;m really _not_ taking the piss, i was just working from what was there at the time.


&gt; Glad to have you contributing. 

 *beam* :)

&gt; But if you&apos;re going to contribute to a product
&gt; as mature as WebKit, you need to expect to take a bit longer on your patches,
&gt; and write mature, well structured patches instead of hacks.

 eric - you&apos;re going to be amused re-reading this after looking at the older versions i was working from, at the time, i guarantee it.


&gt; Contributing to a large project like WebKit is a lot of work. :)

 mmmm :)

 ok.

 rrrright.

 i&apos;ll start with some splits into sensible / reasonable sizes, and make some more cut/paste copies, from what&apos;s already there.

 but - PLEASE do not expect me to make &quot;functionality&quot; changes / logic changes.  i&apos;ve validated this code, hair-raisingly nasty as it is, by using pyjamas-desktop&apos;s 20 examples / samples, so i know that it works.

 i reaaallly don&apos;t want to be making additions / changes whilst also at the same going through a massive restructuring.

 if it wasn&apos;t for the massive amount of in-built logic and decisions, yes i&apos;d do a from-scratch rewrite.  but, like the linux kernel floppy code, there&apos;s simply too much that&apos;s been taken into account to go throwing it away and starting again.

 i&apos;m happy to make it at least _look_ nicer, though :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138197</commentid>
    <comment_count>6</comment_count>
      <attachid>34339</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 15:50:37 -0700</bug_when>
    <thetext>Created attachment 34339
tidyup / function split / typemap etc.

... something like this?

i tried splitting it into separate files, and somehow / somewhy it didn&apos;t work.  i&apos;ll try to find out why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138211</commentid>
    <comment_count>7</comment_count>
      <attachid>34341</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-07 16:34:32 -0700</bug_when>
    <thetext>Created attachment 34341
split into two library files; requesting veery quick review

ok - i worked it out (the splitting)  do you mean something like this?  if so, i&apos;ll break it down further, as separate bugreports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138309</commentid>
    <comment_count>8</comment_count>
      <attachid>34341</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-08 04:08:34 -0700</bug_when>
    <thetext>Comment on attachment 34341
split into two library files; requesting veery quick review

cancelling review whilst auto-patch-maintenance script is written which puts ChangeLog at top of file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138670</commentid>
    <comment_count>9</comment_count>
      <attachid>34466</attachid>
    <who name="Gour">gour</who>
    <bug_when>2009-08-10 08:20:30 -0700</bug_when>
    <thetext>Created attachment 34466
uploaded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139512</commentid>
    <comment_count>10</comment_count>
      <attachid>34466</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-08-12 13:39:54 -0700</bug_when>
    <thetext>Comment on attachment 34466
uploaded

Numbered files is not a logical way for splitting a Perl module.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431652</commentid>
    <comment_count>11</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2018-06-10 13:07:34 -0700</bug_when>
    <thetext>No point in doing this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33060</attachid>
            <date>2009-07-19 15:19:06 -0700</date>
            <delta_ts>2009-08-07 10:20:05 -0700</delta_ts>
            <desc>code generator gobject library #1</desc>
            <filename>gcl1.patch</filename>
            <type>text/plain</type>
            <size>50109</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC02MjQyOSw2ICs2MjQzNywxNSBAQAogICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3Jt
KToKICAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkpOgogCisyMDA4LTExLTMwICBsa2Ns
IDxsa2NsQGxrY2wubmV0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpCisK
KyAgICAgICAgQWRkIEdPYmplY3QgQ29kZSBHZW5lcmF0b3IgTGlicmFyeSAxCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQzMQorCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdExpYnJhcnkxLnBtOiBBZGRlZCBn
b2JqZWN0IGxpYnJhcnksIGJlZ2lubmluZyB0aGUgcHJvY2VzcyBvZiBzcGxpdHRpbmcgQ29kZUdl
bmVyYXRvckdPYmplY3QucG0gaW50byBhcyBtYW55IGZpbGVzIGFzIGl0IHRha2VzIHRvIGdldCBD
b2RlR2VuZXJhdG9yR09iamVjdC5wbSB0aHJvdWdoIHJldmlldy4KKwogMjAwOC0xMi0wNCAgSnVs
aWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdExpYnJhcnkxLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdExpYnJhcnkxLnBtCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTEucG0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUwNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4KKyMgQ29weXJp
Z2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxzb3RvQGZyZWVkZXNrdG9wLm9yZz4KKyMgQ29weXJp
Z2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisjCisjIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisjIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisjIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorIyBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKworcGFja2FnZSBDb2RlR2VuZXJhdG9yR09iamVjdDsKKworIyBEZWZhdWx0
IExpY2VuY2UgVGVtcGxhdGVzCitteSAkbGljZW5jZVRlbXBsYXRlID0gPDwgIkVPRiI7CisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xc
QGxrY2wubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwXEBhdG9rZXIu
Y29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4KKyAqLworRU9GCisKK215ICVp
bXBsSW5jbHVkZXMgPSAoKTsKK215ICVoZHJJbmNsdWRlcyA9ICgpOworbXkgJWhkclByb3BJbmNs
dWRlcyA9ICgpOworbXkgJWltcGxUeXBlZGVmcyA9ICgpOworCisjIERlZmF1bHQgY29uc3RydWN0
b3IKK3N1YiBuZXcgeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkcmVmZXJlbmNl
ID0geyB9OworCisgICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsKKyAgICAkb3V0cHV0RGlyID0g
c2hpZnQ7CisKKyAgICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKKyAgICByZXR1cm4gJHJl
ZmVyZW5jZTsKK30KKworc3ViIGZpbmlzaCB7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworfQor
CitzdWIgQ2xzVG9HT2JqVHlwZSB7CisgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OworICAgIHJl
dHVybiB1YyhkZWNhbWVsaXplKCRjbGFzc05hbWUpKQorfQorCitzdWIgR2V0UGFyZW50Q2xhc3NO
YW1lIHsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgICMgPz8gcXVlPz8KKyAgICAj
cmV0dXJuICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9IGlm
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9OworICAgIHJl
dHVybiAiR2RvbURPTU9iamVjdCIgaWYgQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDA7CisgICAg
cmV0dXJuICJHZG9tIiAuICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkZGF0YU5vZGUtPnBh
cmVudHMoMCkpOworfQorCitzdWIgR2V0UGFyZW50R09ialR5cGUgeworICAgIG15ICRkYXRhTm9k
ZSA9IHNoaWZ0OworCisgICAgIyA/PyBxdWU/PworICAgICNyZXR1cm4gJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In0gaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In07CisgICAgcmV0dXJuICJHRE9NX1RZUEVfRE9NX09C
SkVDVCIgaWYgQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDA7CisgICAgcmV0dXJuICJHRE9NX1RZ
UEVfIiAuIENsc1RvR09ialR5cGUoJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9k
ZS0+cGFyZW50cygwKSkpOworfQorCisKKyMgQWxnb3JpdGhtIHRha2VuIGZyb20gU3RyaW5nOjpD
YW1lbENhc2UgMC4wMQorc3ViIGNhbWVsaXplIHsKKyAgICBteSAkcyA9IHNoaWZ0OworICAgIGpv
aW4oJycsIG1hcHsgdWNmaXJzdCAkXyB9IHNwbGl0KC8oPzw9W0EtWmEtel0pXyg/PVtBLVphLXpd
KXxcYi8sICRzKSk7Cit9CisKKyMgQWxnb3JpdGhtIHRha2VuIGZyb20gU3RyaW5nOjpDYW1lbENh
c2UgMC4wMQorc3ViIGRlY2FtZWxpemUgeworICAgIG15ICRzID0gc2hpZnQ7CisgICAgJHMgPX4g
c3soW15hLXpBLVpdPykoW0EtWl0qKShbQS1aXSkoW2Etel0/KX17CisgICAgICAgIG15ICRmYyA9
IHBvcygkcyk9PTA7CisgICAgICAgIG15ICgkcDAsJHAxLCRwMiwkcDMpID0gKCQxLGxjJDIsbGMk
MywkNCk7CisgICAgICAgIG15ICR0ID0gJHAwIHx8ICRmYyA/ICRwMCA6ICdfJzsKKyAgICAgICAg
JHQgLj0gJHAzID8gJHAxID8gIiR7cDF9XyRwMiRwMyIgOiAiJHAyJHAzIiA6ICIkcDEkcDIiOwor
ICAgICAgICAkdDsKKyAgICB9Z2U7CisgICAgJHM7Cit9CisKK3N1YiBHZXRIZHJOYW1lIHsKKyAg
ICBteSAkbmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CisKKyAgICBy
ZXR1cm4gIkdkb20kbmFtZSI7Cit9CisKK3N1YiBHZXRDbGFzc05hbWUgeworICAgIG15ICRuYW1l
ID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKKworICAgIHJldHVybiAiR2Rv
bSRuYW1lIjsKK30KKworc3ViIEdldEdJbmNsdWRlSGRyIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0
OworICAgIG15ICRuYW1lID0gR2V0SGRyTmFtZSgkdHlwZSk7CisgICAgI215ICRuYW1lID0gY2Ft
ZWxpemUoR2V0Q2xhc3NOYW1lKCR0eXBlKSk7CisKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEg
ImludCI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJsb25nIjsKKyAgICByZXR1cm4gIiIg
aWYgJHR5cGUgZXEgInNob3J0IjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgImNoYXIiOwor
ICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAiZmxvYXQiOworICAgIHJldHVybiAiIiBpZiAkdHlw
ZSBlcSAiZG91YmxlIjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIjsKKyAg
ICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGludCI7CisgICAgcmV0dXJuICIiIGlm
ICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgInVu
c2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBz
aG9ydCI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOworICAgIHJl
dHVybiAiIiBpZiAkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7CisgICAgcmV0dXJuICJSYW5nZS5o
IiBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CisgICAgcmV0dXJuICJnZG9tL0dkb21DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaCIgaWYgJHR5cGUgZXEgIkRPTU9iamVjdCI7CisgICAgcmV0dXJu
ICIiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBjaGFyIjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUg
ZXEgIlJHQkNvbG9yIjsgIyBYWFggVE9ETyAtIERPTSBjbGFzcyB3cmFwcGVyCisgICAgcmV0dXJu
ICJnbGliLW9iamVjdC5oIiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gIkdk
b21Ob2RlLmgiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCI7CisKKyAgICByZXR1cm4gImdsaWIt
b2JqZWN0LmgiIGlmICR0eXBlIGVxICJmbG9hdCI7CisKKyAgICByZXR1cm4gImdsaWItb2JqZWN0
LmgiIGlmICR0eXBlIGVxICJib29sZWFuIjsKKworICAgIHJldHVybiAiZ2xpYi1vYmplY3QuaCIg
aWYgJHR5cGUgZXEgInZvaWQiOworCisgICAgcmV0dXJuICIkbmFtZS5oIjsKK30KKworIyByZXR1
cm5zIDEgaWYgd2UgbmVlZCB0byBjcmVhdGUgYSBnb2JqZWN0IHdyYXBwZXIgYXJvdW5kIHRoZSBy
ZXR1cm4gcmVzdWx0CitzdWIgSXNHRE9NQ2xhc3NUeXBlIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0
OworICAgIG15ICRuYW1lID0gR2V0Q2xhc3NOYW1lKCR0eXBlKTsKKworICAgIHJldHVybiAwIGlm
ICR0eXBlIGVxICJET01UaW1lU3RhbXAiOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJET01T
dHJpbmciOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJFdmVudExpc3RlbmVyIjsKKyAgICBy
ZXR1cm4gMCBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUg
ZXEgImZsb2F0IjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiZG91YmxlIjsKKyAgICByZXR1
cm4gMCBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImNo
YXIiOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJsb25nIjsKKyAgICByZXR1cm4gMCBpZiAk
dHlwZSBlcSAic2hvcnQiOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1Y2hhciI7CisgICAg
cmV0dXJuIDAgaWYgJHR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBl
cSAiaW50IjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsKKyAgICBy
ZXR1cm4gMCBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJuIDAgaWYgJHR5
cGUgZXEgInVuc2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgInVu
c2lnbmVkIHNob3J0IjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiUkdCQ29sb3IiOyAjIFhY
WCBUT0RPIC0gRE9NIGNsYXNzIHdyYXBwZXIKKworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ2
b2lkIjsKKworICAgIHJldHVybiAxOworfQorCitzdWIgR2V0UHJvcEdUeXBlIHsKKyAgICBteSAk
dHlwZSA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gR2V0Q2xhc3NOYW1lKCR0eXBlKTsKKworICAg
IHJldHVybiAic3RyaW5nIiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gImZs
b2F0IiBpZiAkdHlwZSBlcSAiZmxvYXQiOworICAgIHJldHVybiAibm90eWV0c3VwcG9ydGVkIiBp
ZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CisgICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBlIGVx
ICJkb3VibGUiOworICAgIHJldHVybiAiYm9vbGVhbiIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwor
ICAgIHJldHVybiAiY2hhciIgaWYgJHR5cGUgZXEgImNoYXIiOworICAgIHJldHVybiAibG9uZyIg
aWYgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAiaW50IiBpZiAkdHlwZSBlcSAic2hvcnQi
OworICAgIHJldHVybiAidWNoYXIiIGlmICR0eXBlIGVxICJ1Y2hhciI7CisgICAgcmV0dXJuICJ1
aW50IiBpZiAkdHlwZSBlcSAidW5zaWduZWQiOworICAgIHJldHVybiAiaW50IiBpZiAkdHlwZSBl
cSAiaW50IjsKKyAgICByZXR1cm4gInVpbnQiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBpbnQiOwor
ICAgIHJldHVybiAidWludDY0IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsKKyAg
ICByZXR1cm4gInVsb25nIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJu
ICJ1c2hvcnQiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgcmV0dXJuICJ1bG9u
ZyIgaWYgJHR5cGUgZXEgIlJHQkNvbG9yIjsgIyBYWFggVE9ETyAtIERPTSBjbGFzcyB3cmFwcGVy
CisKKyAgICByZXR1cm4gIm9iamVjdCI7Cit9CisKK3N1YiBHZXRHVHlwZSB7CisgICAgbXkgJHR5
cGUgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisgICAgI215
ICRuYW1lID0gY2FtZWxpemUoR2V0Q2xhc3NOYW1lKCR0eXBlKSk7CisKKyAgICByZXR1cm4gIkdk
b21Ob2RlICoiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCI7CisgICAgcmV0dXJuICJnY2hhciAq
IiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gImdmbG9hdCIgaWYgJHR5cGUg
ZXEgImZsb2F0IjsKKyAgICByZXR1cm4gIldlYkNvcmU6OlJhbmdlOjpDb21wYXJlSG93ICIgaWYg
JHR5cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiZ2RvdWJsZSIgaWYgJHR5cGUgZXEg
ImRvdWJsZSI7CisgICAgcmV0dXJuICJnYm9vbGVhbiIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwor
ICAgIHJldHVybiAiZ2NoYXIiIGlmICR0eXBlIGVxICJjaGFyIjsKKyAgICByZXR1cm4gImdsb25n
IiBpZiAkdHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuICJnc2hvcnQiIGlmICR0eXBlIGVxICJz
aG9ydCI7CisgICAgcmV0dXJuICJndWNoYXIiIGlmICR0eXBlIGVxICJ1Y2hhciI7CisgICAgcmV0
dXJuICJndWludCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gImdpbnQiIGlm
ICR0eXBlIGVxICJpbnQiOworICAgIHJldHVybiAiZ3VpbnQiIGlmICR0eXBlIGVxICJ1bnNpZ25l
ZCBpbnQiOworICAgIHJldHVybiAiZ3Vsb25nIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7
CisgICAgcmV0dXJuICJndWludDY0IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsK
KyAgICByZXR1cm4gImd1c2hvcnQiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAg
cmV0dXJuICJndWxvbmciIGlmICR0eXBlIGVxICJSR0JDb2xvciI7ICMgWFhYIFRPRE8gLSBET00g
Y2xhc3Mgd3JhcHBlcgorCisgICAgcmV0dXJuICJ2b2lkIiBpZiAkdHlwZSBlcSAidm9pZCI7CisK
KyAgICByZXR1cm4gIiRuYW1lICoiOworfQorCitzdWIgZ2V0SW5jSGRyIHsKKyAgICBteSAkdHlw
ZSA9IHNoaWZ0OworCisgICAgbXkgJGluY2x1ZGVIZHIgPSBHZXRHSW5jbHVkZUhkcigkdHlwZSk7
CisgICAgaWYgKCRpbmNsdWRlSGRyKSB7CisgICAgICAgIGlmICgkdHlwZSBlcSAiRXZlbnRUYXJn
ZXQiKSB7CisgICAgICAgICAgICByZXR1cm4gIkdkb21Ob2RlLmgiOworICAgICAgICB9IGVsc2lm
ICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgeworICAgICAgICAgICAgIyBYWFggPz8/PyB3dGY/PyA6
KSBjb3BpZWQgZnJvbSBqc2dlbmVyYXRvci4KKyAgICAgICAgICAgIHJldHVybiAiR2RvbUNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiAkaW5jbHVkZUhkcjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIiI7Cit9CisK
K3N1YiBhZGRQcm9wSW5jSGRyIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgbXkgJGhk
ciA9IGdldEluY0hkcigkdHlwZSk7CisgICAgaWYgKCRoZHIgbmUgIiIpIHsKKyAgICAgICAgaWYg
KElzR0RPTUNsYXNzVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgICAgICRoZHIgPSBzdWJzdHIoJGhk
ciwgMCwgbGVuZ3RoKCRoZHIpLTIpOworICAgICAgICAgICAgJGhkclByb3BJbmNsdWRlc3siZ2Rv
bS8iLiRoZHIuIi5oIn0gPSAxOworICAgICAgICAgICAgJGhkclByb3BJbmNsdWRlc3siZ2RvbS8i
LiRoZHIuIlByaXZhdGUuaCJ9ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRo
ZHJQcm9wSW5jbHVkZXN7JGhkcn0gPSAxOworICAgICAgICB9CisgICAgfQorCit9CisKK3N1YiBh
ZGRJbmNIZHIgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICBteSAkaGRyID0gZ2V0SW5j
SGRyKCR0eXBlKTsKKyAgICBpZiAoJGhkciBuZSAiIikgeworICAgICAgICBpZiAoSXNHRE9NQ2xh
c3NUeXBlKCR0eXBlKSkgeworICAgICAgICAgICAgJGhkckluY2x1ZGVzeyJnZG9tLyRoZHIifSA9
IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkaGRySW5jbHVkZXN7JGhkcn0gPSAx
OworICAgICAgICB9CisgICAgfQorCit9CisKK3N1YiBhZGRJbmNCb2R5IHsKKyAgICBteSAkdHlw
ZSA9IHNoaWZ0OworCisgICAgbXkgJGhkciA9IGdldEluY0hkcigkdHlwZSk7CisgICAgaWYgKCRo
ZHIgbmUgIiIpIHsKKyAgICAgICAgaWYgKElzR0RPTUNsYXNzVHlwZSgkdHlwZSkpIHsKKyAgICAg
ICAgICAgICRpbXBsSW5jbHVkZXN7Imdkb20vJGhkciJ9ID0gMTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7JGhkcn0gPSAxOworICAgICAgICB9CisgICAgfQor
fQorCitzdWIgR2V0UHJpdkZuIHsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAg
IG15ICRsY2FzZV9pZmFjZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmVzID0gc2hpZnQ7CisgICAg
bXkgJHBhcm0gPSBzaGlmdDsKKworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRXZlbnRUYXJn
ZXQiKSB7CisgICAgICAgIHJldHVybiAiV2ViQ29yZTo6Tm9kZSAqICRyZXMgPSBXZWJLaXQ6OmNv
cmUoc2VsZik7IjsKKyAgICB9CisgICAgcmV0dXJuICJXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9
ICogJHJlcyA9IFdlYktpdDo6Y29yZSgkcGFybSk7IjsKK30KKworc3ViIHNraXBQcm9wVGVtcG9y
YXJpbHkgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJHByb3BfdHlwZSA9IHNoaWZ0
OworCisgICAgIyBza2lwIE1lZGlhTGlzdAorICAgIGlmICgkcHJvcF90eXBlIGVxICJzdHlsZXNo
ZWV0czo6TWVkaWFMaXN0IikgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAjIHNr
aXAgT2JqZWN0CisgICAgaWYgKCRwcm9wX3R5cGUgZXEgIk9iamVjdCIpIHsKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgfQorCisgICAgIyBza2lwIEV2ZW50CisgICAgaWYgKCRwcm9wX3R5cGUgZXEg
IkV2ZW50IikgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAjIHNraXAgQ3J5cHRv
CisgICAgaWYgKCRwcm9wX3R5cGUgZXEgIkNyeXB0byIpIHsKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgfQorCisgICAgIyBza2lwIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uCisgICAgaWYgKCRwcm9w
X3R5cGUgZXEgIkNTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uIikgeworICAgICAgICByZXR1cm4gMTsK
KyAgICB9CisKKyAgICAjIHNraXAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24KKyAgICAjaWYg
KCRwcm9wX3R5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iKSB7CisgICAgIyAgICByZXR1cm4g
MTsKKyAgICAjfQorCisgICAgIyBza2lwIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uCisgICAg
I2lmICgkcHJvcF90eXBlIGVxICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiIpIHsKKyAgICAj
ICAgIHJldHVybiAxOworICAgICN9CisKKyAgICAjIHNraXAgRXZlbnRMaXN0ZW5lcgorICAgIGlm
ICgkcHJvcF90eXBlIGVxICJFdmVudExpc3RlbmVyIikgeworICAgICAgICByZXR1cm4gMTsKKyAg
ICB9CisKKyAgICAjIHNraXAgRE9NV2luZG93CisgICAgI2lmICgkcHJvcF90eXBlIGVxICJET01X
aW5kb3ciKSB7CisgICAgIyAgICByZXR1cm4gMTsKKyAgICAjfQorCisgICAgIyBza2lwIENvbnN0
cnVjdG9ycyAod2hhdGV2ZXIgdGhleSBhcmUpIGZvciBub3cuCisgICAgaWYgKCRwcm9wX3R5cGUg
PX4gL0NvbnN0cnVjdG9yJC8pIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBj
YW52YXMyZC4uLi4KKyAgICBpZiAoJHByb3BfdHlwZSBlcSAiY3VzdG9tIikgeworICAgICAgICBy
ZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoJHByb3BfdHlwZSBlcSAiQXJyYXkiKSB7CisgICAg
ICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmICgkcHJvcF90eXBlIGVxICJET01UaW1lU3Rh
bXAiKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICMgVE9ETzogU1ZHCisgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1BvZFR5cGUoJHR5cGUpIHx8ICRjb2RlR2VuZXJhdG9yLT5J
c1NWR0FuaW1hdGVkVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAg
IHJldHVybiAwOworfQorCitzdWIgVXNlc01hbnVhbFRvR0RPTUltcGxlbWVudGF0aW9uIHsKKyAg
ICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgIyBza2lwcGVkIG91dCBDYW52YXNQaXhlbEFycmF5
IC0gc2VlIEpTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAgZm9yIHdoeS4KKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiTm9kZSIgb3IgJHR5cGUgZXEgIkRvY3VtZW50IiBvciAkdHlwZSBlcSAi
SFRNTENvbGxlY3Rpb24iIG9yCisgICAgICAkdHlwZSBlcSAiU1ZHUGF0aFNlZyIgb3IgJHR5cGUg
ZXEgIlN0eWxlU2hlZXQiIG9yICR0eXBlIGVxICJDU1NSdWxlIiBvciAkdHlwZSBlcSAiQ1NTVmFs
dWUiIG9yCisgICAgICAkdHlwZSBlcSAiT2JqZWN0IiBvcgorCSR0eXBlIGVxICJFdmVudCIgb3Ig
JHR5cGUgZXEgIkVsZW1lbnQiIG9yICR0eXBlIGVxICJUZXh0IjsKKyAgICByZXR1cm4gMDsKK30K
KworCisjIEdlbmVyYXRlIGhlYWRlciBhbmQgaW1wbAorc3ViIEdlbmVyYXRlIHsKKyAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICBteSAkaGFz
TGVnYWN5UGFyZW50ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFy
ZW50In07CisgICAgbXkgJGhhc1JlYWxQYXJlbnQgPSBAeyRkYXRhTm9kZS0+cGFyZW50c30gPiAw
OworICAgIG15ICRoYXNQYXJlbnQgPSAkaGFzTGVnYWN5UGFyZW50IHx8ICRoYXNSZWFsUGFyZW50
OworICAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBHZXRQYXJlbnRDbGFzc05hbWUoJGRhdGFOb2Rl
KTsKKyAgICBteSAkcGFyZW50R09ialR5cGUgPSBHZXRQYXJlbnRHT2JqVHlwZSgkZGF0YU5vZGUp
OworICAgIG15ICRpbnRlcmZhY2VOYW1lID0gJGRhdGFOb2RlLT5uYW1lOworICAgIG15ICRjbGFz
c05hbWUgPSBHZXRDbGFzc05hbWUoJGludGVyZmFjZU5hbWUpOworICAgIG15ICRoZHJOYW1lID0g
R2V0SGRyTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisKKyAgICAjIEFkZCB0aGUgZGVmYXVsdCBpbXBs
IGhlYWRlciB0ZW1wbGF0ZQorICAgIEBjUHJlZml4ID0gc3BsaXQoIlxyIiwgJGxpY2VuY2VUZW1w
bGF0ZSk7CisgICAgcHVzaChAY1ByZWZpeCwgIlxuIik7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJH
RE9NQmluZGluZy5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7Imdkb20vJGhkck5hbWUuaCJ9
ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tLyR7aGRyTmFtZX1Qcml2YXRlLmgifSA9IDE7
CisKKyAgICBteSAkcGFyZW50SW50ZXJmYWNlTmFtZSA9ICJET01PYmplY3QiOworICAgIG15ICRw
YXJlbnRHSWZhY2VOYW1lID0gIkdET01PYmplY3QiOworICAgIG15ICRwYXJlbnRIZHJOYW1lID0g
Ikdkb21ET01PYmplY3QiOworICAgIGlmICgkcGFyZW50Q2xhc3NOYW1lIG5lICJHT2JqZWN0Iikg
eworICAgICAgICAkcGFyZW50SW50ZXJmYWNlTmFtZSA9IHN1YnN0cigkcGFyZW50Q2xhc3NOYW1l
LCA0KTsKKyAgICAgICAgaWYgKCRwYXJlbnRJbnRlcmZhY2VOYW1lIG5lICJET01PYmplY3QiKSB7
CisgICAgICAgICAgICAkcGFyZW50R0lmYWNlTmFtZSA9ICJHRE9NIi5zdWJzdHIoJHBhcmVudENs
YXNzTmFtZSwgNCk7CisgICAgICAgICAgICAkcGFyZW50SGRyTmFtZSA9IEdldEhkck5hbWUoJHBh
cmVudEludGVyZmFjZU5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJHBhcmVu
dEdJZmFjZU5hbWUgPSAiR0RPTU9iamVjdCI7CisgICAgICAgIH0KKyAgICAgICAgJGltcGxJbmNs
dWRlc3siZ2RvbS8ke3BhcmVudEhkck5hbWV9LmgifSA9IDE7CisgICAgICAgICRpbXBsSW5jbHVk
ZXN7Imdkb20vJHtwYXJlbnRIZHJOYW1lfVByaXZhdGUuaCJ9ID0gMTsKKyAgICAgICAgJGhkcklu
Y2x1ZGVzeyJnZG9tLyR7cGFyZW50SGRyTmFtZX0uaCJ9ID0gMTsKKyAgICAgICAgIyRoZHJJbmNs
dWRlc3siUHJpdmF0ZSR7cGFyZW50SGRyTmFtZX0uaCJ9ID0gMDsKKyAgICB9CisKKyAgICAjIFRP
RE8gLSBtYWtlIHRoZXNlIG9ubHkgaW5jbHVkZSB3aGVyZSBuZWVkZWQsIGxpa2V3aXNlIHRoZQor
ICAgICMgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvR0RPTSwgdG9vCisgICAgJGltcGxJbmNsdWRl
c3siTm9kZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7Ik5vZGVMaXN0LmgifSA9IDE7Cisg
ICAgJGltcGxJbmNsdWRlc3siRWxlbWVudC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNT
U1ZhbHVlLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siQ1NTUnVsZS5oIn0gPSAxOworICAg
ICRpbXBsSW5jbHVkZXN7IkNTU1J1bGVMaXN0LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3si
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkhUTUxDb2xs
ZWN0aW9uLmgifSA9IDE7CisgICAgIyRpbXBsSW5jbHVkZXN7IlNWR1BhdGhTZWcuaCJ9ID0gMTsK
KyAgICAkaW1wbEluY2x1ZGVzeyJTdHlsZVNoZWV0LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRl
c3siRXZlbnQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDYW52YXNQaXhlbEFycmF5Lmgi
fSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siRE9NV2luZG93LmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siVGV4dC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNvdW50ZXIuaCJ9ID0g
MTsKKyAgICAkaW1wbEluY2x1ZGVzeyJSZWN0LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3si
SW1hZ2VEYXRhLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzR3JhZGllbnQuaCJ9
ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJUZXh0TWV0cmljcy5oIn0gPSAxOworICAgICRpbXBs
SW5jbHVkZXN7IkRhdGFiYXNlLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siRE9NU2VsZWN0
aW9uLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siWFBhdGhSZXN1bHQuaCJ9ID0gMTsKKyAg
ICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dTdHJpbmdDb252ZXJ0LmgifSA9IDE7CisKKyAgICBwdXNo
KEBjQm9keSwgIm5hbWVzcGFjZSBXZWJLaXQge1xuIik7CisKKyAgICAjIEdldCBjb3JyZWN0IHBh
c3Mvc3RvcmUgdHlwZXMgcmVzcGVjdGluZyBQT0RUeXBlIGZsYWcKKyAgICBteSAkcG9kVHlwZSA9
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBPRFR5cGUifTsKKyAgICBteSAkcGFz
c1R5cGUgPSAkcG9kVHlwZSA/ICJKU1NWR1BPRFR5cGVXcmFwcGVyPCRwb2RUeXBlPioiIDogIiRp
bnRlcmZhY2VOYW1lKiI7CisKKyAgICBpZiAoIVVzZXNNYW51YWxUb0dET01JbXBsZW1lbnRhdGlv
bigkaW50ZXJmYWNlTmFtZSkpIHsKKwkkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKK2dwb2ludGVy
IHRvR0RPTShXZWJDb3JlOjokcGFzc1R5cGUgb2JqKQoreworICAgIGlmICghb2JqKQorCXJldHVy
biBOVUxMOworCisgICAgaWYgKGdwb2ludGVyIHJldCA9IEdET01PYmplY3RDYWNoZTo6Z2V0RE9N
T2JqZWN0KG9iaikpCisJcmV0dXJuIHJldDsKKworICAgIHJldHVybiBHRE9NT2JqZWN0Q2FjaGU6
OnB1dERPTU9iamVjdChvYmosIFdlYktpdDo6d3JhcCR7aW50ZXJmYWNlTmFtZX0ob2JqKSk7Cit9
CitFT0YKKworICAgICAgICBwdXNoKEBjQm9keSwgJGltcGxDb250ZW50KTsKKyAgICB9CisKKyAg
ICBteSAkaW1wbENvbnRlbnQgPSAiIjsKKworICAgIHB1c2goQGNCb2R5LCAifSAvKiBuYW1lc3Bh
Y2UgV2ViS2l0ICovXG4iKTsKKworICAgICMgWFhYIFRPRE8gcHVzaChAY0JvZHksICJ1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTtcblxuIik7CisgICAgcHVzaChAY0JvZHksICJleHRlcm4gXCJDXCIg
e1xuXG4iKTsKKworICAgICMgQWRkIHRoZSBkZWZhdWx0IGhlYWRlciB0ZW1wbGF0ZQorICAgIEBo
UHJlZml4ID0gc3BsaXQoIlxyIiwgJGxpY2VuY2VUZW1wbGF0ZSk7CisgICAgI3B1c2goQGhQcmVm
aXgsICJcbiIpOworCisgICAgIyBIZWFkZXIgZ3VhcmQKKyAgICBteSAkZ3VhcmQgPSAiX18iIC4g
JGNsYXNzTmFtZSAuICJfSF9fIjsKKworICAgIG15ICRjbHNDYXBzID0gc3Vic3RyKENsc1RvR09i
alR5cGUoJGNsYXNzTmFtZSksIDUpOworICAgIG15ICRsY2FzZV9pZmFjZW5hbWUgPSAiZ2RvbV8i
IC4gZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgI215ICRwYXJlbnRDbHNDYXBzID0g
IkdET01fIiAuIENsc1RvR09ialR5cGUoJHBhcmVudEludGVyZmFjZU5hbWUpOworCisgICAgQGhQ
cmVmaXhHdWFyZCA9IDw8ICJFT0YiOworI2lmbmRlZiAkZ3VhcmQKKyNkZWZpbmUgJGd1YXJkCitF
T0YKKworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworR19CRUdJTl9ERUNMUworCitFT0YK
KworICAgIHB1c2goQGhCb2R5UHJlLCAkaW1wbENvbnRlbnQpOworCisgICAgJGltcGxDb250ZW50
ID0gPDwgIkVPRiI7CisKKyNkZWZpbmUgR0RPTV9UWVBFXyR7Y2xzQ2Fwc30gICAgICAgICAgICAo
JHtsY2FzZV9pZmFjZW5hbWV9X2dldF90eXBlKCkpCisjZGVmaW5lIEdET01fJHtjbHNDYXBzfShv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHRE9NX1RZ
UEVfJHtjbHNDYXBzfSwgJHtjbGFzc05hbWV9KSkKKyNkZWZpbmUgR0RPTV8ke2Nsc0NhcHN9X0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIEdET01fVFlQ
RV8ke2Nsc0NhcHN9LCAkY2xhc3NOYW1lKUNsYXNzKQorI2RlZmluZSBHRE9NX0lTXyR7Y2xzQ2Fw
c30ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgR0RPTV9U
WVBFXyR7Y2xzQ2Fwc30pKQorI2RlZmluZSBHRE9NX0lTXyR7Y2xzQ2Fwc31fQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgR0RPTV9UWVBFXyR7Y2xzQ2Fwc30p
KQorI2RlZmluZSBHRE9NXyR7Y2xzQ2Fwc31fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgR0RPTV9UWVBFXyR7Y2xzQ2Fwc30sICR7Y2xhc3NOYW1lfUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgXyR7Y2xhc3NOYW1lfVByaXZhdGUgJHtjbGFzc05hbWV9
UHJpdmF0ZTsKKworc3RydWN0IF8ke2NsYXNzTmFtZX0geworICAgICR7cGFyZW50Q2xhc3NOYW1l
fSBwYXJlbnRfaW5zdGFuY2U7CisgICAgJHtjbGFzc05hbWV9UHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfJHtjbGFzc05hbWV9Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCiske2xjYXNlX2lmYWNlbmFtZX1fZ2V0X3R5cGUg
KHZvaWQpOworCitFT0YKKworICAgIHB1c2goQGhCb2R5LCAkaW1wbENvbnRlbnQpOworCisgICAg
JGltcGxDb250ZW50ID0gPDwgIkVPRiI7CisjaWZuZGVmICR7Z3VhcmR9X1BST1BfCisjZGVmaW5l
ICR7Z3VhcmR9X1BST1BfCitFT0YKKworICAgIHB1c2goQGhCb2R5UHJvcFByZSwgJGltcGxDb250
ZW50KTsKKworICAgIHB1c2goQGhCb2R5UHJvcCwgIkdfQkVHSU5fREVDTFNcbiIpOworCisgICAg
JGhkclByb3BJbmNsdWRleyJnbGliLW9iamVjdC5oIn0gPSAxOworICAgICRoZHJQcm9wSW5jbHVk
ZXsiZ2RvbS8ke3BhcmVudEhkck5hbWV9UHJpdmF0ZS5oIn0gPSAxOworICAgICRoZHJQcm9wSW5j
bHVkZXsiJHtpbnRlcmZhY2VOYW1lfS5oIn0gPSAxOworCisgICAgJGltcGxJbmNsdWRlc3siZ2Rv
bS8ke3BhcmVudEhkck5hbWV9LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siJHtpbnRlcmZh
Y2VOYW1lfS5oIn0gPSAxOworCisgICAgJGltcGxUeXBlZGVmc3siJGNsYXNzTmFtZSJ9ID0gMTsK
KyAgICAkaW1wbFR5cGVkZWZzeyIke2NsYXNzTmFtZX1DbGFzcyJ9ID0gMTsKKworICAgICRpbXBs
Q29udGVudCA9IDw8ICJFT0YiOworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImdsaWIt
b2JqZWN0LmgiCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0cHJpdmF0ZS5oPiAKKyNpbmNsdWRlICJET01XaW5kb3cuaCIgLyogeXVrazog
VE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLworI2luY2x1ZGUgIk5vZGUuaCIgLyogeXVrazog
VE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLworI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIiAv
KiB5dWtrOiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVkZSAiQ2FudmFzUGF0
dGVybi5oIiAvKiB5dWtrOiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVkZSAi
Q2FudmFzR3JhZGllbnQuaCIgLyogeXVrazogVE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLwor
I2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9u
YWwgKi8KKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIgLyogeXVrazogVE9E
TyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLworI2luY2x1ZGUgPGdkb20vR2RvbURPTU9iamVjdFBy
aXZhdGUuaD4gLyogeXVrazogVE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLworI2luY2x1ZGUg
IiR7aW50ZXJmYWNlTmFtZX0uaCIKKyNpbmNsdWRlIDxnZG9tLyR7aGRyTmFtZX0uaD4KKyNpbmNs
dWRlIDxnZG9tLyR7aGRyTmFtZX1Qcml2YXRlLmg+CisjaW5jbHVkZSA8Z2RvbS8ke2hkck5hbWV9
cHJvcHMuaD4KKworI2luY2x1ZGUgImdkb20vR1N0cmluZ0NvbnZlcnQuaCIKKworI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIlRleHQu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRl
ICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRlIDxnZG9tL0dk
b21FdmVudC5oPgorCisKK0VPRgorCisgICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQp
OworCisgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CisKK0dfQkVHSU5fREVDTFMKKworR19E
RUZJTkVfVFlQRSgke2NsYXNzTmFtZX0sICR7bGNhc2VfaWZhY2VuYW1lfSwgJHtwYXJlbnRHT2Jq
VHlwZX0pOworCitzdHJ1Y3QgXyR7Y2xhc3NOYW1lfVByaXZhdGUgeworICAgIFJlZlB0cjxXZWJD
b3JlOjoke2ludGVyZmFjZU5hbWV9PiBjb3JlT2JqZWN0OworfTsKKworR19FTkRfREVDTFMKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKyR7Y2xhc3NOYW1lfSAqCit3cmFwJHtpbnRlcmZhY2VOYW1l
fShQYXNzUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IHBycENvcmVPYmplY3QpCit7
CisgICAgUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IGNvcmVPYmplY3QgPSBwcnBD
b3JlT2JqZWN0OworCisgICAgJHtjbGFzc05hbWV9ICp3cmFwcGVyID0gR0RPTV8ke2Nsc0NhcHN9
KGdfb2JqZWN0X25ldyhHRE9NX1RZUEVfJHtjbHNDYXBzfSwgTlVMTCkpOworICAgIEdkb21ET01P
YmplY3RQcml2YXRlKiBwcml2ID0gR0RPTV9ET01fT0JKRUNUX0dFVF9QUklWQVRFKEdET01fRE9N
X09CSkVDVCh3cmFwcGVyKSk7CisKKyAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICpyYXdD
b3JlT2JqZWN0ID0gY29yZU9iamVjdC5nZXQoKTsKKyAgICByYXdDb3JlT2JqZWN0LT5yZWYoKTsK
KyAgICBwcml2LT5jb3JlT2JqZWN0ID0gcmF3Q29yZU9iamVjdDsKKworICAgIHJldHVybiB3cmFw
cGVyOworfQorCitXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICoKK2NvcmUoJHtjbGFzc05hbWV9
ICpyZXF1ZXN0KQoreworICAgIGlmIChyZXF1ZXN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBO
VUxMOworCisgICAgR2RvbURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBHRE9NX0RPTV9PQkpFQ1Rf
R0VUX1BSSVZBVEUoR0RPTV9ET01fT0JKRUNUKHJlcXVlc3QpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqPihwcml2LT5jb3JlT2JqZWN0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0VPRgorICAgIHB1c2goQGNCb2R5UHJpdiwgJGlt
cGxDb250ZW50KTsKKworICAgICMgUHJvcGVydGllcworICAgIG15ICRmdW5jdGlvbk5hbWVQcmVm
aXggPSAkbGNhc2VfaWZhY2VuYW1lOyAKKyAgU0tJUFBST1A6IGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRwcm9wX25hbWUgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15ICRwcm9wTmFtZSA9IGRlY2Ft
ZWxpemUoJHByb3BfbmFtZSk7CisgICAgICAgIG15ICRwcm9wX3R5cGUgPSAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGU7CisgICAgICAgIG15ICR0eXBlID0gR2V0R1R5cGUoJHByb3BfdHlwZSk7
CisgICAgICAgIG15ICRmdW5jdGlvblNpZyA9ICIkY2xhc3NOYW1lICp0aGl6IjsKKyMgICAgICAg
IG15ICRjdXN0b20gPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b20ifTsKKyMKKyMgICAgICAgIGlmICgkcHJvcF9uYW1lIG5lICdyZXNwb25zZVRleHQn
KSB7ICMgYWxsb3cgWE1MSHR0cFJlcXVlc3QgcmVzcG9uc2VUZXh0CisjICAgICAgICAgICAgaWYg
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldHRl
ciJ9KSB7CisjICAgICAgICAgICAgICAgIG5leHQgU0tJUFBST1A7CisjICAgICAgICAgICAgfQor
IyAgICAgICAgfQorICAgICAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oIn0gPSAxIGlmICR0eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsKKyAgICAgICAg
JGltcGxJbmNsdWRlc3siQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCJ9ID0gMSBpZiAkcHJv
cF90eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIjsKKworICAgICAgICAjIHNraXAgSmF2YVNj
cmlwdENhbGxGcmFtZS50eXBlCisgICAgICAgIGlmICgoJHByb3BfbmFtZSBlcSAidHlwZSIpICYm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiSmF2YVNjcmlwdENhbGxGcmFtZSIpKXsKKyAgICAgICAgICAg
IG5leHQgU0tJUFBST1A7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2tpcFByb3BUZW1wb3Jh
cmlseSgkdHlwZSwgJHByb3BfdHlwZSkpIHsKKyAgICAgICAgICAgIG5leHQgU0tJUFBST1A7Cisg
ICAgICAgIH0KKworICAgICAgICBhZGRQcm9wSW5jSGRyKCRwcm9wX3R5cGUpOworCisgICAgICAg
ICNwdXNoKEBoQm9keVByb3AsICJXRUJLSVRfQVBJICR0eXBlXG4kZnVuY3Rpb25OYW1lUHJlZml4
IiAuICJfcHJvcF9nZXRfIiAuICIkcHJvcE5hbWUgKCRmdW5jdGlvblNpZyk7XG5cbiIpOworCisg
ICAgICAgICNwdXNoKEBoQm9keVByb3AsICJXRUJLSVRfQVBJIHZvaWRcbiRmdW5jdGlvbk5hbWVQ
cmVmaXgiIC4gIl9wcm9wX3NldF8iIC4gIiRwcm9wTmFtZSAoJGZ1bmN0aW9uU2lnLCAkdHlwZSIg
LiAidmFsdWUpO1xuXG4iKTsKKyAgICB9CisKKyAgICAjIFByb3BlcnRpZXMKKyAgICAkaW1wbENv
bnRlbnQgPSA8PCAiRU9GIjsKK0dfQkVHSU5fREVDTFMKKworZW51bSB7CisgICAgQlJPV1NFUl9F
VkVOVCwKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IGV2ZW50X3NpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCitFT0YKKyAgICBw
dXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKKyAgICBteSBAdHh0X2luc3RhbGxfcHJv
cHMgPSAoKTsKKyAgICBteSBAdHh0X3NldF9wcm9wcyA9ICgpOworICAgIG15IEB0eHRfZ2V0X3By
b3BzID0gKCk7CisKKyAgICBteSAkcHJpdl9mbiA9IEdldFByaXZGbigkaW50ZXJmYWNlTmFtZSwg
JHtsY2FzZV9pZmFjZW5hbWV9LCAiZ3NlbGYiLCAic2VsZiIpOworCisgICAgbXkgJHR4dF9nZXRf
cHJvcCA9IDw8ICJFT0YiOworc3RhdGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9X19nZXRfcHJv
cGVydHlfZm4oR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICAgICAgICAgICAg
ICAgICAgIEdWYWx1ZSAqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgR1BhcmFtU3BlYyAq
IHBzcGVjKQoreworICAgICR7Y2xhc3NOYW1lfSAqc2VsZiA9IEdET01fJHtjbHNDYXBzfShvYmpl
Y3QpOworICAgICRwcml2X2ZuCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CitFT0YKKyAgICBwdXNo
KEB0eHRfZ2V0X3Byb3BzLCAkdHh0X2dldF9wcm9wKTsKKworICAgIG15ICR0eHRfc2V0X3Byb3Ag
PSA8PCAiRU9GIjsKK3N0YXRpYyB2b2lkICR7bGNhc2VfaWZhY2VuYW1lfV9fc2V0X3Byb3BlcnR5
X2ZuKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBHVmFsdWUgKiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMg
KiBwc3BlYykKK3sKKyAgICAke2NsYXNzTmFtZX0gKnNlbGYgPSBHRE9NXyR7Y2xzQ2Fwc30ob2Jq
ZWN0KTsKKyAgICAkcHJpdl9mbgorICAgIHN3aXRjaCAocHJvcF9pZCkgeworRU9GCisgICAgcHVz
aChAdHh0X3NldF9wcm9wcywgJHR4dF9zZXRfcHJvcCk7CisgICAgIyBJdGVyYXRlIG92ZXIgdGhl
IGludGVyZmFjZSBhdHRyaWJ1dGVzIGFuZCBnZW5lcmF0ZSBhIHByb3BlcnR5IGZvcgorICAgICMg
ZWFjaCBvbmUgb2YgdGhlbS4KKyAgU0tJUEVOVU06CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRl
IChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgbXkgJHByb3BfbmFtZSA9ICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgbXkgJHNldHByb3BfbmFtZV9mbiA9
ICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRwcm9wX25hbWUpOworICAgICAgICBteSAkZ2V0
cHJvcF9uYW1lX2ZuID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJHByb3BfbmFtZSk7CisK
KyAgICAgICAgbXkgJHByb3BOYW1lID0gZGVjYW1lbGl6ZSgkcHJvcF9uYW1lKTsKKyAgICAgICAg
bXkgJHByb3BDYXBzID0gdWMoJHByb3BOYW1lKTsKKyAgICAgICAgbXkgJHByb3BfdHlwZSA9ICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKKyAgICAgICAgbXkgJHR5cGUgPSBHZXRHVHlwZSgk
cHJvcF90eXBlKTsKKyAgICAgICAgbXkgJHtwcm9wRW51bX0gPSAiUFJPUF8ke3Byb3BDYXBzfSI7
CisgICAgICAgIG15ICR7cHJvcF9ndHlwZX0gPSBkZWNhbWVsaXplKCRwcm9wX3R5cGUpOworICAg
ICAgICBpZiAoJHByb3BfZ3R5cGUgZXEgImV2ZW50X3RhcmdldCIpIHsKKyAgICAgICAgICAgICRw
cm9wX2d0eXBlID0gIm5vZGUiOworICAgICAgICB9CisgICAgICAgIG15ICR7cHJvcEdUeXBlfSA9
IHVjKCRwcm9wX2d0eXBlKTsKKyAgICAgICAgbXkgJGxjYXNlX2d0eXBlbmFtZSA9ICJnZG9tXyIg
LiAkcHJvcF9ndHlwZTsKKworIworIyAgICAgICAgbXkgJGN1c3RvbSA9ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9OworIworIyAgICAgICAgaWYg
KCRwcm9wX25hbWUgbmUgJ3Jlc3BvbnNlVGV4dCcpIHsgIyBhbGxvdyBYTUxIdHRwUmVxdWVzdCBy
ZXNwb25zZVRleHQKKyMgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0dGVyIn0pIHsKKyMgICAgICAgICAgICAgICAgbmV4
dCBTS0lQRU5VTTsKKyMgICAgICAgICAgICB9CisjICAgICAgICB9CisKKyAgICAgICAgJGltcGxJ
bmNsdWRlc3siQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCJ9ID0gMSBpZiAkdHlwZSBlcSAi
Q1NTU3R5bGVEZWNsYXJhdGlvbiI7CisKKyAgICAgICAgIyBza2lwIEphdmFTY3JpcHRDYWxsRnJh
bWUudHlwZQorICAgICAgICBpZiAoKCRwcm9wX25hbWUgZXEgInR5cGUiKSAmJiAoJGludGVyZmFj
ZU5hbWUgZXEgIkphdmFTY3JpcHRDYWxsRnJhbWUiKSl7CisgICAgICAgICAgICBuZXh0IFNLSVBF
TlVNOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNraXBQcm9wVGVtcG9yYXJpbHkoJHR5cGUs
ICRwcm9wX3R5cGUpKSB7CisgICAgICAgICAgICBuZXh0IFNLSVBFTlVNOworICAgICAgICB9CisK
KyAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgICR7cHJvcEVudW19LFxuIik7CisKKyAgICAg
ICAgbXkgJGd0eXBlID0gR2V0UHJvcEdUeXBlKCRwcm9wX3R5cGUpOworICAgICAgICBteSAkZ3Bh
cmFtZmxhZyA9ICJHX1BBUkFNX1JFQURBQkxFIjsKKyAgICAgICAgbXkgJHdyaXRlYWJsZSA9ICRh
dHRyaWJ1dGUtPnR5cGUgIX4gL15yZWFkb25seS87CisgICAgICAgIG15ICRjb25zdCA9ICJyZWFk
LW9ubHkgIjsKKyAgICAgICAgaWYgKCRwcm9wX25hbWUgZXEgJ2xvY2F0aW9uJyAmJiAkaW50ZXJm
YWNlTmFtZSBlcSAnRG9jdW1lbnQnKSB7CisgICAgICAgICAgICBuZXh0IFNLSVBFTlVNOworICAg
ICAgICB9CisgICAgICAgICNpZiAoJHdyaXRlYWJsZSAmJiAkY3VzdG9tKSB7CisgICAgICAgIGlm
ICgkd3JpdGVhYmxlKSB7CisgICAgICAgICAgICAkY29uc3QgPSAicmVhZC1vbmx5IChkdWUgdG8g
Y3VzdG9tIGZ1bmN0aW9ucyBuZWVkZWQgaW4gZ2RvbXdlYmtpdCkiOworICAgICAgICB9CisgICAg
ICAgICMgaWYgKCR3cml0ZWFibGUgJiYgISRjdXN0b20pIHsKKyAgICAgICAgaWYgKCR3cml0ZWFi
bGUpIHsKKyAgICAgICAgICAgICRncGFyYW1mbGFnID0gIkdfUEFSQU1fUkVBRFdSSVRFIjsKKyAg
ICAgICAgICAgICRjb25zdCA9ICJyZWFkLXdyaXRlICI7CisgICAgICAgIH0KKworICAgICAgICBt
eSAkX2d0eXBlID0gJGd0eXBlOworICAgICAgICBpZiAoJGd0eXBlIGVxICJ1c2hvcnQiKSB7Cisg
ICAgICAgICAgICAkX2d0eXBlID0gInVpbnQiOyAjIHl1ay4KKyAgICAgICAgfQorICAgICAgICAk
bmljayA9IGRlY2FtZWxpemUoIiR7aW50ZXJmYWNlTmFtZX1fJHtwcm9wTmFtZX0iKTsKKyAgICAg
ICAgJGxvbmcgPSAiJHtjb25zdH0gJHt0eXBlfSAke2ludGVyZmFjZU5hbWV9LiR7cHJvcE5hbWV9
IjsKKyAgICAgICAgbXkgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnX2tsYXNzLCAke3Byb3BFbnVtfSwKKyAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY18ke19ndHlwZX0gKCIke3Byb3BOYW1lfSIsIC8qIG5hbWUgKi8KKyAg
ICAgICAgICAgICAgICAiJG5pY2siLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAg
ICAgICAgICIkbG9uZyIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mg
c3R1ZmYgaGVyZSAqLworRU9GCisgICAgICAgIHB1c2goQHR4dF9pbnN0YWxsX3Byb3BzLCAkdHh0
X2luc3RhbGxfcHJvcCk7CisgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gIi8qIFRPRE8hICRn
dHlwZSAqL1xuIjsKKworICAgICAgICBpZiAoJHdyaXRlYWJsZSkgeworICAgICAgICAgICAgbXkg
JG9rID0gMDsKKyAgICAgICAgICAgIG15ICRjb252ZXJ0X2ZuID0gIiI7CisKKyAgICAgICAgICAg
IGlmICgkZ3R5cGUgZXEgInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAkY29udmVydF9mbiA9
ICJXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4IjsKKyAgICAgICAgICAgICAgICAkb2sgPSAxOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYgKCRndHlwZSBlcSAiYm9vbGVhbiIpIHsK
KyAgICAgICAgICAgICAgICBpZiAoJHtpbnRlcmZhY2VOYW1lfSBuZSAiRE9NV2luZG93IikgeyAj
WFhYIFRPRE86IHNraXAgInB1dERpcmVjdCIgc3R1ZmYgLSBubyBpZGVhIHdoYXQgaXQncyBhYm91
dCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImZsb2F0IikgeworICAgICAgICAgICAgICAg
ICRvayA9IDE7CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImRvdWJsZSIpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoJHtpbnRlcmZhY2VOYW1lfSBuZSAiRE9NV2luZG93IikgeyAjWFhY
IFRPRE86IHNraXAgInB1dERpcmVjdCIgc3R1ZmYgLSBubyBpZGVhIHdoYXQgaXQncyBhYm91dCB5
ZXQKKyAgICAgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgInVpbnQ2NCIpIHsKKyAgICAgICAgICAgICAgICAk
b2sgPSAxOworICAgICAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1bG9uZyIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoJHtpbnRlcmZhY2VOYW1lfSBuZSAiRE9NV2luZG93IikgeyAjWFhYIFRP
RE86IHNraXAgInB1dERpcmVjdCIgc3R1ZmYgLSBubyBpZGVhIHdoYXQgaXQncyBhYm91dCB5ZXQK
KyAgICAgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImxvbmciKSB7CisgICAgICAgICAgICAgICAgaWYgKCR7
aW50ZXJmYWNlTmFtZX0gbmUgIkRPTVdpbmRvdyIpIHsgI1hYWCBUT0RPOiBza2lwICJwdXREaXJl
Y3QiIHN0dWZmIC0gbm8gaWRlYSB3aGF0IGl0J3MgYWJvdXQgeWV0CisgICAgICAgICAgICAgICAg
ICAgICRvayA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNpZiAoJGd0
eXBlIGVxICJ1aW50IikgeworICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICB9
IGVsc2lmICgkZ3R5cGUgZXEgInVzaG9ydCIpIHsKKyAgICAgICAgICAgICAgICAkb2sgPSAxOwor
ICAgICAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1Y2hhciIpIHsKKyAgICAgICAgICAgICAg
ICAkb2sgPSAxOworICAgICAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJjaGFyIikgeworICAg
ICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjIFhYWCBU
T0RPIC0gc2tpcCBMb2NhdGlvbgorICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJM
b2NhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICAkb2sgPSAwOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoJG9rKSB7CisgICAgICAgICAgICAgICAgcHVzaChAdHh0X3NldF9wcm9w
cywgIiAgICBjYXNlICR7cHJvcEVudW19OlxuICAgIHtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQHR4dF9zZXRfcHJvcHMsICIgICAgICAgIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAw
O1xuIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAiICAgICAgICBnc2VsZi0+c2V0JHtzZXRwcm9wX25hbWVf
Zm59KCR7Y29udmVydF9mbn0oZ192YWx1ZV9nZXRfJGd0eXBlICh2YWx1ZSkpIik7CisKKyAgICAg
ICAgICAgICAgICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAiLCBlYyIpIGlmIEB7JGF0dHJpYnV0ZS0+
c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAgcHVzaChAdHh0X3NldF9wcm9wcywg
Iik7XG4iKTsKKworICAgICAgICAgICAgICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICIgICAgICAg
IGJyZWFrO1xuICAgIH1cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
cHVzaChAdHh0X2dldF9wcm9wcywgIiAgIGNhc2UgJHtwcm9wRW51bX06XG4gICAge1xuIik7CisK
KyAgICAgICAgbXkgJGV4Y2VwdGlvbiA9ICIiOworICAgICAgICBpZiAoQHskYXR0cmlidXRlLT5n
ZXR0ZXJFeGNlcHRpb25zfSkgeworICAgICAgICAgICAgJGV4Y2VwdGlvbiA9ICJlYyI7CisgICAg
ICAgICAgICBwdXNoKEB0eHRfZ2V0X3Byb3BzLCAiICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25D
b2RlIGVjID0gMDtcbiIpOworICAgICAgICB9CisKKyAgICAgICAgbXkgJGNvbnZlcnRfZm4gPSAi
IjsKKyAgICAgICAgbXkgJHBvc3RfY29udmVydF9mbiA9ICIiOworICAgICAgICBteSAkZG9uZSA9
IDA7CisgICAgICAgIGlmICgkZ3R5cGUgZXEgInN0cmluZyIpIHsKKyAgICAgICAgICAgIHB1c2go
QHR4dF9nZXRfcHJvcHMsICIgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcgKHZhbHVlLCBHU3Ry
aW5nQ29udmVydChnc2VsZi0+JHtnZXRwcm9wX25hbWVfZm59KCR7ZXhjZXB0aW9ufSkpKTtcbiIp
OworICAgICAgICAgICAgJGRvbmUgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2lmICgkZ3R5
cGUgZXEgIm9iamVjdCIpIHsKKyAgICAgICAgICAgIG15ICRkb21vYmpUeXBlID0gIkdET00iLiRw
cm9wX3R5cGU7CisKKyAgICAgICAgICAgICR0eHRfZ2V0X3Byb3AgPSA8PCAiRU9GIjsKKyAgICAg
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjoke3Byb3BfdHlwZX0+IHB0ciA9IGdzZWxmLT4ke2dldHBy
b3BfbmFtZV9mbn0oJHtleGNlcHRpb259KTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2
YWx1ZSwgV2ViS2l0Ojp0b0dET00ocHRyLmdldCgpKSk7CitFT0YKKyAgICAgICAgICAgIHB1c2go
QHR4dF9nZXRfcHJvcHMsICR0eHRfZ2V0X3Byb3ApOworCisgICAgICAgICAgICAkZG9uZSA9IDE7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoISRkb25lKSB7CisgICAgICAgICAgICBwdXNoKEB0
eHRfZ2V0X3Byb3BzLCAiICAgICAgICBnX3ZhbHVlX3NldF8kX2d0eXBlICh2YWx1ZSwgJHtjb252
ZXJ0X2ZufWdzZWxmLT4ke2dldHByb3BfbmFtZV9mbn0oJHtleGNlcHRpb259KSR7cG9zdF9jb252
ZXJ0X2ZufSk7XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2goQHR4dF9nZXRfcHJvcHMs
ICIgICAgICAgIGJyZWFrO1xuICAgIH1cbiIpOworCisgICAgICAgICMgaXMgdGhpcyBfZW50aXJl
bHlfIG5lY2Vzc2FyeT8/PworICAgICAgICAjIGNhbiBpdCBiZSBkb25lIHdpdGggZ2VuZXJpYyBn
X3BhcmFtX3NwZWNfZ3R5cGUKKyAgICAgICAgIyBhbmQgZ2V0dGluZyBhIGZldyB0aGluZ3MsIGln
bm9yaW5nIHRoZSBtaW4tbWF4IGZvciBleGFtcGxlPworICAgICAgICBpZiAoJGd0eXBlIGVxICJp
bnQiKSB7CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAg
ICAgICAgICAgIEdfTUlOSU5ULCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAgR19N
QVhJTlQsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICov
CitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJib29sZWFuIikgeworICAgICAgICAg
ICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBGQUxTRSwg
LyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiZmxvYXQiKSB7
CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAgICAg
ICAgIEdfTUlORkxPQVQsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWEZM
T0FULCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLwor
RU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiZG91YmxlIikgeworICAgICAgICAgICAg
JHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBHX01JTkRPVUJM
RSwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYRE9VQkxFLCAvKiBtYXgg
Ki8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAg
IH0gZWxzaWYgKCRndHlwZSBlcSAidWludDY0IikgeworICAgICAgICAgICAgJHR4dF9pbnN0YWxs
X3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisg
ICAgICAgICAgICAgICAgR19NQVhVSU5UNjQsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAs
ICAgICAgICAvKiBkZWZhdWx0ICovCitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1
bG9uZyIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAg
ICAgICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYVUxP
TkcsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitF
T0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJsb25nIikgeworICAgICAgICAgICAgJHR4
dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBHX01JTkxPTkcsICAg
ICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWExPTkcsIC8qIG1heCAqLworICAg
ICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitFT0YKKyAgICAgICAgfSBlbHNp
ZiAoJGd0eXBlIGVxICJ1aW50IikgeworICAgICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8
PCAiRU9GIjsKKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisgICAgICAgICAg
ICAgICAgR19NQVhVSU5ULCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyog
ZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidXNob3J0Iikgewor
ICAgICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAg
ICAwLCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAgR19NQVhVSU5UMTYsIC8qIG1h
eCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitFT0YKKyAgICAg
ICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1Y2hhciIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFs
bF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgR19NSU5JTlQ4LCAgICAgICAgLyog
bWluICovCisgICAgICAgICAgICAgICAgR19NQVhJTlQ4LCAvKiBtYXggKi8KKyAgICAgICAgICAg
ICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlw
ZSBlcSAiY2hhciIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7
CisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdf
TUFYVUlOVDgsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0
ICovCitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJzdHJpbmciKSB7CisgICAgICAg
ICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAgICAgICAgICIiLCAv
KiBkZWZhdWx0ICovCitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJvYmplY3QiKSB7
CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAgICAg
ICAgIEdET01fVFlQRV8ke3Byb3BHVHlwZX0sIC8qIGdvYmplY3QgdHlwZSAqLworRU9GCisgICAg
ICAgIH0KKyAgICAgICAgcHVzaChAdHh0X2luc3RhbGxfcHJvcHMsICR0eHRfaW5zdGFsbF9wcm9w
KTsKKyAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAg
ICAoR1BhcmFtRmxhZ3MpJHtncGFyYW1mbGFnfSkpOworCitFT0YKKyAgICAgICAgcHVzaChAdHh0
X2luc3RhbGxfcHJvcHMsICR0eHRfaW5zdGFsbF9wcm9wKTsKKyAgICB9CisKKyAgICBwdXNoKEBj
Qm9keVByaXYsICJ9O1xuXG4iKTsKKworCisgICAgJHR4dF9nZXRfcHJvcCA9IDw8ICJFT0YiOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChv
YmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorRU9GCisg
ICAgcHVzaChAdHh0X2dldF9wcm9wcywgJHR4dF9nZXRfcHJvcCk7CisKKyAgICAkdHh0X3NldF9w
cm9wID0gPDwgIkVPRiI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CitFT0YKKyAgICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAkdHh0X3NldF9wcm9wKTsK
KworICAgIG15ICR0eHRfc2V0X2dldF9wcm9wcyA9IDw8ICJFT0YiOworICAgIGNhc2UgUFJPUF9B
R0U6CisgICAgICAgIHNlbGYtPmFnZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgUFJPUF9BR0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2
YWx1ZSwgc2VsZi0+YWdlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKyAgIGdfdmFsdWVf
aW5pdCgmcGFyYW1zWzBdLCBHX1RZUEVfRlJPTV9JTlNUQU5DRShvYmplY3QpKTsKKyAgICAgICAg
KyAgIGdfdmFsdWVfc2V0X2luc3RhbmNlKCZwYXJhbXNbMF0sIChncG9pbnRlcilvYmplY3QpOwor
CitFT0YKKworICAgICMgVE9ETzogd29yayBvdXQgaWYgaXQncyBhcHByb3ByaWF0ZSB0byBzcGxp
dCB0aGlzIGludG8gbWFueSBkaWZmZXJlbnQKKyAgICAjIHNpZ25hbHMgZS5nLiAiY2xpY2siIGV0
Yy4KKyAgICBteSAkdHh0X2luc3RhbGxfc2lnbmFscyA9ICIiOworCisgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJET01XaW5kb3ciIG9yCisgICAgICAgICRpbnRlcmZhY2VOYW1lIGVxICJOb2Rl
IiBvcgorICAgICAgICAkaW50ZXJmYWNlTmFtZSBlcSAiWE1MSHR0cFJlcXVlc3QiKSB7CisgICAg
ICAgICR0eHRfaW5zdGFsbF9zaWduYWxzID0gPDwgIkVPRiI7CisgICAgZXZlbnRfc2lnbmFsc1tC
Uk9XU0VSX0VWRU5UXSA9IGdfc2lnbmFsX25ldygiYnJvd3Nlci1ldmVudCIsCisgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHJlcXVlc3RDbGFzcyksCisgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdf
U0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9ERVRBSUxFRCAgKSwKKyAgICAgICAgMCwK
KyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgd2Via2l0X21hcnNoYWxfVk9J
RF9fT0JKRUNUX0JPT0xFQU4sCisgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICBHRE9N
X1RZUEVfRVZFTlQsIEdfVFlQRV9CT09MRUFOKTsKK0VPRgorICAgIH0KKworICAgICRpbXBsQ29u
dGVudCA9IDw8ICJFT0YiOworCitzdGF0aWMgdm9pZCAke2xjYXNlX2lmYWNlbmFtZX1fZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIEdkb21ET01PYmplY3QqIGRvbV9vYmplY3QgPSBH
RE9NX0RPTV9PQkpFQ1Qob2JqZWN0KTsKKyAgICBHZG9tRE9NT2JqZWN0UHJpdmF0ZSogcHJpdiA9
IGRvbV9vYmplY3QtPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y29yZU9iamVjdCAhPSAwKSB7CisJ
V2ViS2l0OjpHRE9NT2JqZWN0Q2FjaGU6OmZvcmdldERPTU9iamVjdChwcml2LT5jb3JlT2JqZWN0
KTsKKwlzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICo+KHByaXYtPmNvcmVP
YmplY3QpLT5kZXJlZigpOworCXByaXYtPmNvcmVPYmplY3QgPSAwOworICAgIH0KKworICAgIEdf
T0JKRUNUX0NMQVNTKCR7bGNhc2VfaWZhY2VuYW1lfV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShv
YmplY3QpOworfQorCitAdHh0X3NldF9wcm9wcworCitAdHh0X2dldF9wcm9wcworCitzdGF0aWMg
dm9pZCAke2xjYXNlX2lmYWNlbmFtZX1fY2xhc3NfaW5pdCgke2NsYXNzTmFtZX1DbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyAqZ19rbGFzcyA9IEdfT0JKRUNUX0NMQVNT
IChyZXF1ZXN0Q2xhc3MpOworICAgIGdfa2xhc3MtPmZpbmFsaXplID0gJHtsY2FzZV9pZmFjZW5h
bWV9X2ZpbmFsaXplOworICAgIGdfa2xhc3MtPnNldF9wcm9wZXJ0eSA9ICR7bGNhc2VfaWZhY2Vu
YW1lfV9fc2V0X3Byb3BlcnR5X2ZuOworICAgIGdfa2xhc3MtPmdldF9wcm9wZXJ0eSA9ICR7bGNh
c2VfaWZhY2VuYW1lfV9fZ2V0X3Byb3BlcnR5X2ZuOworCitAdHh0X2luc3RhbGxfcHJvcHMKKwor
JHR4dF9pbnN0YWxsX3NpZ25hbHMKK30KKworc3RhdGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9
X2luaXQoJHtjbGFzc05hbWV9KiByZXF1ZXN0KQoreworfQorCitFT0YKKyAgICBwdXNoKEBjQm9k
eVByaXYsICRpbXBsQ29udGVudCk7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dkb20ke2lu
dGVyZmFjZU5hbWV9UHJpdmF0ZS5oIn0gPSAxOworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0Yi
OworCisjaWZuZGVmICR7Z3VhcmR9X1BSSVZfCisjZGVmaW5lICR7Z3VhcmR9X1BSSVZfCisjaW5j
bHVkZSAiZ2xpYi1vYmplY3QuaCIKKyNpbmNsdWRlICJnZG9tLyR7cGFyZW50SGRyTmFtZX0uaCIK
KyNpbmNsdWRlICIke2ludGVyZmFjZU5hbWV9LmgiCitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYs
ICRpbXBsQ29udGVudCk7CisKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKy8vfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK3R5cGVkZWYgc3RydWN0IF8ke2NsYXNzTmFtZX0gJHtjbGFzc05h
bWV9OworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAke2NsYXNzTmFtZX0gKgorICAgIHdyYXAk
e2ludGVyZmFjZU5hbWV9KFBhc3NSZWZQdHI8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfT4gcHJw
Q29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICoKKyAgICBjb3Jl
KCR7Y2xhc3NOYW1lfSAqcmVxdWVzdCk7CitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBs
Q29udGVudCk7CisKKyAgICBpZiAoICFVc2VzTWFudWFsVG9HRE9NSW1wbGVtZW50YXRpb24oJGlu
dGVyZmFjZU5hbWUpKSB7CisgICAgICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworCisgICAg
Z3BvaW50ZXIKKyAgICB0b0dET00oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogbm9kZSk7CitF
T0YKKyAgICAgICAgcHVzaChAaEJvZHlQcml2LCAkaW1wbENvbnRlbnQpOworICAgIH0KKworICAg
ICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiAke2d1YXJkfV9QUklWXyAqLworCitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBs
Q29udGVudCk7CisKKyAgICAjaWYgKCRwYXJhbUlETFR5cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAg
ICAjIFhYWCA/Pz8/IHd0Zj8/IDopIGNvcGllZCBmcm9tIGpzZ2VuZXJhdG9yLgorICAgICMgICAg
JGltcGxJbmNsdWRlc3siSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCJ9ID0gMTsKKyAgICAj
fSBlbHNlIHsKKyAgICAjICAgICRpbXBsSW5jbHVkZXN7JGluY2x1ZGVIZHJ9ID0gMTsKKyAgICAj
fQorICAgICRpbXBsSW5jbHVkZXN7IiR7aW50ZXJmYWNlTmFtZX0uaCJ9ID0gMTsKKyAgICAkaW1w
bEluY2x1ZGVzeyJnZG9tL0dkb21ET01PYmplY3RQcml2YXRlLmgifSA9IDE7CisKKyAgTE9PUDoK
KyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKwkj
bXkgJGZ1bmN0aW9uTmFtZSA9IGRlY2FtZWxpemUoJGNsYXNzTmFtZSkgLiAiXyIgLiBkZWNhbWVs
aXplKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKKwlteSAkZm5fc2lnX25hbWUgPSAkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKwlteSAkZm5fc2lnX3R5cGUgPSAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+dHlwZTsKKwlteSAkZnVuY3Rpb25OYW1lID0gImdkb21fIiAuIGRlY2FtZWxpemUo
JGludGVyZmFjZU5hbWUpIC4gIl8iIC4gZGVjYW1lbGl6ZSgkZm5fc2lnX25hbWUpOworCW15ICRy
ZXR1cm5UeXBlID0gR2V0R1R5cGUoJGZuX3NpZ190eXBlKTsKKwlteSAkcmV0X2lzX2Nsc190eXBl
ID0gSXNHRE9NQ2xhc3NUeXBlKCRmbl9zaWdfdHlwZSk7CisKKwlteSAkZnVuY3Rpb25TaWcgPSAi
JGNsYXNzTmFtZSAqdGhpeiI7CisKKwlteSAkY2FsbF9pbXBsX3BhcmFtcyA9ICIiOworCW15ICRn
ZG9tX2ZuX3ByZWZpeCA9ICJnZG9tXyIgLiBkZWNhbWVsaXplKCRmbl9zaWdfdHlwZSk7CisKKwlp
ZiAoJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3Bl
cnR5IikgeworCSAgICAjIHJlc2VydmVkIG5hbWUgY2xhc2ggaW4gZ2xpYiEKKwkgICAgJGZ1bmN0
aW9uTmFtZSA9ICJnZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRfY3NzX3Byb3BlcnR5IjsK
Kwl9CisJIyBYWFggc2tpcCBDb21wYXJlSG93IGZ1bmN0aW9ucyBmb3Igbm93CisJaWYgKCRmdW5j
dGlvbk5hbWUgZXEgImdkb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFyeV9wb2ludHMiKSB7CisJICAg
IHB1c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogc2tpcHBpbmcgQ29tcGFyZUhvdyBmdW5jdGlv
biAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAgIHB1c2goQGNCb2R5LCAiXG4vKiBYWFgg
VE9ETzogc2tpcHBpbmcgQ29tcGFyZUhvdyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxu
Iik7CisJICAgIG5leHQgTE9PUDsKKwl9CisKKwkjIFhYWCBza2lwIFNWR0RvY3VtZW50IGZ1bmN0
aW9ucyBmb3Igbm93CisJaWYgKCRyZXR1cm5UeXBlIGVxICJHZG9tU1ZHRG9jdW1lbnQgKiIpIHsK
KwkgICAgcHVzaChAaEJvZHksICJcbi8qIFhYWCBUT0RPOiBza2lwcGluZyBTVkdEb2N1bWVudCBm
dW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAgIHB1c2goQGNCb2R5LCAiXG4v
KiBYWFggVE9ETzogc2tpcHBpbmcgU1ZHRG9jdW1lbnQgZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9
ICovXG5cbiIpOworCSAgICBuZXh0IExPT1A7CisJfQorCisJIyBYWFggZG9uJ3Qgc2tpcCBzb21l
IGN1c3RvbSBmdW5jdGlvbnMgZm9yIG5vdworCW15ICRpc19jdXN0b21fZm4gPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9OworCWlmICgkZnVuY3Rp
b25OYW1lIGVxICJnZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtIiB8fAorCSAgICAkZnVuY3Rpb25O
YW1lIGVxICJnZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtIiB8fAorCSAgICAkZnVuY3Rp
b25OYW1lIGVxICJnZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlIiB8
fAorCSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1Ym1pdCIg
fHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxfaHR0cF9yZXF1ZXN0X29wZW4iIHx8
CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBfcmVxdWVzdF9zZXRfcmVxdWVz
dF9oZWFkZXIiIHx8CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBfcmVxdWVz
dF9zZW5kIiB8fAorCSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX3htbF9odHRwX3JlcXVlc3Rf
Z2V0X3Jlc3BvbnNlX2hlYWRlciIgfHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxf
aHR0cF9yZXF1ZXN0X292ZXJyaWRlX21pbWVfdHlwZSIgfHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBl
cSAiZ2RvbV94bWxfaHR0cF9yZXF1ZXN0X2Rpc3BhdGNoX2V2ZW50IiB8fAorCSAgICAkZnVuY3Rp
b25OYW1lIGVxICJnZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZSIpIHsKKwkgICAgJGlzX2N1c3Rv
bV9mbiA9IDA7CisJfQorCSMgWFhYIHNraXAgc29tZSBjdXN0b20gZnVuY3Rpb25zIGZvciBub3cK
KwlpZiAoJGlzX2N1c3RvbV9mbiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2Rl
X2l0ZXJhdG9yX25leHRfbm9kZSIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fbm9k
ZV9hcHBlbmRfY2hpbGQiICYmIAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX25vZGVfcmVt
b3ZlX2NoaWxkIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX2luc2VydF9i
ZWZvcmUiICYmCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9yZXBsYWNlX2NoaWxk
IiAmJgorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX3RyZWVfd2Fsa2VyX3BhcmVudF9ub2Rl
IiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtlcl9maXJzdF9jaGls
ZCIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfbGFzdF9jaGls
ZCIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfcHJldmlvdXNf
c2libGluZyIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfbmV4
dF9zaWJsaW5nIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtlcl9w
cmV2aW91c19ub2RlIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtl
cl9uZXh0X25vZGUiICYmIAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX25vZGVfaXRlcmF0
b3JfcHJldmlvdXNfbm9kZSIpIHsKKwkgICAgcHVzaChAaEJvZHksICJcbi8qIFhYWCBUT0RPOiBj
dXN0b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBwdXNoKEBjQm9k
eSwgIlxuLyogWFhYIFRPRE86IGN1c3RvbSBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxu
Iik7CisJICAgIG5leHQgTE9PUDsKKwl9CisKKwlmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rp
b24tPnBhcmFtZXRlcnN9KSB7CisJICAgIG15ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0tPnR5cGU7
CisJICAgIGFkZEluY0JvZHkoJHBhcmFtSURMVHlwZSk7CisJICAgIGFkZEluY0hkcigkcGFyYW1J
RExUeXBlKTsKKwkgICAgbXkgJHBhcmFtVHlwZSA9IEdldEdUeXBlKCRwYXJhbUlETFR5cGUpOwor
CSAgICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0tPm5hbWUpOworCisJICAgICRm
dW5jdGlvblNpZyAuPSAiLCAkcGFyYW1UeXBlICRwYXJhbU5hbWUiOworCisJICAgIG15ICRwYXJh
bV9pc19jbHNfdHlwZSA9IElzR0RPTUNsYXNzVHlwZSgkcGFyYW1JRExUeXBlKTsKKwkgICAgaWYg
KCRwYXJhbV9pc19jbHNfdHlwZSkgeworCQlpZiAoJHBhcmFtSURMVHlwZSBuZSAiRE9NT2JqZWN0
IiAmJgorCQkgICAgJHBhcmFtSURMVHlwZSBuZSAiRXZlbnRUYXJnZXQiKSB7CisJCSAgICAkaW1w
bEluY2x1ZGVzeyJnZG9tL0dkb20ke3BhcmFtSURMVHlwZX1Qcml2YXRlLmgifSA9IDE7CisJCSAg
ICAjIHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBvbmUgb2YgdGhlCisJCSAgICAj
IGF1dG8tZ2VuZXJhdGVkIGZpbGVzIG5lZWRlZCBpdCBzby4uLi4KKwkJICAgICRpbXBsSW5jbHVk
ZXN7IiR7cGFyYW1JRExUeXBlfS5oIn0gPSAxOworCQl9CisJICAgIH0KKwkgICAgaWYgKCRwYXJh
bV9pc19jbHNfdHlwZSB8fCAoJHBhcmFtSURMVHlwZSBlcSAiRE9NU3RyaW5nIikpIHsKKwkJJHBh
cmFtTmFtZSA9ICJfZ18iIC4gJHBhcmFtTmFtZTsKKwkgICAgfQorCSAgICBpZiAoJGNhbGxfaW1w
bF9wYXJhbXMpIHsKKwkJJGNhbGxfaW1wbF9wYXJhbXMgLj0gIiwgJHBhcmFtTmFtZSI7CisJICAg
IH0gZWxzZSB7CisJCSRjYWxsX2ltcGxfcGFyYW1zID0gIiRwYXJhbU5hbWUiOworCSAgICB9CisJ
fQorCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisKKwkgICAgaWYgKCRjYWxsX2ltcGxfcGFyYW1z
KSB7CisJCSRjYWxsX2ltcGxfcGFyYW1zIC49ICIsICZjYWxsU3RhY2siOworCSAgICB9IGVsc2Ug
eworCQkkY2FsbF9pbXBsX3BhcmFtcyA9ICImY2FsbFN0YWNrIjsKKwkgICAgfQorICAgICAgICAk
aW1wbEluY2x1ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKKyAgICB9CisKKwlhZGRJbmNI
ZHIoJGZuX3NpZ190eXBlKTsKKwlpZiAoJHJldF9pc19jbHNfdHlwZSkgeworCSAgICAjICAgICRp
bXBsVHlwZWRlZnN7Ikdkb20ke2ZuX3NpZ190eXBlfSJ9ID0gMTsKKwl9CisKKwlpZiAoJHJldHVy
blR5cGUgbmUgInZvaWQiKSB7CisKKwkgICAgaWYgKCRyZXRfaXNfY2xzX3R5cGUpIHsKKwkJaWYg
KCRmbl9zaWdfdHlwZSBlcSAiRE9NT2JqZWN0IikgeworCQkgICAgIyBYWFggPz8/PyB3dGY/PyA6
KSBjb3BpZWQgZnJvbSBqc2dlbmVyYXRvci4KKwkJICAgICRpbXBsSW5jbHVkZXN7Imdkb20vR2Rv
bUNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIn0gPSAxOworCQl9IGVsc2UgeworCQkgICAgI2lm
ICgkZm5fc2lnX3R5cGUgbmUgIkV2ZW50VGFyZ2V0IikgeworCQkJIyRpbXBsSW5jbHVkZXN7Imdk
b20vR2RvbSR7Zm5fc2lnX3R5cGV9UHJpdmF0ZS5oIn0gPSAxOworCQkJIyRpbXBsSW5jbHVkZXN7
Imdkb20vR2RvbSR7Zm5fc2lnX3R5cGV9LmgifSA9IDE7CisJCSAgICAjfQorCQkgICAgJGltcGxJ
bmNsdWRlc3siJHtmbl9zaWdfdHlwZX0uaCJ9ID0gMTsKKyAgICAgICAgICAgICRjQm9keUdET017
Imdwb2ludGVyIHRvR0RPTShXZWJDb3JlOjoke2ZuX3NpZ190eXBlfSogbm9kZSk7In0gPSAxOwor
CQl9CisJICAgIH0KKwl9CisKKwkjIFhYWCBza2lwIGN1c3RvbSBmdW5jdGlvbnMgZm9yIG5vdwor
CSMgYnV0IHNraXAgZnJvbSBoZXJlIHRvIGFsbG93IHNvbWUgaGVhZGVycyB0byBiZSBjcmVhdGVk
CisJIyBmb3IgYSBzdWNjZXNzZnVsIGNvbXBpbGUuCisJaWYgKCRpc19jdXN0b21fZm4gJiYKKwkg
ICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX3JlbW92ZV9jaGlsZCIgJiYgCisJICAgICRm
dW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9pbnNlcnRfYmVmb3JlIiAmJgorCSAgICAkZnVuY3Rp
b25OYW1lIG5lICJnZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgJiYKKwkgICAgJGZ1bmN0aW9uTmFt
ZSBuZSAiZ2RvbV9ub2RlX2FwcGVuZF9jaGlsZCIpIHsKKwkgICAgcHVzaChAaEJvZHksICJcbi8q
IFhYWCBUT0RPOiBjdXN0b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAg
ICBwdXNoKEBjQm9keSwgIlxuLyogWFhYIFRPRE86IGN1c3RvbSBmdW5jdGlvbiAke2Z1bmN0aW9u
TmFtZX0gKi9cblxuIik7CisJICAgIG5leHQgTE9PUDsKKwl9CisKKyAgICBpZiAoJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5n
In0pIHsKKyAgICAgICAgIyBYWFggc2tpcCBjdXN0b20gYXJndW1lbnQgaGFuZGxpbmcgLSBjdXJy
ZW50bHkgaW4gQ29uc29sZS5pZGwKKyAgICAgICAgIyByZXF1aXJlcyBFeGVjU3RhdGUgd2hpY2gg
aGFzIGJlZW4gcmVtb3ZlZCB1bnRpbCAjMTY0MDEgaXMgYWNjZXB0ZWQuCisJICAgIHB1c2goQGhC
b2R5LCAiXG4vKiBYWFggVE9ETzogY3VzdG9tIGFyZ3VtZW50IGhhbmRsaW5nICR7ZnVuY3Rpb25O
YW1lfSAqL1xuXG4iKTsKKwkgICAgcHVzaChAY0JvZHksICJcbi8qIFhYWCBUT0RPOiBjdXN0b20g
YXJndW1lbnQgaGFuZGxpbmcgJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBuZXh0IExP
T1A7CisgICAgfQorCW15ICRfcmV0dXJuVHlwZSA9ICRyZXR1cm5UeXBlOworCW15ICRkb21vYmpU
eXBlID0gIkdET00iLiRmbl9zaWdfdHlwZTsKKwlpZiAoJGZuX3NpZ190eXBlIGVxICdET01PYmpl
Y3QnICYmCisJICAgICRmdW5jdGlvbk5hbWUgZXEgJ2dkb21faHRtbF9jYW52YXNfZWxlbWVudF9n
ZXRfY29udGV4dCcpIHsKKwkgICAgIyBYWFggSEFDSyEKKwkgICAgJF9yZXR1cm5UeXBlID0gJ0dk
b21DYW52YXNSZW5kZXJpbmdDb250ZXh0IConOworCSAgICAkZG9tb2JqVHlwZSA9ICdHRE9NQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCc7CisJICAgICRnZG9tX2ZuX3ByZWZpeCA9ICdnZG9tX2NhbnZh
c19yZW5kZXJpbmdfY29udGV4dCc7CisJICAgIG5leHQgTE9PUDsJICAgICAgICMgWFhYIC0gdG9v
IGludm9sdmVkIGZvciBub3cuICBza2lwIGl0LgorCSAgICAjIG11c3QgY29udmVydCB0byBhIERP
TU9iamVjdCAoVE9ETzogYnJvd3NlIEpTIGNvZGUgdG8gZmluZCBvdXQgaG93KQorCSAgICAjIGJl
dHRlcjogd29yayBvdXQgaG93IHRvIGNyZWF0ZSBhIEdET01Eb21PYmplY3QKKwl9CisKKwlpZiAo
JGZuX3NpZ190eXBlIGVxICdET01PYmplY3QnICYmCisJICAgICRmdW5jdGlvbk5hbWUgZXEgJ2dk
b21fZG9jdW1lbnRfZ2V0X2Nzc19jYW52YXNfY29udGV4dCcpIHsKKwkgICAgIyBYWFggSEFDSyEK
KwkgICAgJF9yZXR1cm5UeXBlID0gJ0dkb21DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgKic7CisJ
ICAgICRkb21vYmpUeXBlID0gJ0dET01DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQnOworCSAgICAk
Z2RvbV9mbl9wcmVmaXggPSAnZ2RvbV9jYW52YXNfcmVuZGVyaW5nX2NvbnRleHQyZCc7CisJICAg
IG5leHQgTE9PUDsJICAgICAgICMgWFhYIC0gdG9vIGludm9sdmVkIGZvciBub3cuICBza2lwIGl0
LgorCSAgICAjIG11c3QgY29udmVydCB0byBhIERPTU9iamVjdCAoVE9ETzogYnJvd3NlIEpTIGNv
ZGUgdG8gZmluZCBvdXQgaG93KQorCSAgICAjIGJldHRlcjogd29yayBvdXQgaG93IHRvIGNyZWF0
ZSBhIEdET01Eb21PYmplY3QKKwl9CisKKworCXB1c2goQGhCb2R5LCAiV0VCS0lUX0FQSSAkX3Jl
dHVyblR5cGVcbiRmdW5jdGlvbk5hbWUgKCRmdW5jdGlvblNpZyk7XG5cbiIpOworCisJcHVzaChA
Y0JvZHksICIkX3JldHVyblR5cGVcbiRmdW5jdGlvbk5hbWUgKCRmdW5jdGlvblNpZylcbntcbiIp
OworCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0g
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBXZWJD
b3JlOjpTY3JpcHRDYWxsU3RhY2sgY2FsbFN0YWNrKGV4ZWMsIGFyZ3MsICRudW1QYXJhbWV0ZXJz
KTtcbiIpOworICAgIH0KKworCXB1c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNl
TmFtZX0gKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHRoaXopO1xuIik7CisJaWYgKCRyZXR1cm5UeXBl
IG5lICJ2b2lkIikgeworCSAgICAjIFhYWCBUT0RPOiByZXR1cm4gcHJvcGVyIGRlZmF1bHQgcmVz
dWx0CisJICAgIHB1c2goQGNCb2R5LCAiICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpdGVtLCAw
KTtcbiIpOworCX0gZWxzZSB7CisJICAgIHB1c2goQGNCb2R5LCAiICAgIGdfcmV0dXJuX2lmX2Zh
aWwgKGl0ZW0pO1xuIik7CisJfQorCisJZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSkgeworCSAgICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0tPm5h
bWUpOworCSAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOworCSAgICBteSAkcGFy
YW1UeXBlSXNQcmltaXRpdmUgPSAkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCRwYXJh
bUlETFR5cGUpOworCSAgICBteSAkcGFyYW1faXNfY2xzX3R5cGUgPSBJc0dET01DbGFzc1R5cGUo
JHBhcmFtSURMVHlwZSk7CisJICAgIGFkZEluY0hkcigkcGFyYW1JRExUeXBlKTsKKwkgICAgaWYg
KCRwYXJhbV9pc19jbHNfdHlwZSkgeworCQkjICAgICRpbXBsVHlwZWRlZnN7Ikdkb20ke3BhcmFt
SURMVHlwZX0ifSA9IDE7CisJICAgIH0KKworICAgICAgICAjIFhYWCBUT0RPOiByZXNvbHZlIHdo
aWNoIGFyZ3VtZW50cyBzaG91bGQgLyBjYW4gYmUgTlVMTAorICAgICAgICAjIG9yIGhlY2sgcmVz
b2x2ZSBpZiBpdCdzIGV2ZW4gbmVjZXNzYXJ5IHRvIGNoZWNrISBPYmpDIGRvZXNuJ3QuCisgICAg
ICAgICMKKwkgICAgIyBpZiAoISRwYXJhbVR5cGVJc1ByaW1pdGl2ZSkgeworCQkjIGlmICgkcmV0
dXJuVHlwZSBuZSAidm9pZCIpIHsKKwkJIyAgICAgcHVzaChAY0JvZHksICIgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKCRwYXJhbU5hbWUsIDApO1xuIik7CisJCSMgfSBlbHNlIHsKKwkJIyAgICAg
cHVzaChAY0JvZHksICIgICAgZ19yZXR1cm5faWZfZmFpbCAoJHBhcmFtTmFtZSk7XG4iKTsKKwkJ
IyB9CisJICAgICN9CisJfQorCisJJHJldHVyblBhcmFtTmFtZSA9ICIiOworCWZvcmVhY2ggbXkg
JHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKwkgICAgbXkgJHBhcmFtSURMVHlw
ZSA9ICRwYXJhbS0+dHlwZTsKKwkgICAgbXkgJHBhcmFtVHlwZSA9IEdldEdUeXBlKCRwYXJhbUlE
TFR5cGUpOworCSAgICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0tPm5hbWUpOwor
CisJICAgIG15ICRwYXJhbV9pc19jbHNfdHlwZSA9IElzR0RPTUNsYXNzVHlwZSgkcGFyYW1JRExU
eXBlKTsKKwkgICAgIyBIQUNLIQorCSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxf
aHR0cF9yZXF1ZXN0X29wZW4iICYmCisJCSRwYXJhbS0+bmFtZSBlcSAidXJsIikgeworCisJCSMk
aW1wbEluY2x1ZGVzeyJLVVJMLmgifSA9IDE7CisJCXB1c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6
OktVUkwgX2dfJHtwYXJhbU5hbWV9ID0gV2ViQ29yZTo6S1VSTCgkcGFyYW1OYW1lKTtcbiIpOwor
CSAgICB9IGVsc2lmICgkcGFyYW1JRExUeXBlIGVxICJET01TdHJpbmciKSB7CisJCXB1c2goQGNC
b2R5LCAiICAgIFdlYkNvcmU6OlN0cmluZyBfZ18ke3BhcmFtTmFtZX0gPSBXZWJDb3JlOjpTdHJp
bmc6OmZyb21VVEY4KCRwYXJhbU5hbWUpO1xuIik7CisJICAgIH0KKwkgICAgaWYgKCRwYXJhbV9p
c19jbHNfdHlwZSkgeworCQlteSAkcGFyYW1fZ2RvbV9mbiA9ICJnZG9tXyIgLiBkZWNhbWVsaXpl
KCRwYXJhbUlETFR5cGUpOworCQlpZiAoJHBhcmFtSURMVHlwZSBlcSAiRXZlbnRUYXJnZXQiKSB7
CisJCSAgICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dkb21Ob2RlUHJpdmF0ZS5oIn0gPSAxOworCQkg
ICAgcHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6Tm9kZSAqIF9nXyR7cGFyYW1OYW1lfSA9IFdl
YktpdDo6Y29yZSgkcGFyYW1OYW1lKTtcbiIpOworCQl9IGVsc2UgeworCQkgICAgcHVzaChAY0Jv
ZHksICIgICAgV2ViQ29yZTo6JHtwYXJhbUlETFR5cGV9ICogX2dfJHtwYXJhbU5hbWV9ID0gV2Vi
S2l0Ojpjb3JlKCRwYXJhbU5hbWUpO1xuIik7CisJCX0KKyAgICAgICAgIyBYWFggVE9ETzogcmVz
b2x2ZSB3aGljaCBhcmd1bWVudHMgc2hvdWxkIC8gY2FuIGJlIE5VTEwKKyAgICAgICAgIyBvciBo
ZWNrIHJlc29sdmUgaWYgaXQncyBldmVuIG5lY2Vzc2FyeSB0byBjaGVjayEgT2JqQyBkb2Vzbid0
LgorICAgICAgICAjCisJCSNpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiKSB7CisJCSMgICAgcHVz
aChAY0JvZHksICIgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9nXyR7cGFyYW1OYW1lfSwgMCk7
XG4iKTsKKwkJI30gZWxzZSB7CisJCSMgICAgcHVzaChAY0JvZHksICIgICAgZ19yZXR1cm5faWZf
ZmFpbCAoX2dfJHtwYXJhbU5hbWV9KTtcbiIpOworCQkjfQorCisJICAgIH0KKwkgICAgJHJldHVy
blBhcmFtTmFtZSA9ICJfZ18iLiRwYXJhbU5hbWUgaWYgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiUmV0dXJuIn07CisJfQorCisJbXkgJGFzc2lnbiA9ICIiOworCW15ICRhc3NpZ25fcHJl
ID0gIiI7CisJbXkgJGFzc2lnbl9wb3N0ID0gIiI7CisJJGdfcmVzID0gMDsKKwlpZiAoJHJldHVy
blR5cGUgbmUgInZvaWQiICYmICEkaXNfY3VzdG9tX2ZuKSB7CisKKwkgICAgaWYgKCRyZXRfaXNf
Y2xzX3R5cGUpIHsKKwkJJGFzc2lnbiA9ICJQYXNzUmVmUHRyPFdlYkNvcmU6OiR7Zm5fc2lnX3R5
cGV9PiBnX3JlcyA9ICI7CisJCSRhc3NpZ25fcHJlID0gIldURjo6Z2V0UHRyKCI7CisJCSRhc3Np
Z25fcG9zdCA9ICIpIjsKKwkgICAgfSBlbHNlIHsKKwkJJGFzc2lnbiA9ICIke19yZXR1cm5UeXBl
fSByZXMgPSAiOworCSAgICB9CisJfQorCW15ICRleGNlcHRpb25zID0gIiI7CisJaWYgKEB7JGZ1
bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgeworCSAgICBwdXNoKEBjQm9keSwgIiAgICBXZWJD
b3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworCSAgICBpZiAoJHtjYWxsX2ltcGxfcGFy
YW1zfSBuZSAiIikgeworCQkkZXhjZXB0aW9ucyA9ICIsIGVjIjsKKwkgICAgfSBlbHNlIHsKKwkJ
JGV4Y2VwdGlvbnMgPSAiZWMiOworCSAgICB9CisJfQorCisJIyBuZWVkIHRoaXMgZm9yIGluY2x1
ZGluZyAuLi4gX3NvbWV0aGluZ18gLSBmb3IgdGhlIGNsYXNzIGFyZ3MKKwkjaWYgKCRyZXRfaXNf
Y2xzX3R5cGUpIHsKKwkjICAgICRpbXBsSW5jbHVkZXN7Imdkb20ke2ZuX3NpZ190eXBlfS5oIn0g
PSAxOworCSN9CisJaWYgKCRmdW5jdGlvbk5hbWUgZXEgImdkb21fbm9kZV9hcHBlbmRfY2hpbGQi
IHx8CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21fbm9kZV9pbnNlcnRfYmVmb3JlIiB8fAor
CSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgfHwKKwkgICAg
JGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV9ub2RlX3JlbW92ZV9jaGlsZCIpIHsKKwkgICAgbXkgJGN1
c3RvbV9nZG9tX25vZGVfYXBwZW5kX2NoaWxkID0gPDwgIkVPRiI7CisgICAgYm9vbCBvayA9IGl0
ZW0tPiR7Zm5fc2lnX25hbWV9KCR7Y2FsbF9pbXBsX3BhcmFtc30ke2V4Y2VwdGlvbnN9KTsKKyAg
ICBpZiAob2spCisgICAgeworICAgICAgICAke19yZXR1cm5UeXBlfSByZXMgPSBzdGF0aWNfY2Fz
dDwke19yZXR1cm5UeXBlfT4oV2ViS2l0Ojp0b0dET00oJHJldHVyblBhcmFtTmFtZSkpOworICAg
ICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK0VPRgorCSAgICBwdXNo
KEBjQm9keSwgJGN1c3RvbV9nZG9tX25vZGVfYXBwZW5kX2NoaWxkKTsKKwl9IGVsc2lmICgkZm5f
c2lnX3R5cGUgZXEgIkRPTU9iamVjdCIgJiYKKwkJICRmdW5jdGlvbk5hbWUgbmUgJ2dkb21fZG9j
dW1lbnRfZ2V0X2Nzc19jYW52YXNfY29udGV4dCcpIHsKKwkgICAgcHVzaChAY0JvZHksICIgICAg
LyogWFhYIFRPRE8gLSBnZXQgY2FudmFzIG9iamVjdCAoaXRlbS0+JHtmbl9zaWdfbmFtZX0oJHtj
YWxsX2ltcGxfcGFyYW1zfSR7ZXhjZXB0aW9uc30pKTsqL1xuIiApOworCisJfSBlbHNpZiAoJGZu
X3NpZ190eXBlIGVxICJET01TdHJpbmciKSB7CisJICAgIHB1c2goQGNCb2R5LCAiICAgICR7YXNz
aWdufUdTdHJpbmdDb252ZXJ0KGl0ZW0tPiR7Zm5fc2lnX25hbWV9KCR7Y2FsbF9pbXBsX3BhcmFt
c30ke2V4Y2VwdGlvbnN9KSk7XG4iICk7CisJfSBlbHNlIHsKKwkgICAgaWYgKCRnX3Jlcykgewor
CQkkZ19yZXMgPSAiJHthc3NpZ259JHthc3NpZ25fcHJlfWl0ZW0tPiR7Zm5fc2lnX25hbWV9KCR7
Y2FsbF9pbXBsX3BhcmFtc30ke2V4Y2VwdGlvbnN9JHthc3NpZ25fcG9zdH0pIiA7CisJICAgIH0g
ZWxzZSB7CisJCXB1c2goQGNCb2R5LCAiICAgICR7YXNzaWdufSR7YXNzaWduX3ByZX1pdGVtLT4k
e2ZuX3NpZ19uYW1lfSgke2NhbGxfaW1wbF9wYXJhbXN9JHtleGNlcHRpb25zfSR7YXNzaWduX3Bv
c3R9KTtcbiIgKTsKKwkgICAgfQorCX0KKwlpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiICYmICEk
aXNfY3VzdG9tX2ZuKSB7CisKKwkgICAgaWYgKCRmbl9zaWdfdHlwZSBuZSAiRE9NT2JqZWN0Iikg
eworCQlpZiAoJHJldF9pc19jbHNfdHlwZSkgeworCQkgICAgcHVzaChAY0JvZHksICIgICAgJHtf
cmV0dXJuVHlwZX0gcmVzID0gc3RhdGljX2Nhc3Q8JHtfcmV0dXJuVHlwZX0+KFdlYktpdDo6dG9H
RE9NKGdfcmVzLmdldCgpKSk7XG4iKTsKKwkJfQorCSAgICB9CisJICAgIGlmICgkZm5fc2lnX3R5
cGUgZXEgIkRPTU9iamVjdCIpIHsKKwkJcHVzaChAY0JvZHksICIgICAgcmV0dXJuIE5VTEw7IC8q
IFhYWCBUT0RPOiByZXR1cm4gY2FudmFzIG9iamVjdCAqL1xuIik7CisJICAgIH0gZWxzZSB7CisJ
CXB1c2goQGNCb2R5LCAiICAgIHJldHVybiByZXM7XG4iKTsKKwkgICAgfQorCX0KKwlwdXNoKEBj
Qm9keSwgIlxuIik7CisKKwlwdXNoKEBjQm9keSwgIn1cblxuIik7CisgICAgfQorCisgICAgcHVz
aChAY0JvZHksICJ9IC8qIGV4dGVybiBcIkNcIiAqL1xuXG4iKTsKKyAgICBwdXNoKEBjQm9keVBy
aXYsICJHX0VORF9ERUNMU1xuXG4iKTsKKworICAgIHB1c2goQGhCb2R5LCAiR19FTkRfREVDTFNc
blxuIik7CisgICAgcHVzaChAaEJvZHksICIjZW5kaWYgLyogJGd1YXJkICovXG4iKTsKKworICAg
IHB1c2goQGhCb2R5UHJvcCwgIkdfRU5EX0RFQ0xTXG5cbiIpOworICAgIHB1c2goQGhCb2R5UHJv
cCwgIiNlbmRpZiAvKiAke2d1YXJkfV9QUk9QXyovXG4iKTsKK30KKworIyBJbnRlcm5hbCBoZWxw
ZXIKK3N1YiBXcml0ZURhdGEgeworICAgIG15ICgkb2JqZWN0LCAkbmFtZSkgPSBAXzsKKworICAg
ICMgV3JpdGUgUHJpdmF0ZSBoZWFkZXIKKyAgICBteSAkaGRyRk5hbWVQcml2ID0gIiRvdXRwdXRE
aXIvIiAuICRuYW1lIC4gIlByaXZhdGUuaCI7CisgICAgb3BlbihQUklWSEVBREVSLCAiPiRoZHJG
TmFtZVByaXYiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaGRyRk5hbWVQcml2IjsKKyAg
ICBwcmludCBQUklWSEVBREVSIEBoUHJlZml4OworICAgIHByaW50IFBSSVZIRUFERVIgIlxuIjsK
KyAgICBwcmludCBQUklWSEVBREVSIEBoQm9keVByaXY7CisgICAgY2xvc2UoUFJJVkhFQURFUik7
CisKKyAgICAjIFdyaXRlIHByb3BlcnRpZXMgaGVhZGVyIChhdm9pZHMgcmVjdXJzaXZlIG5pZ2h0
bWFyZSkKKyAgICBteSAkaGRyUHJvcEZOYW1lID0gIiRvdXRwdXREaXIvIiAuICRuYW1lIC4gInBy
b3BzLmgiOworICAgIG9wZW4oUFJPUEhFQURFUiwgIj4kaGRyUHJvcEZOYW1lIikgb3IgZGllICJD
b3VsZG4ndCBvcGVuIGZpbGUgJGhkclByb3BGTmFtZSI7CisKKyAgICAkaGRyUHJvcEluY2x1ZGVz
eyJnbGliLW9iamVjdC5oIn0gPSAxOworCisgICAgcHJpbnQgUFJPUEhFQURFUiBAaFByZWZpeDsK
KyAgICBwcmludCBQUk9QSEVBREVSICIvKiByZWN1cnNpdmUgaW5jbHVkZXMgLyBkZWZpbmVzIGlz
c3VlIGZvcmNlcyBzZXBhcmF0ZSBoZWFkZXIgZm9yIHByb3BlcnRpZXMuXG5wZXJoYXBzIC0gYmV0
dGVyIC0gYWxsIGdkb20gZ3RrIGZ1bmN0aW9ucyBzaG91bGQgYmUgaW4gaGVyZSEqL1xuIjsKKyAg
ICBwcmludCBQUk9QSEVBREVSIEBoQm9keVByb3BQcmU7CisgICAgcHJpbnQgUFJPUEhFQURFUiAi
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+XG4iOworICAgIHByaW50IFBST1BIRUFE
RVIgbWFwIHsgIiNpbmNsdWRlIFwiJF9cIlxuIiB9IHNvcnQga2V5cyglaGRyUHJvcEluY2x1ZGVz
KTsKKyAgICBwcmludCBQUk9QSEVBREVSICJcbiIgaWYga2V5cyglaGRyUHJvcEluY2x1ZGVzKTsK
KyAgICBwcmludCBQUk9QSEVBREVSICJcbiI7CisgICAgcHJpbnQgUFJPUEhFQURFUiBAaEJvZHlQ
cm9wOworCisgICAgY2xvc2UoSEVBREVSKTsKKworICAgICMgV3JpdGUgcHVibGljIGhlYWRlci4K
KyAgICBteSAkaGRyRk5hbWUgPSAiJG91dHB1dERpci8iIC4gJG5hbWUgLiAiLmgiOworICAgIG9w
ZW4oSEVBREVSLCAiPiRoZHJGTmFtZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRoZHJG
TmFtZSI7CisKKyAgICAkaGRySW5jbHVkZXN7ImdsaWItb2JqZWN0LmgifSA9IDE7CisKKyAgICBw
cmludCBIRUFERVIgQGhQcmVmaXg7CisgICAgcHJpbnQgSEVBREVSIEBoUHJlZml4R3VhcmQ7Cisg
ICAgcHJpbnQgSEVBREVSICIjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD5cbiI7Cisg
ICAgcHJpbnQgSEVBREVSIG1hcCB7ICIjaW5jbHVkZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWhk
ckluY2x1ZGVzKTsKKyAgICBwcmludCBIRUFERVIgIlxuIiBpZiBrZXlzKCVoZHJJbmNsdWRlcyk7
CisgICAgcHJpbnQgSEVBREVSICJcbiI7CisgICAgcHJpbnQgSEVBREVSIEBoQm9keVByZTsKKyAg
ICBwcmludCBIRUFERVIgbWFwIHsgInR5cGVkZWYgc3RydWN0IF8kXyAkXztcbiIgfSBzb3J0IGtl
eXMoJWltcGxUeXBlZGVmcyk7CisgICAgcHJpbnQgSEVBREVSICJcbiIgaWYga2V5cyglaW1wbFR5
cGVkZWZzKTsKKyAgICBwcmludCBIRUFERVIgQGhCb2R5OworCisgICAgY2xvc2UoSEVBREVSKTsK
KworICAgICMgV3JpdGUgdGhlIGltcGxlbWVudGF0aW9uIHNvdXJjZXMKKyAgICBteSAkaW1wbEZp
bGVOYW1lID0gIiRvdXRwdXREaXIvIiAuICRuYW1lIC4gIi5jcHAiOworICAgIG9wZW4oSU1QTCwg
Ij4kaW1wbEZpbGVOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGltcGxGaWxlTmFt
ZSI7CisKKyAgICBwcmludCBJTVBMIEBjUHJlZml4OworICAgIHByaW50IElNUEwgIiNpbmNsdWRl
IFwiY29uZmlnLmhcIlxuXG4iOworICAgIHByaW50IElNUEwgIiNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+XG4iOworICAgIHByaW50IElNUEwgbWFwIHsgIiNpbmNsdWRlIFwiJF9cIlxuIiB9IHNvcnQg
a2V5cyglaW1wbEluY2x1ZGVzKTsKKyAgICBwcmludCBJTVBMICJcbiIgaWYga2V5cyglaW1wbElu
Y2x1ZGVzKTsKKyAgICBwcmludCBJTVBMICJuYW1lc3BhY2UgV2ViS2l0IHtcbiI7CisgICAgcHJp
bnQgSU1QTCBtYXAgeyAiJF9cbiIgfSBzb3J0IGtleXMoJWNCb2R5R0RPTSk7CisgICAgcHJpbnQg
SU1QTCAifTsgLy8gbmFtZXNwYWNlIFdlYktpdFxuIjsKKyAgICBwcmludCBJTVBMIEBjQm9keTsK
KworICAgIHByaW50IElNUEwgIlxuIjsKKyAgICBwcmludCBJTVBMIEBjQm9keVByaXY7CisKKyAg
ICBjbG9zZShJTVBMKTsKKworICAgICVpbXBsSW5jbHVkZXMgPSAoKTsKKyAgICAlaW1wbFR5cGVk
ZWZzID0gKCk7CisgICAgJWhkckluY2x1ZGVzID0gKCk7CisgICAgQGhQcmVmaXggPSAoKTsKKyAg
ICBAaEJvZHkgPSAoKTsKKyAgICBAaEJvZHlQcml2ID0gKCk7CisgICAgQGhCb2R5UHJvcCA9ICgp
OworICAgIEBoQm9keVByb3BQcmUgPSAoKTsKKworICAgIEBjUHJlZml4ID0gKCk7CisgICAgQGNC
b2R5R0RPTSA9ICgpOworICAgIEBjQm9keSA9ICgpOworICAgIEBjQm9keVByaXYgPSAoKTsKK30K
KworMTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34289</attachid>
            <date>2009-08-07 10:20:05 -0700</date>
            <delta_ts>2009-08-07 15:50:37 -0700</delta_ts>
            <desc>updated from other review comments</desc>
            <filename>gcl1.patch</filename>
            <type>text/plain</type>
            <size>51129</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjk1Niw2ICsyMzA0OCwxNSBAQAogICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpj
b3B5Qml0bWFwRGF0YSk6CiAgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6Om9wZXJhdG9y
PSk6CiAKKzIwMDgtMTEtMzAgIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtj
bC5uZXQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworICAgICAgICBB
ZGQgR09iamVjdCBDb2RlIEdlbmVyYXRvciBMaWJyYXJ5IDEKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDMxCisKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTEucG06IEFkZGVkIGdvYmplY3QgbGli
cmFyeSwgYmVnaW5uaW5nIHRoZSBwcm9jZXNzIG9mIHNwbGl0dGluZyBDb2RlR2VuZXJhdG9yR09i
amVjdC5wbSBpbnRvIGFzIG1hbnkgZmlsZXMgYXMgaXQgdGFrZXMgdG8gZ2V0IENvZGVHZW5lcmF0
b3JHT2JqZWN0LnBtIHRocm91Z2ggcmV2aWV3LgorCiAyMDA5LTA2LTE2ICBQaWVycmUgZCdIZXJi
ZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9o
biBTdWxsaXZhbgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JH
T2JqZWN0TGlicmFyeTEucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTEucG0JKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3RMaWJyYXJ5MS5wbQkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNTI1IEBACisjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBMdWtl
IEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorIyBDb3B5cmlnaHQgKEMp
IDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorIyBDb3B5cmlnaHQgKEMp
IDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyMgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisjIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorCitwYWNrYWdlIENvZGVHZW5lcmF0b3JHT2JqZWN0OworCisjIERlZmF1bHQgTGljZW5j
ZSBUZW1wbGF0ZXMKK215ICRsaWNlbmNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbFxAbGtjbC5u
ZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBcQGF0b2tlci5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLgorICovCitFT0YKKworbXkgJWltcGxJbmNs
dWRlcyA9ICgpOworbXkgJWhkckluY2x1ZGVzID0gKCk7CitteSAlaGRyUHJvcEluY2x1ZGVzID0g
KCk7CitteSAlaW1wbFR5cGVkZWZzID0gKCk7CisKKyMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgorc3Vi
IG5ldyB7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRyZWZlcmVuY2UgPSB7IH07
CisKKyAgICAkY29kZUdlbmVyYXRvciA9IHNoaWZ0OworICAgICRvdXRwdXREaXIgPSBzaGlmdDsK
KworICAgIGJsZXNzKCRyZWZlcmVuY2UsICRvYmplY3QpOworICAgIHJldHVybiAkcmVmZXJlbmNl
OworfQorCitzdWIgZmluaXNoIHsKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Cit9CisKK3N1YiBD
bHNUb0dPYmpUeXBlIHsKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIHVj
KGRlY2FtZWxpemUoJGNsYXNzTmFtZSkpCit9CisKK3N1YiBHZXRQYXJlbnRDbGFzc05hbWUgewor
ICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgIyA/PyBxdWU/PworICAgICNyZXR1cm4g
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In0gaWYgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVnYWN5UGFyZW50In07CisgICAgcmV0dXJuICJH
ZG9tRE9NT2JqZWN0IiBpZiBAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMDsKKyAgICByZXR1cm4g
Ikdkb20iIC4gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9kZS0+cGFyZW50cygw
KSk7Cit9CisKK3N1YiBHZXRQYXJlbnRHT2JqVHlwZSB7CisgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CisKKyAgICAjID8/IHF1ZT8/CisgICAgI3JldHVybiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifSBpZiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJMZWdhY3lQYXJlbnQifTsKKyAgICByZXR1cm4gIkdET01fVFlQRV9ET01fT0JKRUNUIiBp
ZiBAeyRkYXRhTm9kZS0+cGFyZW50c30gZXEgMDsKKyAgICByZXR1cm4gIkdET01fVFlQRV8iIC4g
Q2xzVG9HT2JqVHlwZSgkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGRhdGFOb2RlLT5wYXJl
bnRzKDApKSk7Cit9CisKKworIyBBbGdvcml0aG0gdGFrZW4gZnJvbSBTdHJpbmc6OkNhbWVsQ2Fz
ZSAwLjAxCitzdWIgY2FtZWxpemUgeworICAgIG15ICRzID0gc2hpZnQ7CisgICAgam9pbignJywg
bWFweyB1Y2ZpcnN0ICRfIH0gc3BsaXQoLyg/PD1bQS1aYS16XSlfKD89W0EtWmEtel0pfFxiLywg
JHMpKTsKK30KKworIyBBbGdvcml0aG0gdGFrZW4gZnJvbSBTdHJpbmc6OkNhbWVsQ2FzZSAwLjAx
CitzdWIgZGVjYW1lbGl6ZSB7CisgICAgbXkgJHMgPSBzaGlmdDsKKyAgICAkcyA9fiBzeyhbXmEt
ekEtWl0/KShbQS1aXSopKFtBLVpdKShbYS16XT8pfXsKKyAgICAgICAgbXkgJGZjID0gcG9zKCRz
KT09MDsKKyAgICAgICAgbXkgKCRwMCwkcDEsJHAyLCRwMykgPSAoJDEsbGMkMixsYyQzLCQ0KTsK
KyAgICAgICAgbXkgJHQgPSAkcDAgfHwgJGZjID8gJHAwIDogJ18nOworICAgICAgICAkdCAuPSAk
cDMgPyAkcDEgPyAiJHtwMX1fJHAyJHAzIiA6ICIkcDIkcDMiIDogIiRwMSRwMiI7CisgICAgICAg
ICR0OworICAgIH1nZTsKKyAgICAkczsKK30KKworc3ViIEdldEhkck5hbWUgeworICAgIG15ICRu
YW1lID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKKworICAgIHJldHVybiAi
R2RvbSRuYW1lIjsKK30KKworc3ViIEdldENsYXNzTmFtZSB7CisgICAgbXkgJG5hbWUgPSAkY29k
ZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuICJHZG9tJG5hbWUi
OworfQorCitzdWIgR2V0R0luY2x1ZGVIZHIgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAg
bXkgJG5hbWUgPSBHZXRIZHJOYW1lKCR0eXBlKTsKKyAgICAjbXkgJG5hbWUgPSBjYW1lbGl6ZShH
ZXRDbGFzc05hbWUoJHR5cGUpKTsKKworICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAiaW50IjsK
KyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgImxvbmciOworICAgIHJldHVybiAiIiBpZiAkdHlw
ZSBlcSAic2hvcnQiOworICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAiY2hhciI7CisgICAgcmV0
dXJuICIiIGlmICR0eXBlIGVxICJmbG9hdCI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJk
b3VibGUiOworICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAidW5zaWduZWQiOworICAgIHJldHVy
biAiIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUg
ZXEgInVuc2lnbmVkIGxvbmciOworICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAidW5zaWduZWQg
bG9uZyBsb25nIjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IjsK
KyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgIkRPTVRpbWVTdGFtcCI7CisgICAgcmV0dXJuICIi
IGlmICR0eXBlIGVxICJFdmVudExpc3RlbmVyIjsKKyAgICByZXR1cm4gIlJhbmdlLmgiIGlmICR0
eXBlIGVxICJDb21wYXJlSG93IjsKKyAgICByZXR1cm4gImdkb20vR2RvbUNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oIiBpZiAkdHlwZSBlcSAiRE9NT2JqZWN0IjsKKyAgICByZXR1cm4gIiIgaWYg
JHR5cGUgZXEgInVuc2lnbmVkIGNoYXIiOworICAgICNyZXR1cm4gIiIgaWYgJHR5cGUgZXEgIlJH
QkNvbG9yIjsgIyBYWFggVE9ETyAtIERPTSBjbGFzcyB3cmFwcGVyCisgICAgcmV0dXJuICJnbGli
LW9iamVjdC5oIiBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gIkdkb21Ob2Rl
LmgiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCI7CisKKyAgICByZXR1cm4gImdsaWItb2JqZWN0
LmgiIGlmICR0eXBlIGVxICJmbG9hdCI7CisKKyAgICByZXR1cm4gImdsaWItb2JqZWN0LmgiIGlm
ICR0eXBlIGVxICJib29sZWFuIjsKKworICAgIHJldHVybiAiZ2xpYi1vYmplY3QuaCIgaWYgJHR5
cGUgZXEgInZvaWQiOworCisgICAgcmV0dXJuICIkbmFtZS5oIjsKK30KKworIyByZXR1cm5zIDEg
aWYgd2UgbmVlZCB0byBjcmVhdGUgYSBnb2JqZWN0IHdyYXBwZXIgYXJvdW5kIHRoZSByZXR1cm4g
cmVzdWx0CitzdWIgSXNHRE9NQ2xhc3NUeXBlIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAg
IG15ICRuYW1lID0gR2V0Q2xhc3NOYW1lKCR0eXBlKTsKKworICAgIHJldHVybiAwIGlmICR0eXBl
IGVxICJET01UaW1lU3RhbXAiOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJET01TdHJpbmci
OworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJFdmVudExpc3RlbmVyIjsKKyAgICByZXR1cm4g
MCBpZiAkdHlwZSBlcSAiQ29tcGFyZUhvdyI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImZs
b2F0IjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiZG91YmxlIjsKKyAgICByZXR1cm4gMCBp
ZiAkdHlwZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImNoYXIiOwor
ICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJsb25nIjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBl
cSAic2hvcnQiOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1Y2hhciI7CisgICAgcmV0dXJu
IDAgaWYgJHR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiaW50
IjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsKKyAgICByZXR1cm4g
MCBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEg
InVuc2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgInVuc2lnbmVk
IHNob3J0IjsKKyAgICAjcmV0dXJuIDAgaWYgJHR5cGUgZXEgIlJHQkNvbG9yIjsgIyBYWFggVE9E
TyAtIERPTSBjbGFzcyB3cmFwcGVyCisKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAidm9pZCI7
CisKKyAgICByZXR1cm4gMTsKK30KKworc3ViIEdldFByb3BHVHlwZSB7CisgICAgbXkgJHR5cGUg
PSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisKKyAgICByZXR1
cm4gInN0cmluZyIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZyI7CisgICAgcmV0dXJuICJmbG9hdCIg
aWYgJHR5cGUgZXEgImZsb2F0IjsKKyAgICByZXR1cm4gIm5vdHlldHN1cHBvcnRlZCIgaWYgJHR5
cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiZG91YmxlIiBpZiAkdHlwZSBlcSAiZG91
YmxlIjsKKyAgICByZXR1cm4gImJvb2xlYW4iIGlmICR0eXBlIGVxICJib29sZWFuIjsKKyAgICBy
ZXR1cm4gImNoYXIiIGlmICR0eXBlIGVxICJjaGFyIjsKKyAgICByZXR1cm4gImxvbmciIGlmICR0
eXBlIGVxICJsb25nIjsKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgInNob3J0IjsKKyAg
ICByZXR1cm4gInVjaGFyIiBpZiAkdHlwZSBlcSAidWNoYXIiOworICAgIHJldHVybiAidWludCIg
aWYgJHR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgImlu
dCI7CisgICAgcmV0dXJuICJ1aW50IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsKKyAgICBy
ZXR1cm4gInVpbnQ2NCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0
dXJuICJ1bG9uZyIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOworICAgIHJldHVybiAidWlu
dCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IjsKKyAgICAjcmV0dXJuICJ1bG9uZyIgaWYg
JHR5cGUgZXEgIlJHQkNvbG9yIjsgIyBYWFggVE9ETyAtIERPTSBjbGFzcyB3cmFwcGVyCisKKyAg
ICByZXR1cm4gIm9iamVjdCI7Cit9CisKK3N1YiBHZXRHVHlwZSB7CisgICAgbXkgJHR5cGUgPSBz
aGlmdDsKKyAgICBteSAkbmFtZSA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisgICAgI215ICRuYW1l
ID0gY2FtZWxpemUoR2V0Q2xhc3NOYW1lKCR0eXBlKSk7CisKKyAgICByZXR1cm4gIkdkb21Ob2Rl
ICoiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCI7CisgICAgcmV0dXJuICJnY2hhciAqIiBpZiAk
dHlwZSBlcSAiRE9NU3RyaW5nIjsKKyAgICByZXR1cm4gImdmbG9hdCIgaWYgJHR5cGUgZXEgImZs
b2F0IjsKKyAgICByZXR1cm4gIldlYkNvcmU6OlJhbmdlOjpDb21wYXJlSG93ICIgaWYgJHR5cGUg
ZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiZ2RvdWJsZSIgaWYgJHR5cGUgZXEgImRvdWJs
ZSI7CisgICAgcmV0dXJuICJnYm9vbGVhbiIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOworICAgIHJl
dHVybiAiZ2NoYXIiIGlmICR0eXBlIGVxICJjaGFyIjsKKyAgICByZXR1cm4gImdsb25nIiBpZiAk
dHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuICJnc2hvcnQiIGlmICR0eXBlIGVxICJzaG9ydCI7
CisgICAgcmV0dXJuICJndWNoYXIiIGlmICR0eXBlIGVxICJ1Y2hhciI7CisgICAgcmV0dXJuICJn
dWludCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gImdpbnQiIGlmICR0eXBl
IGVxICJpbnQiOworICAgIHJldHVybiAiZ3VpbnQiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBpbnQi
OworICAgIHJldHVybiAiZ3Vsb25nIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyI7CisgICAg
cmV0dXJuICJndWludDY0IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgbG9uZyBsb25nIjsKKyAgICBy
ZXR1cm4gImd1c2hvcnQiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBzaG9ydCI7CisgICAgI3JldHVy
biAiZ3Vsb25nIiBpZiAkdHlwZSBlcSAiUkdCQ29sb3IiOyAjIFhYWCBUT0RPIC0gRE9NIGNsYXNz
IHdyYXBwZXIKKworICAgIHJldHVybiAidm9pZCIgaWYgJHR5cGUgZXEgInZvaWQiOworCisgICAg
cmV0dXJuICIkbmFtZSAqIjsKK30KKworc3ViIGdldEluY0hkciB7CisgICAgbXkgJHR5cGUgPSBz
aGlmdDsKKworICAgIG15ICRpbmNsdWRlSGRyID0gR2V0R0luY2x1ZGVIZHIoJHR5cGUpOworICAg
IGlmICgkaW5jbHVkZUhkcikgeworICAgICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0Iikg
eworICAgICAgICAgICAgcmV0dXJuICJHZG9tTm9kZS5oIjsKKyAgICAgICAgfSBlbHNpZiAoJHR5
cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAgICAgICAgICAgICMgWFhYID8/Pz8gd3RmPz8gOikgY29w
aWVkIGZyb20ganNnZW5lcmF0b3IuCisgICAgICAgICAgICByZXR1cm4gIkdkb21DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4g
JGluY2x1ZGVIZHI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICIiOworfQorCitzdWIg
YWRkUHJvcEluY0hkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIG15ICRoZHIgPSBn
ZXRJbmNIZHIoJHR5cGUpOworICAgIGlmICgkaGRyIG5lICIiKSB7CisgICAgICAgIGlmIChJc0dE
T01DbGFzc1R5cGUoJHR5cGUpKSB7CisgICAgICAgICAgICAkaGRyID0gc3Vic3RyKCRoZHIsIDAs
IGxlbmd0aCgkaGRyKS0yKTsKKyAgICAgICAgICAgICRoZHJQcm9wSW5jbHVkZXN7Imdkb20vIi4k
aGRyLiIuaCJ9ID0gMTsKKyAgICAgICAgICAgICRoZHJQcm9wSW5jbHVkZXN7Imdkb20vIi4kaGRy
LiJQcml2YXRlLmgifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkaGRyUHJv
cEluY2x1ZGVzeyRoZHJ9ID0gMTsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdWIgYWRkSW5j
SGRyIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgbXkgJGhkciA9IGdldEluY0hkcigk
dHlwZSk7CisgICAgaWYgKCRoZHIgbmUgIiIpIHsKKyAgICAgICAgaWYgKElzR0RPTUNsYXNzVHlw
ZSgkdHlwZSkpIHsKKyAgICAgICAgICAgICRoZHJJbmNsdWRlc3siZ2RvbS8kaGRyIn0gPSAxOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGhkckluY2x1ZGVzeyRoZHJ9ID0gMTsKKyAg
ICAgICAgfQorICAgIH0KKworfQorCitzdWIgYWRkSW5jQm9keSB7CisgICAgbXkgJHR5cGUgPSBz
aGlmdDsKKworICAgIG15ICRoZHIgPSBnZXRJbmNIZHIoJHR5cGUpOworICAgIGlmICgkaGRyIG5l
ICIiKSB7CisgICAgICAgIGlmIChJc0dET01DbGFzc1R5cGUoJHR5cGUpKSB7CisgICAgICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJnZG9tLyRoZHIifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAkaW1wbEluY2x1ZGVzeyRoZHJ9ID0gMTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
c3ViIEdldFByaXZGbiB7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAk
bGNhc2VfaWZhY2VuYW1lID0gc2hpZnQ7CisgICAgbXkgJHJlcyA9IHNoaWZ0OworICAgIG15ICRw
YXJtID0gc2hpZnQ7CisKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50VGFyZ2V0Iikg
eworICAgICAgICByZXR1cm4gIldlYkNvcmU6Ok5vZGUgKiAkcmVzID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOyI7CisgICAgfQorICAgIHJldHVybiAiV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqICRy
ZXMgPSBXZWJLaXQ6OmNvcmUoJHBhcm0pOyI7Cit9CisKK3N1YiBza2lwUHJvcFRlbXBvcmFyaWx5
IHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICRwcm9wX3R5cGUgPSBzaGlmdDsKKwor
ICAgICMgc2tpcCBNZWRpYUxpc3QKKyAgICBpZiAoJHByb3BfdHlwZSBlcSAic3R5bGVzaGVldHM6
Ok1lZGlhTGlzdCIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBza2lwIE9i
amVjdAorICAgIGlmICgkcHJvcF90eXBlIGVxICJPYmplY3QiKSB7CisgICAgICAgIHJldHVybiAx
OworICAgIH0KKworICAgICMgc2tpcCBFdmVudAorICAgIGlmICgkcHJvcF90eXBlIGVxICJFdmVu
dCIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBza2lwIENyeXB0bworICAg
IGlmICgkcHJvcF90eXBlIGVxICJDcnlwdG8iKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0K
KworICAgICMgc2tpcCBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbgorICAgIGlmICgkcHJvcF90eXBl
IGVxICJDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorCisgICAgIyBza2lwIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uCisgICAgI2lmICgkcHJv
cF90eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIikgeworICAgICMgICAgcmV0dXJuIDE7Cisg
ICAgI30KKworICAgICMgc2tpcCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbgorICAgICNpZiAo
JHByb3BfdHlwZSBlcSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24iKSB7CisgICAgIyAgICBy
ZXR1cm4gMTsKKyAgICAjfQorCisgICAgIyBza2lwIEV2ZW50TGlzdGVuZXIKKyAgICBpZiAoJHBy
b3BfdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CisgICAgIyBza2lwIERPTVdpbmRvdworICAgICNpZiAoJHByb3BfdHlwZSBlcSAiRE9NV2luZG93
IikgeworICAgICMgICAgcmV0dXJuIDE7CisgICAgI30KKworICAgICMgc2tpcCBDb25zdHJ1Y3Rv
cnMgKHdoYXRldmVyIHRoZXkgYXJlKSBmb3Igbm93LgorICAgIGlmICgkcHJvcF90eXBlID1+IC9D
b25zdHJ1Y3RvciQvKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICMgY2FudmFz
MmQuLi4uCisgICAgaWYgKCRwcm9wX3R5cGUgZXEgImN1c3RvbSIpIHsKKyAgICAgICAgcmV0dXJu
IDE7CisgICAgfQorCisgICAgaWYgKCRwcm9wX3R5cGUgZXEgIkFycmF5IikgeworICAgICAgICBy
ZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoJHByb3BfdHlwZSBlcSAiRE9NVGltZVN0YW1wIikg
eworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAjIFRPRE86IFNWRworICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+SXNQb2RUeXBlKCR0eXBlKSB8fCAkY29kZUdlbmVyYXRvci0+SXNTVkdB
bmltYXRlZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKworc3ViIFVzZXNNYW51YWxUb0dET01JbXBsZW1lbnRhdGlvbiB7CisgICAgbXkg
JHR5cGUgPSBzaGlmdDsKKworICAgICMgc2tpcHBlZCBvdXQgQ2FudmFzUGl4ZWxBcnJheSAtIHNl
ZSBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwIGZvciB3aHkuCisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIk5vZGUiIG9yICR0eXBlIGVxICJEb2N1bWVudCIgb3IgJHR5cGUgZXEgIkhUTUxD
b2xsZWN0aW9uIiBvcgorICAgICAgJHR5cGUgZXEgIlNWR1BhdGhTZWciIG9yICR0eXBlIGVxICJT
dHlsZVNoZWV0IiBvciAkdHlwZSBlcSAiQ1NTUnVsZSIgb3IgJHR5cGUgZXEgIkNTU1ZhbHVlIiBv
cgorICAgICAgJHR5cGUgZXEgIk9iamVjdCIgb3IKKwkkdHlwZSBlcSAiRXZlbnQiIG9yICR0eXBl
IGVxICJFbGVtZW50IiBvciAkdHlwZSBlcSAiVGV4dCI7CisgICAgcmV0dXJuIDA7Cit9CisKKwor
IyBHZW5lcmF0ZSBoZWFkZXIgYW5kIGltcGwKK3N1YiBHZW5lcmF0ZSB7CisgICAgbXkgJG9iamVj
dCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgbXkgJGhhc0xlZ2Fj
eVBhcmVudCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9
OworICAgIG15ICRoYXNSZWFsUGFyZW50ID0gQHskZGF0YU5vZGUtPnBhcmVudHN9ID4gMDsKKyAg
ICBteSAkaGFzUGFyZW50ID0gJGhhc0xlZ2FjeVBhcmVudCB8fCAkaGFzUmVhbFBhcmVudDsKKyAg
ICBteSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRhTm9kZSk7Cisg
ICAgbXkgJHBhcmVudEdPYmpUeXBlID0gR2V0UGFyZW50R09ialR5cGUoJGRhdGFOb2RlKTsKKyAg
ICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1l
ID0gR2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkaGRyTmFtZSA9IEdldEhk
ck5hbWUoJGludGVyZmFjZU5hbWUpOworCisgICAgIyBBZGQgdGhlIGRlZmF1bHQgaW1wbCBoZWFk
ZXIgdGVtcGxhdGUKKyAgICBAY1ByZWZpeCA9IHNwbGl0KCJcciIsICRsaWNlbmNlVGVtcGxhdGUp
OworICAgIHB1c2goQGNQcmVmaXgsICJcbiIpOworCisgICAgJGltcGxJbmNsdWRlc3siR0RPTUJp
bmRpbmcuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tLyRoZHJOYW1lLmgifSA9IDE7
CisgICAgJGltcGxJbmNsdWRlc3siZ2RvbS8ke2hkck5hbWV9UHJpdmF0ZS5oIn0gPSAxOworCisg
ICAgbXkgJHBhcmVudEludGVyZmFjZU5hbWUgPSAiRE9NT2JqZWN0IjsKKyAgICBteSAkcGFyZW50
R0lmYWNlTmFtZSA9ICJHRE9NT2JqZWN0IjsKKyAgICBteSAkcGFyZW50SGRyTmFtZSA9ICJHZG9t
RE9NT2JqZWN0IjsKKyAgICBpZiAoJHBhcmVudENsYXNzTmFtZSBuZSAiR09iamVjdCIpIHsKKyAg
ICAgICAgJHBhcmVudEludGVyZmFjZU5hbWUgPSBzdWJzdHIoJHBhcmVudENsYXNzTmFtZSwgNCk7
CisgICAgICAgIGlmICgkcGFyZW50SW50ZXJmYWNlTmFtZSBuZSAiRE9NT2JqZWN0IikgeworICAg
ICAgICAgICAgJHBhcmVudEdJZmFjZU5hbWUgPSAiR0RPTSIuc3Vic3RyKCRwYXJlbnRDbGFzc05h
bWUsIDQpOworICAgICAgICAgICAgJHBhcmVudEhkck5hbWUgPSBHZXRIZHJOYW1lKCRwYXJlbnRJ
bnRlcmZhY2VOYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRwYXJlbnRHSWZh
Y2VOYW1lID0gIkdET01PYmplY3QiOworICAgICAgICB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7
Imdkb20vJHtwYXJlbnRIZHJOYW1lfS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJn
ZG9tLyR7cGFyZW50SGRyTmFtZX1Qcml2YXRlLmgifSA9IDE7CisgICAgICAgICRoZHJJbmNsdWRl
c3siZ2RvbS8ke3BhcmVudEhkck5hbWV9LmgifSA9IDE7CisgICAgICAgICMkaGRySW5jbHVkZXN7
IlByaXZhdGUke3BhcmVudEhkck5hbWV9LmgifSA9IDA7CisgICAgfQorCisgICAgIyBUT0RPIC0g
bWFrZSB0aGVzZSBvbmx5IGluY2x1ZGUgd2hlcmUgbmVlZGVkLCBsaWtld2lzZSB0aGUKKyAgICAj
IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0b0dET00sIHRvbworICAgICRpbXBsSW5jbHVkZXN7Ik5v
ZGUuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJOb2RlTGlzdC5oIn0gPSAxOworICAgICRp
bXBsSW5jbHVkZXN7IkVsZW1lbnQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDU1NWYWx1
ZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNTU1J1bGUuaCJ9ID0gMTsKKyAgICAkaW1w
bEluY2x1ZGVzeyJDU1NSdWxlTGlzdC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNTU1N0
eWxlRGVjbGFyYXRpb24uaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJIVE1MQ29sbGVjdGlv
bi5oIn0gPSAxOworICAgICMkaW1wbEluY2x1ZGVzeyJTVkdQYXRoU2VnLmgifSA9IDE7CisgICAg
JGltcGxJbmNsdWRlc3siU3R5bGVTaGVldC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkV2
ZW50LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzUGl4ZWxBcnJheS5oIn0gPSAx
OworICAgICRpbXBsSW5jbHVkZXN7IkRPTVdpbmRvdy5oIn0gPSAxOworICAgICRpbXBsSW5jbHVk
ZXN7IlRleHQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDb3VudGVyLmgifSA9IDE7Cisg
ICAgJGltcGxJbmNsdWRlc3siUmVjdC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkltYWdl
RGF0YS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc0dyYWRpZW50LmgifSA9IDE7
CisgICAgJGltcGxJbmNsdWRlc3siVGV4dE1ldHJpY3MuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1
ZGVzeyJEYXRhYmFzZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkRPTVNlbGVjdGlvbi5o
In0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IlhQYXRoUmVzdWx0LmgifSA9IDE7CisgICAgJGlt
cGxJbmNsdWRlc3siZ2RvbS9Db252ZXJ0VG9HQ2hhclByaXZhdGUuaCJ9ID0gMTsKKworICAgIHB1
c2goQGNCb2R5LCAibmFtZXNwYWNlIFdlYktpdCB7XG4iKTsKKworICAgICMgR2V0IGNvcnJlY3Qg
cGFzcy9zdG9yZSB0eXBlcyByZXNwZWN0aW5nIFBPRFR5cGUgZmxhZworICAgIG15ICRwb2RUeXBl
ID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUE9EVHlwZSJ9OworICAgIG15ICRw
YXNzVHlwZSA9ICRwb2RUeXBlID8gIkpTU1ZHUE9EVHlwZVdyYXBwZXI8JHBvZFR5cGU+KiIgOiAi
JGludGVyZmFjZU5hbWUqIjsKKworICAgIGlmICghVXNlc01hbnVhbFRvR0RPTUltcGxlbWVudGF0
aW9uKCRpbnRlcmZhY2VOYW1lKSkgeworCSRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworZ3BvaW50
ZXIgdG9HRE9NKFdlYkNvcmU6OiRwYXNzVHlwZSBvYmopCit7CisgICAgaWYgKCFvYmopCisJcmV0
dXJuIE5VTEw7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gR0RPTU9iamVjdENhY2hlOjpnZXRE
T01PYmplY3Qob2JqKSkKKwlyZXR1cm4gcmV0OworCisgICAgcmV0dXJuIEdET01PYmplY3RDYWNo
ZTo6cHV0RE9NT2JqZWN0KG9iaiwgV2ViS2l0Ojp3cmFwJHtpbnRlcmZhY2VOYW1lfShvYmopKTsK
K30KK0VPRgorCisgICAgICAgIHB1c2goQGNCb2R5LCAkaW1wbENvbnRlbnQpOworICAgIH0KKwor
ICAgIG15ICRpbXBsQ29udGVudCA9ICIiOworCisgICAgcHVzaChAY0JvZHksICJ9IC8qIG5hbWVz
cGFjZSBXZWJLaXQgKi9cbiIpOworCisgICAgIyBYWFggVE9ETyBwdXNoKEBjQm9keSwgInVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlO1xuXG4iKTsKKyAgICBwdXNoKEBjQm9keSwgImV4dGVybiBcIkNc
IiB7XG5cbiIpOworCisgICAgIyBBZGQgdGhlIGRlZmF1bHQgaGVhZGVyIHRlbXBsYXRlCisgICAg
QGhQcmVmaXggPSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBsYXRlKTsKKyAgICAjcHVzaChAaFBy
ZWZpeCwgIlxuIik7CisKKyAgICAjIEhlYWRlciBndWFyZAorICAgIG15ICRndWFyZCA9ICJfXyIg
LiAkY2xhc3NOYW1lIC4gIl9IX18iOworCisgICAgbXkgJGNsc0NhcHMgPSBzdWJzdHIoQ2xzVG9H
T2JqVHlwZSgkY2xhc3NOYW1lKSwgNSk7CisgICAgbXkgJGxjYXNlX2lmYWNlbmFtZSA9ICJnZG9t
XyIgLiBkZWNhbWVsaXplKCRpbnRlcmZhY2VOYW1lKTsKKyAgICAjbXkgJHBhcmVudENsc0NhcHMg
PSAiR0RPTV8iIC4gQ2xzVG9HT2JqVHlwZSgkcGFyZW50SW50ZXJmYWNlTmFtZSk7CisKKyAgICBA
aFByZWZpeEd1YXJkID0gPDwgIkVPRiI7CisjaWZuZGVmICRndWFyZAorI2RlZmluZSAkZ3VhcmQK
K0VPRgorCisgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CitHX0JFR0lOX0RFQ0xTCisKK0VP
RgorCisgICAgcHVzaChAaEJvZHlQcmUsICRpbXBsQ29udGVudCk7CisKKyAgICAkaW1wbENvbnRl
bnQgPSA8PCAiRU9GIjsKKworI2RlZmluZSBHRE9NX1RZUEVfJHtjbHNDYXBzfSAgICAgICAgICAg
ICgke2xjYXNlX2lmYWNlbmFtZX1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgR0RPTV8ke2Nsc0NhcHN9
KG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdET01f
VFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX0pKQorI2RlZmluZSBHRE9NXyR7Y2xzQ2Fwc31f
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgR0RPTV9U
WVBFXyR7Y2xzQ2Fwc30sICRjbGFzc05hbWUpQ2xhc3MpCisjZGVmaW5lIEdET01fSVNfJHtjbHND
YXBzfShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBHRE9N
X1RZUEVfJHtjbHNDYXBzfSkpCisjZGVmaW5lIEdET01fSVNfJHtjbHNDYXBzfV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBHRE9NX1RZUEVfJHtjbHNDYXBz
fSkpCisjZGVmaW5lIEdET01fJHtjbHNDYXBzfV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBHRE9NX1RZUEVfJHtjbHNDYXBzfSwgJHtjbGFzc05hbWV9
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfJHtjbGFzc05hbWV9UHJpdmF0ZSAke2NsYXNzTmFt
ZX1Qcml2YXRlOworCitzdHJ1Y3QgXyR7Y2xhc3NOYW1lfSB7CisgICAgJHtwYXJlbnRDbGFzc05h
bWV9IHBhcmVudF9pbnN0YW5jZTsKKyAgICAke2NsYXNzTmFtZX1Qcml2YXRlICpwcml2OworfTsK
Kworc3RydWN0IF8ke2NsYXNzTmFtZX1DbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKKyR7bGNhc2VfaWZhY2VuYW1lfV9nZXRfdHlw
ZSAodm9pZCk7CisKK0VPRgorCisgICAgcHVzaChAaEJvZHksICRpbXBsQ29udGVudCk7CisKKyAg
ICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKyNpZm5kZWYgJHtndWFyZH1fUFJPUF8KKyNkZWZp
bmUgJHtndWFyZH1fUFJPUF8KK0VPRgorCisgICAgcHVzaChAaEJvZHlQcm9wUHJlLCAkaW1wbENv
bnRlbnQpOworCisgICAgcHVzaChAaEJvZHlQcm9wLCAiR19CRUdJTl9ERUNMU1xuIik7CisKKyAg
ICAkaGRyUHJvcEluY2x1ZGV7ImdsaWItb2JqZWN0LmgifSA9IDE7CisgICAgJGhkclByb3BJbmNs
dWRleyJnZG9tLyR7cGFyZW50SGRyTmFtZX1Qcml2YXRlLmgifSA9IDE7CisgICAgJGhkclByb3BJ
bmNsdWRleyIke2ludGVyZmFjZU5hbWV9LmgifSA9IDE7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJn
ZG9tLyR7cGFyZW50SGRyTmFtZX0uaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyIke2ludGVy
ZmFjZU5hbWV9LmgifSA9IDE7CisKKyAgICAkaW1wbFR5cGVkZWZzeyIkY2xhc3NOYW1lIn0gPSAx
OworICAgICRpbXBsVHlwZWRlZnN7IiR7Y2xhc3NOYW1lfUNsYXNzIn0gPSAxOworCisgICAgJGlt
cGxDb250ZW50ID0gPDwgIkVPRiI7CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZ2xp
Yi1vYmplY3QuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRwcml2YXRlLmg+IAorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIiAvKiB5dWtr
OiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVkZSAiTm9kZS5oIiAvKiB5dWtr
OiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgi
IC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRlICJDYW52YXNQ
YXR0ZXJuLmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRl
ICJDYW52YXNHcmFkaWVudC5oIiAvKiB5dWtrOiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICov
CisjaW5jbHVkZSAiQ2FudmFzU3R5bGUuaCIgLyogeXVrazogVE9ETyAtIG1ha2UgdGhpcyBvcHRp
b25hbCAqLworI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIiAvKiB5dWtrOiBU
T0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVkZSA8Z2RvbS9HZG9tRE9NT2JqZWN0
UHJpdmF0ZS5oPiAvKiB5dWtrOiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVk
ZSAiJHtpbnRlcmZhY2VOYW1lfS5oIgorI2luY2x1ZGUgPGdkb20vJHtoZHJOYW1lfS5oPgorI2lu
Y2x1ZGUgPGdkb20vJHtoZHJOYW1lfVByaXZhdGUuaD4KKyNpbmNsdWRlIDxnZG9tLyR7aGRyTmFt
ZX1wcm9wcy5oPgorCisjaW5jbHVkZSAiZ2RvbS9Db252ZXJ0VG9HQ2hhclByaXZhdGUuaCIKKwor
I2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1
ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1J1bGUuaCIK
KyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKyNpbmNsdWRl
IDxnZG9tL0dkb21FdmVudC5oPgorCisKK0VPRgorCisgICAgcHVzaChAY0JvZHlQcml2LCAkaW1w
bENvbnRlbnQpOworCisgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CisKK0dfQkVHSU5fREVD
TFMKKworR19ERUZJTkVfVFlQRSgke2NsYXNzTmFtZX0sICR7bGNhc2VfaWZhY2VuYW1lfSwgJHtw
YXJlbnRHT2JqVHlwZX0pOworCitzdHJ1Y3QgXyR7Y2xhc3NOYW1lfVByaXZhdGUgeworICAgIFJl
ZlB0cjxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9PiBjb3JlT2JqZWN0OworfTsKKworR19FTkRf
REVDTFMKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyR7Y2xhc3NOYW1lfSAqCit3cmFwJHtpbnRl
cmZhY2VOYW1lfShQYXNzUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IHBycENvcmVP
YmplY3QpCit7CisgICAgUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IGNvcmVPYmpl
Y3QgPSBwcnBDb3JlT2JqZWN0OworCisgICAgJHtjbGFzc05hbWV9ICp3cmFwcGVyID0gR0RPTV8k
e2Nsc0NhcHN9KGdfb2JqZWN0X25ldyhHRE9NX1RZUEVfJHtjbHNDYXBzfSwgTlVMTCkpOworICAg
IEdkb21ET01PYmplY3RQcml2YXRlKiBwcml2ID0gR0RPTV9ET01fT0JKRUNUX0dFVF9QUklWQVRF
KEdET01fRE9NX09CSkVDVCh3cmFwcGVyKSk7CisKKyAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5h
bWV9ICpyYXdDb3JlT2JqZWN0ID0gY29yZU9iamVjdC5nZXQoKTsKKyAgICByYXdDb3JlT2JqZWN0
LT5yZWYoKTsKKyAgICBwcml2LT5jb3JlT2JqZWN0ID0gcmF3Q29yZU9iamVjdDsKKworICAgIHJl
dHVybiB3cmFwcGVyOworfQorCitXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICoKK2NvcmUoJHtj
bGFzc05hbWV9ICpyZXF1ZXN0KQoreworICAgIGlmIChyZXF1ZXN0ID09IE5VTEwpCisgICAgICAg
IHJldHVybiBOVUxMOworCisgICAgR2RvbURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBHRE9NX0RP
TV9PQkpFQ1RfR0VUX1BSSVZBVEUoR0RPTV9ET01fT0JKRUNUKHJlcXVlc3QpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqPihwcml2LT5jb3JlT2Jq
ZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0VPRgorICAgIHB1c2goQGNCb2R5
UHJpdiwgJGltcGxDb250ZW50KTsKKworICAgICMgUHJvcGVydGllcworICAgIG15ICRmdW5jdGlv
bk5hbWVQcmVmaXggPSAkbGNhc2VfaWZhY2VuYW1lOyAKKyAgU0tJUFBST1A6IGZvcmVhY2ggbXkg
JGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRwcm9w
X25hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15ICRwcm9wTmFt
ZSA9IGRlY2FtZWxpemUoJHByb3BfbmFtZSk7CisgICAgICAgIG15ICRwcm9wX3R5cGUgPSAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CisgICAgICAgIG15ICR0eXBlID0gR2V0R1R5cGUoJHBy
b3BfdHlwZSk7CisgICAgICAgIG15ICRmdW5jdGlvblNpZyA9ICIkY2xhc3NOYW1lICp0aGl6IjsK
KyAgICAgICAgCisgICAgICAgIG15ICRyZWZsZWN0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9OworICAgICAgICBteSAkcmVmbGVjdFVSTCA9
ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3RVUkwi
fTsKKworIyAgICAgICAgbXkgJGN1c3RvbSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9OworIworIyAgICAgICAgaWYgKCRwcm9wX25hbWUgbmUg
J3Jlc3BvbnNlVGV4dCcpIHsgIyBhbGxvdyBYTUxIdHRwUmVxdWVzdCByZXNwb25zZVRleHQKKyMg
ICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tR2V0dGVyIn0pIHsKKyMgICAgICAgICAgICAgICAgbmV4dCBTS0lQUFJPUDsKKyMg
ICAgICAgICAgICB9CisjICAgICAgICB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmgifSA9IDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRp
b24iOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
In0gPSAxIGlmICRwcm9wX3R5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOworCisgICAgICAg
ICMgc2tpcCBKYXZhU2NyaXB0Q2FsbEZyYW1lLnR5cGUKKyAgICAgICAgaWYgKCgkcHJvcF9uYW1l
IGVxICJ0eXBlIikgJiYgKCRpbnRlcmZhY2VOYW1lIGVxICJKYXZhU2NyaXB0Q2FsbEZyYW1lIikp
eworICAgICAgICAgICAgbmV4dCBTS0lQUFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
a2lwUHJvcFRlbXBvcmFyaWx5KCR0eXBlLCAkcHJvcF90eXBlKSkgeworICAgICAgICAgICAgbmV4
dCBTS0lQUFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIGFkZFByb3BJbmNIZHIoJHByb3BfdHlw
ZSk7CisKKyAgICAgICAgI3B1c2goQGhCb2R5UHJvcCwgIldFQktJVF9BUEkgJHR5cGVcbiRmdW5j
dGlvbk5hbWVQcmVmaXgiIC4gIl9wcm9wX2dldF8iIC4gIiRwcm9wTmFtZSAoJGZ1bmN0aW9uU2ln
KTtcblxuIik7CisKKyAgICAgICAgI3B1c2goQGhCb2R5UHJvcCwgIldFQktJVF9BUEkgdm9pZFxu
JGZ1bmN0aW9uTmFtZVByZWZpeCIgLiAiX3Byb3Bfc2V0XyIgLiAiJHByb3BOYW1lICgkZnVuY3Rp
b25TaWcsICR0eXBlIiAuICJ2YWx1ZSk7XG5cbiIpOworICAgIH0KKworICAgICMgUHJvcGVydGll
cworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworR19CRUdJTl9ERUNMUworCitlbnVtIHsK
KyAgICBCUk9XU0VSX0VWRU5ULAorICAgIExBU1RfU0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQg
ZXZlbnRfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK2VudW0geworICAgIFBST1Bf
MCwKK0VPRgorICAgIHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKKworICAgIG15IEB0
eHRfaW5zdGFsbF9wcm9wcyA9ICgpOworICAgIG15IEB0eHRfc2V0X3Byb3BzID0gKCk7CisgICAg
bXkgQHR4dF9nZXRfcHJvcHMgPSAoKTsKKworICAgIG15ICRwcml2X2ZuID0gR2V0UHJpdkZuKCRp
bnRlcmZhY2VOYW1lLCAke2xjYXNlX2lmYWNlbmFtZX0sICJnc2VsZiIsICJzZWxmIik7CisKKyAg
ICBteSAkdHh0X2dldF9wcm9wID0gPDwgIkVPRiI7CitzdGF0aWMgdm9pZCAke2xjYXNlX2lmYWNl
bmFtZX1fX2dldF9wcm9wZXJ0eV9mbihHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlICogdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgICAgJHtjbGFzc05hbWV9ICpzZWxmID0gR0RPTV8k
e2Nsc0NhcHN9KG9iamVjdCk7CisgICAgJHByaXZfZm4KKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsK
K0VPRgorICAgIHB1c2goQHR4dF9nZXRfcHJvcHMsICR0eHRfZ2V0X3Byb3ApOworCisgICAgbXkg
JHR4dF9zZXRfcHJvcCA9IDw8ICJFT0YiOworc3RhdGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9
X19zZXRfcHJvcGVydHlfZm4oR09iamVjdCAqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKyAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEdWYWx1ZSAqIHZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgR1BhcmFtU3BlYyAqIHBzcGVjKQoreworICAgICR7Y2xhc3NOYW1lfSAqc2VsZiA9IEdET01f
JHtjbHNDYXBzfShvYmplY3QpOworICAgICRwcml2X2ZuCisgICAgc3dpdGNoIChwcm9wX2lkKSB7
CitFT0YKKyAgICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAkdHh0X3NldF9wcm9wKTsKKyAgICAjIEl0
ZXJhdGUgb3ZlciB0aGUgaW50ZXJmYWNlIGF0dHJpYnV0ZXMgYW5kIGdlbmVyYXRlIGEgcHJvcGVy
dHkgZm9yCisgICAgIyBlYWNoIG9uZSBvZiB0aGVtLgorICBTS0lQRU5VTToKKyAgICBmb3JlYWNo
IG15ICRhdHRyaWJ1dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBteSAk
cHJvcF9uYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBteSAkc2V0
cHJvcF9uYW1lX2ZuID0gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHByb3BfbmFtZSk7Cisg
ICAgICAgIG15ICRnZXRwcm9wX25hbWVfZm4gPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgk
cHJvcF9uYW1lKTsKKworICAgICAgICBteSAkcHJvcE5hbWUgPSBkZWNhbWVsaXplKCRwcm9wX25h
bWUpOworICAgICAgICBteSAkcHJvcENhcHMgPSB1YygkcHJvcE5hbWUpOworICAgICAgICBteSAk
cHJvcF90eXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOworICAgICAgICBteSAkdHlw
ZSA9IEdldEdUeXBlKCRwcm9wX3R5cGUpOworICAgICAgICBteSAke3Byb3BFbnVtfSA9ICJQUk9Q
XyR7cHJvcENhcHN9IjsKKyAgICAgICAgbXkgJHtwcm9wX2d0eXBlfSA9IGRlY2FtZWxpemUoJHBy
b3BfdHlwZSk7CisgICAgICAgIGlmICgkcHJvcF9ndHlwZSBlcSAiZXZlbnRfdGFyZ2V0Iikgewor
ICAgICAgICAgICAgJHByb3BfZ3R5cGUgPSAibm9kZSI7CisgICAgICAgIH0KKyAgICAgICAgbXkg
JHtwcm9wR1R5cGV9ID0gdWMoJHByb3BfZ3R5cGUpOworICAgICAgICBteSAkbGNhc2VfZ3R5cGVu
YW1lID0gImdkb21fIiAuICRwcm9wX2d0eXBlOworCisgICAgICAgIG15ICRyZWZsZWN0ID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdCJ9OworICAg
ICAgICBteSAkcmVmbGVjdFVSTCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlJlZmxlY3RVUkwifTsKKyAgICAgICAgbXkgJGdldGFyZyA9ICIiOworICAgICAg
ICBteSAkc2V0YXJnID0gIiI7CisgICAgICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICIi
OworCisgICAgICAgIGlmICgkcmVmbGVjdCB8fCAkcmVmbGVjdFVSTCkgeworICAgICAgICAgICAg
JGltcGxJbmNsdWRlc3siSFRNTE5hbWVzLmgifSA9IDE7CisgICAgICAgICAgICAkY29udGVudEF0
dHJpYnV0ZU5hbWUgPSAoKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSBlcSAiMSIpID8gJHByb3BO
YW1lIDogKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKTsKKyAgICAgICAgICAgICRnZXRwcm9wX25h
bWVfZm4gPSAkcmVmbGVjdFVSTCA/ICJnZXRVUkxBdHRyaWJ1dGUiIDogImdldEF0dHJpYnV0ZSI7
CisgICAgICAgICAgICAkc2V0cHJvcF9uYW1lX2ZuID0gIkF0dHJpYnV0ZSI7CisgICAgICAgICAg
ICAkZ2V0YXJnID0gIldlYkNvcmU6OkhUTUxOYW1lczo6JHtjb250ZW50QXR0cmlidXRlTmFtZX1B
dHRyIjsKKyAgICAgICAgICAgICRzZXRhcmcgPSAiV2ViQ29yZTo6SFRNTE5hbWVzOjoke2NvbnRl
bnRBdHRyaWJ1dGVOYW1lfUF0dHIsICI7CisgICAgICAgIH0KKworIworIyAgICAgICAgbXkgJGN1
c3RvbSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bSJ9OworIworIyAgICAgICAgaWYgKCRwcm9wX25hbWUgbmUgJ3Jlc3BvbnNlVGV4dCcpIHsgIyBh
bGxvdyBYTUxIdHRwUmVxdWVzdCByZXNwb25zZVRleHQKKyMgICAgICAgICAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0dGVyIn0pIHsK
KyMgICAgICAgICAgICAgICAgbmV4dCBTS0lQRU5VTTsKKyMgICAgICAgICAgICB9CisjICAgICAg
ICB9CisKKyAgICAgICAgJGltcGxJbmNsdWRlc3siQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCJ9ID0gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7CisKKyAgICAgICAgIyBz
a2lwIEphdmFTY3JpcHRDYWxsRnJhbWUudHlwZQorICAgICAgICBpZiAoKCRwcm9wX25hbWUgZXEg
InR5cGUiKSAmJiAoJGludGVyZmFjZU5hbWUgZXEgIkphdmFTY3JpcHRDYWxsRnJhbWUiKSl7Cisg
ICAgICAgICAgICBuZXh0IFNLSVBFTlVNOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNraXBQ
cm9wVGVtcG9yYXJpbHkoJHR5cGUsICRwcm9wX3R5cGUpKSB7CisgICAgICAgICAgICBuZXh0IFNL
SVBFTlVNOworICAgICAgICB9CisKKyAgICAgICAgcHVzaChAY0JvZHlQcml2LCAiICAgICR7cHJv
cEVudW19LFxuIik7CisKKyAgICAgICAgbXkgJGd0eXBlID0gR2V0UHJvcEdUeXBlKCRwcm9wX3R5
cGUpOworICAgICAgICBteSAkZ3BhcmFtZmxhZyA9ICJHX1BBUkFNX1JFQURBQkxFIjsKKyAgICAg
ICAgbXkgJHdyaXRlYWJsZSA9ICRhdHRyaWJ1dGUtPnR5cGUgIX4gL15yZWFkb25seS87CisgICAg
ICAgIG15ICRjb25zdCA9ICJyZWFkLW9ubHkgIjsKKyAgICAgICAgaWYgKCRwcm9wX25hbWUgZXEg
J2xvY2F0aW9uJyAmJiAkaW50ZXJmYWNlTmFtZSBlcSAnRG9jdW1lbnQnKSB7CisgICAgICAgICAg
ICBuZXh0IFNLSVBFTlVNOworICAgICAgICB9CisgICAgICAgICNpZiAoJHdyaXRlYWJsZSAmJiAk
Y3VzdG9tKSB7CisgICAgICAgIGlmICgkd3JpdGVhYmxlKSB7CisgICAgICAgICAgICAkY29uc3Qg
PSAicmVhZC1vbmx5IChkdWUgdG8gY3VzdG9tIGZ1bmN0aW9ucyBuZWVkZWQgaW4gZ2RvbXdlYmtp
dCkiOworICAgICAgICB9CisgICAgICAgICMgaWYgKCR3cml0ZWFibGUgJiYgISRjdXN0b20pIHsK
KyAgICAgICAgaWYgKCR3cml0ZWFibGUpIHsKKyAgICAgICAgICAgICRncGFyYW1mbGFnID0gIkdf
UEFSQU1fUkVBRFdSSVRFIjsKKyAgICAgICAgICAgICRjb25zdCA9ICJyZWFkLXdyaXRlICI7Cisg
ICAgICAgIH0KKworICAgICAgICBteSAkX2d0eXBlID0gJGd0eXBlOworICAgICAgICBpZiAoJGd0
eXBlIGVxICJ1c2hvcnQiKSB7CisgICAgICAgICAgICAkX2d0eXBlID0gInVpbnQiOyAjIHl1ay4K
KyAgICAgICAgfQorICAgICAgICAkbmljayA9IGRlY2FtZWxpemUoIiR7aW50ZXJmYWNlTmFtZX1f
JHtwcm9wTmFtZX0iKTsKKyAgICAgICAgJGxvbmcgPSAiJHtjb25zdH0gJHt0eXBlfSAke2ludGVy
ZmFjZU5hbWV9LiR7cHJvcE5hbWV9IjsKKyAgICAgICAgbXkgJHR4dF9pbnN0YWxsX3Byb3AgPSA8
PCAiRU9GIjsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnX2tsYXNzLCAk
e3Byb3BFbnVtfSwKKyAgICAgICAgICAgIGdfcGFyYW1fc3BlY18ke19ndHlwZX0gKCIke3Byb3BO
YW1lfSIsIC8qIG5hbWUgKi8KKyAgICAgICAgICAgICAgICAiJG5pY2siLCAvKiBzaG9ydCBkZXNj
cmlwdGlvbiAqLworICAgICAgICAgICAgICAgICIkbG9uZyIsIC8qIGxvbmdlciAtIGNvdWxkIGRv
IHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworRU9GCisgICAgICAgIHB1c2goQHR4
dF9pbnN0YWxsX3Byb3BzLCAkdHh0X2luc3RhbGxfcHJvcCk7CisgICAgICAgICR0eHRfaW5zdGFs
bF9wcm9wID0gIi8qIFRPRE8hICRndHlwZSAqL1xuIjsKKworICAgICAgICBpZiAoJHdyaXRlYWJs
ZSkgeworICAgICAgICAgICAgbXkgJG9rID0gMDsKKyAgICAgICAgICAgIG15ICRjb252ZXJ0X2Zu
ID0gIiI7CisKKyAgICAgICAgICAgIGlmICgkZ3R5cGUgZXEgInN0cmluZyIpIHsKKyAgICAgICAg
ICAgICAgICAkY29udmVydF9mbiA9ICJXZWJDb3JlOjpTdHJpbmc6OmZyb21VVEY4IjsKKyAgICAg
ICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYgKCRn
dHlwZSBlcSAiYm9vbGVhbiIpIHsKKyAgICAgICAgICAgICAgICBpZiAoJHtpbnRlcmZhY2VOYW1l
fSBuZSAiRE9NV2luZG93IikgeyAjWFhYIFRPRE86IHNraXAgInB1dERpcmVjdCIgc3R1ZmYgLSBu
byBpZGVhIHdoYXQgaXQncyBhYm91dCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgJG9rID0gMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImZsb2F0
IikgeworICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5
cGUgZXEgImRvdWJsZSIpIHsKKyAgICAgICAgICAgICAgICBpZiAoJHtpbnRlcmZhY2VOYW1lfSBu
ZSAiRE9NV2luZG93IikgeyAjWFhYIFRPRE86IHNraXAgInB1dERpcmVjdCIgc3R1ZmYgLSBubyBp
ZGVhIHdoYXQgaXQncyBhYm91dCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgInVpbnQ2NCIp
IHsKKyAgICAgICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgfSBlbHNpZiAoJGd0eXBl
IGVxICJ1bG9uZyIpIHsKKyAgICAgICAgICAgICAgICBpZiAoJHtpbnRlcmZhY2VOYW1lfSBuZSAi
RE9NV2luZG93IikgeyAjWFhYIFRPRE86IHNraXAgInB1dERpcmVjdCIgc3R1ZmYgLSBubyBpZGVh
IHdoYXQgaXQncyBhYm91dCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImxvbmciKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCR7aW50ZXJmYWNlTmFtZX0gbmUgIkRPTVdpbmRvdyIpIHsgI1hY
WCBUT0RPOiBza2lwICJwdXREaXJlY3QiIHN0dWZmIC0gbm8gaWRlYSB3aGF0IGl0J3MgYWJvdXQg
eWV0CisgICAgICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1aW50IikgeworICAgICAgICAgICAgICAgICRv
ayA9IDE7CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgInVzaG9ydCIpIHsKKyAgICAg
ICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1Y2hh
ciIpIHsKKyAgICAgICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgfSBlbHNpZiAoJGd0
eXBlIGVxICJjaGFyIikgeworICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAjIFhYWCBUT0RPIC0gc2tpcCBMb2NhdGlvbgorICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2VOYW1lIGVxICJMb2NhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICAkb2sgPSAw
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJG9rKSB7CisgICAgICAgICAgICAg
ICAgcHVzaChAdHh0X3NldF9wcm9wcywgIiAgICBjYXNlICR7cHJvcEVudW19OlxuICAgIHtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICIgICAgICAgIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIikgaWYgQHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRp
b25zfTsKKyAgICAgICAgICAgICAgICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAiICAgICAgICBnc2Vs
Zi0+c2V0JHtzZXRwcm9wX25hbWVfZm59KCR7c2V0YXJnfSR7Y29udmVydF9mbn0oZ192YWx1ZV9n
ZXRfJGd0eXBlICh2YWx1ZSkpIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEB0eHRfc2V0X3By
b3BzLCAiLCBlYyIpIGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAg
ICAgICAgICAgcHVzaChAdHh0X3NldF9wcm9wcywgIik7XG4iKTsKKworICAgICAgICAgICAgICAg
IHB1c2goQHR4dF9zZXRfcHJvcHMsICIgICAgICAgIGJyZWFrO1xuICAgIH1cbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHVzaChAdHh0X2dldF9wcm9wcywgIiAgIGNh
c2UgJHtwcm9wRW51bX06XG4gICAge1xuIik7CisKKyAgICAgICAgbXkgJGV4Y2VwdGlvbiA9ICIi
OworICAgICAgICBpZiAoQHskYXR0cmlidXRlLT5nZXR0ZXJFeGNlcHRpb25zfSkgeworICAgICAg
ICAgICAgJGV4Y2VwdGlvbiA9ICJlYyI7CisgICAgICAgICAgICBwdXNoKEB0eHRfZ2V0X3Byb3Bz
LCAiICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworICAgICAgICB9
CisKKyAgICAgICAgbXkgJGNvbnZlcnRfZm4gPSAiIjsKKyAgICAgICAgbXkgJHBvc3RfY29udmVy
dF9mbiA9ICIiOworICAgICAgICBteSAkZG9uZSA9IDA7CisgICAgICAgIGlmICgkZ3R5cGUgZXEg
InN0cmluZyIpIHsKKyAgICAgICAgICAgIHB1c2goQHR4dF9nZXRfcHJvcHMsICIgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcgKHZhbHVlLCBjb3B5QXNHY2hhcihnc2VsZi0+JHtnZXRwcm9wX25h
bWVfZm59KCR7Z2V0YXJnfSR7ZXhjZXB0aW9ufSkpKTtcbiIpOworICAgICAgICAgICAgJGRvbmUg
PSAxOworICAgICAgICB9CisgICAgICAgIGVsc2lmICgkZ3R5cGUgZXEgIm9iamVjdCIpIHsKKyAg
ICAgICAgICAgIG15ICRkb21vYmpUeXBlID0gIkdET00iLiRwcm9wX3R5cGU7CisKKyAgICAgICAg
ICAgICR0eHRfZ2V0X3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJDb3Jl
Ojoke3Byb3BfdHlwZX0+IHB0ciA9IGdzZWxmLT4ke2dldHByb3BfbmFtZV9mbn0oJHtnZXRhcmd9
JHtleGNlcHRpb259KTsKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgV2ViS2l0
Ojp0b0dET00ocHRyLmdldCgpKSk7CitFT0YKKyAgICAgICAgICAgIHB1c2goQHR4dF9nZXRfcHJv
cHMsICR0eHRfZ2V0X3Byb3ApOworCisgICAgICAgICAgICAkZG9uZSA9IDE7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoISRkb25lKSB7CisgICAgICAgICAgICBwdXNoKEB0eHRfZ2V0X3Byb3Bz
LCAiICAgICAgICBnX3ZhbHVlX3NldF8kX2d0eXBlICh2YWx1ZSwgJHtjb252ZXJ0X2ZufWdzZWxm
LT4ke2dldHByb3BfbmFtZV9mbn0oJHtnZXRhcmd9JHtleGNlcHRpb259KSR7cG9zdF9jb252ZXJ0
X2ZufSk7XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1c2goQHR4dF9nZXRfcHJvcHMsICIg
ICAgICAgIGJyZWFrO1xuICAgIH1cbiIpOworCisgICAgICAgICMgaXMgdGhpcyBfZW50aXJlbHlf
IG5lY2Vzc2FyeT8/PworICAgICAgICAjIGNhbiBpdCBiZSBkb25lIHdpdGggZ2VuZXJpYyBnX3Bh
cmFtX3NwZWNfZ3R5cGUKKyAgICAgICAgIyBhbmQgZ2V0dGluZyBhIGZldyB0aGluZ3MsIGlnbm9y
aW5nIHRoZSBtaW4tbWF4IGZvciBleGFtcGxlPworICAgICAgICBpZiAoJGd0eXBlIGVxICJpbnQi
KSB7CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAg
ICAgICAgIEdfTUlOSU5ULCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAgR19NQVhJ
TlQsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitF
T0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJib29sZWFuIikgeworICAgICAgICAgICAg
JHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBGQUxTRSwgLyog
ZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiZmxvYXQiKSB7Cisg
ICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAgICAgICAg
IEdfTUlORkxPQVQsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWEZMT0FU
LCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9G
CisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiZG91YmxlIikgeworICAgICAgICAgICAgJHR4
dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBHX01JTkRPVUJMRSwg
ICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYRE9VQkxFLCAvKiBtYXggKi8K
KyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0g
ZWxzaWYgKCRndHlwZSBlcSAidWludDY0IikgeworICAgICAgICAgICAgJHR4dF9pbnN0YWxsX3By
b3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisgICAg
ICAgICAgICAgICAgR19NQVhVSU5UNjQsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAg
ICAgICAvKiBkZWZhdWx0ICovCitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1bG9u
ZyIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAg
ICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYVUxPTkcs
IC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitFT0YK
KyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJsb25nIikgeworICAgICAgICAgICAgJHR4dF9p
bnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBHX01JTkxPTkcsICAgICAg
ICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWExPTkcsIC8qIG1heCAqLworICAgICAg
ICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitFT0YKKyAgICAgICAgfSBlbHNpZiAo
JGd0eXBlIGVxICJ1aW50IikgeworICAgICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAi
RU9GIjsKKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAg
ICAgR19NQVhVSU5ULCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVm
YXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidXNob3J0IikgeworICAg
ICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICAw
LCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAgR19NQVhVSU5UMTYsIC8qIG1heCAq
LworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCitFT0YKKyAgICAgICAg
fSBlbHNpZiAoJGd0eXBlIGVxICJ1Y2hhciIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9w
cm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgR19NSU5JTlQ4LCAgICAgICAgLyogbWlu
ICovCisgICAgICAgICAgICAgICAgR19NQVhJTlQ4LCAvKiBtYXggKi8KKyAgICAgICAgICAgICAg
ICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBl
cSAiY2hhciIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7Cisg
ICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFY
VUlOVDgsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICov
CitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJzdHJpbmciKSB7CisgICAgICAgICAg
ICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAgICAgICAgICIiLCAvKiBk
ZWZhdWx0ICovCitFT0YKKyAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJvYmplY3QiKSB7Cisg
ICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAgICAgICAg
IEdET01fVFlQRV8ke3Byb3BHVHlwZX0sIC8qIGdvYmplY3QgdHlwZSAqLworRU9GCisgICAgICAg
IH0KKyAgICAgICAgcHVzaChAdHh0X2luc3RhbGxfcHJvcHMsICR0eHRfaW5zdGFsbF9wcm9wKTsK
KyAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICAo
R1BhcmFtRmxhZ3MpJHtncGFyYW1mbGFnfSkpOworCitFT0YKKyAgICAgICAgcHVzaChAdHh0X2lu
c3RhbGxfcHJvcHMsICR0eHRfaW5zdGFsbF9wcm9wKTsKKyAgICB9CisKKyAgICBwdXNoKEBjQm9k
eVByaXYsICJ9O1xuXG4iKTsKKworCisgICAgJHR4dF9nZXRfcHJvcCA9IDw8ICJFT0YiOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorRU9GCisgICAg
cHVzaChAdHh0X2dldF9wcm9wcywgJHR4dF9nZXRfcHJvcCk7CisKKyAgICAkdHh0X3NldF9wcm9w
ID0gPDwgIkVPRiI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CitFT0YKKyAgICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAkdHh0X3NldF9wcm9wKTsKKwor
ICAgIG15ICR0eHRfc2V0X2dldF9wcm9wcyA9IDw8ICJFT0YiOworICAgIGNhc2UgUFJPUF9BR0U6
CisgICAgICAgIHNlbGYtPmFnZSA9IGdfdmFsdWVfZ2V0X2ludCAodmFsdWUpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgUFJPUF9BR0U6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgc2VsZi0+YWdlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKyAgIGdfdmFsdWVfaW5p
dCgmcGFyYW1zWzBdLCBHX1RZUEVfRlJPTV9JTlNUQU5DRShvYmplY3QpKTsKKyAgICAgICAgKyAg
IGdfdmFsdWVfc2V0X2luc3RhbmNlKCZwYXJhbXNbMF0sIChncG9pbnRlcilvYmplY3QpOworCitF
T0YKKworICAgICMgVE9ETzogd29yayBvdXQgaWYgaXQncyBhcHByb3ByaWF0ZSB0byBzcGxpdCB0
aGlzIGludG8gbWFueSBkaWZmZXJlbnQKKyAgICAjIHNpZ25hbHMgZS5nLiAiY2xpY2siIGV0Yy4K
KyAgICBteSAkdHh0X2luc3RhbGxfc2lnbmFscyA9ICIiOworCisgICAgaWYgKCRpbnRlcmZhY2VO
YW1lIGVxICJET01XaW5kb3ciIG9yCisgICAgICAgICRpbnRlcmZhY2VOYW1lIGVxICJOb2RlIiBv
cgorICAgICAgICAkaW50ZXJmYWNlTmFtZSBlcSAiWE1MSHR0cFJlcXVlc3QiKSB7CisgICAgICAg
ICR0eHRfaW5zdGFsbF9zaWduYWxzID0gPDwgIkVPRiI7CisgICAgZXZlbnRfc2lnbmFsc1tCUk9X
U0VSX0VWRU5UXSA9IGdfc2lnbmFsX25ldygiYnJvd3Nlci1ldmVudCIsCisgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKHJlcXVlc3RDbGFzcyksCisgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9ERVRBSUxFRCAgKSwKKyAgICAgICAgMCwKKyAg
ICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9f
T0JKRUNUX0JPT0xFQU4sCisgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICBHRE9NX1RZ
UEVfRVZFTlQsIEdfVFlQRV9CT09MRUFOKTsKK0VPRgorICAgIH0KKworICAgICRpbXBsQ29udGVu
dCA9IDw8ICJFT0YiOworCitzdGF0aWMgdm9pZCAke2xjYXNlX2lmYWNlbmFtZX1fZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIEdkb21ET01PYmplY3QqIGRvbV9vYmplY3QgPSBHRE9N
X0RPTV9PQkpFQ1Qob2JqZWN0KTsKKyAgICBHZG9tRE9NT2JqZWN0UHJpdmF0ZSogcHJpdiA9IGRv
bV9vYmplY3QtPnByaXY7CisKKyAgICBpZiAocHJpdi0+Y29yZU9iamVjdCAhPSAwKSB7CisJV2Vi
S2l0OjpHRE9NT2JqZWN0Q2FjaGU6OmZvcmdldERPTU9iamVjdChwcml2LT5jb3JlT2JqZWN0KTsK
KwlzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICo+KHByaXYtPmNvcmVPYmpl
Y3QpLT5kZXJlZigpOworCXByaXYtPmNvcmVPYmplY3QgPSAwOworICAgIH0KKworICAgIEdfT0JK
RUNUX0NMQVNTKCR7bGNhc2VfaWZhY2VuYW1lfV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitAdHh0X3NldF9wcm9wcworCitAdHh0X2dldF9wcm9wcworCitzdGF0aWMgdm9p
ZCAke2xjYXNlX2lmYWNlbmFtZX1fY2xhc3NfaW5pdCgke2NsYXNzTmFtZX1DbGFzcyogcmVxdWVz
dENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyAqZ19rbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChy
ZXF1ZXN0Q2xhc3MpOworICAgIGdfa2xhc3MtPmZpbmFsaXplID0gJHtsY2FzZV9pZmFjZW5hbWV9
X2ZpbmFsaXplOworICAgIGdfa2xhc3MtPnNldF9wcm9wZXJ0eSA9ICR7bGNhc2VfaWZhY2VuYW1l
fV9fc2V0X3Byb3BlcnR5X2ZuOworICAgIGdfa2xhc3MtPmdldF9wcm9wZXJ0eSA9ICR7bGNhc2Vf
aWZhY2VuYW1lfV9fZ2V0X3Byb3BlcnR5X2ZuOworCitAdHh0X2luc3RhbGxfcHJvcHMKKworJHR4
dF9pbnN0YWxsX3NpZ25hbHMKK30KKworc3RhdGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9X2lu
aXQoJHtjbGFzc05hbWV9KiByZXF1ZXN0KQoreworfQorCitFT0YKKyAgICBwdXNoKEBjQm9keVBy
aXYsICRpbXBsQ29udGVudCk7CisKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dkb20ke2ludGVy
ZmFjZU5hbWV9UHJpdmF0ZS5oIn0gPSAxOworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOwor
CisjaWZuZGVmICR7Z3VhcmR9X1BSSVZfCisjZGVmaW5lICR7Z3VhcmR9X1BSSVZfCisjaW5jbHVk
ZSAiZ2xpYi1vYmplY3QuaCIKKyNpbmNsdWRlICJnZG9tLyR7cGFyZW50SGRyTmFtZX0uaCIKKyNp
bmNsdWRlICIke2ludGVyZmFjZU5hbWV9LmgiCitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRp
bXBsQ29udGVudCk7CisKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKy8vfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK3R5cGVkZWYgc3RydWN0IF8ke2NsYXNzTmFtZX0gJHtjbGFzc05hbWV9
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAke2NsYXNzTmFtZX0gKgorICAgIHdyYXAke2lu
dGVyZmFjZU5hbWV9KFBhc3NSZWZQdHI8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfT4gcHJwQ29y
ZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICoKKyAgICBjb3JlKCR7
Y2xhc3NOYW1lfSAqcmVxdWVzdCk7CitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBsQ29u
dGVudCk7CisKKyAgICBpZiAoICFVc2VzTWFudWFsVG9HRE9NSW1wbGVtZW50YXRpb24oJGludGVy
ZmFjZU5hbWUpKSB7CisgICAgICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworCisgICAgZ3Bv
aW50ZXIKKyAgICB0b0dET00oV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogbm9kZSk7CitFT0YK
KyAgICAgICAgcHVzaChAaEJvZHlQcml2LCAkaW1wbENvbnRlbnQpOworICAgIH0KKworICAgICRp
bXBsQ29udGVudCA9IDw8ICJFT0YiOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiAke2d1YXJkfV9QUklWXyAqLworCitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBsQ29u
dGVudCk7CisKKyAgICAjaWYgKCRwYXJhbUlETFR5cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAgICAj
IFhYWCA/Pz8/IHd0Zj8/IDopIGNvcGllZCBmcm9tIGpzZ2VuZXJhdG9yLgorICAgICMgICAgJGlt
cGxJbmNsdWRlc3siSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCJ9ID0gMTsKKyAgICAjfSBl
bHNlIHsKKyAgICAjICAgICRpbXBsSW5jbHVkZXN7JGluY2x1ZGVIZHJ9ID0gMTsKKyAgICAjfQor
ICAgICRpbXBsSW5jbHVkZXN7IiR7aW50ZXJmYWNlTmFtZX0uaCJ9ID0gMTsKKyAgICAkaW1wbElu
Y2x1ZGVzeyJnZG9tL0dkb21ET01PYmplY3RQcml2YXRlLmgifSA9IDE7CisKKyAgTE9PUDoKKyAg
ICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUtPmZ1bmN0aW9uc30pIHsKKwkjbXkg
JGZ1bmN0aW9uTmFtZSA9IGRlY2FtZWxpemUoJGNsYXNzTmFtZSkgLiAiXyIgLiBkZWNhbWVsaXpl
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lKTsKKwlteSAkZm5fc2lnX25hbWUgPSAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZTsKKwlteSAkZm5fc2lnX3R5cGUgPSAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+dHlwZTsKKwlteSAkZnVuY3Rpb25OYW1lID0gImdkb21fIiAuIGRlY2FtZWxpemUoJGlu
dGVyZmFjZU5hbWUpIC4gIl8iIC4gZGVjYW1lbGl6ZSgkZm5fc2lnX25hbWUpOworCW15ICRyZXR1
cm5UeXBlID0gR2V0R1R5cGUoJGZuX3NpZ190eXBlKTsKKwlteSAkcmV0X2lzX2Nsc190eXBlID0g
SXNHRE9NQ2xhc3NUeXBlKCRmbl9zaWdfdHlwZSk7CisKKwlteSAkZnVuY3Rpb25TaWcgPSAiJGNs
YXNzTmFtZSAqdGhpeiI7CisKKwlteSAkY2FsbF9pbXBsX3BhcmFtcyA9ICIiOworCW15ICRnZG9t
X2ZuX3ByZWZpeCA9ICJnZG9tXyIgLiBkZWNhbWVsaXplKCRmbl9zaWdfdHlwZSk7CisKKwlpZiAo
JGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X3Byb3BlcnR5
IikgeworCSAgICAjIHJlc2VydmVkIG5hbWUgY2xhc2ggaW4gZ2xpYiEKKwkgICAgJGZ1bmN0aW9u
TmFtZSA9ICJnZG9tX2Nzc19zdHlsZV9kZWNsYXJhdGlvbl9zZXRfY3NzX3Byb3BlcnR5IjsKKwl9
CisJIyBYWFggc2tpcCBDb21wYXJlSG93IGZ1bmN0aW9ucyBmb3Igbm93CisJaWYgKCRmdW5jdGlv
bk5hbWUgZXEgImdkb21fcmFuZ2VfY29tcGFyZV9ib3VuZGFyeV9wb2ludHMiKSB7CisJICAgIHB1
c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogc2tpcHBpbmcgQ29tcGFyZUhvdyBmdW5jdGlvbiAk
e2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAgIHB1c2goQGNCb2R5LCAiXG4vKiBYWFggVE9E
Tzogc2tpcHBpbmcgQ29tcGFyZUhvdyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7
CisJICAgIG5leHQgTE9PUDsKKwl9CisKKwkjIFhYWCBza2lwIFNWR0RvY3VtZW50IGZ1bmN0aW9u
cyBmb3Igbm93CisJaWYgKCRyZXR1cm5UeXBlIGVxICJHZG9tU1ZHRG9jdW1lbnQgKiIpIHsKKwkg
ICAgcHVzaChAaEJvZHksICJcbi8qIFhYWCBUT0RPOiBza2lwcGluZyBTVkdEb2N1bWVudCBmdW5j
dGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAgIHB1c2goQGNCb2R5LCAiXG4vKiBY
WFggVE9ETzogc2tpcHBpbmcgU1ZHRG9jdW1lbnQgZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICov
XG5cbiIpOworCSAgICBuZXh0IExPT1A7CisJfQorCisJIyBYWFggZG9uJ3Qgc2tpcCBzb21lIGN1
c3RvbSBmdW5jdGlvbnMgZm9yIG5vdworCW15ICRpc19jdXN0b21fZm4gPSAkZnVuY3Rpb24tPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbSJ9OworCWlmICgkZnVuY3Rpb25O
YW1lIGVxICJnZG9tX2h0bWxfY29sbGVjdGlvbl9pdGVtIiB8fAorCSAgICAkZnVuY3Rpb25OYW1l
IGVxICJnZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtIiB8fAorCSAgICAkZnVuY3Rpb25O
YW1lIGVxICJnZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlIiB8fAor
CSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1Ym1pdCIgfHwK
KwkgICAgJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxfaHR0cF9yZXF1ZXN0X29wZW4iIHx8CisJ
ICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBfcmVxdWVzdF9zZXRfcmVxdWVzdF9o
ZWFkZXIiIHx8CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBfcmVxdWVzdF9z
ZW5kIiB8fAorCSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX3htbF9odHRwX3JlcXVlc3RfZ2V0
X3Jlc3BvbnNlX2hlYWRlciIgfHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxfaHR0
cF9yZXF1ZXN0X292ZXJyaWRlX21pbWVfdHlwZSIgfHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBlcSAi
Z2RvbV94bWxfaHR0cF9yZXF1ZXN0X2Rpc3BhdGNoX2V2ZW50IiB8fAorCSAgICAkZnVuY3Rpb25O
YW1lIGVxICJnZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZSIpIHsKKwkgICAgJGlzX2N1c3RvbV9m
biA9IDA7CisJfQorCSMgWFhYIHNraXAgc29tZSBjdXN0b20gZnVuY3Rpb25zIGZvciBub3cKKwlp
ZiAoJGlzX2N1c3RvbV9mbiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX2l0
ZXJhdG9yX25leHRfbm9kZSIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9h
cHBlbmRfY2hpbGQiICYmIAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX25vZGVfcmVtb3Zl
X2NoaWxkIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX2luc2VydF9iZWZv
cmUiICYmCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9yZXBsYWNlX2NoaWxkIiAm
JgorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX3RyZWVfd2Fsa2VyX3BhcmVudF9ub2RlIiAm
JiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtlcl9maXJzdF9jaGlsZCIg
JiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfbGFzdF9jaGlsZCIg
JiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfcHJldmlvdXNfc2li
bGluZyIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfbmV4dF9z
aWJsaW5nIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtlcl9wcmV2
aW91c19ub2RlIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtlcl9u
ZXh0X25vZGUiICYmIAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX25vZGVfaXRlcmF0b3Jf
cHJldmlvdXNfbm9kZSIpIHsKKwkgICAgcHVzaChAaEJvZHksICJcbi8qIFhYWCBUT0RPOiBjdXN0
b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBwdXNoKEBjQm9keSwg
IlxuLyogWFhYIFRPRE86IGN1c3RvbSBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7
CisJICAgIG5leHQgTE9PUDsKKwl9CisKKwlmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24t
PnBhcmFtZXRlcnN9KSB7CisJICAgIG15ICRwYXJhbUlETFR5cGUgPSAkcGFyYW0tPnR5cGU7CisJ
ICAgIGFkZEluY0JvZHkoJHBhcmFtSURMVHlwZSk7CisJICAgIGFkZEluY0hkcigkcGFyYW1JRExU
eXBlKTsKKwkgICAgbXkgJHBhcmFtVHlwZSA9IEdldEdUeXBlKCRwYXJhbUlETFR5cGUpOworCSAg
ICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0tPm5hbWUpOworCisJICAgICRmdW5j
dGlvblNpZyAuPSAiLCAkcGFyYW1UeXBlICRwYXJhbU5hbWUiOworCisJICAgIG15ICRwYXJhbV9p
c19jbHNfdHlwZSA9IElzR0RPTUNsYXNzVHlwZSgkcGFyYW1JRExUeXBlKTsKKwkgICAgaWYgKCRw
YXJhbV9pc19jbHNfdHlwZSkgeworCQlpZiAoJHBhcmFtSURMVHlwZSBuZSAiRE9NT2JqZWN0IiAm
JgorCQkgICAgJHBhcmFtSURMVHlwZSBuZSAiRXZlbnRUYXJnZXQiKSB7CisJCSAgICAkaW1wbElu
Y2x1ZGVzeyJnZG9tL0dkb20ke3BhcmFtSURMVHlwZX1Qcml2YXRlLmgifSA9IDE7CisJCSAgICAj
IHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dCBvbmUgb2YgdGhlCisJCSAgICAjIGF1
dG8tZ2VuZXJhdGVkIGZpbGVzIG5lZWRlZCBpdCBzby4uLi4KKwkJICAgICRpbXBsSW5jbHVkZXN7
IiR7cGFyYW1JRExUeXBlfS5oIn0gPSAxOworCQl9CisJICAgIH0KKwkgICAgaWYgKCRwYXJhbV9p
c19jbHNfdHlwZSB8fCAoJHBhcmFtSURMVHlwZSBlcSAiRE9NU3RyaW5nIikpIHsKKwkJJHBhcmFt
TmFtZSA9ICJfZ18iIC4gJHBhcmFtTmFtZTsKKwkgICAgfQorCSAgICBpZiAoJGNhbGxfaW1wbF9w
YXJhbXMpIHsKKwkJJGNhbGxfaW1wbF9wYXJhbXMgLj0gIiwgJHBhcmFtTmFtZSI7CisJICAgIH0g
ZWxzZSB7CisJCSRjYWxsX2ltcGxfcGFyYW1zID0gIiRwYXJhbU5hbWUiOworCSAgICB9CisJfQor
CisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisKKwkgICAgaWYgKCRjYWxsX2ltcGxfcGFyYW1zKSB7
CisJCSRjYWxsX2ltcGxfcGFyYW1zIC49ICIsICZjYWxsU3RhY2siOworCSAgICB9IGVsc2Ugewor
CQkkY2FsbF9pbXBsX3BhcmFtcyA9ICImY2FsbFN0YWNrIjsKKwkgICAgfQorICAgICAgICAkaW1w
bEluY2x1ZGVzeyJTY3JpcHRDYWxsU3RhY2suaCJ9ID0gMTsKKyAgICB9CisKKwlhZGRJbmNIZHIo
JGZuX3NpZ190eXBlKTsKKwlpZiAoJHJldF9pc19jbHNfdHlwZSkgeworCSAgICAjICAgICRpbXBs
VHlwZWRlZnN7Ikdkb20ke2ZuX3NpZ190eXBlfSJ9ID0gMTsKKwl9CisKKwlpZiAoJHJldHVyblR5
cGUgbmUgInZvaWQiKSB7CisKKwkgICAgaWYgKCRyZXRfaXNfY2xzX3R5cGUpIHsKKwkJaWYgKCRm
bl9zaWdfdHlwZSBlcSAiRE9NT2JqZWN0IikgeworCQkgICAgIyBYWFggPz8/PyB3dGY/PyA6KSBj
b3BpZWQgZnJvbSBqc2dlbmVyYXRvci4KKwkJICAgICRpbXBsSW5jbHVkZXN7Imdkb20vR2RvbUNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIn0gPSAxOworCQl9IGVsc2UgeworCQkgICAgI2lmICgk
Zm5fc2lnX3R5cGUgbmUgIkV2ZW50VGFyZ2V0IikgeworCQkJIyRpbXBsSW5jbHVkZXN7Imdkb20v
R2RvbSR7Zm5fc2lnX3R5cGV9UHJpdmF0ZS5oIn0gPSAxOworCQkJIyRpbXBsSW5jbHVkZXN7Imdk
b20vR2RvbSR7Zm5fc2lnX3R5cGV9LmgifSA9IDE7CisJCSAgICAjfQorCQkgICAgJGltcGxJbmNs
dWRlc3siJHtmbl9zaWdfdHlwZX0uaCJ9ID0gMTsKKyAgICAgICAgICAgICRjQm9keUdET017Imdw
b2ludGVyIHRvR0RPTShXZWJDb3JlOjoke2ZuX3NpZ190eXBlfSogbm9kZSk7In0gPSAxOworCQl9
CisJICAgIH0KKwl9CisKKwkjIFhYWCBza2lwIGN1c3RvbSBmdW5jdGlvbnMgZm9yIG5vdworCSMg
YnV0IHNraXAgZnJvbSBoZXJlIHRvIGFsbG93IHNvbWUgaGVhZGVycyB0byBiZSBjcmVhdGVkCisJ
IyBmb3IgYSBzdWNjZXNzZnVsIGNvbXBpbGUuCisJaWYgKCRpc19jdXN0b21fZm4gJiYKKwkgICAg
JGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX3JlbW92ZV9jaGlsZCIgJiYgCisJICAgICRmdW5j
dGlvbk5hbWUgbmUgImdkb21fbm9kZV9pbnNlcnRfYmVmb3JlIiAmJgorCSAgICAkZnVuY3Rpb25O
YW1lIG5lICJnZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgJiYKKwkgICAgJGZ1bmN0aW9uTmFtZSBu
ZSAiZ2RvbV9ub2RlX2FwcGVuZF9jaGlsZCIpIHsKKwkgICAgcHVzaChAaEJvZHksICJcbi8qIFhY
WCBUT0RPOiBjdXN0b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBw
dXNoKEBjQm9keSwgIlxuLyogWFhYIFRPRE86IGN1c3RvbSBmdW5jdGlvbiAke2Z1bmN0aW9uTmFt
ZX0gKi9cblxuIik7CisJICAgIG5leHQgTE9PUDsKKwl9CisKKyAgICBpZiAoJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0p
IHsKKyAgICAgICAgIyBYWFggc2tpcCBjdXN0b20gYXJndW1lbnQgaGFuZGxpbmcgLSBjdXJyZW50
bHkgaW4gQ29uc29sZS5pZGwKKyAgICAgICAgIyByZXF1aXJlcyBFeGVjU3RhdGUgd2hpY2ggaGFz
IGJlZW4gcmVtb3ZlZCB1bnRpbCAjMTY0MDEgaXMgYWNjZXB0ZWQuCisJICAgIHB1c2goQGhCb2R5
LCAiXG4vKiBYWFggVE9ETzogY3VzdG9tIGFyZ3VtZW50IGhhbmRsaW5nICR7ZnVuY3Rpb25OYW1l
fSAqL1xuXG4iKTsKKwkgICAgcHVzaChAY0JvZHksICJcbi8qIFhYWCBUT0RPOiBjdXN0b20gYXJn
dW1lbnQgaGFuZGxpbmcgJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBuZXh0IExPT1A7
CisgICAgfQorCW15ICRfcmV0dXJuVHlwZSA9ICRyZXR1cm5UeXBlOworCW15ICRkb21vYmpUeXBl
ID0gIkdET00iLiRmbl9zaWdfdHlwZTsKKwlpZiAoJGZuX3NpZ190eXBlIGVxICdET01PYmplY3Qn
ICYmCisJICAgICRmdW5jdGlvbk5hbWUgZXEgJ2dkb21faHRtbF9jYW52YXNfZWxlbWVudF9nZXRf
Y29udGV4dCcpIHsKKwkgICAgIyBYWFggSEFDSyEKKwkgICAgJF9yZXR1cm5UeXBlID0gJ0dkb21D
YW52YXNSZW5kZXJpbmdDb250ZXh0IConOworCSAgICAkZG9tb2JqVHlwZSA9ICdHRE9NQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCc7CisJICAgICRnZG9tX2ZuX3ByZWZpeCA9ICdnZG9tX2NhbnZhc19y
ZW5kZXJpbmdfY29udGV4dCc7CisJICAgIG5leHQgTE9PUDsJICAgICAgICMgWFhYIC0gdG9vIGlu
dm9sdmVkIGZvciBub3cuICBza2lwIGl0LgorCSAgICAjIG11c3QgY29udmVydCB0byBhIERPTU9i
amVjdCAoVE9ETzogYnJvd3NlIEpTIGNvZGUgdG8gZmluZCBvdXQgaG93KQorCSAgICAjIGJldHRl
cjogd29yayBvdXQgaG93IHRvIGNyZWF0ZSBhIEdET01Eb21PYmplY3QKKwl9CisKKwlpZiAoJGZu
X3NpZ190eXBlIGVxICdET01PYmplY3QnICYmCisJICAgICRmdW5jdGlvbk5hbWUgZXEgJ2dkb21f
ZG9jdW1lbnRfZ2V0X2Nzc19jYW52YXNfY29udGV4dCcpIHsKKwkgICAgIyBYWFggSEFDSyEKKwkg
ICAgJF9yZXR1cm5UeXBlID0gJ0dkb21DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgKic7CisJICAg
ICRkb21vYmpUeXBlID0gJ0dET01DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQnOworCSAgICAkZ2Rv
bV9mbl9wcmVmaXggPSAnZ2RvbV9jYW52YXNfcmVuZGVyaW5nX2NvbnRleHQyZCc7CisJICAgIG5l
eHQgTE9PUDsJICAgICAgICMgWFhYIC0gdG9vIGludm9sdmVkIGZvciBub3cuICBza2lwIGl0Lgor
CSAgICAjIG11c3QgY29udmVydCB0byBhIERPTU9iamVjdCAoVE9ETzogYnJvd3NlIEpTIGNvZGUg
dG8gZmluZCBvdXQgaG93KQorCSAgICAjIGJldHRlcjogd29yayBvdXQgaG93IHRvIGNyZWF0ZSBh
IEdET01Eb21PYmplY3QKKwl9CisKKworCXB1c2goQGhCb2R5LCAiV0VCS0lUX0FQSSAkX3JldHVy
blR5cGVcbiRmdW5jdGlvbk5hbWUgKCRmdW5jdGlvblNpZyk7XG5cbiIpOworCisJcHVzaChAY0Jv
ZHksICIkX3JldHVyblR5cGVcbiRmdW5jdGlvbk5hbWUgKCRmdW5jdGlvblNpZylcbntcbiIpOwor
CisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisgICAgICAgIG15ICRudW1QYXJhbWV0ZXJzID0gQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9OworICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBXZWJDb3Jl
OjpTY3JpcHRDYWxsU3RhY2sgY2FsbFN0YWNrKGV4ZWMsIGFyZ3MsICRudW1QYXJhbWV0ZXJzKTtc
biIpOworICAgIH0KKworCXB1c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFt
ZX0gKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHRoaXopO1xuIik7CisJaWYgKCRyZXR1cm5UeXBlIG5l
ICJ2b2lkIikgeworCSAgICAjIFhYWCBUT0RPOiByZXR1cm4gcHJvcGVyIGRlZmF1bHQgcmVzdWx0
CisJICAgIHB1c2goQGNCb2R5LCAiICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChpdGVtLCAwKTtc
biIpOworCX0gZWxzZSB7CisJICAgIHB1c2goQGNCb2R5LCAiICAgIGdfcmV0dXJuX2lmX2ZhaWwg
KGl0ZW0pO1xuIik7CisJfQorCisJZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzfSkgeworCSAgICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0tPm5hbWUp
OworCSAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOworCSAgICBteSAkcGFyYW1U
eXBlSXNQcmltaXRpdmUgPSAkY29kZUdlbmVyYXRvci0+SXNQcmltaXRpdmVUeXBlKCRwYXJhbUlE
TFR5cGUpOworCSAgICBteSAkcGFyYW1faXNfY2xzX3R5cGUgPSBJc0dET01DbGFzc1R5cGUoJHBh
cmFtSURMVHlwZSk7CisJICAgIGFkZEluY0hkcigkcGFyYW1JRExUeXBlKTsKKwkgICAgaWYgKCRw
YXJhbV9pc19jbHNfdHlwZSkgeworCQkjICAgICRpbXBsVHlwZWRlZnN7Ikdkb20ke3BhcmFtSURM
VHlwZX0ifSA9IDE7CisJICAgIH0KKworICAgICAgICAjIFhYWCBUT0RPOiByZXNvbHZlIHdoaWNo
IGFyZ3VtZW50cyBzaG91bGQgLyBjYW4gYmUgTlVMTAorICAgICAgICAjIG9yIGhlY2sgcmVzb2x2
ZSBpZiBpdCdzIGV2ZW4gbmVjZXNzYXJ5IHRvIGNoZWNrISBPYmpDIGRvZXNuJ3QuCisgICAgICAg
ICMKKwkgICAgIyBpZiAoISRwYXJhbVR5cGVJc1ByaW1pdGl2ZSkgeworCQkjIGlmICgkcmV0dXJu
VHlwZSBuZSAidm9pZCIpIHsKKwkJIyAgICAgcHVzaChAY0JvZHksICIgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKCRwYXJhbU5hbWUsIDApO1xuIik7CisJCSMgfSBlbHNlIHsKKwkJIyAgICAgcHVz
aChAY0JvZHksICIgICAgZ19yZXR1cm5faWZfZmFpbCAoJHBhcmFtTmFtZSk7XG4iKTsKKwkJIyB9
CisJICAgICN9CisJfQorCisJJHJldHVyblBhcmFtTmFtZSA9ICIiOworCWZvcmVhY2ggbXkgJHBh
cmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKwkgICAgbXkgJHBhcmFtSURMVHlwZSA9
ICRwYXJhbS0+dHlwZTsKKwkgICAgbXkgJHBhcmFtVHlwZSA9IEdldEdUeXBlKCRwYXJhbUlETFR5
cGUpOworCSAgICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0tPm5hbWUpOworCisJ
ICAgIG15ICRwYXJhbV9pc19jbHNfdHlwZSA9IElzR0RPTUNsYXNzVHlwZSgkcGFyYW1JRExUeXBl
KTsKKwkgICAgIyBIQUNLIQorCSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxfaHR0
cF9yZXF1ZXN0X29wZW4iICYmCisJCSRwYXJhbS0+bmFtZSBlcSAidXJsIikgeworCisJCSMkaW1w
bEluY2x1ZGVzeyJLVVJMLmgifSA9IDE7CisJCXB1c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6OktV
UkwgX2dfJHtwYXJhbU5hbWV9ID0gV2ViQ29yZTo6S1VSTCgkcGFyYW1OYW1lKTtcbiIpOworCSAg
ICB9IGVsc2lmICgkcGFyYW1JRExUeXBlIGVxICJET01TdHJpbmciKSB7CisJCXB1c2goQGNCb2R5
LCAiICAgIFdlYkNvcmU6OlN0cmluZyBfZ18ke3BhcmFtTmFtZX0gPSBXZWJDb3JlOjpTdHJpbmc6
OmZyb21VVEY4KCRwYXJhbU5hbWUpO1xuIik7CisJICAgIH0KKwkgICAgaWYgKCRwYXJhbV9pc19j
bHNfdHlwZSkgeworCQlteSAkcGFyYW1fZ2RvbV9mbiA9ICJnZG9tXyIgLiBkZWNhbWVsaXplKCRw
YXJhbUlETFR5cGUpOworCQlpZiAoJHBhcmFtSURMVHlwZSBlcSAiRXZlbnRUYXJnZXQiKSB7CisJ
CSAgICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dkb21Ob2RlUHJpdmF0ZS5oIn0gPSAxOworCQkgICAg
cHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6Tm9kZSAqIF9nXyR7cGFyYW1OYW1lfSA9IFdlYktp
dDo6Y29yZSgkcGFyYW1OYW1lKTtcbiIpOworCQl9IGVsc2UgeworCQkgICAgcHVzaChAY0JvZHks
ICIgICAgV2ViQ29yZTo6JHtwYXJhbUlETFR5cGV9ICogX2dfJHtwYXJhbU5hbWV9ID0gV2ViS2l0
Ojpjb3JlKCRwYXJhbU5hbWUpO1xuIik7CisJCX0KKyAgICAgICAgIyBYWFggVE9ETzogcmVzb2x2
ZSB3aGljaCBhcmd1bWVudHMgc2hvdWxkIC8gY2FuIGJlIE5VTEwKKyAgICAgICAgIyBvciBoZWNr
IHJlc29sdmUgaWYgaXQncyBldmVuIG5lY2Vzc2FyeSB0byBjaGVjayEgT2JqQyBkb2Vzbid0Lgor
ICAgICAgICAjCisJCSNpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiKSB7CisJCSMgICAgcHVzaChA
Y0JvZHksICIgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF9nXyR7cGFyYW1OYW1lfSwgMCk7XG4i
KTsKKwkJI30gZWxzZSB7CisJCSMgICAgcHVzaChAY0JvZHksICIgICAgZ19yZXR1cm5faWZfZmFp
bCAoX2dfJHtwYXJhbU5hbWV9KTtcbiIpOworCQkjfQorCisJICAgIH0KKwkgICAgJHJldHVyblBh
cmFtTmFtZSA9ICJfZ18iLiRwYXJhbU5hbWUgaWYgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiUmV0dXJuIn07CisJfQorCisJbXkgJGFzc2lnbiA9ICIiOworCW15ICRhc3NpZ25fcHJlID0g
IiI7CisJbXkgJGFzc2lnbl9wb3N0ID0gIiI7CisJJGdfcmVzID0gMDsKKwlpZiAoJHJldHVyblR5
cGUgbmUgInZvaWQiICYmICEkaXNfY3VzdG9tX2ZuKSB7CisKKwkgICAgaWYgKCRyZXRfaXNfY2xz
X3R5cGUpIHsKKwkJJGFzc2lnbiA9ICJQYXNzUmVmUHRyPFdlYkNvcmU6OiR7Zm5fc2lnX3R5cGV9
PiBnX3JlcyA9ICI7CisJCSRhc3NpZ25fcHJlID0gIldURjo6Z2V0UHRyKCI7CisJCSRhc3NpZ25f
cG9zdCA9ICIpIjsKKwkgICAgfSBlbHNlIHsKKwkJJGFzc2lnbiA9ICIke19yZXR1cm5UeXBlfSBy
ZXMgPSAiOworCSAgICB9CisJfQorCW15ICRleGNlcHRpb25zID0gIiI7CisJaWYgKEB7JGZ1bmN0
aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgeworCSAgICBwdXNoKEBjQm9keSwgIiAgICBXZWJDb3Jl
OjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworCSAgICBpZiAoJHtjYWxsX2ltcGxfcGFyYW1z
fSBuZSAiIikgeworCQkkZXhjZXB0aW9ucyA9ICIsIGVjIjsKKwkgICAgfSBlbHNlIHsKKwkJJGV4
Y2VwdGlvbnMgPSAiZWMiOworCSAgICB9CisJfQorCisJIyBuZWVkIHRoaXMgZm9yIGluY2x1ZGlu
ZyAuLi4gX3NvbWV0aGluZ18gLSBmb3IgdGhlIGNsYXNzIGFyZ3MKKwkjaWYgKCRyZXRfaXNfY2xz
X3R5cGUpIHsKKwkjICAgICRpbXBsSW5jbHVkZXN7Imdkb20ke2ZuX3NpZ190eXBlfS5oIn0gPSAx
OworCSN9CisJaWYgKCRmdW5jdGlvbk5hbWUgZXEgImdkb21fbm9kZV9hcHBlbmRfY2hpbGQiIHx8
CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21fbm9kZV9pbnNlcnRfYmVmb3JlIiB8fAorCSAg
ICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgfHwKKwkgICAgJGZ1
bmN0aW9uTmFtZSBlcSAiZ2RvbV9ub2RlX3JlbW92ZV9jaGlsZCIpIHsKKwkgICAgbXkgJGN1c3Rv
bV9nZG9tX25vZGVfYXBwZW5kX2NoaWxkID0gPDwgIkVPRiI7CisgICAgYm9vbCBvayA9IGl0ZW0t
PiR7Zm5fc2lnX25hbWV9KCR7Y2FsbF9pbXBsX3BhcmFtc30ke2V4Y2VwdGlvbnN9KTsKKyAgICBp
ZiAob2spCisgICAgeworICAgICAgICAke19yZXR1cm5UeXBlfSByZXMgPSBzdGF0aWNfY2FzdDwk
e19yZXR1cm5UeXBlfT4oV2ViS2l0Ojp0b0dET00oJHJldHVyblBhcmFtTmFtZSkpOworICAgICAg
ICByZXR1cm4gcmVzOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK0VPRgorCSAgICBwdXNoKEBj
Qm9keSwgJGN1c3RvbV9nZG9tX25vZGVfYXBwZW5kX2NoaWxkKTsKKwl9IGVsc2lmICgkZm5fc2ln
X3R5cGUgZXEgIkRPTU9iamVjdCIgJiYKKwkJICRmdW5jdGlvbk5hbWUgbmUgJ2dkb21fZG9jdW1l
bnRfZ2V0X2Nzc19jYW52YXNfY29udGV4dCcpIHsKKwkgICAgcHVzaChAY0JvZHksICIgICAgLyog
WFhYIFRPRE8gLSBnZXQgY2FudmFzIG9iamVjdCAoaXRlbS0+JHtmbl9zaWdfbmFtZX0oJHtjYWxs
X2ltcGxfcGFyYW1zfSR7ZXhjZXB0aW9uc30pKTsqL1xuIiApOworCisJfSBlbHNpZiAoJGZuX3Np
Z190eXBlIGVxICJET01TdHJpbmciKSB7CisJICAgIHB1c2goQGNCb2R5LCAiICAgICR7YXNzaWdu
fWNvcHlBc0djaGFyKGl0ZW0tPiR7Zm5fc2lnX25hbWV9KCR7Y2FsbF9pbXBsX3BhcmFtc30ke2V4
Y2VwdGlvbnN9KSk7XG4iICk7CisJfSBlbHNlIHsKKwkgICAgaWYgKCRnX3JlcykgeworCQkkZ19y
ZXMgPSAiJHthc3NpZ259JHthc3NpZ25fcHJlfWl0ZW0tPiR7Zm5fc2lnX25hbWV9KCR7Y2FsbF9p
bXBsX3BhcmFtc30ke2V4Y2VwdGlvbnN9JHthc3NpZ25fcG9zdH0pIiA7CisJICAgIH0gZWxzZSB7
CisJCXB1c2goQGNCb2R5LCAiICAgICR7YXNzaWdufSR7YXNzaWduX3ByZX1pdGVtLT4ke2ZuX3Np
Z19uYW1lfSgke2NhbGxfaW1wbF9wYXJhbXN9JHtleGNlcHRpb25zfSR7YXNzaWduX3Bvc3R9KTtc
biIgKTsKKwkgICAgfQorCX0KKwlpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiICYmICEkaXNfY3Vz
dG9tX2ZuKSB7CisKKwkgICAgaWYgKCRmbl9zaWdfdHlwZSBuZSAiRE9NT2JqZWN0IikgeworCQlp
ZiAoJHJldF9pc19jbHNfdHlwZSkgeworCQkgICAgcHVzaChAY0JvZHksICIgICAgJHtfcmV0dXJu
VHlwZX0gcmVzID0gc3RhdGljX2Nhc3Q8JHtfcmV0dXJuVHlwZX0+KFdlYktpdDo6dG9HRE9NKGdf
cmVzLmdldCgpKSk7XG4iKTsKKwkJfQorCSAgICB9CisJICAgIGlmICgkZm5fc2lnX3R5cGUgZXEg
IkRPTU9iamVjdCIpIHsKKwkJcHVzaChAY0JvZHksICIgICAgcmV0dXJuIE5VTEw7IC8qIFhYWCBU
T0RPOiByZXR1cm4gY2FudmFzIG9iamVjdCAqL1xuIik7CisJICAgIH0gZWxzZSB7CisJCXB1c2go
QGNCb2R5LCAiICAgIHJldHVybiByZXM7XG4iKTsKKwkgICAgfQorCX0KKwlwdXNoKEBjQm9keSwg
IlxuIik7CisKKwlwdXNoKEBjQm9keSwgIn1cblxuIik7CisgICAgfQorCisgICAgcHVzaChAY0Jv
ZHksICJ9IC8qIGV4dGVybiBcIkNcIiAqL1xuXG4iKTsKKyAgICBwdXNoKEBjQm9keVByaXYsICJH
X0VORF9ERUNMU1xuXG4iKTsKKworICAgIHB1c2goQGhCb2R5LCAiR19FTkRfREVDTFNcblxuIik7
CisgICAgcHVzaChAaEJvZHksICIjZW5kaWYgLyogJGd1YXJkICovXG4iKTsKKworICAgIHB1c2go
QGhCb2R5UHJvcCwgIkdfRU5EX0RFQ0xTXG5cbiIpOworICAgIHB1c2goQGhCb2R5UHJvcCwgIiNl
bmRpZiAvKiAke2d1YXJkfV9QUk9QXyovXG4iKTsKK30KKworIyBJbnRlcm5hbCBoZWxwZXIKK3N1
YiBXcml0ZURhdGEgeworICAgIG15ICgkb2JqZWN0LCAkbmFtZSkgPSBAXzsKKworICAgICMgV3Jp
dGUgUHJpdmF0ZSBoZWFkZXIKKyAgICBteSAkaGRyRk5hbWVQcml2ID0gIiRvdXRwdXREaXIvIiAu
ICRuYW1lIC4gIlByaXZhdGUuaCI7CisgICAgb3BlbihQUklWSEVBREVSLCAiPiRoZHJGTmFtZVBy
aXYiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaGRyRk5hbWVQcml2IjsKKyAgICBwcmlu
dCBQUklWSEVBREVSIEBoUHJlZml4OworICAgIHByaW50IFBSSVZIRUFERVIgIlxuIjsKKyAgICBw
cmludCBQUklWSEVBREVSIEBoQm9keVByaXY7CisgICAgY2xvc2UoUFJJVkhFQURFUik7CisKKyAg
ICAjIFdyaXRlIHByb3BlcnRpZXMgaGVhZGVyIChhdm9pZHMgcmVjdXJzaXZlIG5pZ2h0bWFyZSkK
KyAgICBteSAkaGRyUHJvcEZOYW1lID0gIiRvdXRwdXREaXIvIiAuICRuYW1lIC4gInByb3BzLmgi
OworICAgIG9wZW4oUFJPUEhFQURFUiwgIj4kaGRyUHJvcEZOYW1lIikgb3IgZGllICJDb3VsZG4n
dCBvcGVuIGZpbGUgJGhkclByb3BGTmFtZSI7CisKKyAgICAkaGRyUHJvcEluY2x1ZGVzeyJnbGli
LW9iamVjdC5oIn0gPSAxOworCisgICAgcHJpbnQgUFJPUEhFQURFUiBAaFByZWZpeDsKKyAgICBw
cmludCBQUk9QSEVBREVSICIvKiByZWN1cnNpdmUgaW5jbHVkZXMgLyBkZWZpbmVzIGlzc3VlIGZv
cmNlcyBzZXBhcmF0ZSBoZWFkZXIgZm9yIHByb3BlcnRpZXMuXG5wZXJoYXBzIC0gYmV0dGVyIC0g
YWxsIGdkb20gZ3RrIGZ1bmN0aW9ucyBzaG91bGQgYmUgaW4gaGVyZSEqL1xuIjsKKyAgICBwcmlu
dCBQUk9QSEVBREVSIEBoQm9keVByb3BQcmU7CisgICAgcHJpbnQgUFJPUEhFQURFUiAiI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+XG4iOworICAgIHByaW50IFBST1BIRUFERVIgbWFw
IHsgIiNpbmNsdWRlIFwiJF9cIlxuIiB9IHNvcnQga2V5cyglaGRyUHJvcEluY2x1ZGVzKTsKKyAg
ICBwcmludCBQUk9QSEVBREVSICJcbiIgaWYga2V5cyglaGRyUHJvcEluY2x1ZGVzKTsKKyAgICBw
cmludCBQUk9QSEVBREVSICJcbiI7CisgICAgcHJpbnQgUFJPUEhFQURFUiBAaEJvZHlQcm9wOwor
CisgICAgY2xvc2UoSEVBREVSKTsKKworICAgICMgV3JpdGUgcHVibGljIGhlYWRlci4KKyAgICBt
eSAkaGRyRk5hbWUgPSAiJG91dHB1dERpci8iIC4gJG5hbWUgLiAiLmgiOworICAgIG9wZW4oSEVB
REVSLCAiPiRoZHJGTmFtZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRoZHJGTmFtZSI7
CisKKyAgICAkaGRySW5jbHVkZXN7ImdsaWItb2JqZWN0LmgifSA9IDE7CisKKyAgICBwcmludCBI
RUFERVIgQGhQcmVmaXg7CisgICAgcHJpbnQgSEVBREVSIEBoUHJlZml4R3VhcmQ7CisgICAgcHJp
bnQgSEVBREVSICIjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD5cbiI7CisgICAgcHJp
bnQgSEVBREVSIG1hcCB7ICIjaW5jbHVkZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWhkckluY2x1
ZGVzKTsKKyAgICBwcmludCBIRUFERVIgIlxuIiBpZiBrZXlzKCVoZHJJbmNsdWRlcyk7CisgICAg
cHJpbnQgSEVBREVSICJcbiI7CisgICAgcHJpbnQgSEVBREVSIEBoQm9keVByZTsKKyAgICBwcmlu
dCBIRUFERVIgbWFwIHsgInR5cGVkZWYgc3RydWN0IF8kXyAkXztcbiIgfSBzb3J0IGtleXMoJWlt
cGxUeXBlZGVmcyk7CisgICAgcHJpbnQgSEVBREVSICJcbiIgaWYga2V5cyglaW1wbFR5cGVkZWZz
KTsKKyAgICBwcmludCBIRUFERVIgQGhCb2R5OworCisgICAgY2xvc2UoSEVBREVSKTsKKworICAg
ICMgV3JpdGUgdGhlIGltcGxlbWVudGF0aW9uIHNvdXJjZXMKKyAgICBteSAkaW1wbEZpbGVOYW1l
ID0gIiRvdXRwdXREaXIvIiAuICRuYW1lIC4gIi5jcHAiOworICAgIG9wZW4oSU1QTCwgIj4kaW1w
bEZpbGVOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGltcGxGaWxlTmFtZSI7CisK
KyAgICBwcmludCBJTVBMIEBjUHJlZml4OworICAgIHByaW50IElNUEwgIiNpbmNsdWRlIFwiY29u
ZmlnLmhcIlxuXG4iOworICAgIHByaW50IElNUEwgIiNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+XG4i
OworICAgIHByaW50IElNUEwgbWFwIHsgIiNpbmNsdWRlIFwiJF9cIlxuIiB9IHNvcnQga2V5cygl
aW1wbEluY2x1ZGVzKTsKKyAgICBwcmludCBJTVBMICJcbiIgaWYga2V5cyglaW1wbEluY2x1ZGVz
KTsKKyAgICBwcmludCBJTVBMICJuYW1lc3BhY2UgV2ViS2l0IHtcbiI7CisgICAgcHJpbnQgSU1Q
TCBtYXAgeyAiJF9cbiIgfSBzb3J0IGtleXMoJWNCb2R5R0RPTSk7CisgICAgcHJpbnQgSU1QTCAi
fTsgLy8gbmFtZXNwYWNlIFdlYktpdFxuIjsKKyAgICBwcmludCBJTVBMIEBjQm9keTsKKworICAg
IHByaW50IElNUEwgIlxuIjsKKyAgICBwcmludCBJTVBMIEBjQm9keVByaXY7CisKKyAgICBjbG9z
ZShJTVBMKTsKKworICAgICVpbXBsSW5jbHVkZXMgPSAoKTsKKyAgICAlaW1wbFR5cGVkZWZzID0g
KCk7CisgICAgJWhkckluY2x1ZGVzID0gKCk7CisgICAgQGhQcmVmaXggPSAoKTsKKyAgICBAaEJv
ZHkgPSAoKTsKKyAgICBAaEJvZHlQcml2ID0gKCk7CisgICAgQGhCb2R5UHJvcCA9ICgpOworICAg
IEBoQm9keVByb3BQcmUgPSAoKTsKKworICAgIEBjUHJlZml4ID0gKCk7CisgICAgQGNCb2R5R0RP
TSA9ICgpOworICAgIEBjQm9keSA9ICgpOworICAgIEBjQm9keVByaXYgPSAoKTsKK30KKworMTsK
</data>
<flag name="review"
          id="18454"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34339</attachid>
            <date>2009-08-07 15:50:37 -0700</date>
            <delta_ts>2009-08-07 16:34:32 -0700</delta_ts>
            <desc>tidyup / function split / typemap etc.</desc>
            <filename>f</filename>
            <type>text/plain</type>
            <size>222</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">IyBEZWZhdWx0IExpY2VuY2UgVGVtcGxhdGVzCm15ICRsaWNlbmNlVGVtcGxhdGUgPSA8PCAiRU9G
IjsKLyoKICogQ29weXJpZ2h0IChDKSAyMDA4IEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24g
PGxrY2xcQGxrY2wubmV0PgogKiBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBcQGF0
b2tlci5jb20+CiAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuCiAqLwpFT0YK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34341</attachid>
            <date>2009-08-07 16:34:32 -0700</date>
            <delta_ts>2010-06-10 18:45:51 -0700</delta_ts>
            <desc>split into two library files; requesting veery quick review</desc>
            <filename>x</filename>
            <type>text/plain</type>
            <size>52290</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdExpYnJh
cnkxLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yR09iamVjdExpYnJhcnkxLnBtCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTEucG0JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDY2IEBACisjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBMdWtlIEtlbm5ldGggQ2Fz
c29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorIyBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGlu
IFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRv
a2VyIDxhbHBAYXRva2VyLmNvbT4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
IworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisjIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCisjIERl
ZmF1bHQgY29uc3RydWN0b3IKK3N1YiBuZXcgeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAg
ICBteSAkcmVmZXJlbmNlID0geyB9OworCisgICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsKKyAg
ICAkb3V0cHV0RGlyID0gc2hpZnQ7CisKKyAgICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsK
KyAgICByZXR1cm4gJHJlZmVyZW5jZTsKK30KKworc3ViIGNsc1RvR09ialR5cGUgeworICAgIG15
ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICByZXR1cm4gdWMoZGVjYW1lbGl6ZSgkY2xhc3NOYW1l
KSkKK30KKworc3ViIGdldFBhcmVudENsYXNzTmFtZSB7CisgICAgbXkgJGRhdGFOb2RlID0gc2hp
ZnQ7CisKKyAgICAjID8/IHF1ZT8/CisgICAgcmV0dXJuICJHZG9tRE9NT2JqZWN0IiBpZiBAeyRk
YXRhTm9kZS0+cGFyZW50c30gZXEgMDsKKyAgICByZXR1cm4gIkdkb20iIC4gJGNvZGVHZW5lcmF0
b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9kZS0+cGFyZW50cygwKSk7Cit9CisKK3N1YiBnZXRQYXJl
bnRHT2JqVHlwZSB7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAjID8/IHF1ZT8/
CisgICAgcmV0dXJuICJHRE9NX1RZUEVfRE9NX09CSkVDVCIgaWYgQHskZGF0YU5vZGUtPnBhcmVu
dHN9IGVxIDA7CisgICAgcmV0dXJuICJHRE9NX1RZUEVfIiAuIGNsc1RvR09ialR5cGUoJGNvZGVH
ZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRkYXRhTm9kZS0+cGFyZW50cygwKSkpOworfQorCisKKyMg
QWxnb3JpdGhtIHRha2VuIGZyb20gU3RyaW5nOjpDYW1lbENhc2UgMC4wMQorc3ViIGNhbWVsaXpl
IHsKKyAgICBteSAkcyA9IHNoaWZ0OworICAgIGpvaW4oJycsIG1hcHsgdWNmaXJzdCAkXyB9IHNw
bGl0KC8oPzw9W0EtWmEtel0pXyg/PVtBLVphLXpdKXxcYi8sICRzKSk7Cit9CisKKyMgQWxnb3Jp
dGhtIHRha2VuIGZyb20gU3RyaW5nOjpDYW1lbENhc2UgMC4wMQorc3ViIGRlY2FtZWxpemUgewor
ICAgIG15ICRzID0gc2hpZnQ7CisgICAgJHMgPX4gc3soW15hLXpBLVpdPykoW0EtWl0qKShbQS1a
XSkoW2Etel0/KX17CisgICAgICAgIG15ICRmYyA9IHBvcygkcyk9PTA7CisgICAgICAgIG15ICgk
cDAsJHAxLCRwMiwkcDMpID0gKCQxLGxjJDIsbGMkMywkNCk7CisgICAgICAgIG15ICR0ID0gJHAw
IHx8ICRmYyA/ICRwMCA6ICdfJzsKKyAgICAgICAgJHQgLj0gJHAzID8gJHAxID8gIiR7cDF9XyRw
MiRwMyIgOiAiJHAyJHAzIiA6ICIkcDEkcDIiOworICAgICAgICAkdDsKKyAgICB9Z2U7CisgICAg
JHM7Cit9CisKK3N1YiBnZXRIZHJOYW1lIHsKKyAgICBteSAkbmFtZSA9ICRjb2RlR2VuZXJhdG9y
LT5TdHJpcE1vZHVsZShzaGlmdCk7CisKKyAgICByZXR1cm4gIkdkb20kbmFtZSI7Cit9CisKK3N1
YiBnZXRDbGFzc05hbWUgeworICAgIG15ICRuYW1lID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKHNoaWZ0KTsKKworICAgIHJldHVybiAiR2RvbSRuYW1lIjsKK30KKworbXkgJWdJbmNsdWRl
SGRyTWFwID0gKAorICAgICJpbnQiID0+ICIiLAorICAgICJsb25nIiA9PiAiIiwKKyAgICAic2hv
cnQiID0+ICIiLAorICAgICJjaGFyIiA9PiAiIiwKKyAgICAiZmxvYXQiID0+ICIiLAorICAgICJk
b3VibGUiID0+ICIiLAorICAgICJ1bnNpZ25lZCIgPT4gIiIsCisgICAgInVuc2lnbmVkIGludCIg
PT4gIiIsCisgICAgInVuc2lnbmVkIGxvbmciID0+ICIiLAorICAgICJ1bnNpZ25lZCBsb25nIGxv
bmciID0+ICIiLAorICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gIiIsCisgICAgIkRPTVRpbWVTdGFt
cCIgPT4gIiIsCisgICAgIkV2ZW50TGlzdGVuZXIiID0+ICIiLAorICAgICJDb21wYXJlSG93IiA9
PiAiUmFuZ2UuaCIsCisgICAgIkRPTU9iamVjdCIgPT4gImdkb20vR2RvbUNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oIiwKKyAgICAidW5zaWduZWQgY2hhciIgPT4gIiIsCisgICAgIkRPTVN0cmlu
ZyIgPT4gImdsaWItb2JqZWN0LmgiLAorICAgICJFdmVudFRhcmdldCIgPT4gIkdkb21Ob2RlLmgi
LAorICAgICJmbG9hdCIgPT4gImdsaWItb2JqZWN0LmgiLAorICAgICJib29sZWFuIiA9PiAiZ2xp
Yi1vYmplY3QuaCIsCisgICAgInZvaWQiID0+ICJnbGliLW9iamVjdC5oIiwKKyk7CisKK3N1YiBn
ZXRHSW5jbHVkZUhkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIHJldHVybiAkZ0lu
Y2x1ZGVIZHJNYXB7JHR5cGV9IGlmIGV4aXN0cyAkZ0luY2x1ZGVIZHJNYXB7JHR5cGV9OworCisg
ICAgbXkgJG5hbWUgPSBnZXRIZHJOYW1lKCR0eXBlKTsKKyAgICByZXR1cm4gIiRuYW1lLmgiOwor
fQorCitteSAlZ0NsYXNzTWFwID0gKAorICAgICJET01UaW1lU3RhbXAiID0+IDAsCisgICAgIkRP
TVN0cmluZyIgPT4gMCwKKyAgICAiRXZlbnRMaXN0ZW5lciIgPT4gMCwKKyAgICAiQ29tcGFyZUhv
dyIgPT4gMCwKKyAgICAiZmxvYXQiID0+IDAsCisgICAgImRvdWJsZSIgPT4gMCwKKyAgICAiYm9v
bGVhbiIgPT4gMCwKKyAgICAiY2hhciIgPT4gMCwKKyAgICAibG9uZyIgPT4gMCwKKyAgICAic2hv
cnQiID0+IDAsCisgICAgInVjaGFyIiA9PiAwLAorICAgICJ1bnNpZ25lZCIgPT4gMCwKKyAgICAi
aW50IiA9PiAwLAorICAgICJ1bnNpZ25lZCBpbnQiID0+IDAsCisgICAgInVuc2lnbmVkIGxvbmci
ID0+IDAsCisgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIgPT4gMCwKKyAgICAidW5zaWduZWQgc2hv
cnQiID0+IDAsCisgICAgInZvaWQiID0+IDAsCispOworCisjIHJldHVybnMgMSBpZiB3ZSBuZWVk
IHRvIGNyZWF0ZSBhIGdvYmplY3Qgd3JhcHBlciBhcm91bmQgdGhlIHJldHVybiByZXN1bHQKK3N1
YiBpc0dET01DbGFzc1R5cGUgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuICRn
Q2xhc3NNYXB7JHR5cGV9IGlmIGV4aXN0cyAkZ0NsYXNzTWFweyR0eXBlfTsKKyAgICByZXR1cm4g
MTsKK30KKworbXkgJWdQcm9wVHlwZU1hcCA9ICgKKyAgICAiRE9NU3RyaW5nIiA9PiAic3RyaW5n
IiwKKyAgICAiZmxvYXQiID0+ICJmbG9hdCIsCisgICAgIkNvbXBhcmVIb3ciID0+ICJub3R5ZXRz
dXBwb3J0ZWQiLAorICAgICJkb3VibGUiID0+ICJkb3VibGUiLAorICAgICJib29sZWFuIiA9PiAi
Ym9vbGVhbiIsCisgICAgImNoYXIiID0+ICJjaGFyIiwKKyAgICAibG9uZyIgPT4gImxvbmciLAor
ICAgICJzaG9ydCIgPT4gImludCIsCisgICAgInVjaGFyIiA9PiAidWNoYXIiLAorICAgICJ1bnNp
Z25lZCIgPT4gInVpbnQiLAorICAgICJpbnQiID0+ICJpbnQiLAorICAgICJ1bnNpZ25lZCBpbnQi
ID0+ICJ1aW50IiwKKyAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAidWludDY0IiwKKyAgICAi
dW5zaWduZWQgbG9uZyIgPT4gInVsb25nIiwKKyAgICAidW5zaWduZWQgc2hvcnQiID0+ICJ1aW50
IiwKKyk7CisKK3N1YiBHZXRQcm9wR1R5cGUgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAg
ICByZXR1cm4gJGdQcm9wVHlwZU1hcHskdHlwZX0gaWYgZXhpc3RzICRnUHJvcFR5cGVNYXB7JHR5
cGV9OworCisgICAgcmV0dXJuICJvYmplY3QiOworfQorCitteSAlZ1R5cGVNYXAgPSAoCisgICAg
IkV2ZW50VGFyZ2V0IiA9PiAiR2RvbU5vZGUgKiIsCisgICAgIkRPTVN0cmluZyIgPT4gImdjaGFy
ICoiLAorICAgICJmbG9hdCIgPT4gImdmbG9hdCIsCisgICAgIkNvbXBhcmVIb3ciID0+ICJXZWJD
b3JlOjpSYW5nZTo6Q29tcGFyZUhvdyAiLAorICAgICJkb3VibGUiID0+ICJnZG91YmxlIiwKKyAg
ICAiYm9vbGVhbiIgPT4gImdib29sZWFuIiwKKyAgICAiY2hhciIgPT4gImdjaGFyIiwKKyAgICAi
bG9uZyIgPT4gImdsb25nIiwKKyAgICAic2hvcnQiID0+ICJnc2hvcnQiLAorICAgICJ1Y2hhciIg
PT4gImd1Y2hhciIsCisgICAgInVuc2lnbmVkIiA9PiAiZ3VpbnQiLAorICAgICJpbnQiID0+ICJn
aW50IiwKKyAgICAidW5zaWduZWQgaW50IiA9PiAiZ3VpbnQiLAorICAgICJ1bnNpZ25lZCBsb25n
IiA9PiAiZ3Vsb25nIiwKKyAgICAidW5zaWduZWQgbG9uZyBsb25nIiA9PiAiZ3VpbnQ2NCIsCisg
ICAgInVuc2lnbmVkIHNob3J0IiA9PiAiZ3VzaG9ydCIsCisgICAgInZvaWQiID0+ICJ2b2lkIiwK
Kyk7CisKK3N1YiBnZXRHVHlwZSB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIHJldHVy
biAkZ1R5cGVNYXB7JHR5cGV9IGlmIGV4aXN0cyAkZ1R5cGVNYXB7JHR5cGV9OworCisgICAgIyBG
b3IgYWxsIG90aGVyIHR5cGVzLCB0aGUgbmF0aXZlIHR5cGUgaXMgYSBwb2ludGVyIHdpdGggc2Ft
ZSB0eXBlIG5hbWUKKyAgICAjIGFzIHRoZSBJREwgdHlwZS4KKyAgICBteSAkbmFtZSA9IGdldENs
YXNzTmFtZSgkdHlwZSk7CisgICAgcmV0dXJuICIkbmFtZSAqIjsKK30KKworc3ViIGdldEluY0hk
ciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIG15ICRpbmNsdWRlSGRyID0gZ2V0R0lu
Y2x1ZGVIZHIoJHR5cGUpOworICAgIGlmICgkaW5jbHVkZUhkcikgeworICAgICAgICBpZiAoJHR5
cGUgZXEgIkV2ZW50VGFyZ2V0IikgeworICAgICAgICAgICAgcmV0dXJuICJHZG9tTm9kZS5oIjsK
KyAgICAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAgICAgICAgICAgICMg
WFhYID8/Pz8gd3RmPz8gOikgY29waWVkIGZyb20ganNnZW5lcmF0b3IgLSBqdXN0IGRvIHdoYXQg
dGhleSBkby4KKyAgICAgICAgICAgIHJldHVybiAiR2RvbUNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAkaW5jbHVkZUhkcjsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gIiI7Cit9CisKK3N1YiBjYWxjUHJvcEluY0hk
clByaXZhdGUgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgbXkgJGhkclByb3BJbmNsdWRl
cyA9IHNoaWZ0OworCisgICAgbXkgJGhkciA9IGdldEluY0hkcigkdHlwZSk7CisgICAgaWYgKCRo
ZHIgbmUgIiIpIHsKKyAgICAgICAgaWYgKGlzR0RPTUNsYXNzVHlwZSgkdHlwZSkpIHsKKyAgICAg
ICAgICAgICRoZHIgPSBzdWJzdHIoJGhkciwgMCwgbGVuZ3RoKCRoZHIpLTIpOworICAgICAgICAg
ICAgcmV0dXJuICJnZG9tLyIuJGhkci4iUHJpdmF0ZS5oIjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworc3ViIGNhbGNQcm9wSW5jSGRyIHsKKyAgICBteSAkdHlwZSA9IHNo
aWZ0OworCisgICAgbXkgJGhkciA9IGdldEluY0hkcigkdHlwZSk7CisgICAgaWYgKCRoZHIgbmUg
IiIpIHsKKyAgICAgICAgaWYgKGlzR0RPTUNsYXNzVHlwZSgkdHlwZSkpIHsKKyAgICAgICAgICAg
ICRoZHIgPSBzdWJzdHIoJGhkciwgMCwgbGVuZ3RoKCRoZHIpLTIpOworICAgICAgICAgICAgcmV0
dXJuICJnZG9tLyIuJGhkci4iLmgiOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwor
fQorCitzdWIgY2FsY0luY0hkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIG15ICRo
ZHIgPSBnZXRJbmNIZHIoJHR5cGUpOworICAgIGlmICgkaGRyIG5lICIiKSB7CisgICAgICAgIGlm
IChpc0dET01DbGFzc1R5cGUoJHR5cGUpKSB7CisgICAgICAgICAgICByZXR1cm4gImdkb20vJGhk
ciI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gJGhkcjsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIEdldFByaXZGbiB7CisgICAgbXkgJGlu
dGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkbGNhc2VfaWZhY2VuYW1lID0gc2hpZnQ7Cisg
ICAgbXkgJHJlcyA9IHNoaWZ0OworICAgIG15ICRwYXJtID0gc2hpZnQ7CisKKyAgICBpZiAoJGlu
dGVyZmFjZU5hbWUgZXEgIkV2ZW50VGFyZ2V0IikgeworICAgICAgICByZXR1cm4gIldlYkNvcmU6
Ok5vZGUgKiAkcmVzID0gV2ViS2l0Ojpjb3JlKHNlbGYpOyI7CisgICAgfQorICAgIHJldHVybiAi
V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqICRyZXMgPSBXZWJLaXQ6OmNvcmUoJHBhcm0pOyI7
Cit9CisKK215ICVza2lwUHJvcFR5cGVNYXA9ICgKKyAgICAic3R5bGVzaGVldHM6Ok1lZGlhTGlz
dCIgPT4gMSwKKyAgICAiT2JqZWN0IiA9PiAxLAorICAgICJFdmVudCIgPT4gMSwKKyAgICAiQ3J5
cHRvIiA9PiAxLAorICAgICJDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbiIgPT4gMSwKKyAgICAiRXZl
bnRMaXN0ZW5lciIgPT4gMSwKKyAgICAiY3VzdG9tIiA9PiAxLAorICAgICJBcnJheSIgPT4gMSwK
KyAgICAiRE9NVGltZVN0YW1wIiA9PiAxLAorKTsKKworIyBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUg
dG8gZGV0ZXJtaW5lIHdoaWNoIGdvYmplY3QgcHJvcGVydGllcyBzaG91bGQKKyMgYmUgdGVtcG9y
YXJpbHkgc2tpcHBlZCB3aGlsc3QgdGhlIGdvYmplY3QgY29kZSBnZW5lcmF0b3IgaXMgYmVpbmcg
YnJvdWdodAorIyB1cC10by1zcGVlZCB3aXRoIHRoZSBvdGhlciBjb2RlIGdlbmVyYXRvcnMuICBv
bmNlIGV2ZXJ5dGhpbmcncyBpbiwKKyMgaXQgY2FuIGdvLiAgYnV0IGluIHRoZSBtZWFuLXRpbWUs
IGl0IGhhcyB0byBzdGF5LCBiZWNhdXNlIG90aGVyd2lzZQorIyBpdCBtZWFucyBhIG1hc3NpdmUg
YW1vdW50IG9mIGV4dHJhIHdvcmsuCitzdWIgc2tpcFByb3BUZW1wb3JhcmlseSB7CisgICAgbXkg
JHR5cGUgPSBzaGlmdDsKKyAgICBteSAkcHJvcF90eXBlID0gc2hpZnQ7CisKKyAgICByZXR1cm4g
MSBpZiBleGlzdHMgJHNraXBQcm9wVHlwZU1hcHskcHJvcF90eXBlfTsKKworICAgICMgc2tpcCBD
b25zdHJ1Y3RvcnMgKHdoYXRldmVyIHRoZXkgYXJlKSBmb3Igbm93LgorICAgIGlmICgkcHJvcF90
eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAg
ICMgVE9ETzogU1ZHLgorICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNQb2RUeXBlKCR0eXBlKSB8
fCAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJl
dHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworbXkgJW1hbnVhbFRvR0RPTUltcGxl
bWVudGF0aW9uTWFwID0gKAorICAgICJOb2RlIiA9PiAxLAorICAgICJEb2N1bWVudCIgPT4gMSwK
KyAgICAiSFRNTENvbGxlY3Rpb24iID0+IDEsCisgICAgIlNWR1BhdGhTZWciID0+IDEsCisgICAg
IlN0eWxlU2hlZXQiID0+IDEsCisgICAgIkNTU1J1bGUiID0+IDEsCisgICAgIkNTU1ZhbHVlIiA9
PiAxLAorICAgICJPYmplY3QiID0+IDEsCisgICAgIkV2ZW50IiA9PiAxLAorICAgICJFbGVtZW50
IiA9PiAxLAorICAgICJUZXh0IiA9PiAxLAorICAgICk7CisKKyMgdGhpcyBmdW5jdGlvbiB0ZWxs
cyB1cyB3aGV0aGVyIHRoZXJlIGFscmVhZHkgZXhpc3RzIGEgaGFuZC13cml0dGVuCisjIHZlcnNp
b24gb2YgdG9ET00oe3R5cGV9KiksIHdoaWNoIHNob3V1dWxkIGJlIGZvdW5kIGluCisjIFdlYkNv
cmUvYmluZGluZ3MvZ2RvbS9HRE9Ne3R5cGV9Q3VzdG9tLmNwcCBvciBpbiBvbmUgY2FzZSAtIE5v
ZGUgLSBpbgorIyBHRE9NQmluZGluZy5jcHAuICB0aGVzZSBoYW5kLXdyaXR0ZW4gdmVyc2lvbnMg
YXJlIHRoZSBkYW1uIGltcG9ydGFudAorIyBvbmVzIHRoYXQgcmUtbWFwIGMrKyBiYXNlIGNsYXNz
ZXMgQkFDSyB1cCB0byB0aGUgcmlnaHQgZ29iamVjdCB0eXBlLgorc3ViIHVzZXNNYW51YWxUb0dE
T01JbXBsZW1lbnRhdGlvbiB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gMSBp
ZiBleGlzdHMgJG1hbnVhbFRvR0RPTUltcGxlbWVudGF0aW9uTWFweyR0eXBlfTsKKyAgICByZXR1
cm4gMDsKK30KKworIyBhbHRob3VnaCB0aGUgbGF5b3V0IG9mIHRoZXNlIGxvb2tzIHdlaXJkLCBp
dCdzIHRvIGtlZXAgdGhlIG91dHB1dAorIyBpZGVudGljYWwgdG8gd2hhdCdzIGJlaW5nIG1haW50
YWluZWQgZXh0ZXJuYWxseSB0byB3ZWJraXQgc3ZuIGR1cmluZworIyB0aGUgbGFuZGluZyBwaGFz
ZSBvZiB0aGlzIGNvZGUuICBieSBrZWVwaW5nIHRoZSBvdXRwdXQgaWRlbnRpY2FsLAorIyBkaWZm
IC1ydSBjYW4gYmUgdXRpbGlzZWQgdG8gdmVyaWZ5IHRoYXQgbm8gYWNjaWRlbnRhbCBjaGFuZ2Vz
IGFyZQorIyBpbnRyb2R1Y2VkIHdoaWxzdCB0aGlzIGNvZGUgaXMgYmVpbmcgcmV2aXNlZCB0byBt
ZWV0IHdlYmtpdCBjb2RpbmcKKyMgc3RhbmRhcmRzLgorbXkgJXR4dEluc3RhbGxQcm9wTWFwID0g
KAorICAgICJpbnQiID0+IAorIiAgICAgICAgICAgICAgICBHX01JTklOVCwgICAgICAgIC8qIG1p
biAqLworICAgICAgICAgICAgICAgIEdfTUFYSU5ULCAvKiBtYXggKi8KKyAgICAgICAgICAgICAg
ICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworIiwKKyAgICAiYm9vbGVhbiIgPT4gCisiICAgICAg
ICAgICAgICAgIEZBTFNFLCAvKiBkZWZhdWx0ICovCisiLAorICAgICJmbG9hdCIgPT4gCisiICAg
ICAgICAgICAgICAgIEdfTUlORkxPQVQsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAg
ICBHX01BWEZMT0FULCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVm
YXVsdCAqLworIiwKKyAgICAiZG91YmxlIiA9PiAKKyIgICAgICAgICAgICAgICAgR19NSU5ET1VC
TEUsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWERPVUJMRSwgLyogbWF4
ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1bHQgKi8KKyIsCisgICAgInVp
bnQ2NCIgPT4gCisiICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAg
ICAgICAgICBHX01BWFVJTlQ2NCwgLyogbWF4ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAg
IC8qIGRlZmF1bHQgKi8KKyIsCisgICAgInVsb25nIiA9PiAKKyIgICAgICAgICAgICAgICAgMCwg
ICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYVUxPTkcsIC8qIG1heCAqLwor
ICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCisiLAorICAgICJsb25nIiA9
PiAKKyIgICAgICAgICAgICAgICAgR19NSU5MT05HLCAgICAgICAgLyogbWluICovCisgICAgICAg
ICAgICAgICAgR19NQVhMT05HLCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAg
LyogZGVmYXVsdCAqLworIiwKKyAgICAidWludCIgPT4gCisiICAgICAgICAgICAgICAgIDAsICAg
ICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWFVJTlQsIC8qIG1heCAqLworICAg
ICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCisiLAorICAgICJ1c2hvcnQiID0+
IAorIiAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAg
R19NQVhVSU5UMTYsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZh
dWx0ICovCisiLAorICAgICJ1Y2hhciIgPT4gCisiICAgICAgICAgICAgICAgIEdfTUlOSU5UOCwg
ICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYSU5UOCwgLyogbWF4ICovCisg
ICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1bHQgKi8KKyIsCisgICAgImNoYXIiID0+
IAorIiAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAg
R19NQVhVSU5UOCwgLyogbWF4ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1
bHQgKi8KKyIsCisgICAgInN0cmluZyIgPT4gCisiICAgICAgICAgICAgICAgIFwiXCIsIC8qIGRl
ZmF1bHQgKi8KKyIsCispOworCitzdWIgZ2V0SW5zdGFsbFByb3AKK3sKKyAgICBteSAkZ3R5cGUg
PSBzaGlmdDsKKyAgICByZXR1cm4gJHR4dEluc3RhbGxQcm9wTWFweyRndHlwZX0gaWYgZXhpc3Rz
ICR0eHRJbnN0YWxsUHJvcE1hcHskZ3R5cGV9OworICAgIHJldHVybiAwOworfQorCitteSAlbm90
Q3VzdG9tRnVuY3Rpb25Db21tYVdvcmtzT2tBc0lzTWFwID0gKAorCSJnZG9tX2h0bWxfY29sbGVj
dGlvbl9pdGVtIiA9PiAxLAorCSJnZG9tX2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtIiA9PiAx
LAorCSJnZG9tX2h0bWxfaW5wdXRfZWxlbWVudF9zZXRfc2VsZWN0aW9uX3JhbmdlIiA9PiAxLAor
CSJnZG9tX2h0bWxfZm9ybV9lbGVtZW50X3N1Ym1pdCIgPT4gMSwKKwkiZ2RvbV94bWxfaHR0cF9y
ZXF1ZXN0X29wZW4iID0+IDEsCisJImdkb21feG1sX2h0dHBfcmVxdWVzdF9zZXRfcmVxdWVzdF9o
ZWFkZXIiID0+IDEsCisJImdkb21feG1sX2h0dHBfcmVxdWVzdF9zZW5kIiA9PiAxLAorCSJnZG9t
X3htbF9odHRwX3JlcXVlc3RfZ2V0X3Jlc3BvbnNlX2hlYWRlciIgPT4gMSwKKwkiZ2RvbV94bWxf
aHR0cF9yZXF1ZXN0X292ZXJyaWRlX21pbWVfdHlwZSIgPT4gMSwKKwkiZ2RvbV94bWxfaHR0cF9y
ZXF1ZXN0X2Rpc3BhdGNoX2V2ZW50IiA9PiAxLAorCSJnZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0
ZSIgPT4gMSwKKyk7CisKK3N1YiBpc05vdEN1c3RvbUZ1bmN0aW9uQ29tbWFXb3Jrc09rQXNJcyB7
CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gJG5vdEN1c3RvbUZ1bmN0aW9uQ29t
bWFXb3Jrc09rQXNJc01hcHskdHlwZX0gaWYgZXhpc3RzICRub3RDdXN0b21GdW5jdGlvbkNvbW1h
V29ya3NPa0FzSXNNYXB7JHR5cGV9OworICAgIHJldHVybiAwOworfQorCisjICpzaWdoKi4gdGhl
c2UgZm91ciBhcmUgbGlzdGVkIGFzIGN1c3RvbSBmdW5jdGlvbnMsIGJ1dCBhIGRlY2lzaW9uCisj
IHdhcyB0YWtlbiB0byBtYWtlIHRoZSAiY3VzdG9tIiBzdXBwb3J0IGFjdHVhbGx5IGluc2lkZSB0
aGUgY29kZQorIyBnZW5lcmF0b3IsIHJhdGhlciB0aGFuIGhhbmQtY29kaW5nIGl0IHVwIChpbiB3
aGF0IHdvdWxkIGJlIEdET01Ob2RlQ3VzdG9tLmNwcCkKKyMgcmVzdWx0OiB3ZSBuZWVkIHRvIGlk
ZW50aWZ5IHRoZXNlIGZ1bmN0aW9ucywgYW5kIGxldCB0aGVtIHRocm91Z2ggdGhlCisjIGN1c3Rv
bS1za2lwcGluZyBmaWx0ZXIsIHNwZWNpYWwtY2FzZWQuLi4KK215ICVjdXN0b21Ob2RlRnVuY3Rp
b25NYXAgPSAoCisJImdkb21fbm9kZV9hcHBlbmRfY2hpbGQiICA9PiAxLAorCSJnZG9tX25vZGVf
cmVtb3ZlX2NoaWxkIiAgPT4gMSwKKwkiZ2RvbV9ub2RlX2luc2VydF9iZWZvcmUiICA9PiAxLAor
CSJnZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgID0+IDEsCispOworCitzdWIgaXNDdXN0b21Ob2Rl
RnVuY3Rpb24geworICAgIG15ICR0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuICRjdXN0b21Ob2Rl
RnVuY3Rpb25NYXB7JHR5cGV9IGlmIGV4aXN0cyAkY3VzdG9tTm9kZUZ1bmN0aW9uTWFweyR0eXBl
fTsKKyAgICByZXR1cm4gMDsKK30KKworbXkgJW5vdEN1c3RvbUZ1bmN0aW9uTWFwID0gKAorCSJn
ZG9tX25vZGVfaXRlcmF0b3JfbmV4dF9ub2RlIiAgPT4gMSwKKwkiZ2RvbV9ub2RlX2FwcGVuZF9j
aGlsZCIgID0+IDEsCisJImdkb21fbm9kZV9yZW1vdmVfY2hpbGQiICA9PiAxLAorCSJnZG9tX25v
ZGVfaW5zZXJ0X2JlZm9yZSIgID0+IDEsCisJImdkb21fbm9kZV9yZXBsYWNlX2NoaWxkIiAgPT4g
MSwKKwkiZ2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfbm9kZSIgID0+IDEsCisJImdkb21fdHJlZV93
YWxrZXJfZmlyc3RfY2hpbGQiICA9PiAxLAorCSJnZG9tX3RyZWVfd2Fsa2VyX2xhc3RfY2hpbGQi
ICA9PiAxLAorCSJnZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX3NpYmxpbmciICA9PiAxLAorCSJn
ZG9tX3RyZWVfd2Fsa2VyX25leHRfc2libGluZyIgID0+IDEsCisJImdkb21fdHJlZV93YWxrZXJf
cHJldmlvdXNfbm9kZSIgID0+IDEsCisJImdkb21fdHJlZV93YWxrZXJfbmV4dF9ub2RlIiAgPT4g
MSwKKwkiZ2RvbV9ub2RlX2l0ZXJhdG9yX3ByZXZpb3VzX25vZGUiID0+IDEsCispOworCitzdWIg
aXNOb3RDdXN0b21GdW5jdGlvbiB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4g
JG5vdEN1c3RvbUZ1bmN0aW9uTWFweyR0eXBlfSBpZiBleGlzdHMgJG5vdEN1c3RvbUZ1bmN0aW9u
TWFweyR0eXBlfTsKKyAgICByZXR1cm4gMDsKK30KKworCisxOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTIucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTIu
cG0JKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckdPYmplY3RMaWJyYXJ5Mi5wbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMzIEBACisjIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2Ns
QGxrY2wubmV0PgorIyBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRl
c2t0b3Aub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNv
bT4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisjIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCisKKyMgRGVmYXVsdCBMaWNlbmNlIFRl
bXBsYXRlcworbXkgJGxpY2VuY2VUZW1wbGF0ZSA9IDw8ICJFT0YiOworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsXEBsa2NsLm5ldD4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscFxAYXRva2VyLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuCisgKi8KK0VPRgorCitteSAlaW1wbEluY2x1ZGVz
ID0gKCk7CitteSAlaGRySW5jbHVkZXMgPSAoKTsKK215ICVoZHJQcm9wSW5jbHVkZXMgPSAoKTsK
K215ICVpbXBsVHlwZWRlZnMgPSAoKTsKKworc3ViIGFkZEluY0JvZHkgeworICAgIG15ICR0eXBl
ID0gc2hpZnQ7CisgICAgbXkgJGhkciA9IGNhbGNJbmNIZHIoJHR5cGUpOworICAgIGlmICgkaGRy
KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7JGhkcn0gPSAxOworICAgIH0KK30KKworc3ViIGFk
ZEluY0hkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAkaGRyID0gY2FsY0luY0hk
cigkdHlwZSk7CisgICAgaWYgKCRoZHIpIHsKKyAgICAgICAgJGhkckluY2x1ZGVzeyRoZHJ9ID0g
MTsKKyAgICB9Cit9CisKK3N1YiBhZGRQcm9wSW5jSGRyIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0
OworICAgIG15ICRoZHI7CisgICAgJGhkciA9IGNhbGNQcm9wSW5jSGRyUHJpdmF0ZSgkdHlwZSk7
CisgICAgaWYgKCRoZHIpIHsKKyAgICAgICAgJGhkclByb3BJbmNsdWRlc3skaGRyfSA9IDE7Cisg
ICAgfQorICAgICRoZHIgPSBjYWxjUHJvcEluY0hkcigkdHlwZSk7CisgICAgaWYgKCRoZHIpIHsK
KyAgICAgICAgJGhkclByb3BJbmNsdWRlc3skaGRyfSA9IDE7CisgICAgfQorfQorCitzdWIgZ2Vu
ZXJhdGVTdGFydAoreworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05h
bWUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjbHND
YXBzID0gc2hpZnQ7CisgICAgbXkgJGxjYXNlX2lmYWNlbmFtZSA9IHNoaWZ0OworICAgIG15ICRo
ZHJOYW1lID0gc2hpZnQ7CisgICAgbXkgJGd1YXJkID0gc2hpZnQ7CisgICAgbXkgJHBhcmVudEdP
YmpUeXBlID0gc2hpZnQ7CisgICAgbXkgJHBhcmVudEhkck5hbWUgPSBzaGlmdDsKKyAgICBteSAk
cGFyZW50Q2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsK
K0dfQkVHSU5fREVDTFMKKworRU9GCisKKyAgICBwdXNoKEBoQm9keVByZSwgJGltcGxDb250ZW50
KTsKKworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworCisjZGVmaW5lIEdET01fVFlQRV8k
e2Nsc0NhcHN9ICAgICAgICAgICAgKCR7bGNhc2VfaWZhY2VuYW1lfV9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBHRE9NXyR7Y2xzQ2Fwc30ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgR0RPTV9UWVBFXyR7Y2xzQ2Fwc30sICR7Y2xhc3NOYW1lfSkpCisjZGVm
aW5lIEdET01fJHtjbHNDYXBzfV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBHRE9NX1RZUEVfJHtjbHNDYXBzfSwgJGNsYXNzTmFtZSlDbGFzcykKKyNk
ZWZpbmUgR0RPTV9JU18ke2Nsc0NhcHN9KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIEdET01fVFlQRV8ke2Nsc0NhcHN9KSkKKyNkZWZpbmUgR0RPTV9JU18k
e2Nsc0NhcHN9X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwg
IEdET01fVFlQRV8ke2Nsc0NhcHN9KSkKKyNkZWZpbmUgR0RPTV8ke2Nsc0NhcHN9X0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIEdET01fVFlQRV8ke2Ns
c0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF8ke2NsYXNzTmFt
ZX1Qcml2YXRlICR7Y2xhc3NOYW1lfVByaXZhdGU7CisKK3N0cnVjdCBfJHtjbGFzc05hbWV9IHsK
KyAgICAke3BhcmVudENsYXNzTmFtZX0gcGFyZW50X2luc3RhbmNlOworICAgICR7Y2xhc3NOYW1l
fVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgXyR7Y2xhc3NOYW1lfUNsYXNzIHsKKyAgICBH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQorJHtsY2Fz
ZV9pZmFjZW5hbWV9X2dldF90eXBlICh2b2lkKTsKKworRU9GCisKKyAgICBwdXNoKEBoQm9keSwg
JGltcGxDb250ZW50KTsKKworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworI2lmbmRlZiAk
e2d1YXJkfV9QUk9QXworI2RlZmluZSAke2d1YXJkfV9QUk9QXworRU9GCisKKyAgICBwdXNoKEBo
Qm9keVByb3BQcmUsICRpbXBsQ29udGVudCk7CisKKyAgICBwdXNoKEBoQm9keVByb3AsICJHX0JF
R0lOX0RFQ0xTXG4iKTsKKworICAgICRoZHJQcm9wSW5jbHVkZXsiZ2xpYi1vYmplY3QuaCJ9ID0g
MTsKKyAgICAkaGRyUHJvcEluY2x1ZGV7Imdkb20vJHtwYXJlbnRIZHJOYW1lfVByaXZhdGUuaCJ9
ID0gMTsKKyAgICAkaGRyUHJvcEluY2x1ZGV7IiR7aW50ZXJmYWNlTmFtZX0uaCJ9ID0gMTsKKwor
ICAgICRpbXBsSW5jbHVkZXN7Imdkb20vJHtwYXJlbnRIZHJOYW1lfS5oIn0gPSAxOworICAgICRp
bXBsSW5jbHVkZXN7IiR7aW50ZXJmYWNlTmFtZX0uaCJ9ID0gMTsKKworICAgICRpbXBsVHlwZWRl
ZnN7IiRjbGFzc05hbWUifSA9IDE7CisgICAgJGltcGxUeXBlZGVmc3siJHtjbGFzc05hbWV9Q2xh
c3MifSA9IDE7CisKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJnbGliLW9iamVjdC5oIgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRk
ZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHByaXZhdGUuaD4gCisjaW5jbHVkZSAi
RE9NV2luZG93LmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNs
dWRlICJOb2RlLmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNs
dWRlICJOYW1lZE5vZGVNYXAuaCIgLyogeXVrazogVE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAq
LworI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIgLyogeXVrazogVE9ETyAtIG1ha2UgdGhpcyBv
cHRpb25hbCAqLworI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiIC8qIHl1a2s6IFRPRE8gLSBt
YWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRlICJDYW52YXNTdHlsZS5oIiAvKiB5dWtrOiBU
T0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRl
IDxnZG9tL0dkb21ET01PYmplY3RQcml2YXRlLmg+IC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMg
b3B0aW9uYWwgKi8KKyNpbmNsdWRlICIke2ludGVyZmFjZU5hbWV9LmgiCisjaW5jbHVkZSA8Z2Rv
bS8ke2hkck5hbWV9Lmg+CisjaW5jbHVkZSA8Z2RvbS8ke2hkck5hbWV9UHJpdmF0ZS5oPgorI2lu
Y2x1ZGUgPGdkb20vJHtoZHJOYW1lfXByb3BzLmg+CisKKyNpbmNsdWRlICJnZG9tL0NvbnZlcnRU
b0dDaGFyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiQ2FudmFzUGl4ZWxBcnJheS5oIgorI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSAiU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAid2Via2l0
bWFyc2hhbC5oIgorI2luY2x1ZGUgPGdkb20vR2RvbUV2ZW50Lmg+CisKKworRU9GCisKKyAgICBw
dXNoKEBjQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAi
RU9GIjsKKworR19CRUdJTl9ERUNMUworCitHX0RFRklORV9UWVBFKCR7Y2xhc3NOYW1lfSwgJHts
Y2FzZV9pZmFjZW5hbWV9LCAke3BhcmVudEdPYmpUeXBlfSk7CisKK3N0cnVjdCBfJHtjbGFzc05h
bWV9UHJpdmF0ZSB7CisgICAgUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IGNvcmVP
YmplY3Q7Cit9OworCitHX0VORF9ERUNMUworCituYW1lc3BhY2UgV2ViS2l0IHsKKworJHtjbGFz
c05hbWV9ICoKK3dyYXAke2ludGVyZmFjZU5hbWV9KFBhc3NSZWZQdHI8V2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfT4gcHJwQ29yZU9iamVjdCkKK3sKKyAgICBSZWZQdHI8V2ViQ29yZTo6JHtpbnRl
cmZhY2VOYW1lfT4gY29yZU9iamVjdCA9IHBycENvcmVPYmplY3Q7CisKKyAgICAke2NsYXNzTmFt
ZX0gKndyYXBwZXIgPSBHRE9NXyR7Y2xzQ2Fwc30oZ19vYmplY3RfbmV3KEdET01fVFlQRV8ke2Ns
c0NhcHN9LCBOVUxMKSk7CisgICAgR2RvbURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBHRE9NX0RP
TV9PQkpFQ1RfR0VUX1BSSVZBVEUoR0RPTV9ET01fT0JKRUNUKHdyYXBwZXIpKTsKKworICAgIFdl
YkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0gKnJhd0NvcmVPYmplY3QgPSBjb3JlT2JqZWN0LmdldCgp
OworICAgIHJhd0NvcmVPYmplY3QtPnJlZigpOworICAgIHByaXYtPmNvcmVPYmplY3QgPSByYXdD
b3JlT2JqZWN0OworCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK1dlYkNvcmU6OiR7aW50ZXJm
YWNlTmFtZX0gKgorY29yZSgke2NsYXNzTmFtZX0gKnJlcXVlc3QpCit7CisgICAgaWYgKHJlcXVl
c3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBHZG9tRE9NT2JqZWN0UHJp
dmF0ZSogcHJpdiA9IEdET01fRE9NX09CSkVDVF9HRVRfUFJJVkFURShHRE9NX0RPTV9PQkpFQ1Qo
cmVxdWVzdCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjoke2ludGVyZmFjZU5h
bWV9ICo+KHByaXYtPmNvcmVPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
RU9GCisgICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOworfQorCitzdWIgY2FsY3Vs
YXRlUHJvcEluY2x1ZGVzIHsKKyAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisgIG15ICRjbGFzc05h
bWUgPSBzaGlmdDsKKyAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKworICBTS0lQUFJPUDog
Zm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAg
ICAgbXkgJHByb3BfbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAg
bXkgJHByb3BOYW1lID0gZGVjYW1lbGl6ZSgkcHJvcF9uYW1lKTsKKyAgICAgICAgbXkgJHByb3Bf
dHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKKyAgICAgICAgbXkgJHR5cGUgPSBn
ZXRHVHlwZSgkcHJvcF90eXBlKTsKKyAgICAgICAgbXkgJGZ1bmN0aW9uU2lnID0gIiRjbGFzc05h
bWUgKnRoaXoiOworICAgICAgICAKKyAgICAgICAgbXkgJHJlZmxlY3QgPSAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07CisgICAgICAgIG15ICRy
ZWZsZWN0VVJMID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UmVmbGVjdFVSTCJ9OworCisgICAgICAgICRpbXBsSW5jbHVkZXN7IkNTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmgifSA9IDEgaWYgJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIn0gPSAxIGlm
ICRwcm9wX3R5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOworCisgICAgICAgICMgc2tpcCBK
YXZhU2NyaXB0Q2FsbEZyYW1lLnR5cGUKKyAgICAgICAgaWYgKCgkcHJvcF9uYW1lIGVxICJ0eXBl
IikgJiYgKCRpbnRlcmZhY2VOYW1lIGVxICJKYXZhU2NyaXB0Q2FsbEZyYW1lIikpeworICAgICAg
ICAgICAgbmV4dCBTS0lQUFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChza2lwUHJvcFRl
bXBvcmFyaWx5KCR0eXBlLCAkcHJvcF90eXBlKSkgeworICAgICAgICAgICAgbmV4dCBTS0lQUFJP
UDsKKyAgICAgICAgfQorCisgICAgICAgIGFkZFByb3BJbmNIZHIoJHByb3BfdHlwZSk7CisgICAg
fQorfQorCitzdWIgZ2VuZXJhdGVQcm9wZXJ0aWVzQm9keVN0YXJ0Cit7CisgICAgJGltcGxDb250
ZW50ID0gPDwgIkVPRiI7CitHX0JFR0lOX0RFQ0xTCisKK2VudW0geworICAgIEJST1dTRVJfRVZF
TlQsCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCBldmVudF9zaWduYWxzW0xB
U1RfU0lHTkFMXSA9IHsgMCwgfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorRU9GCisgICAgcHVz
aChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOworfQorCitzdWIgZ2VuZXJhdGVQcm9wZXJ0aWVz
U2V0R2V0SW5zdGFsbAoreworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRs
Y2FzZV9pZmFjZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xzQ2FwcyA9IHNoaWZ0OworCisgICAg
bXkgQHR4dF9pbnN0YWxsX3Byb3BzID0gKCk7CisgICAgbXkgQHR4dF9zZXRfcHJvcHMgPSAoKTsK
KyAgICBteSBAdHh0X2dldF9wcm9wcyA9ICgpOworCisgICAgbXkgJHByaXZfZm4gPSBHZXRQcml2
Rm4oJGludGVyZmFjZU5hbWUsICR7bGNhc2VfaWZhY2VuYW1lfSwgImdzZWxmIiwgInNlbGYiKTsK
KworICAgIG15ICR0eHRfZ2V0X3Byb3AgPSA8PCAiRU9GIjsKK3N0YXRpYyB2b2lkICR7bGNhc2Vf
aWZhY2VuYW1lfV9fZ2V0X3Byb3BlcnR5X2ZuKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsCisgICAgICAgICAgICAgICAgICAgICBHVmFsdWUgKiB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdQYXJhbVNwZWMgKiBwc3BlYykKK3sKKyAgICAke2NsYXNzTmFtZX0gKnNlbGYgPSBH
RE9NXyR7Y2xzQ2Fwc30ob2JqZWN0KTsKKyAgICAkcHJpdl9mbgorICAgIHN3aXRjaCAocHJvcF9p
ZCkgeworRU9GCisgICAgcHVzaChAdHh0X2dldF9wcm9wcywgJHR4dF9nZXRfcHJvcCk7CisKKyAg
ICBteSAkdHh0X3NldF9wcm9wID0gPDwgIkVPRiI7CitzdGF0aWMgdm9pZCAke2xjYXNlX2lmYWNl
bmFtZX1fX3NldF9wcm9wZXJ0eV9mbihHT2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAor
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgR1ZhbHVlICogdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICBHUGFyYW1TcGVjICogcHNwZWMpCit7CisgICAgJHtjbGFzc05hbWV9ICpzZWxmID0g
R0RPTV8ke2Nsc0NhcHN9KG9iamVjdCk7CisgICAgJHByaXZfZm4KKyAgICBzd2l0Y2ggKHByb3Bf
aWQpIHsKK0VPRgorICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICR0eHRfc2V0X3Byb3ApOworICAg
ICMgSXRlcmF0ZSBvdmVyIHRoZSBpbnRlcmZhY2UgYXR0cmlidXRlcyBhbmQgZ2VuZXJhdGUgYSBw
cm9wZXJ0eSBmb3IKKyAgICAjIGVhY2ggb25lIG9mIHRoZW0uCisgIFNLSVBFTlVNOgorICAgIGZv
cmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAg
IG15ICRwcm9wX25hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15
ICRzZXRwcm9wX25hbWVfZm4gPSAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkcHJvcF9uYW1l
KTsKKyAgICAgICAgbXkgJGdldHByb3BfbmFtZV9mbiA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2Zp
cnN0KCRwcm9wX25hbWUpOworCisgICAgICAgIG15ICRwcm9wTmFtZSA9IGRlY2FtZWxpemUoJHBy
b3BfbmFtZSk7CisgICAgICAgIG15ICRwcm9wQ2FwcyA9IHVjKCRwcm9wTmFtZSk7CisgICAgICAg
IG15ICRwcm9wX3R5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CisgICAgICAgIG15
ICR0eXBlID0gZ2V0R1R5cGUoJHByb3BfdHlwZSk7CisgICAgICAgIG15ICR7cHJvcEVudW19ID0g
IlBST1BfJHtwcm9wQ2Fwc30iOworICAgICAgICBteSAke3Byb3BfZ3R5cGV9ID0gZGVjYW1lbGl6
ZSgkcHJvcF90eXBlKTsKKyAgICAgICAgaWYgKCRwcm9wX2d0eXBlIGVxICJldmVudF90YXJnZXQi
KSB7CisgICAgICAgICAgICAkcHJvcF9ndHlwZSA9ICJub2RlIjsKKyAgICAgICAgfQorICAgICAg
ICBteSAke3Byb3BHVHlwZX0gPSB1YygkcHJvcF9ndHlwZSk7CisgICAgICAgIG15ICRsY2FzZV9n
dHlwZW5hbWUgPSAiZ2RvbV8iIC4gJHByb3BfZ3R5cGU7CisKKyAgICAgICAgbXkgJHJlZmxlY3Qg
PSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In07
CisgICAgICAgIG15ICRyZWZsZWN0VVJMID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiUmVmbGVjdFVSTCJ9OworICAgICAgICBteSAkZ2V0YXJnID0gIiI7Cisg
ICAgICAgIG15ICRzZXRhcmcgPSAiIjsKKyAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1dGVOYW1l
ID0gIiI7CisKKyAgICAgICAgaWYgKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKSB7CisgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJIVE1MTmFtZXMuaCJ9ID0gMTsKKyAgICAgICAgICAgICRjb250
ZW50QXR0cmlidXRlTmFtZSA9ICgoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIGVxICIxIikgPyAk
cHJvcE5hbWUgOiAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpOworICAgICAgICAgICAgJGdldHBy
b3BfbmFtZV9mbiA9ICRyZWZsZWN0VVJMID8gImdldFVSTEF0dHJpYnV0ZSIgOiAiZ2V0QXR0cmli
dXRlIjsKKyAgICAgICAgICAgICRzZXRwcm9wX25hbWVfZm4gPSAiQXR0cmlidXRlIjsKKyAgICAg
ICAgICAgICRnZXRhcmcgPSAiV2ViQ29yZTo6SFRNTE5hbWVzOjoke2NvbnRlbnRBdHRyaWJ1dGVO
YW1lfUF0dHIiOworICAgICAgICAgICAgJHNldGFyZyA9ICJXZWJDb3JlOjpIVE1MTmFtZXM6OiR7
Y29udGVudEF0dHJpYnV0ZU5hbWV9QXR0ciwgIjsKKyAgICAgICAgfQorCisgICAgICAgICRpbXBs
SW5jbHVkZXN7IkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgifSA9IDEgaWYgJHR5cGUgZXEg
IkNTU1N0eWxlRGVjbGFyYXRpb24iOworCisgICAgICAgICMgc2tpcCBKYXZhU2NyaXB0Q2FsbEZy
YW1lLnR5cGUKKyAgICAgICAgaWYgKCgkcHJvcF9uYW1lIGVxICJ0eXBlIikgJiYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJKYXZhU2NyaXB0Q2FsbEZyYW1lIikpeworICAgICAgICAgICAgbmV4dCBTS0lQ
RU5VTTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChza2lwUHJvcFRlbXBvcmFyaWx5KCR0eXBl
LCAkcHJvcF90eXBlKSkgeworICAgICAgICAgICAgbmV4dCBTS0lQRU5VTTsKKyAgICAgICAgfQor
CisgICAgICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICAke3Byb3BFbnVtfSxcbiIpOworCisgICAg
ICAgIG15ICRndHlwZSA9IEdldFByb3BHVHlwZSgkcHJvcF90eXBlKTsKKyAgICAgICAgbXkgJGdw
YXJhbWZsYWcgPSAiR19QQVJBTV9SRUFEQUJMRSI7CisgICAgICAgIG15ICR3cml0ZWFibGUgPSAk
YXR0cmlidXRlLT50eXBlICF+IC9ecmVhZG9ubHkvOworICAgICAgICBteSAkY29uc3QgPSAicmVh
ZC1vbmx5ICI7CisgICAgICAgIGlmICgkcHJvcF9uYW1lIGVxICdsb2NhdGlvbicgJiYgJGludGVy
ZmFjZU5hbWUgZXEgJ0RvY3VtZW50JykgeworICAgICAgICAgICAgbmV4dCBTS0lQRU5VTTsKKyAg
ICAgICAgfQorICAgICAgICAjaWYgKCR3cml0ZWFibGUgJiYgJGN1c3RvbSkgeworICAgICAgICBp
ZiAoJHdyaXRlYWJsZSkgeworICAgICAgICAgICAgJGNvbnN0ID0gInJlYWQtb25seSAoZHVlIHRv
IGN1c3RvbSBmdW5jdGlvbnMgbmVlZGVkIGluIGdkb213ZWJraXQpIjsKKyAgICAgICAgfQorICAg
ICAgICAjIGlmICgkd3JpdGVhYmxlICYmICEkY3VzdG9tKSB7CisgICAgICAgIGlmICgkd3JpdGVh
YmxlKSB7CisgICAgICAgICAgICAkZ3BhcmFtZmxhZyA9ICJHX1BBUkFNX1JFQURXUklURSI7Cisg
ICAgICAgICAgICAkY29uc3QgPSAicmVhZC13cml0ZSAiOworICAgICAgICB9CisKKyAgICAgICAg
bXkgJF9ndHlwZSA9ICRndHlwZTsKKyAgICAgICAgaWYgKCRndHlwZSBlcSAidXNob3J0Iikgewor
ICAgICAgICAgICAgJF9ndHlwZSA9ICJ1aW50IjsgIyB5dWsuCisgICAgICAgIH0KKyAgICAgICAg
JG5pY2sgPSBkZWNhbWVsaXplKCIke2ludGVyZmFjZU5hbWV9XyR7cHJvcE5hbWV9Iik7CisgICAg
ICAgICRsb25nID0gIiR7Y29uc3R9ICR7dHlwZX0gJHtpbnRlcmZhY2VOYW1lfS4ke3Byb3BOYW1l
fSI7CisgICAgICAgIG15ICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ19rbGFzcywgJHtwcm9wRW51bX0sCisgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfJHtfZ3R5cGV9ICgiJHtwcm9wTmFtZX0iLCAvKiBuYW1lICovCisg
ICAgICAgICAgICAgICAgIiRuaWNrIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAg
ICAgICAgICAiJGxvbmciLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9j
IHN0dWZmIGhlcmUgKi8KK0VPRgorICAgICAgICBwdXNoKEB0eHRfaW5zdGFsbF9wcm9wcywgJHR4
dF9pbnN0YWxsX3Byb3ApOworCisgICAgICAgIGlmICgkd3JpdGVhYmxlKSB7CisgICAgICAgICAg
ICBteSAkb2sgPSAwOworICAgICAgICAgICAgbXkgJGNvbnZlcnRfZm4gPSAiIjsKKworICAgICAg
ICAgICAgaWYgKCRndHlwZSBlcSAic3RyaW5nIikgeworICAgICAgICAgICAgICAgICRjb252ZXJ0
X2ZuID0gIldlYkNvcmU6OlN0cmluZzo6ZnJvbVVURjgiOworICAgICAgICAgICAgICAgICRvayA9
IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNpZiAoJGd0eXBlIGVxICJib29sZWFu
IikgeworICAgICAgICAgICAgICAgIGlmICgke2ludGVyZmFjZU5hbWV9IG5lICJET01XaW5kb3ci
KSB7ICNYWFggVE9ETzogc2tpcCAicHV0RGlyZWN0IiBzdHVmZiAtIG5vIGlkZWEgd2hhdCBpdCdz
IGFib3V0IHlldAorICAgICAgICAgICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiZmxvYXQiKSB7CisgICAgICAgICAg
ICAgICAgJG9rID0gMTsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiZG91YmxlIikg
eworICAgICAgICAgICAgICAgIGlmICgke2ludGVyZmFjZU5hbWV9IG5lICJET01XaW5kb3ciKSB7
ICNYWFggVE9ETzogc2tpcCAicHV0RGlyZWN0IiBzdHVmZiAtIG5vIGlkZWEgd2hhdCBpdCdzIGFi
b3V0IHlldAorICAgICAgICAgICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidWludDY0IikgeworICAgICAgICAgICAg
ICAgICRvayA9IDE7CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgInVsb25nIikgewor
ICAgICAgICAgICAgICAgIGlmICgke2ludGVyZmFjZU5hbWV9IG5lICJET01XaW5kb3ciKSB7ICNY
WFggVE9ETzogc2tpcCAicHV0RGlyZWN0IiBzdHVmZiAtIG5vIGlkZWEgd2hhdCBpdCdzIGFib3V0
IHlldAorICAgICAgICAgICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAibG9uZyIpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoJHtpbnRlcmZhY2VOYW1lfSBuZSAiRE9NV2luZG93IikgeyAjWFhYIFRPRE86IHNraXAgInB1
dERpcmVjdCIgc3R1ZmYgLSBubyBpZGVhIHdoYXQgaXQncyBhYm91dCB5ZXQKKyAgICAgICAgICAg
ICAgICAgICAgJG9rID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2lm
ICgkZ3R5cGUgZXEgInVpbnQiKSB7CisgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAgICAg
ICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidXNob3J0IikgeworICAgICAgICAgICAgICAgICRvayA9
IDE7CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgInVjaGFyIikgeworICAgICAgICAg
ICAgICAgICRvayA9IDE7CisgICAgICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImNoYXIiKSB7
CisgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICMg
WFhYIFRPRE8gLSBza2lwIExvY2F0aW9uCisgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUg
ZXEgIkxvY2F0aW9uIikgeworICAgICAgICAgICAgICAgICRvayA9IDA7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICgkb2spIHsKKyAgICAgICAgICAgICAgICBwdXNoKEB0eHRfc2V0
X3Byb3BzLCAiICAgIGNhc2UgJHtwcm9wRW51bX06XG4gICAge1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAdHh0X3NldF9wcm9wcywgIiAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7XG4iKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRlckV4Y2VwdGlvbnN9OworICAgICAgICAg
ICAgICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICIgICAgICAgIGdzZWxmLT5zZXQke3NldHByb3Bf
bmFtZV9mbn0oJHtzZXRhcmd9JHtjb252ZXJ0X2ZufShnX3ZhbHVlX2dldF8kZ3R5cGUgKHZhbHVl
KSkiKTsKKworICAgICAgICAgICAgICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICIsIGVjIikgaWYg
QHskYXR0cmlidXRlLT5zZXR0ZXJFeGNlcHRpb25zfTsKKyAgICAgICAgICAgICAgICBwdXNoKEB0
eHRfc2V0X3Byb3BzLCAiKTtcbiIpOworCisgICAgICAgICAgICAgICAgcHVzaChAdHh0X3NldF9w
cm9wcywgIiAgICAgICAgYnJlYWs7XG4gICAgfVxuIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBwdXNoKEB0eHRfZ2V0X3Byb3BzLCAiICAgY2FzZSAke3Byb3BFbnVtfTpc
biAgICB7XG4iKTsKKworICAgICAgICBteSAkZXhjZXB0aW9uID0gIiI7CisgICAgICAgIGlmIChA
eyRhdHRyaWJ1dGUtPmdldHRlckV4Y2VwdGlvbnN9KSB7CisgICAgICAgICAgICAkZXhjZXB0aW9u
ID0gImVjIjsKKyAgICAgICAgICAgIHB1c2goQHR4dF9nZXRfcHJvcHMsICIgICAgICAgIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CisgICAgICAgIH0KKworICAgICAgICBteSAk
Y29udmVydF9mbiA9ICIiOworICAgICAgICBteSAkcG9zdF9jb252ZXJ0X2ZuID0gIiI7CisgICAg
ICAgIG15ICRkb25lID0gMDsKKyAgICAgICAgaWYgKCRndHlwZSBlcSAic3RyaW5nIikgeworICAg
ICAgICAgICAgcHVzaChAdHh0X2dldF9wcm9wcywgIiAgICAgICAgZ192YWx1ZV90YWtlX3N0cmlu
ZyAodmFsdWUsIGNvcHlBc0djaGFyKGdzZWxmLT4ke2dldHByb3BfbmFtZV9mbn0oJHtnZXRhcmd9
JHtleGNlcHRpb259KSkpO1xuIik7CisgICAgICAgICAgICAkZG9uZSA9IDE7CisgICAgICAgIH0K
KyAgICAgICAgZWxzaWYgKCRndHlwZSBlcSAib2JqZWN0IikgeworICAgICAgICAgICAgbXkgJGRv
bW9ialR5cGUgPSAiR0RPTSIuJHByb3BfdHlwZTsKKworICAgICAgICAgICAgJHR4dF9nZXRfcHJv
cCA9IDw8ICJFT0YiOworICAgICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OiR7cHJvcF90eXBlfT4g
cHRyID0gZ3NlbGYtPiR7Z2V0cHJvcF9uYW1lX2ZufSgke2dldGFyZ30ke2V4Y2VwdGlvbn0pOwor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBXZWJLaXQ6OnRvR0RPTShwdHIuZ2V0
KCkpKTsKK0VPRgorICAgICAgICAgICAgcHVzaChAdHh0X2dldF9wcm9wcywgJHR4dF9nZXRfcHJv
cCk7CisKKyAgICAgICAgICAgICRkb25lID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
JGRvbmUpIHsKKyAgICAgICAgICAgIHB1c2goQHR4dF9nZXRfcHJvcHMsICIgICAgICAgIGdfdmFs
dWVfc2V0XyRfZ3R5cGUgKHZhbHVlLCAke2NvbnZlcnRfZm59Z3NlbGYtPiR7Z2V0cHJvcF9uYW1l
X2ZufSgke2dldGFyZ30ke2V4Y2VwdGlvbn0pJHtwb3N0X2NvbnZlcnRfZm59KTtcbiIpOworICAg
ICAgICB9CisKKyAgICAgICAgcHVzaChAdHh0X2dldF9wcm9wcywgIiAgICAgICAgYnJlYWs7XG4g
ICAgfVxuIik7CisKKyAgICAgICAgIyBpcyB0aGlzIF9lbnRpcmVseV8gbmVjZXNzYXJ5Pz8/Cisg
ICAgICAgICMgY2FuIGl0IGJlIGRvbmUgd2l0aCBnZW5lcmljIGdfcGFyYW1fc3BlY19ndHlwZQor
ICAgICAgICAjIGFuZCBnZXR0aW5nIGEgZmV3IHRoaW5ncywgaWdub3JpbmcgdGhlIG1pbi1tYXgg
Zm9yIGV4YW1wbGU/CisgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gIi8qIFRPRE8hICRndHlw
ZSAqL1xuIjsKKyAgICAgICAgbXkgJHRtID0gZ2V0SW5zdGFsbFByb3AoJGd0eXBlKTsKKyAgICAg
ICAgaWYgKCR0bSkgeworICAgICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSAkdG07CisgICAg
ICAgIH0gZWxzaWYgKCRndHlwZSBlcSAib2JqZWN0IikgeworICAgICAgICAgICAgJHR4dF9pbnN0
YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBHRE9NX1RZUEVfJHtwcm9wR1R5
cGV9LCAvKiBnb2JqZWN0IHR5cGUgKi8KK0VPRgorICAgICAgICB9CisgICAgICAgIHB1c2goQHR4
dF9pbnN0YWxsX3Byb3BzLCAkdHh0X2luc3RhbGxfcHJvcCk7CisgICAgICAgICR0eHRfaW5zdGFs
bF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSR7Z3BhcmFt
ZmxhZ30pKTsKKworRU9GCisgICAgICAgIHB1c2goQHR4dF9pbnN0YWxsX3Byb3BzLCAkdHh0X2lu
c3RhbGxfcHJvcCk7CisgICAgfQorCisgICAgcHVzaChAY0JvZHlQcml2LCAifTtcblxuIik7CisK
KworICAgICR0eHRfZ2V0X3Byb3AgPSA8PCAiRU9GIjsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KK0VPRgorICAgIHB1c2goQHR4dF9nZXRfcHJvcHMs
ICR0eHRfZ2V0X3Byb3ApOworCisgICAgJHR4dF9zZXRfcHJvcCA9IDw8ICJFT0YiOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3Qs
IHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorRU9GCisgICAgcHVz
aChAdHh0X3NldF9wcm9wcywgJHR4dF9zZXRfcHJvcCk7CisKKyAgICBteSAkdHh0X3NldF9nZXRf
cHJvcHMgPSA8PCAiRU9GIjsKKyAgICBjYXNlIFBST1BfQUdFOgorICAgICAgICBzZWxmLT5hZ2Ug
PSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBS
T1BfQUdFOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHNlbGYtPmFnZSk7CisgICAg
ICAgIGJyZWFrOworCisgICAgICAgICsgICBnX3ZhbHVlX2luaXQoJnBhcmFtc1swXSwgR19UWVBF
X0ZST01fSU5TVEFOQ0Uob2JqZWN0KSk7CisgICAgICAgICsgICBnX3ZhbHVlX3NldF9pbnN0YW5j
ZSgmcGFyYW1zWzBdLCAoZ3BvaW50ZXIpb2JqZWN0KTsKKworRU9GCisKKyAgICAjIFRPRE86IHdv
cmsgb3V0IGlmIGl0J3MgYXBwcm9wcmlhdGUgdG8gc3BsaXQgdGhpcyBpbnRvIG1hbnkgZGlmZmVy
ZW50CisgICAgIyBzaWduYWxzIGUuZy4gImNsaWNrIiBldGMuCisgICAgbXkgJHR4dF9pbnN0YWxs
X3NpZ25hbHMgPSAiIjsKKworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IiBv
cgorICAgICAgICAkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZSIgb3IKKyAgICAgICAgJGludGVyZmFj
ZU5hbWUgZXEgIlhNTEh0dHBSZXF1ZXN0IikgeworICAgICAgICAkdHh0X2luc3RhbGxfc2lnbmFs
cyA9IDw8ICJFT0YiOworICAgIGV2ZW50X3NpZ25hbHNbQlJPV1NFUl9FVkVOVF0gPSBnX3NpZ25h
bF9uZXcoImJyb3dzZXItZXZlbnQiLAorICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhyZXF1ZXN0
Q2xhc3MpLAorICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lH
TkFMX0FDVElPTiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19TSUdOQUxfREVUQUlMRUQgICksCisgICAgICAgIDAsCisgICAgICAgIE5VTEwsCisgICAgICAg
IE5VTEwsCisgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9CT09MRUFOLAorICAg
ICAgICBHX1RZUEVfTk9ORSwgMiwKKyAgICAgICAgR0RPTV9UWVBFX0VWRU5ULCBHX1RZUEVfQk9P
TEVBTik7CitFT0YKKyAgICB9CisKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKworc3Rh
dGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBHZG9tRE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gR0RPTV9ET01fT0JKRUNUKG9iamVjdCk7
CisgICAgR2RvbURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBkb21fb2JqZWN0LT5wcml2OworCisg
ICAgaWYgKHByaXYtPmNvcmVPYmplY3QgIT0gMCkgeworCVdlYktpdDo6R0RPTU9iamVjdENhY2hl
Ojpmb3JnZXRET01PYmplY3QocHJpdi0+Y29yZU9iamVjdCk7CisJc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6JHtpbnRlcmZhY2VOYW1lfSAqPihwcml2LT5jb3JlT2JqZWN0KS0+ZGVyZWYoKTsKKwlwcml2
LT5jb3JlT2JqZWN0ID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUygke2xjYXNlX2lm
YWNlbmFtZX1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworQHR4dF9zZXRf
cHJvcHMKKworQHR4dF9nZXRfcHJvcHMKKworc3RhdGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9
X2NsYXNzX2luaXQoJHtjbGFzc05hbWV9Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MgKmdfa2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdENsYXNzKTsKKyAgICBn
X2tsYXNzLT5maW5hbGl6ZSA9ICR7bGNhc2VfaWZhY2VuYW1lfV9maW5hbGl6ZTsKKyAgICBnX2ts
YXNzLT5zZXRfcHJvcGVydHkgPSAke2xjYXNlX2lmYWNlbmFtZX1fX3NldF9wcm9wZXJ0eV9mbjsK
KyAgICBnX2tsYXNzLT5nZXRfcHJvcGVydHkgPSAke2xjYXNlX2lmYWNlbmFtZX1fX2dldF9wcm9w
ZXJ0eV9mbjsKKworQHR4dF9pbnN0YWxsX3Byb3BzCisKKyR0eHRfaW5zdGFsbF9zaWduYWxzCit9
CisKK3N0YXRpYyB2b2lkICR7bGNhc2VfaWZhY2VuYW1lfV9pbml0KCR7Y2xhc3NOYW1lfSogcmVx
dWVzdCkKK3sKK30KKworRU9GCisgICAgcHVzaChAY0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOwor
fQorCitzdWIgZ2VuZXJhdGVCb2R5UHJpdgoreworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owor
ICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0
OworICAgIG15ICRwYXJlbnRIZHJOYW1lID0gc2hpZnQ7CisgICAgbXkgJGd1YXJkID0gc2hpZnQ7
CisKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dkb20ke2ludGVyZmFjZU5hbWV9UHJpdmF0ZS5o
In0gPSAxOworICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworCisjaWZuZGVmICR7Z3VhcmR9
X1BSSVZfCisjZGVmaW5lICR7Z3VhcmR9X1BSSVZfCisjaW5jbHVkZSAiZ2xpYi1vYmplY3QuaCIK
KyNpbmNsdWRlICJnZG9tLyR7cGFyZW50SGRyTmFtZX0uaCIKKyNpbmNsdWRlICIke2ludGVyZmFj
ZU5hbWV9LmgiCitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKKyAg
ICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKy8vfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK3R5
cGVkZWYgc3RydWN0IF8ke2NsYXNzTmFtZX0gJHtjbGFzc05hbWV9OworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKyAgICAke2NsYXNzTmFtZX0gKgorICAgIHdyYXAke2ludGVyZmFjZU5hbWV9KFBhc3NS
ZWZQdHI8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfT4gcHJwQ29yZU9iamVjdCk7CisKKyAgICBX
ZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICoKKyAgICBjb3JlKCR7Y2xhc3NOYW1lfSAqcmVxdWVz
dCk7CitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKKyAgICBpZiAo
ICF1c2VzTWFudWFsVG9HRE9NSW1wbGVtZW50YXRpb24oJGludGVyZmFjZU5hbWUpKSB7CisgICAg
ICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworCisgICAgZ3BvaW50ZXIKKyAgICB0b0dET00o
V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSogbm9kZSk7CitFT0YKKyAgICAgICAgcHVzaChAaEJv
ZHlQcml2LCAkaW1wbENvbnRlbnQpOworICAgIH0KKworICAgICRpbXBsQ29udGVudCA9IDw8ICJF
T0YiOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiAke2d1YXJkfV9QUklWXyAq
LworCitFT0YKKyAgICBwdXNoKEBoQm9keVByaXYsICRpbXBsQ29udGVudCk7CisKKyAgICAkaW1w
bEluY2x1ZGVzeyIke2ludGVyZmFjZU5hbWV9LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3si
Z2RvbS9HZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIn0gPSAxOworfQorCitzdWIgZ2VuZXJhdGVGdW5j
dGlvbnMKK3sKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NOYW1lID0g
c2hpZnQ7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKworICBMT09QOgorICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworCW15ICRmbl9z
aWdfbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworCW15ICRmbl9zaWdfdHlwZSA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlOworCW15ICRmdW5jdGlvbk5hbWUgPSAiZ2RvbV8i
IC4gZGVjYW1lbGl6ZSgkaW50ZXJmYWNlTmFtZSkgLiAiXyIgLiBkZWNhbWVsaXplKCRmbl9zaWdf
bmFtZSk7CisJbXkgJHJldHVyblR5cGUgPSBnZXRHVHlwZSgkZm5fc2lnX3R5cGUpOworCW15ICRy
ZXRfaXNfY2xzX3R5cGUgPSBpc0dET01DbGFzc1R5cGUoJGZuX3NpZ190eXBlKTsKKworCW15ICRm
dW5jdGlvblNpZyA9ICIkY2xhc3NOYW1lICp0aGl6IjsKKworCW15ICRjYWxsX2ltcGxfcGFyYW1z
ID0gIiI7CisJbXkgJGdkb21fZm5fcHJlZml4ID0gImdkb21fIiAuIGRlY2FtZWxpemUoJGZuX3Np
Z190eXBlKTsKKworCWlmICgkZnVuY3Rpb25OYW1lIGVxICJnZG9tX2Nzc19zdHlsZV9kZWNsYXJh
dGlvbl9zZXRfcHJvcGVydHkiKSB7CisJICAgICMgcmVzZXJ2ZWQgbmFtZSBjbGFzaCBpbiBnbGli
ISBhcnJyZ2guLi4KKwkgICAgJGZ1bmN0aW9uTmFtZSA9ICJnZG9tX2Nzc19zdHlsZV9kZWNsYXJh
dGlvbl9zZXRfY3NzX3Byb3BlcnR5IjsKKwl9CisJIyBYWFggc2tpcCBDb21wYXJlSG93IGZ1bmN0
aW9ucyBmb3Igbm93CisJaWYgKCRmdW5jdGlvbk5hbWUgZXEgImdkb21fcmFuZ2VfY29tcGFyZV9i
b3VuZGFyeV9wb2ludHMiKSB7CisJICAgIHB1c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogc2tp
cHBpbmcgQ29tcGFyZUhvdyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAg
IHB1c2goQGNCb2R5LCAiXG4vKiBYWFggVE9ETzogc2tpcHBpbmcgQ29tcGFyZUhvdyBmdW5jdGlv
biAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAgIG5leHQgTE9PUDsKKwl9CisKKwkjIFhY
WCBza2lwIFNWR0RvY3VtZW50IGZ1bmN0aW9ucyBmb3Igbm93CisJaWYgKCRyZXR1cm5UeXBlIGVx
ICJHZG9tU1ZHRG9jdW1lbnQgKiIpIHsKKwkgICAgcHVzaChAaEJvZHksICJcbi8qIFhYWCBUT0RP
OiBza2lwcGluZyBTVkdEb2N1bWVudCBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7
CisJICAgIHB1c2goQGNCb2R5LCAiXG4vKiBYWFggVE9ETzogc2tpcHBpbmcgU1ZHRG9jdW1lbnQg
ZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBuZXh0IExPT1A7CisJfQor
CisJbXkgJGlzX2N1c3RvbV9mbiA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tIn07CisKKwkjIFhYWCBkb24ndCBza2lwIHNvbWUgY3VzdG9tIGZ1bmN0
aW9ucyBmb3Igbm93LCB0aGV5IHNlZW0gdG8gd29yayBhcy1pcworCWlmIChpc05vdEN1c3RvbUZ1
bmN0aW9uQ29tbWFXb3Jrc09rQXNJcygkZnVuY3Rpb25OYW1lKSkgeyAKKwkgICAgJGlzX2N1c3Rv
bV9mbiA9IDA7CisJfQorCSMgWFhYIHNraXAgc29tZSBjdXN0b20gZnVuY3Rpb25zIGZvciBub3cu
CisJaWYgKCRpc19jdXN0b21fZm4gJiYgCisJICAgIG5vdCBpc05vdEN1c3RvbUZ1bmN0aW9uKCRm
dW5jdGlvbk5hbWUpKSB7CisJICAgIHB1c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogY3VzdG9t
IGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSAqL1xuXG4iKTsKKwkgICAgcHVzaChAY0JvZHksICJc
bi8qIFhYWCBUT0RPOiBjdXN0b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOwor
CSAgICBuZXh0IExPT1A7CisJfQorCisJZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSkgeworCSAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOworCSAg
ICBhZGRJbmNCb2R5KCRwYXJhbUlETFR5cGUpOworCSAgICBhZGRJbmNIZHIoJHBhcmFtSURMVHlw
ZSk7CisJICAgIG15ICRwYXJhbVR5cGUgPSBnZXRHVHlwZSgkcGFyYW1JRExUeXBlKTsKKwkgICAg
bXkgJHBhcmFtTmFtZSA9IGRlY2FtZWxpemUoJHBhcmFtLT5uYW1lKTsKKworCSAgICAkZnVuY3Rp
b25TaWcgLj0gIiwgJHBhcmFtVHlwZSAkcGFyYW1OYW1lIjsKKworCSAgICBteSAkcGFyYW1faXNf
Y2xzX3R5cGUgPSBpc0dET01DbGFzc1R5cGUoJHBhcmFtSURMVHlwZSk7CisJICAgIGlmICgkcGFy
YW1faXNfY2xzX3R5cGUpIHsKKyAgICAgICAgICAgIGlmICgkcGFyYW1JRExUeXBlIG5lICJET01P
YmplY3QiICYmCisgICAgICAgICAgICAgICAgJHBhcmFtSURMVHlwZSBuZSAiRXZlbnRUYXJnZXQi
KSB7CisgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siZ2RvbS9HZG9tJHtwYXJhbUlETFR5
cGV9UHJpdmF0ZS5oIn0gPSAxOworICAgICAgICAgICAgICAgICMgdGhpcyBpc24ndCBzdHJpY3Rs
eSBuZWNlc3NhcnkgYnV0IG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAjIGF1dG8tZ2VuZXJh
dGVkIGZpbGVzIG5lZWRlZCBpdCBzby4uLi4KKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyIke3BhcmFtSURMVHlwZX0uaCJ9ID0gMTsKKyAgICAgICAgICAgIH0KKwkgICAgfQorCSAgICBp
ZiAoJHBhcmFtX2lzX2Nsc190eXBlIHx8ICgkcGFyYW1JRExUeXBlIGVxICJET01TdHJpbmciKSkg
eworICAgICAgICAgICAgJHBhcmFtTmFtZSA9ICJfZ18iIC4gJHBhcmFtTmFtZTsKKwkgICAgfQor
CSAgICBpZiAoJGNhbGxfaW1wbF9wYXJhbXMpIHsKKyAgICAgICAgICAgICRjYWxsX2ltcGxfcGFy
YW1zIC49ICIsICRwYXJhbU5hbWUiOworCSAgICB9IGVsc2UgeworICAgICAgICAgICAgJGNhbGxf
aW1wbF9wYXJhbXMgPSAiJHBhcmFtTmFtZSI7CisJICAgIH0KKwl9CisKKyAgICBpZiAoJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVudEhhbmRs
aW5nIn0pIHsKKworCSAgICBpZiAoJGNhbGxfaW1wbF9wYXJhbXMpIHsKKyAgICAgICAgICAgICRj
YWxsX2ltcGxfcGFyYW1zIC49ICIsICZjYWxsU3RhY2siOworCSAgICB9IGVsc2UgeworICAgICAg
ICAgICAgJGNhbGxfaW1wbF9wYXJhbXMgPSAiJmNhbGxTdGFjayI7CisJICAgIH0KKyAgICAgICAg
JGltcGxJbmNsdWRlc3siU2NyaXB0Q2FsbFN0YWNrLmgifSA9IDE7CisgICAgfQorCisJYWRkSW5j
SGRyKCRmbl9zaWdfdHlwZSwgJGhkckluY2x1ZGVzKTsKKworCWlmICgkcmV0dXJuVHlwZSBuZSAi
dm9pZCIpIHsKKworCSAgICBpZiAoJHJldF9pc19jbHNfdHlwZSkgeworICAgICAgICAgICAgaWYg
KCRmbl9zaWdfdHlwZSBlcSAiRE9NT2JqZWN0IikgeworICAgICAgICAgICAgICAgICMgWFhYID8/
Pz8gd3RmPz8gOikgY29waWVkIGZyb20ganNnZW5lcmF0b3IuCisgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siZ2RvbS9HZG9tQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgifSA9IDE7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7Zm5f
c2lnX3R5cGV9LmgifSA9IDE7CisgICAgICAgICAgICAgICAgJGNCb2R5R0RPTXsiZ3BvaW50ZXIg
dG9HRE9NKFdlYkNvcmU6OiR7Zm5fc2lnX3R5cGV9KiBub2RlKTsifSA9IDE7CisgICAgICAgICAg
ICB9CisJICAgIH0KKwl9CisKKwkjIFhYWCBza2lwIGN1c3RvbSBmdW5jdGlvbnMgZm9yIG5vdwor
CSMgYnV0IHNraXAgZnJvbSBoZXJlIHRvIGFsbG93IHNvbWUgaGVhZGVycyB0byBiZSBjcmVhdGVk
CisJIyBmb3IgYSBzdWNjZXNzZnVsIGNvbXBpbGUuCisJaWYgKCRpc19jdXN0b21fZm4gJiYKKyAg
ICAgICAgbm90IGlzQ3VzdG9tTm9kZUZ1bmN0aW9uKCRmdW5jdGlvbk5hbWUpKSB7CisgICAgICAg
IHB1c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogY3VzdG9tIGZ1bmN0aW9uICR7ZnVuY3Rpb25O
YW1lfSAqL1xuXG4iKTsKKyAgICAgICAgcHVzaChAY0JvZHksICJcbi8qIFhYWCBUT0RPOiBjdXN0
b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBuZXh0IExPT1A7CisJ
fQorCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisgICAgICAgICMgWFhYIHNraXAgY3VzdG9tIGFy
Z3VtZW50IGhhbmRsaW5nIC0gY3VycmVudGx5IGluIENvbnNvbGUuaWRsCisgICAgICAgICMgcmVx
dWlyZXMgRXhlY1N0YXRlIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgdW50aWwgIzE2NDAxIGlzIGFj
Y2VwdGVkLgorCSAgICBwdXNoKEBoQm9keSwgIlxuLyogWFhYIFRPRE86IGN1c3RvbSBhcmd1bWVu
dCBoYW5kbGluZyAke2Z1bmN0aW9uTmFtZX0gKi9cblxuIik7CisJICAgIHB1c2goQGNCb2R5LCAi
XG4vKiBYWFggVE9ETzogY3VzdG9tIGFyZ3VtZW50IGhhbmRsaW5nICR7ZnVuY3Rpb25OYW1lfSAq
L1xuXG4iKTsKKwkgICAgbmV4dCBMT09QOworICAgIH0KKwlteSAkX3JldHVyblR5cGUgPSAkcmV0
dXJuVHlwZTsKKwlteSAkZG9tb2JqVHlwZSA9ICJHRE9NIi4kZm5fc2lnX3R5cGU7CisJaWYgKCRm
bl9zaWdfdHlwZSBlcSAnRE9NT2JqZWN0JyAmJgorCSAgICAkZnVuY3Rpb25OYW1lIGVxICdnZG9t
X2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X2NvbnRleHQnKSB7CisJICAgICMgWFhYIEhBQ0shCisJ
ICAgICRfcmV0dXJuVHlwZSA9ICdHZG9tQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAqJzsKKwkgICAg
JGRvbW9ialR5cGUgPSAnR0RPTUNhbnZhc1JlbmRlcmluZ0NvbnRleHQnOworCSAgICAkZ2RvbV9m
bl9wcmVmaXggPSAnZ2RvbV9jYW52YXNfcmVuZGVyaW5nX2NvbnRleHQnOworCSAgICBuZXh0IExP
T1A7CSAgICAgICAjIFhYWCAtIHRvbyBpbnZvbHZlZCBmb3Igbm93LiAgc2tpcCBpdC4KKwkgICAg
IyBtdXN0IGNvbnZlcnQgdG8gYSBET01PYmplY3QgKFRPRE86IGJyb3dzZSBKUyBjb2RlIHRvIGZp
bmQgb3V0IGhvdykKKwkgICAgIyBiZXR0ZXI6IHdvcmsgb3V0IGhvdyB0byBjcmVhdGUgYSBHRE9N
RG9tT2JqZWN0CisJfQorCisJaWYgKCRmbl9zaWdfdHlwZSBlcSAnRE9NT2JqZWN0JyAmJgorCSAg
ICAkZnVuY3Rpb25OYW1lIGVxICdnZG9tX2RvY3VtZW50X2dldF9jc3NfY2FudmFzX2NvbnRleHQn
KSB7CisJICAgICMgWFhYIEhBQ0shCisJICAgICRfcmV0dXJuVHlwZSA9ICdHZG9tQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEIConOworCSAgICAkZG9tb2JqVHlwZSA9ICdHRE9NQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEJzsKKwkgICAgJGdkb21fZm5fcHJlZml4ID0gJ2dkb21fY2FudmFzX3JlbmRl
cmluZ19jb250ZXh0MmQnOworCSAgICBuZXh0IExPT1A7CSAgICAgICAjIFhYWCAtIHRvbyBpbnZv
bHZlZCBmb3Igbm93LiAgc2tpcCBpdC4KKwkgICAgIyBtdXN0IGNvbnZlcnQgdG8gYSBET01PYmpl
Y3QgKFRPRE86IGJyb3dzZSBKUyBjb2RlIHRvIGZpbmQgb3V0IGhvdykKKwkgICAgIyBiZXR0ZXI6
IHdvcmsgb3V0IGhvdyB0byBjcmVhdGUgYSBHRE9NRG9tT2JqZWN0CisJfQorCisKKwlwdXNoKEBo
Qm9keSwgIldFQktJVF9BUEkgJF9yZXR1cm5UeXBlXG4kZnVuY3Rpb25OYW1lICgkZnVuY3Rpb25T
aWcpO1xuXG4iKTsKKworCXB1c2goQGNCb2R5LCAiJF9yZXR1cm5UeXBlXG4kZnVuY3Rpb25OYW1l
ICgkZnVuY3Rpb25TaWcpXG57XG4iKTsKKworICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAg
ICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAg
cHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhleGVj
LCBhcmdzLCAkbnVtUGFyYW1ldGVycyk7XG4iKTsKKyAgICB9CisKKwlwdXNoKEBjQm9keSwgIiAg
ICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICogaXRlbSA9IFdlYktpdDo6Y29yZSh0aGl6KTtc
biIpOworCWlmICgkcmV0dXJuVHlwZSBuZSAidm9pZCIpIHsKKwkgICAgIyBYWFggVE9ETzogcmV0
dXJuIHByb3BlciBkZWZhdWx0IHJlc3VsdAorCSAgICBwdXNoKEBjQm9keSwgIiAgICBnX3JldHVy
bl92YWxfaWZfZmFpbCAoaXRlbSwgMCk7XG4iKTsKKwl9IGVsc2UgeworCSAgICBwdXNoKEBjQm9k
eSwgIiAgICBnX3JldHVybl9pZl9mYWlsIChpdGVtKTtcbiIpOworCX0KKworCWZvcmVhY2ggbXkg
JHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKwkgICAgbXkgJHBhcmFtTmFtZSA9
IGRlY2FtZWxpemUoJHBhcmFtLT5uYW1lKTsKKwkgICAgbXkgJHBhcmFtSURMVHlwZSA9ICRwYXJh
bS0+dHlwZTsKKwkgICAgbXkgJHBhcmFtVHlwZUlzUHJpbWl0aXZlID0gJGNvZGVHZW5lcmF0b3It
PklzUHJpbWl0aXZlVHlwZSgkcGFyYW1JRExUeXBlKTsKKwkgICAgYWRkSW5jSGRyKCRwYXJhbUlE
TFR5cGUsICRoZHJJbmNsdWRlcyk7CisJfQorCisJJHJldHVyblBhcmFtTmFtZSA9ICIiOworCWZv
cmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKwkgICAgbXkgJHBh
cmFtSURMVHlwZSA9ICRwYXJhbS0+dHlwZTsKKwkgICAgbXkgJHBhcmFtVHlwZSA9IGdldEdUeXBl
KCRwYXJhbUlETFR5cGUpOworCSAgICBteSAkcGFyYW1OYW1lID0gZGVjYW1lbGl6ZSgkcGFyYW0t
Pm5hbWUpOworCisJICAgIG15ICRwYXJhbV9pc19jbHNfdHlwZSA9IGlzR0RPTUNsYXNzVHlwZSgk
cGFyYW1JRExUeXBlKTsKKwkgICAgIyBIQUNLIQorCSAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAi
Z2RvbV94bWxfaHR0cF9yZXF1ZXN0X29wZW4iICYmCisgICAgICAgICAgICAkcGFyYW0tPm5hbWUg
ZXEgInVybCIpIHsKKworICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6S1VS
TCBfZ18ke3BhcmFtTmFtZX0gPSBXZWJDb3JlOjpLVVJMKCRwYXJhbU5hbWUpO1xuIik7CisJICAg
IH0gZWxzaWYgKCRwYXJhbUlETFR5cGUgZXEgIkRPTVN0cmluZyIpIHsKKyAgICAgICAgICAgIHB1
c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6OlN0cmluZyBfZ18ke3BhcmFtTmFtZX0gPSBXZWJDb3Jl
OjpTdHJpbmc6OmZyb21VVEY4KCRwYXJhbU5hbWUpO1xuIik7CisJICAgIH0KKwkgICAgaWYgKCRw
YXJhbV9pc19jbHNfdHlwZSkgeworICAgICAgICAgICAgbXkgJHBhcmFtX2dkb21fZm4gPSAiZ2Rv
bV8iIC4gZGVjYW1lbGl6ZSgkcGFyYW1JRExUeXBlKTsKKyAgICAgICAgICAgIGlmICgkcGFyYW1J
RExUeXBlIGVxICJFdmVudFRhcmdldCIpIHsKKyAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVz
eyJnZG9tL0dkb21Ob2RlUHJpdmF0ZS5oIn0gPSAxOworICAgICAgICAgICAgICAgIHB1c2goQGNC
b2R5LCAiICAgIFdlYkNvcmU6Ok5vZGUgKiBfZ18ke3BhcmFtTmFtZX0gPSBXZWJLaXQ6OmNvcmUo
JHBhcmFtTmFtZSk7XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6JHtwYXJhbUlETFR5cGV9ICogX2dfJHtwYXJhbU5h
bWV9ID0gV2ViS2l0Ojpjb3JlKCRwYXJhbU5hbWUpO1xuIik7CisgICAgICAgICAgICB9CisJICAg
IH0KKwkgICAgJHJldHVyblBhcmFtTmFtZSA9ICJfZ18iLiRwYXJhbU5hbWUgaWYgJHBhcmFtLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuIn07CisJfQorCisJbXkgJGFzc2lnbiA9ICIiOwor
CW15ICRhc3NpZ25fcHJlID0gIiI7CisJbXkgJGFzc2lnbl9wb3N0ID0gIiI7CisJJGdfcmVzID0g
MDsKKwlpZiAoJHJldHVyblR5cGUgbmUgInZvaWQiICYmICEkaXNfY3VzdG9tX2ZuKSB7CisKKwkg
ICAgaWYgKCRyZXRfaXNfY2xzX3R5cGUpIHsKKyAgICAgICAgICAgICRhc3NpZ24gPSAiUGFzc1Jl
ZlB0cjxXZWJDb3JlOjoke2ZuX3NpZ190eXBlfT4gZ19yZXMgPSAiOworICAgICAgICAgICAgJGFz
c2lnbl9wcmUgPSAiV1RGOjpnZXRQdHIoIjsKKyAgICAgICAgICAgICRhc3NpZ25fcG9zdCA9ICIp
IjsKKwkgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRhc3NpZ24gPSAiJHtfcmV0dXJuVHlwZX0g
cmVzID0gIjsKKwkgICAgfQorCX0KKwlteSAkZXhjZXB0aW9ucyA9ICIiOworCWlmIChAeyRmdW5j
dGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKKwkgICAgcHVzaChAY0JvZHksICIgICAgV2ViQ29y
ZTo6RXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKwkgICAgaWYgKCR7Y2FsbF9pbXBsX3BhcmFt
c30gbmUgIiIpIHsKKyAgICAgICAgICAgICRleGNlcHRpb25zID0gIiwgZWMiOworCSAgICB9IGVs
c2UgeworICAgICAgICAgICAgJGV4Y2VwdGlvbnMgPSAiZWMiOworCSAgICB9CisJfQorCisJaWYg
KGlzQ3VzdG9tTm9kZUZ1bmN0aW9uKCRmdW5jdGlvbk5hbWUpKSB7CisJICAgIG15ICRjdXN0b21f
Z2RvbV9ub2RlX2FwcGVuZF9jaGlsZCA9IDw8ICJFT0YiOworICAgIGJvb2wgb2sgPSBpdGVtLT4k
e2ZuX3NpZ19uYW1lfSgke2NhbGxfaW1wbF9wYXJhbXN9JHtleGNlcHRpb25zfSk7CisgICAgaWYg
KG9rKQorICAgIHsKKyAgICAgICAgJHtfcmV0dXJuVHlwZX0gcmVzID0gc3RhdGljX2Nhc3Q8JHtf
cmV0dXJuVHlwZX0+KFdlYktpdDo6dG9HRE9NKCRyZXR1cm5QYXJhbU5hbWUpKTsKKyAgICAgICAg
cmV0dXJuIHJlczsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CitFT0YKKwkgICAgcHVzaChAY0Jv
ZHksICRjdXN0b21fZ2RvbV9ub2RlX2FwcGVuZF9jaGlsZCk7CisJfSBlbHNpZiAoJGZuX3NpZ190
eXBlIGVxICJET01PYmplY3QiICYmCisgICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSBuZSAnZ2Rv
bV9kb2N1bWVudF9nZXRfY3NzX2NhbnZhc19jb250ZXh0JykgeworCSAgICBwdXNoKEBjQm9keSwg
IiAgICAvKiBYWFggVE9ETyAtIGdldCBjYW52YXMgb2JqZWN0IChpdGVtLT4ke2ZuX3NpZ19uYW1l
fSgke2NhbGxfaW1wbF9wYXJhbXN9JHtleGNlcHRpb25zfSkpOyovXG4iICk7CisKKwl9IGVsc2lm
ICgkZm5fc2lnX3R5cGUgZXEgIkRPTVN0cmluZyIpIHsKKwkgICAgcHVzaChAY0JvZHksICIgICAg
JHthc3NpZ259Y29weUFzR2NoYXIoaXRlbS0+JHtmbl9zaWdfbmFtZX0oJHtjYWxsX2ltcGxfcGFy
YW1zfSR7ZXhjZXB0aW9uc30pKTtcbiIgKTsKKwl9IGVsc2UgeworCSAgICBpZiAoJGdfcmVzKSB7
CisgICAgICAgICAgICAkZ19yZXMgPSAiJHthc3NpZ259JHthc3NpZ25fcHJlfWl0ZW0tPiR7Zm5f
c2lnX25hbWV9KCR7Y2FsbF9pbXBsX3BhcmFtc30ke2V4Y2VwdGlvbnN9JHthc3NpZ25fcG9zdH0p
IiA7CisJICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICAke2Fzc2ln
bn0ke2Fzc2lnbl9wcmV9aXRlbS0+JHtmbl9zaWdfbmFtZX0oJHtjYWxsX2ltcGxfcGFyYW1zfSR7
ZXhjZXB0aW9uc30ke2Fzc2lnbl9wb3N0fSk7XG4iICk7CisJICAgIH0KKwl9CisJaWYgKCRyZXR1
cm5UeXBlIG5lICJ2b2lkIiAmJiAhJGlzX2N1c3RvbV9mbikgeworCisJICAgIGlmICgkZm5fc2ln
X3R5cGUgbmUgIkRPTU9iamVjdCIpIHsKKyAgICAgICAgICAgIGlmICgkcmV0X2lzX2Nsc190eXBl
KSB7CisgICAgICAgICAgICAgICAgcHVzaChAY0JvZHksICIgICAgJHtfcmV0dXJuVHlwZX0gcmVz
ID0gc3RhdGljX2Nhc3Q8JHtfcmV0dXJuVHlwZX0+KFdlYktpdDo6dG9HRE9NKGdfcmVzLmdldCgp
KSk7XG4iKTsKKyAgICAgICAgICAgIH0KKwkgICAgfQorCSAgICBpZiAoJGZuX3NpZ190eXBlIGVx
ICJET01PYmplY3QiKSB7CisgICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICByZXR1cm4gTlVM
TDsgLyogWFhYIFRPRE86IHJldHVybiBjYW52YXMgb2JqZWN0ICovXG4iKTsKKwkgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHB1c2goQGNCb2R5LCAiICAgIHJldHVybiByZXM7XG4iKTsKKwkgICAg
fQorCX0KKwlwdXNoKEBjQm9keSwgIlxuIik7CisKKwlwdXNoKEBjQm9keSwgIn1cblxuIik7Cisg
ICAgfQorfQorCitzdWIgZ2VuZXJhdGVDQm9keVN0YXJ0Cit7CisgICAgbXkgJGRhdGFOb2RlID0g
c2hpZnQ7CisgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15ICRpbnRlcmZhY2VOYW1l
ID0gc2hpZnQ7CisgICAgCisgICAgcHVzaChAY0JvZHksICJuYW1lc3BhY2UgV2ViS2l0IHtcbiIp
OworCisgICAgIyBHZXQgY29ycmVjdCBwYXNzL3N0b3JlIHR5cGVzIHJlc3BlY3RpbmcgUE9EVHlw
ZSBmbGFnCisgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJQT0RUeXBlIn07CisgICAgbXkgJHBhc3NUeXBlID0gJHBvZFR5cGUgPyAiSlNTVkdQT0RUeXBl
V3JhcHBlcjwkcG9kVHlwZT4qIiA6ICIkaW50ZXJmYWNlTmFtZSoiOworCisgICAgaWYgKCF1c2Vz
TWFudWFsVG9HRE9NSW1wbGVtZW50YXRpb24oJGludGVyZmFjZU5hbWUpKSB7CisJJGltcGxDb250
ZW50ID0gPDwgIkVPRiI7CitncG9pbnRlciB0b0dET00oV2ViQ29yZTo6JHBhc3NUeXBlIG9iaikK
K3sKKyAgICBpZiAoIW9iaikKKwlyZXR1cm4gTlVMTDsKKworICAgIGlmIChncG9pbnRlciByZXQg
PSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChvYmopKQorCXJldHVybiByZXQ7CisKKyAg
ICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01PYmplY3Qob2JqLCBXZWJLaXQ6OndyYXAk
e2ludGVyZmFjZU5hbWV9KG9iaikpOworfQorRU9GCisKKyAgICAgICAgcHVzaChAY0JvZHksICRp
bXBsQ29udGVudCk7CisgICAgfQorCisgICAgcHVzaChAY0JvZHksICJ9IC8qIG5hbWVzcGFjZSBX
ZWJLaXQgKi9cbiIpOworfQorCitzdWIgY2FsY3VsYXRlSGVhZGVySW5jbHVkZXMKK3sKKyAgICBt
eSAkaGRyTmFtZSA9IHNoaWZ0OworICAgIG15ICRwYXJlbnRDbGFzc05hbWUgPSBzaGlmdDsKKyAg
ICBteSAkcGFyZW50SGRyTmFtZSA9IHNoaWZ0OworCisgICAgJGltcGxJbmNsdWRlc3siR0RPTUJp
bmRpbmcuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tLyRoZHJOYW1lLmgifSA9IDE7
CisgICAgJGltcGxJbmNsdWRlc3siZ2RvbS8ke2hkck5hbWV9UHJpdmF0ZS5oIn0gPSAxOworCisg
ICAgaWYgKCRwYXJlbnRDbGFzc05hbWUgbmUgIkdPYmplY3QiKSB7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7Imdkb20vJHtwYXJlbnRIZHJOYW1lfS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJnZG9tLyR7cGFyZW50SGRyTmFtZX1Qcml2YXRlLmgifSA9IDE7CisgICAgICAgICRoZHJJ
bmNsdWRlc3siZ2RvbS8ke3BhcmVudEhkck5hbWV9LmgifSA9IDE7CisgICAgfQorCisgICAgIyBU
T0RPIC0gbWFrZSB0aGVzZSBvbmx5IGluY2x1ZGUgd2hlcmUgbmVlZGVkLCBsaWtld2lzZSB0aGUK
KyAgICAjIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0b0dET00sIHRvbworICAgICRpbXBsSW5jbHVk
ZXN7Ik5vZGUuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJOb2RlTGlzdC5oIn0gPSAxOwor
ICAgICRpbXBsSW5jbHVkZXN7IkVsZW1lbnQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJD
U1NWYWx1ZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNTU1J1bGUuaCJ9ID0gMTsKKyAg
ICAkaW1wbEluY2x1ZGVzeyJDU1NSdWxlTGlzdC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7
IkNTU1N0eWxlRGVjbGFyYXRpb24uaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJIVE1MQ29s
bGVjdGlvbi5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IlN0eWxlU2hlZXQuaCJ9ID0gMTsK
KyAgICAkaW1wbEluY2x1ZGVzeyJFdmVudC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNh
bnZhc1BpeGVsQXJyYXkuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJET01XaW5kb3cuaCJ9
ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJUZXh0LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRl
c3siQ291bnRlci5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IlJlY3QuaCJ9ID0gMTsKKyAg
ICAkaW1wbEluY2x1ZGVzeyJJbWFnZURhdGEuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJD
YW52YXNHcmFkaWVudC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IlRleHRNZXRyaWNzLmgi
fSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siRGF0YWJhc2UuaCJ9ID0gMTsKKyAgICAkaW1wbElu
Y2x1ZGVzeyJET01TZWxlY3Rpb24uaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJYUGF0aFJl
c3VsdC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7Imdkb20vQ29udmVydFRvR0NoYXJQcml2
YXRlLmgifSA9IDE7Cit9CisKK3N1YiBnZW5lcmF0ZUVuZHMKK3sKKyAgICBteSAkZ3VhcmQgPSBz
aGlmdDsKKworICAgIHB1c2goQGNCb2R5LCAifSAvKiBleHRlcm4gXCJDXCIgKi9cblxuIik7Cisg
ICAgcHVzaChAY0JvZHlQcml2LCAiR19FTkRfREVDTFNcblxuIik7CisKKyAgICBwdXNoKEBoQm9k
eSwgIkdfRU5EX0RFQ0xTXG5cbiIpOworICAgIHB1c2goQGhCb2R5LCAiI2VuZGlmIC8qICRndWFy
ZCAqL1xuIik7CisKKyAgICBwdXNoKEBoQm9keVByb3AsICJHX0VORF9ERUNMU1xuXG4iKTsKKyAg
ICBwdXNoKEBoQm9keVByb3AsICIjZW5kaWYgLyogJHtndWFyZH1fUFJPUF8qL1xuIik7Cit9CisK
KyMgR2VuZXJhdGUgaGVhZGVyIGFuZCBpbXBsCitzdWIgR2VuZXJhdGUgeworICAgIG15ICRvYmpl
Y3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgIG15ICRoYXNMZWdh
Y3lQYXJlbnQgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQi
fTsKKyAgICBteSAkaGFzUmVhbFBhcmVudCA9IEB7JGRhdGFOb2RlLT5wYXJlbnRzfSA+IDA7Cisg
ICAgbXkgJGhhc1BhcmVudCA9ICRoYXNMZWdhY3lQYXJlbnQgfHwgJGhhc1JlYWxQYXJlbnQ7Cisg
ICAgbXkgJHBhcmVudENsYXNzTmFtZSA9IGdldFBhcmVudENsYXNzTmFtZSgkZGF0YU5vZGUpOwor
ICAgIG15ICRwYXJlbnRHT2JqVHlwZSA9IGdldFBhcmVudEdPYmpUeXBlKCRkYXRhTm9kZSk7Cisg
ICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisgICAgbXkgJGNsYXNzTmFt
ZSA9IGdldENsYXNzTmFtZSgkaW50ZXJmYWNlTmFtZSk7CisgICAgbXkgJGhkck5hbWUgPSBnZXRI
ZHJOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKworICAgIG15ICRwYXJlbnRJbnRlcmZhY2VOYW1lID0g
IkRPTU9iamVjdCI7CisgICAgbXkgJHBhcmVudEhkck5hbWUgPSAiR2RvbURPTU9iamVjdCI7Cisg
ICAgaWYgKCRwYXJlbnRDbGFzc05hbWUgbmUgIkdPYmplY3QiKSB7CisgICAgICAgICRwYXJlbnRJ
bnRlcmZhY2VOYW1lID0gc3Vic3RyKCRwYXJlbnRDbGFzc05hbWUsIDQpOworICAgICAgICBpZiAo
JHBhcmVudEludGVyZmFjZU5hbWUgbmUgIkRPTU9iamVjdCIpIHsKKyAgICAgICAgICAgICRwYXJl
bnRIZHJOYW1lID0gZ2V0SGRyTmFtZSgkcGFyZW50SW50ZXJmYWNlTmFtZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAjIEFkZCB0aGUgZGVmYXVsdCBpbXBsIGhlYWRlciB0ZW1wbGF0ZQorICAg
IEBjUHJlZml4ID0gc3BsaXQoIlxyIiwgJGxpY2VuY2VUZW1wbGF0ZSk7CisgICAgcHVzaChAY1By
ZWZpeCwgIlxuIik7CisKKyAgICBjYWxjdWxhdGVIZWFkZXJJbmNsdWRlcygkaGRyTmFtZSwgJHBh
cmVudENsYXNzTmFtZSwgJHBhcmVudEhkck5hbWUpOworCisgICAgZ2VuZXJhdGVDQm9keVN0YXJ0
KCRkYXRhTm9kZSwgJGNsYXNzTmFtZSwgJGludGVyZmFjZU5hbWUpOworCisgICAgIyBYWFggVE9E
TyBwdXNoKEBjQm9keSwgInVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlO1xuXG4iKTsKKyAgICBwdXNo
KEBjQm9keSwgImV4dGVybiBcIkNcIiB7XG5cbiIpOworCisgICAgIyBBZGQgdGhlIGRlZmF1bHQg
aGVhZGVyIHRlbXBsYXRlCisgICAgQGhQcmVmaXggPSBzcGxpdCgiXHIiLCAkbGljZW5jZVRlbXBs
YXRlKTsKKworICAgIG15ICRjbHNDYXBzID0gc3Vic3RyKGNsc1RvR09ialR5cGUoJGNsYXNzTmFt
ZSksIDUpOworICAgIG15ICRsY2FzZV9pZmFjZW5hbWUgPSAiZ2RvbV8iIC4gZGVjYW1lbGl6ZSgk
aW50ZXJmYWNlTmFtZSk7CisKKyAgICAjIEhlYWRlciBndWFyZAorICAgIG15ICRndWFyZCA9ICJf
XyIgLiAkY2xhc3NOYW1lIC4gIl9IX18iOworCisgICAgQGhQcmVmaXhHdWFyZCA9IDw8ICJFT0Yi
OworI2lmbmRlZiAkZ3VhcmQKKyNkZWZpbmUgJGd1YXJkCitFT0YKKworICAgIGdlbmVyYXRlU3Rh
cnQoJGRhdGFOb2RlLCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlTmFtZSwgJGNsc0NhcHMsCisgICAg
ICAgICAgICAgICAgICAkbGNhc2VfaWZhY2VuYW1lLCAkaGRyTmFtZSwgJGd1YXJkLCAkcGFyZW50
R09ialR5cGUsCisgICAgICAgICAgICAgICAgICAkcGFyZW50SGRyTmFtZSwgJHBhcmVudENsYXNz
TmFtZSk7CisKKyAgICBjYWxjdWxhdGVQcm9wSW5jbHVkZXMoJGRhdGFOb2RlLCAkY2xhc3NOYW1l
LCAkaW50ZXJmYWNlTmFtZSk7CisgICAgZ2VuZXJhdGVQcm9wZXJ0aWVzQm9keVN0YXJ0KCk7CisK
KyAgICBnZW5lcmF0ZVByb3BlcnRpZXNTZXRHZXRJbnN0YWxsKCRkYXRhTm9kZSwgJGNsYXNzTmFt
ZSwgJGludGVyZmFjZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
bGNhc2VfaWZhY2VuYW1lLCAkY2xzQ2Fwcyk7CisKKyAgICBnZW5lcmF0ZUJvZHlQcml2KCRkYXRh
Tm9kZSwgJGNsYXNzTmFtZSwgJGludGVyZmFjZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAk
cGFyZW50SGRyTmFtZSwgJGd1YXJkKTsKKworICAgIGdlbmVyYXRlRnVuY3Rpb25zKCRkYXRhTm9k
ZSwgJGNsYXNzTmFtZSwgJGludGVyZmFjZU5hbWUpOworCisgICAgZ2VuZXJhdGVFbmRzKCRndWFy
ZCk7CisKK30KKworIyBJbnRlcm5hbCBoZWxwZXIKK3N1YiBXcml0ZURhdGEgeworICAgIG15ICgk
b2JqZWN0LCAkbmFtZSkgPSBAXzsKKworICAgICMgV3JpdGUgUHJpdmF0ZSBoZWFkZXIKKyAgICBt
eSAkaGRyRk5hbWVQcml2ID0gIiRvdXRwdXREaXIvIiAuICRuYW1lIC4gIlByaXZhdGUuaCI7Cisg
ICAgb3BlbihQUklWSEVBREVSLCAiPiRoZHJGTmFtZVByaXYiKSBvciBkaWUgIkNvdWxkbid0IG9w
ZW4gZmlsZSAkaGRyRk5hbWVQcml2IjsKKyAgICBwcmludCBQUklWSEVBREVSIEBoUHJlZml4Owor
ICAgIHByaW50IFBSSVZIRUFERVIgIlxuIjsKKyAgICBwcmludCBQUklWSEVBREVSIEBoQm9keVBy
aXY7CisgICAgY2xvc2UoUFJJVkhFQURFUik7CisKKyAgICAjIFdyaXRlIHByb3BlcnRpZXMgaGVh
ZGVyIChhdm9pZHMgcmVjdXJzaXZlIG5pZ2h0bWFyZSkKKyAgICBteSAkaGRyUHJvcEZOYW1lID0g
IiRvdXRwdXREaXIvIiAuICRuYW1lIC4gInByb3BzLmgiOworICAgIG9wZW4oUFJPUEhFQURFUiwg
Ij4kaGRyUHJvcEZOYW1lIikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGhkclByb3BGTmFt
ZSI7CisKKyAgICAkaGRyUHJvcEluY2x1ZGVzeyJnbGliLW9iamVjdC5oIn0gPSAxOworCisgICAg
cHJpbnQgUFJPUEhFQURFUiBAaFByZWZpeDsKKyAgICBwcmludCBQUk9QSEVBREVSICIvKiByZWN1
cnNpdmUgaW5jbHVkZXMgLyBkZWZpbmVzIGlzc3VlIGZvcmNlcyBzZXBhcmF0ZSBoZWFkZXIgZm9y
IHByb3BlcnRpZXMuXG5wZXJoYXBzIC0gYmV0dGVyIC0gYWxsIGdkb20gZ3RrIGZ1bmN0aW9ucyBz
aG91bGQgYmUgaW4gaGVyZSEqL1xuIjsKKyAgICBwcmludCBQUk9QSEVBREVSIEBoQm9keVByb3BQ
cmU7CisgICAgcHJpbnQgUFJPUEhFQURFUiAiI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVz
Lmg+XG4iOworICAgIHByaW50IFBST1BIRUFERVIgbWFwIHsgIiNpbmNsdWRlIFwiJF9cIlxuIiB9
IHNvcnQga2V5cyglaGRyUHJvcEluY2x1ZGVzKTsKKyAgICBwcmludCBQUk9QSEVBREVSICJcbiIg
aWYga2V5cyglaGRyUHJvcEluY2x1ZGVzKTsKKyAgICBwcmludCBQUk9QSEVBREVSICJcbiI7Cisg
ICAgcHJpbnQgUFJPUEhFQURFUiBAaEJvZHlQcm9wOworCisgICAgY2xvc2UoSEVBREVSKTsKKwor
ICAgICMgV3JpdGUgcHVibGljIGhlYWRlci4KKyAgICBteSAkaGRyRk5hbWUgPSAiJG91dHB1dERp
ci8iIC4gJG5hbWUgLiAiLmgiOworICAgIG9wZW4oSEVBREVSLCAiPiRoZHJGTmFtZSIpIG9yIGRp
ZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRoZHJGTmFtZSI7CisKKyAgICAkaGRySW5jbHVkZXN7Imds
aWItb2JqZWN0LmgifSA9IDE7CisKKyAgICBwcmludCBIRUFERVIgQGhQcmVmaXg7CisgICAgcHJp
bnQgSEVBREVSIEBoUHJlZml4R3VhcmQ7CisgICAgcHJpbnQgSEVBREVSICIjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGRlZmluZXMuaD5cbiI7CisgICAgcHJpbnQgSEVBREVSIG1hcCB7ICIjaW5jbHVk
ZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWhkckluY2x1ZGVzKTsKKyAgICBwcmludCBIRUFERVIg
IlxuIiBpZiBrZXlzKCVoZHJJbmNsdWRlcyk7CisgICAgcHJpbnQgSEVBREVSICJcbiI7CisgICAg
cHJpbnQgSEVBREVSIEBoQm9keVByZTsKKyAgICBwcmludCBIRUFERVIgbWFwIHsgInR5cGVkZWYg
c3RydWN0IF8kXyAkXztcbiIgfSBzb3J0IGtleXMoJWltcGxUeXBlZGVmcyk7CisgICAgcHJpbnQg
SEVBREVSICJcbiIgaWYga2V5cyglaW1wbFR5cGVkZWZzKTsKKyAgICBwcmludCBIRUFERVIgQGhC
b2R5OworCisgICAgY2xvc2UoSEVBREVSKTsKKworICAgICMgV3JpdGUgdGhlIGltcGxlbWVudGF0
aW9uIHNvdXJjZXMKKyAgICBteSAkaW1wbEZpbGVOYW1lID0gIiRvdXRwdXREaXIvIiAuICRuYW1l
IC4gIi5jcHAiOworICAgIG9wZW4oSU1QTCwgIj4kaW1wbEZpbGVOYW1lIikgb3IgZGllICJDb3Vs
ZG4ndCBvcGVuIGZpbGUgJGltcGxGaWxlTmFtZSI7CisKKyAgICBwcmludCBJTVBMIEBjUHJlZml4
OworICAgIHByaW50IElNUEwgIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxuXG4iOworICAgIHByaW50
IElNUEwgIiNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+XG4iOworICAgIHByaW50IElNUEwgbWFwIHsg
IiNpbmNsdWRlIFwiJF9cIlxuIiB9IHNvcnQga2V5cyglaW1wbEluY2x1ZGVzKTsKKyAgICBwcmlu
dCBJTVBMICJcbiIgaWYga2V5cyglaW1wbEluY2x1ZGVzKTsKKyAgICBwcmludCBJTVBMICJuYW1l
c3BhY2UgV2ViS2l0IHtcbiI7CisgICAgcHJpbnQgSU1QTCBtYXAgeyAiJF9cbiIgfSBzb3J0IGtl
eXMoJWNCb2R5R0RPTSk7CisgICAgcHJpbnQgSU1QTCAifTsgLy8gbmFtZXNwYWNlIFdlYktpdFxu
IjsKKyAgICBwcmludCBJTVBMIEBjQm9keTsKKworICAgIHByaW50IElNUEwgIlxuIjsKKyAgICBw
cmludCBJTVBMIEBjQm9keVByaXY7CisKKyAgICBjbG9zZShJTVBMKTsKKworICAgICVpbXBsSW5j
bHVkZXMgPSAoKTsKKyAgICAlaW1wbFR5cGVkZWZzID0gKCk7CisgICAgJWhkckluY2x1ZGVzID0g
KCk7CisgICAgQGhQcmVmaXggPSAoKTsKKyAgICBAaEJvZHkgPSAoKTsKKyAgICBAaEJvZHlQcml2
ID0gKCk7CisgICAgQGhCb2R5UHJvcCA9ICgpOworICAgIEBoQm9keVByb3BQcmUgPSAoKTsKKwor
ICAgIEBjUHJlZml4ID0gKCk7CisgICAgQGNCb2R5R0RPTSA9ICgpOworICAgIEBjQm9keSA9ICgp
OworICAgIEBjQm9keVByaXYgPSAoKTsKK30KKworMTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEx1a2UgS2Vu
bmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+CisjIENvcHlyaWdodCAoQykgMjAw
OCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisjIENvcHlyaWdodCAoQykgMjAw
OCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIyBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisKK3BhY2thZ2UgQ29kZUdlbmVyYXRvckdPYmplY3Q7CisKK3JlcXVpcmUgIkNvZGVHZW5lcmF0
b3JHT2JqZWN0TGlicmFyeTEucG0iOworcmVxdWlyZSAiQ29kZUdlbmVyYXRvckdPYmplY3RMaWJy
YXJ5Mi5wbSI7CisKK3N1YiBmaW5pc2ggeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKK30KKwor
IyBQYXJhbXM6ICdkb21DbGFzcycgc3RydWN0CitzdWIgR2VuZXJhdGVJbnRlcmZhY2UgeworICAg
IG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAk
ZGVmaW5lcyA9IHNoaWZ0OworCisgICAgbXkgJG5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisKKyAg
ICAkb2JqZWN0LT5HZW5lcmF0ZSgkZGF0YU5vZGUpOworCisgICAgIyBDb21taXQgY2hhbmdlcyEK
KyAgICBteSAkZm5hbWUgPSAiR2RvbV8iIC4gJG5hbWU7IAorICAgICRmbmFtZSA9fiBzL18vL2c7
CisgICAgJG9iamVjdC0+V3JpdGVEYXRhKCRmbmFtZSk7Cit9CisKKyMgUGFyYW1zOiAnaWRsRG9j
dW1lbnQnIHN0cnVjdAorc3ViIEdlbmVyYXRlTW9kdWxlIHsKKyAgICBteSAkb2JqZWN0ID0gc2hp
ZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAkbW9kdWxlID0gJGRhdGFOb2Rl
LT5tb2R1bGU7Cit9CisKKworMTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34466</attachid>
            <date>2009-08-10 08:20:30 -0700</date>
            <delta_ts>2009-08-12 13:39:54 -0700</delta_ts>
            <desc>uploaded</desc>
            <filename>patch.27431.txt</filename>
            <type>text/plain</type>
            <size>13868</size>
            <attacher name="Gour">gour</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDAgKzEsMTAgQEAKKzIwMDktMDgtMTAgIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24g
PGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKwor
ICAgICAgICBBZGQgR09iamVjdCBDb2RlIEdlbmVyYXRvciBMaWJyYXJ5IDEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NDMxCisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0TGlicmFyeTEucG06IEFkZGVkIGdv
YmplY3QgbGlicmFyeSwgYmVnaW5uaW5nIHRoZSBwcm9jZXNzIG9mIHNwbGl0dGluZyBDb2RlR2Vu
ZXJhdG9yR09iamVjdC5wbSBpbnRvIGFzIG1hbnkgZmlsZXMgYXMgaXQgdGFrZXMgdG8gZ2V0IENv
ZGVHZW5lcmF0b3JHT2JqZWN0LnBtIHRocm91Z2ggcmV2aWV3LgorCisKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdExpYnJhcnkxLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdExpYnJh
cnkxLnBtCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JHT2JqZWN0TGlicmFyeTEucG0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDY2IEBACisj
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxs
a2NsQGxrY2wubmV0PgorIyBDb3B5cmlnaHQgKEMpIDIwMDggTWFydGluIFNvdG8gPHNvdG9AZnJl
ZWRlc2t0b3Aub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWludCB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisjIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorCisjIERlZmF1bHQgY29uc3RydWN0
b3IKK3N1YiBuZXcgeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkcmVmZXJlbmNl
ID0geyB9OworCisgICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsKKyAgICAkb3V0cHV0RGlyID0g
c2hpZnQ7CisKKyAgICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKKyAgICByZXR1cm4gJHJl
ZmVyZW5jZTsKK30KKworc3ViIGNsc1RvR09ialR5cGUgeworICAgIG15ICRjbGFzc05hbWUgPSBz
aGlmdDsKKyAgICByZXR1cm4gdWMoZGVjYW1lbGl6ZSgkY2xhc3NOYW1lKSkKK30KKworc3ViIGdl
dFBhcmVudENsYXNzTmFtZSB7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAjID8/
IHF1ZT8/CisgICAgcmV0dXJuICJXZWJraXRET01PYmplY3QiIGlmIEB7JGRhdGFOb2RlLT5wYXJl
bnRzfSBlcSAwOworICAgIHJldHVybiAiV2Via2l0IiAuICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZSgkZGF0YU5vZGUtPnBhcmVudHMoMCkpOworfQorCitzdWIgZ2V0UGFyZW50R09ialR5cGUg
eworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgIyA/PyBxdWU/PworICAgIHJldHVy
biAiV0VCS0lUX1RZUEVfRE9NX09CSkVDVCIgaWYgQHskZGF0YU5vZGUtPnBhcmVudHN9IGVxIDA7
CisgICAgcmV0dXJuICJXRUJLSVRfVFlQRV8iIC4gY2xzVG9HT2JqVHlwZSgkY29kZUdlbmVyYXRv
ci0+U3RyaXBNb2R1bGUoJGRhdGFOb2RlLT5wYXJlbnRzKDApKSk7Cit9CisKKworIyBBbGdvcml0
aG0gdGFrZW4gZnJvbSBTdHJpbmc6OkNhbWVsQ2FzZSAwLjAxCitzdWIgY2FtZWxpemUgeworICAg
IG15ICRzID0gc2hpZnQ7CisgICAgam9pbignJywgbWFweyB1Y2ZpcnN0ICRfIH0gc3BsaXQoLyg/
PD1bQS1aYS16XSlfKD89W0EtWmEtel0pfFxiLywgJHMpKTsKK30KKworIyBBbGdvcml0aG0gdGFr
ZW4gZnJvbSBTdHJpbmc6OkNhbWVsQ2FzZSAwLjAxCitzdWIgZGVjYW1lbGl6ZSB7CisgICAgbXkg
JHMgPSBzaGlmdDsKKyAgICAkcyA9fiBzeyhbXmEtekEtWl0/KShbQS1aXSopKFtBLVpdKShbYS16
XT8pfXsKKyAgICAgICAgbXkgJGZjID0gcG9zKCRzKT09MDsKKyAgICAgICAgbXkgKCRwMCwkcDEs
JHAyLCRwMykgPSAoJDEsbGMkMixsYyQzLCQ0KTsKKyAgICAgICAgbXkgJHQgPSAkcDAgfHwgJGZj
ID8gJHAwIDogJ18nOworICAgICAgICAkdCAuPSAkcDMgPyAkcDEgPyAiJHtwMX1fJHAyJHAzIiA6
ICIkcDIkcDMiIDogIiRwMSRwMiI7CisgICAgICAgICR0OworICAgIH1nZTsKKyAgICAkczsKK30K
Kworc3ViIGdldEhkck5hbWUgeworICAgIG15ICRuYW1lID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlw
TW9kdWxlKHNoaWZ0KTsKKworICAgIHJldHVybiAiV2Via2l0JG5hbWUiOworfQorCitzdWIgZ2V0
Q2xhc3NOYW1lIHsKKyAgICBteSAkbmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZShz
aGlmdCk7CisKKyAgICByZXR1cm4gIldlYmtpdCRuYW1lIjsKK30KKworbXkgJWdJbmNsdWRlSGRy
TWFwID0gKAorICAgICJpbnQiID0+ICIiLAorICAgICJsb25nIiA9PiAiIiwKKyAgICAic2hvcnQi
ID0+ICIiLAorICAgICJjaGFyIiA9PiAiIiwKKyAgICAiZmxvYXQiID0+ICIiLAorICAgICJkb3Vi
bGUiID0+ICIiLAorICAgICJ1bnNpZ25lZCIgPT4gIiIsCisgICAgInVuc2lnbmVkIGludCIgPT4g
IiIsCisgICAgInVuc2lnbmVkIGxvbmciID0+ICIiLAorICAgICJ1bnNpZ25lZCBsb25nIGxvbmci
ID0+ICIiLAorICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gIiIsCisgICAgIkRPTVRpbWVTdGFtcCIg
PT4gIiIsCisgICAgIkV2ZW50TGlzdGVuZXIiID0+ICIiLAorICAgICJDb21wYXJlSG93IiA9PiAi
UmFuZ2UuaCIsCisgICAgIkRPTU9iamVjdCIgPT4gIndlYmtpdC9XZWJraXRDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCIsCisgICAgInVuc2lnbmVkIGNoYXIiID0+ICIiLAorICAgICJET01TdHJp
bmciID0+ICJnbGliLW9iamVjdC5oIiwKKyAgICAiRXZlbnRUYXJnZXQiID0+ICJXZWJraXROb2Rl
LmgiLAorICAgICJmbG9hdCIgPT4gImdsaWItb2JqZWN0LmgiLAorICAgICJib29sZWFuIiA9PiAi
Z2xpYi1vYmplY3QuaCIsCisgICAgInZvaWQiID0+ICJnbGliLW9iamVjdC5oIiwKKyk7CisKK3N1
YiBnZXRHSW5jbHVkZUhkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIHJldHVybiAk
Z0luY2x1ZGVIZHJNYXB7JHR5cGV9IGlmIGV4aXN0cyAkZ0luY2x1ZGVIZHJNYXB7JHR5cGV9Owor
CisgICAgbXkgJG5hbWUgPSBnZXRIZHJOYW1lKCR0eXBlKTsKKyAgICByZXR1cm4gIiRuYW1lLmgi
OworfQorCitteSAlZ0NsYXNzTWFwID0gKAorICAgICJET01UaW1lU3RhbXAiID0+IDAsCisgICAg
IkRPTVN0cmluZyIgPT4gMCwKKyAgICAiRXZlbnRMaXN0ZW5lciIgPT4gMCwKKyAgICAiQ29tcGFy
ZUhvdyIgPT4gMCwKKyAgICAiZmxvYXQiID0+IDAsCisgICAgImRvdWJsZSIgPT4gMCwKKyAgICAi
Ym9vbGVhbiIgPT4gMCwKKyAgICAiY2hhciIgPT4gMCwKKyAgICAibG9uZyIgPT4gMCwKKyAgICAi
c2hvcnQiID0+IDAsCisgICAgInVjaGFyIiA9PiAwLAorICAgICJ1bnNpZ25lZCIgPT4gMCwKKyAg
ICAiaW50IiA9PiAwLAorICAgICJ1bnNpZ25lZCBpbnQiID0+IDAsCisgICAgInVuc2lnbmVkIGxv
bmciID0+IDAsCisgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIgPT4gMCwKKyAgICAidW5zaWduZWQg
c2hvcnQiID0+IDAsCisgICAgInZvaWQiID0+IDAsCispOworCisjIHJldHVybnMgMSBpZiB3ZSBu
ZWVkIHRvIGNyZWF0ZSBhIGdvYmplY3Qgd3JhcHBlciBhcm91bmQgdGhlIHJldHVybiByZXN1bHQK
K3N1YiBpc1dFQktJVENsYXNzVHlwZSB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1
cm4gJGdDbGFzc01hcHskdHlwZX0gaWYgZXhpc3RzICRnQ2xhc3NNYXB7JHR5cGV9OworICAgIHJl
dHVybiAxOworfQorCitteSAlZ1Byb3BUeXBlTWFwID0gKAorICAgICJET01TdHJpbmciID0+ICJz
dHJpbmciLAorICAgICJmbG9hdCIgPT4gImZsb2F0IiwKKyAgICAiQ29tcGFyZUhvdyIgPT4gIm5v
dHlldHN1cHBvcnRlZCIsCisgICAgImRvdWJsZSIgPT4gImRvdWJsZSIsCisgICAgImJvb2xlYW4i
ID0+ICJib29sZWFuIiwKKyAgICAiY2hhciIgPT4gImNoYXIiLAorICAgICJsb25nIiA9PiAibG9u
ZyIsCisgICAgInNob3J0IiA9PiAiaW50IiwKKyAgICAidWNoYXIiID0+ICJ1Y2hhciIsCisgICAg
InVuc2lnbmVkIiA9PiAidWludCIsCisgICAgImludCIgPT4gImludCIsCisgICAgInVuc2lnbmVk
IGludCIgPT4gInVpbnQiLAorICAgICJ1bnNpZ25lZCBsb25nIGxvbmciID0+ICJ1aW50NjQiLAor
ICAgICJ1bnNpZ25lZCBsb25nIiA9PiAidWxvbmciLAorICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4g
InVpbnQiLAorKTsKKworc3ViIEdldFByb3BHVHlwZSB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsK
KworICAgIHJldHVybiAkZ1Byb3BUeXBlTWFweyR0eXBlfSBpZiBleGlzdHMgJGdQcm9wVHlwZU1h
cHskdHlwZX07CisKKyAgICByZXR1cm4gIm9iamVjdCI7Cit9CisKK215ICVnVHlwZU1hcCA9ICgK
KyAgICAiRXZlbnRUYXJnZXQiID0+ICJXZWJraXROb2RlICoiLAorICAgICJET01TdHJpbmciID0+
ICJnY2hhciAqIiwKKyAgICAiZmxvYXQiID0+ICJnZmxvYXQiLAorICAgICJDb21wYXJlSG93IiA9
PiAiV2ViQ29yZTo6UmFuZ2U6OkNvbXBhcmVIb3cgIiwKKyAgICAiZG91YmxlIiA9PiAiZ2RvdWJs
ZSIsCisgICAgImJvb2xlYW4iID0+ICJnYm9vbGVhbiIsCisgICAgImNoYXIiID0+ICJnY2hhciIs
CisgICAgImxvbmciID0+ICJnbG9uZyIsCisgICAgInNob3J0IiA9PiAiZ3Nob3J0IiwKKyAgICAi
dWNoYXIiID0+ICJndWNoYXIiLAorICAgICJ1bnNpZ25lZCIgPT4gImd1aW50IiwKKyAgICAiaW50
IiA9PiAiZ2ludCIsCisgICAgInVuc2lnbmVkIGludCIgPT4gImd1aW50IiwKKyAgICAidW5zaWdu
ZWQgbG9uZyIgPT4gImd1bG9uZyIsCisgICAgInVuc2lnbmVkIGxvbmcgbG9uZyIgPT4gImd1aW50
NjQiLAorICAgICJ1bnNpZ25lZCBzaG9ydCIgPT4gImd1c2hvcnQiLAorICAgICJ2b2lkIiA9PiAi
dm9pZCIsCispOworCitzdWIgZ2V0R1R5cGUgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAg
ICByZXR1cm4gJGdUeXBlTWFweyR0eXBlfSBpZiBleGlzdHMgJGdUeXBlTWFweyR0eXBlfTsKKwor
ICAgICMgRm9yIGFsbCBvdGhlciB0eXBlcywgdGhlIG5hdGl2ZSB0eXBlIGlzIGEgcG9pbnRlciB3
aXRoIHNhbWUgdHlwZSBuYW1lCisgICAgIyBhcyB0aGUgSURMIHR5cGUuCisgICAgbXkgJG5hbWUg
PSBnZXRDbGFzc05hbWUoJHR5cGUpOworICAgIHJldHVybiAiJG5hbWUgKiI7Cit9CisKK3N1YiBn
ZXRJbmNIZHIgeworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICBteSAkaW5jbHVkZUhkciA9
IGdldEdJbmNsdWRlSGRyKCR0eXBlKTsKKyAgICBpZiAoJGluY2x1ZGVIZHIpIHsKKyAgICAgICAg
aWYgKCR0eXBlIGVxICJFdmVudFRhcmdldCIpIHsKKyAgICAgICAgICAgIHJldHVybiAiV2Via2l0
Tm9kZS5oIjsKKyAgICAgICAgfSBlbHNpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKKyAgICAg
ICAgICAgICMgWFhYID8/Pz8gd3RmPz8gOikgY29waWVkIGZyb20ganNnZW5lcmF0b3IgLSBqdXN0
IGRvIHdoYXQgdGhleSBkby4KKyAgICAgICAgICAgIHJldHVybiAiV2Via2l0Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICRp
bmNsdWRlSGRyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAiIjsKK30KKworc3ViIGNh
bGNQcm9wSW5jSGRyUHJpdmF0ZSB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAkaGRy
UHJvcEluY2x1ZGVzID0gc2hpZnQ7CisKKyAgICBteSAkaGRyID0gZ2V0SW5jSGRyKCR0eXBlKTsK
KyAgICBpZiAoJGhkciBuZSAiIikgeworICAgICAgICBpZiAoaXNXRUJLSVRDbGFzc1R5cGUoJHR5
cGUpKSB7CisgICAgICAgICAgICAkaGRyID0gc3Vic3RyKCRoZHIsIDAsIGxlbmd0aCgkaGRyKS0y
KTsKKyAgICAgICAgICAgIHJldHVybiAid2Via2l0LyIuJGhkci4iUHJpdmF0ZS5oIjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNhbGNQcm9wSW5jSGRyIHsKKyAg
ICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgbXkgJGhkciA9IGdldEluY0hkcigkdHlwZSk7Cisg
ICAgaWYgKCRoZHIgbmUgIiIpIHsKKyAgICAgICAgaWYgKGlzV0VCS0lUQ2xhc3NUeXBlKCR0eXBl
KSkgeworICAgICAgICAgICAgJGhkciA9IHN1YnN0cigkaGRyLCAwLCBsZW5ndGgoJGhkciktMik7
CisgICAgICAgICAgICByZXR1cm4gIndlYmtpdC8iLiRoZHIuIi5oIjsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNhbGNJbmNIZHIgeworICAgIG15ICR0eXBlID0g
c2hpZnQ7CisKKyAgICBteSAkaGRyID0gZ2V0SW5jSGRyKCR0eXBlKTsKKyAgICBpZiAoJGhkciBu
ZSAiIikgeworICAgICAgICBpZiAoaXNXRUJLSVRDbGFzc1R5cGUoJHR5cGUpKSB7CisgICAgICAg
ICAgICByZXR1cm4gIndlYmtpdC8kaGRyIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiAkaGRyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIg
R2V0UHJpdkZuIHsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRsY2Fz
ZV9pZmFjZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmVzID0gc2hpZnQ7CisgICAgbXkgJHBhcm0g
PSBzaGlmdDsKKworICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRXZlbnRUYXJnZXQiKSB7Cisg
ICAgICAgIHJldHVybiAiV2ViQ29yZTo6Tm9kZSAqICRyZXMgPSBXZWJLaXQ6OmNvcmUoc2VsZik7
IjsKKyAgICB9CisgICAgcmV0dXJuICJXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9ICogJHJlcyA9
IFdlYktpdDo6Y29yZSgkcGFybSk7IjsKK30KKworbXkgJXNraXBQcm9wVHlwZU1hcD0gKAorICAg
ICJzdHlsZXNoZWV0czo6TWVkaWFMaXN0IiA9PiAxLAorICAgICJPYmplY3QiID0+IDEsCisgICAg
IkV2ZW50IiA9PiAxLAorICAgICJDcnlwdG8iID0+IDEsCisgICAgIkNTU1ZhcmlhYmxlc0RlY2xh
cmF0aW9uIiA9PiAxLAorICAgICJFdmVudExpc3RlbmVyIiA9PiAxLAorICAgICJjdXN0b20iID0+
IDEsCisgICAgIkFycmF5IiA9PiAxLAorICAgICJET01UaW1lU3RhbXAiID0+IDEsCispOworCisj
IFRoaXMgZnVuY3Rpb24gaXMgaGVyZSB0byBkZXRlcm1pbmUgd2hpY2ggZ29iamVjdCBwcm9wZXJ0
aWVzIHNob3VsZAorIyBiZSB0ZW1wb3JhcmlseSBza2lwcGVkIHdoaWxzdCB0aGUgZ29iamVjdCBj
b2RlIGdlbmVyYXRvciBpcyBiZWluZyBicm91Z2h0CisjIHVwLXRvLXNwZWVkIHdpdGggdGhlIG90
aGVyIGNvZGUgZ2VuZXJhdG9ycy4gIG9uY2UgZXZlcnl0aGluZydzIGluLAorIyBpdCBjYW4gZ28u
ICBidXQgaW4gdGhlIG1lYW4tdGltZSwgaXQgaGFzIHRvIHN0YXksIGJlY2F1c2Ugb3RoZXJ3aXNl
CisjIGl0IG1lYW5zIGEgbWFzc2l2ZSBhbW91bnQgb2YgZXh0cmEgd29yay4KK3N1YiBza2lwUHJv
cFRlbXBvcmFyaWx5IHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICRwcm9wX3R5cGUg
PSBzaGlmdDsKKworICAgIHJldHVybiAxIGlmIGV4aXN0cyAkc2tpcFByb3BUeXBlTWFweyRwcm9w
X3R5cGV9OworCisgICAgIyBza2lwIENvbnN0cnVjdG9ycyAod2hhdGV2ZXIgdGhleSBhcmUpIGZv
ciBub3cuCisgICAgaWYgKCRwcm9wX3R5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgfQorCisgICAgIyBUT0RPOiBTVkcuCisgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1BvZFR5cGUoJHR5cGUpIHx8ICRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlw
ZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQor
CitteSAlbWFudWFsVG9XRUJLSVRJbXBsZW1lbnRhdGlvbk1hcCA9ICgKKyAgICAiTm9kZSIgPT4g
MSwKKyAgICAiRG9jdW1lbnQiID0+IDEsCisgICAgIkhUTUxDb2xsZWN0aW9uIiA9PiAxLAorICAg
ICJTVkdQYXRoU2VnIiA9PiAxLAorICAgICJTdHlsZVNoZWV0IiA9PiAxLAorICAgICJDU1NSdWxl
IiA9PiAxLAorICAgICJDU1NWYWx1ZSIgPT4gMSwKKyAgICAiT2JqZWN0IiA9PiAxLAorICAgICJF
dmVudCIgPT4gMSwKKyAgICAiRWxlbWVudCIgPT4gMSwKKyAgICAiVGV4dCIgPT4gMSwKKyAgICAp
OworCisjIHRoaXMgZnVuY3Rpb24gdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhbHJlYWR5IGV4aXN0
cyBhIGhhbmQtd3JpdHRlbgorIyB2ZXJzaW9uIG9mIHRvRE9NKHt0eXBlfSopLCB3aGljaCBzaG91
dXVsZCBiZSBmb3VuZCBpbgorIyBXZWJDb3JlL2JpbmRpbmdzL3dlYmtpdC9XRUJLSVR7dHlwZX1D
dXN0b20uY3BwIG9yIGluIG9uZSBjYXNlIC0gTm9kZSAtIGluCisjIFdFQktJVEJpbmRpbmcuY3Bw
LiAgdGhlc2UgaGFuZC13cml0dGVuIHZlcnNpb25zIGFyZSB0aGUgZGFtbiBpbXBvcnRhbnQKKyMg
b25lcyB0aGF0IHJlLW1hcCBjKysgYmFzZSBjbGFzc2VzIEJBQ0sgdXAgdG8gdGhlIHJpZ2h0IGdv
YmplY3QgdHlwZS4KK3N1YiB1c2VzTWFudWFsVG9XRUJLSVRJbXBsZW1lbnRhdGlvbiB7CisgICAg
bXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gMSBpZiBleGlzdHMgJG1hbnVhbFRvV0VCS0lU
SW1wbGVtZW50YXRpb25NYXB7JHR5cGV9OworICAgIHJldHVybiAwOworfQorCisjIGFsdGhvdWdo
IHRoZSBsYXlvdXQgb2YgdGhlc2UgbG9va3Mgd2VpcmQsIGl0J3MgdG8ga2VlcCB0aGUgb3V0cHV0
CisjIGlkZW50aWNhbCB0byB3aGF0J3MgYmVpbmcgbWFpbnRhaW5lZCBleHRlcm5hbGx5IHRvIHdl
YmtpdCBzdm4gZHVyaW5nCisjIHRoZSBsYW5kaW5nIHBoYXNlIG9mIHRoaXMgY29kZS4gIGJ5IGtl
ZXBpbmcgdGhlIG91dHB1dCBpZGVudGljYWwsCisjIGRpZmYgLXJ1IGNhbiBiZSB1dGlsaXNlZCB0
byB2ZXJpZnkgdGhhdCBubyBhY2NpZGVudGFsIGNoYW5nZXMgYXJlCisjIGludHJvZHVjZWQgd2hp
bHN0IHRoaXMgY29kZSBpcyBiZWluZyByZXZpc2VkIHRvIG1lZXQgd2Via2l0IGNvZGluZworIyBz
dGFuZGFyZHMuCitteSAldHh0SW5zdGFsbFByb3BNYXAgPSAoCisgICAgImludCIgPT4gCisiICAg
ICAgICAgICAgICAgIEdfTUlOSU5ULCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAg
R19NQVhJTlQsIC8qIG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0
ICovCisiLAorICAgICJib29sZWFuIiA9PiAKKyIgICAgICAgICAgICAgICAgRkFMU0UsIC8qIGRl
ZmF1bHQgKi8KKyIsCisgICAgImZsb2F0IiA9PiAKKyIgICAgICAgICAgICAgICAgR19NSU5GTE9B
VCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsIC8qIG1heCAq
LworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCisiLAorICAgICJkb3Vi
bGUiID0+IAorIiAgICAgICAgICAgICAgICBHX01JTkRPVUJMRSwgICAgICAgIC8qIG1pbiAqLwor
ICAgICAgICAgICAgICAgIEdfTUFYRE9VQkxFLCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAw
LCAgICAgICAgLyogZGVmYXVsdCAqLworIiwKKyAgICAidWludDY0IiA9PiAKKyIgICAgICAgICAg
ICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYVUlOVDY0LCAv
KiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworIiwKKyAg
ICAidWxvbmciID0+IAorIiAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogbWluICovCisgICAg
ICAgICAgICAgICAgR19NQVhVTE9ORywgLyogbWF4ICovCisgICAgICAgICAgICAgICAgMCwgICAg
ICAgIC8qIGRlZmF1bHQgKi8KKyIsCisgICAgImxvbmciID0+IAorIiAgICAgICAgICAgICAgICBH
X01JTkxPTkcsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWExPTkcsIC8q
IG1heCAqLworICAgICAgICAgICAgICAgIDAsICAgICAgICAvKiBkZWZhdWx0ICovCisiLAorICAg
ICJ1aW50IiA9PiAKKyIgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAg
ICAgICAgICAgIEdfTUFYVUlOVCwgLyogbWF4ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAg
IC8qIGRlZmF1bHQgKi8KKyIsCisgICAgInVzaG9ydCIgPT4gCisiICAgICAgICAgICAgICAgIDAs
ICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWFVJTlQxNiwgLyogbWF4ICov
CisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1bHQgKi8KKyIsCisgICAgInVjaGFy
IiA9PiAKKyIgICAgICAgICAgICAgICAgR19NSU5JTlQ4LCAgICAgICAgLyogbWluICovCisgICAg
ICAgICAgICAgICAgR19NQVhJTlQ4LCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAg
ICAgLyogZGVmYXVsdCAqLworIiwKKyAgICAiY2hhciIgPT4gCisiICAgICAgICAgICAgICAgIDAs
ICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWFVJTlQ4LCAvKiBtYXggKi8K
KyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworIiwKKyAgICAic3RyaW5n
IiA9PiAKKyIgICAgICAgICAgICAgICAgXCJcIiwgLyogZGVmYXVsdCAqLworIiwKKyk7CisKK3N1
YiBnZXRJbnN0YWxsUHJvcAoreworICAgIG15ICRndHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAk
dHh0SW5zdGFsbFByb3BNYXB7JGd0eXBlfSBpZiBleGlzdHMgJHR4dEluc3RhbGxQcm9wTWFweyRn
dHlwZX07CisgICAgcmV0dXJuIDA7Cit9CisKK215ICVub3RDdXN0b21GdW5jdGlvbkNvbW1hV29y
a3NPa0FzSXNNYXAgPSAoCisJIndlYmtpdF9odG1sX2NvbGxlY3Rpb25faXRlbSIgPT4gMSwKKwki
d2Via2l0X2h0bWxfY29sbGVjdGlvbl9uYW1lZF9pdGVtIiA9PiAxLAorCSJ3ZWJraXRfaHRtbF9p
bnB1dF9lbGVtZW50X3NldF9zZWxlY3Rpb25fcmFuZ2UiID0+IDEsCisJIndlYmtpdF9odG1sX2Zv
cm1fZWxlbWVudF9zdWJtaXQiID0+IDEsCisJIndlYmtpdF94bWxfaHR0cF9yZXF1ZXN0X29wZW4i
ID0+IDEsCisJIndlYmtpdF94bWxfaHR0cF9yZXF1ZXN0X3NldF9yZXF1ZXN0X2hlYWRlciIgPT4g
MSwKKwkid2Via2l0X3htbF9odHRwX3JlcXVlc3Rfc2VuZCIgPT4gMSwKKwkid2Via2l0X3htbF9o
dHRwX3JlcXVlc3RfZ2V0X3Jlc3BvbnNlX2hlYWRlciIgPT4gMSwKKwkid2Via2l0X3htbF9odHRw
X3JlcXVlc3Rfb3ZlcnJpZGVfbWltZV90eXBlIiA9PiAxLAorCSJ3ZWJraXRfeG1sX2h0dHBfcmVx
dWVzdF9kaXNwYXRjaF9ldmVudCIgPT4gMSwKKwkid2Via2l0X2VsZW1lbnRfc2V0X2F0dHJpYnV0
ZSIgPT4gMSwKKyk7CisKK3N1YiBpc05vdEN1c3RvbUZ1bmN0aW9uQ29tbWFXb3Jrc09rQXNJcyB7
CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gJG5vdEN1c3RvbUZ1bmN0aW9uQ29t
bWFXb3Jrc09rQXNJc01hcHskdHlwZX0gaWYgZXhpc3RzICRub3RDdXN0b21GdW5jdGlvbkNvbW1h
V29ya3NPa0FzSXNNYXB7JHR5cGV9OworICAgIHJldHVybiAwOworfQorCisjICpzaWdoKi4gdGhl
c2UgZm91ciBhcmUgbGlzdGVkIGFzIGN1c3RvbSBmdW5jdGlvbnMsIGJ1dCBhIGRlY2lzaW9uCisj
IHdhcyB0YWtlbiB0byBtYWtlIHRoZSAiY3VzdG9tIiBzdXBwb3J0IGFjdHVhbGx5IGluc2lkZSB0
aGUgY29kZQorIyBnZW5lcmF0b3IsIHJhdGhlciB0aGFuIGhhbmQtY29kaW5nIGl0IHVwIChpbiB3
aGF0IHdvdWxkIGJlIFdFQktJVE5vZGVDdXN0b20uY3BwKQorIyByZXN1bHQ6IHdlIG5lZWQgdG8g
aWRlbnRpZnkgdGhlc2UgZnVuY3Rpb25zLCBhbmQgbGV0IHRoZW0gdGhyb3VnaCB0aGUKKyMgY3Vz
dG9tLXNraXBwaW5nIGZpbHRlciwgc3BlY2lhbC1jYXNlZC4uLgorbXkgJWN1c3RvbU5vZGVGdW5j
dGlvbk1hcCA9ICgKKwkid2Via2l0X25vZGVfYXBwZW5kX2NoaWxkIiAgPT4gMSwKKwkid2Via2l0
X25vZGVfcmVtb3ZlX2NoaWxkIiAgPT4gMSwKKwkid2Via2l0X25vZGVfaW5zZXJ0X2JlZm9yZSIg
ID0+IDEsCisJIndlYmtpdF9ub2RlX3JlcGxhY2VfY2hpbGQiICA9PiAxLAorKTsKKworc3ViIGlz
Q3VzdG9tTm9kZUZ1bmN0aW9uIHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIHJldHVybiAk
Y3VzdG9tTm9kZUZ1bmN0aW9uTWFweyR0eXBlfSBpZiBleGlzdHMgJGN1c3RvbU5vZGVGdW5jdGlv
bk1hcHskdHlwZX07CisgICAgcmV0dXJuIDA7Cit9CisKK215ICVub3RDdXN0b21GdW5jdGlvbk1h
cCA9ICgKKwkid2Via2l0X25vZGVfaXRlcmF0b3JfbmV4dF9ub2RlIiAgPT4gMSwKKwkid2Via2l0
X25vZGVfYXBwZW5kX2NoaWxkIiAgPT4gMSwKKwkid2Via2l0X25vZGVfcmVtb3ZlX2NoaWxkIiAg
PT4gMSwKKwkid2Via2l0X25vZGVfaW5zZXJ0X2JlZm9yZSIgID0+IDEsCisJIndlYmtpdF9ub2Rl
X3JlcGxhY2VfY2hpbGQiICA9PiAxLAorCSJ3ZWJraXRfdHJlZV93YWxrZXJfcGFyZW50X25vZGUi
ICA9PiAxLAorCSJ3ZWJraXRfdHJlZV93YWxrZXJfZmlyc3RfY2hpbGQiICA9PiAxLAorCSJ3ZWJr
aXRfdHJlZV93YWxrZXJfbGFzdF9jaGlsZCIgID0+IDEsCisJIndlYmtpdF90cmVlX3dhbGtlcl9w
cmV2aW91c19zaWJsaW5nIiAgPT4gMSwKKwkid2Via2l0X3RyZWVfd2Fsa2VyX25leHRfc2libGlu
ZyIgID0+IDEsCisJIndlYmtpdF90cmVlX3dhbGtlcl9wcmV2aW91c19ub2RlIiAgPT4gMSwKKwki
d2Via2l0X3RyZWVfd2Fsa2VyX25leHRfbm9kZSIgID0+IDEsCisJIndlYmtpdF9ub2RlX2l0ZXJh
dG9yX3ByZXZpb3VzX25vZGUiID0+IDEsCispOworCitzdWIgaXNOb3RDdXN0b21GdW5jdGlvbiB7
CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICByZXR1cm4gJG5vdEN1c3RvbUZ1bmN0aW9uTWFw
eyR0eXBlfSBpZiBleGlzdHMgJG5vdEN1c3RvbUZ1bmN0aW9uTWFweyR0eXBlfTsKKyAgICByZXR1
cm4gMDsKK30KKworCisxOwo=
</data>
<flag name="review"
          id="18869"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>