[PATCH] scripts/kernel-doc: support for structs, unions, enum, typedef and other stuff

Tim Jansen (tim@tjansen.de)
Wed, 26 Sep 2001 03:22:04 +0200


--------------Boundary-00=_S4X8LP2BSFQYB9A9EJY3
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Hi...

The attached patch for scripts/kernel-doc adds the following features:

1. You can document structs, unions, enums and typedef like this:
/**
* enum driver_type - Describes the type of a driver
* @DRIVER_TYPE_DEVICE: driver controls a device (like fd.o)
* @DRIVER_TYPE_BUS: driver manages a bus (like usbcore.o)
*
* Some description.
*/
enum driver_type {
DRIVER_TYPE_DEVICE = 0,
DRIVER_TYPE_BUS = 1,
};

/**
* struct pci_device_id - identification of a pci device
* @vendor: Vendor ID or %PCI_ANY_ID
* @device: Device ID or %PCI_ANY_ID
*
* bla bla bla (description)
*/
struct pci_device_id {
unsigned int vendor;
unsigned int device;
};

/**
* typedef uint32 - unsigned integer.
* Description of an unsigned integer.
*/
typedef unsigned int uint32;

The parser is currently not able to handle comma-separated declarations in
structs or unions ("int a,b;"). Only those struct members that you have
declarated will appear in the documentation - this is intended and allows you
to have undocumented members. Similarly the actual type of a typedef'd type
is not contained in the documentation.

2. Added some support for a new section called "Context" that should be used
to describe the context in which a function can be invoked. The section can
be declared together with the arguments, terminated by an empty line (unlike
regular sections). The Context section should make it easier for the reader
to find out, for example, whether a function can be called from a interrupt.
I would propose to use a simple sytax based on the functions in_interrupt(),
in_irq() and in_softirq(). If a function can only be called in user-context
write "!in_interrupt()", if a function can only be called from a software irq
level write "in_softirq()" and so on. For functions that can be called
everywhere write "all contexts". Example:
/**
* usb_deregister - unregister a USB driver
* @driver: USB operations of the driver to unregister
* Context: !in_interrupt()
*
* Unlinks the specified driver from the internal USB driver list.
*/
void usb_deregister(struct usb_driver *driver);

3. Many minor fixes, for example the date of generated man pages isn't
hard-coded anymore and some regular expressions worked only with spaces in
declarations (but not with tabs), this has been fixed.

Known problems:
- due to my lack of understanding of troff(?) the generated man pages need
some improvements.

--------------Boundary-00=_S4X8LP2BSFQYB9A9EJY3
Content-Type: text/x-diff;
charset="iso-8859-1";
name="kernel-doc-2.4.10-1.diff"
Content-Transfer-Encoding: base64
Content-Description: Kernel-doc patch
Content-Disposition: attachment; filename="kernel-doc-2.4.10-1.diff"

LS0tIGtlcm5lbC1kb2Mub3JpZwlXZWQgU2VwIDI2IDAyOjM2OjUzIDIwMDEKKysrIGtlcm5lbC1k
b2MJV2VkIFNlcCAyNiAwMjo1Mjo1MSAyMDAxCkBAIC0zMSw2ICszMSwxMiBAQAogIwkJUmV0dXJu
IGVycm9yIGNvZGUuCiAjIAkJS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4KIAorIyAyMy8w
OS8yMDAxIC0gQWRkZWQgc3VwcG9ydCBmb3IgdHlwZWRlZnMsIHN0cnVjdHMsIGVudW1zIGFuZCB1
bmlvbnMKKyMgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIENvbnRleHQgc2VjdGlvbjsgY2FuIGJl
IHRlcm1pbmF0ZWQgdXNpbmcgZW1wdHkgbGluZQorIyAgICAgICAgICAgICAgU21hbGwgZml4ZXMg
KGxpa2Ugc3BhY2VzIHZzLiBccyBpbiByZWdleCkKKyMgLS0gVGltIEphbnNlbiA8dGltQHRqYW5z
ZW4uZGU+CisKKwogIwogIyBUaGlzIHdpbGwgcmVhZCBhICdjJyBmaWxlIGFuZCBzY2FuIGZvciBl
bWJlZGRlZCBjb21tZW50cyBpbiB0aGUKICMgc3R5bGUgb2YgZ25vbWUgY29tbWVudHMgKCttaW5v
ciBleHRlbnNpb25zIC0gc2VlIGJlbG93KS4KQEAgLTk1LDcgKzEwMSw0NiBAQAogIyAgKi8KICMg
ZXRjLgogIworIyBCZXNpZGUgZnVuY3Rpb25zIHlvdSBjYW4gYWxzbyB3cml0ZSBkb2N1bWVudGF0
aW9uIGZvciBzdHJ1Y3RzLCB1bmlvbnMsIGVudW1zIGFuZAorIyB0eXBlZGVmcy4gSW5zdGVhZCBv
ZiB0aGUgZnVuY3Rpb24gbmFtZSB5b3UgbXVzdCB3cml0ZSB0aGUgbmFtZSBvZiB0aGUgZGVjbGFy
YXRpb247CisjIHRoZSBzdHJ1Y3QvdW5pb24vZW51bS90eXBlZGVmIG11c3QgYWx3YXlzIHByZWNl
ZGUgdGhlIG5hbWUuIFVzZSB0aGUgYXJndW1lbnQgbWVjaGFuaXNtIAorIyB0byBkb2N1bWVudCBt
ZW1iZXJzIG9yIGNvbnN0YW50cy4gSW4gc3RydWN0cyBhbmQgdW5pb25zIHlvdSBtdXN0IGRlY2xh
cmUgb25lIG1lbWJlciAKKyMgcGVyIGRlY2xhcmF0aW9uIChjb21tYS1zZXBhcmF0ZWQgbWVtYmVy
cyBhcmUgbm90IGFsbG93ZWQgLSAgdGhlIHBhcnNlciBkb2VzCisjIG5vdCBzdXBwb3J0IHRoaXMp
LgorIyBlLmcuCisjIC8qKgorIyAgKiBzdHJ1Y3QgbXlfc3RydWN0IC0gc2hvcnQgZGVzY3JpcHRp
b24KKyMgICogQGE6IGZpcnN0IG1lbWJlcgorIyAgKiBAYjogc2Vjb25kIG1lbWJlcgorIyAgKiAK
KyMgICogTG9uZ2VyIGRlc2NyaXB0aW9uCisjICAqLworIyBzdHJ1Y3QgbXlfc3RydWN0IHsKKyMg
ICAgIGludCBhOworIyAgICAgaW50IGI7CisjIH07CisjCiAjIEFsbCBkZXNjcmlwdGlvbnMgY2Fu
IGJlIG11bHRpbGluZSwgYXBhcnQgZnJvbSB0aGUgc2hvcnQgZnVuY3Rpb24gZGVzY3JpcHRpb24u
CisjIAorIyBZb3UgY2FuIGFsc28gYWRkIGFkZGl0aW9uYWwgc2VjdGlvbnMuIFdoZW4gZG9jdW1l
bnRpbmcga2VybmVsIGZ1bmN0aW9ucyB5b3UgCisjIHNob3VsZCBkb2N1bWVudCB0aGUgIkNvbnRl
eHQ6IiBvZiB0aGUgZnVuY3Rpb24sIGUuZy4gd2hldGhlciB0aGUgZnVuY3Rpb25zIAorIyBjYW4g
YmUgY2FsbGVkIGZvcm0gaW50ZXJydXB0cy4gVW5saWtlIG90aGVyIHNlY3Rpb25zIHlvdSBjYW4g
ZW5kIGl0IHdpdGggYW4KKyMgZW1wdHkgbGluZS4gCisjIEV4YW1wbGUtc2VjdGlvbnMgc2hvdWxk
IGNvbnRhaW4gdGhlIHN0cmluZyBFWEFNUExFIHNvIHRoYXQgdGhleSBhcmUgbWFya2VkIAorIyBh
cHByb3ByaWF0ZWx5IGluIERvY0Jvb2suCisjCisjIEV4YW1wbGU6CisjIC8qKgorIyAgKiB1c2Vy
X2Z1bmN0aW9uIC0gZnVuY3Rpb24gdGhhdCBjYW4gb25seSBiZSBjYWxsZWQgaW4gdXNlciBjb250
ZXh0CisjICAqIEBhOiBzb21lIGFyZ3VtZW50CisjICAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQo
KQorIyAgKiAKKyMgICogU29tZSBkZXNjcmlwdGlvbgorIyAgKiBFeGFtcGxlOgorIyAgKiAgICB1
c2VyX2Z1bmN0aW9uKDIyKTsKKyMgICovCisjIC4uLgorIwogIwogIyBBbGwgZGVzY3JpcHRpdmUg
dGV4dCBpcyBmdXJ0aGVyIHByb2Nlc3NlZCwgc2Nhbm5pbmcgZm9yIHRoZSBmb2xsb3dpbmcgc3Bl
Y2lhbAogIyBwYXR0ZXJucywgd2hpY2ggYXJlIGhpZ2hsaWdodGVkIGFwcHJvcHJpYXRlbHkuCkBA
IC0xMTUsNyArMTYwLDYgQEAKIG15ICR0eXBlX3N0cnVjdCA9ICdcJigoc3RydWN0XHMqKT9bX1x3
XSspJzsKIG15ICR0eXBlX2VudiA9ICcoXCRcdyspJzsKIAotCiAjIE91dHB1dCBjb252ZXJzaW9u
IHN1YnN0aXR1dGlvbnMuCiAjICBPbmUgZm9yIGVhY2ggb3V0cHV0IGZvcm1hdAogCkBAIC0xNzcs
MTQgKzIyMSwxOCBAQAogbXkgJGJsYW5rbGluZSA9ICRibGFua2xpbmVfbWFuOwogbXkgJG1vZHVs
ZW5hbWUgPSAiS2VybmVsIEFQSSI7CiBteSAkZnVuY3Rpb25fb25seSA9IDA7CitteSAkbWFuX2Rh
dGUgPSAoJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1
bmUnLCAKKwkJJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgCisJCSdO
b3ZlbWJlcicsICdEZWNlbWJlcicpWyhsb2NhbHRpbWUpWzRdXSAuIAorICAiICIgLiAoKGxvY2Fs
dGltZSlbNV0rMTkwMCk7CiAKICMgRXNzZW50aWFsbHkgdGhlc2UgYXJlIGdsb2JhbHMKICMgVGhl
eSBwcm9iYWJseSB3YW50IHRvIGJlIHRpZGllZCB1cCBtYWRlIG1vcmUgbG9jYWxpc2VkIG9yIHN1
bW1hdC4KICMgQ0FWRUFUIEVNUFRPUiEgIFNvbWUgb2YgdGhlIG90aGVycyBJIGxvY2FsaXNlZCBt
YXkgbm90IHdhbnQgdG8gYmUgd2hpY2gKICMgY291bGQgY2F1c2UgInVzZSBvZiB1bmRlZmluZWQg
dmFsdWUiIG9yIG90aGVyIGJ1Z3MuCi1teSAoJGZ1bmN0aW9uLCAlZnVuY3Rpb25fdGFibGUsJXBh
cmFtZXRlcnR5cGVzLCRmdW5jdGlvbl9wdXJwb3NlKTsKLW15ICgkdHlwZSwkZmlsZSwkZnVuY3Rp
b25fbmFtZSwkcmV0dXJuX3R5cGUpOwotbXkgKCRuZXdzZWN0aW9uLCRuZXdjb250ZW50cywkcHJv
dG90eXBlLCRmaWxlbGlzdCk7CitteSAoJGZ1bmN0aW9uLCAlZnVuY3Rpb25fdGFibGUsJXBhcmFt
ZXRlcnR5cGVzLCRkZWNsYXJhdGlvbl9wdXJwb3NlKTsKK215ICgkdHlwZSwkZmlsZSwkZGVjbGFy
YXRpb25fbmFtZSwkcmV0dXJuX3R5cGUpOworbXkgKCRuZXdzZWN0aW9uLCRuZXdjb250ZW50cywk
cHJvdG90eXBlLCRmaWxlbGlzdCwgJGJyY291bnQsICVzb3VyY2VfbWFwKTsKIAogbXkgJGxpbmVw
cmVmaXg9IiI7CiAKQEAgLTE5MywyOCArMjQxLDM4IEBACiAjIDEgLSBsb29raW5nIGZvciBmdW5j
dGlvbiBuYW1lCiAjIDIgLSBzY2FubmluZyBmaWVsZCBzdGFydC4KICMgMyAtIHNjYW5uaW5nIHBy
b3RvdHlwZS4KLW15ICRzdGF0ZSA9IDA7CisjIDQgLSBkb2N1bWVudGF0aW9uIGJsb2NrCitteSAk
c3RhdGU7CisKKyNkZWNsYXJhdGlvbiB0eXBlczogY2FuIGJlCisjICdmdW5jdGlvbicsICdzdHJ1
Y3QnLCAndW5pb24nLCAnZW51bScsICd0eXBlZGVmJworbXkgJGRlY2xfdHlwZTsKKwogbXkgJGRv
Y19zcGVjaWFsID0gIlxAXCVcJFwmIjsKIAotbXkgJGRvY19zdGFydCA9ICJeL1xcKlxcKlwkIjsK
LW15ICRkb2NfZW5kID0gIlxcKi8iOwotbXkgJGRvY19jb20gPSAiXFxzKlxcKlxccyoiOwotbXkg
JGRvY19mdW5jID0gJGRvY19jb20uIihcXHcrKTo/IjsKLW15ICRkb2Nfc2VjdCA9ICRkb2NfY29t
LiIoWyIuJGRvY19zcGVjaWFsLiJdP1tcXHcgXSspOiguKikiOwotbXkgJGRvY19jb250ZW50ID0g
JGRvY19jb20uIiguKikiOwotbXkgJGRvY19ibG9jayA9ICRkb2NfY29tLiJET0M6XFxzKiguKik/
IjsKLQotbXkgJWNvbnN0YW50cyA9ICgpOwotbXkgJXBhcmFtZXRlcnMgPSAoKTsKLW15IEBwYXJh
bWV0ZXJsaXN0ID0gKCk7Ci1teSAlc2VjdGlvbnMgPSAoKTsKLW15IEBzZWN0aW9ubGlzdCA9ICgp
OwotbXkgJXNvdXJjZV9tYXAgPSAoKTsKK215ICRkb2Nfc3RhcnQgPSAnXi9cKlwqXHMqJCc7ICMg
QWxsb3cgd2hpdGVzcGFjZSBhdCBlbmQgb2YgY29tbWVudCBzdGFydC4KK215ICRkb2NfZW5kID0g
J1wqLyc7CitteSAkZG9jX2NvbSA9ICdccypcKlxzKic7CitteSAkZG9jX2RlY2wgPSAkZG9jX2Nv
bS4nKFx3KyknOworbXkgJGRvY19zZWN0ID0gJGRvY19jb20uJyhbJy4kZG9jX3NwZWNpYWwuJ10/
W1x3IF0rKTooLiopJzsKK215ICRkb2NfY29udGVudCA9ICRkb2NfY29tLicoLiopJzsKK215ICRk
b2NfYmxvY2sgPSAkZG9jX2NvbS4nRE9DOlxzKiguKik/JzsKKworbXkgJWNvbnN0YW50czsKK215
ICVwYXJhbWV0ZXJkZXNjczsKK215IEBwYXJhbWV0ZXJsaXN0OworbXkgJXNlY3Rpb25zOworbXkg
QHNlY3Rpb25saXN0OwogCiBteSAkY29udGVudHMgPSAiIjsKIG15ICRzZWN0aW9uX2RlZmF1bHQg
PSAiRGVzY3JpcHRpb24iOwkjIGRlZmF1bHQgc2VjdGlvbgogbXkgJHNlY3Rpb25faW50cm8gPSAi
SW50cm9kdWN0aW9uIjsKIG15ICRzZWN0aW9uID0gJHNlY3Rpb25fZGVmYXVsdDsKK215ICRzZWN0
aW9uX2NvbnRleHQgPSAiQ29udGV4dCI7CisKK215ICR1bmRlc2NyaWJlZCA9ICItLSB1bmRlc2Ny
aWJlZCAtLSI7CisKK3Jlc2V0X3N0YXRlKCk7CiAKIHdoaWxlICgkQVJHVlswXSA9fiBtL14tKC4q
KS8pIHsKICAgICBteSAkY21kID0gc2hpZnQgQEFSR1Y7CkBAIC0yODAsNyArMzM4LDcgQEAKICAg
ICB9IGVsc2lmICgkbmFtZSA9fiBtLyR0eXBlX3BhcmFtLykgewogIwlwcmludCBTVERFUlIgInBh
cmFtZXRlciBkZWYgJyQxJyA9ICckY29udGVudHMnXG4iOwogCSRuYW1lID0gJDE7Ci0JJHBhcmFt
ZXRlcnN7JG5hbWV9ID0gJGNvbnRlbnRzOworCSRwYXJhbWV0ZXJkZXNjc3skbmFtZX0gPSAkY29u
dGVudHM7CiAgICAgfSBlbHNlIHsKICMJcHJpbnQgU1RERVJSICJvdGhlciBzZWN0aW9uICckbmFt
ZScgPSAnJGNvbnRlbnRzJ1xuIjsKIAkkc2VjdGlvbnN7JG5hbWV9ID0gJGNvbnRlbnRzOwpAQCAt
MjkxLDI4ICszNDksMjggQEAKICMjCiAjIG91dHB1dCBmdW5jdGlvbgogIwotIyBwYXJhbWV0ZXJz
LCBhIGhhc2guCisjIHBhcmFtZXRlcmRlc2NzLCBhIGhhc2guCiAjICBmdW5jdGlvbiA9PiAiZnVu
Y3Rpb24gbmFtZSIKICMgIHBhcmFtZXRlcmxpc3QgPT4gQGxpc3Qgb2YgcGFyYW1ldGVycwotIyAg
cGFyYW1ldGVycyA9PiAlcGFyYW1ldGVyIGRlc2NyaXB0aW9ucworIyAgcGFyYW1ldGVyZGVzY3Mg
PT4gJXBhcmFtZXRlciBkZXNjcmlwdGlvbnMKICMgIHNlY3Rpb25saXN0ID0+IEBsaXN0IG9mIHNl
Y3Rpb25zCiAjICBzZWN0aW9ucyA9PiAlZGVzY3Jpb250IGRlc2NyaXB0aW9ucwogIyAgCiAKLXN1
YiBvdXRwdXRfaGlnaGxpZ2h0KEApIHsKK3N1YiBvdXRwdXRfaGlnaGxpZ2h0IHsKICAgICBteSAk
Y29udGVudHMgPSBqb2luICJcbiIsQF87CiAgICAgbXkgJGxpbmU7CiAKLSMJREVCVUcKLSMJaWYg
KCFkZWZpbmVkICRjb250ZW50cykgewotIwkgICAgdXNlIENhcnA7Ci0jCSAgICBjb25mZXNzICJv
dXRwdXRfaGlnaGxpZ2h0IGdvdCBjYWxsZWQgd2l0aCBubyBhcmdzP1xuIjsKLSMgICAgfQorIyAg
IERFQlVHCisjICAgaWYgKCFkZWZpbmVkICRjb250ZW50cykgeworIwl1c2UgQ2FycDsKKyMJY29u
ZmVzcyAib3V0cHV0X2hpZ2hsaWdodCBnb3QgY2FsbGVkIHdpdGggbm8gYXJncz9cbiI7CisjICAg
fQogCiAgICAgZXZhbCAkZG9oaWdobGlnaHQ7CiAgICAgZGllICRAIGlmICRAOwogICAgIGZvcmVh
Y2ggJGxpbmUgKHNwbGl0ICJcbiIsICRjb250ZW50cykgewotCWlmICgkbGluZSBlcSAiIil7Cisg
ICAgICBpZiAoJGxpbmUgZXEgIiIpewogCSAgICBwcmludCAkbGluZXByZWZpeCwgJGJsYW5rbGlu
ZTsKIAl9IGVsc2UgewogICAgICAgICAgICAgJGxpbmUgPX4gcy9cXFxcXFwvXCYvZzsKQEAgLTMy
Miw5ICszODAsOTYgQEAKICAgICB9CiB9CiAKKyNvdXRwdXQgc2VjdGlvbnMgaW4gaHRtbAorc3Vi
IG91dHB1dF9zZWN0aW9uX2h0bWwoJSkgeworICAgIG15ICVhcmdzID0gJXskX1swXX07CisgICAg
bXkgJHNlY3Rpb247CisKKyAgICBmb3JlYWNoICRzZWN0aW9uIChAeyRhcmdzeydzZWN0aW9ubGlz
dCd9fSkgeworCXByaW50ICI8aDM+JHNlY3Rpb248L2gzPlxuIjsKKwlwcmludCAiPGJsb2NrcXVv
dGU+XG4iOworCW91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3NlY3Rpb25zJ317JHNlY3Rpb259KTsK
KwlwcmludCAiPC9ibG9ja3F1b3RlPlxuIjsKKyAgICB9ICAKK30KKworIyBvdXRwdXQgZW51bSBp
biBodG1sCitzdWIgb3V0cHV0X2VudW1faHRtbCglKSB7CisgICAgbXkgJWFyZ3MgPSAleyRfWzBd
fTsKKyAgICBteSAoJHBhcmFtZXRlcik7CisgICAgbXkgJGNvdW50OworICAgIHByaW50ICI8aDI+
ZW51bSAiLiRhcmdzeydlbnVtJ30uIjwvaDI+XG4iOworCisgICAgcHJpbnQgIjxiPmVudW0gIi4k
YXJnc3snZW51bSd9LiI8L2I+IHs8YnI+XG4iOworICAgICRjb3VudCA9IDA7CisgICAgZm9yZWFj
aCAkcGFyYW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisgICAgICAgIHByaW50
ICIgPGI+Ii4kcGFyYW1ldGVyLiI8L2I+IjsKKwlpZiAoJGNvdW50ICE9ICQjeyRhcmdzeydwYXJh
bWV0ZXJsaXN0J319KSB7CisJICAgICRjb3VudCsrOworCSAgICBwcmludCAiLFxuIjsKKwl9CisJ
cHJpbnQgIjxicj4iOworICAgIH0KKyAgICBwcmludCAifTs8YnI+XG4iOworCisgICAgcHJpbnQg
IjxoMz5Db25zdGFudHM8L2gzPlxuIjsKKyAgICBwcmludCAiPGRsPlxuIjsKKyAgICBmb3JlYWNo
ICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKKwlwcmludCAiPGR0Pjxi
PiIuJHBhcmFtZXRlci4iPC9iPlxuIjsKKwlwcmludCAiPGRkPiI7CisJb3V0cHV0X2hpZ2hsaWdo
dCgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSk7CisgICAgfQorICAgIHByaW50
ICI8L2RsPlxuIjsKKyAgICBvdXRwdXRfc2VjdGlvbl9odG1sKEBfKTsKKyAgICBwcmludCAiPGhy
PlxuIjsKK30KKworIyBvdXRwdXQgdHllcGRlZiBpbiBodG1sCitzdWIgb3V0cHV0X3R5cGVkZWZf
aHRtbCglKSB7CisgICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKKyAgICBteSAoJHBhcmFtZXRlcik7
CisgICAgbXkgJGNvdW50OworICAgIHByaW50ICI8aDI+dHlwZWRlZiAiLiRhcmdzeyd0eXBlZGVm
J30uIjwvaDI+XG4iOworCisgICAgcHJpbnQgIjxiPnR5cGVkZWYgIi4kYXJnc3sndHlwZWRlZid9
LiI8L2I+XG4iOworICAgIG91dHB1dF9zZWN0aW9uX2h0bWwoQF8pOworICAgIHByaW50ICI8aHI+
XG4iOworfQorCisjIG91dHB1dCBzdHJ1Y3QgaW4gaHRtbAorc3ViIG91dHB1dF9zdHJ1Y3RfaHRt
bCglKSB7CisgICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKKyAgICBteSAoJHBhcmFtZXRlcik7CiAK
LSMgb3V0cHV0IGluIGh0bWwKLXN1YiBvdXRwdXRfaHRtbCglKSB7CisgICAgcHJpbnQgIjxoMj4i
LiRhcmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iPC9oMj5cbiI7CisgICAgcHJpbnQg
IjxiPiIuJGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0cnVjdCd9LiI8L2I+IHs8YnI+XG4iOwor
ICAgIGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworICAg
ICAgICAoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcn0gbmUgJHVuZGVzY3JpYmVk
KSB8fCBuZXh0OworCSR0eXBlID0gJGFyZ3N7J3BhcmFtZXRlcnR5cGVzJ317JHBhcmFtZXRlcn07
CisJaWYgKCR0eXBlID1+IG0vKFteXChdKlwoXCopXHMqXClccypcKChbXlwpXSopXCkvKSB7CisJ
ICAgICMgcG9pbnRlci10by1mdW5jdGlvbgorCSAgICBwcmludCAiIDxpPiQxPC9pPjxiPiRwYXJh
bWV0ZXI8L2I+KSA8aT4oJDIpPC9pPjs8YnI+IjsKKwl9IGVsc2UgeworCSAgICBwcmludCAiIDxp
PiIuJHR5cGUuIjwvaT4gPGI+Ii4kcGFyYW1ldGVyLiI8L2I+Ozxicj4iOworCX0KKyAgICB9Cisg
ICAgcHJpbnQgIn07PGJyPlxuIjsKKworICAgIHByaW50ICI8aDM+TWVtYmVyczwvaDM+XG4iOwor
ICAgIHByaW50ICI8ZGw+XG4iOworICAgIGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFy
YW1ldGVybGlzdCd9fSkgeworICAgICAgICAoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFt
ZXRlcn0gbmUgJHVuZGVzY3JpYmVkKSB8fCBuZXh0OworCXByaW50ICI8ZHQ+PGI+Ii4kcGFyYW1l
dGVyLiI8L2I+XG4iOworCXByaW50ICI8ZGQ+IjsKKwlvdXRwdXRfaGlnaGxpZ2h0KCRhcmdzeydw
YXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJ9KTsKKyAgICB9CisgICAgcHJpbnQgIjwvZGw+XG4i
OworICAgIG91dHB1dF9zZWN0aW9uX2h0bWwoQF8pOworICAgIHByaW50ICI8aHI+XG4iOworfQor
CisjIG91dHB1dCBmdW5jdGlvbiBpbiBodG1sCitzdWIgb3V0cHV0X2Z1bmN0aW9uX2h0bWwoJSkg
ewogICAgIG15ICVhcmdzID0gJXskX1swXX07CiAgICAgbXkgKCRwYXJhbWV0ZXIsICRzZWN0aW9u
KTsKICAgICBteSAkY291bnQ7CkBAIC0zNTIsMjIgKzQ5NywxNyBAQAogICAgIHByaW50ICI8aDM+
QXJndW1lbnRzPC9oMz5cbiI7CiAgICAgcHJpbnQgIjxkbD5cbiI7CiAgICAgZm9yZWFjaCAkcGFy
YW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisgICAgICAgICgkYXJnc3sncGFy
YW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CiAJcHJp
bnQgIjxkdD48Yj4iLiRwYXJhbWV0ZXIuIjwvYj5cbiI7CiAJcHJpbnQgIjxkZD4iOwotCW91dHB1
dF9oaWdobGlnaHQoJGFyZ3N7J3BhcmFtZXRlcnMnfXskcGFyYW1ldGVyfSk7CisJb3V0cHV0X2hp
Z2hsaWdodCgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSk7CiAgICAgfQogICAg
IHByaW50ICI8L2RsPlxuIjsKLSAgICBmb3JlYWNoICRzZWN0aW9uIChAeyRhcmdzeydzZWN0aW9u
bGlzdCd9fSkgewotCXByaW50ICI8aDM+JHNlY3Rpb248L2gzPlxuIjsKLQlwcmludCAiPGJsb2Nr
cXVvdGU+XG4iOwotCW91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3NlY3Rpb25zJ317JHNlY3Rpb259
KTsKLQlwcmludCAiPC9ibG9ja3F1b3RlPlxuIjsKLSAgICB9CisgICAgb3V0cHV0X3NlY3Rpb25f
aHRtbChAXyk7CiAgICAgcHJpbnQgIjxocj5cbiI7CiB9CiAKLQotIyBvdXRwdXQgaW4gaHRtbAor
IyBvdXRwdXQgaW50cm8gaW4gaHRtbAogc3ViIG91dHB1dF9pbnRyb19odG1sKCUpIHsKICAgICBt
eSAlYXJncyA9ICV7JF9bMF19OwogICAgIG15ICgkcGFyYW1ldGVyLCAkc2VjdGlvbik7CkBAIC0z
ODIsOCArNTIyLDI2IEBACiAgICAgcHJpbnQgIjxocj5cbiI7CiB9CiAKLSMgb3V0cHV0IGluIHNn
bWwgRG9jQm9vawotc3ViIG91dHB1dF9zZ21sKCUpIHsKK3N1YiBvdXRwdXRfc2VjdGlvbl9zZ21s
KCUpIHsKKyAgICBteSAlYXJncyA9ICV7JF9bMF19OworICAgIG15ICRzZWN0aW9uOyAgICAKKyAg
ICAjIHByaW50IG91dCBlYWNoIHNlY3Rpb24KKyAgICAkbGluZXByZWZpeD0iICAgIjsKKyAgICBm
b3JlYWNoICRzZWN0aW9uIChAeyRhcmdzeydzZWN0aW9ubGlzdCd9fSkgeworCXByaW50ICI8cmVm
c2VjdDE+XG4gPHRpdGxlPiRzZWN0aW9uPC90aXRsZT5cbiA8cGFyYT5cbiI7CisJaWYgKCRzZWN0
aW9uID1+IG0vRVhBTVBMRS9pKSB7CisJICAgIHByaW50ICI8ZXhhbXBsZT48cGFyYT5cbiI7CisJ
fQorCW91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3NlY3Rpb25zJ317JHNlY3Rpb259KTsKKwlpZiAo
JHNlY3Rpb24gPX4gbS9FWEFNUExFL2kpIHsKKwkgICAgcHJpbnQgIjwvcGFyYT48L2V4YW1wbGU+
XG4iOworCX0KKwlwcmludCAiIDwvcGFyYT5cbjwvcmVmc2VjdDE+XG4iOworICAgIH0KK30KKwor
IyBvdXRwdXQgZnVuY3Rpb24gaW4gc2dtbCBEb2NCb29rCitzdWIgb3V0cHV0X2Z1bmN0aW9uX3Nn
bWwoJSkgewogICAgIG15ICVhcmdzID0gJXskX1swXX07CiAgICAgbXkgKCRwYXJhbWV0ZXIsICRz
ZWN0aW9uKTsKICAgICBteSAkY291bnQ7CkBAIC00MDYsMTAgKzU2NCw5IEBACiAKICAgICBwcmlu
dCAiPHJlZnN5bm9wc2lzZGl2PlxuIjsKICAgICBwcmludCAiIDx0aXRsZT5TeW5vcHNpczwvdGl0
bGU+XG4iOwotICAgIHByaW50ICIgIDxmdW5jc3lub3BzaXM+XG4iOworICAgIHByaW50ICIgIDxm
dW5jc3lub3BzaXM+PGZ1bmNwcm90b3R5cGU+XG4iOwogICAgIHByaW50ICIgICA8ZnVuY2RlZj4i
LiRhcmdzeydmdW5jdGlvbnR5cGUnfS4iICI7Ci0gICAgcHJpbnQgIjxmdW5jdGlvbj4iLiRhcmdz
eydmdW5jdGlvbid9LiIgIjsKLSAgICBwcmludCAiPC9mdW5jdGlvbj48L2Z1bmNkZWY+XG4iOwor
ICAgIHByaW50ICI8ZnVuY3Rpb24+Ii4kYXJnc3snZnVuY3Rpb24nfS4iIDwvZnVuY3Rpb24+PC9m
dW5jZGVmPlxuIjsKIAogICAgICRjb3VudCA9IDA7CiAgICAgaWYgKCQjeyRhcmdzeydwYXJhbWV0
ZXJsaXN0J319ID49IDApIHsKQEAgLTQzOCw3ICs1OTUsNyBAQAogCSAgICBwcmludCAiICA8dmFy
bGlzdGVudHJ5PlxuICAgPHRlcm0+PHBhcmFtZXRlcj4kcGFyYW1ldGVyPC9wYXJhbWV0ZXI+PC90
ZXJtPlxuIjsKIAkgICAgcHJpbnQgIiAgIDxsaXN0aXRlbT5cbiAgICA8cGFyYT5cbiI7CiAJICAg
ICRsaW5lcHJlZml4PSIgICAgICI7Ci0JICAgIG91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3BhcmFt
ZXRlcnMnfXskcGFyYW1ldGVyfSk7CisJICAgIG91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3BhcmFt
ZXRlcmRlc2NzJ317JHBhcmFtZXRlcn0pOwogCSAgICBwcmludCAiICAgIDwvcGFyYT5cbiAgIDwv
bGlzdGl0ZW0+XG4gIDwvdmFybGlzdGVudHJ5PlxuIjsKIAl9CiAJcHJpbnQgIiA8L3ZhcmlhYmxl
bGlzdD5cbiI7CkBAIC00NDcsMTkgKzYwNCwxNTUgQEAKICAgICB9CiAgICAgcHJpbnQgIjwvcmVm
c2VjdDE+XG4iOwogCi0gICAgIyBwcmludCBvdXQgZWFjaCBzZWN0aW9uCi0gICAgJGxpbmVwcmVm
aXg9IiAgICI7Ci0gICAgZm9yZWFjaCAkc2VjdGlvbiAoQHskYXJnc3snc2VjdGlvbmxpc3QnfX0p
IHsKLQlwcmludCAiPHJlZnNlY3QxPlxuIDx0aXRsZT4kc2VjdGlvbjwvdGl0bGU+XG4gPHBhcmE+
XG4iOwotCWlmICgkc2VjdGlvbiA9fiBtL0VYQU1QTEUvaSkgewotCSAgICBwcmludCAiPGV4YW1w
bGU+PHBhcmE+XG4iOwotCX0KLQlvdXRwdXRfaGlnaGxpZ2h0KCRhcmdzeydzZWN0aW9ucyd9eyRz
ZWN0aW9ufSk7Ci0JaWYgKCRzZWN0aW9uID1+IG0vRVhBTVBMRS9pKSB7Ci0JICAgIHByaW50ICI8
L3BhcmE+PC9leGFtcGxlPlxuIjsKKyAgICBvdXRwdXRfc2VjdGlvbl9zZ21sKEBfKTsKKyAgICBw
cmludCAiPC9yZWZlbnRyeT5cblxuIjsKK30KKworIyBvdXRwdXQgc3RydWN0IGluIHNnbWwgRG9j
Qm9vaworc3ViIG91dHB1dF9zdHJ1Y3Rfc2dtbCglKSB7CisgICAgbXkgJWFyZ3MgPSAleyRfWzBd
fTsKKyAgICBteSAoJHBhcmFtZXRlciwgJHNlY3Rpb24pOworICAgIG15ICRpZDsKKworICAgICRp
ZCA9ICJBUEktc3RydWN0LSIuJGFyZ3N7J3N0cnVjdCd9OworICAgICRpZCA9fiBzL1teQS1aYS16
MC05XS8tL2c7CisKKyAgICBwcmludCAiPHJlZmVudHJ5PlxuIjsKKyAgICBwcmludCAiPHJlZm1l
dGE+XG4iOworICAgIHByaW50ICI8cmVmZW50cnl0aXRsZT48cGhyYXNlIGlkPVwiJGlkXCI+Ii4k
YXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIjwvcGhyYXNlPjwvcmVmZW50cnl0aXRs
ZT5cbiI7CisgICAgcHJpbnQgIjwvcmVmbWV0YT5cbiI7CisgICAgcHJpbnQgIjxyZWZuYW1lZGl2
PlxuIjsKKyAgICBwcmludCAiIDxyZWZuYW1lPiIuJGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0
cnVjdCd9LiI8L3JlZm5hbWU+XG4iOworICAgIHByaW50ICIgPHJlZnB1cnBvc2U+XG4iOworICAg
IHByaW50ICIgICI7CisgICAgb3V0cHV0X2hpZ2hsaWdodCAoJGFyZ3N7J3B1cnBvc2UnfSk7Cisg
ICAgcHJpbnQgIiA8L3JlZnB1cnBvc2U+XG4iOworICAgIHByaW50ICI8L3JlZm5hbWVkaXY+XG4i
OworCisgICAgcHJpbnQgIjxyZWZzeW5vcHNpc2Rpdj5cbiI7CisgICAgcHJpbnQgIiA8dGl0bGU+
U3lub3BzaXM8L3RpdGxlPlxuIjsKKyAgICBwcmludCAiICA8cHJvZ3JhbWxpc3Rpbmc+XG4iOwor
ICAgIHByaW50ICRhcmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iIHtcbiI7CisgICAg
Zm9yZWFjaCAkcGFyYW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisgICAgICAg
ICgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSBuZSAkdW5kZXNjcmliZWQpIHx8
IG5leHQ7CisJJHR5cGUgPSAkYXJnc3sncGFyYW1ldGVydHlwZXMnfXskcGFyYW1ldGVyfTsKKwlp
ZiAoJHR5cGUgPX4gbS8oW15cKF0qXChcKilccypcKVxzKlwoKFteXCldKilcKS8pIHsKKwkgICAg
IyBwb2ludGVyLXRvLWZ1bmN0aW9uCisJICAgIHByaW50ICIgICQxICRwYXJhbWV0ZXIgKCQyKTtc
biI7CisJfSBlbHNlIHsKKwkgICAgcHJpbnQgIiAgIi4kdHlwZS4iICIuJHBhcmFtZXRlci4iO1xu
IjsKIAl9Ci0JcHJpbnQgIiA8L3BhcmE+XG48L3JlZnNlY3QxPlxuIjsKICAgICB9CisgICAgcHJp
bnQgIn07IjsKKyAgICBwcmludCAiICA8L3Byb2dyYW1saXN0aW5nPlxuIjsKKyAgICBwcmludCAi
PC9yZWZzeW5vcHNpc2Rpdj5cbiI7CisKKyAgICBwcmludCAiIDxyZWZzZWN0MT5cbiI7CisgICAg
cHJpbnQgIiAgPHRpdGxlPk1lbWJlcnM8L3RpdGxlPlxuIjsKKworICAgIHByaW50ICIgIDx2YXJp
YWJsZWxpc3Q+XG4iOworICAgIGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVy
bGlzdCd9fSkgeworICAgICAgKCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJ9IG5l
ICR1bmRlc2NyaWJlZCkgfHwgbmV4dDsKKyAgICAgIHByaW50ICIgICAgPHZhcmxpc3RlbnRyeT4i
OworICAgICAgcHJpbnQgIiAgICAgIDx0ZXJtPiRwYXJhbWV0ZXI8L3Rlcm0+XG4iOworICAgICAg
cHJpbnQgIiAgICAgIDxsaXN0aXRlbT48cGFyYT5cbiI7CisgICAgICBvdXRwdXRfaGlnaGxpZ2h0
KCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJ9KTsKKyAgICAgIHByaW50ICIgICAg
ICA8L3BhcmE+PC9saXN0aXRlbT5cbiI7CisgICAgICBwcmludCAiICAgIDwvdmFybGlzdGVudHJ5
PlxuIjsKKyAgICB9CisgICAgcHJpbnQgIiAgPC92YXJpYWJsZWxpc3Q+XG4iOworICAgIHByaW50
ICIgPC9yZWZzZWN0MT5cbiI7CisKKyAgICBvdXRwdXRfc2VjdGlvbl9zZ21sKEBfKTsKKworICAg
IHByaW50ICI8L3JlZmVudHJ5PlxuXG4iOworfQorCisjIG91dHB1dCBlbnVtIGluIHNnbWwgRG9j
Qm9vaworc3ViIG91dHB1dF9lbnVtX3NnbWwoJSkgeworICAgIG15ICVhcmdzID0gJXskX1swXX07
CisgICAgbXkgKCRwYXJhbWV0ZXIsICRzZWN0aW9uKTsKKyAgICBteSAkY291bnQ7CisgICAgbXkg
JGlkOworCisgICAgJGlkID0gIkFQSS1lbnVtLSIuJGFyZ3N7J2VudW0nfTsKKyAgICAkaWQgPX4g
cy9bXkEtWmEtejAtOV0vLS9nOworCisgICAgcHJpbnQgIjxyZWZlbnRyeT5cbiI7CisgICAgcHJp
bnQgIjxyZWZtZXRhPlxuIjsKKyAgICBwcmludCAiPHJlZmVudHJ5dGl0bGU+PHBocmFzZSBpZD1c
IiRpZFwiPmVudW0gIi4kYXJnc3snZW51bSd9LiI8L3BocmFzZT48L3JlZmVudHJ5dGl0bGU+XG4i
OworICAgIHByaW50ICI8L3JlZm1ldGE+XG4iOworICAgIHByaW50ICI8cmVmbmFtZWRpdj5cbiI7
CisgICAgcHJpbnQgIiA8cmVmbmFtZT5lbnVtICIuJGFyZ3N7J2VudW0nfS4iPC9yZWZuYW1lPlxu
IjsKKyAgICBwcmludCAiIDxyZWZwdXJwb3NlPlxuIjsKKyAgICBwcmludCAiICAiOworICAgIG91
dHB1dF9oaWdobGlnaHQgKCRhcmdzeydwdXJwb3NlJ30pOworICAgIHByaW50ICIgPC9yZWZwdXJw
b3NlPlxuIjsKKyAgICBwcmludCAiPC9yZWZuYW1lZGl2PlxuIjsKKworICAgIHByaW50ICI8cmVm
c3lub3BzaXNkaXY+XG4iOworICAgIHByaW50ICIgPHRpdGxlPlN5bm9wc2lzPC90aXRsZT5cbiI7
CisgICAgcHJpbnQgIiAgPHByb2dyYW1saXN0aW5nPlxuIjsKKyAgICBwcmludCAiZW51bSAiLiRh
cmdzeydlbnVtJ30uIiB7XG4iOworICAgICRjb3VudCA9IDA7CisgICAgZm9yZWFjaCAkcGFyYW1l
dGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisgICAgICAgIHByaW50ICIgICRwYXJh
bWV0ZXIiOworICAgICAgICBpZiAoJGNvdW50ICE9ICQjeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319
KSB7CisJICAgICRjb3VudCsrOworCSAgICBwcmludCAiLCI7CisgICAgICAgIH0KKwlwcmludCAi
XG4iOworICAgIH0KKyAgICBwcmludCAifTsiOworICAgIHByaW50ICIgIDwvcHJvZ3JhbWxpc3Rp
bmc+XG4iOworICAgIHByaW50ICI8L3JlZnN5bm9wc2lzZGl2PlxuIjsKKworICAgIHByaW50ICI8
cmVmc2VjdDE+XG4iOworICAgIHByaW50ICIgPHRpdGxlPkNvbnN0YW50czwvdGl0bGU+XG4iOyAg
ICAKKyAgICBwcmludCAiICA8dmFyaWFibGVsaXN0PlxuIjsKKyAgICBmb3JlYWNoICRwYXJhbWV0
ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsKKyAgICAgIHByaW50ICIgICAgPHZhcmxp
c3RlbnRyeT4iOworICAgICAgcHJpbnQgIiAgICAgIDx0ZXJtPiRwYXJhbWV0ZXI8L3Rlcm0+XG4i
OworICAgICAgcHJpbnQgIiAgICAgIDxsaXN0aXRlbT48cGFyYT5cbiI7CisgICAgICBvdXRwdXRf
aGlnaGxpZ2h0KCRhcmdzeydwYXJhbWV0ZXJkZXNjcyd9eyRwYXJhbWV0ZXJ9KTsKKyAgICAgIHBy
aW50ICIgICAgICA8L3BhcmE+PC9saXN0aXRlbT5cbiI7CisgICAgICBwcmludCAiICAgIDwvdmFy
bGlzdGVudHJ5PlxuIjsKKyAgICB9CisgICAgcHJpbnQgIiAgPC92YXJpYWJsZWxpc3Q+XG4iOwor
ICAgIHByaW50ICI8L3JlZnNlY3QxPlxuIjsKKworICAgIG91dHB1dF9zZWN0aW9uX3NnbWwoQF8p
OworCisgICAgcHJpbnQgIjwvcmVmZW50cnk+XG5cbiI7Cit9CisKKyMgb3V0cHV0IHR5cGVkZWYg
aW4gc2dtbCBEb2NCb29rCitzdWIgb3V0cHV0X3R5cGVkZWZfc2dtbCglKSB7CisgICAgbXkgJWFy
Z3MgPSAleyRfWzBdfTsKKyAgICBteSAoJHBhcmFtZXRlciwgJHNlY3Rpb24pOworICAgIG15ICRp
ZDsKKworICAgICRpZCA9ICJBUEktdHlwZWRlZi0iLiRhcmdzeyd0eXBlZGVmJ307CisgICAgJGlk
ID1+IHMvW15BLVphLXowLTldLy0vZzsKKworICAgIHByaW50ICI8cmVmZW50cnk+XG4iOworICAg
IHByaW50ICI8cmVmbWV0YT5cbiI7CisgICAgcHJpbnQgIjxyZWZlbnRyeXRpdGxlPjxwaHJhc2Ug
aWQ9XCIkaWRcIj50eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iPC9waHJhc2U+PC9yZWZlbnRy
eXRpdGxlPlxuIjsKKyAgICBwcmludCAiPC9yZWZtZXRhPlxuIjsKKyAgICBwcmludCAiPHJlZm5h
bWVkaXY+XG4iOworICAgIHByaW50ICIgPHJlZm5hbWU+dHlwZWRlZiAiLiRhcmdzeyd0eXBlZGVm
J30uIjwvcmVmbmFtZT5cbiI7CisgICAgcHJpbnQgIiA8cmVmcHVycG9zZT5cbiI7CisgICAgcHJp
bnQgIiAgIjsKKyAgICBvdXRwdXRfaGlnaGxpZ2h0ICgkYXJnc3sncHVycG9zZSd9KTsKKyAgICBw
cmludCAiIDwvcmVmcHVycG9zZT5cbiI7CisgICAgcHJpbnQgIjwvcmVmbmFtZWRpdj5cbiI7CisK
KyAgICBwcmludCAiPHJlZnN5bm9wc2lzZGl2PlxuIjsKKyAgICBwcmludCAiIDx0aXRsZT5TeW5v
cHNpczwvdGl0bGU+XG4iOworICAgIHByaW50ICIgIDxzeW5vcHNpcz50eXBlZGVmICIuJGFyZ3N7
J3R5cGVkZWYnfS4iOzwvc3lub3BzaXM+XG4iOworICAgIHByaW50ICI8L3JlZnN5bm9wc2lzZGl2
PlxuIjsKKworICAgIG91dHB1dF9zZWN0aW9uX3NnbWwoQF8pOwogCiAgICAgcHJpbnQgIjwvcmVm
ZW50cnk+XG5cbiI7CiB9CkBAIC00OTEsNyArNzg0LDcgQEAKIH0KIAogIyBvdXRwdXQgaW4gc2dt
bCBEb2NCb29rCi1zdWIgb3V0cHV0X2dub21lIHsKK3N1YiBvdXRwdXRfZnVuY3Rpb25fZ25vbWUg
ewogICAgIG15ICVhcmdzID0gJXskX1swXX07CiAgICAgbXkgKCRwYXJhbWV0ZXIsICRzZWN0aW9u
KTsKICAgICBteSAkY291bnQ7CkBAIC01MzUsNyArODI4LDcgQEAKIAkgICAgcHJpbnQgIiAgPHJv
dz48ZW50cnkgYWxpZ249XCJyaWdodFwiPjxwYXJhbWV0ZXI+JHBhcmFtZXRlcjwvcGFyYW1ldGVy
PjwvZW50cnk+XG4iOwogCSAgICBwcmludCAiICAgPGVudHJ5PlxuIjsKIAkgICAgJGxpbmVwcmVm
aXg9IiAgICAgIjsKLQkgICAgb3V0cHV0X2hpZ2hsaWdodCgkYXJnc3sncGFyYW1ldGVycyd9eyRw
YXJhbWV0ZXJ9KTsKKwkgICAgb3V0cHV0X2hpZ2hsaWdodCgkYXJnc3sncGFyYW1ldGVyZGVzY3Mn
fXskcGFyYW1ldGVyfSk7CiAJICAgIHByaW50ICIgICAgPC9lbnRyeT48L3Jvdz5cbiI7CiAJfQog
CXByaW50ICIgPC90Ym9keT48L3Rncm91cD48L2luZm9ybWFsdGFibGU+XG4iOwpAQCAtNTY1LDEz
ICs4NTgsMTMgQEAKIH0KIAogIyMKLSMgb3V0cHV0IGluIG1hbgotc3ViIG91dHB1dF9tYW4oJSkg
eworIyBvdXRwdXQgZnVuY3Rpb24gaW4gbWFuCitzdWIgb3V0cHV0X2Z1bmN0aW9uX21hbiglKSB7
CiAgICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKICAgICBteSAoJHBhcmFtZXRlciwgJHNlY3Rpb24p
OwogICAgIG15ICRjb3VudDsKIAotICAgIHByaW50ICIuVEggXCIkYXJnc3snbW9kdWxlJ31cIiA5
IFwiJGFyZ3N7J2Z1bmN0aW9uJ31cIiBcIkFwcmlsIDIwMDFcIiBcIkFQSSBNYW51YWxcIiBMSU5V
WFxuIjsKKyAgICBwcmludCAiLlRIIFwiJGFyZ3N7J21vZHVsZSd9XCIgOSBcIiRhcmdzeydmdW5j
dGlvbid9XCIgXCIkbWFuX2RhdGVcIiBcIkFQSSBNYW51YWxcIiBMSU5VWFxuIjsKIAogICAgIHBy
aW50ICIuU0ggTkFNRVxuIjsKICAgICBwcmludCAkYXJnc3snZnVuY3Rpb24nfS4iIFxcLSAiLiRh
cmdzeydwdXJwb3NlJ30uIlxuIjsKQEAgLTYwMCw3ICs4OTMsNyBAQAogICAgIHByaW50ICIuU0gg
QXJndW1lbnRzXG4iOwogICAgIGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVy
bGlzdCd9fSkgewogCXByaW50ICIuSVAgXCIiLiRwYXJhbWV0ZXIuIlwiIDEyXG4iOwotCW91dHB1
dF9oaWdobGlnaHQoJGFyZ3N7J3BhcmFtZXRlcnMnfXskcGFyYW1ldGVyfSk7CisJb3V0cHV0X2hp
Z2hsaWdodCgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSk7CiAgICAgfQogICAg
IGZvcmVhY2ggJHNlY3Rpb24gKEB7JGFyZ3N7J3NlY3Rpb25saXN0J319KSB7CiAJcHJpbnQgIi5T
SCBcIiRzZWN0aW9uXCJcbiI7CkBAIC02MDgsMTIgKzkwMSwxMDggQEAKICAgICB9CiB9CiAKKyMj
CisjIG91dHB1dCBlbnVtIGluIG1hbgorc3ViIG91dHB1dF9lbnVtX21hbiglKSB7CisgICAgbXkg
JWFyZ3MgPSAleyRfWzBdfTsKKyAgICBteSAoJHBhcmFtZXRlciwgJHNlY3Rpb24pOworICAgIG15
ICRjb3VudDsKKworICAgIHByaW50ICIuVEggXCIkYXJnc3snbW9kdWxlJ31cIiA5IFwiZW51bSAk
YXJnc3snZW51bSd9XCIgXCIkbWFuX2RhdGVcIiBcIkFQSSBNYW51YWxcIiBMSU5VWFxuIjsKKwor
ICAgIHByaW50ICIuU0ggTkFNRVxuIjsKKyAgICBwcmludCAiZW51bSAiLiRhcmdzeydlbnVtJ30u
IiBcXC0gIi4kYXJnc3sncHVycG9zZSd9LiJcbiI7CisKKyAgICBwcmludCAiLlNIIFNZTk9QU0lT
XG4iOworICAgIHByaW50ICJlbnVtICIuJGFyZ3N7J2VudW0nfS4iIHtcbiI7CisgICAgJGNvdW50
ID0gMDsKKyAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3Qn
fX0pIHsKKyAgICAgICAgcHJpbnQgIi5iclxuLkJJIFwiICAgICRwYXJhbWV0ZXJcIlxuIjsKKwlp
ZiAoJGNvdW50ID09ICQjeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisJICAgIHByaW50ICJc
bn07XG4iOworCSAgICBsYXN0OworCX0KKwllbHNlIHsKKwkgICAgcHJpbnQgIiwgXG4uYnJcbiI7
CisJfQorCSRjb3VudCsrOworICAgIH0KKworICAgIHByaW50ICIuU0ggQ29uc3RhbnRzXG4iOwor
ICAgIGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworCXBy
aW50ICIuSVAgXCIiLiRwYXJhbWV0ZXIuIlwiIDEyXG4iOworCW91dHB1dF9oaWdobGlnaHQoJGFy
Z3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcn0pOworICAgIH0KKyAgICBmb3JlYWNoICRz
ZWN0aW9uIChAeyRhcmdzeydzZWN0aW9ubGlzdCd9fSkgeworCXByaW50ICIuU0ggXCIkc2VjdGlv
blwiXG4iOworCW91dHB1dF9oaWdobGlnaHQoJGFyZ3N7J3NlY3Rpb25zJ317JHNlY3Rpb259KTsK
KyAgICB9Cit9CisKKyMjCisjIG91dHB1dCBzdHJ1Y3QgaW4gbWFuCitzdWIgb3V0cHV0X3N0cnVj
dF9tYW4oJSkgeworICAgIG15ICVhcmdzID0gJXskX1swXX07CisgICAgbXkgKCRwYXJhbWV0ZXIs
ICRzZWN0aW9uKTsKKworICAgIHByaW50ICIuVEggXCIkYXJnc3snbW9kdWxlJ31cIiA5IFwiIi4k
YXJnc3sndHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIlwiIFwiJG1hbl9kYXRlXCIgXCJBUEkg
TWFudWFsXCIgTElOVVhcbiI7CisKKyAgICBwcmludCAiLlNIIE5BTUVcbiI7CisgICAgcHJpbnQg
JGFyZ3N7J3R5cGUnfS4iICIuJGFyZ3N7J3N0cnVjdCd9LiIgXFwtICIuJGFyZ3N7J3B1cnBvc2Un
fS4iXG4iOworCisgICAgcHJpbnQgIi5TSCBTWU5PUFNJU1xuIjsKKyAgICBwcmludCAkYXJnc3sn
dHlwZSd9LiIgIi4kYXJnc3snc3RydWN0J30uIiB7XG4iOworCisgICAgZm9yZWFjaCBteSAkcGFy
YW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisgICAgICAgICgkYXJnc3sncGFy
YW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CisJcHJp
bnQgIlxuLmJyXG4iOworCSR0eXBlID0gJGFyZ3N7J3BhcmFtZXRlcnR5cGVzJ317JHBhcmFtZXRl
cn07CisJaWYgKCR0eXBlID1+IG0vKFteXChdKlwoXCopXHMqXClccypcKChbXlwpXSopXCkvKSB7
CisJICAgICMgcG9pbnRlci10by1mdW5jdGlvbgorCSAgICBwcmludCAiLkJJIFwiICAgICIuJDEu
IlwiICIuJHBhcmFtZXRlci4iIFwiKSAoIi4kMi4iKSIuIlwiXG47XG4iOworCX0gZWxzZSB7CisJ
ICAgICR0eXBlID1+IHMvKFteXCpdKSQvJDEgLzsKKwkgICAgcHJpbnQgIi5CSSBcIiAgICAiLiR0
eXBlLiJcIiAiLiRwYXJhbWV0ZXIuIiBcIiIuIlwiXG47XG4iOworCX0KKwlwcmludCAiXG4uYnJc
biI7CisgICAgfQorICAgIHByaW50ICJ9O1xuLmJyXG4iOworCisgICAgcHJpbnQgIi5TSCBBcmd1
bWVudHNcbiI7CisgICAgZm9yZWFjaCAkcGFyYW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0
J319KSB7CisgICAgICAgICgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSBuZSAk
dW5kZXNjcmliZWQpIHx8IG5leHQ7CisJcHJpbnQgIi5JUCBcIiIuJHBhcmFtZXRlci4iXCIgMTJc
biI7CisJb3V0cHV0X2hpZ2hsaWdodCgkYXJnc3sncGFyYW1ldGVyZGVzY3MnfXskcGFyYW1ldGVy
fSk7CisgICAgfQorICAgIGZvcmVhY2ggJHNlY3Rpb24gKEB7JGFyZ3N7J3NlY3Rpb25saXN0J319
KSB7CisJcHJpbnQgIi5TSCBcIiRzZWN0aW9uXCJcbiI7CisJb3V0cHV0X2hpZ2hsaWdodCgkYXJn
c3snc2VjdGlvbnMnfXskc2VjdGlvbn0pOworICAgIH0KK30KKworIyMKKyMgb3V0cHV0IHR5cGVk
ZWYgaW4gbWFuCitzdWIgb3V0cHV0X3R5cGVkZWZfbWFuKCUpIHsKKyAgICBteSAlYXJncyA9ICV7
JF9bMF19OworICAgIG15ICgkcGFyYW1ldGVyLCAkc2VjdGlvbik7CisKKyAgICBwcmludCAiLlRI
IFwiJGFyZ3N7J21vZHVsZSd9XCIgOSBcIiRhcmdzeyd0eXBlZGVmJ31cIiBcIiRtYW5fZGF0ZVwi
IFwiQVBJIE1hbnVhbFwiIExJTlVYXG4iOworCisgICAgcHJpbnQgIi5TSCBOQU1FXG4iOworICAg
IHByaW50ICJ0eXBlZGVmICIuJGFyZ3N7J3R5cGVkZWYnfS4iIFxcLSAiLiRhcmdzeydwdXJwb3Nl
J30uIlxuIjsKKworICAgIGZvcmVhY2ggJHNlY3Rpb24gKEB7JGFyZ3N7J3NlY3Rpb25saXN0J319
KSB7CisJcHJpbnQgIi5TSCBcIiRzZWN0aW9uXCJcbiI7CisJb3V0cHV0X2hpZ2hsaWdodCgkYXJn
c3snc2VjdGlvbnMnfXskc2VjdGlvbn0pOworICAgIH0KK30KKwogc3ViIG91dHB1dF9pbnRyb19t
YW4oJSkgewogICAgIG15ICVhcmdzID0gJXskX1swXX07CiAgICAgbXkgKCRwYXJhbWV0ZXIsICRz
ZWN0aW9uKTsKICAgICBteSAkY291bnQ7CiAKLSAgICBwcmludCAiLlRIIFwiJGFyZ3N7J21vZHVs
ZSd9XCIgOSBcIiRhcmdzeydtb2R1bGUnfVwiIFwiQXByaWwgMjAwMVwiIFwiQVBJIE1hbnVhbFwi
IExJTlVYXG4iOworICAgIHByaW50ICIuVEggXCIkYXJnc3snbW9kdWxlJ31cIiA5IFwiJGFyZ3N7
J21vZHVsZSd9XCIgXCIkbWFuX2RhdGVcIiBcIkFQSSBNYW51YWxcIiBMSU5VWFxuIjsKIAogICAg
IGZvcmVhY2ggJHNlY3Rpb24gKEB7JGFyZ3N7J3NlY3Rpb25saXN0J319KSB7CiAJcHJpbnQgIi5T
SCBcIiRzZWN0aW9uXCJcbiI7CkBAIC02MjMsNyArMTAxMiw3IEBACiAKICMjCiAjIG91dHB1dCBp
biB0ZXh0Ci1zdWIgb3V0cHV0X3RleHQoJSkgeworc3ViIG91dHB1dF9mdW5jdGlvbl90ZXh0KCUp
IHsKICAgICBteSAlYXJncyA9ICV7JF9bMF19OwogICAgIG15ICgkcGFyYW1ldGVyLCAkc2VjdGlv
bik7CiAKQEAgLTY0OSwxMyArMTAzOCw5MCBAQAogCiAgICAgcHJpbnQgIkFyZ3VtZW50czpcblxu
IjsKICAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3BhcmFtZXRlcmxpc3QnfX0pIHsK
LQlwcmludCAkcGFyYW1ldGVyLiJcblx0Ii4kYXJnc3sncGFyYW1ldGVycyd9eyRwYXJhbWV0ZXJ9
LiJcbiI7CisJcHJpbnQgJHBhcmFtZXRlci4iXG5cdCIuJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317
JHBhcmFtZXRlcn0uIlxuIjsKICAgICB9CisgICAgb3V0cHV0X3NlY3Rpb25fdGV4dChAXyk7Cisg
ICAgcHJpbnQgIlxuXG4iOworfQorCisjb3V0cHV0IHNlY3Rpb25zIGluIHRleHQKK3N1YiBvdXRw
dXRfc2VjdGlvbl90ZXh0KCUpIHsKKyAgICBteSAlYXJncyA9ICV7JF9bMF19OworICAgIG15ICRz
ZWN0aW9uOworCisgICAgcHJpbnQgIlxuIjsKICAgICBmb3JlYWNoICRzZWN0aW9uIChAeyRhcmdz
eydzZWN0aW9ubGlzdCd9fSkgewogCXByaW50ICIkc2VjdGlvbjpcblxuIjsKIAlvdXRwdXRfaGln
aGxpZ2h0KCRhcmdzeydzZWN0aW9ucyd9eyRzZWN0aW9ufSk7CisgICAgfSAgCit9CisKKyMgb3V0
cHV0IGVudW0gaW4gdGV4dAorc3ViIG91dHB1dF9lbnVtX3RleHQoJSkgeworICAgIG15ICVhcmdz
ID0gJXskX1swXX07CisgICAgbXkgKCRwYXJhbWV0ZXIpOworICAgIG15ICRjb3VudDsKKyAgICBw
cmludCAiRW51bTpcblxuIjsKKworICAgIHByaW50ICJlbnVtICIuJGFyZ3N7J2VudW0nfS4iIHtc
biI7CisgICAgJGNvdW50ID0gMDsKKyAgICBmb3JlYWNoICRwYXJhbWV0ZXIgKEB7JGFyZ3N7J3Bh
cmFtZXRlcmxpc3QnfX0pIHsKKyAgICAgICAgcHJpbnQgIlx0JHBhcmFtZXRlciI7CisJaWYgKCRj
b3VudCAhPSAkI3skYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworCSAgICAkY291bnQrKzsKKwkg
ICAgcHJpbnQgIiwiOworCX0KKwlwcmludCAiXG4iOwogICAgIH0KLSAgICBwcmludCAiXG5cbiI7
CisgICAgcHJpbnQgIn07XG5cbiI7CisKKyAgICBwcmludCAiQ29uc3RhbnRzOlxuXG4iOworICAg
IGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworCXByaW50
ICIkcGFyYW1ldGVyXG5cdCI7CisJcHJpbnQgJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFt
ZXRlcn0uIlxuIjsKKyAgICB9CisKKyAgICBvdXRwdXRfc2VjdGlvbl90ZXh0KEBfKTsKK30KKwor
IyBvdXRwdXQgdHlwZWRlZiBpbiB0ZXh0CitzdWIgb3V0cHV0X3R5cGVkZWZfdGV4dCglKSB7Cisg
ICAgbXkgJWFyZ3MgPSAleyRfWzBdfTsKKyAgICBteSAoJHBhcmFtZXRlcik7CisgICAgbXkgJGNv
dW50OworICAgIHByaW50ICJUeXBlZGVmOlxuXG4iOworCisgICAgcHJpbnQgInR5cGVkZWYgIi4k
YXJnc3sndHlwZWRlZid9LiJcbiI7CisgICAgb3V0cHV0X3NlY3Rpb25fdGV4dChAXyk7Cit9CisK
KyMgb3V0cHV0IHN0cnVjdCBhcyB0ZXh0CitzdWIgb3V0cHV0X3N0cnVjdF90ZXh0KCUpIHsKKyAg
ICBteSAlYXJncyA9ICV7JF9bMF19OworICAgIG15ICgkcGFyYW1ldGVyKTsKKworICAgIHByaW50
ICRhcmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iOlxuXG4iOworICAgIHByaW50ICRh
cmdzeyd0eXBlJ30uIiAiLiRhcmdzeydzdHJ1Y3QnfS4iIHtcbiI7CisgICAgZm9yZWFjaCAkcGFy
YW1ldGVyIChAeyRhcmdzeydwYXJhbWV0ZXJsaXN0J319KSB7CisgICAgICAgICgkYXJnc3sncGFy
YW1ldGVyZGVzY3MnfXskcGFyYW1ldGVyfSBuZSAkdW5kZXNjcmliZWQpIHx8IG5leHQ7CisJJHR5
cGUgPSAkYXJnc3sncGFyYW1ldGVydHlwZXMnfXskcGFyYW1ldGVyfTsKKwlpZiAoJHR5cGUgPX4g
bS8oW15cKF0qXChcKilccypcKVxzKlwoKFteXCldKilcKS8pIHsKKwkgICAgIyBwb2ludGVyLXRv
LWZ1bmN0aW9uCisJICAgIHByaW50ICJcdCQxICRwYXJhbWV0ZXIpICgkMik7XG4iOworCX0gZWxz
ZSB7CisJICAgIHByaW50ICJcdCIuJHR5cGUuIiAiLiRwYXJhbWV0ZXIuIjtcbiI7CisJfQorICAg
IH0KKyAgICBwcmludCAifTtcblxuIjsKKworICAgIHByaW50ICJNZW1iZXJzOlxuXG4iOworICAg
IGZvcmVhY2ggJHBhcmFtZXRlciAoQHskYXJnc3sncGFyYW1ldGVybGlzdCd9fSkgeworICAgICAg
ICAoJGFyZ3N7J3BhcmFtZXRlcmRlc2NzJ317JHBhcmFtZXRlcn0gbmUgJHVuZGVzY3JpYmVkKSB8
fCBuZXh0OworCXByaW50ICIkcGFyYW1ldGVyXG5cdCI7CisJcHJpbnQgJGFyZ3N7J3BhcmFtZXRl
cmRlc2NzJ317JHBhcmFtZXRlcn0uIlxuIjsKKyAgICB9CisgICAgcHJpbnQgIlxuIjsKKyAgICBv
dXRwdXRfc2VjdGlvbl90ZXh0KEBfKTsKIH0KIAogc3ViIG91dHB1dF9pbnRyb190ZXh0KCUpIHsK
QEAgLTY3MCwxMiArMTEzNiwxOCBAQAogfQogCiAjIwotIyBnZW5lcmljIG91dHB1dCBmdW5jdGlv
biAtIGNhbGxzIHRoZSByaWdodCBvbmUgYmFzZWQKLSMgb24gY3VycmVudCBvdXRwdXQgbW9kZS4K
LXN1YiBvdXRwdXRfZnVuY3Rpb24geworIyBnZW5lcmljIG91dHB1dCBmdW5jdGlvbiBmb3IgdHlw
ZWRlZnMKK3N1YiBvdXRwdXRfZGVjbGFyYXRpb24gewogICAgIG5vIHN0cmljdCAncmVmcyc7Ci0g
ICAgbXkgJGZ1bmMgPSAib3V0cHV0XyIuJG91dHB1dF9tb2RlOwotICAgICYkZnVuYyhAXyk7Cisg
ICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkZnVuY3R5cGUgPSBzaGlmdDsKKyAgICBteSAk
ZnVuYyA9ICJvdXRwdXRfJHtmdW5jdHlwZX1fJG91dHB1dF9tb2RlIjsKKyAgICBpZiAoKCRmdW5j
dGlvbl9vbmx5PT0wKSB8fCAKKwkoICRmdW5jdGlvbl9vbmx5ID09IDEgJiYgZGVmaW5lZCgkZnVu
Y3Rpb25fdGFibGV7JG5hbWV9KSkgfHwgCisJKCAkZnVuY3Rpb25fb25seSA9PSAyICYmICFkZWZp
bmVkKCRmdW5jdGlvbl90YWJsZXskbmFtZX0pKSkKKyAgICB7CisgICAgICAgICYkZnVuYyhAXyk7
CisgICAgfQogfQogCiAjIwpAQCAtNjg3LDYgKzExNTksMTc0IEBACiAgICAgJiRmdW5jKEBfKTsK
IH0KIAorIyMKKyMgdGFrZXMgYSBkZWNsYXJhdGlvbiAoc3RydWN0LCB1bmlvbiwgZW51bSwgdHlw
ZWRlZikgYW5kIAorIyBpbnZva2VzIHRoZSByaWdodCBoYW5kbGVyLiBOT1QgY2FsbGVkIGZvciBm
dW5jdGlvbnMuCitzdWIgZHVtcF9kZWNsYXJhdGlvbigkJCkgeworICAgIG5vIHN0cmljdCAncmVm
cyc7CisgICAgbXkgKCRwcm90b3R5cGUsICRmaWxlKSA9IEBfOworICAgIG15ICRmdW5jID0gImR1
bXBfIi4kZGVjbF90eXBlOworICAgICYkZnVuYyhAXyk7Cit9CisKK3N1YiBkdW1wX3VuaW9uKCQk
KSB7CisgICAgZHVtcF9zdHJ1Y3QoQF8pOworfQorCitzdWIgZHVtcF9zdHJ1Y3QoJCQpIHsKKyAg
ICBteSAkeCA9IHNoaWZ0OworICAgIG15ICRmaWxlID0gc2hpZnQ7CisKKyAgICBpZiAoJHggPX4v
KHN0cnVjdHx1bmlvbilccysoXHcrKVxzKnsoLiopfS8pIHsKKyAgICAgICAgJGRlY2xhcmF0aW9u
X25hbWUgPSAkMjsKKyAgICAgICAgbXkgJG1lbWJlcnMgPSAkMzsKKworCSMgaWdub3JlIGVtYmVk
ZGVkIHN0cnVjdHMgb3IgdW5pb25zCisJJG1lbWJlcnMgPX4gcy97Lip9Ly9nOworCisJY3JlYXRl
X3BhcmFtZXRlcmxpc3QoJG1lbWJlcnMsICc7Jyk7CisKKwlvdXRwdXRfZGVjbGFyYXRpb24oJGRl
Y2xhcmF0aW9uX25hbWUsCisJCQkgICAnc3RydWN0JywKKwkJCSAgIHsnc3RydWN0JyA9PiAkZGVj
bGFyYXRpb25fbmFtZSwKKwkJCSAgICAnbW9kdWxlJyA9PiAkbW9kdWxlbmFtZSwKKwkJCSAgICAn
cGFyYW1ldGVybGlzdCcgPT4gXEBwYXJhbWV0ZXJsaXN0LAorCQkJICAgICdwYXJhbWV0ZXJkZXNj
cycgPT4gXCVwYXJhbWV0ZXJkZXNjcywKKwkJCSAgICAncGFyYW1ldGVydHlwZXMnID0+IFwlcGFy
YW1ldGVydHlwZXMsCisJCQkgICAgJ3NlY3Rpb25saXN0JyA9PiBcQHNlY3Rpb25saXN0LAorCQkJ
ICAgICdzZWN0aW9ucycgPT4gXCVzZWN0aW9ucywKKwkJCSAgICAncHVycG9zZScgPT4gJGRlY2xh
cmF0aW9uX3B1cnBvc2UsCisJCQkgICAgJ3R5cGUnID0+ICRkZWNsX3R5cGUKKwkJCSAgIH0pOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgU1RERVJSICJDYW5ub3QgcGFyc2Ugc3Ry
dWN0IG9yIHVuaW9uIVxuIjsKKyAgICB9Cit9CisKK3N1YiBkdW1wX2VudW0oJCQpIHsKKyAgICBt
eSAkeCA9IHNoaWZ0OworICAgIG15ICRmaWxlID0gc2hpZnQ7CisKKyAgICBpZiAoJHggPX4gL2Vu
dW1ccysoXHcrKVxzKnsoLiopfS8pIHsKKyAgICAgICAgJGRlY2xhcmF0aW9uX25hbWUgPSAkMTsK
KyAgICAgICAgbXkgJG1lbWJlcnMgPSAkMjsKKworCWZvcmVhY2ggbXkgJGFyZyAoc3BsaXQgJywn
LCAkbWVtYmVycykgeworCSAgICAkYXJnID1+IHMvXlxzKihcdyspLiovJDEvOworCSAgICBwdXNo
IEBwYXJhbWV0ZXJsaXN0LCAkYXJnOworCSAgICBpZiAoISRwYXJhbWV0ZXJkZXNjc3skYXJnfSkg
eworCSAgICAgICAgJHBhcmFtZXRlcmRlc2NzeyRhcmd9ID0gJHVuZGVzY3JpYmVkOworCSAgICAg
ICAgcHJpbnQgU1RERVJSICJXYXJuaW5nKCRmaWxlOiQuKTogRW51bSB2YWx1ZSAnJGFyZycgIi4K
KwkJICAgICJkZXNjcmliZWQgaW4gZW51bSAnJGRlY2xhcmF0aW9uX25hbWUnXG4iOworCSAgICB9
CisKKwl9CisJCisJb3V0cHV0X2RlY2xhcmF0aW9uKCRkZWNsYXJhdGlvbl9uYW1lLAorCQkJICAg
J2VudW0nLAorCQkJICAgeydlbnVtJyA9PiAkZGVjbGFyYXRpb25fbmFtZSwKKwkJCSAgICAnbW9k
dWxlJyA9PiAkbW9kdWxlbmFtZSwKKwkJCSAgICAncGFyYW1ldGVybGlzdCcgPT4gXEBwYXJhbWV0
ZXJsaXN0LAorCQkJICAgICdwYXJhbWV0ZXJkZXNjcycgPT4gXCVwYXJhbWV0ZXJkZXNjcywKKwkJ
CSAgICAnc2VjdGlvbmxpc3QnID0+IFxAc2VjdGlvbmxpc3QsCisJCQkgICAgJ3NlY3Rpb25zJyA9
PiBcJXNlY3Rpb25zLAorCQkJICAgICdwdXJwb3NlJyA9PiAkZGVjbGFyYXRpb25fcHVycG9zZQor
CQkJICAgfSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludCBTVERFUlIgIkNhbm5v
dCBwYXJzZSBlbnVtIVxuIjsKKyAgICB9Cit9CisKK3N1YiBkdW1wX3R5cGVkZWYoJCQpIHsKKyAg
ICBteSAkeCA9IHNoaWZ0OworICAgIG15ICRmaWxlID0gc2hpZnQ7CisKKyAgICB3aGlsZSAoKCR4
ID1+IC9cKCouXClccyo7JC8pIHx8ICgkeCA9fiAvXFsqLlxdXHMqOyQvKSkgeworICAgICAgICAk
eCA9fiBzL1woKi5cKVxzKjskLzsvOworCSR4ID1+IHMvXFsqLlxdXHMqOyQvOy87CisgICAgfQor
CisgICAgaWYgKCR4ID1+IC90eXBlZGVmLipccysoXHcrKVxzKjsvKSB7CisgICAgICAgICRkZWNs
YXJhdGlvbl9uYW1lID0gJDE7CisKKwlvdXRwdXRfZGVjbGFyYXRpb24oJGRlY2xhcmF0aW9uX25h
bWUsCisJCQkgICAndHlwZWRlZicsCisJCQkgICB7J3R5cGVkZWYnID0+ICRkZWNsYXJhdGlvbl9u
YW1lLAorCQkJICAgICdtb2R1bGUnID0+ICRtb2R1bGVuYW1lLAorCQkJICAgICdzZWN0aW9ubGlz
dCcgPT4gXEBzZWN0aW9ubGlzdCwKKwkJCSAgICAnc2VjdGlvbnMnID0+IFwlc2VjdGlvbnMsCisJ
CQkgICAgJ3B1cnBvc2UnID0+ICRkZWNsYXJhdGlvbl9wdXJwb3NlCisJCQkgICB9KTsKKyAgICB9
CisgICAgZWxzZSB7CisgICAgICAgIHByaW50IFNUREVSUiAiQ2Fubm90IHBhcnNlIHR5cGVkZWYh
XG4iOworICAgIH0KK30KKworc3ViIGNyZWF0ZV9wYXJhbWV0ZXJsaXN0KCQkKSB7CisgICAgbXkg
JGFyZ3MgPSBzaGlmdDsKKyAgICBteSAkc3BsaXR0ZXIgPSBzaGlmdDsKKyAgICBteSAkdHlwZTsK
KyAgICBteSAkcGFyYW07CisKKyAgICB3aGlsZSAoJGFyZ3MgPX4gLyhcKFteXCksXSspLC8pIHsK
KyAgICAgICAgJGFyZ3MgPX4gcy8oXChbXlwpLF0rKSwvJDEjL2c7CisgICAgfQorICAgIAorICAg
IGZvcmVhY2ggbXkgJGFyZyAoc3BsaXQoJHNwbGl0dGVyLCAkYXJncykpIHsKKyAgICAgICAgIyBz
dHJpcCBsZWFkaW5nL3RyYWlsaW5nIHNwYWNlcworICAgICAgICAkYXJnID1+IHMvXlxzKi8vOwor
CSRhcmcgPX4gcy9ccyokLy87CisKKwlpZiAoJGFyZyA9fiBtL1woLykgeworCSAgICAjIHBvaW50
ZXItdG8tZnVuY3Rpb24KKwkgICAgJGFyZyA9fiB0ci8jLywvOworCSAgICAkYXJnID1+IG0vW15c
KF0rXChcKihbXlwpXSspXCkvOworCSAgICAkcGFyYW0gPSAkMTsKKwkgICAgJHR5cGUgPSAkYXJn
OworCSAgICAkdHlwZSA9fiBzLyhbXlwoXStcKFwqKSRwYXJhbS8kMS87CisJfSBlbHNlIHsKKwkg
ICAgIyBldmlsIG1hZ2ljIHRvIGdldCBmaXhlZCBhcnJheSBwYXJhbWV0ZXJzIHRvIHdvcmsKKwkg
ICAgJGFyZyA9fiBzLyguK1xzKykoLispXFsuKi8kMSogJDIvOworCSAgICBteSBAYXJncyA9IHNw
bGl0KCdccycsICRhcmcpOworCQorCSAgICAkcGFyYW0gPSBwb3AgQGFyZ3M7CisJICAgIGlmICgk
cGFyYW0gPX4gbS9eKFwqKykoLiopLykgeworCSAgICAgICAgJHBhcmFtID0gJDI7CisJCXB1c2gg
QGFyZ3MsICQxOworCSAgICB9CisJICAgICR0eXBlID0gam9pbiAiICIsIEBhcmdzOworCX0KKwor
CWlmICgkdHlwZSBlcSAiIiAmJiAkcGFyYW0gZXEgIi4uLiIpCisJeworCSAgICAkdHlwZT0iLi4u
IjsKKwkgICAgJHBhcmFtPSIuLi4iOworCSAgICAkcGFyYW1ldGVyZGVzY3N7Ii4uLiJ9ID0gInZh
cmlhYmxlIGFyZ3VtZW50cyI7CisJfQorCWVsc2lmICgkdHlwZSBlcSAiIiAmJiAoJHBhcmFtIGVx
ICIiIG9yICRwYXJhbSBlcSAidm9pZCIpKQorCXsKKwkgICAgJHR5cGU9IiI7CisJICAgICRwYXJh
bT0idm9pZCI7CisJICAgICRwYXJhbWV0ZXJkZXNjc3t2b2lkfSA9ICJubyBhcmd1bWVudHMiOwor
CX0KKwlpZiAoZGVmaW5lZCAkdHlwZSAmJiAkdHlwZSAmJiAhZGVmaW5lZCAkcGFyYW1ldGVyZGVz
Y3N7JHBhcmFtfSkgeworCSAgICAkcGFyYW1ldGVyZGVzY3N7JHBhcmFtfSA9ICR1bmRlc2NyaWJl
ZDsKKworCSAgICBpZiAoKCR0eXBlIGVxICdmdW5jdGlvbicpIHx8ICgkdHlwZSBlcSAnZW51bScp
KSB7CisJICAgICAgICBwcmludCBTVERFUlIgIldhcm5pbmcoJGZpbGU6JC4pOiBGdW5jdGlvbiBw
YXJhbWV0ZXIgIi4KKwkJICAgICJvciBtZW1iZXIgJyRwYXJhbScgbm90ICIgLgorCQkgICAgImRl
c2NyaWJlZCBpbiAnJGRlY2xhcmF0aW9uX25hbWUnXG4iOworCSAgICB9CisJICAgICsrJGVycm9y
czsKKyAgICAgICAgfQorCisJcHVzaCBAcGFyYW1ldGVybGlzdCwgJHBhcmFtOworCSRwYXJhbWV0
ZXJ0eXBlc3skcGFyYW19ID0gJHR5cGU7CisgICAgfQorfQogCiAjIwogIyB0YWtlcyBhIGZ1bmN0
aW9uIHByb3RvdHlwZSBhbmQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlsZSBiZWluZwpAQCAt
NzMzLDEyMiArMTM3MywzMCBAQAogCSRwcm90b3R5cGUgPX4gbS9eKFx3K1xzK1x3K1xzK1x3Kylc
cysoW2EtekEtWjAtOV9+Ol0rKVxzKlwoKFteXHtdKilcKS8gfHwKIAkkcHJvdG90eXBlID1+IG0v
XihcdytccytcdytccytcdytccypcKilccyooW2EtekEtWjAtOV9+Ol0rKVxzKlwoKFteXHtdKilc
KS8pICB7CiAJJHJldHVybl90eXBlID0gJDE7Ci0JJGZ1bmN0aW9uX25hbWUgPSAkMjsKKwkkZGVj
bGFyYXRpb25fbmFtZSA9ICQyOwogCW15ICRhcmdzID0gJDM7Ci0JbXkgKCRwYXJhbSk7Ci0KLQkj
IGFsbG93IGZvciB1cCB0byBzaXggYXJncyB0byBmdW5jdGlvbiBwb2ludGVycwotCSRhcmdzID1+
IHMvKFwoW15cKSxdKyksLyQxIy9nOwotCSRhcmdzID1+IHMvKFwoW15cKSxdKyksLyQxIy9nOwot
CSRhcmdzID1+IHMvKFwoW15cKSxdKyksLyQxIy9nOwotCSRhcmdzID1+IHMvKFwoW15cKSxdKyks
LyQxIy9nOwotCSRhcmdzID1+IHMvKFwoW15cKSxdKyksLyQxIy9nOwotIwlwcmludCBTVERFUlIg
IkFSR1MgPSAnJGFyZ3MnXG4iOwotCi0JZm9yZWFjaCBteSAkYXJnIChzcGxpdCAnLCcsICRhcmdz
KSB7Ci0JICAgICMgc3RyaXAgbGVhZGluZy90cmFpbGluZyBzcGFjZXMKLQkgICAgJGFyZyA9fiBz
L15ccyovLzsKLQkgICAgJGFyZyA9fiBzL1xzKiQvLzsKIAotCSAgICBpZiAoJGFyZyA9fiBtL1wo
LykgewotCQkjIHBvaW50ZXItdG8tZnVuY3Rpb24KLQkJJGFyZyA9fiB0ci8jLywvOwotCQkkYXJn
ID1+IG0vW15cKF0rXChcKihbXlwpXSspXCkvOwotCQkkcGFyYW0gPSAkMTsKLQkJJHR5cGUgPSAk
YXJnOwotCQkkdHlwZSA9fiBzLyhbXlwoXStcKFwqKSRwYXJhbS8kMS87Ci0JICAgIH0gZWxzZSB7
Ci0JCSMgZXZpbCBtYWdpYyB0byBnZXQgZml4ZWQgYXJyYXkgcGFyYW1ldGVycyB0byB3b3JrCi0J
CSRhcmcgPX4gcy8oLitccyspKC4rKVxbLiovJDEqICQyLzsKLSMJCXByaW50IFNUREVSUiAiU0NB
TiBBUkc6ICckYXJnJ1xuIjsKLQkJbXkgQGFyZ3MgPSBzcGxpdCgnXHMnLCAkYXJnKTsKLQotIwkJ
cHJpbnQgU1RERVJSICIgLT4gQGFyZ3NcbiI7Ci0JCSRwYXJhbSA9IHBvcCBAYXJnczsKLSMJCXBy
aW50IFNUREVSUiAiIC0+IEBhcmdzXG4iOwotCQlpZiAoJHBhcmFtID1+IG0vXihcKispKC4qKS8p
IHsKLQkJICAgICRwYXJhbSA9ICQyOwotCQkgICAgcHVzaCBAYXJncywgJDE7Ci0JCX0KLQkJJHR5
cGUgPSBqb2luICIgIiwgQGFyZ3M7Ci0JICAgIH0KLQotCSAgICBpZiAoJHR5cGUgZXEgIiIgJiYg
JHBhcmFtIGVxICIuLi4iKQotCSAgICB7Ci0JCSR0eXBlPSIuLi4iOwotCQkkcGFyYW09Ii4uLiI7
Ci0JCSRwYXJhbWV0ZXJzeyIuLi4ifSA9ICJ2YXJpYWJsZSBhcmd1bWVudHMiOwotCSAgICB9Ci0J
ICAgIGVsc2lmICgkdHlwZSBlcSAiIiAmJiAoJHBhcmFtIGVxICIiIG9yICRwYXJhbSBlcSAidm9p
ZCIpKQotCSAgICB7Ci0JCSR0eXBlPSIiOwotCQkkcGFyYW09InZvaWQiOwotCQkkcGFyYW1ldGVy
c3t2b2lkfSA9ICJubyBhcmd1bWVudHMiOwotCSAgICB9Ci0gICAgICAgICAgICBpZiAoZGVmaW5l
ZCAkdHlwZSAmJiAkdHlwZSAmJiAhZGVmaW5lZCAkcGFyYW1ldGVyc3skcGFyYW19KSB7Ci0JICAg
ICAgICAkcGFyYW1ldGVyc3skcGFyYW19ID0gIi0tIHVuZGVzY3JpYmVkIC0tIjsKLQkgICAgICAg
IHByaW50IFNUREVSUiAiV2FybmluZygkZmlsZTokLik6IEZ1bmN0aW9uIHBhcmFtZXRlciAnJHBh
cmFtJyBub3QgZGVzY3JpYmVkIGluICckZnVuY3Rpb25fbmFtZSdcbiI7Ci0JCSsrJGVycm9yczsK
LQkgICAgfQotCi0JICAgIHB1c2ggQHBhcmFtZXRlcmxpc3QsICRwYXJhbTsKLQkgICAgJHBhcmFt
ZXRlcnR5cGVzeyRwYXJhbX0gPSAkdHlwZTsKLSMJICAgIHByaW50IFNUREVSUiAicGFyYW0gPSAn
JHBhcmFtJywgdHlwZSA9ICckdHlwZSdcbiI7Ci0JfQorCWNyZWF0ZV9wYXJhbWV0ZXJsaXN0KCRh
cmdzLCAnLCcpOwogICAgIH0gZWxzZSB7CiAJcHJpbnQgU1RERVJSICJFcnJvcigkLik6IGNhbm5v
dCB1bmRlcnN0YW5kIHByb3RvdHlwZTogJyRwcm90b3R5cGUnXG4iOwogCSsrJGVycm9yczsKIAly
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCRmdW5jdGlvbl9vbmx5PT0wIHx8IAotICAgICAoICRm
dW5jdGlvbl9vbmx5ID09IDEgJiYgZGVmaW5lZCgkZnVuY3Rpb25fdGFibGV7JGZ1bmN0aW9uX25h
bWV9KSkgfHwgCi0gICAgICggJGZ1bmN0aW9uX29ubHkgPT0gMiAmJiAhZGVmaW5lZCgkZnVuY3Rp
b25fdGFibGV7JGZ1bmN0aW9uX25hbWV9KSkpCi0gICAgewotCW91dHB1dF9mdW5jdGlvbih7J2Z1
bmN0aW9uJyA9PiAkZnVuY3Rpb25fbmFtZSwKLQkJCSAnbW9kdWxlJyA9PiAkbW9kdWxlbmFtZSwK
LQkJCSAnZnVuY3Rpb250eXBlJyA9PiAkcmV0dXJuX3R5cGUsCi0JCQkgJ3BhcmFtZXRlcmxpc3Qn
ID0+IFxAcGFyYW1ldGVybGlzdCwKLQkJCSAncGFyYW1ldGVycycgPT4gXCVwYXJhbWV0ZXJzLAot
CQkJICdwYXJhbWV0ZXJ0eXBlcycgPT4gXCVwYXJhbWV0ZXJ0eXBlcywKLQkJCSAnc2VjdGlvbmxp
c3QnID0+IFxAc2VjdGlvbmxpc3QsCi0JCQkgJ3NlY3Rpb25zJyA9PiBcJXNlY3Rpb25zLAotCQkJ
ICdwdXJwb3NlJyA9PiAkZnVuY3Rpb25fcHVycG9zZQotCQkJIH0pOwotICAgIH0KKyAgICBvdXRw
dXRfZGVjbGFyYXRpb24oJGRlY2xhcmF0aW9uX25hbWUsIAorCQkgICAgICAgJ2Z1bmN0aW9uJywK
KwkJICAgICAgIHsnZnVuY3Rpb24nID0+ICRkZWNsYXJhdGlvbl9uYW1lLAorCQkJJ21vZHVsZScg
PT4gJG1vZHVsZW5hbWUsCisJCQknZnVuY3Rpb250eXBlJyA9PiAkcmV0dXJuX3R5cGUsCisJCQkn
cGFyYW1ldGVybGlzdCcgPT4gXEBwYXJhbWV0ZXJsaXN0LAorCQkJJ3BhcmFtZXRlcmRlc2NzJyA9
PiBcJXBhcmFtZXRlcmRlc2NzLAorCQkJJ3BhcmFtZXRlcnR5cGVzJyA9PiBcJXBhcmFtZXRlcnR5
cGVzLAorCQkJJ3NlY3Rpb25saXN0JyA9PiBcQHNlY3Rpb25saXN0LAorCQkJJ3NlY3Rpb25zJyA9
PiBcJXNlY3Rpb25zLAorCQkJJ3B1cnBvc2UnID0+ICRkZWNsYXJhdGlvbl9wdXJwb3NlCisJCSAg
ICAgICB9KTsKIH0KIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBtYWluCi0jIHN0YXRlcwotIyAwIC0gbm9y
bWFsIGNvZGUKLSMgMSAtIGxvb2tpbmcgZm9yIGZ1bmN0aW9uIG5hbWUKLSMgMiAtIHNjYW5uaW5n
IGZpZWxkIHN0YXJ0LgotIyAzIC0gc2Nhbm5pbmcgcHJvdG90eXBlLgotJHN0YXRlID0gMDsKLSRz
ZWN0aW9uID0gIiI7Ci0KLSRkb2Nfc3BlY2lhbCA9ICJcQFwlXCRcJiI7Ci0KLSRkb2Nfc3RhcnQg
PSAiXi9cXCpcXCpcXHMqXCQiOyAjIEFsbG93IHdoaXRlc3BhY2UgYXQgZW5kIG9mIGNvbW1lbnQg
c3RhcnQuCi0kZG9jX2VuZCA9ICJcXCovIjsKLSRkb2NfY29tID0gIlxccypcXCpcXHMqIjsKLSRk
b2NfZnVuYyA9ICRkb2NfY29tLiIoXFx3Kyk6PyI7Ci0kZG9jX3NlY3QgPSAkZG9jX2NvbS4iKFsi
LiRkb2Nfc3BlY2lhbC4iXT9bXFx3IF0rKTooLiopIjsKLSRkb2NfY29udGVudCA9ICRkb2NfY29t
LiIoLiopIjsKLSRkb2NfYmxvY2sgPSAkZG9jX2NvbS4iRE9DOlxccyooLiopPyI7Ci0KLSVjb25z
dGFudHMgPSAoKTsKLSVwYXJhbWV0ZXJzID0gKCk7Ci1AcGFyYW1ldGVybGlzdCA9ICgpOwotJXNl
Y3Rpb25zID0gKCk7Ci1Ac2VjdGlvbmxpc3QgPSAoKTsKLQotJGNvbnRlbnRzID0gIiI7Ci0kc2Vj
dGlvbl9kZWZhdWx0ID0gIkRlc2NyaXB0aW9uIjsJIyBkZWZhdWx0IHNlY3Rpb24KLSRzZWN0aW9u
X2ludHJvID0gIkludHJvZHVjdGlvbiI7Ci0kc2VjdGlvbiA9ICRzZWN0aW9uX2RlZmF1bHQ7Ci0K
IHN1YiBwcm9jZXNzX2ZpbGUoJCk7CiAKICMgUmVhZCB0aGUgZmlsZSB0aGF0IG1hcHMgcmVsYXRp
dmUgbmFtZXMgdG8gYWJzb2x1dGUgbmFtZXMgZm9yCkBAIC04NzksOCArMTQyNyw2OCBAQAogCiBl
eGl0KCRlcnJvcnMpOwogCitzdWIgcmVzZXRfc3RhdGUgeworICAgICRmdW5jdGlvbiA9ICIiOwor
ICAgICVjb25zdGFudHMgPSAoKTsKKyAgICAlcGFyYW1ldGVyZGVzY3MgPSAoKTsKKyAgICAlcGFy
YW1ldGVydHlwZXMgPSAoKTsKKyAgICBAcGFyYW1ldGVybGlzdCA9ICgpOworICAgICVzZWN0aW9u
cyA9ICgpOworICAgIEBzZWN0aW9ubGlzdCA9ICgpOworICAgICRwcm90b3R5cGUgPSAiIjsKKyAg
ICAKKyAgICAkc3RhdGUgPSAwOworfQorCitzdWIgcHJvY2Vzc19zdGF0ZTNfZnVuY3Rpb24oJCkg
eyAKKyAgICBteSAkeCA9IHNoaWZ0OworCisgICAgaWYgKCR4ID1+IG0jXHMqL1wqXHMrTUFDRE9D
XHMqI2lvKSB7CisJIyBkbyBub3RoaW5nCisgICAgfQorICAgIGVsc2lmICgkeCA9fiAvKFteXHtd
KikvKSB7CisgICAgICAgICRwcm90b3R5cGUgLj0gJDE7CisgICAgfQorICAgIGlmICgoJHggPX4g
L1x7LykgfHwgKCR4ID1+IC9cIy8pIHx8ICgkeCA9fiAvOy8pKSB7CisgICAgICAgICRwcm90b3R5
cGUgPX4gc0AvXCouKj9cKi9AQGdvczsJIyBzdHJpcCBjb21tZW50cy4KKwkkcHJvdG90eXBlID1+
IHNAW1xyXG5dK0AgQGdvczsgIyBzdHJpcCBuZXdsaW5lcy9jcidzLgorCSRwcm90b3R5cGUgPX4g
c0BeXHMrQEBnb3M7ICMgc3RyaXAgbGVhZGluZyBzcGFjZXMKKwlkdW1wX2Z1bmN0aW9uKCRwcm90
b3R5cGUsJGZpbGUpOworCXJlc2V0X3N0YXRlKCk7CisgICAgfQorfQorCitzdWIgcHJvY2Vzc19z
dGF0ZTNfdHlwZSgkKSB7IAorICAgIG15ICR4ID0gc2hpZnQ7CisKKyAgICAkeCA9fiBzQC9cKi4q
P1wqL0BAZ29zOwkjIHN0cmlwIGNvbW1lbnRzLgorICAgICR4ID1+IHNAW1xyXG5dK0AgQGdvczsg
IyBzdHJpcCBuZXdsaW5lcy9jcidzLgorICAgICR4ID1+IHNAXlxzK0BAZ29zOyAjIHN0cmlwIGxl
YWRpbmcgc3BhY2VzCisgICAgJHggPX4gc0BccyskQEBnb3M7ICMgc3RyaXAgdHJhaWxpbmcgc3Bh
Y2VzCisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoICR4ID1+IC8oW157fTtdKikoW3t9
O10pKC4qKS8gKSB7CisJICAgICRwcm90b3R5cGUgLj0gJDEgLiAkMjsKKwkgICAgKCQyIGVxICd7
JykgJiYgJGJyY291bnQrKzsKKwkgICAgKCQyIGVxICd9JykgJiYgJGJyY291bnQtLTsKKwkgICAg
aWYgKCgkMiBlcSAnOycpICYmICgkYnJjb3VudCA9PSAwKSkgeworCSAgICAgICAgZHVtcF9kZWNs
YXJhdGlvbigkcHJvdG90eXBlLCRmaWxlKTsKKwkJcmVzZXRfc3RhdGUoKTsKKwkgICAgICAgIGxh
c3Q7CisJICAgIH0KKwkgICAgJHggPSAkMzsKKyAgICAgICAgfSBlbHNlIHsKKwkgICAgJHByb3Rv
dHlwZSAuPSAkeDsKKwkgICAgbGFzdDsKKwl9CisgICAgfQorfQorCiBzdWIgcHJvY2Vzc19maWxl
KCQpIHsKICAgICBteSAoJGZpbGUpID0gQF87CisgICAgbXkgJGlkZW50aWZpZXI7CisgICAgbXkg
JGZ1bmM7CisKICAgICBpZiAoZGVmaW5lZCgkc291cmNlX21hcHskZmlsZX0pKSB7CiAJJGZpbGUg
PSAkc291cmNlX21hcHskZmlsZX07CiAgICAgfQpAQCAtOTA2LDE2ICsxNTE0LDMyIEBACiAJCQkk
c2VjdGlvbiA9ICQxOwogCQl9CiAgICAgICAgICAgICB9Ci0JICAgIGVsc2lmICgvJGRvY19mdW5j
L28pIHsKLQkJJGZ1bmN0aW9uID0gJDE7CisJICAgIGVsc2lmICgvJGRvY19kZWNsL28pIHsKKwkJ
JGlkZW50aWZpZXIgPSAkMTsKKwkJaWYgKC9ccyooW1x3XHNdKz8pXHMqLS8pIHsKKwkJICAgICRp
ZGVudGlmaWVyID0gJDE7CisJCX0KKwogCQkkc3RhdGUgPSAyOwogCQlpZiAoLy0oLiopLykgewot
CQkgICAgJGZ1bmN0aW9uX3B1cnBvc2UgPSAkMTsKKwkJICAgICRkZWNsYXJhdGlvbl9wdXJwb3Nl
ID0gJDE7CisJCX0gZWxzZSB7CisJCSAgICAkZGVjbGFyYXRpb25fcHVycG9zZSA9ICIiOworCQl9
CisJCWlmICgkaWRlbnRpZmllciA9fiBtL15zdHJ1Y3QvKSB7CisJCSAgICAkZGVjbF90eXBlID0g
J3N0cnVjdCc7CisJCX0gZWxzaWYgKCRpZGVudGlmaWVyID1+IG0vXnVuaW9uLykgeworCQkgICAg
JGRlY2xfdHlwZSA9ICd1bmlvbic7CisJCX0gZWxzaWYgKCRpZGVudGlmaWVyID1+IG0vXmVudW0v
KSB7CisJCSAgICAkZGVjbF90eXBlID0gJ2VudW0nOworCQl9IGVsc2lmICgkaWRlbnRpZmllciA9
fiBtL150eXBlZGVmLykgeworCQkgICAgJGRlY2xfdHlwZSA9ICd0eXBlZGVmJzsKIAkJfSBlbHNl
IHsKLQkJICAgICRmdW5jdGlvbl9wdXJwb3NlID0gIiI7CisJCSAgICAkZGVjbF90eXBlID0gJ2Z1
bmN0aW9uJzsKIAkJfQorCiAJCWlmICgkdmVyYm9zZSkgewotCQkgICAgcHJpbnQgU1RERVJSICJJ
bmZvKCQuKTogU2Nhbm5pbmcgZG9jIGZvciAkZnVuY3Rpb25cbiI7CisJCSAgICBwcmludCBTVERF
UlIgIkluZm8oJC4pOiBTY2FubmluZyBkb2MgZm9yICRpZGVudGlmaWVyXG4iOwogCQl9CiAJICAg
IH0gZWxzZSB7CiAJCXByaW50IFNUREVSUiAiV0FSTigkLik6IENhbm5vdCB1bmRlcnN0YW5kICRf
IG9uIGxpbmUgJC4iLApAQCAtOTUyLDEzICsxNTc2LDE1IEBACiAJCSAgICAkY29udGVudHMgPSAi
IjsKIAkJfQogCi0jCSAgICBwcmludCBTVERFUlIgImVuZCBvZiBkb2MgY29tbWVudCwgbG9va2lu
ZyBmb3IgcHJvdG90eXBlXG4iOwogCQkkcHJvdG90eXBlID0gIiI7CiAJCSRzdGF0ZSA9IDM7CisJ
CSRicmNvdW50ID0gMDsKKyMJICAgIHByaW50IFNUREVSUiAiZW5kIG9mIGRvYyBjb21tZW50LCBs
b29raW5nIGZvciBwcm90b3R5cGVcbiI7CiAJICAgIH0gZWxzaWYgKC8kZG9jX2NvbnRlbnQvKSB7
CiAJCSMgbWlndWVsLXN0eWxlIGNvbW1lbnQga2x1ZGdlLCBsb29rIGZvciBibGFuayBsaW5lcyBh
ZnRlcgogCQkjIEBwYXJhbWV0ZXIgbGluZSB0byBzaWduaWZ5IHN0YXJ0IG9mIGRlc2NyaXB0aW9u
Ci0JCWlmICgkMSBlcSAiIiAmJiAkc2VjdGlvbiA9fiBtL15ALykgeworCQlpZiAoJDEgZXEgIiIg
JiYgCisJCQkoJHNlY3Rpb24gPX4gbS9eQC8gfHwgJHNlY3Rpb24gZXEgJHNlY3Rpb25fY29udGV4
dCkpIHsKIAkJICAgICRjb250ZW50cyA9fiBzL1wmL1xcXFxcXGFtcDsvZzsKIAkJICAgICRjb250
ZW50cyA9fiBzL1w8L1xcXFxcXGx0Oy9nOwogCQkgICAgJGNvbnRlbnRzID1+IHMvXD4vXFxcXFxc
Z3Q7L2c7CkBAIC05NzQsMjggKzE2MDAsMTAgQEAKIAkJKyskZXJyb3JzOwogCSAgICB9CiAJfSBl
bHNpZiAoJHN0YXRlID09IDMpIHsJIyBzY2FubmluZyBmb3IgZnVuY3Rpb24geyAoZW5kIG9mIHBy
b3RvdHlwZSkKLQkgICAgaWYgKG0jXHMqL1wqXHMrTUFDRE9DXHMqI2lvKSB7Ci0JICAgICAgIyBk
byBub3RoaW5nCi0JICAgIH0KLQkgICAgZWxzaWYgKC8oW15ce10qKS8pIHsKLQkJJHByb3RvdHlw
ZSAuPSAkMTsKLQkgICAgfQotCSAgICBpZiAoL1x7LyB8fCAvXCMvIHx8IC87LykgeyAjIGFkZGVk
IGZvciAjZGVmaW5lIEFLLCAnOycgYWRkZWQgZm9yIGRlY2xhcmF0aW9ucy4KLQkJJHByb3RvdHlw
ZSA9fiBzQC9cKi4qP1wqL0BAZ29zOwkjIHN0cmlwIGNvbW1lbnRzLgotCQkkcHJvdG90eXBlID1+
IHNAW1xyXG5dK0AgQGdvczsgIyBzdHJpcCBuZXdsaW5lcy9jcidzLgotCQkkcHJvdG90eXBlID1+
IHNAXiArQEBnb3M7ICMgc3RyaXAgbGVhZGluZyBzcGFjZXMKLQkJZHVtcF9mdW5jdGlvbigkcHJv
dG90eXBlLCRmaWxlKTsKLQotCQkkZnVuY3Rpb24gPSAiIjsKLQkJJWNvbnN0YW50cyA9ICgpOwot
CQklcGFyYW1ldGVycyA9ICgpOwotCQklcGFyYW1ldGVydHlwZXMgPSAoKTsKLQkJQHBhcmFtZXRl
cmxpc3QgPSAoKTsKLQkJJXNlY3Rpb25zID0gKCk7Ci0JCUBzZWN0aW9ubGlzdCA9ICgpOwotCQkk
cHJvdG90eXBlID0gIiI7Ci0KLQkJJHN0YXRlID0gMDsKKwkgICAgaWYgKCRkZWNsX3R5cGUgZXEg
J2Z1bmN0aW9uJykgeworCSAgICAgICAgcHJvY2Vzc19zdGF0ZTNfZnVuY3Rpb24oJF8pOworCSAg
ICB9IGVsc2UgeworCSAgICAgICAgcHJvY2Vzc19zdGF0ZTNfdHlwZSgkXyk7CiAJICAgIH0KIAl9
IGVsc2lmICgkc3RhdGUgPT0gNCkgewogCQkjIERvY3VtZW50YXRpb24gYmxvY2sKQEAgLTEwMDYs
NyArMTYxNCw3IEBACiAJCQkkY29udGVudHMgPSAiIjsKIAkJCSRmdW5jdGlvbiA9ICIiOwogCQkJ
JWNvbnN0YW50cyA9ICgpOwotCQkJJXBhcmFtZXRlcnMgPSAoKTsKKwkJCSVwYXJhbWV0ZXJkZXNj
cyA9ICgpOwogCQkJJXBhcmFtZXRlcnR5cGVzID0gKCk7CiAJCQlAcGFyYW1ldGVybGlzdCA9ICgp
OwogCQkJJXNlY3Rpb25zID0gKCk7CkBAIC0xMDI2LDcgKzE2MzQsNyBAQAogCQkJJGNvbnRlbnRz
ID0gIiI7CiAJCQkkZnVuY3Rpb24gPSAiIjsKIAkJCSVjb25zdGFudHMgPSAoKTsKLQkJCSVwYXJh
bWV0ZXJzID0gKCk7CisJCQklcGFyYW1ldGVyZGVzY3MgPSAoKTsKIAkJCSVwYXJhbWV0ZXJ0eXBl
cyA9ICgpOwogCQkJQHBhcmFtZXRlcmxpc3QgPSAoKTsKIAkJCSVzZWN0aW9ucyA9ICgpOwo=

--------------Boundary-00=_S4X8LP2BSFQYB9A9EJY3--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/