|
Posted by harryfmudd [AT] comcast [DOT] on December 2, 2006, 1:53 pm
Please log in for more thread options
This is a multi-part message in MIME format.
--------------030109020907070509070903
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
All -
This is the promised proposal - not as prompt as I thought. Must have
dismissed the previous attempt without sending.
The module is actually sort of a meta-formatter, since the user must
provide the code to implement the actual output conversions. The current
POD is attached. This should be considered pre-Alpha, since it has
changed since yesterday, and I am seriously considering passing the
format parameters to the output conversion code as a hash reference
instead of a large number of arguments.
Anyhow, here it is, if I push the correct button.
Tom Wyant
--------------030109020907070509070903
Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0";
name="String-Format-General.txt"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="String-Format-General.txt"
TkFNRQogICAgU3RyaW5nOjpGb3JtYXQ6OkdlbmVyYWwgLSBDb25maWd1cmFibGUgc3ByaW50
Zi1zdHlsZSBmb3JtYXR0ZXIKClNZTk9QU0lTCiAgICAgdXNlIFN0cmluZzo6Rm9ybWF0OjpH
ZW5lcmFsOwogICAgICRmbXQgPSBTdHJpbmc6OkZvcm1hdDo6R2VuZXJhbC0+bmV3ICgKICAg
ICAgICAgZm9ybWF0ID0+ICclTiA9ICUtck4nLAogICAgICAgICBuZXdsaW5lID0+ICJcbiIs
CiAgICAgKTsKICAgICAkZm10LT5kZWZpbmUgKGNvbnZlcnNpb24gPT4KICAgICAgIEwgPT4g
c3ViIHsgICAjIExpdGVyYWwKICAgICAgICAgbXkgKCRmbXQsICRkdGEsICRpbngsICRmbGcs
ICR4ZmcsICR3aWQsICRkcCwgJHN0ciwgJHRybiwgJGNjKSA9IEBfOwogICAgICAgICBzcHJp
bnRmICIlJGZsZypzIiwgJHdpZCwgJGR0YTsKICAgICAgIH0sIDEwLCAnVGV4dCcpOwogICAg
ICRmbXQtPmRlZmluZSAodHJhbnNmb3JtID0+CiAgICAgICByID0+IHN1YiB7ICAgIyBSZXZl
cnNlCiAgICAgICAgIG15ICgkZm10LCAkZHRhLCAkaW54LCAkZmxnLCAkeGZnLCAkd2lkLCAk
ZHAsICRzdHIsICR0cm4sICRjYykgPSBAXzsKICAgICAgICAgc2NhbGFyIHJldmVyc2UgJGR0
YTsKICAgICAgIH0sICdSZXZlcnNlZCcpOwogICAgIHByaW50ICRmbXQtPmhlYWQgKCk7CiAg
ICAgcHJpbnQgJGZtdC0+Zm9ybWF0ICgnRGVzcGVyYWRvJyk7CgogICAgd2hpY2ggd291bGQg
cHJvZHVjZSB0aGUgZm9sbG93aW5nIG91dHB1dDoKCiAgICAgICAgICAgICAgID0gIFJldmVy
c2VkCiAgICAgICBUZXh0ICAgID0gICAgVGV4dCAgCiAgICAgRGVzcGVyYWRvID0gb2RhcmVw
c2VECgogICAgVGhlIGlkZWEgaXMgdGhhdCB5b3UgY2FuIHBhc3MgYXJiaXRyYXJ5IGRhdGEg
aW4sIGFuZCBoYXZlIGFyYml0cmFyeQogICAgZGlzcGxheXMgbWFkZSBvdXQgb2YgdGhlbS4g
U29tZSBsaW1pdGVkIGhlYWRpbmcgY2FwYWJpbGl0eSBpcyBwcm92aWRlZC4KCkRFU0NSSVBU
SU9OCiAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGZvcm1hdHRlciBjbGFzcyB3aGljaCBh
bGxvd3MgaXRzIHVzZXIgdG8KICAgIGltcGxlbWVudCBhcmJpdHJhcnkgc3ByaW50Zi1saWtl
IG9yIHN0cmZ0aW1lLWxpa2UgZm9ybWF0cy4gVGhlIGZvcm1hdHRlcgogICAgY2xhc3MgcHJv
dmlkZXMgZm9ybWF0IHBhcnNpbmcsIGFuZCBtYXJzaGFsaW5nIG9mIG91dHB1dCBmb3IgYm90
aCBkYXRhCiAgICBhbmQgaGVhZGluZ3MuIFRoZSB1c2VyIG9mIHRoZSBjbGFzcyBwcm92aWRl
cyBjb2RlIHRvIGltcGxlbWVudCB0aGUKICAgIGluZGl2aWR1YWwgb3V0cHV0IGNvbnZlcnNp
b24gY2hhcmFjdGVycy4KCiAgICBBIGZvcm1hdCBpcyBiYXNpY2FsbHkgYSBzdHJpbmcgaW50
byB3aGljaCBkYXRhIGFyZSB0byBiZSBpbnNlcnRlZC4gVGhlCiAgICBpbnNlcnRpb24gaXMg
Y29udHJvbGxlZCBieSBjb252ZXJzaW9uIGRlc2NyaXB0b3JzLCB3aGljaCBiZWdpbiB3aXRo
IGEKICAgICclJyAob3Igd2hhdGV2ZXIgdGhlIHZhbHVlIG9mIHRoZSAnbGVhZGVyJyBhdHRy
aWJ1dGUgaXMpLCBlbmQgd2l0aCB0aGUKICAgIGNvbnZlcnNpb24gY2hhcmFjdGVyLCBhbmQg
Y29udGFpbiBhIG51bWJlciBvZiBvcHRpb25hbCBmaWVsZHMgd2hpY2ggbWF5CiAgICBhZmZl
Y3QgdGhlIGNvbnZlcnNpb24uIFRoZXNlIGZpZWxkcyBhcmU6CgogICAgcGFyYW1ldGVyIGlu
ZGV4IC0gYSBudW1iZXIgZm9sbG93ZWQgYnkgYSBsaXRlcmFsIGRvbGxhciBzaWduLCB3aGlj
aCBieQogICAgY29udmVudGlvbiBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGF0dW0gdG8gYmUg
Y29udmVydGVkIHdoZW4gZm9ybWF0dGluZyBhCiAgICBsaXN0IHJlZmVyZW5jZS4gVGhpcyB3
aWxsIGJlIGRlZmF1bHRlZCAwLCAxLCAyLCBhbmQgc28gb24gbGVmdCB0byByaWdodAogICAg
aW4gdGhlIGZvcm1hdC4gVGhhdCBpcyB0byBzYXksIGlmICVkIGZvcm1hdHMgYW4gaW50ZWdl
ciBpbiBkZWNpbWFsIGFuZAogICAgZm9ybWF0IHN0cmluZyAnJTIkMDNkICUwM2QgJTAzZCcg
aXMgdXNlZCBvbiBbMSwgMiwgM10sIHRoZSByZXN1bHQgd2lsbAogICAgYmUgJzAwMyAwMDEg
MDAyJy4KCiAgICBmbGFncyAtIHRoZSBzdGFuZGFyZCBzcHJpbnRmIGZsYWdzIGFyZSBhbGxv
d2VkLCBhbmQgeW91IGNhbiBkZWZpbmUgeW91cgogICAgb3duLiBVc2VyLWRlZmluZWQgYW5k
IHN0YW5kYXJkIGZsYWdzIGNhbiBiZSBpbnRlcm1pbmdsZWQgaW4gdGhlIGZvcm1hdAogICAg
c3BlY2lmaWNhdGlvbiwgYnV0IGFyZSBwYXNzZWQgc2VwYXJhdGVseSB0byB0aGUgY29udmVy
c2lvbiByb3V0aW5lLgoKICAgIHdpZHRoIC0gYSBudW1iZXIgd2hpY2ggYnkgY29udmVudGlv
biByZXByZXNlbnRzIHRoZSB3aWR0aCBvZiB0aGUgZmllbGQuCiAgICBUaGUgc3ByaW50ZiAn
KicgaXMgbm90IGFsbG93ZWQuCgogICAgcGxhY2VzIC0gYSBkb3QgKCcuJykgZm9sbG93ZWQg
YnkgYSBudW1iZXIuIEJ5IGNvbnZlbnRpb24gdGhpcyByZXByZXNlbnRzCiAgICB0aGUgbnVt
YmVyIG9mIGRlY2ltYWwgcGxhY2VzIGlmIGFwcGxpY2FibGUuIFRoZSBzcHJpbnRmICcqJyBp
cyBub3QKICAgIGFsbG93ZWQuCgogICAgc3RyaW5nIC0gYW4gYXJiaXRyYXJ5IHN0cmluZywg
cXVvdGVkIGJ5IGN1cmx5IGJyYWNrZXRzIG9yIHdoYXRldmVyIHRoZQogICAgY29udGVudHMg
b2YgdGhlICdxdW90ZScgYXR0cmlidXRlIGFyZS4gVGhpcyBzdHJpbmcgbWF5IG5vdCBjb250
YWluCiAgICB3aGF0ZXZlciBjaGFyYWN0ZXIgY2xvc2VzIHRoZSBxdW90ZSwgYnV0IG1heSBi
ZSB1c2VkIGluIGFueSB3YXkgdGhlCiAgICBjb252ZXJzaW9uIGRlc2lyZXMsIG9yIGlnbm9y
ZWQuCgogICAgdHJhbnNmb3JtIC0gY2hhcmFjdGVycyBzcGVjaWZ5aW5nIGEgdHJhbnNmb3Jt
YXRpb24gb2YgdGhlIGRhdGEgYmVmb3JlCiAgICBpdHMgb3V0cHV0IGNvbnZlcnNpb24uIFRy
YW5zZm9ybWF0aW9ucyBhcmUgdXNlci1kZWZpbmVkLgoKICAgIEZvciBleGFtcGxlLCBvbmUg
Y291bGQgZGVmaW5lIGNvbnZlcnNpb24gJ2YnIGZvciBmbG9hdGluZy1wb2ludCBvdXRwdXQs
CiAgICBhbmQgaW52b2tlIHRoaXMgd2l0aCBmb3JtYXQgJyU1LjJmJy4gT3Igb25lIGNvdWxk
IGRlZmluZSBjb252ZXJzaW9uICdUJwogICAgdG8gb3V0cHV0IHRoZSB0aW1lIG9mIGRheSBh
Y2NvcmRpbmcgdG8gc29tZSBkZWZhdWx0IGZvcm1hdCBvdmVycmlkZGVuIGJ5CiAgICB0aGUg
Y29udGVudHMgb2YgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCBh
bmQgdXNlIGZvcm1hdAogICAgJyV7JUk6JU06JVMgJXB9VCcgdG8gb3V0cHV0IHRpbWUgd2l0
aCBhIG1lcmlkaWFuIGluZGljYXRvci4KCiAgICBJbiBhZGRpdGlvbiB0byBmb3JtYXR0aW5n
IGZ1bmN0aW9uYWxpdHksIGEgbnVtYmVyIG9mIG91dHB1dCBtb2RlcyBhcmUKICAgIHByb3Zp
ZGVkLiBEaXNjdXNzaW9uIG9mIHRoZXNlIGlzIGdpdmVuIHVuZGVyIHRoZSBtb2RlIGF0dHJp
YnV0ZS4KCiAgTWV0aG9kcwogICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBmb2xsb3dp
bmcgcHVibGljIG1ldGhvZHM6CgogICAgJGZtdCA9IFN0cmluZzo6Rm9ybWF0OjpHZW5lcmFs
LT5uZXcgKCk7CiAgICAgICAgVGhpcyBtZXRob2QgaW5zdGFudGlhdGVzIGEgbmV3IFN0cmlu
Zzo6Rm9ybWF0OjpHZW5lcmFsIG9iamVjdC4gQW55CiAgICAgICAgYXJndW1lbnRzIGFyZSBw
YXNzZWQgdG8gJGZtdC0+c2V0ICgpOwoKICAgICAgICBOb3RlIHRoYXQgdGhpcyBjYW4gYmUg
Y2FsbGVkIGFzIGEgbm9ybWFsIG1ldGhvZCwgaS5lLgoKICAgICAgICAgbXkgJGZtdDIgPSAk
Zm10LT5uZXcgKCk7CgogICAgICAgIFRoaXMgbWFrZXMgJGZtdDIgYSBjbG9uZSBvZiAkZm10
LiBBbnkgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KICAgICAgICAkZm10Mi0+c2V0ICgpLgoK
ICAgICRmbXQtPmNsZWFyX2NhY2hlICgpOwogICAgICAgIFRoaXMgbWV0aG9kIGNsZWFycyBk
YXRhIGNhY2hlZCBieSB0aGUgZm9ybWF0dGVyLiBUaGlzIHdvdWxkIGJlIGRvbmUKICAgICAg
ICB0byBmb3JjZSB0aGUgZGF0YSB0byBiZSByZWNvbXB1dGVkLiBDYWNoZWQgZGF0YSBpbmNs
dWRlIHRoZSByZWd1bGFyCiAgICAgICAgZXhwcmVzc2lvbiB1c2VkIHRvIHBhcnNlIHRoZSBm
b3JtYXQgc3RyaW5nLCBhbmQgdGhlIGNvbXB1dGVkIHdpZHRocwogICAgICAgIGZvciB0aGUg
Y29sdW1ucyBiZWluZyBmb3JtYXR0ZWQuIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBkZWZpbmUo
KQogICAgICAgIG1ldGhvZCwgYW5kIGJ5IHRoZSBtdXRhdG9yIGZvciB0aGUgJ2Zvcm1hdCcs
ICdsZWFkZXInLCBhbmQgJ3F1b3RlJwogICAgICAgIGF0dHJpYnV0ZXMuIEl0IHNob3VsZCBi
ZSBjYWxsZWQgYnkgdGhlIG11dGF0b3Igb2YgYW55IHVzZXItYWRkZWQKICAgICAgICBhdHRy
aWJ1dGUgdGhhdCBhZmZlY3RzIGZvcm1hdCBwYXJzaW5nIG9yIGZvcm1hdCgpIG9yIGhlYWQo
KSBvdXRwdXQKICAgICAgICBpbiBhbnkgd2F5LgoKICAgICAgICBUaGlzIG1ldGhvZCBtYXkg
bm90IGJlIGNhbGxlZCBhcyBhIHN0YXRpYyBtZXRob2QuCgogICAgJGZtdDEgPSAkZm10LT5j
bG9uZSAoKTsKICAgICAgICBUaGlzIG1ldGhvZCBkdXBsaWNhdGVzIHRoZSBnaXZlbiBvYmpl
Y3QuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvCiAgICAgICAgY2xvbmUgYW4gZXhpc3Rpbmcg
b2JqZWN0IHRoYW4gdG8gbWFudWZhY3R1cmUgb25lIGZyb20gc2NyYXRjaAogICAgICAgIChh
c3N1bWluZyB5b3UgaGF2ZSBhIHN1aXRhYmxlIGV4aXN0aW5nIG9iamVjdCBvbiBoYW5kKSwg
YmVjYXVzZQogICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgdG8gdmFsaWRhdGUgZGVmaW5lKCkg
Y2FsbHMuCgogICAgICAgIFRoaXMgbWV0aG9kIG1heSBub3QgYmUgY2FsbGVkIGFzIGEgc3Rh
dGljIG1ldGhvZC4KCiAgICAkZm10LT5kZWZpbmUgKCR3aGF0ID0+ICRuYW1lLCAuLi4pOwog
ICAgICAgIFRoaXMgbWV0aG9kIGRlZmluZXMgdGhpbmdzLiBUaGUgJHdoYXQgYXJndW1lbnQg
c2F5cyB3aGF0IGlzIGJlaW5nCiAgICAgICAgZGVmaW5lZCwgYW5kIG11c3QgYmUgb25lIG9m
ICdhdHRyaWJ1dGUnLCAnY29udmVyc2lvbicsICdmbGFnJywKICAgICAgICAnbW9kZScsIG9y
ICd0cmFuc2Zvcm0nLiBUaGUgJG5hbWUgYXJndW1lbnQgbXVzdCBjb25mb3JtIHRvIHRoZQog
ICAgICAgIG5hbWluZyBjb252ZW50aW9ucyBmb3IgdGhlIHRoaW5nIGJlaW5nIGRlZmluZWQs
IGFuZCB0aGUgc3Vic2VxdWVudAogICAgICAgIGFyZ3VtZW50cyBkZXBlbmQgb24gdGhlIHdo
YXQgaXMgYmVpbmcgZGVmaW5lZC4KCiAgICAgICAgSWYgJHdoYXQgZXEgJ2F0dHJpYnV0ZScs
IGEgbmV3IGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzCiAgICAgICAgY3JlYXRl
ZC4gVGhlIG5leHQgYXJndW1lbnQgaXMgZWl0aGVyIGZhbHNlIG9yIGEgcmVmZXJlbmNlIHRv
IHRoZQogICAgICAgIG11dGF0b3IgZm9yIHRoZSBvYmplY3QuIFRoZSBtdXRhdG9yIHNob3Vs
ZCBleHBlY3QgdGhlIGZvbGxvd2luZwogICAgICAgIGFyZ3VtZW50czoKCiAgICAgICAgIC0g
YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBiZWluZyBtdXRhdGF0ZWQ7CiAgICAgICAgIC0g
dGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBtdXRhdGVkOwogICAgICAgICAtIHRo
ZSBuZXcgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KCiAgICAgICAgVGhlIG11dGF0b3IgbXVz
dCByZXR1cm4gdGhlIHZhbHVlIHRvIGJlIHBsYWNlZCBpbiB0aGUgYXR0cmlidXRlLiBJZgog
ICAgICAgIHRoZSB2YWx1ZSBpcyBpbnZhbGlkIGl0IHNob3VsZCByYWlzZSBhbiBleGNlcHRp
b24uIEluIHRoZSBjYXNlIG9mIGEKICAgICAgICBmYWxzZSB2YWx1ZSBiZWluZyBwYXNzZWQg
Zm9yIHRoZSBtdXRhdG9yLCB0aGUgbXV0YXRvciBpcyBzdWIKICAgICAgICB7JF9bMl19LgoK
ICAgICAgICBJZiAkd2hhdCBlcSAnY29udmVyc2lvbicsIGEgbmV3IGNvbnZlcnNpb24gaXMg
Y3JlYXRlZC4gVGhlIG5hbWUgbXVzdAogICAgICAgIGJlIGEgc2luZ2xlIGNoYXJhY3RlciBh
bmQgbm90IGJlIGEgZGlnaXQsICcgJywgJy0nLCAnKycsICcjJywgJy4nLAogICAgICAgICck
Jywgb3IgdGhlIHF1b3RlIGNoYXJhY3Rlci4gVGhlIHN1YnNlcXVlbnQgYXJndW1lbnRzIGFy
ZToKCiAgICAgICAgIC0gYSByZWZlcmVuY2UgdG8gY29kZSB0byBpbXBsZW1lbnQgdGhlIGNv
bnZlcnNpb247CiAgICAgICAgIC0gYSBoZWFkaW5nIG9yIGNvZGUgdG8gY29tcHV0ZSB0aGUg
aGVhZGluZzsKICAgICAgICAgLSBhIGxpdGVyYWwgZGVmYXVsdCB3aWR0aCBvciBjb2RlIHRv
IGNvbXB1dGUgdGhlIHdpZHRoLgoKICAgICAgICBJZiAkd2hhdCBlcSAnZmxhZycsIGEgbmV3
IGZsYWcgaXMgY3JlYXRlZC4gVGhlIG5hbWUgbXVzdCBjb25mb3JtIHRvCiAgICAgICAgdGhl
IHNhbWUgcmVzdHJpY3Rpb25zIGFzIGEgJ2NvbnZlcnNpb24nLiBBbnkgZXh0cmEgYXJndW1l
bnRzIGFyZQogICAgICAgIGlnbm9yZWQuCgogICAgICAgIElmICR3aGF0IGVxICdtb2RlJywg
YSBuZXcgb3V0cHV0IG1vZGUgaXMgY3JlYXRlZC4gVGhlIHN1YnNlcXVlbnQKICAgICAgICBh
cmd1bWVudHMgYXJlOgoKICAgICAgICAgLSBhIHJlZmVyZW5jZSB0byBjb2RlIHRvIGltcGxl
bWVudCBmb3JtYXQoKSBvdXRwdXQ7CiAgICAgICAgIC0gYSByZWZlcmVuY2UgdG8gY29kZSB0
byBpbXBsZW1lbnQgaGVhZCgpIG91dHB1dDsKICAgICAgICAgLSBhbiBvcHRpb25hbCByZWZl
cmVuY2UgdG8gY29kZSB0byBzZWUgaWYgdGhlIG1vZGUKICAgICAgICAgICBtYXkgYmUgdXNl
ZCwgYW5kIGlmIHNvIHRvIGxvYWQgYW55IG1vZHVsZXMgbmVlZGVkLgoKICAgICAgICBUaGUg
Zm9ybWF0KCkgb3V0cHV0IGNvZGUgc2hvdWxkIGV4cGVjdCBhcyBpbnB1dCB0aGUgZm9ybWF0
dGVyIG9iamVjdAogICAgICAgIGFuZCBhIGxpc3Qgb2YgZm9ybWF0dGVkIGRhdGEgdG8gYmUg
aW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGxpbmUgYW5kCiAgICAgICAgcmV0dXJuZWQuIFRo
ZSBoZWFkKCkgb3V0cHV0IGNvZGUgc2hvdWxkIGV4cGVjdCBhcyBpbnB1dCB0aGUKICAgICAg
ICBmb3JtYXR0ZXIgb2JqZWN0IGFuZCBhIGxpc3Qgb2YgaGVhZGVycywgYW5kIHJldHVybiBh
IGxpc3Qgb2YgaGVhZGVyCiAgICAgICAgbGluZXMuIFRoZSBjaGVjayBjb2RlIHNob3VsZCBl
eHBlY3QgYXMgaW5wdXQgdGhlIGZvcm1hdHRlciBvYmplY3QsCiAgICAgICAgYW5kIHJhaXNl
IGFuIGV4Y2VwdGlvbiBpZiB0aGUgbW9kZSBtYXkgbm90IGJlIHVzZWQuCgogICAgICAgIElm
ICR3aGF0IGVxICd0cmFuc2Zvcm0nLCBhIG5ldyB0cmFuc2Zvcm0gaXMgY3JlYXRlZC4gVGhl
IG5hbWUgbXVzdAogICAgICAgIGNvbmZvcm0gdG8gdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFz
IGEgJ2NvbnZlcnNpb24uIFRoZSBzdWJzZXF1ZW50CiAgICAgICAgYXJndW1lbnRzIGFyZToK
CiAgICAgICAgIC0gYSByZWZlcmVuY2UgdG8gY29kZSB0byBpbXBsZW1lbnQgdGhlIHRyYW5z
Zm9ybTsKICAgICAgICAgLSBhIGhlYWRpbmcgb3IgY29kZSB0byBpbXBsZW1lbnQgdGhlIGhl
YWRpbmcuCgogICAgICAgIE9uY2UgYW4gYXR0cmlidXRlLCBjb252ZXJzaW9uLCBmbGFnLCBt
b2RlLCBvciB0cmFuc2Zvcm0gaXMgZGVmaW5lZAogICAgICAgIGl0IG1heSBub3QgYmUgZGVs
ZXRlZC4gSXQgbWF5IGJlIHJlZGVmaW5lZCBieSB0aGUgY2xhc3MgKGkuZS4KICAgICAgICBu
YW1lc3BhY2UpIHRoYXQgbWFkZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiwgb3IgYnkgYSBz
dWJjbGFzcyBvZgogICAgICAgIHRoYXQgY2xhc3MsIHVzaW5nIHRoZSBkZWZpbmUoKSBtZXRo
b2Q7IGJ1dCBpdCBtYXkgbm90IGJlIG1hZGUgaW50bwogICAgICAgIHNvbWV0aGluZyBkaWZm
ZXJlbnQuIFRoYXQgaXMsIGlmIGEgY2xhc3MgaGFzIGRlZmluZWQgYXR0cmlidXRlICd4JywK
ICAgICAgICBhIHN1YmNsYXNzIG1heSBub3QgbWFrZSAneCcgaW50byBhIGNvbnZlcnNpb24s
IGZsYWcsIG9yIHRyYW5zZm9ybSwKICAgICAgICB0aG91Z2ggaXQgY2FuIGNoYW5nZSBpdHMg
bXV0YXRvci4KCiAgICAgICAgRXhjZXB0IGFzIG5vdGVkIGFib3ZlLCB3aGVuIGNvZGUgaXMg
Y2FsbGVkIGZvciBpdCBzaG91bGQgZXhwZWN0IHRvCiAgICAgICAgYmUgY2FsbGVkIHdpdGgg
dGhlIGZvbGxvd2luZyBhcmd1bWVudHM6CgogICAgICAgICAkZm10IDogVGhlIHJlbGV2YW50
IFN0cmluZzo6Rm9ybWF0OjpHZW5lcmFsIG9iamVjdDsKICAgICAgICAgJGR0YSA6IFRoZSBk
YXRhIHRvIGJlIGZvcm1hdHRlZCAodW5kZWYgaWYgbm9uZSk7CiAgICAgICAgICRpbnggOiBU
aGUgcGFyYW1ldGVyIGluZGV4IHRvIGJlIGNvbnZlcnRlZCAoZnJvbSB6ZXJvKTsKICAgICAg
ICAgJGZsZyA6IFRoZSBzcHJpbnRmLXN0eWxlIGZsYWdzICgnJyBpZiBub25lKTsKICAgICAg
ICAgJHhmZyA6IFRoZSBleHRlbmRlZCBmbGFncyAoJycgaWYgbm9uZSk7CiAgICAgICAgICR3
aWQgOiBUaGUgZmllbGQgd2lkdGggKCcnIGlmIG5vbmUpOwogICAgICAgICAkZHAgIDogVGhl
IGRlY2ltYWwgcGxhY2VzICh1bmRlZiBpZiBub25lKTsKICAgICAgICAgJHN0ciA6IFRoZSBh
cmJpdHJhcnkgc3RyaW5nICh1bmRlZiBpZiBub25lKTsKICAgICAgICAgJHRybiA6IFRoZSB0
cmFuc2Zvcm0gY2hhcmFjdGVycyAoJycgaWYgbm9uZSk7CiAgICAgICAgICRjYyAgOiBUaGUg
Y29udmVyc2lvbiBjaGFyYWN0ZXIuCgogICAgICAgIFdoYXQgdGhlIGNvZGUgcmV0dXJucyBk
ZXBlbmRzIG9uIGl0cyBwdXJwb3NlLgoKICAgICAgICBUaGUgY29udmVyc2lvbiBjb2RlIGlz
IGV4cGVjdGVkIHRvIHJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGEuCgogICAgICAgIEhlYWRp
bmcgY29kZSBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIHJlbGV2YW50IGhlYWRpbmcsIGFz
IGVpdGhlciBhCiAgICAgICAgc3RyaW5nIG9yIGEgbGlzdCBvZiBzdHJpbmdzLiBUaGUgJGR0
YSBhcmd1bWVudCB3aWxsIGJlIHdoYXRldmVyCiAgICAgICAgYXJndW1lbnQgd2FzIHBhc3Nl
ZCB0byB0aGUgaGVhZCgpIGNhbGwuCgogICAgICAgIFRyYW5zZm9ybSBjb2RlIGlzIGV4cGVj
dGVkIHRvIHJldHVybiB0aGUgdHJhbnNmb3JtZWQgZGF0YS4KCiAgICAgICAgV2lkdGggY29k
ZSBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIHdpZHRoLCB3aGljaCB3aWxsIGJlIHBhc3Nl
ZCB0bwogICAgICAgIGhlYWRpbmcsIHRyYW5zZm9ybSwgYW5kIGNvbnZlcnNpb24gY29kZSBp
biB0aGUgJHdpZCBhcmd1bWVudC4gVGhlCiAgICAgICAgJGR0YSBhcmd1bWVudCB3aWxsIGJl
IHVuZGVmLCBhbmQgdGhlICR3aWQgYXJndW1lbnQgbWF5IGJlIGVtcHR5LgoKICAgICAgICBU
aGlzIG1ldGhvZCBtYXkgbm90IGJlIGNhbGxlZCBhcyBhIHN0YXRpYyBtZXRob2QuCgogICAg
ICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG9iamVjdCBpdHNlbGYuCgogICAgJHdoYXQg
PSAkZm10LT5kZWZpbmVkX2FzICgkbmFtZSk7CiAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJu
cyB0aGUgdGhpbmcgdGhlICRuYW1lIGlzIGRlZmluZWQgYXMsIGFzIG9uZSBvZiB0aGUKICAg
ICAgICBzdHJpbmdzICdhdHRyaWJ1dGUnLCAnY29udmVyc2lvbicsICdmbGFnJywgJ21vZGUn
LCBvciAndHJhbnNmb3JtJy4KICAgICAgICBJZiB0aGUgJG5hbWUgaXMgbm90IGRlZmluZWQs
IHVuZGVmIGlzIHJldHVybmVkLgoKICAgICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVk
IGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAkd2hvID0gJGZtdC0+ZGVmaW5lZF9ieSAoJG5h
bWUpOwogICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNsYXNz
IChpLmUuIG5hbWVzcGFjZSkgdGhhdAogICAgICAgIGRlZmluZWQgdGhlIGdpdmVuIHRoaW5n
LiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgdW5kZWYgaXMgcmV0dXJuZWQuCgogICAgICAgIFRo
aXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICAgICR0ZXh0
ID0gJGZtdC0+Zm9ybWF0ICgkZGF0YSk7CiAgICAgICAgVGhpcyBtZXRob2QgZm9ybWF0cyB0
aGUgZ2l2ZW4gJGRhdGEgaW50byB0ZXh0IGluIHRoZSBjdXJyZW50IG91dHB1dAogICAgICAg
IG1vZGUsIGJ5IGFwcGx5aW5nIHRoZSBkZWZpbmVkIGNvbnZlcnNpb25zLCBmbGFncywgYW5k
IHRyYW5zZm9ybXMgdG8KICAgICAgICB0aGUgJ2Zvcm1hdCcgYXR0cmlidXRlLgoKICAgICAg
ICBUaGlzIG1heSBub3QgYmUgY2FsbGVkIGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAkdmFs
dWUgPSAkZm10LT5nZXQgKCRuYW1lKTsKICAgICAgICBUaGlzIG1ldGhvZCByZXRyaWV2ZXMg
dGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBhdHRyaWJ1dGUuIEl0IG1heSBub3QKICAgICAgICBi
ZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICAgICRoYXNoX3JlZmVyZW5jZSA9ICRm
bXQtPmdldF9jYWNoZSAoJG5hbWUpOwogICAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgdGhl
IGNvbnRlbnRzIG9mIHRoZSBuYW1lZCBjYWNoZS4gVGhlIHJldHVybiB3aWxsCiAgICAgICAg
YmUgYSBoYXNoIHJlZmVyZW5jZSwgYW5kIHRoaXMgY2FjaGUgd2lsbCBiZSBjcmVhdGVkIGlm
IG5lY2Vzc2FyeS4KCiAgICAgICAgVGhlIGNhY2hlIGlzIGEgaGFzaCBhdHRhY2hlZCB0byB0
aGUgb2JqZWN0LiBVc2VyLWRlZmluZWQgY29kZSBtYXkKICAgICAgICB1c2UgdGhlIGNhY2hl
LCBidXQgYW55IHVzZSBvZiB0aGUgY2FjaGUgc2hvdWxkIGJlIHByZXBhcmVkIHRvCiAgICAg
ICAgY29tcHV0ZSB3aGF0ZXZlciBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgY2FjaGUgaGFzIGJl
ZW4gY2xlYXJlZC4KCiAgICAgICAgQ2FjaGUgbmFtZXMgYmVnaW5uaW5nIHdpdGggYW4gdW5k
ZXJzY29yZSBhcmUgcmVzZXJ2ZWQgdG8gdGhpcyBjbGFzcy4KCiAgICAgICAgSXQgaXMgcmVj
b21tZW5kZWQgdGhhdCB0aGUgdXNlciBjcmVhdGUgYSBzaW5nbGUgYXBwcm9wcmlhdGVseS1u
YW1lZAogICAgICAgIGNhY2hlLCBhbmQgc3RvcmUgYWxsIHVzZXItZGVmaW5lZCBkYXRhIHVu
ZGVyIHRoaXMgbmFtZS4gVGhlCiAgICAgICAgcmVjb21tZW5kZWQgaWRpb20gZm9yIGFjY2Vz
c2luZyBkYXRhIGluIHRoaXMgY2FjaGUgaXMgc29tZXRoaW5nIGxpa2UKCiAgICAgICAgIG15
ICRteV9jYWNoZSA9ICRmbXQtPmdldF9jYWNoZSAoJ215X2NhY2hlJyk7CiAgICAgICAgIG15
ICRjYWNoZWRfZGF0YSA9ICRteV9jYWNoZS0+e2NhY2hlZF9kYXRhfSB8fD0gZG8gewogICAg
ICAgICAjIENvZGUgdG8gY29tcHV0ZSB0aGUgY2FjaGVkIGRhdGEuIEJlY2F1c2UgJG15X2Nh
Y2hlCiAgICAgICAgICMgaXMgaW4gdGhlIGNhY2hlLCB0aGUgY29tcHV0ZWQge2NhY2hlZF9k
YXRhfSB3aWxsCiAgICAgICAgICMgYmUgYWxzby4KICAgICAgICAgfTsKCiAgICAgICAgVGhp
cyBtZXRob2QgbWF5IG5vdCBiZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICAgIEBs
aW5lcyA9ICRmbXQtPmhlYWQgKCRkdGEpOwogICAgICAgIFRoaXMgbWV0aG9kIGdlbmVyYXRl
cyBhbGwgaGVhZGVycyBpbiB0aGUgY3VycmVudCBvdXRwdXQgbW9kZS4KCiAgICAgICAgVGhl
ICRkdGEgYXJndW1lbnQgaXMgb3B0aW9uYWwuIElmIGl0IGlzIHByb3ZpZGVkIGl0IHdpbGwg
YmUgcGFzc2VkCiAgICAgICAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNmb3JtcycgYW5kIGNv
bnZlcnNpb25zJyBoZWFkZXIgY29kZSBhcyB0aGUKICAgICAgICBzZWNvbmQgYXJndW1lbnQ7
IG90aGVyd2lzZSB1bmRlZiB3aWxsIGJlIHBhc3NlZC4KCiAgICAgICAgVGhlIGhlYWRpbmcg
Zm9yIGVhY2ggY29udmVyc2lvbiBpcyBmb3JtZWQgYnkgdGhlIGhlYWRpbmdzIG9mIHRoZQog
ICAgICAgIHRyYW5zZm9ybXMgKGlmIGFueSkgYW5kIGNvbnZlcnNpb24gY2hhcmFjdGVyIGZv
ciBlYWNoIGNvbnZlcnNpb24sCiAgICAgICAgam9pbmVkIHdpdGggJyAnLgoKICAgICAgICBJ
ZiB0aGUgcmV2ZXJzZV9oZWFkaW5ncyBhdHRyaWJ1dGUgaXMgdHJ1ZSAoaW4gdGhlIFBlcmwg
c2Vuc2UpIHRoZQogICAgICAgIGluZGl2aWR1YWwgaGVhZGluZ3Mgd2lsbCBiZSByZXZlcnNl
ZCBiZWZvcmUgYmVpbmcgam9pbmVkLCBpbiBhIGNydWRlCiAgICAgICAgYXR0ZW1wdCB0byBn
aXZlIGEgbW9yZSBuYXR1cmFsIHdvcmQgb3JkZXIgaW4gKGUuZy4pIHRoZSBSb21hbmNlCiAg
ICAgICAgbGFuZ3VhZ2VzLgoKICAgICAgICBJZiB0aGUgbWFrZV90ZXh0IGF0dHJpYnV0ZSBp
cyB0cnVlIChpbiB0aGUgUGVybCBzZW5zZSkgdGhlCiAgICAgICAgcmV2ZXJzZV9oZWFkaW5n
cyBhdHRyaWJ1dGUgaXMgaWdub3JlZC4gSW5zdGVhZCwgdGhlIGZpZWxkIGhlYWRpbmcsCiAg
ICAgICAgb25jZSBidWlsdCwgaXMgc3VibWl0dGVkIHRvIG1ha2V0ZXh0LCBhbmQgdGhlIHJl
c3VsdCBpcyB1c2VkIGFzIHRoZQogICAgICAgIGNvbHVtbiBoZWFkaW5nLiBJZiB0aGUgbWFr
ZXRleHQgY2FsbCBmYWlscywgdGhlIGluZGl2aWR1YWwgcGllY2VzIG9mCiAgICAgICAgdGhl
IGhlYWRpbmcgYXJlIHN1Ym1pdHRlZCB0byBtYWtldGV4dCwgYW5kIHRoZSByZXN1bHQgY29u
Y2F0ZW5hdGVkLgogICAgICAgIFRoZSBpbmRpdmlkdWFsIHRyYW5zbGF0ZWQgaGVhZGluZ3Mg
YXJlIHJldmVyc2VkIGJlZm9yZSBjb25jYXRlbmF0aW9uCiAgICAgICAgaWYgbWFrZXRleHQg
KCdfcmV2ZXJzZV9oZWFkaW5ncycpIGlzIHRydWUuCgogICAgICAgIFRoaXMgbWV0aG9kIG1h
eSBub3QgYmUgY2FsbGVkIGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAkZm10ID0gJGZtdC0+
c2V0ICgkbmFtZSwgJHZhbHVlIC4uLikKICAgICAgICBUaGlzIG1ldGhvZCBjaGFuZ2VzIHRo
ZSB2YWx1ZXMgb2YgdGhlIGdpdmVuIGF0dHJpYnV0ZXMuIE1vcmUgdGhhbgogICAgICAgIG9u
ZSBhdHRyaWJ1dGUvdmFsdWUgcGFpciBtYXkgYmUgZ2l2ZW4sIGJ1dCB0aGUgbmFtZWQgYXR0
cmlidXRlcyBtdXN0CiAgICAgICAgZXhpc3QuCgogICAgICAgIFRoaXMgbWV0aG9kIG1heSBu
b3QgYmUgY2FsbGVkIGFzIGEgc3RhdGljIG1ldGhvZC4KCiAgICAldXNlZCA9ICRmbXQtPnVz
ZWQgKCk7CiAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGhhc2ggZW51bWVyYXRpbmcg
dGhlIGNvbnZlcnNpb24gY2hhcmFjdGVycwogICAgICAgIHVzZWQgYnkgdGhlIGN1cnJlbnQg
Zm9ybWF0LiBUaGUgaGFzaCBrZXlzIGFyZSB0aGUgY29udmVyc2lvbgogICAgICAgIGNoYXJh
Y3RlcnMsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggY2hh
cmFjdGVyIGlzCiAgICAgICAgdXNlZC4gQ29udmVyc2lvbiBjaGFyYWN0ZXJzIG5vdCB1c2Vk
IHdpbGwgbm90IGFwcGVhciBpbiB0aGUgaGFzaC4KCiAgICAgICAgVGhpcyBtZXRob2QgbWF5
IG5vdCBiZSBjYWxsZWQgYXMgYSBzdGF0aWMgbWV0aG9kLgoKICBBdHRyaWJ1dGVzCiAgICBU
aGUgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGJlbG93LCBsaXN0ZWQgYnkgbmFtZSwgZm9s
bG93ZWQgYnkgdGhlIGRhdGEKICAgIHR5cGUgaW4gcGFyZW50aGVzZXMuIFRoZSBkYXRhIHR5
cGVzIGFyZToKCiAgICBib29sZWFuIC0gQW55IHZhbHVlIGlzIHZhbGlkLCBhbmQgaXQgd2ls
bCBiZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8KICAgIFBlcmwncyBub3Rpb24gb2YgdHJ1
dGggYW5kIGZhbHNlaG9vZCAodW5kZWYsIDAsIGFuZCAnJyBhcmUgZmFsc2UsCiAgICBldmVy
eXRoaW5nIGVsc2UgaXMgdHJ1ZSk7CgogICAgY2hhcmFjdGVyIC0gVGhlIGF0dHJpYnV0ZSBt
dXN0IGJlIGEgc2luZ2xlIGNoYXJhY3RlciwgYW5kIGNlcnRhaW4KICAgIGNoYXJhY3RlcnMg
bWF5IGJlIGludmFsaWQ7CgogICAgaGFuZGxlIC0gc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0
aGUgYXR0cmlidXRlOwoKICAgIHN0cmluZyAtIEFueSBjaGFyYWN0ZXJzIGFyZSB2YWxpZC4K
CiAgICBJbiBhZGRpdGlvbiwgdGhlIHBhcmVudGhlc2VzIG1heSBjb250YWluIHRoZSB3b3Jk
ICdjYWNoZWQnIGlmIHRoZSBjbGFzcwogICAgY2FjaGVzIHJlc3VsdHMgY29tcHV0ZWQgZnJv
bSB0aGlzIGF0dHJpYnV0ZS4gQ2hhbmdpbmcgc3VjaCBhdHRyaWJ1dGVzCiAgICB3aWxsIGNh
dXNlIHRoZSBjYWNoZSB0byBiZSBmbHVzaGVkLCBhbmQgdGhlIGNvbXB1dGF0aW9ucyB3aWxs
IGJlIHJlZG9uZQogICAgdGhlIG5leHQgdGltZSB0aGV5IGFyZSBuZWVkZWQuCgogICAgVGhp
cyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgcHVibGljIGF0dHJpYnV0ZXM6Cgog
ICAgZm9ybWF0IChzdHJpbmcsIGNhY2hlZCkKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250
YWlucyB0aGUgZm9ybWF0IHN0cmluZyB0byBiZSB1c2VkIGJ5IHRoZQogICAgICAgIGZvcm1h
dCgpLCBoZWFkKCksIGFuZCB1c2VkKCkgbWV0aG9kcy4KCiAgICAgICAgVGhlcmUgaXMgbm8g
ZGVmYXVsdC4KCiAgICBsZWFkZXIgKHN0cmluZywgY2FjaGVkKQogICAgICAgIFRoaXMgYXR0
cmlidXRlIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyIHRoYXQgaW50cm9kdWNlcyBhIGNvbnZl
cnNpb24uCgogICAgICAgIFRoZSBkZWZhdWx0IGlzICclJy4KCiAgICBtYWtlX3RleHQgKHN0
cmluZyBvciBoYW5kbGUpCiAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3BlY2lmaWVzIGVpdGhl
ciB0aGUgbmFtZSBvZiBhIHN1YmNsYXNzIG9mCiAgICAgICAgTG9jYWxlOjpNYWtlVGV4dCBv
ciBhIGxhbmd1YWdlIGhhbmRsZSBnZW5lcmF0ZWQgYnkgY2FsbGluZyB0aGUKICAgICAgICBj
bGFzcycgZ2V0X2hhbmRsZSBtZXRob2QuIElmIGEgc3ViY2xhc3MgbmFtZSBpcyBzcGVjaWZp
ZWQsCiAgICAgICAgZ2V0X2hhbmRsZSB3aWxsIGJlIGNhbGxlZCBvbiB0aGF0IGNsYXNzLCBh
bmQgdGhlIG1ha2VfdGV4dCBhdHRyaWJ1dGUKICAgICAgICBzZXQgdG8gdGhlIHJlc3VsdCBv
ZiB0aGUgZ2V0X2hhbmRsZSBtZXRob2QuCgogICAgICAgIEFzIGEgY29uc2VxdWVuY2Ugb2Yg
dGhpcywgaWYgeW91IHdpc2ggdG8gY2hhbmdlIGxhbmd1YWdlcyBpbgogICAgICAgIG1pZC1z
dHJlYW0sIHlvdSBuZWVkIHRvIHJlc2V0IHRoZSBtYWtlX3RleHQgYXR0cmlidXRlLiBTb21l
dGhpbmcKICAgICAgICBsaWtlCgogICAgICAgICAkZm10LT5zZXQgKG1ha2VfdGV4dCA9PiBy
ZWYgJGZtdC0+Z2V0ICgnbWFrZV90ZXh0JykpCgogICAgICAgIHNob3VsZCBkbyB0aGUgam9i
LCB0aG91Z2ggZGVwZW5kaW5nIG9uIGhvdyB0aGUgY29udmVyc2lvbnMgYXJlCiAgICAgICAg
aW1wbGVtZW50ZWQgeW91IG1heSBhbHNvIG5lZWQgdG8gZG8gdGhpbmdzIGxpa2UgY2FsbAog
ICAgICAgIFBPU0lYOjpzZXRsb2NhbGUuCgogICAgICAgIFRoZSBoZWFkKCkgbWV0aG9kIG1h
a2VzIHVzZSBvZiB0aGlzIGF0dHJpYnV0ZSB0byB0cmFuc2xhdGUgZmllbGQKICAgICAgICBo
ZWFkaW5ncywgYnV0IGl0IGlzIGFsc28gYXZhaWxhYmxlIGZvciBvdGhlciBwdXJwb3Nlcy4K
CiAgICAgICAgSWYgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IChpLmUuIHRydWUgaW4gdGhlIFBl
cmwgc2Vuc2UpIHRoZQogICAgICAgIHJldmVyc2VfaGVhZGluZ3MgYXR0cmlidXRlIGlzIGln
bm9yZWQuCgogICAgICAgIFRoZSBkZWZhdWx0IGlzIHVuZGVmLgoKICAgIG1vZGUgKHN0cmlu
ZykKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBjb250cm9scyB0aGUgb3V0cHV0IHByb2R1Y2Vk
IGJ5IHRoZSBmb3JtYXQoKSBhbmQKICAgICAgICBoZWFkKCkgbWV0aG9kcy4gSW5pdGlhbGx5
LCB2YWxpZCB2YWx1ZXMgYXJlOgoKICAgICAgICBjc3YgLSBDYXVzZXMgdGhlIG91dHB1dCB0
byBiZSBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzLiBUaGUgaGVhZCgpCiAgICAgICAgbWV0aG9k
IHJldHVybnMgb25seSBvbmUgbGluZSwgd2l0aCBhbGwgaGVhZGluZ3MgZm9yIGEgY29sdW1u
IGJlaW5nCiAgICAgICAgam9pbmVkIGJ5IHNpbmdsZSBzcGFjZXMuIENvbnRlbnRzIG9mIHRo
ZSAnZm9ybWF0JyBhdHRyaWJ1dGUgb3RoZXIKICAgICAgICB0aGFuIGNvbnZlcnNpb24gc3Bl
Y2lmaWNhdGlvbnMgYXJlIGlnbm9yZWQsIGFuZCBsZWFkaW5nIGFuZCB0cmFpbGluZwogICAg
ICAgIHNwYWNlcyB3aWxsIGJlIHN0cmlwcGVkIGJlZm9yZSBvdXRwdXQuIFRoZSBUZXh0OjpD
U1YgbW9kdWxlIGlzCiAgICAgICAgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIGxvYWRlZCBpZiBu
ZWVkZWQuCgogICAgICAgIGh0bWxfdGFibGUgLSBDYXVzZXMgdGhlIG91dHB1dCB0byBiZSBo
dG1sIHRhYmxlIHJvd3MuIFRoZSBoZWFkKCkKICAgICAgICBtZXRob2QgZW5jbG9zZXMgdGhl
IGhlYWRpbmdzIGluIDx0aD4gdGFncywgYW5kIHRoZSB3aG9sZSByb3cgaW4gPHRyPgogICAg
ICAgIHRhZ3MuIE9ubHkgb25lIHRhYmxlIHJvdyBpcyBnZW5lcmF0ZWQgYnkgdGhlIGhlYWQo
KSBtZXRob2QsIHdpdGggYWxsCiAgICAgICAgaGVhZGluZ3MgZm9yIGEgY29sdW1uIGJlaW5n
IGpvaW5lZCBieSBzaW5nbGUgc3BhY2VzLiBUaGUgZm9ybWF0KCkKICAgICAgICBtZXRob2Qg
ZW5jbG9zZXMgdGhlIGRhdGEgaW4gPHRkPiB0YWdzLCBhbmQgdGhlIHdob2xlIHJvdyBpbiA8
dHI+CiAgICAgICAgdGFncy4gQ29udGVudHMgb2YgdGhlICdmb3JtYXQnIGF0dHJpYnV0ZSBv
dGhlciB0aGFuIGNvbnZlcnNpb24KICAgICAgICBzcGVjaWZpY2F0aW9ucyBhcmUgaWdub3Jl
ZCwgYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyB3aWxsIGJlCiAgICAgICAgc3Ry
aXBwZWQgYmVmb3JlIG91dHB1dC4gVGhlIEhUTUw6OkVudGl0aWVzIG1vZHVsZSBpcyByZXF1
aXJlZCwgYW5kCiAgICAgICAgd2lsbCBiZSBsb2FkZWQgaWYgbmVlZGVkLgoKICAgICAgICB0
ZXh0IC0gQ2F1c2VzIHRoZSBvdXRwdXQgdG8gYmUgdGV4dCBmb3JtYXR0ZWQgcGVyIHRoZSBj
b250ZW50cyBvZgogICAgICAgIHRoZSAnZm9ybWF0JyBhdHRyaWJ1dGUuIFRoZSBoZWFkKCkg
bWV0aG9kIG1heSByZXR1cm4gbXVsdGlwbGUgbGluZXMKICAgICAgICBvZiB0ZXh0IGlmIG5l
Y2Vzc2FyeS4gTm8gYWRkaXRpb25hbCBtb2R1bGVzIGFyZSBuZWVkZWQuCgogICAgICAgIHRz
diAtIFNpbWlsYXIgdG8gJ2NzdicsIGJ1dCB0aGUgb3V0cHV0IGlzIHRhYi1zZXBhcmF0ZWQg
YW5kIHN0cmluZ3MKICAgICAgICBhcmUgbm90IHF1b3RlZC4gTm8gYWRkaXRpb25hbCBtb2R1
bGVzIGFyZSBuZWVkZWQuCgogICAgICAgIFRoZSB1c2VyIG1heSBvZiBjb3Vyc2UgZGVmaW5l
IGFkZGl0aW9uYWwgb3V0cHV0IG1vZGVzIHVzaW5nIHRoZQogICAgICAgIGRlZmluZSgpIG1l
dGhvZC4KCiAgICAgICAgVGhlIGRlZmF1bHQgaXMgJ3RleHQnLgoKICAgIG5ld2xpbmUgKHN0
cmluZykKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBzdHJpbmcgdG8gcGxh
Y2UgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUKICAgICAgICBvZiB0ZXh0IGdlbmVyYXRlZCBi
eSB0aGUgZm9ybWF0KCkgYW5kIGhlYWQoKSBtZXRob2RzIGluICd0ZXh0JywKICAgICAgICAn
aHRtbF9oZWFkJywgYW5kICd0c3YnIG1vZGVzLiBJbiAnY3N2JyBtb2RlIHRoZSByZXR1cm4g
aXMgcHJvdmlkZWQKICAgICAgICBieSBUZXh0OjpDU1YuIFRoZSB1c2Ugb2YgdGhpcyBpbiBh
IHVzZXItZGVmaW5lZCBtb2RlIGlzIGRldGVybWluZWQKICAgICAgICBieSB0aGUgZGVmaW5p
dGlvbiBvZiB0aGUgbW9kZS4KCiAgICAgICAgVGhlIGRlZmF1bHQgaXMgJycuCgogICAgcXVv
dGUgKGNoYXJhY3RlciwgY2FjaGVkKQogICAgICAgIFRoaXMgYXR0cmlidXRlIHNwZWNpZmll
cyB0aGUgY2hhcmFjdGVyIHRvIGRlbGltaXQgdGhlICdzdHJpbmcnCiAgICAgICAgcG9ydGlv
biBvZiB0aGUgY29udmVyc2lvbi4gVGhlIHNhbWUgY2hhcmFjdGVyIHdpbGwgYmUgdXNlZCB0
bwogICAgICAgIGRlbGltaXQgdGhlIGVuZCB1bmxlc3MgdGhlIGNoYXJhY3RlciBpcyBhIGJy
YWNrZXQgb2Ygc29tZSBzb3J0LCBpbgogICAgICAgIHdoaWNoIGNhc2UgdGhlIG9wcG9zaXRl
IGJyYWNrZXQgdGVybWluYXRlcyB0aGUgc3RyaW5nLiBZZXMsIHRoaXMKICAgICAgICBtZWFu
cyB0aGF0IGlmIHlvdSBiZWdpbiB0aGUgc3RyaW5nIHdpdGggYSByaWdodC1oYW5kIGJyYWNr
ZXQgeW91CiAgICAgICAgbXVzdCBlbmQgaXQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBsZWZ0
LWhhbmQgYnJhY2tldC4KCiAgICAgICAgRGlnaXRzIGFuZCB0aGUgY2hhcmFjdGVycyAnICcs
ICcrJywgJy0nLCAnIycsICckJywgYW5kICcuJyBhcmUKICAgICAgICBpbnZhbGlkLCBhcyBh
cmUgY2hhcmFjdGVycyBkZWZpbmVkIGFzIGhhdmluZyBvdGhlciBmdW5jdGlvbnMgKGUuZy4K
ICAgICAgICBjb252ZXJzaW9ucykuIEFuIGF0dGVtcHQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUg
dG8gb25lIG9mIHRoZXNlIHdpbGwKICAgICAgICBjcm9hay4KCiAgICAgICAgVGhlIGRlZmF1
bHQgaXMgJ3snLCB3aGljaCBtZWFucyAnfScgdGVybWluYXRlcyB0aGUgc3RyaW5nLgoKICAg
IHJldmVyc2VfaGVhZGluZ3MgKGJvb2xlYW4pCiAgICAgICAgVGhpcyBhdHRyaWJ1dGUgc3Bl
Y2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBpbmRpdmlkdWFsIHRyYW5zZm9ybSBhbmQKICAg
ICAgICBjb252ZXJzaW9uIGhlYWRpbmdzIGFyZSBjb25jYXRlbmF0ZWQgdG8gbWFrZSBhIGZp
ZWxkIGhlYWRpbmcuIElmCiAgICAgICAgdHJ1ZSAoaW4gdGhlIFBlcmwgc2Vuc2UpIHRoZXkg
YXJlIHJldmVyc2VkLgoKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpcyBpZ25vcmVkIGlmIHRo
ZSBtYWtlX3RleHQgYXR0cmlidXRlIHdhcyBzcGVjaWZpZWQuCgogICAgICAgIFRoZSBkZWZh
dWx0IGlzIHVuZGVmIChpLmUuIGZhbHNlKS4KCiAgICB0cmltIChib29sZWFuKQogICAgICAg
IFRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvcm1hdCgp
IG1ldGhvZCB3aGVuIGEKICAgICAgICBkYXR1bSBkb2VzIG5vdCBmaXQgaW4gaXRzIGZpZWxk
LiBJZiB0cnVlLCB0aGUgZGF0dW0gd2lsbCBiZQogICAgICAgIHRydW5jYXRlZCBvbiB0aGUg
cmlnaHQuIElmIGZhbHNlLCB0aGUgZGF0dW0gd2lsbCBub3QgYmUgdHJ1bmNhdGVkLgoKICAg
ICAgICBIZWFkaW5ncyBhcmUgYWx3YXlzIHRydW5jYXRlZC4KCiAgICAgICAgVGhlIGRlZmF1
bHQgaXMgdW5kZWYgKGkuZS4gZmFsc2UpLgoKU1VCQ0xBU1NJTkcKICAgIFVubGVzcyB5b3Ug
aW50ZW5kIHRvIHVzZSB5b3VyIGZvcm1hdHMgaW4gbW9yZSB0aGFuIG9uZSBzY3JpcHQgeW91
IGRvIG5vdAogICAgbmVlZCB0byBzdWJjbGFzcy4gSW5zdGVhZCwgaW5zdGFudGlhdGUgYW4g
b2JqZWN0LCBkZWZpbmUoKSB3aGF0IHlvdSBuZWVkCiAgICBvbiBpdCwgYW5kIHRoZW4gY2xv
bmUoKSBpdCBpZiB5b3UgbmVlZCBtb3JlIHRoYW4gb25lIChzYXksIHRvIGF2b2lkIHRoZQog
ICAgb3ZlcmhlYWQgaW52b2x2ZWQgaW4gY2hhbmdpbmcgc29tZSBvZiB0aGUgYXR0cmlidXRl
cykuCgogICAgU2hvdWxkIHlvdSB3YW50IHRvIHN1YmNsYXNzLCBzb21ldGhpbmcgbGlrZSB0
aGlzIGlzIHByb2JhYmx5IHRoZQogICAgc2ltcGxlc3QgYXBwcm9hY2g6CgogICAgIHN1YiBu
ZXcgewogICAgICAgIG15ICRjbGFzcyA9IHNoaWZ0OwogICAgICAgIG15ICRzZWxmID0gJGNs
YXNzLT5TVVBFUjo6bmV3ICgpOwogICAgICAgICRzZWxmLT5kZWZpbmUgKC4uLik7CiAgICAg
ICAgIyBBcyBtYW55IGFzIGRlc2lyZWQuCiAgICAgICAgQF8gYW5kICRzZWxmLT5zZXQgKEBf
KTsKICAgICAgICAkc2VsZjsKICAgICB9CgogICAgU2luY2UgY2xvbmluZyBpcyBtb3JlIGVm
ZmljaWVudCB0aGFuIGRlZmluaW5nIGF0dHJpYnV0ZXMgKG5vIGNoZWNraW5nCiAgICBmb3Ig
Y29uZmxpY3RzKSB5b3UgbWF5IHdpc2ggdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKCiAg
ICAgbXkgJHByb3RvdHlwZSA9IF9fUEFDS0FHRV9fLT5TVVBFUjo6bmV3ICgpOwogICAgIF9z
ZXR1cCAoJHByb3RvdHlwZSk7CiAgICAgCiBzdWIgbmV3IHsKICAgICAgICBteSAkY2xhc3Mg
PSBzaGlmdDsKICAgICAgICBteSAkc2VsZiA9IHJlZiAkY2xhc3MgPyAkY2xhc3MtPmNsb25l
ICgpIDoKICAgICAgICAgICAgJGNsYXNzIGVxIF9fUEFDS0FHRV9fID8gJHByb3RvdHlwZS0+
Y2xvbmUgKCkgOgogICAgICAgICAgICBfc2V0dXAgKCRjbGFzcy0+U1VQRVI6Om5ldyAoKSk7
CiAgICAgICAgQF8gYW5kICRzZWxmLT5zZXQgKEBfKTsKICAgICB9CiAgICAgCiBzdWIgX3Nl
dHVwIHsKICAgICAgICBteSAkc2VsZiA9IHNoaWZ0OwogICAgICAgICRzZWxmLT5kZWZpbmUg
KC4uLik7CiAgICAgICAgIyBBcyBtYW55IGFzIGRlc2lyZWQuCiAgICAgICAgJHNlbGY7CiAg
ICAgfQoKICAgIFlvdSBtYXkgZmluZCBpdCB1c2VmdWwgdG8gb3ZlcnJpZGUgdGhlIHNldCgp
IG1ldGhvZCBpbiBhIGNvdXBsZSBjYXNlczoKICAgIHlvdSBtYXkgd2lzaCB0byByZXN0cmlj
dCB0aGUgdmFsdWVzIG9mIHRoZSBiYXNlIGF0dHJpYnV0ZXMsIG9yIHlvdSBtYXkKICAgIHdp
c2ggdG8gYWx0ZXIgc29tZSBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2Ygb3Ro
ZXJzLiBJbiBib3RoCiAgICBjYXNlcyB0aGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIGZvbGxv
d2luZyBwc2V1ZG8tUGVybDoKCiAgICAgc3ViIHNldCB7CiAgICAgICAgbXkgJHNlbGYgPSBz
aGlmdDsKICAgICAgICB3aGlsZSAoQF8pIHsKICAgICAgICAgICAgbXkgJG5hbWUgPSBzaGlm
dDsKICAgICAgICAgICAgbXkgJHZhbHVlID0gc2hpZnQ7CiAgICAgICAgICAgIGlmICgkbmFt
ZSBlcSAnc29tZXRoaW5nJykgewogICAgICAgICAgICAgICAgIyB0aHJvdyBhbiBleGNlcHRp
b24gaWYgeW91IGRvIG5vdCBsaWtlIHRoZSB2YWx1ZQogICAgICAgICAgICB9CiAgICAgICAg
ICAgICRzZWxmLT5TVVBFUjo6c2V0ICgkbmFtZSwgJHZhbHVlKTsKICAgICAgICAgICAgaWYg
KCRuYW1lIGVxICdzb21ldGhpbmcnKSB7CiAgICAgICAgICAgICAgICAjIGRvIG90aGVyIHBy
b2Nlc3Npbmcgbm93IHRoYXQgdGhlIHZhbHVlIGhhcyBiZWVuIHNldAogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAgICRzZWxmOyAgICAgICMgc2luY2Ugc2V0KCkgaXMgZG9jdW1l
bnRlZCBhcyByZXR1cm5pbmcgdGhpcwogICAgIH0KCkJVR1MKICAgIEJ1Z3MgbWF5IGJlIHJl
cG9ydGVkIHRvIDxodHRwczovL3J0LmNwYW4ub3JnLz4gb3IgYnkgbWFpbCB0byB0aGUgYXV0
aG9yCiAgICAod3lhbnQgYXQgY3BhbiBkb3Qgb3JnKS4KClNFRSBBTFNPCiAgICA8aHR0cDov
L3NlYXJjaC5jcGFuLm9yZy8+IGZpbmRzIDI2NyBtb2R1bGVzIHdpdGggJ2Zvcm1hdCcgaW4g
dGhlaXIgbmFtZXMKICAgIGFzIG9mIE5vdmVtYmVyIDIgMjAwNi4gTW9zdCBvZiB0aGVzZSBz
ZWVtIHRvIGJlIHNwZWNpYWwtcHVycG9zZQogICAgZm9ybWF0dGVycywgcGFydHMgb2YgdGVt
cGxhdGUgc3lzdGVtcywgb3IgY29uY2VybmVkIHdpdGggYmxvY2tzIG9mIHRleHQuCiAgICBG
b3IgaW1wbGVtZW50aW5nIGEgZ2VuZXJhbCBzcHJpbnRmLWxpa2UgZm9ybWF0dGVyLCBvbmx5
IHRoZSBmb2xsb3dpbmcKICAgIHNlZW1lZCBtb3JlLW9yLWxlc3MgcmVsZXZhbnQgdG8gbWUu
CgogICAgPGh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9TdHJpbmctRm9ybWF0PiBieSBE
YXJyZW4gQ2hhbWJlcmxhaW4gdXNlcwogICAgdGhlIGZvcm1hdCBjaGFyYWN0ZXJzIHRvIHNl
bGVjdCBsaWtlLWtleWVkIGRhdGEgZnJvbSBhIGhhc2guCgogICAgPGh0dHA6Ly9zZWFyY2gu
Y3Bhbi5vcmcvZGlzdC9TdHJpbmctRm9ybWF0WD4gYnkgTGFuY2UgQ2xldmVsYW5kIGlzCiAg
ICBvYmplY3Qtb3JpZW50ZWQsIGFuZCBhc3NvY2lhdGVzIHZhbHVlcyB3aXRoIENPQk9MLWxp
a2UgdGVtcGxhdGVzLgoKICAgIDxodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvRGF0YS1E
aXNwbGF5PiBieSBHZW8gVGlnZXIgaXMgY29uY2VybmVkCiAgICB3aXRoIHRoZSBtYXJzaGFs
aW5nIG9mIHRhYnVsYXIgZGF0YS4KCiAgICA8aHR0cDovL3NlYXJjaC5jcGFuLm9yZy9kaXN0
L0RhdGEtTWFza1ByaW50PiBieSBJbHlhIFZlcmxpbnNreSB1c2VzCiAgICBDT0JPTC1saWtl
IHRlbXBsYXRlcyB0byBmb3JtYXQgdGFidWxhciBkYXRhLgoKICAgIFRoZXJlIGFyZSBldmVu
IG1vcmUgdGVtcGxhdGluZyBzeXN0ZW1zLCB0aGUgbW9zdCBjb21wcmVoZW5zaXZlIChhbmQK
ICAgIGxhcmdlc3QpIGJlaW5nIDxodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvVGVtcGxh
dGUtVG9vbGtpdD4gYnkgQW5keQogICAgV2FyZGxleS4KCkNPUFlSSUdIVAogICAgQ29weXJp
Z2h0IDIwMDYgYnkgVGhvbWFzIFIuIFd5YW50LCBJSUkgKHd5YW50IGF0IGNwYW4gZG90IG9y
ZykuIEFsbAogICAgcmlnaHRzIHJlc2VydmVkLgoKICAgIFRoaXMgbW9kdWxlIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gdXNlIGl0LCByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUGVybCBpdHNlbGYuCgo=
--------------030109020907070509070903--
|