OTRSMasterSlave
6.1.1
Ported to 6.1
6.1.x
Znuny
https://www.znuny.org/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Includes "Ticket Master/Slave" feature.
Enthält "Ticket Master/Slave" Funktionalität.
A „mester/alárendelt jegy” funkciót tartalmazza.
build.znuny.com
2021-09-14 11:36:22 UTC
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkNoYW5nZXMiPgogICAgPFNldHRpbmcgTmFtZT0iTWFzdGVyU2xhdmU6OkR5bmFtaWNGaWVsZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyI+TWFzdGVyU2xhdmU8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik1hc3RlclNsYXZlOjpBZHZhbmNlZEVuYWJsZWQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlcyB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgcGFydCBvZiB0aGUgZmVhdHVyZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6Ok1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIwIiBUcmFuc2xhdGFibGU9IjEiPkRpc2FibGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTWFzdGVyU2xhdmU6OlVuc2V0TWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5EaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5FbmFibGVkPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik1hc3RlclNsYXZlOjpVcGRhdGVNYXN0ZXJTbGF2ZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FbmFibGVzIHRoZSBmZWF0dXJlIHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5EaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5FbmFibGVkPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik1hc3RlclNsYXZlOjpGb2xsb3dVcGRhdGVkTWFzdGVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5EaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5FbmFibGVkPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9Ik1hc3RlclNsYXZlOjpGb3J3YXJkU2xhdmVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgJ2ZvcndhcmQnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgJ2ZvcndhcmQnIHRvIHRoZSBzbGF2ZSB0aWNrZXRzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+RGlzYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjEiIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlZDwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJNYXN0ZXJTbGF2ZTo6S2VlcFBhcmVudENoaWxkQWZ0ZXJVbnNldCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5FbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlNlbGVjdCIgU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+RGlzYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjEiIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlZDwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJNYXN0ZXJTbGF2ZTo6S2VlcFBhcmVudENoaWxkQWZ0ZXJVcGRhdGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RW5hYmxlcyB0aGUgZmVhdHVyZSB0byBrZWVwIHBhcmVudC1jaGlsZCBsaW5rIGFmdGVyIGNoYW5nZSBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMCIgVHJhbnNsYXRhYmxlPSIxIj5EaXNhYmxlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMSIgVHJhbnNsYXRhYmxlPSIxIj5FbmFibGVkPC9JdGVtPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjTWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RXZlbnQ6Ok1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6Ok1hc3RlclNsYXZlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+QXJ0aWNsZUNyZWF0ZXxBcnRpY2xlU2VuZHxUaWNrZXRTdGF0ZVVwZGF0ZXxUaWNrZXRQcmlvcml0eVVwZGF0ZXxUaWNrZXRQZW5kaW5nVGltZVVwZGF0ZXxUaWNrZXRMb2NrVXBkYXRlfFRpY2tldE93bmVyVXBkYXRlfFRpY2tldFJlc3BvbnNpYmxlVXBkYXRlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlByZUFwcGxpY2F0aW9uTW9kdWxlIyMjQWdlbnRQcmVNYXN0ZXJTbGF2ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPktlcm5lbDo6TW9kdWxlczo6QWdlbnRQcmVNYXN0ZXJTbGF2ZTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50VGlja2V0TWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+VGlja2V0IE1hc3RlclNsYXZlLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPk1hc3RlclNsYXZlPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjMDA0LU9UUlNNYXN0ZXJTbGF2ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSmF2YVNjcmlwdCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkFnZW50LlRpY2tldEFjdGlvbi5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5UaWNrZXRNYXN0ZXJTbGF2ZS5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjIzAwNC1PVFJTTWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjNDgwLU1hc3RlclNsYXZlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRab29tOjpNZW51TW9kdWxlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRpY2tldE1lbnU6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+TWFzdGVyU2xhdmU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGlvbiI+QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50VGlja2V0TWFzdGVyU2xhdmU7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQb3B1cFR5cGUiPlRpY2tldEFjdGlvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjUGVybWlzc2lvbiIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+TWFzdGVyU2xhdmU8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNSZXF1aXJlZExvY2siIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzbid0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjVGlja2V0VHlwZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI1NlcnZpY2UiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI093bmVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4wPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjT3duZXJNYW5kYXRvcnkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyBpZiB0aWNrZXQgb3duZXIgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI1Jlc3BvbnNpYmxlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI1Jlc3BvbnNpYmxlTWFuZGF0b3J5IiBVc2VyUHJlZmVyZW5jZXNHcm91cD0iQWR2YW5jZWQiIFVzZXJNb2RpZmljYXRpb25Qb3NzaWJsZT0iMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXRzIGlmIHRpY2tldCByZXNwb25zaWJsZSBtdXN0IGJlIHNlbGVjdGVkIGJ5IHRoZSBhZ2VudC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4wPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjU3RhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNTdGF0ZVR5cGUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5vcGVuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Y2xvc2VkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+cGVuZGluZyByZW1pbmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPnBlbmRpbmcgYXV0bzwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI1N0YXRlRGVmYXVsdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJFbnRpdHkiIFZhbHVlRW50aXR5VHlwZT0iU3RhdGUiIFZhbHVlUmVnZXg9IiI+cGVuZGluZyByZW1pbmRlcjwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI05vdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4xPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjTm90ZU1hbmRhdG9yeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TZXRzIGlmIG5vdGUgbXVzdCBiZSBmaWxsZWQgaW4gYnkgdGhlIGFnZW50LiBDYW4gYmUgb3ZlcndyaXR0ZW4gYnkgVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI1N1YmplY3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj48L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNCb2R5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlRleHRhcmVhIj48L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNSaWNoVGV4dFdpZHRoIiBVc2VyUHJlZmVyZW5jZXNHcm91cD0iQWR2YW5jZWQiIFVzZXJNb2RpZmljYXRpb25Qb3NzaWJsZT0iMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSB3aWR0aCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50IGZvciB0aGlzIHNjcmVlbi4gRW50ZXIgbnVtYmVyIChwaXhlbHMpIG9yIHBlcmNlbnQgdmFsdWUgKHJlbGF0aXZlKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iXlxkKyU/JCI+NjIwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjUmljaFRleHRIZWlnaHQiIFVzZXJQcmVmZXJlbmNlc0dyb3VwPSJBZHZhbmNlZCIgVXNlck1vZGlmaWNhdGlvblBvc3NpYmxlPSIxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGhlaWdodCBmb3IgdGhlIHJpY2ggdGV4dCBlZGl0b3IgY29tcG9uZW50IGZvciB0aGlzIHNjcmVlbi4gRW50ZXIgbnVtYmVyIChwaXhlbHMpIG9yIHBlcmNlbnQgdmFsdWUgKHJlbGF0aXZlKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iXlxkKyU/JCI+MTAwPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjSW52b2x2ZWRBZ2VudCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNJbmZvcm1BZ2VudCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI0lzVmlzaWJsZUZvckN1c3RvbWVyRGVmYXVsdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkNoZWNrYm94Ij4wPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjUHJpb3JpdHkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iQ2hlY2tib3giPjA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNQcmlvcml0eURlZmF1bHQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJFbnRpdHkiIFZhbHVlRW50aXR5VHlwZT0iUHJpb3JpdHkiIFZhbHVlUmVnZXg9IiI+MyBub3JtYWw8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNUaXRsZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI0hpc3RvcnlUeXBlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+QWRkTm90ZTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI0hpc3RvcnlDb21tZW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+JSVNYXN0ZXJTbGF2ZTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI01hc3RlclNsYXZlTWFuZGF0b3J5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWdlbnQ6OlZpZXc6OlRpY2tldE1hc3RlclNsYXZlPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJDaGVja2JveCI+MDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRGFzaGJvYXJkQmFja2VuZCMjIzA5MDAtVGlja2V0TWFzdGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6RGFzaGJvYXJkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZDo6VGlja2V0R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0iMSI+TWFzdGVyIFRpY2tldHM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkFsbCBtYXN0ZXIgdGlja2V0czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXR0cmlidXRlcyI+RHluYW1pY0ZpZWxkX01hc3RlclNsYXZlX0VxdWFscz1NYXN0ZXI7U3RhdGVUeXBlPW9wZW47U3RhdGVUeXBlPW5ldzs8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkZpbHRlciI+QWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaW1lIj5BZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbWl0Ij4xMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGVybWlzc2lvbiI+cnc8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5Db250ZW50TGFyZ2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNhY2hlVFRMTG9jYWwiPjAuNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVmYXVsdENvbHVtbnMiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFnZSI+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDaGFuZ2VkIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVySUQiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3VzdG9tZXJOYW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVyVXNlcklEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVzY2FsYXRpb25SZXNwb25zZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblNvbHV0aW9uVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFc2NhbGF0aW9uVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFc2NhbGF0aW9uVXBkYXRlVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaWNrZXROdW1iZXIiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTG9jayI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPd25lciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQZW5kaW5nVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJRdWV1ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXNwb25zaWJsZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmlvcml0eSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXRlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlNMQSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSI+MjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFuZGF0b3J5Ij4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkRhc2hib2FyZEJhY2tlbmQjIyMwOTEwLVRpY2tldFNsYXZlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpEYXNoYm9hcmQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RGFzaGJvYXJkOjpUaWNrZXRHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5TbGF2ZSBUaWNrZXRzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiIgVHJhbnNsYXRhYmxlPSIxIj5BbGwgc2xhdmUgdGlja2V0czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQXR0cmlidXRlcyI+RHluYW1pY0ZpZWxkX01hc3RlclNsYXZlX0xpa2U9U2xhdmUqO1N0YXRlVHlwZT1vcGVuO1N0YXRlVHlwZT1uZXc7PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJGaWx0ZXIiPkFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGltZSI+QWdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW1pdCI+MTA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBlcm1pc3Npb24iPnJ3PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+Q29udGVudExhcmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZWZhdWx0Ij4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDYWNoZVRUTExvY2FsIj4wLjU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHRDb2x1bW5zIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBZ2UiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlZCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXN0b21lcklEIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkN1c3RvbWVyTmFtZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDdXN0b21lclVzZXJJRCI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFc2NhbGF0aW9uUmVzcG9uc2VUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkVzY2FsYXRpb25Tb2x1dGlvblRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXNjYWxhdGlvblVwZGF0ZVRpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGlja2V0TnVtYmVyIj4yPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxvY2siPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3duZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGVuZGluZ1RpbWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUXVldWUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmVzcG9uc2libGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpb3JpdHkiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2VydmljZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTdGF0ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTTEEiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPjI8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hbmRhdG9yeSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJSZXBsYWNlQ3VzdG9tZXJSZWFsTmFtZU9uU2xhdmVBcnRpY2xlVHlwZXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZ2VudDo6Vmlldzo6VGlja2V0TWFzdGVyU2xhdmU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZW1haWwtZXh0ZXJuYWwiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9ImVtYWlsLWludGVybmFsIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJlbWFpbC1ub3RpZmljYXRpb24tZXh0Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJlbWFpbC1ub3RpZmljYXRpb24taW50Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJwaG9uZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iZmF4Ij4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJzbXMiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IndlYnJlcXVlc3QiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdGUtaW50ZXJuYWwiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdGUtZXh0ZXJuYWwiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Im5vdGUtcmVwb3J0Ij4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCiAgICA8U2V0dGluZyBOYW1lPSJSZXBsYWNlQ3VzdG9tZXJSZWFsTmFtZU9uU2xhdmVBcnRpY2xlQ29tbXVuaWNhdGlvbkNoYW5uZWxzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlNwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRNYXN0ZXJTbGF2ZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFbWFpbCI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CgogICAgPFNldHRpbmcgTmFtZT0iQUNMS2V5c0xldmVsMzo6QWN0aW9ucyMjIzg4OC1PVFJTTWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB3aGljaCBpdGVtcyBhcmUgYXZhaWxhYmxlIGZvciAnQWN0aW9uJyBpbiB0aGlyZCBsZXZlbCBvZiB0aGUgQUNMIHN0cnVjdHVyZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OlRpY2tldDo6QUNMPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZTwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRHluYW1pY0ZpZWxkczo6RHJpdmVyIyMjTWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RHluYW1pY0ZpZWxkIGJhY2tlbmQgcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RHluYW1pY0ZpZWxkczo6RHJpdmVyUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRpc3BsYXlOYW1lIiBUcmFuc2xhdGFibGU9IjEiPk1hc3RlciAvIFNsYXZlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6TWFzdGVyU2xhdmU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRtaW5EeW5hbWljRmllbGRNYXN0ZXJTbGF2ZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlzYWJsZWRBZGQiPjE8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUaXRsZSIgVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljIEZpZWxkcyBEcm9wLWRvd24gQmFja2VuZCBHVUk8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYXZCYXJOYW1lIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpNb2R1bGU6OkFkbWluRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUjIyMwMDQtT1RSU01hc3RlclNsYXZlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDU1MiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGQuY3NzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkphdmFTY3JpcHQiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuQWRtaW4uRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUjIyMwMDQtT1RSU01hc3RlclNsYXZlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kTmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgIDxTZXR0aW5nIE5hbWU9IlRpY2tldDo6RnJvbnRlbmQ6OkJ1bGtNb2R1bGUjIyMwMTAtTWFzdGVyU2xhdmUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFzdGVyU2xhdmUgbW9kdWxlIGZvciBUaWNrZXQgQnVsayBmZWF0dXJlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFnZW50OjpWaWV3OjpUaWNrZXRCdWxrOjpNb2R1bGU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0QnVsazo6TWFzdGVyU2xhdmU8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpjc19PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXQnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Rvdm9sdWplIHDFmWlkw6F2w6Fuw60gcG96bsOhbWVrIHDFmWkgem9icmF6ZW7DrSBOYWTFmcOtemVuw6lobyAvIFBvZMWZw616ZW7DqWhvIHYgZGV0YWlsdSB0aWtldHUgLSBBZ2VudFRpY2tldFpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdabcSbbmEgc3RhdnUgTmFkxZnDrXplbsO9L1BvZMWZw616ZW7DvS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBkeW5hbWljIGZpZWxkIG5hbWUgZm9yIG1hc3RlciB0aWNrZXQgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdVcsSNdWplLCB6ZGEgamUgdnnFvmFkb3bDoW5vIHV6YW1rbnV0w60gdGlrZXR1IHDFmWkgem9icmF6ZW7DrSBOYWTFmcOtemVuw6lobyAvIFBvZMWZw616ZW7DqWhvIHYgZGV0YWlsdSB0aWtldHUgdiBBZ2VudFRpY2tldFpvb20uIChOZW7DrS1saSB0aWtldCB6YXTDrW0gdXplbcSNZW4sIGJ1ZGUgdXphbcSNZW4gYSBzdMOhdmFqw61jw60gYWdlbnQgYnVkZSBhdXRvbWF0aWNreSB1csSNZW4gamFrbyB2bGFzdG7DrWsuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VyxI11amUgZGVmYXVsdG7DrSBuw6FzbGVkdWrDrSBzdGF2IHRpa2V0dSBwbyBwxZlpZMOhbsOtIHBvem7DoW1reSAtIHYgem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70gdiBkZXRhaWx1IHRpa2V0dSB2IEFnZW50VGlja2V0Wm9vbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVcsSNdWplIGRlZmF1bHRuw60gcHJpb3JpdHUgdGlrZXR1IHYgem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70gdiBBZ2VudFRpY2tldFpvb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVcsSNdWplIGtvbWVudMOhxZkgaGlzdG9yaWUgcHJvIGFrY2kgem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70sIGtvbWVudMOhxZkgamUgcG91xb5pdCB2IGhpc3RvcmlpIHRpa2V0dSB2IHJvemhyYW7DrSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVcsSNdWplIHR5cCBoaXN0b3JpZSBwcm8gYWtjaSB6b2JyYXplbsOtIE5hZMWZw616ZW7DvSAvIFBvZMWZw616ZW7DvSwgdHlwIGplIHBvdcW+aXQgdiBoaXN0b3JpaSB0aWtldHUgdiByb3pocmFuw60gYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXLEjXVqZSBkYWzFocOtIHN0YXYgdGlrZXR1IHBvIHDFmWlkw6Fuw60gcG96bsOhbWt5IHYgem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70gdiBkZXRhaWx1IHRpa2V0dSB2IHJvemhyYW7DrSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Bva3VkIGplIHDFmWlkw6FuYSBwb3puw6Fta2EgYWdlbnRlbSwgdXLEjcOtIHN0YXYgdGlrZXR1IHYgem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70gLSB2IGRldGFpbHUgdGlrZXR1IHYgcm96aHJhbsOtIGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUgbW9kdWxlIGZvciBUaWNrZXQgQnVsayBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG1hc3RlciB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0cnkgbmFzdGF2ZW7DrSBuw6FzdMSbbmt5IHYgcMWZZWhsZWR1IG5hZMWZw616ZW7DvWNoIHRpa2V0xa8gdiByb3pocmFuw60gYWdlbnRhLiAiTGltaXQiIGplIG1ub8W+c3R2w60gc3RhbmRhcmRuxJsgdmlkaXRlbG7DvWNoIHZzdHVwxa8uICJHcm91cCIgc2UgcG91xb7DrXbDoSBrIG9tZXplbsOtIHDFmcOtc3R1cHUgayBwbHVnaW51IChuYXDFmS46IEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiB1csSNdWplLCB6ZGEgamUgcGx1Z2luIHBvdm9sZW4gc3RhbmRhcmRuxJsgbmVibyB6ZGEgamVqIG11c8OtIHXFvml2YXRlbCBwb3ZvbGl0IG1hbnXDoWxuxJsuICJDYWNoZVRUTExvY2FsIiBqZSBjYWNob3ZhY8OtIMSNYXMgcGx1Z2ludSAtICB2IG1pbnV0w6FjaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0cnkgbmFzdGF2ZW7DrSBuw6FzdMSbbmt5IHBybyBwxZllaGxlZCBwb2TFmcOtemVuw71jaCB0aWtldMWvIHYgcm96aHJhbsOtIGFnZW50YS4gIkxpbWl0IiBqZSBtbm/FvnN0dsOtIHN0YW5kYXJkbsSbIHZpZGl0ZWxuw71jaCB2c3R1cMWvLiAiR3JvdXAiIHNlIHBvdcW+w612w6EgayBvbWV6ZW7DrSBwxZnDrXN0dXB1IGsgcGx1Z2ludSAobmFwxZkuOiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgdXLEjXVqZSwgemRhIGplIHBsdWdpbiBwb3ZvbGVuIHN0YW5kYXJkbsSbIG5lYm8gemRhIGplaiBtdXPDrSB1xb5pdmF0ZWwgcG92b2xpdCBtYW51w6FsbsSbLiAiQ2FjaGVUVExMb2NhbCIgamUgY2FjaG92YWPDrSDEjWFzIHBsdWdpbnUgLSB2IG1pbnV0w6FjaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ1JlZ2lzdHJhY2UgbW9kdWx1IHVkw6Fsb3N0w60gdGlrZXR1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQb8W+YWRvdmFuw6Egb3Byw6F2bsSbbsOtIGsgdcW+w612w6Fuw60gem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70gdiBkZXRhaWx1IHRpa2V0dSB2IHJvemhyYW7DrSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VyxI11amUgZGVmYXVsdG7DrSB0ZXh0IHTEm2xhIHBvem7DoW1reSBwxZlpZGFuw6kgdiB6b2JyYXplbsOtIE5hZMWZw616ZW7DvSAvIFBvZMWZw616ZW7DvSB2IGRldGFpbHUgdGlrZXR1IHYgcm96aHJhbsOtIGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VyxI11amUgZGVmYXVsdG7DrSBzdWJqZWt0IHBvem7DoW1layB2IHpvYnJhemVuw60gTmFkxZnDrXplbsO9IC8gUG9kxZnDrXplbsO9IHYgZGV0YWlsdSB0aWtldHUgdiByb3pocmFuw60gYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXLEjXVqZSB6b2Rwb3bEm2Ruw6lobyBhZ2VudGEgdiB6b2JyYXplbsOtIE5hZMWZw616ZW7DvSAvIFBvZMWZw616ZW7DvSB2IGRldGFpbHUgdGlrZXR1IHYgcm96aHJhbsOtIGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdVcsSNdWplIHNlcnZpcyB2IHpvYnJhemVuw60gTmFkxZnDrXplbsO9IC8gUG9kxZnDrXplbsO9IHYgZGV0YWlsdSB0aWtldHUgdiByb3pocmFuw60gYWdlbnRhLiAoTXVzw60gYsO9dCBha3Rpdm92w6FuIFRpY2tldDo6U2VydmljZS4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VyxI11amUgdmxhc3Ruw61rYSB0aWtldHUgdiB6b2JyYXplbsOtIE5hZMWZw616ZW7DvSAvIFBvZMWZw616ZW7DvSB2IGRldGFpbHUgdGlrZXR1IHYgcm96aHJhbsOtIGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnVXLEjXVqZSB0eXAgdGlrZXR1IHYgem9icmF6ZW7DrSBOYWTFmcOtemVuw70gLyBQb2TFmcOtemVuw70gdiBkZXRhaWx1IHRpa2V0dSB2IHJvemhyYW7DrSBhZ2VudGEuIChNdXPDrSBiw710IGFrdGl2b3bDoW4gVGlja2V0OjpUeXBlLiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdab2JyYXp1amUgbGluayB2IG1lbnUsICBrdGVyw70gc2xvdcW+w60ga2Ugem3Em27EmyBzdGF0dXN1IHRpa2V0dSB2IG5hZMWZw616ZW7DvSAvIHBvZMWZw616ZW7DvSwgdiBkZXRhaWx1IHRpa2V0dSB2IHJvemhyYW7DrSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdab2JyYXp1amUgc2V6bmFtIHbFoWVjaCBhZ2VudMWvLCBrdGXFmcOtIHNlIHBvZMOtbGVsaSBuYSB0aWtldHUsICB2IHpvYnJhemVuw60gTmFkxZnDrXplbsO9IC8gUG9kxZnDrXplbsO9IHYgZGV0YWlsdSB0aWtldHUgdiByb3pocmFuw60gYWdlbnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1pvYnJhenVqZSBzZXpuYW0gbW/Fvm7DvWNoIGFnZW50xa8gKHbFoWljaG5pIGFnZW50aSBtb2hvdWPDrSBwxZlpZGF0IHBvem7DoW1rdSBrIGZyb250xJsvdGlrZXR1KSwgYWJ5IGJ5bG8gbW/Fvm5vIHVyxI1pdCwga2RvIGJ1ZGUgbyBwb3puw6FtY2UgaW5mb3Jtb3bDoW4gLSB2IHpvYnJhemVuw60gTmFkxZnDrXplbsOpaG8vUG9kxZnDrXplbsOpaG8gemF6b29tb3ZhbsOpaG8gdGlrZXR1IHYgYWdlbnRza8OpbSBwcm9zdMWZZWTDrS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkZV9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnTWFzdGVyL1NsYXZlLVN0YXR1cyB2ZXJ3YWx0ZW4gZsO8ciAlcyVzJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50VGlja2V0TWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBNYXN0ZXIgVGlja2V0J30gPSAnTmV1ZXMgTWFzdGVyLVRpY2tldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnQXVmaGViZW4gZGVzIE1hc3Rlci1UaWNrZXRzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ0F1ZmhlYmVuIGRlcyBTbGF2ZS1UaWNrZXRzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIG9mICVzJXMlczogJXMnfSA9ICdTbGF2ZSB2b24gJXMlcyVzOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1RpY2tldEJ1bGsvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXRzJ30gPSAnQXVmaGViZW4gZGVyIE1hc3Rlci1UaWNrZXRzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldHMnfSA9ICdBdWZoZWJlbiBkZXIgU2xhdmUtVGlja2V0cyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdNYXN0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnU2xhdmUgdm9uICVzJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAnTWFzdGVyLVRpY2tldCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBtYXN0ZXIgdGlja2V0cyd9ID0gJ0FsbGUgTWFzdGVyLVRpY2tldHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICdBbGxlIFNsYXZlLVRpY2tldHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VybGF1YnQgZGFzIGhpbnp1ZsO8Z2VuIHZvbiBOb3RpemVuIGluIGRlciBNYXN0ZXJTbGF2ZS1BbnNpY2h0IGVpbmVzIGF1ZmdlcnVmZW5lbiBUaWNrZXRzIGluIGRlciBBZ2VudGVuLU9iZXJmbMOkY2hlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAnRGVuIE1hc3RlclNsYXZlLVN0YXR1cyBkZXMgVGlja2V0cyDDpG5kZXJuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJ0R5bmFtaXNjaGVzIEZlbGQgZsO8ciBkYXMgTWFzdGVyLVRpY2tldC1GZWF0dXJlIGRlZmluaWVyZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnQmVzdGltbXQsIG9iIGRpZXNlciBTY3JlZW4gaW0gQWdlbnRlbi1JbnRlcmZhY2UgZGFzIFNwZXJyZW4gZGVzIFRpY2tldHMgdm9yYXVzc2V0enQuIERhcyBUaWNrZXQgd2lyZCAoZmFsbHMgbsO2dGlnKSBnZXNwZXJydCB1bmQgZGVyIGFrdHVlbGxlIEFnZW50IHdpcmQgYWxzIEJlc2l0emVyIGdlc2V0enQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmllcnQsIG9iIGRpZSBNYXN0ZXJTbGF2ZS1Ob3RpeiBzdGFuZGFyZG3DpMOfaWcgZsO8ciBLdW5kZW4gc2ljaHRiYXIgaXN0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZXN0aW1tdCBkZW4gRm9sZ2VzdGF0dXMgZsO8ciBUaWNrZXRzLCBmw7xyIGRpZSBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZSBlaW5lIE5vdGl6IGhpbnp1Z2Vmw7xndCB3dXJkZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZXN0aW1tdCBkaWUgc3RhbmRhcmRtw6TDn2lnZSBUaWNrZXQtUHJpb3JpdMOkdCBmw7xyIFRpY2tldHMgaW0gTWFzdGVyU2xhdmUtQmlsZHNjaGlybSBkZXMgQWdlbnRlbi1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZXN0aW1tdCBkZW4gSGlzdG9yaWVuLUtvbW1lbnRhciB2b24gVGlja2V0LUFrdGlvbmVuIGltIE1hc3RlclNsYXZlLUJpbGRzY2hpcm0sIHdlbGNoZXIgZsO8ciBkaWUgVGlja2V0LUhpc3RvcmllIGltIEFnZW50ZW4tSW50ZXJmYWNlIHZlcndlbmRldCB3aXJkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmVzdGltbXQgZGVuIEhpc3Rvcmllbi1UeXAgdm9uIFRpY2tldC1Ba3Rpb25lbiBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtLCB3ZWxjaGVyIGbDvHIgZGllIFRpY2tldC1IaXN0b3JpZSBpbSBBZ2VudGVuLUludGVyZmFjZSB2ZXJ3ZW5kZXQgd2lyZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Jlc3RpbW10IGRlbiBGb2xnZXN0YXR1cyBmw7xyIFRpY2tldHMsIGbDvHIgZGllIGltIE1hc3RlclNsYXZlLUJpbGRzY2hpcm0gZGVzIEFnZW50ZW4tSW50ZXJmYWNlIGVpbmUgTm90aXogaGluenVnZWbDvGd0IHd1cmRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJ0RhcyBlcndlaXRlcnRlIFZlcmhhbHRlbiBkZXMgTWFzdGVyU2xhdmUtRmVhdHVyZXMgYWt0aXZpZXJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0aGF0IHNsYXZlIHRpY2tldHMgZm9sbG93IHRoZSBtYXN0ZXIgdGlja2V0IHRvIGEgbmV3IG1hc3RlciBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0FrdGl2aWVydCBkaWUgRnVua3Rpb25hbGl0w6R0LCBkYXNzIFNsYXZlLVRpY2tldHMgZGVtIE1hc3Rlci1UaWNrZXQgaW0gZXJ3ZWl0ZXJ0ZW4gTWFzdGVyU2xhdmUtVmVyaGFsdGVuIHp1bSBuZXVlbiBNYXN0ZXIgZm9sZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdBa3RpdmllcnQgZGllIEZ1bmt0aW9uYWxpdMOkdCB6dW0gw4RuZGVybiBkZXMgTWFzdGVyU2xhdmUtU3RhdHVzIGVpbmVzIFRpY2tldHMgaW0gZXJ3ZWl0ZXJ0ZW4gTWFzdGVyU2xhdmUtTW9kdXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJ0FrdGl2aWVydCBkaWUgRnVua3Rpb24genVtIFdlaXRlcmxlaXRlbiB2b24gQXJ0aWtlbG4gZGVzIFR5cHMgXCdXZWl0ZXJsZWl0ZW5cJyB6dSBkZW4gS3VuZGVuIGRlcyBTbGF2ZS1UaWNrZXRzLiBTdGFuZGFyZG3DpMOfaWcgKGRlYWt0aXZpZXJ0KSB3ZXJkZW4ga2VpbmUgQXJ0aWtlbCBkZXMgVHlwcyBcJ1dlaXRlcmxlaXRlblwnIGFuIGRpZSBTbGF2ZS1UaWNrZXRzIHdlaXRlcmdlbGVpdGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0FrdGl2aWVydCBpbSBkaWUgRnVua3Rpb24sIGltIGVyd2VpdGVydGVuIE1hc3RlclNsYXZlLVZlcmhhbHRlbiBlaW5lIEVsdGVybi1LaW5kLUJlemllaHVuZyBuYWNoIGRlbSDDhG5kZXJuIGRlcyBNYXN0ZXJTbGF2ZS1TdGF0dXMgenUgYmVoYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdBa3RpdmllcnQgaW0gZGllIEZ1bmt0aW9uLCBpbSBlcndlaXRlcnRlbiBNYXN0ZXJTbGF2ZS1WZXJoYWx0ZW4gZWluZSBFbHRlcm4tS2luZC1CZXppZWh1bmcgbmFjaCBkZW0gQXVmbMO2c2VuIGRlcyBNYXN0ZXJTbGF2ZS1TdGF0dXMgenUgYmVoYWx0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnQWt0aXZpZXJ0IGRpZSBGdW5rdGlvbiB6dW0gQXVmaGViZW4gZGVzIE1hc3RlclNsYXZlLVN0YXR1cyBlaW5lcyBUaWNrZXRzIGltIGVyd2VpdGVydGVuIE1hc3RlclNsYXZlLVZlcmhhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXJtw7ZnbGljaHQgZGFzIMOEbmRlcm4gZGVzIFRJY2tldC1TdGF0dXMgYmVpbSBIaW56dWbDvGdlbiBlaW5lciBOb3RpeiBpbm5lcmhhbGIgZGVzIE1hc3RlclNsYXZlLUJpbGRzY2hpcm1zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ01hc3RlciAvIFNsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXRzJ30gPSAnTWFzdGVyLVRpY2tldHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUnfSA9ICdNYXN0ZXJTbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnTWFzdGVyU2xhdmUtTW9kdWwgZsO8ciBUaWNrZXQtU2FtbWVsYWt0aW9uZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ0VpbnN0ZWxsdW5nIGRlciDDnGJlcnNpY2h0c3NlaXRlbnBhcmFtZXRlciBmw7xyIE1hc3RlciBUaWNrZXRzIGluIGRlciBBZ2VudGVub2JlcmZsw6RjaGUuICJMaW1pdCIgZ2lidCBkaWUgQW56YWhsIGRlciBzdGFuZGFyZG3DpMOfaWcgZGFyZ2VzdGVsbHRlbiBFaW50csOkZ2UgYW4uICJHcm91cCIgd2lyZCB2ZXJ3ZW5kZXQsIHVtIGRlbiBadWdyaWZmIGF1ZiBkYXMgUGx1Z2luIHp1IGJlZ3JlbnplbiAoYnNwdy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGJlc3RpbW10LCBvYiBkYXMgUGx1Z2luIHN0YW5kYXJkbcOkw59pZyBha3RpdmllcnQgaXN0IG9kZXIgb2IgZGVyIEJlbnV0emVyIGVzIHNlbGJzdCBha3RpdmllcmVuIG11c3MuICJDYWNoZVRUTExvY2FsIiBpc3QgZGllIENhY2hpbmctWmVpdCBkZXMgUGx1Z2lucywgYW5nZWdlYmVuIGluIE1pbnV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnRWluc3RlbGx1bmcgZGVyIMOcYmVyc2ljaHRzc2VpdGVucGFyYW1ldGVyIGbDvHIgU2xhdmUgVGlja2V0cyBpbiBkZXIgQWdlbnRlbm9iZXJmbMOkY2hlLiAiTGltaXQiIGdpYnQgZGllIEFuemFobCBkZXIgc3RhbmRhcmRtw6TDn2lnIGRhcmdlc3RlbGx0ZW4gRWludHLDpGdlIGFuLiAiR3JvdXAiIHdpcmQgdmVyd2VuZGV0LCB1bSBkZW4gWnVncmlmZiBhdWYgZGFzIFBsdWdpbiB6dSBiZWdyZW56ZW4gKGJzcHcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBiZXN0aW1tdCwgb2IgZGFzIFBsdWdpbiBzdGFuZGFyZG3DpMOfaWcgYWt0aXZpZXJ0IGlzdCBvZGVyIG9iIGRlciBCZW51dHplciBlcyBzZWxic3QgYWt0aXZpZXJlbiBtdXNzLiAiQ2FjaGVUVExMb2NhbCIgaXN0IGRpZSBDYWNoaW5nLVplaXQgZGVzIFBsdWdpbnMsIGFuZ2VnZWJlbiBpbiBNaW51dGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnUmVnaXN0cmllcnVuZyBkZXMgVGlja2V0LUV2ZW50LU1vZHVscy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmVuw7Z0aWd0ZSBCZXJlY2h0aWd1bmdlbiBmw7xyIGRpZSBBbnplaWdlIGRlcyBNYXN0ZXJTbGF2ZS1EaWFsb2dzIGltIFRpY2tldC1ab29tLURpYWxvZyBkZXMgQWdlbnRlbmludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyBpZiBNYXN0ZXIgLyBTbGF2ZSBmaWVsZCBtdXN0IGJlIHNlbGVjdGVkIGJ5IHRoZSBhZ2VudC4nfSA9ICdMZWd0IGZlc3QsIG9iIE1hc3RlciAvIFNsYXZlIEZlbGQgZHVyY2ggZWluZW4gQWdlbnRlbiBhdXNnZXfDpGhsdCBzZWluIG11c3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Jlc3RpbW10IGRlbiBzdGFuZGFyZG3DpMOfaWdlbiBUZXh0IGVpbmVyIE5vdGl6IGbDvHIgVGlja2V0cyBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Jlc3RpbW10IGRlbiBzdGFuZGFyZG3DpMOfaWdlbiBCZXRyZWZmIGVpbmVyIE5vdGl6IGbDvHIgVGlja2V0cyBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Jlc3RpbW10IGRlbiB2ZXJhbnR3b3J0bGljaGVuIEFnZW50ZW4gZWluZXMgVGlja2V0cyBpbSBNYXN0ZXJTbGF2ZSBCaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZSBmw7xyIGVpbiBhdWZnZXJ1ZmVuZXMgVGlja2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0Jlc3RpbW10IGRlbiBTZXJ2aWNlIGVpbmVzIFRpY2tldHMgaW0gTWFzdGVyU2xhdmUtQmlsZHNjaGlybSBkZXMgQWdlbnRlbi1JbnRlcmZhY2UgZsO8ciBlaW4gYXVmZ2VydWZlbmVzIFRpY2tldCAoVGlja2V0OjpTZXJ2aWNlIG11c3MgYWt0aXZpZXJ0IHNlaW4pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZXN0aW1tdCBkZW4gQmVzaXR6ZXIgZWluZXMgVGlja2V0cyBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZSBmw7xyIGVpbiBhdWZnZXJ1ZmVuZXMgVGlja2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdCZXN0aW1tdCBkZW4gVGlja2V0LVR5cCBlaW5lcyBUaWNrZXRzIGltIE1hc3RlclNsYXZlLUJpbGRzY2hpcm0gZGVzIEFnZW50ZW4tSW50ZXJmYWNlIGbDvHIgZWluIGF1ZmdlcnVmZW5lcyBUaWNrZXQgKFRpY2tldDo6VHlwZSBtdXNzIGFrdGl2aWVydCBzZWluKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBlaW5lbiBMaW5rIHp1bSDDhG5kZXJuIGRlcyBNYXN0ZXJTbGF2ZS1TdGF0dXMgZWluZXMgVGlja2V0cyBpbSBNZW7DvCBkZXIgVGlja2V0LVpvb20tQW5zaWNodCBkZXMgQWdlbnRlbiBhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1plaWd0IGVpbmUgTGlzdGUgYWxsZXIgaW52b2x2aWVydGVuIEFnZW50ZW4gZsO8ciBkYXMgZ2V3w6RobHRlIFRpY2tldCBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZSBhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgZWluZSBMaXN0ZSBhbGxlciBtw7ZnbGljaGVuIEFnZW50ZW4gKGFsbGUgQWdlbnRlbiBtaXQgTm90aXogQmVyZWNodGlndW5nIGF1ZiBkZXIgUXVldWUvZGVtIFRpY2tldCkgZsO8ciBkYXMgZ2V3w6RobHRlIFRpY2tldCBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZSBhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnWmVpZ3QgZGllIFByaW9yaXTDpHQgZWluZXMgVGlja2V0cyBpbSBNYXN0ZXJTbGF2ZS1CaWxkc2NoaXJtIGRlcyBBZ2VudGVuLUludGVyZmFjZSBmw7xyIGVpbiBhdWZnZXJ1ZmVuZXMgVGlja2V0IGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdaZWlndCBkYXMgVGl0ZWwtRmVsZCBpbiBkZXIgTWFzdGVyU2xhdmUtT2JlcmZsw6RjaGUgZWluZXMgYXVmZ2VydWZlbmVuIFRpY2tldHMgaW0gQWdlbnRlbi1JbnRlcmZhY2UgYW4uICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnU2xhdmUtVGlja2V0cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJ0dpYnQgZGllIHZlcnNjaGllZGVuZW4gQXJ0aWtlbC1Lb21tdW5pa2F0aW9uc2thbsOkbGUgYW4sIGJlaSBkZW5lbiBkZXIgZWNodGUgTmFtZSB2b20gRWx0ZXJuLVRpY2tldCBkdXJjaCBkZW4gaW0gS2luZC1UaWNrZXQgZXJzZXR6dCB3aXJkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICdEaWVzZXMgTW9kdWwgYWt0aXZpZXJ0IGRhcyBNYXN0ZXIvU2xhdmUtRmVsZCBpbiBkZXIgQW56ZWlnZSBmw7xyIGVpbiBuZXVlcyBFbWFpbC0gb2RlciBUZWxlZm9uLVRpY2tldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJ0RpZXNlIEVpbnN0ZWxsdW5nIGlzdCB2ZXJhbHRldCB1bmQgd2lyZCBpbiB3ZWl0ZXJlbiBWZXJzaW9uZW4gdm9uIE9UUlNNYXN0ZXJTbGF2ZSBlbnRmZXJudC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IE1hc3RlclNsYXZlLid9ID0gJ1RpY2tldCBNYXN0ZXJTbGF2ZS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19NWF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnR2VzdGlvbmFyIGVzdGFzIE1hZXN0cm8vRXNjbGF2byBwYXJhICVzJXMlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICdOdWV2byBUaWNrZXQgTWFlc3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnUmVtb3ZlciBlc3RhZG8gVGlja2V0IE1hZXN0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0J30gPSAnUmVtb3ZlciBlc3RhZG8gVGlja2V0IEVzY2xhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJ0VzY2xhdm8gZGUgJXMlcyVzOiVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICdSZW1vdmVyIGVzdGFkbyBNYWVzdHJvIGRlIFRpY2tldHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJ1JlbXZlciBlc3RhZG8gRXNjbGF2byBkZSBUaWNrZXQnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyJ30gPSAnTWFlc3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICdFc2NsYXZvIGRlICVzJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAnVGlja2V0IE1hZXN0cm8nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICdUb2RvcyBsb3MgdGlja2V0cyBtYWVzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1RvZG9zIGxvcyB0aWNrZXRzIGVzY2xhdm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXRlIGHDsWFkaXIgbm90YXMgZW4gbGEgcGFudGFsbGEgZGUgdGlja2V0IE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdNb2RpZmljYSBlbCBlc3RhZG8gTWFlc3Ryby1Fc2NsYXZvIGRlbCB0aWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnRGVmaW5lIGVsIG5vbWJyZSBkZWwgY2FtcG8gZGluw6FtaWNvIHBhcmEgZWwgZnVuY2lvbmFsaWRhZCBkZSB0aWNrZXQgbWFlc3Ryby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdEZWZpbmUgZWwgYmxvcXVlbyByZXF1ZXJpZG8gaW4gbGEgcGFudGFsbGEgZGUgdGlja2V0IE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUgKHNpIGVsIHRpY2tldCBubyBoYSBzaWRvIGJsb3F1ZWFkbyBhdW4sIGVsIHRpY2tldCBzZSBibG9xdWVhIHkgZWwgYWdlbnRlIGFjdHVhbCBzZSBjb252ZXJ0aXLDoSBhdXRvbcOhdGljYW1lbnRlIGVuIGVsIGR1ZcOxbyBkZWwgbWlzbW8pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5lIHNpIGxhIG5vdGEgZGUgTWFlc3Ryby1Fc2xhdm8gZXMgdmlzaWJsZSBwb3IgZGVmZWN0byBwYXJhIGxlbCBjbGllbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgc2lndWllbnRlIGVzdGFkbyBkZWwgdGlja2V0IGRlc3B1w6lzIGRlIGHDsWFkaXIgdW5hIG5vdGEsIGVuIGxhIHBhbnRhbGxhIGRlIHRpY2tldCBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBsYSBwcmlvcmlkYWQgcG9yIGRlZmVjdG8gZW4gbGEgcGFudGFsbGEgZGUgdGlja2V0IE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgY29tZW50YXJpbyBkZWwgaGlzdG9yaWFsIHBhcmEgbGEgYWNjacOzbiBkZSBsYSBwYW50YWxsYSBkZWwgdGlja2V0IE1hZXN0cm8tRXNjbGF2bywgcXVlIGVzIHVzYWRvIHBhcmEgZWwgaGlzdG9yaWFsIGRlbCB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIGhpc3RvcmlhbCBwYXJhIGxhIGFjY2nDs24gZGUgbGEgcGFudGFsbGEgZGVsIHRpY2tldCBNYWVzdHJvLUVzY2xhdm8sIHF1ZSBlcyB1c2FkbyBwYXJhIGVsIGhpc3RvcmlhbCBkZWwgdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgc2lndWllbnRlIGVzdGFkbyBkZXNwdcOpcyBkZSBhw7FhZGlyIHVuYSBub3RhLCBlbiBsYSBwYW50YWxsYSBkZSB0aWNrZXQgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgcGFydCBvZiB0aGUgZmVhdHVyZS4nfSA9ICdIYWJpbGl0YSBsYSBwYXJ0ZSBhdmFuemFkYSBkZSBsYSBmdW5jaW9uYWxpZGFkIE1hZXN0cm9Fc2NsYXZvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgbGEgZnVuY2lvbmFsaWRhZCBlbiBsYSBxdWUgdGlja2V0cyBlc2NsYXZvcyBzaWd1ZW4gYWwgdGlja2V0IG1hZXN0cm8gaGFjaWEgdW4gbnVldm8gbWFlc3RybyBlbiBlbCBtb2RvIGF2YW56YWRvIGRlIE1hc3RlclNsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0hhYmlsaXRhIGxhIGZ1bmNpb25hbGlkYWQgZGUgY2FtYmlhciBlbCBlc3RhZG8gTWFlc3Ryb0VzY2xhdm8gZGUgdW4gdGlja2V0IGVuIGVsIG1vZG8gYXZhbnphZG8gZGUgTWFlc3Ryb0VzY2xhdm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJ0hhYmlsaXRhIGxhIGZ1bmNpb25hbGlkYWQgZGUgcmUtZW52aWFyIGFydMOtY3Vsb3MgZGUgdGlwbyBcJ2ZvcndhcmRcJyBkZSB1biB0aWNrZXQgbWFlc3RybyBoYWNpYSBsb3MgY2xpZW50ZXMgZGUgc3VzIHRpY2tldCBlc2NsYXZvcy4gUG9yIG9taXNpw7NuIChkZXNoYWJpdGFkbykgbm8gcmUtZW52aWFyw6EgYXJ0w61jdWxvcyBkZSB0aXBvIFwnZm9yd2FyZFwnIGhhY2lhIGxvcyB0aWNrZXRzIGVzY2xhdm9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0hhYmlsaXRhIGxhIGZ1bmNpb25hbGlkYWQgZGUgbWFudGVuZXIgbG9zIHbDrW5jdWxvcyBwYWRyZS1oaWpvIGRlc3B1w6lzIGRlIGNhbWJpYXIgZWwgZXN0YWRvIGRlIE1hZXN0cm9Fc2NsYXZvIGVuIGVsIG1vZG8gYXZhbnphZG8gZGUgTWFlc3Ryb0VzY2xhdm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdIYWJpbGl0YSBsYSBmdW5jaW9uYWxpZGFkIGRlIG1hbnRlbmVyIGxvcyB2w61uY3Vsb3MgcGFkcmUtaGlqbyBkZXNwdcOpcyBkZSByZW1vdmVyIGVsIGVzdGFkbyBkZSBNYWVzdHJvRXNjbGF2byAgZW4gZWwgbW9kbyBhdmFuemFkbyBkZSBNYWVzdHJvRXNjbGF2by4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgbGEgZnVuY2lvbmFsaWRhZCBkZSByZW1vdmVyIGVsIGVzdGFkbyBkZSBNYWVzdHJvRXNjbGF2byBkZSB1biB0aWNrZXQgZW4gZWwgbW9kbyBhdmFuemFkbyBkZSBNYWVzdHJvRXNjbGF2by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2kgdW5hIG5vdGEgZXMgYcOxYWRpZGEgcG9yIHVuIGFnZW50ZSwgZmlqYSBlbCBlc3RhZG8gZGVsIHRpY2tldCBlbiBlbiBsYSBwYW50YWxsYSBkZSB0aWNrZXQgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICdNYWVzdHJvIC8gRXNjbGF2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJ1RpY2tldHMgTWFlc3Ryb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUnfSA9ICdNYWVzdHJvRXNjbGF2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnTcOzZHVsbyBNYXN0ZXJTbGF2ZSBwYXJhIGxhIG9wY2nDs24gZGUgVGlja2V0cyBwb3IgTG90ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG1hc3RlciB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIGVsIGJhY2tlbmQgZGVsIHBhbmVsIHByaW5jaXBhbCBkZSBsYXMgZXN0YWTDrXN0aWNhcyBkZSB0aWNrZXRzIG1hZXN0cm9zIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuICJMaW1pdCIgZXMgZWwgbsO6bWVybyBkZSBlbnRyYWRhcyBtb3N0cmFkYXMgcG9yIGRlZmVjdG8uICJHcm91cCIgc2UgdXNhIHBhcmEgcmVzdHJpbmdpciBlbCBhY2Nlc28gYWwgcGx1Z2luIChwb3IgZWplbXBsbywgR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluYSBzaSBlbCBwbHVnaW4gZXN0w6EgaGFiaWxpdGFkbyBwb3IgZGVmZWN0byBvIHNpIGVsIHVzdWFyaW8gdGllbmUgcXVlIGhhYmlsaXRhcmxvIG1hbnVhbG1lbnRlLiAiQ2FjaGVUVExMb2NhbCIgZXMgZWwgdGllbXBvIGVuIG1pbnV0b3MgcGFyYSBsYSBjYWNow6kgZGVsIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIGVsIGJhY2tlbmQgZGVsIHBhbmVsIHByaW5jaXBhbCBkZSBsYXMgZXN0YWTDrXN0aWNhcyBkZSB0aWNrZXRzIGVzY2xhdm9zIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuICJMaW1pdCIgZXMgZWwgbsO6bWVybyBkZSBlbnRyYWRhcyBtb3N0cmFkYXMgcG9yIGRlZmVjdG8uICJHcm91cCIgc2UgdXNhIHBhcmEgcmVzdHJpbmdpciBlbCBhY2Nlc28gYWwgcGx1Z2luIChwb3IgZWplbXBsbywgR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluYSBzaSBlbCBwbHVnaW4gZXN0w6EgaGFiaWxpdGFkbyBwb3IgZGVmZWN0byBvIHNpIGVsIHVzdWFyaW8gdGllbmUgcXVlIGhhYmlsaXRhcmxvIG1hbnVhbG1lbnRlLiAiQ2FjaGVUVExMb2NhbCIgZXMgZWwgdGllbXBvIGVuIG1pbnV0b3MgcGFyYSBsYSBjYWNow6kgZGVsIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ1JlZ2lzdHJvIGRlbCBtw7NkdW8gZGUgZXZlbnRvIHBhcmEgdGlja2V0cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzb3MgcmVxdWVyaWRvcyBwYXJhIHVzYXIgbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGRlIHVuIHRpY2tldCwgZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJ0VzdGFibGVjZSBzaSBlbCBhZ2VudGUgZGViZSBzZWxlY2Npb25hciBlbCBjYW1wbyBNYWVzdHJvIC8gRXNjbGF2by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRmlqYSBlbCB0ZXh0byBkZWwgY3VlcnBvIHBvciBkZWZlY3RvIGRlIGxhcyBub3RhcyBhw7FhZGlkYXMgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0ZpamEgZWwgYXN1bnRvIHBvciBkZWZlY3RvIGRlIGxhcyBub3RhcyBhw7FhZGlkYXMgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0ZpamEgZWwgYWdlbnRlIHJlc3BvbnNhYmxlIGRlIHVuIHRpY2tldCBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0ZpamEgZWwgc2VydmljaW8gZGUgdW4gdGlja2V0IGVuIGxhIHBhbnRhbGxhIE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUgKFRpY2tldDo6U2VydmljZSByZXF1aXJlIHNlciBhY3RpdmFkbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0ZpamEgZWwgZHVlw7FvIGRlIHVuIHRpY2tldCBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdGaWphIGVsIHRpcG8gZGUgdGlja2V0IGVuIGxhIHBhbnRhbGxhIE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUgKFRpY2tldDo6VHlwZSByZXF1aXJlIHNlciBhY3RpdmFkbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1biBlbmxhY2UgZW4gZWwgbWVuw7ogcGFyYSBjYW1iaWFyIGVsIGVzdGF0dXMgTWFlc3Ryby1Fc2NsYXZvIGRlIHVuIHRpY2tldCwgZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1bmEgbGlzdGEgZGUgdG9kb3MgbG9zIGFnZW50ZXMgaW52b2x1Y3JhZG9zIGNvbiBlc3RlIHRpY2tldCwgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZGUgbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSB1bmEgbGlzdGEgZGUgdG9kb3MgbG9zIHBvc2libGVzIGFnZW50ZXMgKHRvZG9zIGxvcyBhZ2VudGVzIGNvbiBwZXJtaXNvcyAibm90YSIgZW4gbGEgZmlsYS90aWNrZXQpIHBhcmEgZGV0ZXJtaW5hciBxdWnDqW4gZGViZXLDoSBzZXIgaW5mb3JtYWRvIGFjZXJjYSBkZSBlc3RhIG5vdGEsIGVuIGxhIHBhbnRhbGxhIE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ011ZXN0cmEgbGFzIG9wY2lvbmVzIGRlIHByaW9yaWRhZCBkZSB0aWNrZXQgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZGUgbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnIE11ZXN0cmEgZWwgY2FtcG8gZGUgdMOtdHVsbyBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnVGlja2V0IEVzY2xhdm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAnRXNwZWNpZmljYSBsb3MgZGlmZXJlbnRlcyBjYW5hbGVzIGRlIGNvbXVuaWNhY2nDs24gZGUgYXJ0w61jdWxvcyBlbiBsb3MgY3VhbGVzIHNlIHJlZW1wbGF6YXLDoSBlbCBub21icmUgcmVhbCBkZSB0aWNrZXQgTWFlc3RybyBjb24gZWwgbm9tYnJlIGRlbCB0aWNrZXQgRXNjbGF2by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgYWN0aXZhdGVzIE1hc3Rlci9TbGF2ZSBmaWVsZCBpbiBuZXcgZW1haWwgYW5kIHBob25lIHRpY2tldCBzY3JlZW5zLid9ID0KICAgICAgICAnRXN0ZSBtw7NkdWxvIGFjdGl2YSBlbCBjYW1wbyBNYWVzdHJvL0VzY2xhdm8gZW4gdW5hIG51ZXZhIHBhbnRhbGxhIGRlIHRpY2tldCBwb3IgZW1haWwgbyBwb3IgdGVsw6lmb25vLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmFjacOzbiBlcyBvYnNvbGV0YSB5IHNlcsOhIHJlbW92aWRhIGVuIGZ1dHVyYXMgdmVyc2lvbmVzIGRlIE9UUlNNYXN0ZXJTbGF2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IE1hc3RlclNsYXZlLid9ID0gJ1RpY2tldCBNYWVzdHJvRXNjbGF2byc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnR2VzdGlvbmFyIGVsIGVzdGFkbyBNYWVzdHJvL0VzY2xhdm8gcGFyYSAgJXMlcyVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ051ZXZvIHRpY2tldCBtYWVzdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXQnfSA9ICdEZXNhY3RpdmFyIHRpY2tldCBtYWVzdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ0Rlc2FjdGl2YXIgdGlja2V0IGVzY2xhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJ0VzY2xhdm8gZGUgJXMlcyVzOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1RpY2tldEJ1bGsvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXRzJ30gPSAnRGVzYWN0aXZhciB0aWNrZXRzIG1hZXN0cm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldHMnfSA9ICdEZXNhY3RpdmFyIHRpY2tldHMgZXNjbGF2b3MnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyJ30gPSAnTWFlc3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICdFc2NsYXZvIGRlICVzJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAnVGlja2V0IE1hZXN0cm8nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICdUb2RvcyBsb3MgVGlja2V0cyBtYWVzdHJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1RvZG9zIGxvcyBUaWNrZXRzIGVzY2xhdm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXRlIGHDsWFkaXIgbm90YXMgZW4gbGEgcGFudGFsbGEgZGUgdGlja2V0IE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdNb2RpZmljYSBlbCBlc3RhZG8gTWFlc3Ryby1Fc2NsYXZvIGRlbCB0aWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnRGVmaW5lIGVsIG5vbWJyZSBkZWwgY2FtcG8gZGluw6FtaWNvIHBhcmEgbGEgZnVuY2nDs24gZGUgdGlja2V0IG1hZXN0cm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnRGVmaW5lIGVsIGJsb3F1ZW8gcmVxdWVyaWRvIGluIGxhIHBhbnRhbGxhIGRlIHRpY2tldCBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlIChzaSBlbCB0aWNrZXQgbm8gaGEgc2lkbyBibG9xdWVhZG8gYXVuLCBlbCB0aWNrZXQgc2UgYmxvcXVlYSB5IGVsIGFnZW50ZSBhY3R1YWwgc2UgY29udmVydGlyw6EgYXV0b23DoXRpY2FtZW50ZSBlbiBlbCBkdWXDsW8gZGVsIG1pc21vKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgTWFzdGVyU2xhdmUgbm90ZSBpcyB2aXNpYmxlIGZvciB0aGUgY3VzdG9tZXIgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ0RlZmluZSBzaSBsYSBub3RhIE1hZXN0cm9Fc2NsYXZvIGVzIHZpc2libGUgcGFyYSBlbCBjbGllbnRlIHBvciBkZWZlY3RvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgc2lndWllbnRlIGVzdGFkbyBkZWwgdGlja2V0IGRlc3B1w6lzIGRlIGHDsWFkaXIgdW5hIG5vdGEsIGVuIGxhIHBhbnRhbGxhIGRlIHRpY2tldCBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBsYSBwcmlvcmlkYWQgcG9yIGRlZmVjdG8gZW4gbGEgcGFudGFsbGEgZGUgdGlja2V0IE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgY29tZW50YXJpbyBkZWwgaGlzdG9yaWFsIHBhcmEgbGEgYWNjacOzbiBkZSBsYSBwYW50YWxsYSBkZWwgdGlja2V0IE1hZXN0cm8tRXNjbGF2bywgcXVlIGVzIHVzYWRvIHBhcmEgZWwgaGlzdG9yaWFsIGRlbCB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIGhpc3RvcmlhbCBwYXJhIGxhIGFjY2nDs24gZGUgbGEgcGFudGFsbGEgZGVsIHRpY2tldCBNYWVzdHJvLUVzY2xhdm8sIHF1ZSBlcyB1c2FkbyBwYXJhIGVsIGhpc3RvcmlhbCBkZWwgdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgZWwgc2lndWllbnRlIGVzdGFkbyBkZXNwdcOpcyBkZSBhw7FhZGlyIHVuYSBub3RhLCBlbiBsYSBwYW50YWxsYSBkZSB0aWNrZXQgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgcGFydCBvZiB0aGUgZmVhdHVyZS4nfSA9ICdBY3RpdmEgbGEgcGFydGUgTWFlc3Ryby1Fc2NsYXZvIGF2YW56YWRhIGRlIGxhIGZ1bmNpw7NuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnQWN0aXZhIGxhIGZ1bmNpw7NuIGRlIHF1ZSBsb3MgdGlja2V0cyBlc2NsYXZvcyBzaWd1ZW4gZWwgdGlja2V0IG1hZXN0cm8gYSB1biBudWV2byBtYWVzdHJvIGVuIGVsIG1vZG8gTWFlc3Ryby1Fc2NsYXZvIGF2YW56YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdBY3RpdmEgbGEgZnVuY2nDs24gcXVlIGNhbWJpZSBlbCBlc3RhZG8gTWFlc3Ryby1Fc2NsYXZvIGRlIHVuIHRpY2tldCBlbiBlbCBtb2RvIE1hZXN0cm8tRXNjbGF2byBhdmFuemFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyBvZiBhIG1hc3RlciB0aWNrZXQgdG8gdGhlIGN1c3RvbWVycyBvZiB0aGUgc2xhdmUgdGlja2V0cy4gQnkgZGVmYXVsdCAoZGlzYWJsZWQpIGl0IHdpbGwgbm90IGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIHRvIHRoZSBzbGF2ZSB0aWNrZXRzLid9ID0KICAgICAgICAnSGFiaWxpdGEgbGEgY2FyYWN0ZXLDrXN0aWNhIHBhcmEgcmVlbnZpYXIgYXJ0w61jdWxvcyBkZXNkZSBlbCB0aXBvIFwncmVlbnZpYXJcJyBkZSB1biB0aWNrZXQgbWFlc3RybyBhIGxvcyBjbGllbnRlcyBkZSBsb3MgdGlja2V0cyBlc2NsYXZvcy4gUG9yIGRlZmVjdG8gKGRlc2hhYmlsaXRhZG8pIG5vIHJlZW52aWFyw6EgYXJ0w61jdWxvcyBkZWwgdGlwbyBcJ3JlZW52aWFyXCcgYSBsb3MgdGlja2V0cyBlc2NsYXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBrZWVwIHBhcmVudC1jaGlsZCBsaW5rIGFmdGVyIGNoYW5nZSBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdQZXJtaXRlIHF1ZSBsYSBjYXJhY3RlcsOtc3RpY2EgcGFyYSBtYW50ZW5lciBlbCBlbmxhY2UgcGFkcmUtaGlqbyBkZXNwdcOpcyBkZWwgY2FtYmlvIGRlIGVzdGFkbyBNYWVzdHJvRXNjbGF2byBlbiBlbCBtb2RvIGF2YW56YWRvIE1hZXN0cm9Fc2NsYXZvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgbGEgY2FyYWN0ZXLDrXN0aWNhIHBhcmEgbWFudGVuZXIgZWwgZW5sYWNlIHBhZHJlLWhpam8gZGVzcHXDqXMgZGUgZGVzYWN0aXZhciBlbCBlc3RhZG8gTWFlc3Ryb0VzY2xhdm8gZW4gZWwgYXZhbnphZG8gZGUgTWFlc3Ryb0VzY2xhdm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgbGEgY2FyYWN0ZXLDrXN0aWNhIHBhcmEgZGVzYWN0aXZhciBlbCBlc3RhZG8gZGUgTWFlc3Ryb0VzY2xhZG8gZGUgdW4gdGlja2V0IGVuIGVsIG1vZG8gYXZhbnphZG8gZGUgTWFlc3Ryb0VzY2xhdm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1NpIHVuYSBub3RhIGVzIGHDsWFkaWRhIHBvciB1biBhZ2VudGUsIGZpamEgZWwgZXN0YWRvIGRlbCB0aWNrZXQgZW4gZW4gbGEgcGFudGFsbGEgZGUgdGlja2V0IE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciAvIFNsYXZlJ30gPSAnTWFlc3RybyAvIEVzY2xhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICdUaWNrZXRzIE1hZXN0cm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAnTWFlc3Ryby1Fc2NsYXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICdNw7NkdWxvIEVzY2xhdm8gTWFlc3RybyBwYXJhIG1heW9yIGNhcmFjdGVyw61zdGljYXMgZGUgZW50cmFkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIGRlIGVsIGRhc2hib2FyZCBiYWNrZW5kIGRlIGxhIHZpc3RhIGRlIGxvcyB0aWNrZXRzIG1hZXN0cm9zIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuICJMaW1pdGUiIGVzIGVsIG51bWVybyBkZSBlbnRyYWRhcyBhIG1vc3RyYXIgcG9yIGRlZmVjdG8uICJHcnVwbyIgZXMgdXNhZG8gcGFyYSByZXN0cmluZ2lyIGVsIGFjY2VzbyBhIGVsIHBsdWdpbiAoRS5KLiBHcnVwbzogYWRtaW47Z3J1cG8xO2dydXBvMjspLiAiRGVmZWN0byIgZGV0ZXJtaW5hIHNpIGVsIHBsdWdpbiBlcyBhY3RpdmFkbyBwb3IgZGVmZWN0byDDsyBzaSBlbCB1c3VhcmlvIG5lY2VzaXRhIGFjdGl2YXJsbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIGVzIGhvcmEgY2FjaGUgZW4gbWludXRvcyBwYXJhIGVsIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0cm9zIGRlbCBiYWNrZW5kIGRlbCBwYW5lbCBwcmluY2lwYWwgZGUgbGEgdmlzdGEgZGVsIHRpY2tldCBlc2NsYXZvIGRlbCBpbnRlcmZhY2UgZGVsIGFnZW50ZS4gIkxpbWl0ZSIgZXMgZWwgbsO6bWVybyBkZSBlbnRyYWRhIG1vc3RyYWRhcyBwb3IgZGVmZWN0by4gIkdydXBvImVzIHVzYWRvIHBhcmEgcmVzdHJpbmdpciBlbCBhY2Nlc28gYWwgcGx1Z2luIChFam0uIEdydXBvOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZlY3RvIiBkZXRlcm1pbmEgc2kgZWwgcGx1Z2luIGVzIGhhYmlsaXRhZG8gcG9yIGRlZmVjdG8gbyBzaSBlbCB1c3VhcmlvIG5lY2VzaXRhIGhhYmlsaXRhcmxvIG1hbnVhbG1lbnRlLiAiQ2FjaGVUVExMb2NhbCIgZXMgZWwgdGllbXBvIGRlIGNhY2hlIGVuIG1pbnV0b3MgcGFyYSBlbCBwbHVnaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGRlIGV2ZW50byBkZSB0aWNrZXRzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXNvcyByZXF1ZXJpZG9zIHBhcmEgdXNhciBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZGUgdW4gdGlja2V0LCBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnRXN0YWJsZWNlIHNpIGVsIGFnZW50ZSBkZWJlIHNlbGVjY2lvbmFyIGVsIGNhbXBvIE1hZXN0cm8gLyBFc2NsYXZvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGaWphIGVsIHRleHRvIGRlbCBjdWVycG8gcG9yIGRlZmVjdG8gZGUgbGFzIG5vdGFzIGHDsWFkaWRhcyBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRmlqYSBlbCBhc3VudG8gcG9yIGRlZmVjdG8gZGUgbGFzIG5vdGFzIGHDsWFkaWRhcyBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRmlqYSBlbCBhZ2VudGUgcmVzcG9uc2FibGUgZGUgdW4gdGlja2V0IGVuIGxhIHBhbnRhbGxhIE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnRmlqYSBlbCBzZXJ2aWNpbyBkZSB1biB0aWNrZXQgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZSAoVGlja2V0OjpTZXJ2aWNlIHJlcXVpcmUgc2VyIGFjdGl2YWRvKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRmlqYSBlbCBkdWXDsW8gZGUgdW4gdGlja2V0IGVuIGxhIHBhbnRhbGxhIE1hZXN0cm8tRXNjbGF2byBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0ZpamEgZWwgdGlwbyBkZSB0aWNrZXQgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZSAoVGlja2V0OjpUeXBlIHJlcXVpcmUgc2VyIGFjdGl2YWRvKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuIGVubGFjZSBlbiBlbCBtZW7DuiBwYXJhIGNhbWJpYXIgZWwgZXN0YXR1cyBNYWVzdHJvLUVzY2xhdm8gZGUgdW4gdGlja2V0LCBlbiBsYSB2aXN0YSBkZXRhbGxhZGEgZGUgZGljaG8gdGlja2V0IGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuYSBsaXN0YSBkZSB0b2RvcyBsb3MgYWdlbnRlcyBpbnZvbHVjcmFkb3MgY29uIGVzdGUgdGlja2V0LCBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIHVuYSBsaXN0YSBkZSB0b2RvcyBsb3MgcG9zaWJsZXMgYWdlbnRlcyAodG9kb3MgbG9zIGFnZW50ZXMgY29uIHBlcm1pc29zICJub3RhIiBlbiBsYSBmaWxhL3RpY2tldCkgcGFyYSBkZXRlcm1pbmFyIHF1acOpbiBkZWJlcsOhIHNlciBpbmZvcm1hZG8gYWNlcmNhIGRlIGVzdGEgbm90YSwgZW4gbGEgcGFudGFsbGEgTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHZpc3RhIGRldGFsbGFkYSBkZSBkaWNobyB0aWNrZXQgZGUgbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTXVlc3RyYSBsYXMgb3BjaW9uZXMgZGUgcHJpb3JpZGFkIGRlIHRpY2tldCBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNdWVzdHJhIGVsIGNhbXBvIHTDrXR1bG8gZGVsIHRpY2tldCBlbiBsYSBwYW50YWxsYSBNYWVzdHJvLUVzY2xhdm8gZW4gbGEgdmlzdGEgZGV0YWxsYWRhIGRlIGRpY2hvIHRpY2tldCBkZSBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnVGlja2V0cyBlc2NsYXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGFjdGl2YXRlcyBNYXN0ZXIvU2xhdmUgZmllbGQgaW4gbmV3IGVtYWlsIGFuZCBwaG9uZSB0aWNrZXQgc2NyZWVucy4nfSA9CiAgICAgICAgJ0VzdGUgbcOzZHVsbyBhY3RpdmEgZWwgY2FtcG8gTWFlc3Ryby1Fc2NsYXZvIGVuIGxhIHBhbnRhbGxhIGRlIHVuIG51ZXZvIHRpY2tldCBkZSBlbWFpbCBvIGRlIHRlbMOpZm9uby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnVGlja2V0IE1hZXN0cm8tRXNjbGF2by4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnR8OpcmVyIGxlIHN0YXR1dCBtYcOudHJlLWVzY2xhdmUgcG91ciAlcyAlcyAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICdOb3V2ZWF1IHRpY2tldCBtYcOudHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXQnfSA9ICdOZSBwbHVzIGTDqWZpbmlyIGNlIHRpY2tldCBlbiB0YW50IHF1ZSB0aWNrZXQgbWHDrnRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXQnfSA9ICdOZSBwbHVzIGTDqWZpbmlyIGNlIHRpY2tldCBlbiB0YW50IHF1ZSB0aWNrZXQgZXNjbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnRXNjbGF2ZSBkdSAlcyAlcyAlcyA6ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICdOZSBwbHVzIGTDqWZpbmlyIGNlcyB0aWNrZXRzIGVuIHRhbnQgcXVlIHRpY2tldHMgbWHDrnRyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJ05lIHBsdXMgZMOpZmluaXIgY2VzIHRpY2tldHMgZW4gdGFudCBxdWUgdGlja2V0cyBlc2NsYXZlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdNYcOudHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIG9mICVzJXMlcyd9ID0gJ0VzY2xhdmUgZHUgJXMgJXMgJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ1RpY2tldCBtYcOudHJlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAnVG91cyBsZXMgdGlja2V0cyBtYcOudHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1RvdXMgbGVzIHRpY2tldHMgZXNjbGF2ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0F1dG9yaXNlIGxcJ2Fqb3V0IGRlIG5vdGVzIGRcJ3VuIHRpY2tldCBtYcOudHJlIC8gZXNjbGF2ZSBkZXB1aXMgbGEgdnVlIGTDqXRhaWxsw6llIGRlIGxcJ2ludGVyZmFjZSBvcMOpcmF0ZXVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAnQ2hhbmdlciBsXCfDqXRhdCBtYcOudHJlIC8gZXNjbGF2ZSBkXCd1biB0aWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ01hw650cmUgLyBFc2NsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXRzJ30gPSAnVGlja2V0cyBtYcOudHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJ01hw650cmUgLyBFc2NsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBtYXN0ZXIgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ2lzdHJhdGlvbiBvZiB0aGUgdGlja2V0IGV2ZW50IG1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0dXMgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIFRpY2tldHMnfSA9ICdUaWNrZXRzIGVzY2xhdmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGFjdGl2YXRlcyBNYXN0ZXIvU2xhdmUgZmllbGQgaW4gbmV3IGVtYWlsIGFuZCBwaG9uZSB0aWNrZXQgc2NyZWVucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXN0ZXJTbGF2ZS4nfSA9ICdUaWNrZXQgbWHDrnRyZSAvIGVzY2xhdmUuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpnbF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdQcmluY2lwYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXQnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAnQ2FtYmlhciBvIGVzdGFkbyBBbW9Fc2NyYXZvIGRvIHTDrWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIHNsYXZlIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aXRsZSBmaWVsZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGFjdGl2YXRlcyBNYXN0ZXIvU2xhdmUgZmllbGQgaW4gbmV3IGVtYWlsIGFuZCBwaG9uZSB0aWNrZXQgc2NyZWVucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXN0ZXJTbGF2ZS4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpodV9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJXMlcyVzIG1lc3Rlci9hbMOhcmVuZGVsdCDDoWxsYXBvdMOhbmFrIGtlemVsw6lzZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICfDmmogbWVzdGVyamVneSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnTWVzdGVyamVneSB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0J30gPSAnQWzDoXJlbmRlbHQgamVneSB0w7ZybMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJyVzJXMlcyBhbMOhcmVuZGVsdGplOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1RpY2tldEJ1bGsvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXRzJ30gPSAnTWVzdGVyamVneWVrIHTDtnJsw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAnQWzDoXJlbmRlbHQgamVneWVrIHTDtnJsw6lzZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdNZXN0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnJXMlcyVzIGFsw6FyZW5kZWx0amUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ01lc3RlcmplZ3knOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICfDlnNzemVzIG1lc3RlcmplZ3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICfDlnNzemVzIGFsw6FyZW5kZWx0IGplZ3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0xlaGV0xZF2w6kgdGVzemkgamVneXpldGVrIGhvenrDoWFkw6Fzw6F0IGVneSBuYWd5w610b3R0IGplZ3luZWsgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRasOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdWw6FsdG96dGFzc2EgbWVnIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQgw6FsbGFwb3TDoXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnTWVnaGF0w6Fyb3p6YSBhIGRpbmFtaWt1cyBtZXrFkSBuZXbDqXQgYSBtZXN0ZXJqZWd5IGZ1bmtjacOzbsOhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphLCBob2d5IHN6w7xrc8OpZ2VzLWUgamVneXrDoXJvbMOhcyBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuIChoYSBhIGplZ3kgbcOpZyBuaW5jcyB6w6Fyb2x2YSwgYWtrb3IgYSBqZWd5IHrDoXJvbHZhIGxlc3osIMOpcyBheiBha3R1w6FsaXMgw7xneWludMOpesWRIGF1dG9tYXRpa3VzYW4gYW5uYWsgdHVsYWpkb25vc2Frw6ludCBsZXN6IGJlw6FsbMOtdHZhKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgTWFzdGVyU2xhdmUgbm90ZSBpcyB2aXNpYmxlIGZvciB0aGUgY3VzdG9tZXIgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEsIGhvZ3kgYSBtZXN0ZXItYWzDoXJlbmRlbHQgamVneXpldCBhbGFww6lydGVsbWV6ZXR0ZW4gbMOhdGhhdMOzIGxlZ3llbiBheiDDvGd5ZsOpbG5lay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnaGF0w6Fyb3p6YSBlZ3kgamVneSBhbGFww6lydGVsbWV6ZXR0IGvDtnZldGtlesWRIMOhbGxhcG90w6F0IGVneSBqZWd5emV0IGhvenrDoWFkw6FzYSB1dMOhbiBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lZ2hhdMOhcm96emEgYXogYWxhcMOpcnRlbG1lemV0dCBqZWd5cHJpb3JpdMOhc3QgZWd5IG5hZ3nDrXRvdHQgamVneW5layBhIGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IGvDqXBlcm55xZFqw6luIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0F6dCBheiBlbMWRem3DqW55IG1lZ2plZ3l6w6lzdCBoYXTDoXJvenphIG1lZyBhIGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IGvDqXBlcm55xZEgbcWxdmVsZXTDqW7DqWwsIGFtZWx5ZXQgYSBqZWd5IGVsxZF6bcOpbnllaW7DqWwgc3pva3RhayBoYXN6bsOhbG5pIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0F6dCBheiBlbMWRem3DqW55IHTDrXB1c3QgaGF0w6Fyb3p6YSBtZWcgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRIG3FsXZlbGV0w6luw6lsLCBhbWVseWV0IGEgamVneSBlbMWRem3DqW55ZWluw6lsIHN6b2t0YWsgaGFzem7DoWxuaSBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdoYXTDoXJvenphIGVneSBqZWd5IGvDtnZldGtlesWRIMOhbGxhcG90w6F0IGVneSBqZWd5emV0IGhvenrDoWFkw6FzYSB1dMOhbiBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJ0VuZ2Vkw6lseWV6aSBhIGZ1bmtjacOzIHNwZWNpw6FsaXMgbWVzdGVyLWFsw6FyZW5kZWx0IHLDqXN6w6l0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnRW5nZWTDqWx5ZXppIGF6dCBhIGZ1bmtjacOzdCwgaG9neSBheiBhbMOhcmVuZGVsdCBqZWd5ZWsgYSBtZXN0ZXJqZWd5ZXQga8O2dmVzc8OpayBlZ3kgw7pqIG1lc3RlcmhleiBhIHNwZWNpw6FsaXMgbWVzdGVyLWFsw6FyZW5kZWx0IG3Ds2RiYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0VuZ2Vkw6lseWV6aSBhIGZ1bmtjacOzdCBlZ3kgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQgw6FsbGFwb3TDoW5hayBtZWd2w6FsdG96dGF0w6Fzw6Fob3ogYSBzcGVjacOhbGlzIG1lc3Rlci1hbMOhcmVuZGVsdCBtw7NkYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICdFbmdlZMOpbHllemkgYSBmdW5rY2nDs3QgYSBiZWplZ3l6w6lzZWsgdG92w6FiYsOtdMOhc8OhaG96IGVneSBtZXN0ZXJqZWd5IOKAnnRvdsOhYmLDrXTDoXPigJ0gdMOtcHVzw6Fiw7NsIGF6IGFsw6FyZW5kZWx0IGplZ3llayDDvGd5ZmVsZWloZXouIEFsYXDDqXJ0ZWxtZXpldHRlbiAobGV0aWx0dmEpIG5lbSBmb2cgYmVqZWd5esOpc2VrZXQgdG92w6FiYsOtdGFuaSBhIOKAnnRvdsOhYmLDrXTDoXPigJ0gdMOtcHVzYsOzbCBheiBhbMOhcmVuZGVsdCBqZWd5ZWtoZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciBjaGFuZ2Ugb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnRW5nZWTDqWx5ZXppIGEgZnVua2Npw7N0IGEgc3rDvGzFkS1neWVybWVrIGthcGNzb2xhdCBtZWd0YXJ0w6Fzw6Fob3ogYSBtZXN0ZXItYWzDoXJlbmRlbHQgw6FsbGFwb3QgbWVndsOhbHRvenRhdMOhc2EgdXTDoW4gYSBzcGVjacOhbGlzIG1lc3Rlci1hbMOhcmVuZGVsdCBtw7NkYmFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnRW5nZWTDqWx5ZXppIGEgZnVua2Npw7N0IGEgc3rDvGzFkS1neWVybWVrIGthcGNzb2xhdCBtZWd0YXJ0w6Fzw6Fob3ogYSBtZXN0ZXItYWzDoXJlbmRlbHQgw6FsbGFwb3QgdMO2cmzDqXNlIHV0w6FuIGEgc3BlY2nDoWxpcyBtZXN0ZXItYWzDoXJlbmRlbHQgbcOzZGJhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdFbmdlZMOpbHllemkgYSBmdW5rY2nDs3QgZWd5IGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IMOhbGxhcG90w6FuYWsgdMO2cmzDqXPDqWhleiBhIHNwZWNpw6FsaXMgbWVzdGVyLWFsw6FyZW5kZWx0IG3Ds2RiYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0hhIGVneSDDvGd5aW50w6l6xZEgaG96esOhYWRvdHQgZWd5IG1lZ2plZ3l6w6lzdCwgYWtrb3IgYmXDoWxsw610amEgYSBqZWd5IMOhbGxhcG90w6F0IGVneSBuYWd5w610b3R0IGplZ3luZWsgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRasOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciAvIFNsYXZlJ30gPSAnTWVzdGVyIC8gYWzDoXJlbmRlbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICdNZXN0ZXJqZWd5ZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUnfSA9ICdNZXN0ZXItYWzDoXJlbmRlbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUgbW9kdWxlIGZvciBUaWNrZXQgQnVsayBmZWF0dXJlLid9ID0gJ01lc3Rlci1hbMOhcmVuZGVsdCBtb2R1bCBhIGplZ3kgdMO2bWVnZXMgZnVua2Npw7Nqw6Fob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtw6l0ZXJlayBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0IG1lc3RlcmplZ3llaSDDoXR0ZWtpbnTFkWrDqW5layB2ZXrDqXJsxZFwdWx0IGjDoXR0w6lycHJvZ3JhbWrDoWhvei4gQSDigJ5MaW1pdOKAnSBheiBhbGFww6lydGVsbWV6ZXR0ZW4gbWVnamVsZW7DrXRldHQgYmVqZWd5esOpc2VrIHN6w6FtYS4gQSDigJ5Hcm91cOKAnSBoYXN6bsOhbGhhdMOzIGEgaG96esOhZsOpcsOpcyBrb3Jsw6F0b3rDoXPDoWhveiBhIGLFkXbDrXRtw6lueXJlIChww6lsZMOhdWwgR3JvdXA6IGFkbWluO2Nzb3BvcnQxO2Nzb3BvcnQyOykuIEEg4oCeRGVmYXVsdOKAnSBqZWx6aSwgaG9neSBhIGLFkXbDrXRtw6lueSBhbGFww6lydGVsbWV6ZXR0ZW4gZW5nZWTDqWx5ZXp2ZSB2YW4sIHZhZ3kgaG9neSBhIGZlbGhhc3puw6Fsw7NuYWsga8OpenplbCBrZWxsIGVuZ2Vkw6lseWV6bmllIGF6dC4gQSDigJ5DYWNoZVRUTExvY2Fs4oCdIGEgYsWRdsOtdG3DqW55IGd5b3Jzw610w7N0w6FyIGlkZWplIHBlcmNiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnUGFyYW3DqXRlcmVrIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgYWzDoXJlbmRlbHQgamVneWVpIMOhdHRla2ludMWRasOpbmVrIHZlesOpcmzFkXB1bHQgaMOhdHTDqXJwcm9ncmFtasOhaG96LiBBIOKAnkxpbWl04oCdIGF6IGFsYXDDqXJ0ZWxtZXpldHRlbiBtZWdqZWxlbsOtdGV0dCBiZWplZ3l6w6lzZWsgc3rDoW1hLiBBIOKAnkdyb3Vw4oCdIGhhc3puw6FsaGF0w7MgYSBob3p6w6Fmw6lyw6lzIGtvcmzDoXRvesOhc8OhaG96IGEgYsWRdsOtdG3DqW55cmUgKHDDqWxkw6F1bCBHcm91cDogYWRtaW47Y3NvcG9ydDE7Y3NvcG9ydDI7KS4gQSDigJ5EZWZhdWx04oCdIGplbHppLCBob2d5IGEgYsWRdsOtdG3DqW55IGFsYXDDqXJ0ZWxtZXpldHRlbiBlbmdlZMOpbHllenZlIHZhbiwgdmFneSBob2d5IGEgZmVsaGFzem7DoWzDs25hayBrw6l6emVsIGtlbGwgZW5nZWTDqWx5ZXpuaWUgYXp0LiBBIOKAnkNhY2hlVFRMTG9jYWzigJ0gYSBixZF2w610bcOpbnkgZ3lvcnPDrXTDs3TDoXIgaWRlamUgcGVyY2Jlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ0EgamVneSBlc2Vtw6lueSBtb2R1bCByZWdpc3p0csOhY2nDs2phLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBIHN6w7xrc8OpZ2VzIGpvZ29zdWx0c8OhZ29rIGVneSBuYWd5w610b3R0IGplZ3luZWsgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRasOpbmVrIGhhc3puw6FsYXTDoWhveiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnQmXDoWxsw610amEsIGhvZ3kgYXogw7xneWludMOpesWRbmVrIGtpIGtlbGwgdsOhbGFzenRhbmlhIGEgbWVzdGVyL2Fsw6FyZW5kZWx0IG1lesWRdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmXDoWxsw610amEgYXogYWxhcMOpcnRlbG1lemV0dCB0w7ZyenNzesO2dmVnZXQgZWd5IG5hZ3nDrXRvdHQgamVneW5layBhIGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IGvDqXBlcm55xZFqw6luIGhvenrDoWFkb3R0IGplZ3l6ZXRla27DqWwgYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQmXDoWxsw610amEgYXogYWxhcMOpcnRlbG1lemV0dCB0w6FyZ3lhdCBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gaG96esOhYWRvdHQgamVneXpldGVrbsOpbCBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGplZ3kgZmVsZWzFkXMgw7xneWludMOpesWRasOpdCBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0Jlw6FsbMOtdGphIGEgc3pvbGfDoWx0YXTDoXN0IGVneSBuYWd5w610b3R0IGplZ3luZWsgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRasOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gKGEgVGlja2V0OjpTZXJ2aWNlIGxlaGV0xZFzw6lnbmVrIGFrdGl2w6FsdmEga2VsbCBsZW5uaWUpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGplZ3kgdHVsYWpkb25vc8OhdCBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdCZcOhbGzDrXRqYSBhIGplZ3kgdMOtcHVzw6F0IGVneSBuYWd5w610b3R0IGplZ3luZWsgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRasOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4gKGEgVGlja2V0OjpUeXBlIGxlaGV0xZFzw6lnbmVrIGFrdGl2w6FsdmEga2VsbCBsZW5uaWUpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0dXMgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0VneSBoaXZhdGtvesOhc3QgamVsZW7DrXQgbWVnIGEgbWVuw7xiZW4gZWd5IGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IMOhbGxhcG90w6FuYWsgbWVndsOhbHRvenRhdMOhc8OhaG96IGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXQgamVneW5hZ3nDrXTDoXMgbsOpemV0w6liZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdqZWxlbsOtdGkgYSBqZWd5ZW4gcsOpc3p0IHZldsWRIMO2c3N6ZXMgw7xneWludMOpesWRIGxpc3TDoWrDoXQgZWd5IG5hZ3nDrXRvdHQgamVneW5layBhIGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IGvDqXBlcm55xZFqw6luIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVnamVsZW7DrXRpIGF6IMO2c3N6ZXMgbGVoZXRzw6lnZXMgw7xneWludMOpesWRIChhIHbDoXLDs2xpc3TDoW4gdmFneSBqZWd5ZW4gamVneXpldCBqb2dvc3VsdHPDoWdnYWwgcmVuZGVsa2V6xZEgw7Zzc3plcyDDvGd5aW50w6l6xZEpIGxpc3TDoWrDoXQgZWd5IG5hZ3nDrXRvdHQgamVneW5layBhIGplZ3kgbWVzdGVyLWFsw6FyZW5kZWx0IGvDqXBlcm55xZFqw6luIGF6IMO8Z3lpbnTDqXrFkWkgZmVsw7xsZXRlbiBhbm5hayBtZWdoYXTDoXJvesOhc8OhaG96LCBob2d5IGtpdCBrZWxsIHTDoWrDqWtvenRhdG5pIGVycsWRbCBhIGplZ3l6ZXRyxZFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdqZWxlbsOtdGkgYSBqZWd5IHByaW9yaXTDoXNpIGxlaGV0xZFzw6lnZWtldCBlZ3kgbmFnecOtdG90dCBqZWd5bmVrIGEgamVneSBtZXN0ZXItYWzDoXJlbmRlbHQga8OpcGVybnnFkWrDqW4gYXogw7xneWludMOpesWRaSBmZWzDvGxldGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZWdqZWxlbsOtdGkgYSBjw61tbWV6xZF0IGVneSBuYWd5w610b3R0IGplZ3luZWsgYSBqZWd5IG1lc3Rlci1hbMOhcmVuZGVsdCBrw6lwZXJuecWRasOpbiBheiDDvGd5aW50w6l6xZFpIGZlbMO8bGV0ZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIFRpY2tldHMnfSA9ICdBbMOhcmVuZGVsdCBqZWd5ZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgYXJ0aWNsZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdoZXJlIHRoZSByZWFsIG5hbWUgZnJvbSBNYXN0ZXIgdGlja2V0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgb25lIGluIHRoZSBTbGF2ZSB0aWNrZXQuJ30gPQogICAgICAgICdNZWdhZGphIGEga8O8bMO2bmLDtnrFkSBiZWplZ3l6w6lzIGtvbW11bmlrw6FjacOzcyBjc2F0b3Juw6FrYXQsIGFob2wgYSBtZXN0ZXJqZWd5YmVuIGzDqXbFkSB2YWzDs2RpIG7DqXYga2kgbGVzeiBjc2Vyw6lsdmUgYXogYWzDoXJlbmRlbHQgamVneWJlbiBsw6l2xZF2ZWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGFjdGl2YXRlcyBNYXN0ZXIvU2xhdmUgZmllbGQgaW4gbmV3IGVtYWlsIGFuZCBwaG9uZSB0aWNrZXQgc2NyZWVucy4nfSA9CiAgICAgICAgJ0V6IGEgbW9kdWwgYmVrYXBjc29samEgYSBtZXN0ZXIvYWzDoXJlbmRlbHQgbWV6xZF0IGF6IMO6aiBlLW1haWwgw6lzIHRlbGVmb25vcyBqZWd5IGvDqXBlcm55xZFrw7ZuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAnRXogYSBiZcOhbGzDrXTDoXMgZWxhdnVsdCwgw6lzIGVsIGxlc3ogdMOhdm9sw610dmEgYXogT1RSU01hc3RlclNsYXZlIGvDqXPFkWJiaSB2ZXJ6acOzaWLDs2wuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXN0ZXJTbGF2ZS4nfSA9ICdKZWd5IG1lc3Rlci1hbMOhcmVuZGVsdC4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjppZF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ1Rpa2V0IG1hc3RlciBiYXJ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXQnfSA9ICdUaWRhayBwZXJsdSBzZXQgdGlrZXQgbWFzdGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ0xlcGFza2FuIHNldCB0aWtldCBzbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICdNZWxlcGFzIHRpa2V0IG1hc3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAnTWVsZXBhc2thbiB0aWtldCBzbGF2ZSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdJbmR1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBtYXN0ZXIgdGlja2V0cyd9ID0gJ1NlbXVhIHRpa2V0IG1hc3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1NlbXVhIHRpa2V0IHNsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW11bmdraW5rYW4gbWVuYW1iYWhrYW4gY2F0YXRhbiBkYWxhbSBsYXlhciB0aWtldCBtYXN0ZXIgc2xhdmUgZGFyaSB0aWtldCB5YW5nIGRpcGVyYmVzYXIgZGkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdNZW5ndWJhaCBrZWFkYWFuIE1hc3RlciBzbGF2ZSB0aWtldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBkeW5hbWljIGZpZWxkIG5hbWUgZm9yIG1hc3RlciB0aWNrZXQgZmVhdHVyZS4nfSA9ICdNZW5kZWZpbmlzaWthbiBuYW1hIGZpZWxkIHlhbmcgZGluYW1pcyB1bnR1ayBmaXR1ciB1dGFtYSB0aWtldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBqaWthIGt1bmNpIHRpa2V0IGRpcGVybHVrYW4gZGkgbGF5YXIgTWFzdGVyU2xhdmUgdGlrZXQgZGFyaSB0aWtldCB5YW5nIGRpcGVyYmVzYXIgZGkgYW50YXJtdWthIGFnZW4gKGppa2EgdGlrZXQgdGlkYWsgdGVya3VuY2kgbGFnaSwgdGlrZXQgYWthbiB0ZXJrdW5jaSBkYW4gYWdlbiBzYWF0IGluaSBha2FuIGRpYXR1ciBzZWNhcmEgb3RvbWF0aXMgc2ViYWdhaSBwZW1pbGlrbnlhKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgTWFzdGVyU2xhdmUgbm90ZSBpcyB2aXNpYmxlIGZvciB0aGUgY3VzdG9tZXIgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW5kZWZpbmlzaWthbiBkZWZhdWx0IHN0YXRlIGJlcmlrdXRueWEgdGlrZXQgc2V0ZWxhaCBtZW5hbWJhaGthbiBjYXRhdGFuLCBkYWxhbSB0aWtldCBHdXJ1IGxheWFyIFNsYXZlIGRhcmkgdGlrZXQgeWFuZyBkaXBlcmJlc2FyIGRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHByaW9yaXRhcyB0aWtldCBkZWZhdWx0IGRpIGxheWFyIHRpa2V0IE1hc3RlciBTbGF2ZSBkYXJpIHRpa2V0IHlhbmcgZGlwZXJiZXNhciBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSBjb21tZW50IGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIGtvbWVudGFyIHNlamFyYWggdW50dWsgdGluZGFrYW4gdGlrZXQgbWFzdGVyc2xhdmUgcGFkYSBsYXlhciwgeWFuZyBha2FuIGRpZ3VuYWthbiB1bnR1ayBzZWphcmFoIHRpa2V0IGRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVuZGVmaW5pc2lrYW4gamVuaXMgc2VqYXJhaCB1bnR1ayB0aW5kYWthbiB0aWtldCBtYXN0ZXIgc2xhdmUgZGkgbGF5YXIsIHlhbmcgYWthbiBkaWd1bmFrYW4gdW50dWsgc2VqYXJhaCB0aWtldCBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbmRlZmluaXNpa2FuIHN0YXRlIGJlcmlrdXRueWEgdGlrZXQgc2V0ZWxhaCBtZW5hbWJhaGthbiBjYXRhdGFuLCBkYWxhbSBsYXlhciB0aWtldCBNYXN0ZXIgU2xhdmUgZGFyaSB0aWtldCB5YW5nIGRpcGVyYmVzYXIgZGkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnTWVtdW5na2lua2FuIE1hc3RlciBzbGF2ZSBiYWdpYW4gZGFyaSBmaXR1ciB0ZXJzZWJ1dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0aGF0IHNsYXZlIHRpY2tldHMgZm9sbG93IHRoZSBtYXN0ZXIgdGlja2V0IHRvIGEgbmV3IG1hc3RlciBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ01lbmdha3RpZmthbiBmaXR1ciB0aWtldCBzbGF2ZSB1bnR1ayBtZW5naWt1dGkgdGlrZXQgbWFzdGVyIGJhcnUgZGFsYW0gbW9kdXMgTWFzdGVyIFNsYXZlIGNhbmdnaWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ01lbXVuZ2tpbmthbiBmaXR1ciB1bnR1ayBtZW5ndWJhaCBrZWFkYWFuIE1hc3RlciBzbGF2ZSBkYXJpIHRpa2V0IGRhbGFtIG1vZHVzIE1hc3RlciBTbGF2ZSBjYW5nZ2loLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICdNZW11bmdraW5rYW4gZml0dXIgdW50dWsgbWVuZXJ1c2thbiBhcnRpa2VsIGRhcmkgamVuaXMgXCdtYWp1XCcgZGFyaSB0aWtldCBtYXN0ZXIgdW50dWsgcGVsYW5nZ2FuIGRhcmkgdGlrZXQgc2xhdmUuIFNlY2FyYSBkZWZhdWx0IChjYWNhdCkgaXR1IHRpZGFrIGFrYW4gbWVuZXJ1c2thbiBhcnRpa2VsIGRhcmkgamVuaXMgXCdtYWp1XCcgdW50dWsgdGlrZXQgc2xhdmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciBjaGFuZ2Ugb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnTWVtdW5na2lua2FuIGZpdHVyIHVudHVrIG1lbmphZ2EgbGluayBvcmFuZ3R1YS1hbmFrIHNldGVsYWggcGVydWJhaGFuIGRhcmkgc3RhdGUgTWFzdGVyIHNsYXZlIGRhbGFtIG1vZHVzIE1hc3RlciBTbGF2ZSBjYW5nZ2loLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnTWVtdW5na2lua2FuIGZpdHVyIHVudHVrIG1lbmphZ2EgbGluayBvcmFuZ3R1YS1hbmFrIHNldGVsYWggZGlzZXQgZGFyaSBuZWdhcmEgTWFzdGVyIHNsYXZlIGRhbGFtIG1vZHVzIE1hc3RlciBTbGF2ZSBjYW5nZ2loLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIHVuc2V0IHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ01lbXVuZ2tpbmthbiBmaXR1ciB5YW5nIHRpZGFrIGRpIHNldCBNYXN0ZXIgc2xhdmUgZGFyaSB0aWtldCBkYWxhbSBtb2R1cyBNYXN0ZXIgU2xhdmUgY2FuZ2dpaC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSmlrYSBjYXRhdGFuIGRpdGFtYmFoa2FuIG9sZWggYWdlbiwgbWVuZXRhcGthbiBrZWFkYWFuIHRpa2V0IGRpIHRpa2V0IGxheWFyIE1hc3RlclNsYXZlIGRhcmkgdGlrZXQgeWFuZyBkaXBlcmJlc2FyIGRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ01hc3Rlci9TbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJ1Rpa2V0IE1hc3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJ01hc3RlclNsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICdNb2R1bCBNYXN0ZXJTbGF2ZSB1bnR1ayBmaXR1ciB0aWtldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG1hc3RlciB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgYmFja2VuZCBkYXNoYm9hcmQgdGlrZXQgbWVuZ3Vhc2FpIGdhbWJhcmFuIGRhcmkgYW50YXJtdWthIGFnZW4uICJCYXRhcyIgYWRhbGFoIGp1bWxhaCBlbnRyaSB5YW5nIGRpdGFtcGlsa2FuIHNlY2FyYSBkZWZhdWx0LiAiR3J1cCIgZGlndW5ha2FuIHVudHVrIG1lbWJhdGFzaSBha3NlcyBrZSBwbHVnaW4gKGUgZyBHcnVwOiBBZG1pbjtncm91cDEsZ3JvdXAyOykuICJEZWZhdWx0IiBtZW5lbnR1a2FuIGFwYWthaCBwbHVnaW4gZGlha3RpZmthbiBzZWNhcmEgZGVmYXVsdCBhdGF1IGppa2EgcGVuZ2d1bmEgcGVybHUgbWVuZ2FrdGlma2FubnlhIHNlY2FyYSBtYW51YWwuICJDYWNoZVRUTExvY2FsIiBhZGFsYWggd2FrdHUgY2FjaGUgZGkgbWVuaXQgdW50dWsgcGx1Z2luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIHNsYXZlIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBiYWNrZW5kIGRhc2hib2FyZCB0aWtldCBidWRhayBnYW1iYXJhbiBkYXJpIGFudGFybXVrYSBhZ2VuLiAiQmF0YXMiIGFkYWxhaCBqdW1sYWggZW50cmkgeWFuZyBkaXRhbXBpbGthbiBzZWNhcmEgZGVmYXVsdC4gIkdydXAiIGRpZ3VuYWthbiB1bnR1ayBtZW1iYXRhc2kgYWtzZXMga2UgcGx1Z2luIChlIGcgR3J1cDogQWRtaW47Z3JvdXAxLGdyb3VwMjspLiAiRGVmYXVsdCIgbWVuZW50dWthbiBhcGFrYWggcGx1Z2luIGRpYWt0aWZrYW4gc2VjYXJhIGRlZmF1bHQgYXRhdSBqaWthIHBlbmdndW5hIHBlcmx1IG1lbmdha3RpZmthbm55YSBzZWNhcmEgbWFudWFsLiAiQ2FjaGVUVExMb2NhbCIgYWRhbGFoIHdha3R1IGNhY2hlIGRpIG1lbml0IHVudHVrIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ1BlbmRhZnRhcmFuIG1vZHVsIGFjYXJhIHRpa2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdpemluIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW5nZ3VuYWthbiBsYXlhIHRpa2V0IE1hc3RlclNsYXZlIGRhcmkgdGlrZXQgeWFuZyBkaXBlcmJlc2FyIGRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW5nYXR1ciB0ZWtzIHR1YnVoIGRlZmF1bHQgdW50dWsgY2F0YXRhbiBkaXRhbWJhaGthbiBkYWxhbSBsYXlhciB0aWtldCBNYXN0ZXIgU2xhdmUgZGFyaSB0aWtldCB5YW5nIGRpcGVyYmVzYXIgZGkgYW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW5nYXR1ciBUZWtzIFR1YnVoIGJhd2FhbiB1bnR1ayByZXZpZXcgQ2F0YXRhbiBkaXRhbWJhaGthbiBoZWFydHMgVGlrZXQgTGF5YXIgU2xhdmUgRGFyaSBUaWtldCBZYW5nIGRpcGVyYmVzYXIgZGkgQW50YXJtdWthIGFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZXQgYWdlbiB5YW5nIGJlcnRhbmdndW5nIGphd2FiIGRhcmkgdGlrZXQgZGkgbGF5YXIgdGlrZXQgTWFzdGVyIFNsYXZlIGRhcmkgdGlrZXQgeWFuZyBkaXBlcmJlc2FyIGRpIGFudGFybXVrYSBhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ1NldCBsYXlhbmFuIGRhbGFtIHRpa2V0IEd1cnUgbGF5YXIgU2xhdmUgZGFyaSB0aWtldCB5YW5nIGRpcGVyYmVzYXIgZGkgYW50YXJtdWthIGFnZW4gKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVuZXRhcGthbiBwZW1pbGlrIHRpa2V0IGRpIGxheWFyIHRpa2V0IE1hc3RlciBTbGF2ZSBkYXJpIHRpa2V0IHlhbmcgZGlwZXJiZXNhciBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnTWVuZXRhcGthbiBqZW5pcyB0aWtldCBkaSBsYXlhciB0aWtldCBNYXN0ZXIgU2xhdmUgZGFyaSB0aWtldCB5YW5nIGRpcGVyYmVzYXIgZGkgYW50YXJtdWthIGFnZW4gIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBsaW5rIGRhbGFtIG1lbnUgdW50dWsgbWVuZ3ViYWggc3RhdHVzIE1hc3RlciBzbGF2ZSBkYXJpIHRpa2V0IGRhbGFtIHRhbXBpbGFuIHpvb20gdGlrZXQgZGFyaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnVuanVra2FuIGRhZnRhciBzZW11YSBhZ2VuIHlhbmcgdGVybGliYXQgcGFkYSB0aWtldCBpbmksIGRhbGFtIGxheWFyIHRpa2V0IE1hc3RlciBTbGF2ZSBkYXJpIHRpa2V0IHlhbmcgZGlwZXJiZXNhciBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gZGFmdGFyIHNlbXVhIGFnZW4geWFuZyBtdW5na2luIChzZW11YSBhZ2VuIGRlbmdhbiBpemluIGNhdGF0YW4gZGkgYW50cmlhbiAvIHRpa2V0KSB1bnR1ayBtZW5lbnR1a2FuIHNpYXBhIHlhbmcgaGFydXMgZGliZXJpdGFodSB0ZW50YW5nIGNhdGF0YW4gaW5pLCBkaSBsYXlhciBNYXN0ZXJTbGF2ZSB0aWtldCBkYXJpIHRpa2V0IHlhbmcgZGlwZXJiZXNhciBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudW5qdWtrYW4gcGlsaWhhbiBwcmlvcml0YXMgdGlrZXQgZGkgdGlrZXQgR3VydSBsYXlhciBTbGF2ZSBkYXJpIHRpa2V0IHlhbmcgZGlwZXJiZXNhciBkaSBhbnRhcm11a2EgYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIFRpY2tldHMnfSA9ICdUaWtldCBzbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICdNb2R1bCBpbmkgbWVuZ2FrdGlma2FuIGJpZGFuZyBNYXN0ZXIgLyBTbGF2ZSBkaSBiYXJ1IGxheWFyIGVtYWlsIGRhbiB0aWtldCB0ZWxlcG9uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXN0ZXJTbGF2ZS4nfSA9ICdUaWtldCBNYXN0ZXJTbGF2ZS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjppdF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnR2VzdGlzY2kgbG8gc3RhdG8gTWFzdGVyIC8gU2xhdmUgcGVyICVzJXMlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICdOdW92byB0aWNrZXQgcHJpbWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldCd9ID0gJ1JpbXVvdmkgdGlja2V0IHByaW1hcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ1JpbXVvdmkgdGlja2V0IHNlY29uZGFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJ1NjaGlhdm8gZGk6ICVzJXMlczogJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UaWNrZXRCdWxrL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0cyd9ID0gJ1RpY2tldCBtYXN0ZXIgbm9uIGltcG9zdGF0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAnVGlja2V0IHNjaGlhdmkgbm9uIGltcG9zdGF0aSc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdQcmltYXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICdTY2hpYXZvIGRpICVzJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAnVGlja2V0IG1hZXN0cm8nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICdUdXR0aSBpIHRpY2tldCBtYWVzdHJpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBzbGF2ZSB0aWNrZXRzJ30gPSAnVHV0dGkgaSB0aWNrZXQgc2NoaWF2aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnQ29uc2VudGUgZGkgYWdnaXVuZ2VyZSBkZWxsZSBub3RlIG5lbGxhIHNjaGVybWF0YSBNYXN0ZXJTbGF2ZSBkaSB1biB0aWNrZXQgbmVsbFwnaW50ZXJmYWNjaWEgQWdlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdDYW1iaWEgbG8gc3RhdG8gTWFzdGVyU2xhdmUgZGVsIHRpY2tldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJ0RlZmluaXNjZSBpbCBub21lIGRlbCBjYW1wbyBkaW5hbWljbyBwZXIgbGEgZnVuemlvbmUgdGlja2V0IHByaW5jaXBhbGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnRGVmaW5pc2NlIHNlIMOoIG5lY2Vzc2FyaW8gdW4gYmxvY2NvIHRpY2tldCBuZWxsYSBzY2hlcm1hdGEgTWFzdGVyU2xhdmUgZGVsIHRpY2tldCBkaSB1biB0aWNrZXQgaW5ncmFuZGl0byBuZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkgKHNlIGlsIHRpY2tldCBub24gw6ggYW5jb3JhIGJsb2NjYXRvLCBpbCB0aWNrZXQgdmllbmUgYmxvY2NhdG8gZSBsXCdhZ2VudGUgY29ycmVudGUgdmVycsOgIGltcG9zdGF0byBhdXRvbWF0aWNhbWVudGUgY29tZSBwcm9wcmlldGFyaW8pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pc2NlIHNlIGxhIG5vdGEgTWFzdGVyU2xhdmUgw6ggdmlzaWJpbGUgcGVyIGlsIGNsaWVudGUgcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pc2NlIGxvIHN0YXRvIHN1Y2Nlc3Npdm8gcHJlZGVmaW5pdG8gZGkgdW4gdGlja2V0IGRvcG8gYXZlciBhZ2dpdW50byB1bmEgbm90YSwgbmVsbGEgc2NoZXJtYXRhIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSBsYSBwcmlvcml0w6AgcHJlZGVmaW5pdGEgZGVsIHRpY2tldCBuZWxsYSBzY2hlcm1hdGEgTWFzdGVyU2xhdmUgZGVsIHRpY2tldCBkaSB1biB0aWNrZXQgaW5ncmFuZGl0byBuZWxsXCdpbnRlcmZhY2NpYSBkZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmlzY2UgaWwgY29tbWVudG8gY3Jvbm9sb2dpY28gcGVyIGxcJ2F6aW9uZSBzdWxsbyBzY2hlcm1vIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQsIGNoZSB2aWVuZSB1dGlsaXp6YXRvIHBlciBsYSBjcm9ub2xvZ2lhIGRlaSB0aWNrZXQgbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5pc2NlIGlsIHRpcG8gZGkgY3Jvbm9sb2dpYSBwZXIgbFwnYXppb25lIGRlbGxhIHNjaGVybWF0YSBNYXN0ZXJTbGF2ZSBkZWwgdGlja2V0LCBjaGUgdmllbmUgdXRpbGl6emF0YSBwZXIgbGEgY3Jvbm9sb2dpYSBkZWkgdGlja2V0IG5lbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluaXNjZSBsbyBzdGF0byBzdWNjZXNzaXZvIGRpIHVuIHRpY2tldCBkb3BvIGF2ZXIgYWdnaXVudG8gdW5hIG5vdGEsIG5lbGxhIHNjaGVybWF0YSBNYXN0ZXJTbGF2ZSBkZWwgdGlja2V0IGRpIHVuIHRpY2tldCBpbmdyYW5kaXRvIG5lbGxcJ2ludGVyZmFjY2lhIGRlbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgcGFydCBvZiB0aGUgZmVhdHVyZS4nfSA9ICdBYmlsaXRhIGxhIHBhcnRlIGF2YW56YXRhIGRpIE1hc3RlclNsYXZlIGRlbGxhIGZ1bnppb25lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnQWJpbGl0YSBsYSBmdW56aW9uZSBjaGUgaSB0aWNrZXQgc2xhdmUgc2VndW9ubyBpbCB0aWNrZXQgbWFzdGVyIHZlcnNvIHVuIG51b3ZvIG1hc3RlciBpbiBtb2RhbGl0w6AgTWFzdGVyU2xhdmUgYXZhbnphdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0FiaWxpdGEgbGEgZnVuemlvbmUgcGVyIGNhbWJpYXJlIGxvIHN0YXRvIE1hc3RlclNsYXZlIGRpIHVuIHRpY2tldCBuZWxsYSBtb2RhbGl0w6AgTWFzdGVyU2xhdmUgYXZhbnphdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJ0FiaWxpdGEgbGEgZnVuemlvbmUgcGVyIGlub2x0cmFyZSBhcnRpY29saSBkYWwgdGlwbyBcJ2lub2x0cmFcJyBkaSB1biB0aWNrZXQgcHJpbmNpcGFsZSBhaSBjbGllbnRpIGRlaSB0aWNrZXQgc2xhdmUuIFBlciBpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEgKGRpc2FiaWxpdGF0bykgbm9uIGlub2x0cmVyw6AgYXJ0aWNvbGkgZGFsIHRpcG8gImlub2x0cmEiIGFpIHRpY2tldCBzY2hpYXZvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0FiaWxpdGEgbGEgZnVuemlvbmUgcGVyIG1hbnRlbmVyZSBpbCBjb2xsZWdhbWVudG8gZ2VuaXRvcmUtZmlnbGlvIGRvcG8gbGEgbW9kaWZpY2EgZGVsbG8gc3RhdG8gTWFzdGVyU2xhdmUgbmVsbGEgbW9kYWxpdMOgIE1hc3RlclNsYXZlIGF2YW56YXRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnQWJpbGl0YSBsYSBmdW56aW9uZSBwZXIgbWFudGVuZXJlIGlsIGNvbGxlZ2FtZW50byBnZW5pdG9yZS1maWdsaW8gZG9wbyBhdmVyIGRpc2luc2VyaXRvIGxvIHN0YXRvIE1hc3RlclNsYXZlIG5lbGxhIG1vZGFsaXTDoCBNYXN0ZXJTbGF2ZSBhdmFuemF0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdBYmlsaXRhIGxhIGZ1bnppb25lIGEgZGlzaW5zZXJpcmUgbG8gc3RhdG8gTWFzdGVyU2xhdmUgZGkgdW4gdGlja2V0IG5lbGxhIG1vZGFsaXTDoCBNYXN0ZXJTbGF2ZSBhdmFuemF0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2UgdW5hIG5vdGEgdmllbmUgYWdnaXVudGEgZGEgdW4gYWdlbnRlLCBpbXBvc3RhIGxvIHN0YXRvIGRlbCB0aWNrZXQgbmVsbGEgc2NoZXJtYXRhIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ1ByaW1hcmlvIC8gU2Vjb25kYXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJ1RpY2tldCBtYWVzdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAnTWFzdGVyU2xhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUgbW9kdWxlIGZvciBUaWNrZXQgQnVsayBmZWF0dXJlLid9ID0gJ01vZHVsbyBNYXN0ZXJTbGF2ZSBwZXIgbGEgZnVuemlvbmUgQnVsayBUaWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSBwZXIgaWwgYmFja2VuZCBkZWwgZGFzaGJvYXJkIGRlbGxhIHBhbm9yYW1pY2EgZGVpIHRpY2tldCBwcmluY2lwYWxpIGRlbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4gIkxpbWl0ZSIgw6ggaWwgbnVtZXJvIGRpIHZvY2kgdmlzdWFsaXp6YXRlIHBlciBpbXBvc3RhemlvbmUgcHJlZGVmaW5pdGEuICJHcnVwcG8iIHZpZW5lIHV0aWxpenphdG8gcGVyIGxpbWl0YXJlIGxcJ2FjY2Vzc28gYWwgcGx1Zy1pbiAoYWQgZXMuIEdydXBwbzogYWRtaW47IGdydXBwbzE7IGdydXBwbzI7KS4gIlByZWRlZmluaXRvIiBkZXRlcm1pbmEgc2UgaWwgcGx1Zy1pbiDDqCBhYmlsaXRhdG8gcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YSBvIHNlIGxcJ3V0ZW50ZSBkZXZlIGFiaWxpdGFybG8gbWFudWFsbWVudGUuICJDYWNoZVRUTExvY2FsIiDDqCBpbCB0ZW1wbyBkaSBjYWNoZSBpbiBtaW51dGkgcGVyIGlsIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0cmkgcGVyIGlsIGJhY2tlbmQgZGVsIGRhc2hib2FyZCBkZWxsYSBwYW5vcmFtaWNhIGRlaSB0aWNrZXQgc2xhdmUgZGVsbFwnaW50ZXJmYWNjaWEgZGVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLiAiTGltaXRlIiDDqCBpbCBudW1lcm8gZGkgdm9jaSB2aXN1YWxpenphdGUgcGVyIGltcG9zdGF6aW9uZSBwcmVkZWZpbml0YS4gIkdydXBwbyIgdmllbmUgdXRpbGl6emF0byBwZXIgbGltaXRhcmUgbFwnYWNjZXNzbyBhbCBwbHVnLWluIChhZCBlcy4gR3J1cHBvOiBhZG1pbjsgZ3J1cHBvMTsgZ3J1cHBvMjspLiAiUHJlZGVmaW5pdG8iIGRldGVybWluYSBzZSBpbCBwbHVnLWluIMOoIGFiaWxpdGF0byBwZXIgaW1wb3N0YXppb25lIHByZWRlZmluaXRhIG8gc2UgbFwndXRlbnRlIGRldmUgYWJpbGl0YXJsbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIMOoIGlsIHRlbXBvIGRpIGNhY2hlIGluIG1pbnV0aSBwZXIgaWwgcGx1Z2luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnUmVnaXN0cmF6aW9uZSBkZWwgbW9kdWxvIGRpIGV2ZW50byBkZWwgdGlja2V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtZXNzaSBuZWNlc3NhcmkgcGVyIHV0aWxpenphcmUgbGEgc2NoZXJtYXRhIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJ0ltcG9zdGEgc2UgaWwgY2FtcG8gTWFzdGVyIC8gU2xhdmUgZGV2ZSBlc3NlcmUgc2VsZXppb25hdG8gZGFsbFwnYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbXBvc3RhIGlsIGNvcnBvIGRlbCB0ZXN0byBwcmVkZWZpbml0byBwZXIgbGUgbm90ZSBhZ2dpdW50ZSBuZWxsYSBzY2hlcm1hdGEgTWFzdGVyU2xhdmUgZGVsIHRpY2tldCBkaSB1biB0aWNrZXQgaW5ncmFuZGl0byBuZWxsXCdpbnRlcmZhY2NpYSBkZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbXBvc3RhIGxcJ29nZ2V0dG8gcHJlZGVmaW5pdG8gcGVyIGxlIG5vdGUgYWdnaXVudGUgbmVsbGEgc2NoZXJtYXRhIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW1wb3N0YSBsXCdhZ2VudGUgcmVzcG9uc2FiaWxlIGRlbCB0aWNrZXQgbmVsbGEgc2NoZXJtYXRhIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0ltcG9zdGEgaWwgc2Vydml6aW8gbmVsbGEgc2NoZXJtYXRhIGRlbCB0aWNrZXQgTWFzdGVyU2xhdmUgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpIChUaWNrZXQgOjogSWwgc2Vydml6aW8gZGV2ZSBlc3NlcmUgYXR0aXZhdG8pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbXBvc3RhIGlsIHByb3ByaWV0YXJpbyBkZWwgdGlja2V0IG5lbGxhIHNjaGVybWF0YSBNYXN0ZXJTbGF2ZSBkZWwgdGlja2V0IGRpIHVuIHRpY2tldCBpbmdyYW5kaXRvIG5lbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnSW1wb3N0YSBpbCB0aXBvIGRpIHRpY2tldCBuZWxsYSBzY2hlcm1hdGEgTWFzdGVyU2xhdmUgZGVsIHRpY2tldCBkaSB1biB0aWNrZXQgaW5ncmFuZGl0byBuZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkgKFRpY2tldDo6VHlwZSBkZXZlIGVzc2VyZSBhdHRpdmF0bykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVuIGNvbGxlZ2FtZW50byBuZWwgbWVudSBwZXIgbW9kaWZpY2FyZSBsbyBzdGF0byBNYXN0ZXJTbGF2ZSBkaSB1biB0aWNrZXQgbmVsbGEgdmlzdGEgem9vbSB0aWNrZXQgbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIHVuIGVsZW5jbyBkaSB0dXR0aSBnbGkgYWdlbnRpIGNvaW52b2x0aSBzdSBxdWVzdG8gdGlja2V0LCBuZWxsYSBzY2hlcm1hdGEgTWFzdGVyU2xhdmUgZGVsIHRpY2tldCBkaSB1biB0aWNrZXQgaW5ncmFuZGl0byBuZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSB1biBlbGVuY28gZGkgdHV0dGkgaSBwb3NzaWJpbGkgYWdlbnRpICh0dXR0aSBnbGkgYWdlbnRpIGNvbiBpIHBlcm1lc3NpIG5vdGUgc3VsbGEgY29kYS90aWNrZXQpIHBlciBkZXRlcm1pbmFyZSBjaGkgZGV2ZSBlc3NlcmUgaW5mb3JtYXRvIHN1IHF1ZXN0YSBub3RhLCBuZWxsYSBzY2hlcm1hdGEgTWFzdGVyU2xhdmUgZGVsIHRpY2tldCBkaSB1biB0aWNrZXQgaW5ncmFuZGl0byBuZWxsXCdpbnRlcmZhY2NpYSBhZ2VudGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01vc3RyYSBsZSBvcHppb25pIGRpIHByaW9yaXTDoCBkZWwgdGlja2V0IG5lbGxhIHNjaGVybWF0YSBNYXN0ZXJTbGF2ZSBkZWwgdGlja2V0IGRpIHVuIHRpY2tldCBpbmdyYW5kaXRvIG5lbGxcJ2ludGVyZmFjY2lhIGFnZW50aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIGlsIGNhbXBvIGRlbCB0aXRvbG8gbmVsbGEgc2NoZXJtYXRhIE1hc3RlclNsYXZlIGRlbCB0aWNrZXQgZGkgdW4gdGlja2V0IGluZ3JhbmRpdG8gbmVsbFwnaW50ZXJmYWNjaWEgYWdlbnRpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnVGlja2V0IHNjaGlhdmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgYXJ0aWNsZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdoZXJlIHRoZSByZWFsIG5hbWUgZnJvbSBNYXN0ZXIgdGlja2V0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgb25lIGluIHRoZSBTbGF2ZSB0aWNrZXQuJ30gPQogICAgICAgICdTcGVjaWZpY2EgaSBkaXZlcnNpIGNhbmFsaSBkaSBjb211bmljYXppb25lIGRlbGxcJ2FydGljb2xvIGluIGN1aSBpbCBub21lIHJlYWxlIGRlbCB0aWNrZXQgTWFzdGVyIHZlcnLDoCBzb3N0aXR1aXRvIGNvbiBxdWVsbG8gbmVsIHRpY2tldCBTbGF2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgYWN0aXZhdGVzIE1hc3Rlci9TbGF2ZSBmaWVsZCBpbiBuZXcgZW1haWwgYW5kIHBob25lIHRpY2tldCBzY3JlZW5zLid9ID0KICAgICAgICAnUXVlc3RvIG1vZHVsbyBhdHRpdmEgaWwgY2FtcG8gUHJpbWFyaW8vU2Vjb25kYXJpbyBuZWxsZSBzY2hlcm1hdGUgZGVpIG51b3ZpIHRpY2tldCB0cmFtaXRlIGVtYWlsIGUgdGVsZWZvbm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnVydGhlciB2ZXJzaW9ucyBvZiBPVFJTTWFzdGVyU2xhdmUuJ30gPQogICAgICAgICdRdWVzdGEgaW1wb3N0YXppb25lIMOoIG9ic29sZXRhIGUgdmVycsOgIHJpbW9zc2EgaW4gdWx0ZXJpb3JpIHZlcnNpb25pIGRpIE9UUlNNYXN0ZXJTbGF2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IE1hc3RlclNsYXZlLid9ID0gJ1RpY2tldCBNYXN0ZXJTbGF2ZS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpqYV9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJXMlcyVz44Gu44Oe44K544K/L+OCueODrOODvOODluOCueODhuODvOOCv+OCueOCkueuoeeQhuOBmeOCiyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICfmlrDjgZfjgYTjg57jgrnjgr/jg7zjg4HjgrHjg4Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldCd9ID0gJ+ODnuOCueOCv+ODvOODgeOCseODg+ODiOOCkuino+mZpOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXQnfSA9ICfjgrnjg6zjg7zjg5bjg4HjgrHjg4Pjg4jjgpLop6PpmaTjgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJyVzJXMlc+OBruOCueODrOODvOODljogJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UaWNrZXRCdWxrL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0cyd9ID0gJ+ODnuOCueOCv+ODvOODgeOCseODg+ODiOOCkuino+mZpOOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAn44K544Os44O844OW44OB44Kx44OD44OI44KS6Kej6Zmk44GZ44KLJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ+ODnuOCueOCv+ODvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ+ODnuOCueOCv+ODvCDjg4HjgrHjg4Pjg4gnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICfjgZnjgbnjgabjga7jg57jgrnjgr/jg7zjg4HjgrHjg4Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICfjgZnjgbnjgabjga7jgrnjg6zjg7zjg5bjg4HjgrHjg4Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+OCqOODvOOCuOOCp+ODs+ODiOOCpOODs+OCv+ODleOCp+ODvOOCueOBruOCuuODvOODoOOBleOCjOOBn+ODgeOCseODg+ODiOOBruODnuOCueOCv+ODvOOCueODrOOCpOODlueUu+mdouOBp+OAgeazqOmHiOOBrui/veWKoOOCkuioseWPr+OBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAn44OB44Kx44OD44OI44Gu44Oe44K544K/44O844O744K544Os44O844OW54q25rOB44KS5aSJ5pu044GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAn44Oe44K544K/44O844O744K544Os44O844OW5YuV55qE44OV44Kj44O844Or44OJ5ZCN44KS6Kit5a6a44GZ44KLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44O844OV44Kn44Kk44K5IOOBruOCuuODvOODoOOBleOCjOOBn+ODgeOCseODg+ODiOOBruODnuOCueOCv+ODvOODu+OCueODrOODvOODlueUu+mdouOBp+OAgeODh+ODleOCqeODq+ODiOOBriDjg4HjgrHjg4Pjg4gg5YSq5YWI5bqm44KS5a6a576p44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga7jg4HjgrHjg4Pjg4jlsaXmrbTjgafkvb/nlKjjgZXjgozjgovjgIHjg4HjgrHjg4Pjg4jjg7vjg57jgrnjgr/jg7zjg7vjgrnjg6zjg7zjg5bnlLvpnaLjgqLjgq/jgrfjg6fjg7PjgavplqLjgZnjgovlsaXmrbTjgrPjg6Hjg7Pjg4jjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBruODgeOCseODg+ODiOWxpeattOOBp+S9v+eUqOOBleOCjOOCi+OAgeODgeOCseODg+ODiOODu+ODnuOCueOCv+ODvOODu+OCueODrOODvOODlueUu+mdouOCouOCr+OCt+ODp+ODs+OBq+mWouOBmeOCi+WxpeattOOCv+OCpOODl+OCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ+ODnuOCueOCv+ODvCAvIOOCueODrOODvOODlic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJ+ODnuOCueOCv+ODvOODgeOCseODg+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJ+ODnuOCueOCv+ODvOODu+OCueODrOODvOODlic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnTWFzdGVyU2xhdmUg44Oi44K444Ol44O844Or44Gu44OB44Kx44OD44OI5LiA5ous5Yem55CG5qmf6IO9JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIHNsYXZlIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAn44OB44Kx44OD44OI44Kk44OZ44Oz44OI44Oi44K444Ol44O844Or44Gu55m76YyyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBp+OAgeOCuuODvOODoOOBleOCjOOBn+ODgeOCseODg+ODiOOBruODnuOCueOCv+ODvOODu+OCueODrOODvOODlueUu+mdouOCkuS9v+eUqOOBmeOCi+OBn+OCgeOBruW/heimgeOBquioseWPr+OBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga7jgrrjg7zjg6DjgZXjgozjgZ/jg4HjgrHjg4Pjg4jjga7jg57jgrnjgr/jg7zjg7vjgrnjg6zjg7zjg5bnlLvpnaLjgafjgIHov73liqDjgZXjgozjgZ/jg6Hjg6Ljga7jg4fjg5Xjgqnjg6vjg4jjga7mnKzmlofjgpLoqK3lrprjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBruOCuuODvOODoOOBleOCjOOBn+ODgeOCseODg+ODiOOBruODnuOCueOCv+ODvOODu+OCueODrOODvOODlueUu+mdouOBp+OAgei/veWKoOOBleOCjOOBn+ODoeODouOBruODh+ODleOCqeODq+ODiOOBruS7tuWQjeOCkuioreWumuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544Gu44K644O844Og44GV44KM44Gf44OB44Kx44OD44OI44Gu44Oe44K544K/44O844O744K544Os44O844OW55S76Z2i44Gn44CB44OB44Kx44OD44OI44Gu6LKs5Lu744KS5pyJ44GZ44KL5ouF5b2T6ICF44KS6Kit5a6a44GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAn5ouF5b2T6ICF44Kk44Oz44K/44OV44Kn44O844K544Gu44K644O844Og44GV44KM44Gf44OB44Kx44OD44OI44Gu44OB44Kx44OD44OI44Gu44Oe44K544K/44O844O744K544Os44O844OW55S76Z2i44Gn44CB44K144O844OT44K544KS6Kit5a6a44GX44G+44GZIChUaWNrZXQ6OlNlcnZpY2XjgpLmnInlirnjgajjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkp44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+aLheW9k+iAheOCpOODs+OCv+ODleOCp+ODvOOCueOBruOCuuODvOODoOOBleOCjOOBn+ODgeOCseODg+ODiOOBruODnuOCueOCv+ODvOODu+OCueODrOODvOODlueUu+mdouOBp+OAgeODgeOCseODg+ODiOaJgOacieiAheOCkuioreWumuOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICfmi4XlvZPogIXjgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjga7jgrrjg7zjg6DjgZXjgozjgZ/jg4HjgrHjg4Pjg4jjga7jg4HjgrHjg4Pjg4jjga7jg57jgrnjgr/jg7zjg7vjgrnjg6zjg7zjg5bnlLvpnaLjgafjgIHjg4HjgrHjg4Pjg4jjg7vjgr/jgqTjg5fjgpLoqK3lrprjgZfjgb7jgZkoVGlja2V0OjpUeXBl44KS5pyJ5Yq544Go44GZ44KL5b+F6KaB44GM44GC44KK44G+44GZKeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0dXMgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIFRpY2tldHMnfSA9ICfjgrnjg6zjg7zjg5bjg4HjgrHjg4Pjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgYXJ0aWNsZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdoZXJlIHRoZSByZWFsIG5hbWUgZnJvbSBNYXN0ZXIgdGlja2V0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgb25lIGluIHRoZSBTbGF2ZSB0aWNrZXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgYWN0aXZhdGVzIE1hc3Rlci9TbGF2ZSBmaWVsZCBpbiBuZXcgZW1haWwgYW5kIHBob25lIHRpY2tldCBzY3JlZW5zLid9ID0KICAgICAgICAn44GT44Gu44Oi44K444Ol44O844Or44Gv44CB5paw6KaP44Oh44O844OrL+mbu+ipseODgeOCseODg+ODiOOBq+OAgeODnuOCueOCv+ODvC/jgrnjg6zjg7zjg5bjg4HjgrHjg4Pjg4jmrITjgpLov73liqDjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAn44Oe44K544K/44O844O744K544Os44O844OW44OB44Kx44OD44OIJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjptc19PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ1Rpa2V0IE1hc3RlciBCYWhhcnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldCd9ID0gJ1Rpa2V0IE1hc3RlciBUaWRhayBEaXRldGFwa2FuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ1Rpa2V0IFNsYXZlIFRpZGFrIERpdGV0YXBrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1RpY2tldEJ1bGsvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldHMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyJ30gPSAnSW5kdWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXQnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbWJlbmFya2FuIG1lbmFtYmFoIG5vdGEgZGFsYW0gc2tyaW4gTWFzdGVyU2xhdmUgdGlrZXQgYmFnaSB0aWtldCBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAnVWJhaCBrZWFkYWFuIHRpa2V0IE1hc3RlclNsYXZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBqaWthIGt1bmNpIHRpa2V0IGRpcGVybHVrYW4gZGFsYW0gc2tyaW4gTWFzdGVyU2xhdmUgdGlrZXQgdGlrZXQgZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgZWplbiAoamlrYSB0aWtldCBpdHUgdGlkYWsgZGlrdW5jaSBsYWdpLCB0aWtldCB5YW5nIGFrYW4gZGlrdW5jaSBkYW4gZWplbiBzZW1hc2EgYWthbiBkaXRldGFwa2FuIHNlY2FyYSBhdXRvbWF0aWsgc2ViYWdhaSBwZW1pbGlrbnlhKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgTWFzdGVyU2xhdmUgbm90ZSBpcyB2aXNpYmxlIGZvciB0aGUgY3VzdG9tZXIgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4ga2VhZGFhbiBkZWZhdWx0IHNldGVydXNueWEgYmFnaSB0aWtldCBzZWxlcGFzIG1lbmFtYmFoIG5vdGEsIGRhbGFtIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0IHRpa2V0IGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtldXRhbWFhbiB0aWtldCBkZWZhdWx0IGRhbGFtIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0IHRpa2V0IGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW50YWtyaWZrYW4ga29tZW4gc2VqYXJhaCBiYWdpIGtlc2FuIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0LCB5YW5nIGFrYW4gZGlndW5ha2FuIHVudHVrIHNlamFyYWggdGlrZXQgZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbnRha3JpZmthbiBqZW5pcyBzZWphcmFoIGJhZ2kgdGluZGFrYW4gc2tyaW4gdGlrZXQgTWFzdGVyU2xhdmUsIHlhbmcgYWthbiBkaWd1bmFrYW4gdW50dWsgc2VqYXJhaCB0aWtldCBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVudGFrcmlma2FuIGtlYWRhYW4gc2V0ZXJ1c255YSBiYWdpIHRpa2V0IHNlbGVwYXMgbWVuYW1iYWggbm90YSwgZGFsYW0gc2tyaW4gTWFzdGVyU2xhdmUgdGlrZXQgdGlrZXQgZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgcGFydCBvZiB0aGUgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0aGF0IHNsYXZlIHRpY2tldHMgZm9sbG93IHRoZSBtYXN0ZXIgdGlja2V0IHRvIGEgbmV3IG1hc3RlciBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyBvZiBhIG1hc3RlciB0aWNrZXQgdG8gdGhlIGN1c3RvbWVycyBvZiB0aGUgc2xhdmUgdGlja2V0cy4gQnkgZGVmYXVsdCAoZGlzYWJsZWQpIGl0IHdpbGwgbm90IGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIHRvIHRoZSBzbGF2ZSB0aWNrZXRzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciBjaGFuZ2Ugb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSmlrYSBub3RhIGRpdGFtYmFoIG9sZWggZWplbiwgdGV0YXBrYW4ga2VhZGFhbiB0aWtldCBkYWxhbSBza3JpbiBNYXN0ZXJTbGF2ZSB0aWtldCB0aWtldCBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ01hc3RlciAvIFNsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICdNb2R1bCBNYXN0ZXJTbGF2ZSB1bnR1ayBjaXJpIEJ1bGsgVGlrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBiYWhhZ2lhbiBiZWxha2FuZyBwYXBhbiBwZW11a2EgZGFyaXBhZGEgZ2FtYmFyYW4ga2VzZWx1cnVoYW4gdGlrZXQgbWFzdGVyIGFudGFyYSBtdWthIGVqZW4uICJIYWQiIGFkYWxhaCBiaWxhbmdhbiBwZW55ZXJ0YWFuIGRpdHVuanVra2FuIHNlY2FyYSBkZWZhdWx0LiAiS3VtcHVsYW4iIGRpZ3VuYWthbiB1bnR1ayBtZW55ZWthdCBha3NlcyBrZXBhZGEgbWFzdWsgKGNvbnRvaDogS3VtcHVsYW46IGFkbWluOyBrdW1wdWxhbjE7IGt1bXB1bGFuMjspLiAiRGVmYXVsdCIgbWVuZW50dWthbiBqaWthIHBsdWdpbiBpbmkgZGlha3RpZmthbiBzZWNhcmEgZGVmYXVsdCBhdGF1IGppa2EgcGVuZ2d1bmEgcGVybHUgdW50dWsgbWVtYm9sZWhrYW4gc2VjYXJhIG1hbnVhbC4gIkNhY2hlVFRMTG9jYWwiIGFkYWxhaCBtYXNhIGNhY2hlIGRhbGFtIG1pbml0IHVudHVrIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgYmFoYWdpYW4gYmVsYWthbmcgcGFwYW4gcGVtdWthIGRhcmlwYWRhIGdhbWJhcmFuIGtlc2VsdXJ1aGFuIHRpa2V0IHNsYXZlIGFudGFyYSBtdWthIGVqZW4uICJIYWQiIGFkYWxhaCBiaWxhbmdhbiBwZW55ZXJ0YWFuIGRpdHVuanVra2FuIHNlY2FyYSBkZWZhdWx0LiAiS3VtcHVsYW4iIGRpZ3VuYWthbiB1bnR1ayBtZW55ZWthdCBha3NlcyBrZXBhZGEgbWFzdWsgKGNvbnRvaDogS3VtcHVsYW46IGFkbWluOyBrdW1wdWxhbjE7IGt1bXB1bGFuMjspLiAiRGVmYXVsdCIgbWVuZW50dWthbiBqaWthIHBsdWdpbiBpbmkgZGlha3RpZmthbiBzZWNhcmEgZGVmYXVsdCBhdGF1IGppa2EgcGVuZ2d1bmEgcGVybHUgdW50dWsgbWVtYm9sZWhrYW4gc2VjYXJhIG1hbnVhbC4gIkNhY2hlVFRMTG9jYWwiIGFkYWxhaCBtYXNhIGNhY2hlIGRhbGFtIG1pbml0IHVudHVrIHBsdWdpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ1BlbmRhZnRhcmFuIHRpa2V0IG1vZHVsIGFjYXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdLZWJlbmFyYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmdndW5ha2FuIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0IHRpa2V0IGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbmV0YXBrYW4gdGVrcyBiYWRhbiBkZWZhdWx0IHVudHVrIG5vdGEgZGl0YW1iYWggZGFsYW0gc2tyaW4gTWFzdGVyU2xhdmUgdGlrZXQgdGlrZXQgZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1NldCBzdWJqZWsgZGVmYXVsdCB1bnR1ayBub3RhIGRpdGFtYmFoIGRhbGFtIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0IHRpa2V0IGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZXQgZWplbiB5YW5nIGJlcnRhbmdndW5namF3YWIgYmFnaSB0aWtldCBkYWxhbSBza3JpbiBNYXN0ZXJTbGF2ZSB0aWtldCB0aWtldCBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ1NldCBwZXJraGlkbWF0YW4gZGkgc2tyaW4gTWFzdGVyU2xhdmUgdGlrZXQgdGlrZXQgZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgZWplbiAoVGlrZXQ6OlBlcmtoaWRtYXRhbiBwZXJsdSBkaWFrdGlma2FuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnU2V0IHBlbWlsaWsgdGlrZXQgZGFsYW0gc2tyaW4gTWFzdGVyU2xhdmUgdGlrZXQgdGlrZXQgZGl6dW0gZGFsYW0gYW50YXJhIG11a2EgZWplbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnTWVuZXRhcGthbiBqZW5pcyB0aWtldCB5YW5nIGRhbGFtIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0IHRpa2V0IGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4gKFRpa2V0OjpKZW5pcyBwZXJsdSBkaWFrdGlma2FuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwYXV0YW4gZGFsYW0gbWVudSB1bnR1ayBtZW51a2FyIHN0YXR1cyBNYXN0ZXJTbGF2ZSBiYWdpIHRpa2V0IGRhbGFtIHBhbmRhbmdhbiB6dW0gdGlrZXQgYmFnaSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTWVtYXBhcmthbiBzZW5hcmFpIHNlbXVhIGVqZW4geWFuZyB0ZXJsaWJhdCBkYWxhbSB0aWtldCBpbmksIGRhbGFtIHNrcmluIE1hc3RlclNsYXZlIHRpa2V0IHRpa2V0IGRpenVtIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ01lbWFwYXJrYW4gc2VuYXJhaSBzZW11YSBrZW11bmdraW5hbiBlamVuIChzZW11YSBlamVuIGRlbmdhbiBrZWJlbmFyYW4gbm90YSBtZW5nZW5haSBiYXJpc2FuL3Rpa2V0KSB1bnR1ayBtZW5lbnR1a2FuIHNpYXBhIHlhbmcgcGVybHUgZGliZXJpdGFodSB0ZW50YW5nIG5vdGEgaW5pLCBkYWxhbSBza3JpbiBNYXN0ZXJTbGF2ZSB0aWtldCB0aWtldCBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdNZW51bmp1a2thbiBwaWxpaGFuIGtldXRhbWFhbiB0aWtldCBkYWxhbSBza3JpbiBNYXN0ZXJTbGF2ZSB0aWtldCB0aWtldCBkaXp1bSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICdNb2R1bCBpbmkgbWVuZ2FrdGlma2FuIG1lZGFuIE1hc3Rlci9TbGF2ZSBkaSBza3JpbiBlbWVsIGRhbiB0aWtldCB0ZWxlZm9uIGJhcnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnVydGhlciB2ZXJzaW9ucyBvZiBPVFJTTWFzdGVyU2xhdmUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IE1hc3RlclNsYXZlLid9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwbF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnVXN0YXcgc3RhbiBOYWRyesSZZG55L1BvZHJ6xJlkbnkgZGxhICVzJXMlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICdOb3dlIHpnxYJvc3plbmllIG5hZHJ6xJlkbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldCd9ID0gJ1d5xYLEhWN6IHdhcnRvxZvEhyBOYWRyesSZZG55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ1d5xYLEhWN6IHdhcnRvxZvEhyBQb2RyesSZZG55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIG9mICVzJXMlczogJXMnfSA9ICdQb2RyesSZZG5lIGRvICVzJXMlczogJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UaWNrZXRCdWxrL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0cyd9ID0gJ1d5Y3p5xZvEhyB3YXJ0b8WbxIcgTmFkcnrEmWRueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAnV3ljennFm8SHIHdhcnRvxZvEhyBQb2RyesSZZG55JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ05hZHJ6xJlkbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnUG9kcnrEmWRueSBkbyAlcyVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ1pnxYJvc3plbmllIG5hZHJ6xJlkbmUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICdXc3p5c3RraWUgemfFgm9zemVuaWEgbmFkcnrEmWRuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1dzenlzdGtpZSB6Z8WCb3N6ZW5pYSBwb2RyesSZZG5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQb3p3YWxhIG5hIGRvZGFuaWUgbm90YXRraSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSwgd3l3b8WCYW55bSB6IHByenlibGnFvG9uZWdvIHdpZG9rdSB6Z8WCb3N6ZW5pYSB3IGludGVyZmVqc2llIGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiB0aGUgdGlja2V0Lid9ID0gJ1ptaWXFhCBzdGFuIHpnxYJvc3plbmlhIGRsYSBOYWRyesSZZG55L1BvZHJ6xJlkbnkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnT2tyZcWbbGEgbmF6d8SZIHBvbGEgZHluYW1pY3puZWdvIGRsYSBmdW5rY2pvbmFsbm/Fm2NpIHpnxYJvc3plbmlhIG5hZHJ6xJlkbmVnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdPa3JlxZtsYSwgY3p5IHd5bWFnYW5hIGplc3QgemFibG9rb3dhbmllIHpnxYJvc3plbmlhIG5hIGVrcmFuaWUgTmFkcnrEmWRueS9Qb2RyesSZZG55IHcgb2tuaWUgc3pjemVnw7PFgsOzdyB6Z8WCb3N6ZW5pYSBpbnRlcmZlanN1IGFnZW50YSAoamXFm2xpIHpnxYJvc3plbmllIG5pZSBqZXN0IGplc3pjemUgemFibG9rb3dhbmUsIHN0YWplIHNpxJnCoHphYmxva293YW5lLCBhIGJpZcW8xIVjeSBhZ2VudCBzdGFqZSBzacSZIGplZ28gd8WCYcWbY2ljaWVsZW0pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09rcmXFm2xhIGRvbXnFm2xueSBuYXN0xJlwbnkgc3RhbiB6Z8WCb3N6ZW5pYSBwbyBkb2Rhbml1IG5vdGF0a2kgbmEgZWtyYW5pZSBOYWRyesSZZG55L1BvZHJ6xJlkbnkgdyBva25pZSBzemN6ZWfDs8WCw7N3IHpnxYJvc3plbmlhIGludGVyZmVqc3UgYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09rcmXFm2xhIGRvbXnFm2xueSBwcmlvcnl0ZXQgemfFgm9zemVuaWEgbmEgZWtyYW5pZSBOYWRyesSZZG55L1BvZHJ6xJlkbnkgdyBva25pZSBzemN6ZWfDs8WCw7N3IHpnxYJvc3plbmlhIGludGVyZmVqc3UgYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnT2tyZcWbbGEga29tZW50YXJ6IGhpc3RvcmlpIGRsYSBha2NqaSB6Z8WCb3N6ZW5pYSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSBrdMOzcnkgem9zdGFuaWUgdcW8eXR5IHcgaGlzdG9yaWkgemfFgm9zemVuaWEgaW50ZXJmZWpzdSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPa3JlxZtsYSB0eXAgaGlzdG9yaWkgZGxhIGFrY2ppIHpnxYJvc3plbmlhIG5hIGVrcmFuaWUgTmFkcnrEmWRueS9Qb2RyesSZZG55IGt0w7NyeSB6b3N0YW5pZSB1xbx5dHkgdyBoaXN0b3JpaSB6Z8WCb3N6ZW5pYSBpbnRlcmZlanN1IGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09rcmXFm2xhIG5hc3TEmXBueSBzdGFuIHpnxYJvc3plbmlhIHBvIGRvZGFuaXUgbm90YXRraSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSB3IG9rbmllIHN6Y3plZ8OzxYLDs3cgemfFgm9zemVuaWEgaW50ZXJmZWpzdSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnV8WCxIVjemEgemFhd2Fuc293YW7EhSBjesSZxZvEhyBmdW5rY2pvbmFsbm/Fm2NpIE5hZHJ6xJlkbnkvUG9kcnrEmWRueS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0aGF0IHNsYXZlIHRpY2tldHMgZm9sbG93IHRoZSBtYXN0ZXIgdGlja2V0IHRvIGEgbmV3IG1hc3RlciBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ1fFgsSFY3phIGZ1bmtjam9uYWxub8WbxIcgdHJ5YnUgemFhd2Fuc293YW5lZ28gTmFkcnrEmWRueS9Qb2RyesSZZG55LCB3IGt0w7NyZWogemfFgm9zemVuaWEgcG9kcnrEmWRuZSBwb2TEhcW8YWrEhSB6YSB6Z8WCb3N6ZW5pZW0gbmFkcnrEmWRueW0gZG8gbm93ZWdvIHpnxYJvc3plbmlhIG5hZHJ6xJlkbmVnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnV8WCxIVjemEgZnVua2Nqb25hbG5vxZvEhyB0cnlidSB6YWF3YW5zb3dhbmVnbyBOYWRyesSZZG55L1BvZHJ6xJlkbnkgdW1vxbxsaXdpYWrEhWPEhSB6bWlhbsSZIHN0YW51IE5hZHJ6xJlkbnkvUG9kcnrEmWRueSB3IHpnxYJvc3plbml1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICdXxYLEhWN6YSBmdW5rY2pvbmFsbm/Fm8SHIHByemVzecWCYW5pYSBhcnR5a3XFgsOzdyB0eXB1ICJwcnpla2HFvCIgemUgemfFgm9zemVuaWEgbmFkcnrEmWRuZWdvIGRvIGtsaWVudMOzdyB6Z8WCb3N6ZcWEIHBvZHJ6xJlkbnljaC4gRG9tecWbbG5pZSAod3nFgsSFY3pvbmUpIGFydHlrdcWCeSB0eXB1ICJwcnpla2HFvCIgbmllIHPEhSBwcnpla2F6eXdhbmUgZG8gemfFgm9zemXFhCBwb2RyesSZZG55Y2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciBjaGFuZ2Ugb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnV8WCxIVjemEgZnVua2Nqb25hbG5vxZvEhyB0cnlidSB6YWF3YW5zb3dhbmVnbyBOYWRyesSZZG55L1BvZHJ6xJlkbnksIHBvbGVnYWrEhWPEhSBuYSB1dHJ6eW1hbml1IHBvxYLEhWN6ZW5pYSByb2R6aWMtZHppZWNrbyBwbyB6bWlhbmllIHphbGXFvG5vxZtjaSBOYWRyesSZZG55L1BvZHJ6xJlkbnkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdXxYLEhWN6YSBmdW5rY2pvbmFsbm/Fm8SHIHRyeWJ1IHphYXdhbnNvd2FuZWdvIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSwgcG9sZWdhasSFY8SFIG5hIHV0cnp5bWFuaXUgcG/FgsSFY3plbmlhIHJvZHppYy1kemllY2tvIHBvIHVzdW5pxJljaXUgemFsZcW8bm/Fm2NpIE5hZHJ6xJlkbnkvUG9kcnrEmWRueS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdXxYLEhWN6YSBmdW5rY2pvbmFsbm/Fm8SHIHRyeWJ1IHphYXdhbnNvd2FuZWdvIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSwgdXN1d2FuaWEgc3RhbnUgTmFkcnrEmWRueS9Qb2RyesSZZG55IHplIHpnxYJvc3plbmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdKZcWbbGkgYWdlbnQgZG9kYSBub3RhdGvEmSwgdG8gdXN0YXdpYW55IGplc3Qgc3RhbiB6Z8WCb3N6ZW5pYSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSBva25hIHN6Y3plZ8OzxYLDs3cgemfFgm9zemVuaWEgaW50ZXJmZWpzdSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciAvIFNsYXZlJ30gPSAnTmFkcnrEmWRueSAvIFBvZHJ6xJlkbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICdaZ8WCb3N6ZW5pYSBuYWRyesSZZG5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAnTmFkcnrEmWRueS9Qb2RyesSZZG55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICdNb2R1xYIgTmFkcnrEmWRueWNoL1BvZHJ6xJlkbnljaCBkbGEgZnVua2NqaSBncnVwb3d5Y2ggemfFgm9zemXFhC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBtYXN0ZXIgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnUGFyYW1ldHIgb2tuYSBwdWxwaXR1IHpnxYJvc3plxYQgbmFkcnrEmWRueWNoIGludGVyZmVqc3UgYWdlbnRhLiAiTGltaXQiIGplc3QgbGljemLEhSB3aWVyc3p5IHBva2F6eXdhbsSFIGRvbXnFm2xuaWUuICJHcm91cCIgamVzdCB1xbx5d2FuYSBkbyBvZ3JhbmljemVuaWEgZG9zdMSZcHUgZG8gd3R5Y3praSAobnAuOiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgb2tyZcWbbGEgY3p5IHd0eWN6a2EgamVzdCBkb215xZtsbmllIHfFgsSFY3pvbmEgbHViIGN6eSB1xbx5dGtvd25payBtb8W8ZSB3xYLEhWN6ecSHIGrEhSByxJljem5pZS4gIkNhY2hlVFRMTG9jYWwiIGplc3QgY3phc2VtIHBvZGFueW0gdyBtaW51dGFjaCBva3JlxZtsYWrEhWN5bSBjemFzIGNhY2hlXCdvd2FuaWEgd3R5Y3praS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0ciBva25hIHB1bHBpdHUgemfFgm9zemXFhCBwb2RyesSZZG55Y2ggaW50ZXJmZWpzdSBhZ2VudGEuICJMaW1pdCIgamVzdCBsaWN6YsSFIHdpZXJzenkgcG9rYXp5d2FuxIUgZG9tecWbbG5pZS4gIkdyb3VwIiBqZXN0IHXFvHl3YW5hIGRvIG9ncmFuaWN6ZW5pYSBkb3N0xJlwdSBkbyB3dHljemtpIChucC46IEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBva3JlxZtsYSBjenkgd3R5Y3prYSBqZXN0IGRvbXnFm2xuaWUgd8WCxIVjem9uYSBsdWIgY3p5IHXFvHl0a293bmlrIG1vxbxlIHfFgsSFY3p5xIcgasSFIHLEmWN6bmllLiAiQ2FjaGVUVExMb2NhbCIgamVzdCBjemFzZW0gcG9kYW55bSB3IG1pbnV0YWNoIG9rcmXFm2xhasSFY3ltIGN6YXMgY2FjaGVcJ293YW5pYSB3dHljemtpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnUmVqZXN0cmFjamEgbW9kdcWCdSB6ZGFyemXFhCB6Z8WCb3N6ZW5pYSwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVXByYXduaWVuaWEgd3ltYWdhbmUgZG8gdcW8eXdhbmlhIGVrcmFudSBOYWRyesSZZG55L1BvZHJ6xJlkbnkgdyBva25pZSBzemN6ZWfDs8WCw7N3IHpnxYJvc3plbmlhIGludGVyZmVqc3UgYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJ09rcmXFm2xhLCBjenkgcG9sZSBOYWRyesSZZG55L1BvZHJ6xJlkbnkgbXVzaSBiecSHIHd5YnJhbmUgcHJ6ZXogYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc3Rhd2lhIGRvbXnFm2xuxIUgdHJlxZvEhyBub3RhdGtpIGRvZGF3YW5laiBkbyB6Z8WCb3N6ZW5pYSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSB3IG9rbmllIHN6Y3plZ8OzxYLDs3cgemfFgm9zemVuaWEgaW50ZXJmZWpzdSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdVc3Rhd2lhIGRvbXnFm2xueSB0ZW1hdCBkbGEgbm90YXRlayBkb2Rhd2FueWNoIGRvIHpnxYJvc3plbmlhIG5hIGVrcmFuaWUgTmFkcnrEmWRueS9Qb2RyesSZZG55IHcgb2tuaWUgc3pjemVnw7PFgsOzdyB6Z8WCb3N6ZW5pYSBpbnRlcmZlanN1IGFnZW50YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzdGF3aWEgb2Rwb3dpZWR6aWFsbmVnbyB6YSB6Z8WCb3N6ZW5pZSBhZ2VudGEgbmEgZWtyYW5pZSBOYWRyesSZZG55L1BvZHJ6xJlkbnkgdyBva25pZSBzemN6ZWfDs8WCw7N3IHpnxYJvc3plbmlhIGludGVyZmVqc3UgYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ1VzdGF3aWEgdXPFgnVnxJkgdyB6Z8WCb3N6ZW5pdSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSB3IG9rbmllIHN6Y3plZ8OzxYLDs3cgemfFgm9zemVuaWEgaW50ZXJmZWpzdSBhZ2VudGEgKFRpY2tldDo6U2VydmljZSBtdXNpIGJ5xIcgYWt0eXdvd2FuZSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1VzdGF3aWEgd8WCYcWbY2ljaWVsYSB6Z8WCb3N6ZW5pYSBuYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSB3IG9rbmllIHN6Y3plZ8OzxYLDs3cgemfFgm9zemVuaWEgaW50ZXJmZWpzdSBhZ2VudGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ1VzdGF3aWEgdHlwIHpnxYJvc3plbmlhIG5hIGVrcmFuaWUgTmFkcnrEmWRueS9Qb2RyesSZZG55LCB3eXdvxYJhbnltIHogcHJ6eWJsacW8b25lZ28gd2lkb2t1IHpnxYJvc3plbmlhIHcgaW50ZXJmZWpzaWUgYWdlbnQgKFRpY2tldDo6VHlwZSBtdXNpIGJ5xIcgYWt0eXdvd2FueSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTmEgZWtyYW5pZSBwcnp5YmxpxbxvbmVnbyB3aWRva3UgemfFgm9zemVuaWEgdyBpbnRlcmZlanNpZSBhZ2VudGEsIHBva2F6dWplIGxpbmsgdyBtZW51IGRvIHptaWFueSBzdGFudSBOYWRyesSZZG55L1BvZHJ6xJlkbnkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdOYSBla3JhbmllIE5hZHJ6xJlkbnkvUG9kcnrEmWRueSwgd3l3b8WCYW55bSB6IHByenlibGnFvG9uZWdvIHdpZG9rdSB6Z8WCb3N6ZW5pYSB3IGludGVyZmVqc2llIGFnZW50YSwgcG9rYXp1amUgbGlzdMSZIHdzenlzdGtpY2ggYWdlbnTDs3cgemFhbmdhxbxvd2FueWNoIHcgemfFgm9zemVuaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05hIGVrcmFuaWUgTmFkcnrEmWRueS9Qb2RyesSZZG55LCB3eXdvxYJhbnltIHogcHJ6eWJsacW8b25lZ28gd2lkb2t1IHpnxYJvc3plbmlhIHcgaW50ZXJmZWpzaWUgYWdlbnRhLCBwb2thenVqZSBsaXN0xJkgd3N6eXN0a2ljaCBtb8W8bGl3eWNoIGFnZW50w7N3ICh3c3p5c3RraWNoIGFnZW50w7N3IHogdXByYXduaWVuaWFtaSBkbyBub3RhdGVrIHcga29sZWpjZS96Z8WCb3N6ZW5pdSksIHcgY2VsdSBva3JlxZtsZW5pYSBrdG8gcG93aW5pZW4gYnnEhyBwb2luZm9ybW93YW55IG8gdGVqIG5vdGF0Y2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1Bva2F6dWplIG9wY2plIHByaW9yeXRldHUgemfFgm9zemVuaWEgbmEgZWtyYW5pZSBOYWRyesSZZG55L1BvZHJ6xJlkbnksIHd5d2/FgmFueW0geiBwcnp5YmxpxbxvbmVnbyB3aWRva3UgemfFgm9zemVuaWEgdyBpbnRlcmZlanNpZSBhZ2VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUG9rYXp1amUgcG9sZSB0eXR1xYJ1IG5hIGVrcmFuaWUgTmFkcnrEmWRueS9Qb2RyesSZZG55IHcgc3pjemVnw7PFgmFjaCB6Z8WCb3N6ZW5pYSB3IGludGVmZWpzaWUgYWdlbnRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnWmfFgm9zemVuaWEgcG9kcnrEmWRuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICdUZW4gbW9kdcWCIGFrdHl3dWplIHBvbGUgTmFkcnrEmWRueS9Qb2RyesSZZG55IHcgb2tuaWUgbm93ZWdvIHpnxYJvc3plbmlhIGUtbWFpbCBpIHRlbGVmb25pY3puZWdvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnVydGhlciB2ZXJzaW9ucyBvZiBPVFJTTWFzdGVyU2xhdmUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IE1hc3RlclNsYXZlLid9ID0gJ1pnxYJvc3plbmllIE5hZHJ6xJlkbmUvUG9kcnrEmWRuZSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnR2VyZW5jaWFyIGVzdGFkbyBkZSBNZXN0cmUvRXNjcmF2byBwYXJhICVzJXMlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICdOb3ZvIENoYW1hZG8gTWVzdHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXQnfSA9ICdEZXNmYXplciBDaGFtYWRvIE1lc3RyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXQnfSA9ICdEZXNmYXplciBDaGFtYWRvIEVzY3Jhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJ0VzY3Jhdm8gZGUgJXMlcyVzOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1RpY2tldEJ1bGsvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXRzJ30gPSAnTGltcGFyIENoYW1hZG9zIE1lc3RyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJ0xpbXBhciBDaGFtYWRvcyBFc2NyYXZvcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdNZXN0cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnRXNjcmF2byBkZSAlcyVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ0NoYW1hZG8gTWVzdHJlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAnVG9kb3MgY2hhbWFkb3MgbWVzdHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1RvZG9zIGNoYW1hZG9zIGVzY3Jhdm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXRlIGFkaWNpb25hciBub3RhcyBuYSB0ZWxhICJNYXN0ZXJTbGF2ZSInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiB0aGUgdGlja2V0Lid9ID0gJ0FsdGVyYSBvIGVzdGFkbyBNYXN0ZXJTbGF2ZSBkZSB1bSBjaGFtYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJ0RlZmluZSBvIG5vbWUgZG8gY2FtcG8gZGluw6JtaWNvIHBhcmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBjaGFtYWRvIG1lc3RyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdEZWZpbmUgc2UgdW0gYmxvcXVlaW8gZGUgdGlja2V0IMOpIHJlcXVlcmlkbyBuYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZSAoc2UgbyB0aWNrZXQgYWluZGEgbsOjbyBlc3RpdmVyIGJsb3F1ZWFkbywgbyB0aWNrZXQgc2Vyw6EgYmxvcXVlYWRvIGUgbyBhZ2VudGUgY29ycmVudGUgc2Vyw6EgYXV0b21hdGljYW1lbnRlIGRlZmluaWRvIGNvbW8gbyBzZXUgcHJvcHJpZXTDoXJpbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmUgc2UgYSBub3RhIE1lc3RyZUVzY3Jhdm8gZmljYSB2aXPDrXZlbCBwYXJhIG8gY2xpZW50ZSBjb21vIHBhZHLDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHByw7N4aW1vIGVzdGFkbyBwYWRyw6NvIGRlIHVtIHRpY2tldCBhcMOzcyB1bWEgbm90YSB0ZXIgc2lkbyBhZGljaW9uYWRhLCBuYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgYSBwcmlvcmlkYWRlIHBhZHLDo28gZG8gdGlja2V0IG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gY29tZW50w6FyaW8gZGUgaGlzdMOzcmljbyBwYXJhIGEgYcOnw6NvIGRlIHRlbGEgTWFzdGVyU2xhdmUgZG8gdGlja2V0LCBxdWUgw6kgdXRpbGl6YWRhIHBhcmEgbyBoaXN0w7NyaWNvIGRvIHRpY2tldCBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gdGlwbyBkZSBoaXN0w7NyaWNvIHBhcmEgYSBhw6fDo28gZGEgdGVsYSBNYXN0ZXJTbGF2ZSBkbyB0aWNrZXQsIHF1ZSDDqSB1dGlsaXphZG8gcGFyYSBvIGhpc3TDs3JpY28gZG8gdGlja2V0IG5hIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbyBwcsOzeGltbyBlc3RhZG8gZGUgdW0gdGlja2V0IGFww7NzIHVtYSBub3RhIHRlciBzaWRvIGFkaWNpb25hZGEsIG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJ0hhYmlsaXRhIGFzIGZ1bmNpb25hbGlkYWRlcyBhdmFuw6dhZGFzIGRvIE1hc3RlclNsYXZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBkZSBjaGFtYWRvcyBlc2NyYXZvcyBzZWd1aXJlbSBjaGFtYWRvcyBtZXN0cmUgcGFyYSB1bSBub3ZvIG1lc3RyZSBubyBtb2RvIGF2YW7Dp2FkbyBkbyBNYXN0ZXJTbGF2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBkZSBhbHRlcmFyIGVzdGFkbyBkbyBNYXN0ZXJTbGF2ZSBkZSB1bSBjaGFtYWRvIG5vIG1vZG8gYXZhbsOnYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bmNpb25hbGlkYWRlIGRlIGVuY2FtaW5oYXIgYXJ0aWdvcyBkbyB0aXBvIFwnZm9yd2FyZFwnIGRlIHVtIGNoYW1hZG8gbWVzdHJlIHBhcmEgb3MgY2xpZW50ZXMgZG9zIGNoYW1hZG9zIGVzY3Jhdm9zLiBQb3IgcGFkcsOjbyAoZGVzYWJpbGl0YWRvKSBvcyBhcnRpZ29zIG7Do28gc8OjbyBlbmNhbWluaGFkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciBjaGFuZ2Ugb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBxdWUgbWFudGVtIG8gbGluayBwYWktZmlsaG8gYXDDs3MgYSBhbHRlcmHDp8OjbyBkbyBlc3RhZG8gZGUgTWFzdGVyU2xhdmUgbm8gbW9kbyBhdmFuw6dhZG8gZG8gTWFzdGVyU2xhdmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bmNpb25hbGlkYWRlIGRlIG1hbnRlciBhIGFzc29jaWHDp8OjbyBwYWktZmlsaG8gZGVwb2lzIGRlIGxpbXBhciBvIGVzdGFkbyBkZSBNYXN0ZXJTbGF2ZSBubyBtb2RvIGF2YW7Dp2Fkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bmNpb25hbGlkYWRlIGRlIGxpbXBhciBvIGVzdGFkbyBNYXN0ZXJTbGF2ZSBkZSB1bSBjaGFtYWRvIG5vIG1vZG8gYXZhbsOnYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZSB1bWEgbm90YSBmb3IgYWRpY2lvbmFkYSBwb3IgdW0gYWdlbnRlLCBkZWZpbmUgbyBlc3RhZG8gZG8gdGlja2V0IG5hIHRlbGEgZGUgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ01lc3RyZSAvIEVzY3Jhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICdDaGFtYWRvcyBNZXN0cmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAnTWVzdHJlRXNjcmF2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnTcOzZHVsbyBNZXN0cmVFc2NyYXZvIHBhcmEgZnVuY2lvbmFsaWRhZGUgZGUgYcOnw6NvIGVtIG1hc3NhIGRlIGNoYW1hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBiYWNrZW5kIGRvIHBhaW5lbCBkZSB2aXPDo28gZ2VyYWwgZGUgdGlja2V0cyBtZXN0cmUgZGEgaW50ZXJmYWNlIGRlIGFnZW50ZS4gIkxpbWl0ZSIgw6kgYSBxdWFudGlkYWRlIGRlIHJlZ2lzdHJvcyBleGliaWRhIHBvciBwYWRyw6NvLiAiR3J1cG8iIMOpIHVzYWRvIHBhcmEgcmVzdHJpbmdpciBvIGFjZXNzbyBhbyBwbHVnaW4gKGV4LjogR3J1cG86IGFkbWluO2dydXBvMTtncnVwbzIpLiAiUGFkcsOjbyIgZGV0ZXJtaW5hIHNlIG8gcGx1Z2luIMOpIGhhYmlsaXRhZG8gcG9yIHBhZHLDo28gb3Ugc2UgbyB1c3XDoXJpbyBwcmVjaXNhIGhhYmlsaXTDoS1sbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIMOpIG8gdGVtcG8gZGUgY2FjaGUgZW0gbWludXRvcyBwYXJhIG8gcGx1Z2luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIHNsYXZlIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBiYWNrZW5kIGRvIHBhaW5lbCBkZSB2aXPDo28gZ2VyYWwgZGUgdGlja2V0cyBtZXN0cmUgZGEgaW50ZXJmYWNlIGRlIGFnZW50ZS4gIkxpbWl0ZSIgw6kgYSBxdWFudGlkYWRlIGRlIHJlZ2lzdHJvcyBleGliaWRhIHBvciBwYWRyw6NvLiAiR3J1cG8iIMOpIHVzYWRvIHBhcmEgcmVzdHJpbmdpciBvIGFjZXNzbyBhbyBwbHVnaW4gKGV4LjogR3J1cG86IGFkbWluO2dydXBvMTtncnVwbzIpLiAiUGFkcsOjbyIgZGV0ZXJtaW5hIHNlIG8gcGx1Z2luIMOpIGhhYmlsaXRhZG8gcG9yIHBhZHLDo28gb3Ugc2UgbyB1c3XDoXJpbyBwcmVjaXNhIGhhYmlsaXTDoS1sbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIMOpIG8gdGVtcG8gZGUgY2FjaGUgZW0gbWludXRvcyBwYXJhIG8gcGx1Z2luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnUmVnaXN0cm8gZG8gbcOzZHVsbyBkZSBldmVudG9zIGRlIHRpY2tldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgcmVxdWVyaWRhcyBwYXJhIHVzYXIgYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHRpY2tldCBkZSB1bSB0aWNrZXQgZGV0YWxoYWRvIG5hIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnRGVmaW5lIHNlIG8gY2FtcG8gTWVzdHJlLyBFc2NyYXZvIGRldmUgc2VyIHNlbGVjaW9uYWRvIHBlbG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbyBjb3JwbyBkbyB0ZXh0byBwYWRyw6NvIHBhcmEgbm90YXMgYWRpY2lvbmFkYXMgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYXNzdW50byBwYWRyw6NvIHBhcmEgbm90YXMgYWRpY2lvbmFkYXMgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYWdlbnRlIHJlc3BvbnPDoXZlbCBkbyB0aWNrZXQgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHNlcnZpw6dvIG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlIChUaWNrZXQ6OlNlcnZpY2UgcHJlY2lzYSBzZXIgYXRpdmFkbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHByb3ByaWV0w6FyaW8gZG8gdGlja2V0IG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdGlja2V0IGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnRGVmaW5lIG8gdGlwbyBkbyB0aWNrZXQgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlIChUaWNrZXQ6OlR5cGUgcHJlY2lzYSBzZXIgYXRpdmFkbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXhpYmUgdW0gbGluayBubyBtZW51IHBhcmEgYWx0ZXJhciBvIGVzdGFkbyBNYXN0ZXJTbGF2ZSBkZSB1bSB0aWNrZXQgbmEgdGVsYSBkZSBkZXRhbGhlIGRlIHRpY2tldCBkYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXhpYmUgdW1hIGxpc3RhIGRlIHRvZG9zIG9zIGFnZW50ZXMgZW52b2x2aWRvcyBuZXN0ZSB0aWNrZXQsIG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdGlja2V0IGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXhpYmUgdW1hIGxpc3RhIGRlIHRvZG9zIG9zIGFnZW50ZXMgcG9zc8OtdmVpcyAodG9kb3Mgb3MgYWdlbnRlcyBjb20gcGVybWlzc8OjbyBkZSBub3RhIG5hIGZpbGEvdGlja2V0KSBwYXJhIGRldGVybWluYXIgcXVlbSBkZXZlIHNlciBpbmZvcm1hZG8gc29icmUgZXN0YSBub3RhLCBuYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHRpY2tldCBkZSB1bSB0aWNrZXQgZGV0YWxoYWRvIG5hIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0V4aWJlIGFzIG9ww6fDtWVzIGRlIHByaW9yaWRhZGUgZGUgdGlja2V0IG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdGlja2V0IGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIG8gdMOtdHVsbyBuYSB0ZWxhIGRlIHVtIGNoYW1hZG8gTWVzdHJlRXNjcmF2byBkZSB1bSBjaGFtYWRvIGFiZXJ0byBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnQ2hhbWFkb3MgRXNjcmF2b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgYXJ0aWNsZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdoZXJlIHRoZSByZWFsIG5hbWUgZnJvbSBNYXN0ZXIgdGlja2V0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgb25lIGluIHRoZSBTbGF2ZSB0aWNrZXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgYWN0aXZhdGVzIE1hc3Rlci9TbGF2ZSBmaWVsZCBpbiBuZXcgZW1haWwgYW5kIHBob25lIHRpY2tldCBzY3JlZW5zLid9ID0KICAgICAgICAnRXN0ZSBtw7NkdWxvIGF0aXZhIG8gY2FtcG8gTWVzdHJlL0VzY3Jhdm8gbmFzIHRlbGFzIGRlIG5vdm8gY2hhbWFkbyBmb25lL2UtbWFpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnQ2hhbWFkbyBNZXN0cmVFc2NyYXZvJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnR2VyZW5jaWFyIGVzdGFkbyBkZSBNZXN0cmUvRXNjcmF2byBwYXJhICVzJXMlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL01vZHVsZXMvQWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IE1hc3RlciBUaWNrZXQnfSA9ICdOb3ZvIENoYW1hZG8gTWVzdHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXQnfSA9ICdEZXNmYXplciBDaGFtYWRvIE1lc3RyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXQnfSA9ICdEZXNmYXplciBDaGFtYWRvIEVzY3Jhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzOiAlcyd9ID0gJ0VzY3Jhdm8gZGUgJXMlcyVzOiAlcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL091dHB1dC9IVE1ML1RpY2tldEJ1bGsvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IE1hc3RlciBUaWNrZXRzJ30gPSAnTGltcGFyIENoYW1hZG9zIE1lc3RyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJ0xpbXBhciBDaGFtYWRvcyBFc2NyYXZvcyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdNZXN0cmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnRXNjcmF2byBkZSAlcyVzJXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ0NoYW1hZG8gTWVzdHJlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAnVG9kb3MgY2hhbWFkb3MgbWVzdHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ1RvZG9zIGNoYW1hZG9zIGVzY3Jhdm9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdQZXJtaXRlIGFkaWNpb25hciBub3RhcyBuYSB0ZWxhICJNYXN0ZXJTbGF2ZSInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiB0aGUgdGlja2V0Lid9ID0gJ0FsdGVyYSBvIGVzdGFkbyBNYXN0ZXJTbGF2ZSBkZSB1bSBjaGFtYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJ0RlZmluZSBvIG5vbWUgZG8gY2FtcG8gZGluw6JtaWNvIHBhcmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBjaGFtYWRvIG1lc3RyZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdEZWZpbmUgc2UgdW0gYmxvcXVlaW8gZGUgdGlja2V0IMOpIHJlcXVlcmlkbyBuYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZSAoc2UgbyB0aWNrZXQgYWluZGEgbsOjbyBlc3RpdmVyIGJsb3F1ZWFkbywgbyB0aWNrZXQgc2Vyw6EgYmxvcXVlYWRvIGUgbyBhZ2VudGUgY29ycmVudGUgc2Vyw6EgYXV0b21hdGljYW1lbnRlIGRlZmluaWRvIGNvbW8gbyBzZXUgcHJvcHJpZXTDoXJpbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICdEZWZpbmUgc2UgYSBub3RhIE1lc3RyZUVzY3Jhdm8gZmljYSB2aXPDrXZlbCBwYXJhIG8gY2xpZW50ZSBjb21vIHBhZHLDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHByw7N4aW1vIGVzdGFkbyBwYWRyw6NvIGRlIHVtIHRpY2tldCBhcMOzcyB1bWEgbm90YSB0ZXIgc2lkbyBhZGljaW9uYWRhLCBuYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCB0aWNrZXQgcHJpb3JpdHkgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgYSBwcmlvcmlkYWRlIHBhZHLDo28gZG8gdGlja2V0IG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gY29tZW50w6FyaW8gZGUgaGlzdMOzcmljbyBwYXJhIGEgYcOnw6NvIGRlIHRlbGEgTWFzdGVyU2xhdmUgZG8gdGlja2V0LCBxdWUgw6kgdXRpbGl6YWRhIHBhcmEgbyBoaXN0w7NyaWNvIGRvIHRpY2tldCBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gdGlwbyBkZSBoaXN0w7NyaWNvIHBhcmEgYSBhw6fDo28gZGEgdGVsYSBNYXN0ZXJTbGF2ZSBkbyB0aWNrZXQsIHF1ZSDDqSB1dGlsaXphZG8gcGFyYSBvIGhpc3TDs3JpY28gZG8gdGlja2V0IG5hIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbyBwcsOzeGltbyBlc3RhZG8gZGUgdW0gdGlja2V0IGFww7NzIHVtYSBub3RhIHRlciBzaWRvIGFkaWNpb25hZGEsIG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJ0hhYmlsaXRhIGFzIGZ1bmNpb25hbGlkYWRlcyBhdmFuw6dhZGFzIGRvIE1hc3RlclNsYXZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBkZSBjaGFtYWRvcyBlc2NyYXZvcyBzZWd1aXJlbSBjaGFtYWRvcyBtZXN0cmUgcGFyYSB1bSBub3ZvIG1lc3RyZSBubyBtb2RvIGF2YW7Dp2FkbyBkbyBNYXN0ZXJTbGF2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBkZSBhbHRlcmFyIGVzdGFkbyBkbyBNYXN0ZXJTbGF2ZSBkZSB1bSBjaGFtYWRvIG5vIG1vZG8gYXZhbsOnYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bmNpb25hbGlkYWRlIGRlIGVuY2FtaW5oYXIgYXJ0aWdvcyBkbyB0aXBvIFwnZm9yd2FyZFwnIGRlIHVtIGNoYW1hZG8gbWVzdHJlIHBhcmEgb3MgY2xpZW50ZXMgZG9zIGNoYW1hZG9zIGVzY3Jhdm9zLiBQb3IgcGFkcsOjbyAoZGVzYWJpbGl0YWRvKSBvcyBhcnRpZ29zIG7Do28gc8OjbyBlbmNhbWluaGFkb3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciBjaGFuZ2Ugb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnSGFiaWxpdGEgYSBmdW5jaW9uYWxpZGFkZSBxdWUgbWFudGVtIG8gbGluayBwYWktZmlsaG8gYXDDs3MgYSBhbHRlcmHDp8OjbyBkbyBlc3RhZG8gZGUgTWFzdGVyU2xhdmUgbm8gbW9kbyBhdmFuw6dhZG8gZG8gTWFzdGVyU2xhdmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bmNpb25hbGlkYWRlIGRlIG1hbnRlciBhIGFzc29jaWHDp8OjbyBwYWktZmlsaG8gZGVwb2lzIGRlIGxpbXBhciBvIGVzdGFkbyBkZSBNYXN0ZXJTbGF2ZSBubyBtb2RvIGF2YW7Dp2Fkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdIYWJpbGl0YSBhIGZ1bmNpb25hbGlkYWRlIGRlIGxpbXBhciBvIGVzdGFkbyBNYXN0ZXJTbGF2ZSBkZSB1bSBjaGFtYWRvIG5vIG1vZG8gYXZhbsOnYWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdTZSB1bWEgbm90YSBmb3IgYWRpY2lvbmFkYSBwb3IgdW0gYWdlbnRlLCBkZWZpbmUgbyBlc3RhZG8gZG8gdGlja2V0IG5hIHRlbGEgZGUgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJ01lc3RyZSAvIEVzY3Jhdm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICdDaGFtYWRvcyBNZXN0cmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAnTWVzdHJlRXNjcmF2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnTcOzZHVsbyBNZXN0cmVFc2NyYXZvIHBhcmEgZnVuY2lvbmFsaWRhZGUgZGUgYcOnw6NvIGVtIG1hc3NhIGRlIGNoYW1hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBiYWNrZW5kIGRvIHBhaW5lbCBkZSB2aXPDo28gZ2VyYWwgZGUgdGlja2V0cyBtZXN0cmUgZGEgaW50ZXJmYWNlIGRlIGFnZW50ZS4gIkxpbWl0ZSIgw6kgYSBxdWFudGlkYWRlIGRlIHJlZ2lzdHJvcyBleGliaWRhIHBvciBwYWRyw6NvLiAiR3J1cG8iIMOpIHVzYWRvIHBhcmEgcmVzdHJpbmdpciBvIGFjZXNzbyBhbyBwbHVnaW4gKGV4LjogR3J1cG86IGFkbWluO2dydXBvMTtncnVwbzIpLiAiUGFkcsOjbyIgZGV0ZXJtaW5hIHNlIG8gcGx1Z2luIMOpIGhhYmlsaXRhZG8gcG9yIHBhZHLDo28gb3Ugc2UgbyB1c3XDoXJpbyBwcmVjaXNhIGhhYmlsaXTDoS1sbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIMOpIG8gdGVtcG8gZGUgY2FjaGUgZW0gbWludXRvcyBwYXJhIG8gcGx1Z2luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIHNsYXZlIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBiYWNrZW5kIGRvIHBhaW5lbCBkZSB2aXPDo28gZ2VyYWwgZGUgdGlja2V0cyBtZXN0cmUgZGEgaW50ZXJmYWNlIGRlIGFnZW50ZS4gIkxpbWl0ZSIgw6kgYSBxdWFudGlkYWRlIGRlIHJlZ2lzdHJvcyBleGliaWRhIHBvciBwYWRyw6NvLiAiR3J1cG8iIMOpIHVzYWRvIHBhcmEgcmVzdHJpbmdpciBvIGFjZXNzbyBhbyBwbHVnaW4gKGV4LjogR3J1cG86IGFkbWluO2dydXBvMTtncnVwbzIpLiAiUGFkcsOjbyIgZGV0ZXJtaW5hIHNlIG8gcGx1Z2luIMOpIGhhYmlsaXRhZG8gcG9yIHBhZHLDo28gb3Ugc2UgbyB1c3XDoXJpbyBwcmVjaXNhIGhhYmlsaXTDoS1sbyBtYW51YWxtZW50ZS4gIkNhY2hlVFRMTG9jYWwiIMOpIG8gdGVtcG8gZGUgY2FjaGUgZW0gbWludXRvcyBwYXJhIG8gcGx1Z2luLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnUmVnaXN0cm8gZG8gbcOzZHVsbyBkZSBldmVudG9zIGRlIHRpY2tldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gdXNlIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUGVybWlzc8O1ZXMgcmVxdWVyaWRhcyBwYXJhIHVzYXIgYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHRpY2tldCBkZSB1bSB0aWNrZXQgZGV0YWxoYWRvIG5hIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnRGVmaW5lIHNlIG8gY2FtcG8gTWVzdHJlLyBFc2NyYXZvIGRldmUgc2VyIHNlbGVjaW9uYWRvIHBlbG8gYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdEZWZpbmUgbyBjb3JwbyBkbyB0ZXh0byBwYWRyw6NvIHBhcmEgbm90YXMgYWRpY2lvbmFkYXMgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYXNzdW50byBwYWRyw6NvIHBhcmEgbm90YXMgYWRpY2lvbmFkYXMgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRGVmaW5lIG8gYWdlbnRlIHJlc3BvbnPDoXZlbCBkbyB0aWNrZXQgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBzZXJ2aWNlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlNlcnZpY2UgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHNlcnZpw6dvIG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlIChUaWNrZXQ6OlNlcnZpY2UgcHJlY2lzYSBzZXIgYXRpdmFkbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RlZmluZSBvIHByb3ByaWV0w6FyaW8gZG8gdGlja2V0IG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdGlja2V0IGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnRGVmaW5lIG8gdGlwbyBkbyB0aWNrZXQgbmEgdGVsYSBNYXN0ZXJTbGF2ZSBkZSB0aWNrZXQgZGUgdW0gdGlja2V0IGRldGFsaGFkbyBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlIChUaWNrZXQ6OlR5cGUgcHJlY2lzYSBzZXIgYXRpdmFkbykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXhpYmUgdW0gbGluayBubyBtZW51IHBhcmEgYWx0ZXJhciBvIGVzdGFkbyBNYXN0ZXJTbGF2ZSBkZSB1bSB0aWNrZXQgbmEgdGVsYSBkZSBkZXRhbGhlIGRlIHRpY2tldCBkYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXhpYmUgdW1hIGxpc3RhIGRlIHRvZG9zIG9zIGFnZW50ZXMgZW52b2x2aWRvcyBuZXN0ZSB0aWNrZXQsIG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdGlja2V0IGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRXhpYmUgdW1hIGxpc3RhIGRlIHRvZG9zIG9zIGFnZW50ZXMgcG9zc8OtdmVpcyAodG9kb3Mgb3MgYWdlbnRlcyBjb20gcGVybWlzc8OjbyBkZSBub3RhIG5hIGZpbGEvdGlja2V0KSBwYXJhIGRldGVybWluYXIgcXVlbSBkZXZlIHNlciBpbmZvcm1hZG8gc29icmUgZXN0YSBub3RhLCBuYSB0ZWxhIE1hc3RlclNsYXZlIGRlIHRpY2tldCBkZSB1bSB0aWNrZXQgZGV0YWxoYWRvIG5hIGludGVyZmFjZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0V4aWJlIGFzIG9ww6fDtWVzIGRlIHByaW9yaWRhZGUgZGUgdGlja2V0IG5hIHRlbGEgTWFzdGVyU2xhdmUgZGUgdGlja2V0IGRlIHVtIHRpY2tldCBkZXRhbGhhZG8gbmEgaW50ZXJmYWNlIGRlIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnTW9zdHJhIG8gdMOtdHVsbyBuYSB0ZWxhIGRlIHVtIGNoYW1hZG8gTWVzdHJlRXNjcmF2byBkZSB1bSBjaGFtYWRvIGFiZXJ0byBuYSBpbnRlcmZhY2UgZGUgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnQ2hhbWFkb3MgRXNjcmF2b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIHRoZSBkaWZmZXJlbnQgYXJ0aWNsZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHdoZXJlIHRoZSByZWFsIG5hbWUgZnJvbSBNYXN0ZXIgdGlja2V0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgb25lIGluIHRoZSBTbGF2ZSB0aWNrZXQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgYWN0aXZhdGVzIE1hc3Rlci9TbGF2ZSBmaWVsZCBpbiBuZXcgZW1haWwgYW5kIHBob25lIHRpY2tldCBzY3JlZW5zLid9ID0KICAgICAgICAnRXN0ZSBtw7NkdWxvIGF0aXZhIG8gY2FtcG8gTWVzdHJlL0VzY3Jhdm8gbmFzIHRlbGFzIGRlIG5vdm8gY2hhbWFkbyBmb25lL2UtbWFpbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnQ2hhbWFkbyBNZXN0cmVFc2NyYXZvJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0YHRgtCw0YLRg9GB0L7QvCDQk9C70LDQstC90LDRjy/QktC10LTQvtC80LDRjyDQtNC70Y8gJXMlcyVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ9Cd0L7QstCw0Y8gTWFzdGVyINC30LDRj9Cy0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAn0KHQvdGP0YLRjCDQt9C90LDRh9C10L3QuNC1IE1hc3RlciDQt9Cw0Y/QstC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0J30gPSAn0KHQvdGP0YLRjCDQt9C90LDRh9C10L3QuNC1IFNsYXZlINC30LDRj9Cy0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAn0JLQtdC00L7QvNCw0Y8g0L7RgiAlcyVzJXM6ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICfQo9Cx0YDQsNGC0Ywg0LPQu9Cw0LLQvdGL0LUg0LfQsNGP0LLQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldHMnfSA9ICfQo9Cx0YDQsNGC0Ywg0LLQtdC00L7QvNGL0LUg0LfQsNGP0LLQutC4JzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ9CT0LvQsNCy0L3Ri9C5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIG9mICVzJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAn0JPQu9Cw0LLQvdCw0Y8g0LfQsNGP0LLQutCwJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAn0JLRgdC1INCz0LvQsNCy0L3Ri9C1INC30LDRj9Cy0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ9CS0YHQtSDQstC10LTQvtC80YvQtSDQt9Cw0Y/QstC60LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0L7Qt9Cy0L7Qu9GP0LXRgiDQtNC+0LHQsNCy0LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQvdCwINGN0LrRgNCw0L3QtSBNYXN0ZXJTbGF2ZSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICfQmNC30LzQtdC90LjRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSBNYXN0ZXJTbGF2ZSDQtNC70Y8g0Y3RgtC+0Lkg0LfQsNGP0LLQutC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJ9CX0LDQtNCw0LXRgiDQuNC80Y8g0LTQuNC90LDQvNC40YfQtdGB0LrQvtCz0L4g0L/QvtC70Y8g0LTQu9GPINGE0YPQvdC60YbQuNC4INCz0LvQsNCy0L3QvtC5INC30LDRj9Cy0LrQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICfQotGA0LXQsdGD0LXRgtGB0Y8g0LvQuCDQsdC70L7QutC40YDQvtCy0LrQsCDQt9Cw0Y/QstC60Lgg0L/RgNC4INC/0YDQuNC80LXQvdC10L3QuNC4INC+0L/RhtC40LggTWFzdGVyU2xhdmUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwICjQtdGB0LvQuCDQt9Cw0Y/QstC60LAg0LXRidC1INC90LUg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90LAsINC+0L3QsCDQsdC70L7QutC40YDRg9C10YLRgdGPINC4INGC0LXQutGD0YnQuNC5INCw0LPQtdC90YIg0YHRgtCw0L3QvtCy0LjRgtGB0Y8g0LXQtSDQktC70LDQtNC10LvRjNGG0LXQvCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0LvQtdC00YPRjtGJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LTQu9GPINC30LDRj9Cy0LrQuCDQv9C+0YHQu9C1INC00L7QsdCw0LLQu9C10L3QuNGPINC30LDQvNC10YLQutC4INC90LAg0Y3QutGA0LDQvdC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQv9GA0Lgg0LXQtSDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRg9C80LDQu9GH0LjQstCw0LXQvNGL0Lkg0L/RgNC40L7RgNC40YLQtdGCINC30LDRj9Cy0LrQuCDQvdCwINGN0LrRgNCw0L3QtSBNYXN0ZXJTbGF2ZSDQv9GA0Lgg0L/RgNC+0YHQvNC+0YLRgNC1INC30LDRj9Cy0LrQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YLQtdC60YHRgiDQutC+0LzQvNC10L3RgtCw0YDQuNGPINCyINC30LDQv9C40YHQuCDQuNGB0YLQvtGA0LjQuCDQv9GA0Lgg0LLRi9C30L7QstC1IE1hc3RlclNsYXZlINGN0LrRgNCw0L3QsCAsINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDRgtC40L8g0LfQsNC/0LjRgdC4INC40YHRgtC+0YDQuNC4INC/0YDQuCDQstGL0LfQvtCy0LUgTWFzdGVyU2xhdmUg0Y3QutGA0LDQvdCwICwg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0LvQtdC00YPRjtGJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LTQu9GPINC30LDRj9Cy0LrQuCDQv9C+0YHQu9C1INC00L7QsdCw0LLQu9C10L3QuNGPINC30LDQvNC10YLQutC4INC90LAg0Y3QutGA0LDQvdC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQv9GA0Lgg0LXQtSDQv9GA0L7RgdC80L7RgtGA0LUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJ9CS0LrQu9GO0YfQsNC10YIg0YDQsNGB0YjQuNGA0LXQvdC90YvQtSDQstC+0LfQvNC+0LbQvdC+0YHRgtC4INC00LvRjyBNYXN0ZXJTbGF2ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0aGF0IHNsYXZlIHRpY2tldHMgZm9sbG93IHRoZSBtYXN0ZXIgdGlja2V0IHRvIGEgbmV3IG1hc3RlciBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ9CS0LrQu9GO0YfQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQv9C10YDQtdC00LDRh9C4INCy0LXQtNC+0LzRi9GFINC30LDRj9Cy0L7QuiDQs9C70LDQstC90L7QuSDQt9Cw0Y/QstC60Lgg0Log0L3QvtCy0L7QuSDQs9C70LDQstC90L7QuSDQsiDRgNCw0YHRiNC40YDQtdC90L3QvtC8INGA0LXQttC40LzQtSBNYXN0ZXJTbGF2ZSAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ9CS0LrQu9GO0YfQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPIE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQsiDRgNCw0YHRiNC40YDQtdC90L3QvtC8INGA0LXQttC40LzQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyBvZiBhIG1hc3RlciB0aWNrZXQgdG8gdGhlIGN1c3RvbWVycyBvZiB0aGUgc2xhdmUgdGlja2V0cy4gQnkgZGVmYXVsdCAoZGlzYWJsZWQpIGl0IHdpbGwgbm90IGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIHRvIHRoZSBzbGF2ZSB0aWNrZXRzLid9ID0KICAgICAgICAn0JLQutC70Y7Rh9Cw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC/0LXRgNC10YHRi9C70LrQuCDRgdC+0L7QsdGJ0LXQvdC40Lkv0LfQsNC80LXRgtC+0Log0L/RgNC4INC/0LXRgNC10YHRi9C70LrQtSDQs9C70LDQstC90L7QuSDQt9Cw0Y/QstC60LggINC60LvQuNC10L3RgtCw0Lwg0LLQtdC00L7QvNGL0YUg0LfQsNGP0LLQvtC6LiDQn9C+INGD0LzQvtC70YfQsNC90LjRjiAo0LLRi9C60LvRjtGH0LXQvdC+KSDQsiDQstC10LTQvtC80YvQtSDQt9Cw0Y/QstC60Lgg0L3QuNGH0LXQs9C+INC90LUg0L/QtdGA0LXRgdGL0LvQsNC10YLRgdGPLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ9CS0LrQu9GO0YfQsNC10YIg0LLQvtC30LzQvtC20L3QvtGB0YLRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YHQstGP0LfRjCDRgNC+0LTQuNGC0LXQu9GMLdC/0L7RgtC+0LzQvtC6INC00LvRjyDQt9Cw0Y/QstC+0LosINC/0L7RgdC70LUg0LjQt9C80LXQvdC10L3QuNGPINC/0YDQuNC30L3QsNC60LAgTWFzdGVyU2xhdmUg0LIg0YDQsNGB0YjQuNGA0LXQvdC90L7QvCDRgNC10LbQuNC80LUgTWFzdGVyU2xhdmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICfQktC60LvRjtGH0LDQtdGCINCy0L7Qt9C80L7QttC90L7RgdGC0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGB0LLRj9C30Ywg0YDQvtC00LjRgtC10LvRjC3Qv9C+0YLQvtC80L7QuiDQtNC70Y8g0LfQsNGP0LLQvtC6LCDQv9C+0YHQu9C1INGB0L3Rj9GC0LjRjyDQv9GA0LjQt9C90LDQutCwIE1hc3RlclNsYXZlINCyINGA0LDRgdGI0LjRgNC10L3QvdC+0Lwg0YDQtdC20LjQvNC1IE1hc3RlclNsYXZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIHVuc2V0IHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINGB0LHRgNC+0YHQuNGC0Ywg0YPRgdGC0LDQvdC+0LLQu9C10L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQsiDRgNCw0YHRiNC40YDQtdC90L3QvtC8INGA0LXQttC40LzQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgYSBub3RlIGlzIGFkZGVkIGJ5IGFuIGFnZW50LCBzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0JXRgdC70Lgg0YHQvtC+0LHRidC10L3QuNC1L9C30LDQvNC10YLQutCwINC00L7QsdCw0LLQu9C10L3QsCDQsNCz0LXQvdGC0L7QvCwg0LfQsNC00LDQtdGCINGB0L7RgdGC0L7Rj9C90LjQtSDQt9Cw0Y/QstC60Lgg0L3QsCDRjdC60YDQsNC90LUgTWFzdGVyU2xhdmUgINCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICdNYXN0ZXIgLyBTbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJ9CT0LvQsNCy0L3Ri9C1INC30LDRj9Cy0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJ01hc3RlclNsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICdNYXN0ZXJTbGF2ZSDQvNC+0LTRg9C70Ywg0LTQu9GPINGE0YPQvdC60YbQuNC4INCc0LDRgdGB0L7QstC+0LUg0LTQtdC50YHRgtCy0LjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBtYXN0ZXIgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgNCw0LfQtNC10LvQsCDQlNCw0LnQtNC20LXRgdGC0LAg0YEg0LjQvdGE0L7RgNC80LDRhtC40LXQuSDQviBtYXN0ZXIg0LfQsNGP0LLQutCw0YUg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiAiR3JvdXAiINC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQtNC70Y8g0L7Qs9GA0LDQvdC40YfQtdC90LjRjyDQtNC+0YHRgtGD0L/QsCDQuiDRgNCw0LfQtNC10LvRgyAo0L3QsNC/0YDQuNC80LXRgCwgR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIC0g0LfQsNC00LDQtdGCLCDQsdGD0LTQtdGCINC70Lgg0YDQsNC30LTQtdC7INC00L7RgdGC0YPQv9C10L0g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LjQu9C4INCw0LPQtdC90YIg0LTQvtC70LbQtdC9INCw0LrRgtC40LLQuNGA0L7QstCw0YLRjCDQtdCz0L4g0LLRgNGD0YfQvdGD0Y4uICJDYWNoZVRUTExvY2FsIiAtINCy0YDQtdC80Y8g0L7QsdC90L7QstC70LXQvdC40Y8g0LrRjdGI0LAg0LIg0LzQuNC90YPRgtCw0YUg0LTQu9GPINGN0YLQvtCz0L4g0YDQsNC30LTQtdC70LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgNCw0LfQtNC10LvQsCDQlNCw0LnQtNC20LXRgdGC0LAg0YEg0LjQvdGE0L7RgNC80LDRhtC40LXQuSDQviBzbGF2ZSDQt9Cw0Y/QstC60LDRhSDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuICJHcm91cCIg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyDQvtCz0YDQsNC90LjRh9C10L3QuNGPINC00L7RgdGC0YPQv9CwINC6INGA0LDQt9C00LXQu9GDICjQvdCw0L/RgNC40LzQtdGALCBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgLSDQt9Cw0LTQsNC10YIsINCx0YPQtNC10YIg0LvQuCDRgNCw0LfQtNC10Lsg0LTQvtGB0YLRg9C/0LXQvSDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQuNC70Lgg0LDQs9C10L3RgiDQtNC+0LvQttC10L0g0LDQutGC0LjQstC40YDQvtCy0LDRgtGMINC10LPQviDQstGA0YPRh9C90YPRji4gIkNhY2hlVFRMTG9jYWwiIC0g0LLRgNC10LzRjyDQvtCx0L3QvtCy0LvQtdC90LjRjyDQutGN0YjQsCDQsiDQvNC40L3Rg9GC0LDRhSDQtNC70Y8g0Y3RgtC+0LPQviDRgNCw0LfQtNC10LvQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ9Cg0LXQs9C40YHRgtGA0LDRhtC40Y8g0LzQvtC00YPQu9GPINC+0LHRgNCw0LHQvtGC0LrQuCDRgdC+0LHRi9GC0LjQuSDQt9Cw0Y/QstC60LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQsNCy0LAsINGC0YDQtdCx0YPQtdC80YvQtSDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YTRg9C90LrRhtC40LggTWFzdGVyU2xhdmUg0LfQsNGP0LLQvtC6INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyBpZiBNYXN0ZXIgLyBTbGF2ZSBmaWVsZCBtdXN0IGJlIHNlbGVjdGVkIGJ5IHRoZSBhZ2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBib2R5IHRleHQgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YLQtdC60YHRgiDRgdC+0L7QsdGJ0LXQvdC40Y8g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0L/RgNC4INC00L7QsdCw0LLQu9C10L3QuNC4INGB0L7QvtCx0YnQtdC90LjRjyDQvdCwINGN0LrRgNCw0L3QtSBNYXN0ZXJTbGF2ZSDQt9Cw0Y/QstC60Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIg0YLQtdC80YMg0YHQvtC+0LHRidC10L3QuNGPINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC/0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCDRgdC+0L7QsdGJ0LXQvdC40Y8g0L3QsCDRjdC60YDQsNC90LUgTWFzdGVyU2xhdmUg0LfQsNGP0LLQutC4INCyINC40L3RgtC10YDRhNC10LnRgdC1INCw0LPQtdC90YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CX0LDQtNCw0LXRgiDQntGC0LLQtdGC0YHRgtCy0LXQvdC90L7Qs9C+INC30LAg0LfQsNGP0LLQutGDINC90LAg0Y3QutGA0LDQvdC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAn0JfQsNC00LDQtdGCINGB0LXRgNCy0LjRgSDQtNC70Y8g0LfQsNGP0LLQutC4INC90LAg0Y3QutGA0LDQvdC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuICjQn9Cw0YDQsNC80LXRgtGAIFRpY2tldDo6U2VydmljZSDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0LLQutC70Y7Rh9C10L0pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0JLQu9Cw0LTQtdC70YzRhtCwINC30LDRj9Cy0LrQuCDQvdCwINGN0LrRgNCw0L3QtSBNYXN0ZXJTbGF2ZSDQt9Cw0Y/QstC60Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YLQuNC/INC30LDRj9Cy0LrQuCDQvdCwINGN0LrRgNCw0L3QtSBNYXN0ZXJTbGF2ZSDQt9Cw0Y/QstC60Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiAo0J/QsNGA0LDQvNC10YLRgCBUaWNrZXQ6OlNlcnZpY2Ug0LTQvtC70LbQtdC9INCx0YvRgtGMINCy0LrQu9GO0YfQtdC9KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQl9Cw0LTQsNC10YIg0YHRgdGL0LvQutGDINCyINC80LXQvdGOINC00LvRjyDQuNC30LzQtdC90LXQvdC40Y8gTWFzdGVyU2xhdmUg0YHRgtCw0YLRg9GB0LAgINC90LAg0Y3QutGA0LDQvdC1INC/0YDQvtGB0LzQvtGC0YDQsCDQt9Cw0Y/QstC60Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0YHQv9C40YHQvtC6INCy0YHQtdGFINC/0YDQuNCy0LvQtdC60LDQtdC80YvRhSDQsNCz0LXQvdGC0L7QsiDQv9C+INGN0YLQvtC5INC30LDRj9Cy0LrQtSDQvdCwINGN0LrRgNCw0L3QtSBNYXN0ZXJTbGF2ZSDQt9Cw0Y/QstC60Lgg0LIg0LjQvdGC0LXRgNGE0LXQudGB0LUg0LDQs9C10L3RgtCwLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/QvtC60LDQt9GL0LLQsNC10YIg0YHQv9C40YHQvtC6INCy0YHQtdGFINC00L7RgdGC0YPQv9C90YvRhSDQsNCz0LXQvdGC0L7QsiAo0LLRgdC10YUg0LDQs9C10L3RgtC+0LIg0YEg0L/RgNCw0LLQsNC80Lggbm90ZSDQtNC70Y8g0L7Rh9C10YDQtdC00Lgv0LfQsNGP0LLQutC4KSwg0YfRgtC+0LHRiyDQt9Cw0LTQsNGC0Ywg0LrQvtCz0L4g0L3Rg9C20L3QviDQuNC90YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQvtCxINGN0YLQvtC5INC30LDQvNC10YLQutC1INC90LAg0Y3QutGA0LDQvdC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQlNCw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC40LfQvNC10L3QuNGC0Ywg0L/RgNC40L7RgNC40YLQtdGCINC90LAg0Y3QutGA0LDQvdC1IE1hc3RlclNsYXZlINC30LDRj9Cy0LrQuCDQsiDQuNC90YLQtdGA0YTQtdC50YHQtSDQsNCz0LXQvdGC0LAuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJ9CS0LXQtNC+0LzRi9C1INC30LDRj9Cy0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICfQrdGC0L7RgiDQvNC+0LTRg9C70Ywg0LLQutC70Y7Rh9Cw0LXRgiDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINCy0YvQsdC+0YDQsCBtYXN0ZXIvc2xhdmUg0L7Qv9GG0LjQuCDQvdCwINGN0LrRgNCw0L3QtSDRgdC+0LfQtNCw0L3QuNGPINC30LDRj9Cy0LrQuCwg0L3QsCDQvtGB0L3QvtCy0LUg0YLQtdC70LXRhNC+0L3QvdC+0LPQviDQt9Cy0L7QvdC60LAg0LjQu9C4INC/0LjRgdGM0LzQsCDQutC70LjQtdC90YLQsCDQsNCz0LXQvdGC0L7QvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAn0JfQsNGP0LLQutCwIE1hc3RlclNsYXZlJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzcl9DeXJsX09UUlNNYXN0ZXJTbGF2ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGlja2V0TWFzdGVyU2xhdmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBNYXN0ZXIvU2xhdmUgc3RhdHVzIGZvciAlcyVzJXMnfSA9ICfQo9C/0YDQsNCy0ZnQsNGa0LUg0YHRgtCw0YLRg9GB0L7QvCDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90Lgg0LfQsCAlcyVzJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50VGlja2V0TWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBNYXN0ZXIgVGlja2V0J30gPSAn0J3QvtCy0Lgg0LPQu9Cw0LLQvdC4INGC0LjQutC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldCd9ID0gJ9Ce0L/QvtC30L7QstC4INC/0L7QtNC10YjQsNCy0LDRmtC1INCz0LvQsNCy0L3QvtCzINGC0LjQutC10YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXQnfSA9ICfQntC/0L7Qt9C+0LLQuCDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQt9Cw0LLQuNGB0L3QvtCzINGC0LjQutC10YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAn0JfQsNCy0LjRgdC90Lgg0L7QtCAlcyVzJXM6ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICfQntC/0L7Qt9C+0LLQuCDQv9C+0LTQtdGI0LDQstCw0ZrQtSDQs9C70LDQstC90LjRhSDRgtC40LrQtdGC0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJ9Ce0L/QvtC30L7QstC4INC/0L7QtNC10YjQsNCy0LDRmtC1INC30LDQstC40YHQvdC40YUg0YLQuNC60LXRgtCwJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ9CT0LvQsNCy0L3Qvic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICfQl9Cw0LLQuNGB0L3QuCDQvtC0ICVzJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAn0JPQu9Cw0LLQvdC4INGC0LjQutC10YInOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgbWFzdGVyIHRpY2tldHMnfSA9ICfQodCy0Lgg0LPQu9Cw0LLQvdC4INGC0LjQutC10YLQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ9Ch0LLQuCDQt9Cw0LLQuNGB0L3QuCDRgtC40LrQtdGC0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9CU0L7Qt9Cy0L7RmdCw0LLQsCDQtNC+0LTQsNCy0LDRmtC1INCx0LXQu9C10YjQutC4INC90LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3RgyDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINGC0LjQutC10YLQsCDQvtC/0LXRgNCw0YLQtdGA0YHQutC+0LMg0LjQvdGC0LXRgNGE0LXRmNGB0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICfQn9GA0L7QvNC10L3QuCDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90Lgg0YHRgtCw0YLRg9GBINGC0LjQutC10YLQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBkeW5hbWljIGZpZWxkIG5hbWUgZm9yIG1hc3RlciB0aWNrZXQgZmVhdHVyZS4nfSA9ICfQlNC10YTQuNC90LjRiNC1INC00LjQvdCw0LzQuNGH0LrQuCDQvdCw0LfQuNCyINC/0L7RmdCwINC30LAg0YTRg9C90LrRhtC40ZjRgyDQs9C70LDQstC90L7QsyDRgtC40LrQtdGC0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQtNCwINC70Lgg0ZjQtSDQv9C+0YLRgNC10LHQvdC+INC30LDQutGZ0YPRh9Cw0YLQuCDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90Lgg0LXQutGA0LDQvSDRgtC40LrQtdGC0LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAgKNCw0LrQviDRgtC40LrQtdGCINGY0L7RiCDRg9Cy0LXQuiDQvdC40ZjQtSDQt9Cw0LrRmdGD0YfQsNC9LCDRgtC40LrQtdGCINGb0LUg0LTQvtCx0LjRgtC4INGB0YLQsNGC0YPRgSDQt9Cw0LrRmdGD0YfQsNC9INC4INGC0YDQtdC90YPRgtC90Lgg0L7Qv9C10YDQsNGC0LXRgCDRm9C1INCx0LjRgtC4INCw0YPRgtC+0LzQsNGC0YHQutC4INC/0L7RgdGC0LDQstGZ0LXQvSDQutCw0L4g0LLQu9Cw0YHQvdC40LopLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn0JTQtdGE0LjQvdC40YjQtSDRg9C60L7Qu9C40LrQviDRmNC1IE1hc3RlclNsYXZlINC90LDQv9C+0LzQtdC90LAg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0LLQuNC00ZnQuNCy0LAg0LfQsCDQutC70LjRmNC10L3RgiDQutC+0YDQuNGB0L3QuNC60LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0L3QsNGA0LXQtNC90Lgg0YHRgtCw0YLRg9GBINGC0LjQutC10YLQsCDQv9C+0YHQu9C1INC00L7QtNCw0LLQsNGZ0LAg0LHQtdC70LXRiNC60LUsINC90LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3RgyDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QuCDQv9GA0LjQvtGA0LjRgtC10YIg0YLQuNC60LXRgtCwINC90LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrQsNC90YMg0LTQtdGC0LDRmdC90L7QsyDQv9GA0LjQutCw0LfQsCDRgtC40LrQtdGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQutC+0LzQtdC90YLQsNGAINC30LAg0LjRgdGC0L7RgNC40ZjQsNGCINC90LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3RgdC60L7RmCDQsNC60YbQuNGY0LgsINGI0YLQviDRm9C1INGB0LUg0LrQvtGA0LjRgdGC0LjRgtC4INC30LAg0LjRgdGC0L7RgNC40ZjQsNGCINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0YLQuNC/INC40YHRgtC+0YDQuNGY0LDRgtCwINC30LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3RgdC60YMg0LDQutGG0LjRmNGDLCDRiNGC0L4g0ZvQtSDRgdC1INC60L7RgNC40YHRgtC40YLQuCDQt9CwINC40YHRgtC+0YDQuNGY0LDRgiDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC90LDRgNC10LTQvdC4INGB0YLQsNGC0YPRgSDRgtC40LrQtdGC0LAg0L/QvtGB0LvQtSDQtNC+0LTQsNCy0LDRmdCwINCx0LXQu9C10YjQutC1LCDQvdCwINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDQtdC60YDQsNC90YMg0LTQtdGC0LDRmdC90L7QsyDQv9GA0LjQutCw0LfQsCDRgtC40LrQtdGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJ9CQ0LrRgtC40LLQuNGA0LAg0L3QsNC/0YDQtdC00L3QuCDQtNC10L4g0YTRg9C90LrRhtC40ZjQtSDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICfQkNC60YLQuNCy0LjRgNCw0ZrQtSDRgdCy0L7RmNGB0YLQstCwINC00LAg0LfQsNCy0LjRgdC90Lgg0YLQuNC60LXRgiDQv9GA0LDRgtC4INCz0LvQsNCy0L3QuCDQvdCwINC90L7QstC4INCz0LvQsNCy0L3QuCDRgyDQvdCw0L/RgNC10LTQvdC+0Lwg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC80L7QtNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICfQkNC60YLQuNCy0LjRgNCw0ZrQtSDRhNGD0L3QutGG0LjRmNC1INC30LAg0L/RgNC+0LzQtdC90YMg0YHRgtCw0ZrQsCDRgtC40LrQtdGC0LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4ICDRgyDQvdCw0L/RgNC10LTQvdC+0Lwg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC80L7QtNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICfQkNC60YLQuNCy0LjRgNCw0ZrQtSDRgdCy0L7RmNGB0YLQstCwINC30LAg0L/RgNC+0YHQu9C10ZLQuNCy0LDRmtC1INGH0LvQsNC90LDQutCwINGC0LjQv9CwICLQv9GA0L7RgdC70LXQtNC4IiDQs9C70LDQstC90L7QsyDRgtC40LrQtdGC0LAg0LrQvtGA0LjRgdC90LjRhtC40LzQsCDQt9Cw0LLQuNGB0L3QuNGFINGC0LjQutC10YLQsC4g0J/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0ZjQtSAo0LjRgdC60ZnRg9GH0LXQvdC+KSDQtNCwINGB0LUg0L3QuNGI0YLQsCDQvdC1INC/0YDQvtGB0LvQtdGS0YPRmNC1INC30LDQstC40YHQvdC40Lwg0YLQuNC60LXRgtC40LzQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBrZWVwIHBhcmVudC1jaGlsZCBsaW5rIGFmdGVyIGNoYW5nZSBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICfQkNC60YLQuNCy0LjRgNCw0ZrQtSDRhNGD0L3QutGG0LjRmNC1INC30LAg0LfQsNC00YDQttCw0LLQsNGa0LUg0LLQtdC30LUg0L3QsNC00YDQtdGS0LXQvdC4LdC/0L7QtNGA0LXRktC10L3QuCDQv9C+0YHQu9C1INC40LfQvNC10L3QtSDRgdGC0LDRmtCwINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDRgyDQvdCw0L/RgNC10LTQvdC+0Lwg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC80L7QtNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAn0JDQutGC0LjQstC40YDQsNGa0LUg0YTRg9C90LrRhtC40ZjQtSDQt9CwINC30LDQtNGA0LbQsNCy0LDRmtC1INCy0LXQt9C1INC90LDQtNGA0LXRktC10L3QuC3Qv9C+0LTRgNC10ZLQtdC90Lgg0L/QvtGB0LvQtSDQvtC/0L7Qt9C40LLQsCDQv9C+0LTQtdGI0LDQstCw0ZrQsCDRgdGC0LDRmtCwINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCAg0YMg0L3QsNC/0YDQtdC00L3QvtC8INCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDQvNC+0LTRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byB1bnNldCB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICfQkNC60YLQuNCy0LjRgNCw0ZrQtSDRhNGD0L3QutGG0LjRmNC1INC30LAg0L7Qv9C+0LfQuNCyINC/0L7QtNC10YjQsNCy0LDRmtCwINGB0YLQsNGa0LAg0YLQuNC60LXRgtCwINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDRgyDQvdCw0L/RgNC10LTQvdC+0Lwg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC80L7QtNGDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQkNC60L4g0ZjQtSDQvtC/0LXRgNCw0YLQtdGAINC00L7QtNCw0L4g0L3QsNC/0L7QvNC10L3Rgywg0L/QvtC00LXRiNCw0LLQsCDRgdGC0LDRgtGD0YEg0YLQuNC60LXRgtCwINC90LAg0LXQutGA0LDQvdGDINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDRgtC40LrQtdGC0LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICfQk9C70LDQstC90LggLyDQt9Cw0LLQuNGB0L3QuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJ9CT0LvQsNCy0L3QuCDRgtC40LrQtdGC0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUnfSA9ICfQk9C70LDQstC90Lgv0LfQsNCy0LjRgdC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUgbW9kdWxlIGZvciBUaWNrZXQgQnVsayBmZWF0dXJlLid9ID0gJ9Cc0L7QtNGD0Lsg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC30LAg0YTRg9C90LrRhtC40ZjRgyDQvNCw0YHQvtCy0L3QtSDQvtCx0YDQsNC00LUg0YLQuNC60LXRgtCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIG1hc3RlciB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQtNC+0LTQsNGC0LDQuiDQv9GA0LXQs9C70LXQtNCwINCz0LvQsNCy0L3QuNGFINGC0LjQutC10YLQsCDQutC+0L3RgtGA0L7Qu9C90LUg0YLQsNCx0LvQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuICJMaW1pdCIg0ZjQtSDQsdGA0L7RmCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDQv9GA0LjQutCw0LfQsNC90LjRhSDRgtC40LrQtdGC0LAuICJHcm91cCIg0YHQtSDQutC+0YDQuNGB0YLQuCDQtNCwINC+0LPRgNCw0L3QuNGH0Lgg0L/RgNC40YHRgtGD0L8g0LTQvtC00LDRgtC60YMgKNC90L/RgC4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiINC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INGY0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0LDQutGC0LjQstC40YDQsNC9INC40LvQuCDQtNCwINGY0LUg0L/QvtGC0YDQtdCx0L3QviDQtNCwINCz0LAg0LrQvtGA0LjRgdC90LjQuiDQvNCw0L3Rg9C10LvQvdC+INCw0LrRgtC40LLQuNGA0LAuICJDYWNoZVRUTExvY2FsIiDRmNC1INCy0YDQtdC80LUg0YMg0LzQuNC90YPRgtC40LzQsCDQt9CwINC60LXRiCDQtNC+0LTQsNGC0LrQsC4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAg0LTQvtC00LDRgtCw0Log0L/RgNC10LPQu9C10LTQsCDQt9Cw0LLQuNGB0L3QuNGFINGC0LjQutC10YLQsCDQutC+0L3RgtGA0L7Qu9C90LUg0YLQsNCx0LvQtSDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuICJMaW1pdCIg0ZjQtSDQsdGA0L7RmCDQv9C+0LTRgNCw0LfRg9C80LXQstCw0L3QviDQv9GA0LjQutCw0LfQsNC90LjRhSDRgtC40LrQtdGC0LAuICJHcm91cCIg0YHQtSDQutC+0YDQuNGB0YLQuCDQtNCwINC+0LPRgNCw0L3QuNGH0Lgg0L/RgNC40YHRgtGD0L8g0LTQvtC00LDRgtC60YMgKNC90L/RgC4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiINC+0LTRgNC10ZLRg9GY0LUg0LTQsCDQu9C4INGY0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4g0LDQutGC0LjQstC40YDQsNC9INC40LvQuCDQtNCwINGY0LUg0L/QvtGC0YDQtdCx0L3QviDQtNCwINCz0LAg0LrQvtGA0LjRgdC90LjQuiDQvNCw0L3Rg9C10LvQvdC+INCw0LrRgtC40LLQuNGA0LAuICJDYWNoZVRUTExvY2FsIiDRmNC1INCy0YDQtdC80LUg0YMg0LzQuNC90YPRgtC40LzQsCDQt9CwINC60LXRiCDQtNC+0LTQsNGC0LrQsC4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ2lzdHJhdGlvbiBvZiB0aGUgdGlja2V0IGV2ZW50IG1vZHVsZS4nfSA9ICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0LzQvtC00YPQu9CwINC00L7Qs9Cw0ZLQsNGY0LAg0LfQsCDRgtC40LrQtdGC0LUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cd0LXQvtC/0YXQvtC00L3QsCDQtNC+0LfQstC+0LvQsCDQt9CwINGD0L/QvtGC0YDQtdCx0YMg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3QsCDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQtNCwINC70Lgg0L/QvtGZ0LUg0JPQu9Cw0LLQvdC4IC8g0JfQsNCy0LjRgdC90Lgg0LzQvtGA0LAg0LHQuNGC0Lgg0L/QvtC00LXRiNC10L3QviDQvtC0INGB0YLRgNCw0L3QtSDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90Lgg0YHQsNC00YDQttCw0Zgg0LfQsCDQvdCw0L/QvtC80LXQvdC1INC00L7QtNCw0YLQtSDQvdCwINC90LAg0JPQu9Cw0LLQvdC4L9CX0LDQstC40YHQvdC4INC10LrRgNCw0L3RgyDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INC/0L7QtNGA0LDQt9GD0LzQtdCy0LDQvdC4INC/0YDQtdC00LzQtdGCINC30LAg0L3QsNC/0L7QvNC10L3QtSDQtNC+0LTQsNGC0LUg0L3QsCDQk9C70LDQstC90Lgv0JfQsNCy0LjRgdC90Lgg0LXQutGA0LDQvdGDINC00LXRgtCw0ZnQvdC+0LMg0L/RgNC40LrQsNC30LAg0YLQuNC60LXRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Ce0LTRgNC10ZLRg9GY0LUg0L7QtNCz0L7QstC+0YDQvdC+0LMg0L7Qv9C10YDQsNGC0LXRgNCwINC30LAg0YLQuNC60LXRgiDQvdCwINC10LrRgNCw0L3RgyDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90LggINC00LXRgtCw0ZnQvdC+0LMg0L/RgNC40LrQsNC30LAg0YLQuNC60LXRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGB0LXRgNCy0LjRgSDQvdCwINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDQtdC60YDQsNC90YMg0LTQtdGC0LDRmdC90L7QsyDQv9GA0LjQutCw0LfQsCDRgtC40LrQtdGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwIChUaWNrZXQ6OlNlcnZpY2Ug0LzQvtGA0LAg0LHQuNGC0Lgg0LDQutGC0LjQstC40YDQsNC9KS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J7QtNGA0LXRktGD0ZjQtSDQstC70LDRgdC90LjQutCwINGC0LjQutC10YLQsCDQvdCwINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDQtdC60YDQsNC90YMg0LTQtdGC0LDRmdC90L7QsyDQv9GA0LjQutCw0LfQsCDRgtC40LrQtdGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICfQntC00YDQtdGS0YPRmNC1INGC0LjQvyDRgtC40LrQtdGC0LAg0L3QsCDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90Lgg0LXQutGA0LDQvdGDINC00LXRgtCw0ZnQvdC+0LMg0L/RgNC40LrQsNC30LAg0YLQuNC60LXRgtCwINGDINC40L3RgtC10YDRhNC10ZjRgdGDINC+0L/QtdGA0LDRgtC10YDQsCAoVGlja2V0OjpUeXBlINC80L7RgNCwINCx0LjRgtC4INCw0LrRgtC40LLQuNGA0LDQvSkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0KMg0LzQtdC90LjRmNGDINC/0YDQuNC60LDQt9GD0ZjQtSDQstC10LfRgyDQt9CwINC40LfQvNC10L3RgyDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90Lgg0YHRgtCw0YLRg9GB0LAg0YLQuNC60LXRgtCwINC90LAg0LTQtdGC0LDRmdC90L7QvCDQv9GA0LjQutCw0LfRgyDRgtC40LrQtdGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn0J/RgNC40LrQsNC30YPRmNC1INC70LjRgdGC0YMg0YHQstC40YUg0L7Qv9C10YDQsNGC0LXRgNCwINGD0LrRmdGD0YfQtdC90LjRhSDRgyDQvtCy0LDRmCDRgtC40LrQtdGCINC90LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3RgyDQtNC10YLQsNGZ0L3QvtCzINC/0YDQuNC60LDQt9CwINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQt9GD0ZjQtSDQu9C40YHRgtGDINGB0LLQuNGFINC80L7Qs9GD0ZvQuNGFINC+0L/QtdGA0LDRgtC10YDQsCAo0YHQstC4INC+0L/QtdGA0LDRgtC10YDQuCDRgdCwINC00L7Qt9Cy0L7Qu9C+0Lwg0LfQsCDQvdCw0L/QvtC80LXQvdGDINC30LAg0YDQtdC0L9GC0LjQutC10YIpINGA0LDQtNC4INGD0YLQstGA0ZLQuNCy0LDRmtCwINC60L4g0YLRgNC10LHQsCDQtNCwINCx0YPQtNC1INC40L3RhNC+0YDQvNC40YHQsNC9INC+INC+0LLQvtGYINC90LDQv9C+0LzQtdC90LgsINC90LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4INC10LrRgNCw0L3RgyDRgtC40LrQtdGC0LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQt9GD0ZjQtSDQvtC/0YbQuNGY0LUg0L/RgNC40L7RgNC40YLQtdGC0LAg0YLQuNC60LXRgtCwINC90LAg0LXQutGA0LDQvdGDINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDRgtC40LrQtdGC0LAg0L3QsCDQtNC10YLQsNGZ0L3QvtC8INC/0YDQuNC60LDQt9GDINGC0LjQutC10YLQsCDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQvtC/0LXRgNCw0YLQtdGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aXRsZSBmaWVsZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9Cf0YDQuNC60LDQt9GD0ZjQtSDQvdCw0YHQu9C+0LLQvdCwINC/0L7RmdCwINC90LAg0LXQutGA0LDQvdGDINCz0LvQsNCy0L3QuC/Qt9Cw0LLQuNGB0L3QuCDRgtC40LrQtdGC0LAg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0L7Qv9C10YDQsNGC0LXRgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAn0JfQsNCy0LjRgdC90Lgg0YLQuNC60LXRgtC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAn0J3QsNCy0L7QtNC4INGA0LDQt9C90LUg0LrQvtC80YPQvdC40LrQsNGG0LjQvtC90LUg0LrQsNC90LDQu9C1INGH0LvQsNC90LDQutCwINCz0LTQtSDRm9C1INGB0YLQstCw0YDQvdC+INC40LzQtSDRgdCwINCz0LvQsNCy0L3QvtCzINGC0LjQutC10YLQsCDQsdC40YLQuCDQt9Cw0LzQtdGa0LXQvdC+INGB0LAg0ZjQtdC00L3QuNC8INC90LAg0LfQsNCy0LjRgdC90L7QvCDRgtC40LrQtdGC0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGFjdGl2YXRlcyBNYXN0ZXIvU2xhdmUgZmllbGQgaW4gbmV3IGVtYWlsIGFuZCBwaG9uZSB0aWNrZXQgc2NyZWVucy4nfSA9CiAgICAgICAgJ9Ce0LLQsNGYINC80L7QtNGD0Lsg0LDQutGC0LjQstC40YDQsCDQv9C+0ZnQtSDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90Lgg0L3QsCDQtdC60YDQsNC90YMg0L3QvtCy0LjRhSDQuNC80LXRmNC7INGC0LjQutC10YLQsCDQuCDRgtC40LrQtdGC0LAg0L/QvtC30LjQstCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAn0J7QstC+INC/0L7QtNC10YjQsNCy0LDRmtC1INGY0LUg0LfQsNGB0YLQsNGA0LXQu9C+INC4INCx0LjRm9C1INC40LfQsdCw0YfQtdC90L4g0LjQtyDQsdGD0LTRg9Gb0LjRhSDQstC10YDQt9C40ZjQsCDQvNC+0LTRg9C70LAg0LPQu9Cw0LLQvdC4L9C30LDQstC40YHQvdC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAn0KLQuNC60LXRgiDQs9C70LDQstC90Lgv0LfQsNCy0LjRgdC90LguJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzcl9MYXRuX09UUlNNYXN0ZXJTbGF2ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGlja2V0TWFzdGVyU2xhdmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBNYXN0ZXIvU2xhdmUgc3RhdHVzIGZvciAlcyVzJXMnfSA9ICdVcHJhdmxqYW5qZSBzdGF0dXNvbSBnbGF2bmkvemF2aXNuaSB6YSAlcyVzJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9Nb2R1bGVzL0FnZW50VGlja2V0TWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBNYXN0ZXIgVGlja2V0J30gPSAnTm92aSBnbGF2bmkgdGlrZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldCd9ID0gJ09wb3pvdmkgcG9kZcWhYXZhbmplIGdsYXZub2cgdGlrZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ09wb3pvdmkgcG9kZcWhYXZhbmplIHphdmlzbm9nIHRpa2V0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnWmF2aXNuaSBvZCAlcyVzJXM6ICVzJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICdPcG96b3ZpIHBvZGXFoWF2YW5qZSBnbGF2bmloIHRpa2V0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAnT3Bvem92aSBwb2RlxaFhdmFuamUgemF2aXNuaWggdGlrZXRhJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ0dsYXZubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICdaYXZpc25pIG9kICVzJXMlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAnR2xhdm5pIHRpa2V0JzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAnU3ZpIGdsYXZuaSB0aWtldGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHNsYXZlIHRpY2tldHMnfSA9ICdTdmkgemF2aXNuaSB0aWtldGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3dzIGFkZGluZyBub3RlcyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0RvenZvbGphdmEgZG9kYXZhbmplIGJlbGXFoWtpIG5hIGdsYXZuaS96YXZpc25pIGVrcmFudSBkZXRhbGpub2cgcHJpa2F6YSB0aWtldGEgb3BlcmF0ZXJza29nIGludGVyZmVqc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgdGhlIHRpY2tldC4nfSA9ICdQcm9tZW5pIGdsYXZuaS96YXZpc25pIHN0YXR1cyB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgZHluYW1pYyBmaWVsZCBuYW1lIGZvciBtYXN0ZXIgdGlja2V0IGZlYXR1cmUuJ30gPSAnRGVmaW5pxaFlIGRpbmFtacSNa2kgbmF6aXYgcG9samEgemEgZnVua2NpanUgZ2xhdm5vZyB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgYSB0aWNrZXQgbG9jayBpcyByZXF1aXJlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoaWYgdGhlIHRpY2tldCBpc25cJ3QgbG9ja2VkIHlldCwgdGhlIHRpY2tldCBnZXRzIGxvY2tlZCBhbmQgdGhlIGN1cnJlbnQgYWdlbnQgd2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBhcyBpdHMgb3duZXIpLid9ID0KICAgICAgICAnT2RyZcSRdWplIGRhIGxpIGplIHBvdHJlYm5vIHpha2xqdcSNYXRpIGdsYXZuaS96YXZpc25pIGVrcmFuIHRpa2V0YSBuYSBkZXRhbGpub20gcHJpa2F6dSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYSAoYWtvIHRpa2V0IGpvxaEgdXZlayBuaWplIHpha2xqdcSNYW4sIHRpa2V0IMSHZSBkb2JpdGkgc3RhdHVzIHpha2xqdcSNYW4gaSB0cmVudXRuaSBvcGVyYXRlciDEh2UgYml0aSBhdXRvbWF0c2tpIHBvc3RhdmxqZW4ga2FvIHZsYXNuaWspLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnRGVmaW5pxaFlIHVrb2xpa28gamUgTWFzdGVyU2xhdmUgbmFwb21lbmEgcG9kcmF6dW1ldmFubyB2aWRsaml2YSB6YSBrbGlqZW50IGtvcmlzbmlrZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnT2RyZcSRdWplIHBvZHJhenVtZXZhbmkgbmFyZWRuaSBzdGF0dXMgdGlrZXRhIHBvc2xlIGRvZGF2YWxqYSBiZWxlxaFrZSwgbmEgZ2xhdm5pL3phdmlzbmkgZWtyYW51IGRldGFsam5vZyBwcmlrYXphIHRpa2V0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5pIHByaW9yaXRldCB0aWtldGEgbmEgZ2xhdm5pL3phdmlzbmkgZWthbnUgZGV0YWxqbm9nIHByaWthemEgdGlrZXRhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPZHJlxJF1amUga29tZW50YXIgemEgaXN0b3JpamF0IG5hIGdsYXZuaS96YXZpc25pIGVrcmFuc2tvaiBha2NpamksIMWhdG8gxIdlIHNlIGtvcmlzdGl0aSB6YSBpc3RvcmlqYXQgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSB0aXAgaXN0b3JpamF0YSB6YSBnbGF2bmkvemF2aXNuaSBla3JhbnNrdSBha2NpanUsIMWhdG8gxIdlIHNlIGtvcmlzdGl0aSB6YSBpc3RvcmlqYXQgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBuYXJlZG5pIHN0YXR1cyB0aWtldGEgcG9zbGUgZG9kYXZhbGphIGJlbGXFoWtlLCBuYSBnbGF2bmkvemF2aXNuaSBla3JhbnUgZGV0YWxqbm9nIHByaWthemEgdGlrZXRhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnQWt0aXZpcmEgbmFwcmVkbmkgZGVvIGZ1bmtjaWplIGdsYXZuaS96YXZpc25pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnQWt0aXZpcmFuamUgc3ZvanN0dmEgZGEgemF2aXNuaSB0aWtldCBwcmF0aSBnbGF2bmkgbmEgbm92aSBnbGF2bmkgdSBuYXByZWRub20gZ2xhdm5pL3phdmlzbmkgbW9kdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnQWt0aXZpcmFuamUgZnVua2NpamUgemEgcHJvbWVudSBzdGFuamEgdGlrZXRhIGdsYXZuaS96YXZpc25pICB1IG5hcHJlZG5vbSBnbGF2bmkvemF2aXNuaSBtb2R1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICdBa3RpdmlyYW5qZSBzdm9qc3R2YSB6YSBwcm9zbGXEkWl2YW5qZSDEjWxhbmFrYSB0aXBhICJwcm9zbGVkaSIgZ2xhdm5vZyB0aWtldGEga29yaXNuaWNpbWEgemF2aXNuaWggdGlrZXRhLiBQb2RyYXp1bWV2YW5vIGplIChpc2tsanXEjWVubykgZGEgc2UgbmnFoXRhIG5lIHByb3NsZcSRdWplIHphdmlzbmltIHRpa2V0aW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0FrdGl2aXJhbmplIGZ1bmtjaWplIHphIHphZHLFvmF2YW5qZSB2ZXplIG5hZHJlxJFlbmktcG9kcmXEkWVuaSBwb3NsZSBpem1lbmUgc3RhbmphIGdsYXZuaS96YXZpc25pIHUgbmFwcmVkbm9tIGdsYXZuaS96YXZpc25pIG1vZHUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8ga2VlcCBwYXJlbnQtY2hpbGQgbGluayBhZnRlciB1bnNldCBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICdBa3RpdmlyYW5qZSBmdW5rY2lqZSB6YSB6YWRyxb5hdmFuamUgdmV6ZSBuYWRyZcSRZW5pLXBvZHJlxJFlbmkgcG9zbGUgb3Bveml2YSBwb2RlxaFhdmFuamEgc3RhbmphIGdsYXZuaS96YXZpc25pICB1IG5hcHJlZG5vbSBnbGF2bmkvemF2aXNuaSBtb2R1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIHVuc2V0IHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ0FrdGl2aXJhbmplIGZ1bmtjaWplIHphIG9wb3ppdiBwb2RlxaFhdmFuamEgc3RhbmphIHRpa2V0YSBnbGF2bmkvemF2aXNuaSB1IG5hcHJlZG5vbSBnbGF2bmkvemF2aXNuaSBtb2R1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdBa28gamUgb3BlcmF0ZXIgZG9kYW8gbmFwb21lbnUsIHBvZGXFoWF2YSBzdGF0dXMgdGlrZXRhIG5hIGVrcmFudSBnbGF2bmkvemF2aXNuaSB0aWtldGEgbmEgZGV0YWxqbm9tIHByaWthenUgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICdHbGF2bmkgLyB6YXZpc25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXRzJ30gPSAnR2xhdm5pIHRpa2V0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJ0dsYXZuaS96YXZpc25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICdNb2R1bCBnbGF2bmkvemF2aXNuaSB6YSBmdW5rY2lqdSBtYXNvdm5lIG9icmFkZSB0aWtldGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBkb2RhdGFrIHByZWdsZWRhIGdsYXZuaWggdGlrZXRhIGtvbnRyb2xuZSB0YWJsZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLiAiTGltaXQiIGplIGJyb2ogcG9kcmF6dW1ldmFubyBwcmlrYXphbmloIHRpa2V0YS4gIkdyb3VwIiBzZSBrb3Jpc3RpIGRhIG9ncmFuacSNaSBwcmlzdHVwIGRvZGF0a3UgKG5wci4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIG9kcmXEkXVqZSBkYSBsaSBqZSBwb2RyYXp1bWV2YW5vIGFrdGl2aXJhbiBpbGkgZGEgamUgcG90cmVibm8gZGEgZ2Ega29yaXNuaWsgbWFudWVsbm8gYWt0aXZpcmEuICJDYWNoZVRUTExvY2FsIiBqZSB2cmVtZSB1IG1pbnV0aW1hIHphIGtlxaEgZG9kYXRrYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHphIGRvZGF0YWsgcHJlZ2xlZGEgemF2aXNuaWggdGlrZXRhIGtvbnRyb2xuZSB0YWJsZSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLiAiTGltaXQiIGplIGJyb2ogcG9kcmF6dW1ldmFubyBwcmlrYXphbmloIHRpa2V0YS4gIkdyb3VwIiBzZSBrb3Jpc3RpIGRhIG9ncmFuacSNaSBwcmlzdHVwIGRvZGF0a3UgKG5wci4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIG9kcmXEkXVqZSBkYSBsaSBqZSBwb2RyYXp1bWV2YW5vIGFrdGl2aXJhbiBpbGkgZGEgamUgcG90cmVibm8gZGEgZ2Ega29yaXNuaWsgbWFudWVsbm8gYWt0aXZpcmEuICJDYWNoZVRUTExvY2FsIiBqZSB2cmVtZSB1IG1pbnV0aW1hIHphIGtlxaEgZG9kYXRrYS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ2lzdHJhdGlvbiBvZiB0aGUgdGlja2V0IGV2ZW50IG1vZHVsZS4nfSA9ICdSZWdpc3RyYWNpamEgbW9kdWxhIGRvZ2HEkWFqYSB6YSB0aWtldGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ05lb3Bob2RuYSBkb3p2b2xhIHphIHVwb3RyZWJ1IGdsYXZuaS96YXZpc25pIGVrcmFuYSBkZXRhbGpub2cgcHJpa2F6YSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyBpZiBNYXN0ZXIgLyBTbGF2ZSBmaWVsZCBtdXN0IGJlIHNlbGVjdGVkIGJ5IHRoZSBhZ2VudC4nfSA9ICdEZWZpbmnFoWUgZGEgbGkgcG9samUgR2xhdm5pIC8gWmF2aXNuaSBtb3JhIGJpdGkgcG9kZcWhZW5vIG9kIHN0cmFuZSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ09kcmXEkXVqZSBwb2RyYXp1bWV2YW5pIHNhZHLFvmFqIHphIG5hcG9tZW5lIGRvZGF0ZSBuYSBuYSBHbGF2bmkvWmF2aXNuaSBla3JhbnUgZGV0YWxqbm9nIHByaWthemEgdGlrZXRhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgc3ViamVjdCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPZHJlxJF1amUgcG9kcmF6dW1ldmFuaSBwcmVkbWV0IHphIG5hcG9tZW5lIGRvZGF0ZSBuYSBHbGF2bmkvWmF2aXNuaSBla3JhbnUgZGV0YWxqbm9nIHByaWthemEgdGlrZXRhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHJlc3BvbnNpYmxlIGFnZW50IG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPZHJlxJF1amUgb2Rnb3Zvcm5vZyBvcGVyYXRlcmEgemEgdGlrZXQgbmEgZWtyYW51IGdsYXZuaS96YXZpc25pICBkZXRhbGpub2cgcHJpa2F6YSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdPZHJlxJF1amUgc2VydmlzIG5hIGdsYXZuaS96YXZpc25pIGVrcmFudSBkZXRhbGpub2cgcHJpa2F6YSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYSAoVGlja2V0OjpTZXJ2aWNlIG1vcmEgYml0aSBha3RpdmlyYW4pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdPZHJlxJF1amUgdmxhc25pa2EgdGlrZXRhIG5hIGdsYXZuaS96YXZpc25pIGVrcmFudSBkZXRhbGpub2cgcHJpa2F6YSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnT2RyZcSRdWplIHRpcCB0aWtldGEgbmEgZ2xhdm5pL3phdmlzbmkgZWtyYW51IGRldGFsam5vZyBwcmlrYXphIHRpa2V0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhIChUaWNrZXQ6OlR5cGUgbW9yYSBiaXRpIGFrdGl2aXJhbikuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnVSBtZW5panUgcHJpa2F6dWplIHZlenUgemEgaXptZW51IGdsYXZuaS96YXZpc25pIHN0YXR1c2EgdGlrZXRhIG5hIGRldGFsam5vbSBwcmlrYXp1IHRpa2V0YSB1IGludGVyZmVqc3Ugb3BlcmF0ZXJhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUHJpa2F6dWplIGxpc3R1IHN2aWggb3BlcmF0ZXJhIHVrbGp1xI1lbmloIHUgb3ZhaiB0aWtldCBuYSBnbGF2bmkvemF2aXNuaSBla3JhbnUgZGV0YWxqbm9nIHByaWthemEgdGlrZXRhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1ByaWthenVqZSBsaXN0dSBzdmloIG1vZ3XEh2loIG9wZXJhdGVyYSAoc3ZpIG9wZXJhdGVyaSBzYSBkb3p2b2xvbSB6YSBuYXBvbWVudSB6YSByZWQvdGlrZXQpIHJhZGkgdXR2csSRaXZhbmphIGtvIHRyZWJhIGRhIGJ1ZGUgaW5mb3JtaXNhbiBvIG92b2ogbmFwb21lbmksIG5hIGdsYXZuaS96YXZpc25pIGVrcmFudSB0aWtldGEgbmEgZGV0YWxqbm9tIHByaWthenUgdGlrZXRhIHUgaW50ZXJmZWpzdSBvcGVyYXRlcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1ByaWthenVqZSBvcGNpamUgcHJpb3JpdGV0YSB0aWtldGEgbmEgZWtyYW51IGdsYXZuaS96YXZpc25pIHRpa2V0YSBuYSBkZXRhbGpub20gcHJpa2F6dSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpdGxlIGZpZWxkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUHJpa2F6dWplIG5hc2xvdm5hIHBvbGphIG5hIGVrcmFudSBnbGF2bmkvemF2aXNuaSB0aWtldGEgdSBpbnRlcmZlanN1IG9wZXJhdGVyYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJ1phdmlzbmkgdGlrZXRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAnTmF2b2RpIHJhem5lIGtvbXVuaWthY2lvbmUga2FuYWxlIMSNbGFuYWthIGdkZSDEh2Ugc3R2YXJubyBpbWUgc2EgZ2xhdm5vZyB0aWtldGEgYml0aSB6YW1lbmplbm8gc2EgamVkbmltIG5hIHphdmlzbm9tIHRpa2V0dS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgYWN0aXZhdGVzIE1hc3Rlci9TbGF2ZSBmaWVsZCBpbiBuZXcgZW1haWwgYW5kIHBob25lIHRpY2tldCBzY3JlZW5zLid9ID0KICAgICAgICAnT3ZhaiBtb2R1bCBha3RpdmlyYSBwb2xqZSBnbGF2bmkvemF2aXNuaSBuYSBla3JhbnUgbm92aWggaW1lamwgdGlrZXRhIGkgdGlrZXRhIHBveml2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJ092byBwb2RlxaFhdmFuamUgamUgemFzdGFyZWxvIGkgYmnEh2UgaXpiYcSNZW5vIGl6IGJ1ZHXEh2loIHZlcnppamEgbW9kdWxhIGdsYXZuaS96YXZpc25pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnVGlrZXQgZ2xhdm5pL3phdmlzbmkuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzdl9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ055dHQgTWFzdGVyw6RyZW5kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgb2YgJXMlcyVzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXQnfSA9ICdNYXN0ZXLDpHJlbmRlJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAnQWxsYSBtYXN0ZXLDpHJlbmRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ0FsbGEgc2xhdsOkcmVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiB0aGUgdGlja2V0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgdHlwZSBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBwYXJ0IG9mIHRoZSBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRoYXQgc2xhdmUgdGlja2V0cyBmb2xsb3cgdGhlIG1hc3RlciB0aWNrZXQgdG8gYSBuZXcgbWFzdGVyIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGZvcndhcmQgYXJ0aWNsZXMgZnJvbSB0eXBlIFwnZm9yd2FyZFwnIG9mIGEgbWFzdGVyIHRpY2tldCB0byB0aGUgY3VzdG9tZXJzIG9mIHRoZSBzbGF2ZSB0aWNrZXRzLiBCeSBkZWZhdWx0IChkaXNhYmxlZCkgaXQgd2lsbCBub3QgZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgdG8gdGhlIHNsYXZlIHRpY2tldHMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBrZWVwIHBhcmVudC1jaGlsZCBsaW5rIGFmdGVyIGNoYW5nZSBvZiB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBrZWVwIHBhcmVudC1jaGlsZCBsaW5rIGFmdGVyIHVuc2V0IG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIHVuc2V0IHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiBhIHRpY2tldCBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBhIG5vdGUgaXMgYWRkZWQgYnkgYW4gYWdlbnQsIHNldHMgdGhlIHN0YXRlIG9mIHRoZSB0aWNrZXQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICdNYXN0ZXIgLyBTbGF2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZGFzaGJvYXJkIGJhY2tlbmQgb2YgdGhlIHNsYXZlIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaW5rIGluIHRoZSBtZW51IHRvIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdHVzIG9mIGEgdGlja2V0IGluIHRoZSB0aWNrZXQgem9vbSB2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBwb3NzaWJsZSBhZ2VudHMgKGFsbCBhZ2VudHMgd2l0aCBub3RlIHBlcm1pc3Npb25zIG9uIHRoZSBxdWV1ZS90aWNrZXQpIHRvIGRldGVybWluZSB3aG8gc2hvdWxkIGJlIGluZm9ybWVkIGFib3V0IHRoaXMgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aXRsZSBmaWVsZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBUaWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyB0aGUgZGlmZmVyZW50IGFydGljbGUgY29tbXVuaWNhdGlvbiBjaGFubmVscyB3aGVyZSB0aGUgcmVhbCBuYW1lIGZyb20gTWFzdGVyIHRpY2tldCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBpbiB0aGUgU2xhdmUgdGlja2V0Lid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGFjdGl2YXRlcyBNYXN0ZXIvU2xhdmUgZmllbGQgaW4gbmV3IGVtYWlsIGFuZCBwaG9uZSB0aWNrZXQgc2NyZWVucy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1cnRoZXIgdmVyc2lvbnMgb2YgT1RSU01hc3RlclNsYXZlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBNYXN0ZXJTbGF2ZS4nfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzd19PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGlja2V0QnVsay9NYXN0ZXJTbGF2ZS5wbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgTWFzdGVyIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5zZXQgU2xhdmUgVGlja2V0cyd9ID0gJyc7CgogICAgIyBQZXJsIE1vZHVsZTogS2VybmVsL1N5c3RlbS9EeW5hbWljRmllbGQvRHJpdmVyL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXInfSA9ICdGdXp1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIG9mICVzJXMlcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0J30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIG1hc3RlciB0aWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBzbGF2ZSB0aWNrZXRzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93cyBhZGRpbmcgbm90ZXMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSdWh1c3Uga3VvbmdlemEgdmlkb2tlemkga2F0aWthIHNrcmluaSB5YSBNa3V1TXR1bXdhIHlhIHRpa2V0aSBpbGl5b2t1endhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBvZiB0aGUgdGlja2V0Lid9ID0gJ0JhZGlsaXNoYSBoYWxpIHlhIE1rdXUvbXR1bXdhIHlhIHRpa2V0aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBkeW5hbWljIGZpZWxkIG5hbWUgZm9yIG1hc3RlciB0aWNrZXQgZmVhdHVyZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiBhIHRpY2tldCBsb2NrIGlzIHJlcXVpcmVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChpZiB0aGUgdGlja2V0IGlzblwndCBsb2NrZWQgeWV0LCB0aGUgdGlja2V0IGdldHMgbG9ja2VkIGFuZCB0aGUgY3VycmVudCBhZ2VudCB3aWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGFzIGl0cyBvd25lcikuJ30gPQogICAgICAgICdGYWZhbnVhIGthbWEga3VmdW5nYSBrd2EgdGlrZXRpIGt1bmFoaXRhamlrYSBrYXRpa2Egc2tyaW5pIHlhIHRpa2V0aSB5YSAgbWt1dW10dW13YSB5YSB0aWtldGkgaWxpeW9rdXp3YSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEgKGthbWEgdGlrZXRpIGhhaWphZnVuZ3dhIGJhZG8sIHRpa2V0aSB6aXBhdHdlIGt1ZnVuZ3dhIG5hIHdha2FsYSB3YSBzYXNhIGF0YWZhbnl3YSBhdXRvbWF0aWtpIGt1d2EgbW1pbGlraSB3YWtlKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aGUgTWFzdGVyU2xhdmUgbm90ZSBpcyB2aXNpYmxlIGZvciB0aGUgY3VzdG9tZXIgYnkgZGVmYXVsdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IG5leHQgc3RhdGUgb2YgYSB0aWNrZXQgYWZ0ZXIgYWRkaW5nIGEgbm90ZSwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGNoYWd1by1tc2luZ2kgbGEgaGFsaSBpeWFqbyB5YSB0aWtldGkgYmFhZGEgeWEga3VvbmdlemEga2lkb2tlem8sIGthdGlrYSBza3JpbmkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWZhZmFudWEga2lwYXVtYmVsZSBjaGFndW8tbXNpbmdpIGNoYSB0aWtldGkga2F0aWthIHNrcmluaSB5YSBta3V1bXR1bXdhIHlhIHRpa2V0aSB5YSB0aWtldGkgaWxpeW9rdXp3YSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFmYWZhbnVhIGhpc3RvcmlhIHlhIG1hb25pIGt3YSBraXRlbmRvIGNoYSBza3JpbmkgeWEgdGlrZXRpIG1rdXVtdHVtd2EsIGFtYmF5byBpbmF0dW1pa2EgbmEgaGlzdG9yaWEgeWEgdGlrZXRpIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRmFmYW51YSBhaW5hIHlhIGhpc3RvcmlhIGt3YSBraXRlbmRvIGNoYSBza3JpbmkgeWEgbWt1dW10dW13YSBjaGEgdGlrZXRpLCBhbWJhY2hvIGtpbmF0dW1pa2EgbmEgaGlzdG9yaWEgeWEgdGlrZXRpIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbmV4dCBzdGF0ZSBvZiBhIHRpY2tldCBhZnRlciBhZGRpbmcgYSBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0ZhZmFudWEgaGFsaSBpbmF5b2Z1YXRhIHlhIHRpa2V0aSBiYWFkYSB5YSBrdW9uZ2V6YSBraWRva2V6bywga2F0aWthIHNrcmluaSB5YSBta3V1bXR1bXdhIHlhIHRpa2V0aSB5YSB0aWtldGkgaWxpeW9rdXp3YSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0thbWEga2lkb2tlem8ga2ltZW9uZ2V6d2EgbmEgd2FrYWxhLCBpbmF3ZWthIGhhbGkgeWEgdGlrZXRpIGthdGlrYSBza3JpbmkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgLyBTbGF2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXIgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXN0ZXJTbGF2ZSBtb2R1bGUgZm9yIFRpY2tldCBCdWxrIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ1BhcmFtZXRhIGt3YSBiYWNrZW5kIHlhIGRhc2lib2RpIHlhIG1hcGl0aW8geWEgdGlrZXRpIGt1dSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gXCdcJ0tpa29tb1wnXCcgbmkgbmFtYmEgeWEgdmlwZW5nZWUgaGFsaXNpIHZpbmF2eW9vbnllc2h3YSBrd2EgbWNoYWd1by1oYWxpc2kuIFwnXCdLaWt1bmRpXCdcJyBraW5hdHVtaWthIGt1enVpYSBrdWZpa2lhIGt1Y2hvbWVrYSAobWZhbm8gS2lrdW5kaTpVdGF3YWxhO2tpa3VuZGkgY2hhIDE7a2lrdW5kaSBjaGEgMjspLiBcJ1wnQ2hhZ3VvLW1zaW5naVwnXCcgaW5haGFraWtpIGthbWEgbWNob21la28gdW1ld2V6ZXNod2Ega3dhIG1jaGFndW8tbXNpbmdpIGF1IGthbWEgbXR1bWl6aSBhbmFoaXRhamkga3V3ZXplc2hhIGt3YSBta29uby4gXCdcJ0hpZmFkaGltdWRhVFRMS2lhbWJvXCdcJyBuaSBtdWRhIHdhIGhpZmFkaGkgbXVkYSBrYXRpa2EgZGFraWthIGt3YSBtY2hvbWVrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICdQYXJhbWV0YSBrd2EgYmFja2VuZCB5YSBkYXNpYm9kaSB5YSBtYXBpdGlvIHlhIHRpa2V0aSB0dW13YSB5YSBraW9sZXN1cmEgY2hhIHdha2FsYS4gXCdcJ0tpa29tb1wnXCcgbmkgbmFtYmEgeWEgdmlwZW5nZWUgaGFsaXNpIHZpbmF2eW9vbnllc2h3YSBrd2EgbWNoYWd1by1oYWxpc2kuIFwnXCdLaWt1bmRpXCdcJyBraW5hdHVtaWthIGt1enVpYSBrdWZpa2lhIGt1Y2hvbWVrYSAobWZhbm8gS2lrdW5kaTpVdGF3YWxhO2tpa3VuZGkgY2hhIDE7a2lrdW5kaSBjaGEgMjspLiBcJ1wnQ2hhZ3VvLW1zaW5naVwnXCcgaW5haGFraWtpIGthbWEgbWNob21la28gdW1ld2V6ZXNod2Ega3dhIG1jaGFndW8tbXNpbmdpIGF1IGthbWEgbXR1bWl6aSBhbmFoaXRhamkga3V3ZXplc2hhIGt3YSBta29uby4gXCdcJ0hpZmFkaGltdWRhVFRMS2lhbWJvXCdcJyBuaSBtdWRhIHdhIGhpZmFkaGkgbXVkYSBrYXRpa2EgZGFraWthIGt3YSBtY2hvbWVrby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ1VzYWppbGkgd2Ega2lwaW1vIGNoYSB0dWtpbyBsYSB0aWtldGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYWhpdGFqaSBydWh1c2Ega3V0dW1pYSBza3JpbmkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2VzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYXdla2EgbWF0aW5pIGtpaW5pIGtpbGljaG9vbmdlendhIGNoYSBjaGFndW8tbXNpbmdpIGthdGlrYSBza3JpbmkgeWEgbWt1dW10dXdhIHlhIHRpa2V0aSBrYXRpa2EgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IHN1YmplY3QgZm9yIG5vdGVzIGFkZGVkIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hd2VrYSBzb21vIGxhIGNoYWd1by1tc2luZ2kga3dhIGtpcGVuZ2VsZSBraWxpY2hvb25nZXp3YSBrYXRpa2Egc2tyaW5pIHlhIG1rdXVtdHV3YSB5YSB0aWtldGkga2F0aWthIHRpa2V0aSBpbGl5b2t1endhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYXdla2Egd2FrYWxhIGFtYmF5ZSBhbmFodXNpa2EgbmEgdGlrZXRpIGthdGlrYSBza3JpbmkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthdCBraW9sZXN1cmEgY2hhIHdha2FsYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdJbmF3ZWthIGh1ZHVtYSBrYXRpa2Egc2tyaW5pIHlhIG1rdXVtdHVtd2EgeWEgdGlrZXRpIHlhIHRpa2V0aSBpbGl5b2t1endhIGthdGlrYSBraW9sZXN1cmEgY2hhIHdha2FsYSAoVGlrZXRpOjpIdWR1bWEgaW5heW9oaXRhamkga3VhbWlsaXNod2EpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgb3duZXIgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmF3ZWthIG1taWxpa2kgd2EgdGlrZXRpIGthdGlrYSBza3JpbmkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSB0aWNrZXQgdHlwZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpUeXBlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICdJbmF3ZWthIGFpbmEgeWEgdGlrZXRpIGthdGlrYSBza3JpbmkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhICh0aWtldGk6OiBhaW5hIGluYXlvaXRhamkga3VhbWlsaXNod2EpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0dXMgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEga2l1bmdvIGthdGlrYSBtZW55dSBjaGEga3ViYWRpbGlzaGEgaGFkaGkgeWEgbWt1dW10dW13YSB5YSB0aWtldGkga2F0aWthIG1hbmRoYXJpIGlsaXlva3V6d2EgeWEgdGlrZXRpIHlhIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpc3Qgb2YgYWxsIHRoZSBpbnZvbHZlZCBhZ2VudHMgb24gdGhpcyB0aWNrZXQsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnSW5hb255ZXNoYSBvcm9kaGEgeWEgbWF3YWthbGEgd290ZSB3YW5hb2h1c2lrYSBuYSB0aWtldGkgaGlpLCBrYXRpa2Egc2tyaW5pIHlhIHRpa2V0aSBta3V1L210dW13YSB5YSB0aWtldGkgaWxpeW9rdXp3YSBrYXRpa2Ega2lvbGVzdXJhIGNoYSB3YWthbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIHBvc3NpYmxlIGFnZW50cyAoYWxsIGFnZW50cyB3aXRoIG5vdGUgcGVybWlzc2lvbnMgb24gdGhlIHF1ZXVlL3RpY2tldCkgdG8gZGV0ZXJtaW5lIHdobyBzaG91bGQgYmUgaW5mb3JtZWQgYWJvdXQgdGhpcyBub3RlLCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0luYW9ueWVzaGEgb3JvZGhhIHlhIHdha2FsYSB3b3RlIHdhbmFvd2V6YSAobWF3YWthbGEgd290ZSB3ZW55ZSBraWRva2V6byBjaGEgcnVodXNhIHlhIHRpa2V0aS9mb2xlbmkpIGt1dGFtYnVhIG5hbmkgYXRhYXJpZml3ZSBrdWh1c3Uga2lkb2tlem8gaGlraSwga2F0aWthIHNrcmluaSB5YSB0aWtldGkgbWt1dW10dW13YSB5YSB0aWtldGkgaWxpeW9rdXp3YSBrYXRpa2Ega2lvbGVzdXJhIGNod2Egd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGlja2V0IHByaW9yaXR5IG9wdGlvbnMgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdJbmFvbnllc2hhIG1hY2hhZ3VvIHlhIGtpcGF1bWJlbGUgeWEgdGlrZXRpIGthdGlrYSBza3JpbmkgeWEgdGlrZXRpIG1rdXVtdHVtd2EgeWEgdGlrZXRpIGlsaXlva3V6d2Ega2F0aWthIGtpb2xlc3VyYSBjaGEgd2FrYWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp0aF9USF9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ+C4leC4seC5i+C4p+C4oeC4suC4quC5gOC4leC4reC4o+C5jOC5g+C4q+C4oeC5iCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAn4Lii4LiB4LmA4Lil4Li04LiB4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiV4Lix4LmL4Lin4Lih4Liy4Liq4LmA4LiV4Lit4Lij4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ+C4ouC4geC5gOC4peC4tOC4geC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4leC4seC5i+C4p1NsYXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NsYXZlIG9mICVzJXMlczogJXMnfSA9ICcnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UaWNrZXRCdWxrL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAnJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ+C4oeC4suC4quC5gOC4leC4reC4o+C5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBtYXN0ZXIgdGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmA4Lie4Li04LmI4Lih4LmC4LiZ4LmJ4LiV4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinTWFzdGVyU2xhdmUg4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54Lih4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAn4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiC4Lit4LiH4LiV4Lix4LmL4LinIE1hc3RlclNsYXZlICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4hOC5iOC4suC4luC5ieC4suC4q+C4suC4geC4iOC4s+C5gOC4m+C5h+C4meC4leC5ieC4reC4h+C5g+C4iuC5ieC4leC4seC5i+C4p+C4peC5h+C4reC4hOC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4p01hc3RlclNsYXZl4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54Lih4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMICjguJfguLPguIHguLLguKPguKXguYfguK3guITguJXguLHguYvguKfguJbguYnguLLguKvguLLguIHguJXguLHguYvguKfguKLguLHguIfguYTguKHguYjguYTguJTguYnguKXguYfguK3guITguYHguKXguLDguKPguLDguJrguLjguYPguKvguYnguYDguK3guYDguKLguYjguJnguJXguYzguJvguLHguIjguIjguLjguJrguLHguJnguYDguJvguYfguJnguYDguIjguYnguLLguILguK3guIfguK3guLHguJXguYLguJnguKHguLHguJXguLQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgaWYgdGhlIE1hc3RlclNsYXZlIG5vdGUgaXMgdmlzaWJsZSBmb3IgdGhlIGN1c3RvbWVyIGJ5IGRlZmF1bHQuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LiC4Lit4LiH4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiW4Lix4LiU4LmE4Lib4LiC4Lit4LiH4LiV4Lix4LmL4Lin4Lir4Lil4Lix4LiH4LiI4Liy4LiB4LmA4Lie4Li04LmI4Lih4LmC4LiZ4LmJ4LiV4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinTWFzdGVyU2xhdmUg4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54Lih4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IHRpY2tldCBwcmlvcml0eSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC4peC4s+C4lOC4seC4muC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4guC4reC4h+C4leC4seC5i+C4p+C5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4p01hc3RlclNsYXZlIOC4guC4reC4h+C4leC4seC5i+C4p+C4i+C4ueC4oeC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IGNvbW1lbnQgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4Lin4Lix4LiV4Li04LiB4Liy4Lij4LmB4Liq4LiU4LiH4LiE4Lin4Liy4Lih4LmA4Lir4LmH4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiB4Lij4Liw4LiX4Liz4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinTWFzdGVyU2xhdmUg4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54LihIOC4i+C4tuC5iOC4h+C4l+C4s+C5g+C4q+C5ieC5gOC4geC4tOC4lOC4hOC4p+C4suC4oeC4hOC4uOC5ieC4meC5gOC4hOC4ouC5g+C4meC4m+C4o+C4sOC4p+C4seC4leC4tOC4guC4reC4h+C4leC4seC5i+C4p+C5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBoaXN0b3J5IHR5cGUgZm9yIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIGFjdGlvbiwgd2hpY2ggZ2V0cyB1c2VkIGZvciB0aWNrZXQgaGlzdG9yeSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4Lib4Lij4Liw4Lin4Lix4LiV4Li04Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiB4Lij4Liw4LiX4Liz4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiB4Lij4Liw4LiX4Liz4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinTWFzdGVyU2xhdmUg4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54LihIOC4i+C4tuC5iOC4h+C4l+C4s+C5g+C4q+C5ieC5gOC4geC4tOC4lOC4hOC4p+C4suC4oeC4hOC4uOC5ieC4meC5gOC4hOC4ouC5g+C4meC4m+C4o+C4sOC4p+C4seC4leC4tOC4guC4reC4h+C4leC4seC5i+C4p+C5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Liq4LiW4Liy4LiZ4Lig4Liy4Lie4LiW4Lix4LiU4LmE4Lib4LiC4Lit4LiH4LiV4Lix4LmL4Lin4Lir4Lil4Lix4LiH4LiI4Liy4LiB4LmA4Lie4Li04LmI4Lih4LmC4LiZ4LmJ4LiV4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinTWFzdGVyU2xhdmUg4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54Lih4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5gOC4i+C4leC4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C4leC4seC5i+C4p+C5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYzguKvguLLguIHguYDguK3guYDguKLguYjguJnguJXguYzguYTguJTguYnguYDguJ7guLTguYjguKHguYLguJnguYnguJUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICfguKHguLLguKrguYDguJXguK3guKPguYwvU2xhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyU2xhdmUgbW9kdWxlIGZvciBUaWNrZXQgQnVsayBmZWF0dXJlLid9ID0gJ+C5guC4oeC4lOC4ueC4pSDguKHguLLguKrguYDguJXguK3guKPguYwvU2xhdmUg4Liq4Liz4Lir4Lij4Lix4Lia4LiE4Li44LiT4Lil4Lix4LiB4Lip4LiT4Liw4LiB4Lil4Li44LmI4Lih4LiV4Lix4LmL4LinJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgbWFzdGVyIHRpY2tldHMgb3ZlcnZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4gIkxpbWl0IiBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvd24gYnkgZGVmYXVsdC4gIkdyb3VwIiBpcyB1c2VkIHRvIHJlc3RyaWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHBsdWdpbiAoZS4gZy4gR3JvdXA6IGFkbWluO2dyb3VwMTtncm91cDI7KS4gIkRlZmF1bHQiIGRldGVybWluZXMgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlIHVzZXIgbmVlZHMgdG8gZW5hYmxlIGl0IG1hbnVhbGx5LiAiQ2FjaGVUVExMb2NhbCIgaXMgdGhlIGNhY2hlIHRpbWUgaW4gbWludXRlcyBmb3IgdGhlIHBsdWdpbi4nfSA9CiAgICAgICAgJ+C4nuC4suC4o+C4suC4oeC4tOC5gOC4leC4reC4o+C5jOC4quC4s+C4q+C4o+C4seC4muC5geC4lOC4iuC4muC4reC4o+C5jOC4lOC5gOC4muC4t+C5ieC4reC4h+C4q+C4peC4seC4h+C4guC4reC4h+C4oOC4suC4nuC4o+C4p+C4oeC4leC4seC5i+C4p21hc3RlciDguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guKrguYDguK3guYDguKLguYjguJnguJXguYwgIuC4iOC4s+C4geC4seC4lCIg4LiE4Li34Lit4LiB4Liz4Lir4LiZ4LiU4LiI4Liz4LiZ4Lin4LiZ4LiC4Lit4LiH4Lij4Liy4Lii4LiB4Liy4Lij4LiX4Li14LmI4LmB4Liq4LiU4LiH4LmC4LiU4Lii4LiE4LmI4Liy4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZICLguIHguKXguLjguYjguKEiIOC4iOC4sOC4luC4ueC4geC4meC4s+C4oeC4suC5g+C4iuC5ieC5gOC4nuC4t+C5iOC4reC4iOC4s+C4geC4seC4lOC4geC4suC4o+C5gOC4guC5ieC4suC4luC4tuC4h+C4m+C4peC4seC5iuC4geC4reC4tOC4mSAo4LmA4LiK4LmI4LiZ4LiB4Lil4Li44LmI4LihOiDguJzguLnguYnguJTguLnguYHguKXguKPguLDguJrguJo7IOC4geC4peC4uOC5iOC4oSAxOyDguIHguKXguLjguYjguKEyOykgIuC5gOC4o+C4tOC5iOC4oeC4leC5ieC4mSIg4Lij4Liw4Lia4Li44Lin4LmI4Liy4LiW4LmJ4Liy4Lib4Lil4Lix4LmK4LiB4Lit4Li04LiZ4LiW4Li54LiB4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LmC4LiU4Lii4LiE4LmI4Liy4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4Lir4Lij4Li34Lit4Lir4Liy4LiB4Lic4Li54LmJ4LmD4LiK4LmJ4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LmA4Lie4Li34LmI4Lit4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LmE4LiU4LmJ4LiU4LmJ4Lin4Lii4LiV4LiZ4LmA4Lit4LiHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBkYXNoYm9hcmQgYmFja2VuZCBvZiB0aGUgc2xhdmUgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAn4Lie4Liy4Lij4Liy4Lih4Li04LmA4LiV4Lit4Lij4LmM4Liq4Liz4Lir4Lij4Lix4Lia4LmB4LiU4LiK4Lia4Lit4Lij4LmM4LiU4LmA4Lia4Li34LmJ4Lit4LiH4Lir4Lil4Lix4LiH4LiC4Lit4LiH4Lig4Liy4Lie4Lij4Lin4Lih4LiV4Lix4LmL4Linc2xhdmUgdOC4guC4reC4h+C4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4quC5gOC4reC5gOC4ouC5iOC4meC4leC5jCAi4LiI4Liz4LiB4Lix4LiUIiDguITguLfguK3guIHguLPguKvguJnguJTguIjguLPguJnguKfguJnguILguK3guIfguKPguLLguKLguIHguLLguKPguJfguLXguYjguYHguKrguJTguIfguYLguJTguKLguITguYjguLLguYDguKPguLTguYjguKHguJXguYnguJkgIuC4geC4peC4uOC5iOC4oSIg4LiI4Liw4LiW4Li54LiB4LiZ4Liz4Lih4Liy4LmD4LiK4LmJ4LmA4Lie4Li34LmI4Lit4LiI4Liz4LiB4Lix4LiU4LiB4Liy4Lij4LmA4LiC4LmJ4Liy4LiW4Li24LiH4Lib4Lil4Lix4LmK4LiB4Lit4Li04LiZICjguYDguIrguYjguJnguIHguKXguLjguYjguKE6IOC4nOC4ueC5ieC4lOC4ueC5geC4peC4o+C4sOC4muC4mjsg4LiB4Lil4Li44LmI4LihIDE7IOC4geC4peC4uOC5iOC4oTI7KSAi4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZIiDguKPguLDguJrguLjguKfguYjguLLguJbguYnguLLguJvguKXguLHguYrguIHguK3guLTguJnguJbguLnguIHguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguYLguJTguKLguITguYjguLLguYDguKPguLTguYjguKHguJXguYnguJnguKvguKPguLfguK3guKvguLLguIHguJzguLnguYnguYPguIrguYnguJXguYnguK3guIfguIHguLLguKPguYDguJ7guLfguYjguK3guYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguYTguJTguYnguJTguYnguKfguKLguJXguJnguYDguK3guIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVnaXN0cmF0aW9uIG9mIHRoZSB0aWNrZXQgZXZlbnQgbW9kdWxlLid9ID0gJ+C4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC4guC4reC4h+C5guC4oeC4lOC4ueC4peC4leC4seC5i+C4p+C4geC4tOC4iOC4geC4o+C4o+C4oSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBwZXJtaXNzaW9ucyB0byB1c2UgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfguIjguLPguYDguJvguYfguJnguJXguYnguK3guIfguKHguLXguIHguLLguKPguK3guJnguLjguI3guLLguJXguLTguYPguJnguIHguLLguKPguYPguIrguYnguIfguLLguJnguYPguJnguKvguJnguYnguLLguIjguK3guJXguLHguYvguKcgTWFzdGVyU2xhdmUg4LmD4LiZ4LiV4Lix4LmL4Lin4LiL4Li54Lih4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LiC4Lit4LiH4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgaWYgTWFzdGVyIC8gU2xhdmUgZmllbGQgbXVzdCBiZSBzZWxlY3RlZCBieSB0aGUgYWdlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGRlZmF1bHQgYm9keSB0ZXh0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4o+C4sOC4muC4uOC4guC5ieC4reC4hOC4p+C4suC4oeC4quC5iOC4p+C4meC5gOC4meC4t+C5ieC4reC4q+C4suC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4quC4s+C4q+C4o+C4seC4muC5guC4meC5ieC4leC4l+C4teC5iOC4luC4ueC4geC5gOC4nuC4tOC5iOC4oeC5gOC4guC5ieC4suC4oeC4suC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4o+C4sOC4muC4uOC4q+C4seC4p+C4guC5ieC4reC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC4quC4s+C4q+C4o+C4seC4muC5guC4meC5ieC4leC4l+C4teC5iOC4luC4ueC4geC5gOC4nuC4tOC5iOC4oeC5gOC4guC5ieC4suC4oeC4suC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgcmVzcG9uc2libGUgYWdlbnQgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4reC5gOC4ouC5iOC4meC4leC5jOC4l+C4teC5iOC4o+C4seC4muC4nOC4tOC4lOC4iuC4reC4muC4leC4seC5i+C4p+C5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgc2VydmljZSBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZSAoVGlja2V0OjpTZXJ2aWNlIG5lZWRzIHRvIGJlIGFjdGl2YXRlZCkuJ30gPQogICAgICAgICfguIHguLPguKvguJnguJTguIHguLLguKPguJrguKPguLTguIHguLLguKPguYPguJnguKvguJnguYnguLLguIjguK3guJXguLHguYvguKcgTWFzdGVyU2xhdmUg4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LiL4Li54Lih4LmD4LiZ4Lit4Li04LiZ4LmA4LiV4Lit4Lij4LmM4LmA4Lif4LiL4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmMICjguJXguLHguYvguKcgOjrguIHguLLguKPguJrguKPguLTguIHguLLguKPguIjguLPguYDguJvguYfguJnguJXguYnguK3guIfguKHguLXguIHguLLguKPguYDguJvguLTguJTguYPguIrguYnguIfguLLguJkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCBvd25lciBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C4geC4s+C4q+C4meC4lOC5gOC4iOC5ieC4suC4guC4reC4h+C4leC4seC5i+C4p+C5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IHR5cGUgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6VHlwZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAn4LiB4Liz4Lir4LiZ4LiU4Lib4Lij4Liw4LmA4Lig4LiX4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinIE1hc3RlclNsYXZlIOC4guC4reC4h+C4leC4seC5i+C4p+C4i+C4ueC4oeC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCAo4LiV4Lix4LmL4LinIDo64Lib4Lij4Liw4LmA4Lig4LiX4LiV4Lix4LmL4Lin4LiI4Liz4LmA4Lib4LmH4LiZ4LiV4LmJ4Lit4LiH4Lih4Li14LiB4Liy4Lij4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyBhIGxpbmsgaW4gdGhlIG1lbnUgdG8gY2hhbmdlIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0dXMgb2YgYSB0aWNrZXQgaW4gdGhlIHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4peC4tOC4h+C4hOC5jOC5g+C4meC5gOC4oeC4meC4ueC5gOC4nuC4t+C5iOC4reC5gOC4m+C4peC4teC5iOC4ouC4meC4quC4luC4suC4meC4oOC4suC4nuC4guC4reC4h+C4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguYPguJnguIHguLLguKPguIvguLnguKHguJXguLHguYvguKfguILguK3guIfguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgaW52b2x2ZWQgYWdlbnRzIG9uIHRoaXMgdGlja2V0LCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+C5geC4quC4lOC4h+C4o+C4suC4ouC4iuC4t+C5iOC4reC4guC4reC4h+C5gOC4reC5gOC4ouC5iOC4meC4leC5jOC4l+C4teC5iOC5gOC4geC4teC5iOC4ouC4p+C4guC5ieC4reC4h+C4geC4seC4muC4leC4seC5i+C4p+C4meC4teC5ieC5g+C4meC4q+C4meC5ieC4suC4iOC4reC4leC4seC5i+C4pyBNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4Lij4Liy4Lii4LiK4Li34LmI4Lit4LmA4Lit4LmA4Lii4LmI4LiZ4LiV4LmM4LiX4Li14LmI4LmA4Lib4LmH4LiZ4LmE4Lib4LmE4LiU4LmJ4LiX4Lix4LmJ4LiH4Lir4Lih4LiUICjguYDguK3guYDguKLguYjguJnguJXguYzguJfguLHguYnguIfguKvguKHguJTguJfguLXguYjguYTguJTguYnguKPguLHguJrguYLguJnguYnguJXguK3guJnguLjguI3guLLguJXguLTguYPguJnguITguLTguKcv4LiV4Lix4LmL4LinKSDguYDguJ7guLfguYjguK3guIHguLPguKvguJnguJTguKfguYjguLLguYPguITguKPguITguKfguKPguKPguLLguKLguIfguLLguJnguYDguIHguLXguYjguKLguKfguIHguLHguJrguYLguJnguYnguJXguJnguLXguYnguYPguJnguYPguJnguKvguJnguYnguLLguIjguK3guJXguLHguYvguKdNYXN0ZXJTbGF2ZSDguILguK3guIfguJXguLHguYvguKfguIvguLnguKHguYPguJnguK3guLTguJnguYDguJXguK3guKPguYzguYDguJ/guIvguILguK3guIfguYDguK3guYDguKLguYjguJnguJXguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgdGhlIHRpY2tldCBwcmlvcml0eSBvcHRpb25zIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn4LmB4Liq4LiU4LiH4LiV4Lix4Lin4LmA4Lil4Li34Lit4LiB4Lil4Liz4LiU4Lix4Lia4LiE4Lin4Liy4Lih4Liq4Liz4LiE4Lix4LiN4LiC4Lit4LiH4LiV4Lix4LmL4Lin4LmD4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LiV4Lix4LmL4LinIE1hc3RlclNsYXZlIOC4guC4reC4h+C4leC4seC5i+C4p+C4i+C4ueC4oeC5g+C4meC4reC4tOC4meC5gOC4leC4reC4o+C5jOC5gOC4n+C4i+C5gOC4reC5gOC4ouC5iOC4meC4leC5jCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICfguYLguKHguJTguLnguKXguJnguLXguYnguYDguJvguLTguJTguYPguIrguYnguIfguLLguJnguJ/guLTguKXguJTguYwgTWFzdGVyIC9TbGF2ZSDguYPguJnguKvguJnguYnguLLguIjguK3guK3guLXguYDguKHguKXguYPguKvguKHguYjguYHguKXguLDguJXguLHguYvguKfguYLguJfguKPguKjguLHguJ7guJfguYwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXJ0aGVyIHZlcnNpb25zIG9mIE9UUlNNYXN0ZXJTbGF2ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9DTl9PVFJTTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpY2tldE1hc3RlclNsYXZlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzJ30gPSAn566h55CGJXMlcyVz55qEIOS4uy/ku44g54q25oCBJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldE1hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgTWFzdGVyIFRpY2tldCd9ID0gJ+aWsOW7uuS4u+W3peWNlSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0J30gPSAn5Li75bel5Y2V6L2s5Li65pmu6YCa5bel5Y2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Vuc2V0IFNsYXZlIFRpY2tldCd9ID0gJ+S7juW3peWNlei9rOS4uuaZrumAmuW3peWNlSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXM6ICVzJ30gPSAnJXMlcyVz55qE5LuO5bel5Y2V77yaJXMnOwoKICAgICMgUGVybCBNb2R1bGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UaWNrZXRCdWxrL01hc3RlclNsYXZlLnBtCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBNYXN0ZXIgVGlja2V0cyd9ID0gJ+WPlua2iOS4u+W3peWNleiuvue9ric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbnNldCBTbGF2ZSBUaWNrZXRzJ30gPSAn5Y+W5raI5LuO5bel5Y2V6K6+572uJzsKCiAgICAjIFBlcmwgTW9kdWxlOiBLZXJuZWwvU3lzdGVtL0R5bmFtaWNGaWVsZC9Ecml2ZXIvTWFzdGVyU2xhdmUucG0KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3Rlcid9ID0gJ+S4uyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTbGF2ZSBvZiAlcyVzJXMnfSA9ICclcyVzJXPnmoTku47lt6XljZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIFRpY2tldCd9ID0gJ+S4u+W3peWNlSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBtYXN0ZXIgdGlja2V0cyd9ID0gJ+aJgOacieeahOS4u+W3peWNlSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgc2xhdmUgdGlja2V0cyd9ID0gJ+aJgOacieeahOS7juW3peWNlSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvd3MgYWRkaW5nIG5vdGVzIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5pyN5Yqh5Lq65ZGY55WM6Z2i5Li7L+S7juW3peWNleivpuaDheeql+WPo+WFgeiuuOa3u+WKoOWkh+azqOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIHRoZSB0aWNrZXQuJ30gPSAn5L+u5pS55bel5Y2V5Li7L+S7jueKtuaAgeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGR5bmFtaWMgZmllbGQgbmFtZSBmb3IgbWFzdGVyIHRpY2tldCBmZWF0dXJlLid9ID0gJ+WumuS5ieS4u+W3peWNleWKn+iDveeahOWKqOaAgeWtl+auteWQjeensOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIGEgdGlja2V0IGxvY2sgaXMgcmVxdWlyZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKGlmIHRoZSB0aWNrZXQgaXNuXCd0IGxvY2tlZCB5ZXQsIHRoZSB0aWNrZXQgZ2V0cyBsb2NrZWQgYW5kIHRoZSBjdXJyZW50IGFnZW50IHdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYXMgaXRzIG93bmVyKS4nfSA9CiAgICAgICAgJ+WumuS5ieacjeWKoeS6uuWRmOeVjOmdouWcqOW3peWNleS4u+S7juiuvue9rueql+WPo+aYr+WQpumcgOimgeW3peWNlemUgeWumu+8iOWmguaenOW3peWNlei/mOayoeaciemUgeWumu+8jOWImeW3peWNleiiq+mUgeWumuS4lOW9k+WJjeacjeWKoeS6uuWRmOiiq+iHquWKqOiuvue9ruS4uuW3peWNleaJgOacieiAhe+8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRoZSBNYXN0ZXJTbGF2ZSBub3RlIGlzIHZpc2libGUgZm9yIHRoZSBjdXN0b21lciBieSBkZWZhdWx0Lid9ID0KICAgICAgICAn5a6a5LmJ6buY6K6k5oOF5Ya15LiL5a6i5oi35piv5ZCm5Y+v5Lul55yL5YiwTWFzdGVyU2xhdmXnmoTlpIfms6jjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5pyN5Yqh5Lq65ZGY55WM6Z2i5Zyo5bel5Y2V5Li75LuO6K6+572u56qX5Y+j5re75Yqg5aSH5rOo5ZCO55qE6buY6K6k5LiL5LiA5Liq5bel5Y2V54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgdGlja2V0IHByaW9yaXR5IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5pyN5Yqh5Lq65ZGY55WM6Z2i5Zyo5bel5Y2V5Li75LuO6K6+572u56qX5Y+j5re75Yqg5aSH5rOo5ZCO5bel5Y2V55qE6buY6K6k5LyY5YWI57qn44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGhpc3RvcnkgY29tbWVudCBmb3IgdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gYWN0aW9uLCB3aGljaCBnZXRzIHVzZWQgZm9yIHRpY2tldCBoaXN0b3J5IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflrprkuYnlt6XljZXkuLvku47orr7nva7nqpflj6Pmk43kvZznmoTljoblj7Lms6jph4rvvIzku6XnlKjkuo7mnI3liqHkurrlkZjnlYzpnaLnmoTlt6XljZXljoblj7LjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgaGlzdG9yeSB0eXBlIGZvciB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBhY3Rpb24sIHdoaWNoIGdldHMgdXNlZCBmb3IgdGlja2V0IGhpc3RvcnkgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WumuS5ieW3peWNleS4u+S7juiuvue9rueql+WPo+aTjeS9nOeahOWOhuWPsuexu+Wei++8jOS7peeUqOS6juacjeWKoeS6uuWRmOeVjOmdoueahOW3peWNleWOhuWPsuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBuZXh0IHN0YXRlIG9mIGEgdGlja2V0IGFmdGVyIGFkZGluZyBhIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5a6a5LmJ5pyN5Yqh5Lq65ZGY55WM6Z2i5Zyo5bel5Y2V5Li75LuO6K6+572u56qX5Y+j5re75Yqg5aSH5rOo5ZCO55qE5LiL5LiA5Liq5bel5Y2V54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIHBhcnQgb2YgdGhlIGZlYXR1cmUuJ30gPSAn5ZCv55So5Li75LuO5Yqf6IO955qE6auY57qn5qih5byP44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdGhhdCBzbGF2ZSB0aWNrZXRzIGZvbGxvdyB0aGUgbWFzdGVyIHRpY2tldCB0byBhIG5ldyBtYXN0ZXIgaW4gdGhlIGFkdmFuY2VkIE1hc3RlclNsYXZlIG1vZGUuJ30gPQogICAgICAgICflkK/nlKjpq5jnuqfkuLvku47mqKHlvI/kuIvku47lt6XljZXpmo/kuLvlt6XljZXliLDkuIDkuKrmlrDnmoTkuLvlt6XljZXnmoTlip/og73jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlcyB0aGUgZmVhdHVyZSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAn5ZCv55So5pys5Yqf6IO95ZCO77yM5Y+v5L+u5pS55LiA5Liq5bel5Y2V5Zyo6auY57qn5Li75LuO5qih5byP5LiL55qE5Li75LuO54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gZm9yd2FyZCBhcnRpY2xlcyBmcm9tIHR5cGUgXCdmb3J3YXJkXCcgb2YgYSBtYXN0ZXIgdGlja2V0IHRvIHRoZSBjdXN0b21lcnMgb2YgdGhlIHNsYXZlIHRpY2tldHMuIEJ5IGRlZmF1bHQgKGRpc2FibGVkKSBpdCB3aWxsIG5vdCBmb3J3YXJkIGFydGljbGVzIGZyb20gdHlwZSBcJ2ZvcndhcmRcJyB0byB0aGUgc2xhdmUgdGlja2V0cy4nfSA9CiAgICAgICAgJ+WQr+eUqOacrOWKn+iDveWQju+8jOWwhuKAnOi9rOWPkeKAneexu+Wei+eahOS4u+W3peWNleS/oeS7tui9rOWPkeWIsOS7juW3peWNleeahOWuouaIt+OAgum7mOiupO+8iOW3suemgeeUqO+8ieS4jei9rOWPkeKAnOi9rOWPkeKAneexu+Wei+eahOS/oeS7tuWIsOS7juW3peWNleOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgY2hhbmdlIG9mIHRoZSBNYXN0ZXJTbGF2ZSBzdGF0ZSBpbiB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUgbW9kZS4nfSA9CiAgICAgICAgJ+WQr+eUqOacrOWKn+iDveWQju+8jOWcqOmrmOe6p+S4u+S7juaooeW8j+S4i+S/ruaUueS4u+S7jueKtuaAgeWQjuS/neaMgeeItuWtkOmTvuaOpeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGVzIHRoZSBmZWF0dXJlIHRvIGtlZXAgcGFyZW50LWNoaWxkIGxpbmsgYWZ0ZXIgdW5zZXQgb2YgdGhlIE1hc3RlclNsYXZlIHN0YXRlIGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAn5ZCv55So5pys5Yqf6IO95ZCO77yM5Zyo6auY57qn5Li75LuO5qih5byP5LiL5Y+W5raI5Li75LuO54q25oCB5ZCO5L+d5oyB54i25a2Q6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZXMgdGhlIGZlYXR1cmUgdG8gdW5zZXQgdGhlIE1hc3RlclNsYXZlIHN0YXRlIG9mIGEgdGlja2V0IGluIHRoZSBhZHZhbmNlZCBNYXN0ZXJTbGF2ZSBtb2RlLid9ID0KICAgICAgICAn5ZCv55So5pys5Yqf6IO95ZCO77yM5Y+v5Y+W5raI5LiA5Liq5bel5Y2V5Zyo6auY57qn5Li75LuO5qih5byP5LiL55qE5Li75LuO54q25oCB44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGEgbm90ZSBpcyBhZGRlZCBieSBhbiBhZ2VudCwgc2V0cyB0aGUgc3RhdGUgb2YgdGhlIHRpY2tldCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdouS4uy/ku47lt6XljZXor6bmg4Xnqpflj6PvvIzlpoLmnpzmnI3liqHkurrlkZjmt7vliqDkuoblpIfms6jvvIzorr7nva7lt6XljZXnmoTnirbmgIHjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzdGVyIC8gU2xhdmUnfSA9ICfkuLsv5LuOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlciBUaWNrZXRzJ30gPSAn5Li75bel5Y2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlJ30gPSAn5Li75LuOJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hc3RlclNsYXZlIG1vZHVsZSBmb3IgVGlja2V0IEJ1bGsgZmVhdHVyZS4nfSA9ICflt6XljZXmibnph4/mk43kvZzlip/og73nmoTkuLvku47lt6XljZXmibnph4/orr7nva7mqKHlnZcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBtYXN0ZXIgdGlja2V0cyBvdmVydmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLiAiTGltaXQiIGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBzaG93biBieSBkZWZhdWx0LiAiR3JvdXAiIGlzIHVzZWQgdG8gcmVzdHJpY3QgdGhlIGFjY2VzcyB0byB0aGUgcGx1Z2luIChlLiBnLiBHcm91cDogYWRtaW47Z3JvdXAxO2dyb3VwMjspLiAiRGVmYXVsdCIgZGV0ZXJtaW5lcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvciBpZiB0aGUgdXNlciBuZWVkcyB0byBlbmFibGUgaXQgbWFudWFsbHkuICJDYWNoZVRUTExvY2FsIiBpcyB0aGUgY2FjaGUgdGltZSBpbiBtaW51dGVzIGZvciB0aGUgcGx1Z2luLid9ID0KICAgICAgICAn5a6a5LmJ5pyN5Yqh5Lq65ZGY55WM6Z2i5Luq6KGo5p2/5Li75bel5Y2V5qaC6KeI5ZCO56uv55qE5Y+C5pWw44CC4oCcTGltaXTvvIjpmZDliLbvvInlrprkuYnpu5jorqTmmL7npLrnmoTmnaHnm67mlbDvvJvigJxHUk9VUO+8iOe7hO+8ieeUqOS6juWIsOacrOaPkuS7tueahOiuv+mXruadg+mZkOmZkOWItu+8iOWmgiBHcm91cDphZG1pbjtncm91cDE7Z3JvdXAy77yJ77yb4oCcRGVmYXVsdO+8iOm7mOiupO+8ieKAneS7o+ihqOi/meS4quaPkuS7tuaYr+m7mOiupOWQr+eUqOi/mOaYr+mcgOimgeeUqOaIt+aJi+WKqOWQr+eUqO+8m+KAnENhY2hlVFRMTG9jYWzigJ3ooajmmI7mnKzmj5Lku7bnmoTnvJPlrZjov4fmnJ/ml7bpl7TvvIjljZXkvY3vvJrliIbpkp/vvInjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGRhc2hib2FyZCBiYWNrZW5kIG9mIHRoZSBzbGF2ZSB0aWNrZXRzIG92ZXJ2aWV3IG9mIHRoZSBhZ2VudCBpbnRlcmZhY2UuICJMaW1pdCIgaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3duIGJ5IGRlZmF1bHQuICJHcm91cCIgaXMgdXNlZCB0byByZXN0cmljdCB0aGUgYWNjZXNzIHRvIHRoZSBwbHVnaW4gKGUuIGcuIEdyb3VwOiBhZG1pbjtncm91cDE7Z3JvdXAyOykuICJEZWZhdWx0IiBkZXRlcm1pbmVzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9yIGlmIHRoZSB1c2VyIG5lZWRzIHRvIGVuYWJsZSBpdCBtYW51YWxseS4gIkNhY2hlVFRMTG9jYWwiIGlzIHRoZSBjYWNoZSB0aW1lIGluIG1pbnV0ZXMgZm9yIHRoZSBwbHVnaW4uJ30gPQogICAgICAgICflrprkuYnmnI3liqHkurrlkZjnlYzpnaLku6rooajmnb/ku47lt6XljZXmpoLop4jlkI7nq6/nmoTlj4LmlbDjgILigJxMaW1pdO+8iOmZkOWItu+8ieWumuS5iem7mOiupOaYvuekuueahOadoeebruaVsO+8m+KAnEdST1VQ77yI57uE77yJ55So5LqO5Yiw5pys5o+S5Lu255qE6K6/6Zeu5p2D6ZmQ6ZmQ5Yi277yI5aaCIEdyb3VwOmFkbWluO2dyb3VwMTtncm91cDLvvInvvJvigJxEZWZhdWx077yI6buY6K6k77yJ4oCd5Luj6KGo6L+Z5Liq5o+S5Lu25piv6buY6K6k5ZCv55So6L+Y5piv6ZyA6KaB55So5oi35omL5Yqo5ZCv55So77yb4oCcQ2FjaGVUVExMb2NhbOKAneihqOaYjuacrOaPkuS7tueahOe8k+WtmOi/h+acn+aXtumXtO+8iOWNleS9je+8muWIhumSn++8ieOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWdpc3RyYXRpb24gb2YgdGhlIHRpY2tldCBldmVudCBtb2R1bGUuJ30gPSAn5rOo5YaM5Yiw5bel5Y2V5LqL5Lu25qih5Z2X44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIHBlcm1pc3Npb25zIHRvIHVzZSB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+acjeWKoeS6uuWRmOeVjOmdouS9v+eUqOS4u+S7juW3peWNleivpuaDheeql+WPo+W/hemcgOeahOadg+mZkOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIGlmIE1hc3RlciAvIFNsYXZlIGZpZWxkIG11c3QgYmUgc2VsZWN0ZWQgYnkgdGhlIGFnZW50Lid9ID0gJ+iuvue9ruacjeWKoeS6uuWRmOaYr+WQpuW/hemhu+mAieaLqeS4u+S7juWtl+auteOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSBkZWZhdWx0IGJvZHkgdGV4dCBmb3Igbm90ZXMgYWRkZWQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICforr7nva7mnI3liqHkurrlkZjnlYzpnaLkuLvku47lt6XljZXor6bmg4Xnqpflj6Pmt7vliqDlpIfms6jnmoTnmoTpu5jorqTmraPmlofmlofmnKzjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgZGVmYXVsdCBzdWJqZWN0IGZvciBub3RlcyBhZGRlZCBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+iuvue9ruacjeWKoeS6uuWRmOeVjOmdouS4u+S7juW3peWNleivpuaDheeql+WPo+a3u+WKoOWkh+azqOeahOeahOm7mOiupOS4u+mimOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXRzIHRoZSByZXNwb25zaWJsZSBhZ2VudCBvZiB0aGUgdGlja2V0IGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn6K6+572u5pyN5Yqh5Lq65ZGY55WM6Z2i5Li75LuO5bel5Y2V6K+m5oOF56qX5Y+j5bel5Y2V55qE6LSf6LSj5Lq644CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHNlcnZpY2UgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UgKFRpY2tldDo6U2VydmljZSBuZWVkcyB0byBiZSBhY3RpdmF0ZWQpLid9ID0KICAgICAgICAn6K6+572u5pyN5Yqh5Lq65ZGY55WM6Z2i5Li75LuO5bel5Y2V6K+m5oOF56qX5Y+j5bel5Y2V55qE5pyN5Yqh77yI6ZyA6KaB5r+A5rS75bel5Y2VOjrmnI3liqHvvInjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0cyB0aGUgdGlja2V0IG93bmVyIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn6K6+572u5pyN5Yqh5Lq65ZGY55WM6Z2i5Li75LuO5bel5Y2V6K+m5oOF56qX5Y+j5bel5Y2V55qE5omA5pyJ6ICF44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIHRpY2tldCB0eXBlIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlIChUaWNrZXQ6OlR5cGUgbmVlZHMgdG8gYmUgYWN0aXZhdGVkKS4nfSA9CiAgICAgICAgJ+iuvue9ruacjeWKoeS6uuWRmOeVjOmdouS4u+S7juW3peWNleivpuaDheeql+WPo+iuvue9ruW3peWNleeahOexu+Wei++8iOmcgOimgea/gOa0u+W3peWNlTo657G75Z6L77yJ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGluayBpbiB0aGUgbWVudSB0byBjaGFuZ2UgdGhlIE1hc3RlclNsYXZlIHN0YXR1cyBvZiBhIHRpY2tldCBpbiB0aGUgdGlja2V0IHpvb20gdmlldyBvZiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5bel5Y2V6K+m5oOF6KeG5Zu+5Lit77yM5Li65L+u5pS55Li75LuO5bel5Y2V54q25oCB6I+c5Y2V5pi+56S65LiA5Liq6ZO+5o6l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGludm9sdmVkIGFnZW50cyBvbiB0aGlzIHRpY2tldCwgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLkuLvku47lt6XljZXor6bmg4Xnqpflj6PvvIzmmL7npLrov5nkuKrlt6XljZXnm7jlhbPnmoTmiYDmnInmnI3liqHkurrlkZjliJfooajjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvd3MgYSBsaXN0IG9mIGFsbCB0aGUgcG9zc2libGUgYWdlbnRzIChhbGwgYWdlbnRzIHdpdGggbm90ZSBwZXJtaXNzaW9ucyBvbiB0aGUgcXVldWUvdGlja2V0KSB0byBkZXRlcm1pbmUgd2hvIHNob3VsZCBiZSBpbmZvcm1lZCBhYm91dCB0aGlzIG5vdGUsIGluIHRoZSB0aWNrZXQgTWFzdGVyU2xhdmUgc2NyZWVuIG9mIGEgem9vbWVkIHRpY2tldCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn5Zyo5pyN5Yqh5Lq65ZGY55WM6Z2i5Li75LuO5bel5Y2V6K+m5oOF56qX5Y+j77yM5pi+56S66L+Z5Liq5bel5Y2V5omA5pyJ5Y+v6IO955qE5pyN5Yqh5Lq65ZGY77yI6ZyA6KaB5YW35pyJ6L+Z5Liq6Zif5YiX5oiW5bel5Y2V55qE5aSH5rOo5p2D6ZmQ77yJ5YiX6KGo77yM55So5LqO56Gu5a6a6LCB5bCG5pS25Yiw5YWz5LqO6L+Z5Liq5aSH5rOo55qE6YCa55+l44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRoZSB0aWNrZXQgcHJpb3JpdHkgb3B0aW9ucyBpbiB0aGUgdGlja2V0IE1hc3RlclNsYXZlIHNjcmVlbiBvZiBhIHpvb21lZCB0aWNrZXQgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ+WcqOacjeWKoeS6uuWRmOeVjOmdouS4u+S7juW3peWNleivpuaDheeql+WPo+aYr+WQpuaYvuekuuW3peWNleS8mOWFiOe6p+eahOmAiemhueOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aGUgdGl0bGUgZmllbGQgaW4gdGhlIHRpY2tldCBNYXN0ZXJTbGF2ZSBzY3JlZW4gb2YgYSB6b29tZWQgdGlja2V0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICflnKjmnI3liqHkurrlkZjnlYzpnaLkuLvku47lt6XljZXor6bmg4Xnqpflj6PmmL7npLrlt6XljZXmoIfpopjlrZfmrrXjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2xhdmUgVGlja2V0cyd9ID0gJ+S7juW3peWNlSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgdGhlIGRpZmZlcmVudCBhcnRpY2xlIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hlcmUgdGhlIHJlYWwgbmFtZSBmcm9tIE1hc3RlciB0aWNrZXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBvbmUgaW4gdGhlIFNsYXZlIHRpY2tldC4nfSA9CiAgICAgICAgJ+aMh+WumuS4jeWQjOeahOS/oeS7tumAmuS/oea4oOmBk++8jOWFtuS4reS4u+W3peWNleeahOecn+WunuWnk+WQjeWwhuabv+aNouS4uuS7juW3peWNleS4reeahOecn+WunuWnk+WQjeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBhY3RpdmF0ZXMgTWFzdGVyL1NsYXZlIGZpZWxkIGluIG5ldyBlbWFpbCBhbmQgcGhvbmUgdGlja2V0IHNjcmVlbnMuJ30gPQogICAgICAgICfov5nkuKrmqKHlnZfnlKjmnaXmv4DmtLvmlrDlu7rpgq7ku7Yv55S16K+d5bel5Y2V56qX5Y+j55qE5Li75LuO5a2X5q6144CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnVydGhlciB2ZXJzaW9ucyBvZiBPVFJTTWFzdGVyU2xhdmUuJ30gPQogICAgICAgICfmraTorr7nva7lt7LlvIPnlKjvvIzkvJrlnKjlsIbmnaXniYjmnKznmoQgT1RSU01hc3RlclNsYXZlIOS4reenu+mZpOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgTWFzdGVyU2xhdmUuJ30gPSAn5Li75LuO5bel5Y2V44CCJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGQnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0FkZCgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fQWRkQWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2UnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X0NoYW5nZSgKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ2hhbmdlQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fQ2hhbmdlQWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnVW5kZWZpbmVkIHN1YmFjdGlvbi4nKSwKICAgICk7Cn0KCnN1YiBfQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJE5lZWRlZCAocXcoT2JqZWN0VHlwZSBGaWVsZFR5cGUgRmllbGRPcmRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JE5lZWRlZH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAkTmVlZGVkICk7CiAgICAgICAgaWYgKCAhJE5lZWRlZCApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdOZWVkICVzJywgJE5lZWRlZCApLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0aGUgb2JqZWN0IHR5cGUgYW5kIGZpZWxkIHR5cGUgZGlzcGxheSBuYW1lCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAkT2JqZWN0VHlwZU5hbWUKICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnRHluYW1pY0ZpZWxkczo6T2JqZWN0VHlwZScpLT57ICRHZXRQYXJhbXtPYmplY3RUeXBlfSB9LT57RGlzcGxheU5hbWV9IHx8ICcnOwogICAgbXkgJEZpZWxkVHlwZU5hbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6OkRyaXZlcicpLT57ICRHZXRQYXJhbXtGaWVsZFR5cGV9IH0tPntEaXNwbGF5TmFtZX0gfHwgJyc7CgogICAgcmV0dXJuICRTZWxmLT5fU2hvd1NjcmVlbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgJUdldFBhcmFtLAogICAgICAgIE1vZGUgICAgICAgICAgID0+ICdBZGQnLAogICAgICAgIEJyZWFkY3J1bWJUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdBZGQgJXMgZmllbGQnLCAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEZpZWxkVHlwZU5hbWUpICksCiAgICAgICAgT2JqZWN0VHlwZU5hbWUgPT4gJE9iamVjdFR5cGVOYW1lLAogICAgICAgIEZpZWxkVHlwZU5hbWUgID0+ICRGaWVsZFR5cGVOYW1lLAogICAgKTsKfQoKc3ViIF9BZGRBY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICVFcnJvcnM7CiAgICBteSAlR2V0UGFyYW07CgogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KE5hbWUgTGFiZWwgRmllbGRPcmRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JE5lZWRlZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkTmVlZGVkICk7CiAgICAgICAgaWYgKCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ1NlcnZlckVycm9yJyB9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnU2VydmVyRXJyb3JNZXNzYWdlJyB9ID0gVHJhbnNsYXRhYmxlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgIGlmICggJEdldFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgYWxwaGFudW1lcmljCiAgICAgICAgaWYgKCAkR2V0UGFyYW17TmFtZX0gIX4gbXtcQSAoPzogW2EtekEtWl0gfCBcZCApKyBcen14bXMgKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9CiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGUoJ1RoZSBmaWVsZCBkb2VzIG5vdCBjb250YWluIG9ubHkgQVNDSUkgbGV0dGVycyBhbmQgbnVtYmVycy4nKTsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgaWYgbmFtZSBpcyBkdXBsaWNhdGVkCiAgICAgICAgbXkgJUR5bmFtaWNGaWVsZHNMaXN0ID0gJXsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkTGlzdCgKICAgICAgICAgICAgICAgIFZhbGlkICAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFJlc3VsdFR5cGUgPT4gJ0hBU0gnLAogICAgICAgICAgICApCiAgICAgICAgfTsKCiAgICAgICAgJUR5bmFtaWNGaWVsZHNMaXN0ID0gcmV2ZXJzZSAlRHluYW1pY0ZpZWxkc0xpc3Q7CgogICAgICAgIGlmICggJER5bmFtaWNGaWVsZHNMaXN0eyAkR2V0UGFyYW17TmFtZX0gfSApIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlcmUgaXMgYW5vdGhlciBmaWVsZCB3aXRoIHRoZSBzYW1lIG5hbWUuJyk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEdldFBhcmFte0ZpZWxkT3JkZXJ9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIGZpZWxkIG9yZGVyIGlzIG51bWVyaWMgYW5kIHBvc2l0aXZlCiAgICAgICAgaWYgKCAkR2V0UGFyYW17RmllbGRPcmRlcn0gIX4gbXtcQSAoPzogXGQgKSsgXHp9eG1zICkgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGVycm9yIGNsYXNzCiAgICAgICAgICAgICRFcnJvcnN7RmllbGRPcmRlclNlcnZlckVycm9yfSAgICAgICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3Jze0ZpZWxkT3JkZXJTZXJ2ZXJFcnJvck1lc3NhZ2V9ID0gVHJhbnNsYXRhYmxlKCdUaGUgZmllbGQgbXVzdCBiZSBudW1lcmljLicpOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJENvbmZpZ1BhcmFtIChxdyggT2JqZWN0VHlwZSBPYmplY3RUeXBlTmFtZSBGaWVsZFR5cGUgRmllbGRUeXBlTmFtZSBWYWxpZElEICkpIHsKICAgICAgICAkR2V0UGFyYW17JENvbmZpZ1BhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRDb25maWdQYXJhbSApOwogICAgfQoKICAgICMgdW5jb3JyZWN0YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgcmV0dXJuIHRvIGFkZCBzY3JlZW4gaWYgZXJyb3JzCiAgICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBNb2RlID0+ICdBZGQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZXQgc3BlY2lmaWMgY29uZmlnCiAgICBteSAkRmllbGRDb25maWcgPSB7CiAgICAgICAgRGVmYXVsdFZhbHVlICAgICAgID0+ICcnLAogICAgICAgIFBvc3NpYmxlTm9uZSAgICAgICA9PiAxLAogICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgfTsKCiAgICAjIGNyZWF0ZSBhIG5ldyBmaWVsZAogICAgbXkgJEZpZWxkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgTmFtZSAgICAgICA9PiAkR2V0UGFyYW17TmFtZX0sCiAgICAgICAgTGFiZWwgICAgICA9PiAkR2V0UGFyYW17TGFiZWx9LAogICAgICAgIEZpZWxkT3JkZXIgPT4gJEdldFBhcmFte0ZpZWxkT3JkZXJ9LAogICAgICAgIEZpZWxkVHlwZSAgPT4gJEdldFBhcmFte0ZpZWxkVHlwZX0sCiAgICAgICAgT2JqZWN0VHlwZSA9PiAkR2V0UGFyYW17T2JqZWN0VHlwZX0sCiAgICAgICAgQ29uZmlnICAgICA9PiAkRmllbGRDb25maWcsCiAgICAgICAgVmFsaWRJRCAgICA9PiAkR2V0UGFyYW17VmFsaWRJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISRGaWVsZElEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NvdWxkIG5vdCBjcmVhdGUgdGhlIG5ldyBmaWVsZCcpLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICJBY3Rpb249QWRtaW5EeW5hbWljRmllbGQiLAogICAgKTsKfQoKc3ViIF9DaGFuZ2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBteSAlR2V0UGFyYW07CiAgICBmb3IgbXkgJE5lZWRlZCAocXcoT2JqZWN0VHlwZSBGaWVsZFR5cGUpKSB7CiAgICAgICAgJEdldFBhcmFteyROZWVkZWR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJE5lZWRlZCApOwogICAgICAgIGlmICggISROZWVkZWQgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTmVlZCAlcycsICROZWVkZWQgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGhlIG9iamVjdCB0eXBlIGFuZCBmaWVsZCB0eXBlIGRpc3BsYXkgbmFtZQogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJE9iamVjdFR5cGVOYW1lCiAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6Ok9iamVjdFR5cGUnKS0+eyAkR2V0UGFyYW17T2JqZWN0VHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSB8fCAnJzsKICAgIG15ICRGaWVsZFR5cGVOYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdEeW5hbWljRmllbGRzOjpEcml2ZXInKS0+eyAkR2V0UGFyYW17RmllbGRUeXBlfSB9LT57RGlzcGxheU5hbWV9IHx8ICcnOwoKICAgIG15ICRGaWVsZElEID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApOwoKICAgIGlmICggISRGaWVsZElEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWQgSUQnKSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgZGF0YQogICAgbXkgJER5bmFtaWNGaWVsZERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICk7CgogICAgIyBjaGVjayBmb3IgdmFsaWQgZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkRGF0YSkgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgZ2V0IGRhdGEgZm9yIGR5bmFtaWMgZmllbGQgJXMnLCAkRmllbGRJRCApLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5fU2hvd1NjcmVlbigKICAgICAgICAlUGFyYW0sCiAgICAgICAgJUdldFBhcmFtLAogICAgICAgICUke0R5bmFtaWNGaWVsZERhdGF9LAogICAgICAgIElEICAgICAgICAgICAgID0+ICRGaWVsZElELAogICAgICAgIE1vZGUgICAgICAgICAgID0+ICdDaGFuZ2UnLAogICAgICAgIEJyZWFkY3J1bWJUZXh0ID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgLT5UcmFuc2xhdGUoICdDaGFuZ2UgJXMgZmllbGQnLCAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJEZpZWxkVHlwZU5hbWUpICksCiAgICAgICAgT2JqZWN0VHlwZU5hbWUgPT4gJE9iamVjdFR5cGVOYW1lLAogICAgICAgIEZpZWxkVHlwZU5hbWUgID0+ICRGaWVsZFR5cGVOYW1lLAogICAgKTsKfQoKc3ViIF9DaGFuZ2VBY3Rpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICVFcnJvcnM7CiAgICBteSAlR2V0UGFyYW07CgogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgZm9yIG15ICROZWVkZWQgKHF3KE5hbWUgTGFiZWwgRmllbGRPcmRlcikpIHsKICAgICAgICAkR2V0UGFyYW17JE5lZWRlZH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkTmVlZGVkICk7CiAgICAgICAgaWYgKCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4gJ1NlcnZlckVycm9yJyB9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnU2VydmVyRXJyb3JNZXNzYWdlJyB9ID0gVHJhbnNsYXRhYmxlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRmllbGRJRCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKICAgIGlmICggISRGaWVsZElEICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWQgSUQnKSwKICAgICAgICApOwogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBkYXRhCiAgICBteSAkRHluYW1pY0ZpZWxkRGF0YSA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICBJRCA9PiAkRmllbGRJRCwKICAgICk7CgogICAgIyBjaGVjayBmb3IgdmFsaWQgZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uCiAgICBpZiAoICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkRGF0YSkgKSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgZ2V0IGRhdGEgZm9yIGR5bmFtaWMgZmllbGQgJXMnLCAkRmllbGRJRCApLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkR2V0UGFyYW17TmFtZX0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgbmFtZSBpcyBsb3dlcmNhc2UKICAgICAgICBpZiAoICRHZXRQYXJhbXtOYW1lfSAhfiBte1xBICg/OiBbYS16QS1aXSB8IFxkICkrIFx6fXhtcyApIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvck1lc3NhZ2V9ID0KICAgICAgICAgICAgICAgIFRyYW5zbGF0YWJsZSgnVGhlIGZpZWxkIGRvZXMgbm90IGNvbnRhaW4gb25seSBBU0NJSSBsZXR0ZXJzIGFuZCBudW1iZXJzLicpOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBuYW1lIGlzIGR1cGxpY2F0ZWQKICAgICAgICBteSAlRHluYW1pY0ZpZWxkc0xpc3QgPSAlewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0KAogICAgICAgICAgICAgICAgVmFsaWQgICAgICA9PiAwLAogICAgICAgICAgICAgICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICAgICAgICAgICkKICAgICAgICB9OwoKICAgICAgICAlRHluYW1pY0ZpZWxkc0xpc3QgPSByZXZlcnNlICVEeW5hbWljRmllbGRzTGlzdDsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkRHluYW1pY0ZpZWxkc0xpc3R7ICRHZXRQYXJhbXtOYW1lfSB9ICYmCiAgICAgICAgICAgICREeW5hbWljRmllbGRzTGlzdHsgJEdldFBhcmFte05hbWV9IH0gbmUgJEZpZWxkSUQKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlcmUgaXMgYW5vdGhlciBmaWVsZCB3aXRoIHRoZSBzYW1lIG5hbWUuJyk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIGl0J3MgYW4gaW50ZXJuYWwgZmllbGQsIGl0J3MgbmFtZSBzaG91bGQgbm90IGNoYW5nZQogICAgICAgIGlmICgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZERhdGEtPntJbnRlcm5hbEZpZWxkfSAmJgogICAgICAgICAgICAkRHluYW1pY0ZpZWxkc0xpc3R7ICRHZXRQYXJhbXtOYW1lfSB9IG5lICRGaWVsZElECiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZSBuYW1lIGZvciB0aGlzIGZpZWxkIHNob3VsZCBub3QgY2hhbmdlLicpOwogICAgICAgICAgICAkUGFyYW17SW50ZXJuYWxGaWVsZH0gICAgICAgICAgID0gJER5bmFtaWNGaWVsZERhdGEtPntJbnRlcm5hbEZpZWxkfTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkR2V0UGFyYW17RmllbGRPcmRlcn0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgZmllbGQgb3JkZXIgaXMgbnVtZXJpYyBhbmQgcG9zaXRpdmUKICAgICAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVyfSAhfiBte1xBICg/OiBcZCApKyBcen14bXMgKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7RmllbGRPcmRlclNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZSBmaWVsZCBtdXN0IGJlIG51bWVyaWMuJyk7CiAgICAgICAgfQogICAgfQoKICAgIGZvciBteSAkQ29uZmlnUGFyYW0gKHF3KCBPYmplY3RUeXBlIE9iamVjdFR5cGVOYW1lIEZpZWxkVHlwZSBGaWVsZFR5cGVOYW1lIFZhbGlkSUQgKSkgewogICAgICAgICRHZXRQYXJhbXskQ29uZmlnUGFyYW19ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJENvbmZpZ1BhcmFtICk7CiAgICB9CgogICAgIyB1bmNvcnJlY3RhYmxlIGVycm9ycwogICAgaWYgKCAhJEdldFBhcmFte1ZhbGlkSUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05lZWQgVmFsaWRJRCcpLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXR1cm4gdG8gY2hhbmdlIHNjcmVlbiBpZiBlcnJvcnMKICAgIGlmICglRXJyb3JzKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fU2hvd1NjcmVlbigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlRXJyb3JzLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIElEICAgPT4gJEZpZWxkSUQsCiAgICAgICAgICAgIE1vZGUgPT4gJ0NoYW5nZScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBzcGVjaWZpYyBjb25maWcKICAgIG15ICRGaWVsZENvbmZpZyA9IHsKICAgICAgICBEZWZhdWx0VmFsdWUgICAgICAgPT4gJycsCiAgICAgICAgUG9zc2libGVOb25lICAgICAgID0+IDEsCiAgICAgICAgVHJhbnNsYXRhYmxlVmFsdWVzID0+IDEsCiAgICB9OwoKICAgICMgdXBkYXRlIGR5bmFtaWMgZmllbGQgKEZpZWxkVHlwZSBhbmQgT2JqZWN0VHlwZSBjYW5ub3QgYmUgY2hhbmdlZDsgdXNlIG9sZCB2YWx1ZXMpCiAgICBteSAkVXBkYXRlU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZFVwZGF0ZSgKICAgICAgICBJRCAgICAgICAgID0+ICRGaWVsZElELAogICAgICAgIE5hbWUgICAgICAgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgIExhYmVsICAgICAgPT4gJEdldFBhcmFte0xhYmVsfSwKICAgICAgICBGaWVsZE9yZGVyID0+ICRHZXRQYXJhbXtGaWVsZE9yZGVyfSwKICAgICAgICBGaWVsZFR5cGUgID0+ICREeW5hbWljRmllbGREYXRhLT57RmllbGRUeXBlfSwKICAgICAgICBPYmplY3RUeXBlID0+ICREeW5hbWljRmllbGREYXRhLT57T2JqZWN0VHlwZX0sCiAgICAgICAgQ29uZmlnICAgICA9PiAkRmllbGRDb25maWcsCiAgICAgICAgVmFsaWRJRCAgICA9PiAkR2V0UGFyYW17VmFsaWRJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgIGlmICggISRVcGRhdGVTdWNjZXNzICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoICdDb3VsZCBub3QgdXBkYXRlIHRoZSBmaWVsZCAlcycsICRHZXRQYXJhbXtOYW1lfSApLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KAogICAgICAgIE9QID0+ICJBY3Rpb249QWRtaW5EeW5hbWljRmllbGQiLAogICAgKTsKfQoKc3ViIF9TaG93U2NyZWVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFBhcmFte0Rpc3BsYXlGaWVsZE5hbWV9ID0gJ05ldyc7CgogICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ0NoYW5nZScgKSB7CiAgICAgICAgJFBhcmFte1Nob3dXYXJuaW5nfSAgICAgID0gJ1Nob3dXYXJuaW5nJzsKICAgICAgICAkUGFyYW17RGlzcGxheUZpZWxkTmFtZX0gPSAkUGFyYW17TmFtZX07CiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZXQgYWxsIGZpZWxkcwogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2Ygb3JkZXIgbnVtYmVycyAoaXMgYWxyZWFkeSBzb3J0ZWQpLgogICAgbXkgQER5bmFtaWNmaWVsZE9yZGVyTGlzdDsKICAgIG15ICVEeW5hbWljZmllbGROYW1lc0xpc3Q7CiAgICBmb3IgbXkgJER5bmFtaWNmaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewogICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlzdCwgJER5bmFtaWNmaWVsZC0+e0ZpZWxkT3JkZXJ9OwogICAgICAgICREeW5hbWljZmllbGROYW1lc0xpc3R7ICREeW5hbWljZmllbGQtPntGaWVsZE9yZGVyfSB9ID0gJER5bmFtaWNmaWVsZC0+e0xhYmVsfTsKICAgIH0KCiAgICAjIHdoZW4gYWRkaW5nIHdlIG5lZWQgdG8gY3JlYXRlIGFuIGV4dHJhIG9yZGVyIG51bWJlciBmb3IgdGhlIG5ldyBmaWVsZAogICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ0FkZCcgKSB7CgogICAgICAgICMgZ2V0IHRoZSBsYXN0IGVsZW1lbnQgZm9ybSB0aGUgb3JkZXIgbGlzdCBhbmQgYWRkIDEKICAgICAgICBteSAkTGFzdE9yZGVyTnVtYmVyID0gJER5bmFtaWNmaWVsZE9yZGVyTGlzdFstMV07CiAgICAgICAgJExhc3RPcmRlck51bWJlcisrOwoKICAgICAgICAjIGFkZCB0aGlzIG5ldyBvcmRlciBudW1iZXIgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlzdCwgJExhc3RPcmRlck51bWJlcjsKICAgIH0KCiAgICAjIHNob3cgdGhlIG5hbWVzIG9mIHRoZSBvdGhlciBmaWVsZHMgdG8gZWFzZSBvcmRlcmluZwogICAgbXkgJU9yZGVyTmFtZXNMaXN0OwogICAgbXkgJEN1cnJlbnRseVRleHQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0N1cnJlbnRseScpIC4gJzogJzsKICAgIGZvciBteSAkT3JkZXJOdW1iZXIgKCBzb3J0IEBEeW5hbWljZmllbGRPcmRlckxpc3QgKSB7CiAgICAgICAgJE9yZGVyTmFtZXNMaXN0eyRPcmRlck51bWJlcn0gPSAkT3JkZXJOdW1iZXI7CiAgICAgICAgaWYgKCAkRHluYW1pY2ZpZWxkTmFtZXNMaXN0eyRPcmRlck51bWJlcn0gJiYgJE9yZGVyTnVtYmVyIG5lICRQYXJhbXtGaWVsZE9yZGVyfSApIHsKICAgICAgICAgICAgJE9yZGVyTmFtZXNMaXN0eyRPcmRlck51bWJlcn0gPSAkT3JkZXJOdW1iZXIgLiAnIC0gJwogICAgICAgICAgICAgICAgLiAkQ3VycmVudGx5VGV4dAogICAgICAgICAgICAgICAgLiAkRHluYW1pY2ZpZWxkTmFtZXNMaXN0eyRPcmRlck51bWJlcn07CiAgICAgICAgfQogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRPcmRlclN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgID0+IFwlT3JkZXJOYW1lc0xpc3QsCiAgICAgICAgTmFtZSAgICAgICAgICA9PiAnRmllbGRPcmRlcicsCiAgICAgICAgU2VsZWN0ZWRWYWx1ZSA9PiAkUGFyYW17RmllbGRPcmRlcn0gfHwgMSwKICAgICAgICBQb3NzaWJsZU5vbmUgID0+IDAsCiAgICAgICAgVHJhbnNsYXRpb24gICA9PiAwLAogICAgICAgIFNvcnQgICAgICAgICAgPT4gJ051bWVyaWNLZXknLAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ1c3NXBjIFZhbGlkYXRlX051bWJlciBNb2Rlcm5pemUnLAogICAgKTsKCiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgpOwoKICAgICMgY3JlYXRlIHRoZSBWYWxpZGl0eSBzZWxlY3QKICAgIG15ICRWYWxpZGl0eVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte1ZhbGlkSUR9IHx8IDEsCiAgICAgICAgUG9zc2libGVOb25lID0+IDAsCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgQ2xhc3MgICAgICAgID0+ICdXNTBwYyBNb2Rlcm5pemUnLAogICAgKTsKCiAgICAjIGNyZWF0ZSB0aGUgcG9zc2libGUgdmFsdWVzIHRlbXBsYXRlCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdWYWx1ZVRlbXBsYXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRSZWFkb25seUludGVybmFsRmllbGQgPSAnJzsKCiAgICAjIEludGVybmFsIGZpZWxkcyBjYW4gbm90IGJlIGRlbGV0ZWQgYW5kIG5hbWUgc2hvdWxkIG5vdCBjaGFuZ2UuCiAgICBpZiAoICRQYXJhbXtJbnRlcm5hbEZpZWxkfSApIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW50ZXJuYWxGaWVsZCcsCiAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgICAgICAkUmVhZG9ubHlJbnRlcm5hbEZpZWxkID0gJ3JlYWRvbmx5PSJyZWFkb25seSInOwogICAgfQoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVmFsaWRpdHlTdHJnICAgICAgICAgID0+ICRWYWxpZGl0eVN0cmcsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZE9yZGVyU3RyZyA9PiAkRHluYW1pY0ZpZWxkT3JkZXJTdHJnLAogICAgICAgICAgICBSZWFkb25seUludGVybmFsRmllbGQgPT4gJFJlYWRvbmx5SW50ZXJuYWxGaWVsZCwKICAgICAgICB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50UHJlTWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgojIHByZXZlbnQgdXNlZCBvbmNlIHdhcm5pbmcKdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRvIG9ubHkgdXNlIHRoaXMgaW4gcGhvbmUgYW5kIGVtYWlsIHRpY2tldAogICAgcmV0dXJuIGlmICggJFNlbGYtPntBY3Rpb259ICF+IC9eQWdlbnRUaWNrZXQoRW1haWx8UGhvbmUpJC8gKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZAogICAgbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJykgfHwgJyc7CgogICAgIyByZXR1cm4gaWYgbm8gY29uZmlnIG9wdGlvbiBpcyB1c2VkCiAgICByZXR1cm4gaWYgISRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZDsKCiAgICAjIHNldCBkeW5hbWljIGZpZWxkIGFzIHNob3duCiAgICAkQ29uZmlnT2JqZWN0LT57IlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSJ9LT57RHluYW1pY0ZpZWxkfS0+eyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0gPSAxOwoKICAgIHJldHVybjsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgJG9yaWdpbjogb3RycyAtIDYxNzY0ZmMzY2ZkMGU4MWNkNWY2ZGJjZjA4MTE1ZTEyMjQwZjQxMmQgLSBLZXJuZWwvTW9kdWxlcy9BZ2VudFRpY2tldEFjdGlvbkNvbW1vbi5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyAtLS0KIyBPVFJTTWFzdGVyU2xhdmUKIyAtLS0KI3BhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldEFjdGlvbkNvbW1vbjsKCiMgVGhpcyBtb2R1bGUgdXNlcyBBZ2VudFRpY2tldEFjdGlvbkNvbW1vbiBhcyBhIGJhc2UsIGZvciBlYXN5IHVwZGF0ZSBhbmQgZnJhbWV3b3JrIGNvbXBhdGliaWxpdHkKIyBzcGVjaWFsIG1hcmtlcnMgaGFzIGJlZW4gc2V0IGFsb25nIHRoZSBmaWxlIHRvIGVhc3kgc3BvdCB0aGUgZGlmZmVyZW5jZXMgaW50cm9kdWNlZCBieQojIE9UUlNNYXN0ZXJTbGF2ZSBwYWNrYWdlCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlOwojIC0tLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpFbWFpbFBhcnNlcjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIFRyeSB0byBsb2FkIGRyYWZ0IGlmIHJlcXVlc3RlZC4KICAgIGlmICgKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpLT57Rm9ybURyYWZ0fQogICAgICAgICYmICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKS0+R2V0UGFyYW0oIFBhcmFtID0+ICdMb2FkRm9ybURyYWZ0JyApCiAgICAgICAgJiYgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdElEJyApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5Mb2FkRm9ybURyYWZ0KAogICAgICAgICAgICBGb3JtRHJhZnRJRCA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybURyYWZ0SUQnICksCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGFydGljbGUgZm9yIHdob20gdGhpcyBzaG91bGQgYmUgYSByZXBseSwgaWYgYXZhaWxhYmxlCiAgICBteSAkUmVwbHlUb0FydGljbGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnUmVwbHlUb0FydGljbGUnICkgfHwgJyc7CiAgICBteSAkVGlja2V0SUQgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnVGlja2V0SUQnICkgICAgICAgfHwgJyc7CgogICAgIyBjaGVjayBpZiBSZXBseVRvQXJ0aWNsZSByZWFsbHkgYmVsb25ncyB0byB0aGUgdGlja2V0CiAgICBteSAlUmVwbHlUb0FydGljbGVDb250ZW50OwogICAgbXkgQFJlcGx5VG9BZHJlc3NlczsKICAgIGlmICgkUmVwbHlUb0FydGljbGUpIHsKCiAgICAgICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRSZXBseVRvQXJ0aWNsZSwKICAgICAgICApOwogICAgICAgICVSZXBseVRvQXJ0aWNsZUNvbnRlbnQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBBcnRpY2xlSUQgICAgID0+ICRSZXBseVRvQXJ0aWNsZSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAwLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57UmVwbHlUb0FydGljbGV9ICAgICAgICA9ICRSZXBseVRvQXJ0aWNsZTsKICAgICAgICAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlQ29udGVudH0gPSBcJVJlcGx5VG9BcnRpY2xlQ29udGVudDsKCiAgICAgICAgIyBnZXQgc2VuZGVyIG9mIG9yaWdpbmFsIG5vdGUgKHRvIGluZm9ybSBzZW5kZXIgYWJvdXQgYW5zd2VyKQogICAgICAgIGlmICggJFJlcGx5VG9BcnRpY2xlQ29udGVudHtDcmVhdGVCeX0gKSB7CiAgICAgICAgICAgIG15IEBSZXBseVRvU2VuZGVySUQgPSAoICRSZXBseVRvQXJ0aWNsZUNvbnRlbnR7Q3JlYXRlQnl9ICk7CiAgICAgICAgICAgICRTZWxmLT57UmVwbHlUb1NlbmRlclVzZXJJRH0gPSBcQFJlcGx5VG9TZW5kZXJJRDsKICAgICAgICB9CgogICAgICAgICMgaWYgYXJ0aWNsZSBiZWxvbmdzIHRvIG90aGVyIHRpY2tldCwgZG9uJ3QgdXNlIGl0IGFzIHJlcGx5CiAgICAgICAgaWYgKCAkUmVwbHlUb0FydGljbGVDb250ZW50e1RpY2tldElEfSBuZSAkU2VsZi0+e1RpY2tldElEfSApIHsKICAgICAgICAgICAgJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gPSAiIjsKICAgICAgICB9CgogICAgICAgICMgaWYgYXJ0aWNsZSBpcyBub3Qgb2YgdHlwZSBub3RlLWludGVybmFsLCBkb24ndCB1c2UgaXQgYXMgcmVwbHkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Q2hhbm5lbE5hbWVHZXQoKSBuZSAnSW50ZXJuYWwnCiAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Q2hhbm5lbE5hbWVHZXQoKSBlcSAnSW50ZXJuYWwnCiAgICAgICAgICAgICAgICAmJiAkUmVwbHlUb0FydGljbGVDb250ZW50e1NlbmRlclR5cGV9IG5lICdhZ2VudCcKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSA9ICIiOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBmb3JtIGlkCiAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybUlEJyApOwoKICAgICMgY3JlYXRlIGZvcm0gaWQKICAgIGlmICggISRTZWxmLT57Rm9ybUlEfSApIHsKICAgICAgICAkU2VsZi0+e0Zvcm1JRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpVcGxvYWRDYWNoZScpLT5Gb3JtSURDcmVhdGUoKTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTZWxmLT57VGlja2V0SUR9ICkgewogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ05vIFRpY2tldElEIGlzIGdpdmVuIScpLAogICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCJUaWNrZXQ6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb25zCiAgICBteSAkQWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UGVybWlzc2lvbigKICAgICAgICBUeXBlICAgICA9PiAkQ29uZmlnLT57UGVybWlzc2lvbn0sCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9CiAgICApOwoKICAgICMgZXJyb3Igc2NyZWVuLCBkb24ndCBzaG93IHRpY2tldAogICAgaWYgKCAhJEFjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKAogICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ1lvdSBuZWVkICVzIHBlcm1pc3Npb25zIScsICRDb25maWctPntQZXJtaXNzaW9ufSApLAogICAgICAgICAgICBXaXRoSGVhZGVyID0+ICd5ZXMnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgQUNMIHJlc3RyaWN0aW9ucwogICAgbXkgJVBvc3NpYmxlQWN0aW9ucyA9ICggMSA9PiAkU2VsZi0+e0FjdGlvbn0gKTsKCiAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVQb3NzaWJsZUFjdGlvbnMsCiAgICAgICAgQWN0aW9uICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdBY3Rpb24nLAogICAgICAgIFJldHVyblN1YlR5cGUgPT4gJy0nLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKICAgIG15ICVBY2xBY3Rpb24gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xBY3Rpb25EYXRhKCk7CgogICAgIyBjaGVjayBpZiBBQ0wgcmVzdHJpY3Rpb25zIGV4aXN0CiAgICBpZiAoICRBQ0wgfHwgSXNIYXNoUmVmV2l0aERhdGEoIFwlQWNsQWN0aW9uICkgKSB7CgogICAgICAgIG15ICVBY2xBY3Rpb25Mb29rdXAgPSByZXZlcnNlICVBY2xBY3Rpb247CgogICAgICAgICMgc2hvdyBlcnJvciBzY3JlZW4gaWYgQUNMIHByb2hpYml0cyB0aGlzIGFjdGlvbgogICAgICAgIGlmICggISRBY2xBY3Rpb25Mb29rdXB7ICRTZWxmLT57QWN0aW9ufSB9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICAgICAgfQogICAgfQoKICAgICMgQ2hlY2sgZm9yIGZhaWxlZCBkcmFmdCBsb2FkaW5nIHJlcXVlc3QuCiAgICBpZiAoCiAgICAgICAgJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0xvYWRGb3JtRHJhZnQnICkKICAgICAgICAmJiAhJFNlbGYtPntMb2FkZWRGb3JtRHJhZnRJRH0KICAgICAgICApCiAgICB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnTG9hZGluZyBkcmFmdCBmYWlsZWQhJyksCiAgICAgICAgICAgIENvbW1lbnQgPT4gVHJhbnNsYXRhYmxlKCdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4nKSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICApOwoKICAgIG15ICRMb2FkZWRGb3JtRHJhZnQ7CiAgICBpZiAoICRTZWxmLT57TG9hZGVkRm9ybURyYWZ0SUR9ICkgewogICAgICAgICRMb2FkZWRGb3JtRHJhZnQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0JyktPkZvcm1EcmFmdEdldCgKICAgICAgICAgICAgRm9ybURyYWZ0SUQgPT4gJFNlbGYtPntMb2FkZWRGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgIEdldENvbnRlbnQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSBAQXJ0aWNsZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyktPkFydGljbGVMaXN0KAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgT25seUxhc3QgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoQEFydGljbGVzKSB7CiAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZSA9ICRBcnRpY2xlc1swXTsKCiAgICAgICAgICAgIG15ICRMYXN0QXJ0aWNsZVN5c3RlbVRpbWU7CiAgICAgICAgICAgIGlmICggJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgICAgICBteSAkTGFzdEFydGljbGVTeXN0ZW1UaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJExhc3RBcnRpY2xlLT57Q3JlYXRlVGltZX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkTGFzdEFydGljbGVTeXN0ZW1UaW1lID0gJExhc3RBcnRpY2xlU3lzdGVtVGltZU9iamVjdC0+VG9FcG9jaCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkRm9ybURyYWZ0U3lzdGVtVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoCiAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRMb2FkZWRGb3JtRHJhZnQtPntDaGFuZ2VUaW1lfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRGb3JtRHJhZnRTeXN0ZW1UaW1lID0gJEZvcm1EcmFmdFN5c3RlbVRpbWVPYmplY3QtPlRvRXBvY2goKTsKCiAgICAgICAgICAgIGlmICggISRMYXN0QXJ0aWNsZVN5c3RlbVRpbWUgfHwgJEZvcm1EcmFmdFN5c3RlbVRpbWUgPD0gJExhc3RBcnRpY2xlU3lzdGVtVGltZSApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtGb3JtRHJhZnRPdXRkYXRlZH0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJExvYWRlZEZvcm1EcmFmdCkgKSB7CgogICAgICAgICRMb2FkZWRGb3JtRHJhZnQtPntDaGFuZ2VCeU5hbWV9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlck5hbWUoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkTG9hZGVkRm9ybURyYWZ0LT57Q2hhbmdlQnl9LAogICAgICAgICk7CiAgICB9CgogICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnUHJvcGVydGllcycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEZvcm1EcmFmdCAgICAgID0+ICRDb25maWctPntGb3JtRHJhZnR9LAogICAgICAgICAgICBGb3JtRHJhZnRJRCAgICA9PiAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSwKICAgICAgICAgICAgRm9ybURyYWZ0VGl0bGUgPT4gJExvYWRlZEZvcm1EcmFmdCA/ICRMb2FkZWRGb3JtRHJhZnQtPntUaXRsZX0gOiAnJywKICAgICAgICAgICAgRm9ybURyYWZ0TWV0YSAgPT4gJExvYWRlZEZvcm1EcmFmdCwKICAgICAgICAgICAgRm9ybUlEICAgICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICBSZXBseVRvQXJ0aWNsZSA9PiAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSwKICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2hvdyByaWdodCBoZWFkZXIKICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0hlYWRlcicgLiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgbG9jayBzdGF0ZQogICAgaWYgKCAkQ29uZmlnLT57UmVxdWlyZWRMb2NrfSApIHsKICAgICAgICBpZiAoICEkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrR2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApICkgewoKICAgICAgICAgICAgbXkgJExvY2sgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBMb2NrICAgICA9PiAnbG9jaycsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkTG9jaykgewoKICAgICAgICAgICAgICAgICMgU2V0IG5ldyBvd25lciBpZiB0aWNrZXQgb3duZXIgaXMgZGlmZmVyZW50IHRoZW4gbG9nZ2VkIHVzZXIuCiAgICAgICAgICAgICAgICBpZiAoICRUaWNrZXR7T3duZXJJRH0gIT0gJFNlbGYtPntVc2VySUR9ICkgewoKICAgICAgICAgICAgICAgICAgICAjIFJlbWVtYmVyIHByZXZpb3VzIG93bmVyLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcmVzdG9yZSB0aWNrZXQgb3duZXIgb24gdW5kbyBhY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1ByZXZpb3VzT3duZXJ9ID0gJFRpY2tldHtPd25lcklEfTsKCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgU2hvdyBsb2NrIHN0YXRlLgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJvcGVydGllc0xvY2snLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkQWNjZXNzT2sgPSAkVGlja2V0T2JqZWN0LT5Pd25lckNoZWNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBPd25lcklEICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggISRBY2Nlc3NPayApIHsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdTbWFsbCcsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgID0+ICRUaWNrZXR7TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICBCb2R5Q2xhc3MgPT4gJ1BvcHVwJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPldhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ1NvcnJ5LCB5b3UgbmVlZCB0byBiZSB0aGUgdGlja2V0IG93bmVyIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24uJyksCiAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjaGFuZ2UgdGhlIG93bmVyIGZpcnN0LicpLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1NtYWxsJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzaG93IGJhY2sgbGluawogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpY2tldEJhY2snLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnVGlja2V0QmFjaycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJUdldFBhcmFtOwogICAgZm9yIG15ICRLZXkgKAogICAgICAgIHF3KAogICAgICAgIE5ld1N0YXRlSUQgTmV3UHJpb3JpdHlJRCBUaW1lVW5pdHMgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgVGl0bGUgQm9keSBTdWJqZWN0IE5ld1F1ZXVlSUQKICAgICAgICBZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSBOZXdPd25lcklEIE5ld1Jlc3BvbnNpYmxlSUQgVHlwZUlEIFNlcnZpY2VJRCBTTEFJRAogICAgICAgIEV4cGFuZCBSZXBseVRvQXJ0aWNsZSBTdGFuZGFyZFRlbXBsYXRlSUQgQ3JlYXRlQXJ0aWNsZSBGb3JtRHJhZnRJRCBUaXRsZQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJEdldFBhcmFteyRLZXl9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJEtleSApOwogICAgfQoKICAgICMgQUNMIGNvbXBhdGliaWxpdHkgdHJhbnNsYXRpb24KICAgIG15ICVBQ0xDb21wYXRHZXRQYXJhbSA9ICgKICAgICAgICBTdGF0ZUlEICAgICAgID0+ICRHZXRQYXJhbXtOZXdTdGF0ZUlEfSwKICAgICAgICBQcmlvcml0eUlEICAgID0+ICRHZXRQYXJhbXtOZXdQcmlvcml0eUlEfSwKICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRHZXRQYXJhbXtOZXdRdWV1ZUlEfSwKICAgICAgICBPd25lcklEICAgICAgID0+ICRHZXRQYXJhbXtOZXdPd25lcklEfSwKICAgICAgICBSZXNwb25zaWJsZUlEID0+ICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSwKICAgICk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9ybSBodHRwIHJlcXVlc3QKICAgIG15ICVEeW5hbWljRmllbGRWYWx1ZXM7CgogICAgIyBkZWZpbmUgdGhlIGR5bmFtaWMgZmllbGRzIHRvIHNob3cgYmFzZWQgb24gdGhlIG9iamVjdCB0eXBlCiAgICBteSAkT2JqZWN0VHlwZSA9IFsnVGlja2V0J107CiMgLS0tCiMgT1RSU01hc3RlclNsYXZlCiMgLS0tCiAgICAjIGdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZAogICAgbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJykgfHwgJyc7CiAgICBteSAkTWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ01hc3RlclNsYXZlOjpBZHZhbmNlZEVuYWJsZWQnKSB8fCAwOwojIC0tLQoKICAgICMgb25seSBzY3JlZW5zIHRoYXQgYWRkIG5vdGVzIGNhbiBtb2RpZnkgQXJ0aWNsZSBkeW5hbWljIGZpZWxkcwogICAgaWYgKCAkQ29uZmlnLT57Tm90ZX0gKSB7CiAgICAgICAgJE9iamVjdFR5cGUgPSBbICdUaWNrZXQnLCAnQXJ0aWNsZScgXTsKICAgIH0KIyAtLS0KIyBPVFJTTWFzdGVyU2xhdmUKIyAtLS0KICAgIGlmICgkTWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWQpIHsKICAgICAgICBteSAkRGlzcGxheSA9ICRDb25maWctPntNYXN0ZXJTbGF2ZU1hbmRhdG9yeX0gPyAyIDogMTsKICAgICAgICAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfS0+eyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0gPSAkRGlzcGxheTsKICAgIH0KIyAtLS0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJE9iamVjdFR5cGUsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgYmFja2VuZCBvYmplY3QKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwoKICAgICAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGUgd2ViIHJlcXVlc3QKICAgICAgICAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICk7CiAgICB9CgogICAgIyBjb252ZXJ0IGR5bmFtaWMgZmllbGQgdmFsdWVzIGludG8gYSBzdHJ1Y3R1cmUgZm9yIEFDTHMKICAgIG15ICVEeW5hbWljRmllbGRBQ0xQYXJhbWV0ZXJzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRJdGVtICggc29ydCBrZXlzICVEeW5hbWljRmllbGRWYWx1ZXMgKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRJdGVtOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFkZWZpbmVkICREeW5hbWljRmllbGRWYWx1ZXN7JER5bmFtaWNGaWVsZEl0ZW19OwoKICAgICAgICAkRHluYW1pY0ZpZWxkQUNMUGFyYW1ldGVyc3sgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZEl0ZW0gfSA9ICREeW5hbWljRmllbGRWYWx1ZXN7JER5bmFtaWNGaWVsZEl0ZW19OwogICAgfQogICAgJEdldFBhcmFte0R5bmFtaWNGaWVsZH0gPSBcJUR5bmFtaWNGaWVsZEFDTFBhcmFtZXRlcnM7CgogICAgIyB0cmFuc2Zvcm0gcGVuZGluZyB0aW1lLCB0aW1lIHN0YW1wIGJhc2VkIG9uIHVzZXIgdGltZSB6b25lCiAgICBpZiAoCiAgICAgICAgZGVmaW5lZCAkR2V0UGFyYW17WWVhcn0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtNb250aH0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtEYXl9CiAgICAgICAgJiYgZGVmaW5lZCAkR2V0UGFyYW17SG91cn0KICAgICAgICAmJiBkZWZpbmVkICRHZXRQYXJhbXtNaW51dGV9CiAgICAgICAgKQogICAgewogICAgICAgICVHZXRQYXJhbSA9ICRMYXlvdXRPYmplY3QtPlRyYW5zZm9ybURhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgcmV3cmFwIGJvZHkgaWYgbm8gcmljaCB0ZXh0IGlzIHVzZWQKICAgIGlmICggJEdldFBhcmFte0JvZHl9ICYmICEkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5XcmFwUGxhaW5UZXh0KAogICAgICAgICAgICBNYXhDaGFyYWN0ZXJzID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlJyksCiAgICAgICAgICAgIFBsYWluVGV4dCAgICAgPT4gJEdldFBhcmFte0JvZHl9LAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgdXBsb2FkIGNhY2hlIG9iamVjdAogICAgbXkgJFVwbG9hZENhY2hlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6VXBsb2FkQ2FjaGUnKTsKCiAgICBpZiAoCiAgICAgICAgJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdG9yZScKICAgICAgICB8fCAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfQogICAgICAgICkKICAgIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdG9yZScgKSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKICAgICAgICB9CgogICAgICAgICRHZXRQYXJhbXtJc1Zpc2libGVGb3JDdXN0b21lcn0gLy89IDA7CgogICAgICAgICMgc3RvcmUgYWN0aW9uCiAgICAgICAgbXkgJUVycm9yOwoKICAgICAgICAjIGdldCBhbGwgYXR0YWNobWVudHMgbWV0YSBkYXRhCiAgICAgICAgbXkgQEF0dGFjaG1lbnRzID0gJFVwbG9hZENhY2hlT2JqZWN0LT5Gb3JtSURHZXRBbGxGaWxlc01ldGEoCiAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBHZXQgYW5kIHZhbGlkYXRlIGRyYWZ0IGFjdGlvbi4KICAgICAgICBteSAkRm9ybURyYWZ0QWN0aW9uID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Zvcm1EcmFmdEFjdGlvbicgKTsKICAgICAgICBpZiAoICRGb3JtRHJhZnRBY3Rpb24gJiYgISRDb25maWctPntGb3JtRHJhZnR9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnRm9ybURyYWZ0IGZ1bmN0aW9uYWxpdHkgZGlzYWJsZWQhJyksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAlRm9ybURyYWZ0UmVzcG9uc2U7CgogICAgICAgICMgQ2hlY2sgZHJhZnQgbmFtZS4KICAgICAgICBpZiAoCiAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb24KICAgICAgICAgICAgJiYgKCAkRm9ybURyYWZ0QWN0aW9uIGVxICdBZGQnIHx8ICRGb3JtRHJhZnRBY3Rpb24gZXEgJ1VwZGF0ZScgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkVGl0bGUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnRm9ybURyYWZ0VGl0bGUnICk7CgogICAgICAgICAgICAjIEEgZHJhZnQgbmFtZSBpcyByZXF1aXJlZC4KICAgICAgICAgICAgaWYgKCAhJFRpdGxlICkgewoKICAgICAgICAgICAgICAgICVGb3JtRHJhZnRSZXNwb25zZSA9ICgKICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpLT5UcmFuc2xhdGUoIkRyYWZ0IG5hbWUgaXMgcmVxdWlyZWQhIiksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIENob3NlbiBkcmFmdCBuYW1lIG11c3QgYmUgdW5pcXVlLgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRGb3JtRHJhZnRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkZvcm1EcmFmdCcpLT5Gb3JtRHJhZnRMaXN0R2V0KAogICAgICAgICAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBEUkFGVDoKICAgICAgICAgICAgICAgIGZvciBteSAkRm9ybURyYWZ0ICggQHskRm9ybURyYWZ0TGlzdH0gKSB7CgogICAgICAgICAgICAgICAgICAgICMgTm8gZXhpc3RpbmcgZHJhZnQgd2l0aCBzYW1lIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgbmV4dCBEUkFGVCBpZiAkVGl0bGUgbmUgJEZvcm1EcmFmdC0+e1RpdGxlfTsKCiAgICAgICAgICAgICAgICAgICAgIyBTYW1lIG5hbWUgZm9yIHVwZGF0ZSBvbiBleGlzdGluZyBkcmFmdC4KICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEZvcm1EcmFmdEFjdGlvbiBlcSAnVXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAmJiAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9IGVxICRGb3JtRHJhZnQtPntGb3JtRHJhZnRJRH0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBEUkFGVDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgQW5vdGhlciBkcmFmdCB3aXRoIHRoZSBjaG9zZW4gbmFtZSBhbHJlYWR5IGV4aXN0cy4KICAgICAgICAgICAgICAgICAgICAlRm9ybURyYWZ0UmVzcG9uc2UgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpMYW5ndWFnZScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggIkZvcm1EcmFmdCBuYW1lICVzIGlzIGFscmVhZHkgaW4gdXNlISIsICRUaXRsZSApLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbGFzdCBEUkFGVDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBQZXJmb3JtIGRyYWZ0IGFjdGlvbiBpbnN0ZWFkIG9mIHNhdmluZyBmb3JtIGRhdGEgaW4gdGlja2V0L2FydGljbGUuCiAgICAgICAgaWYgKCAkRm9ybURyYWZ0QWN0aW9uICYmICElRm9ybURyYWZ0UmVzcG9uc2UgKSB7CgogICAgICAgICAgICAjIFJlc2V0IEZvcm1EcmFmdElEIHRvIHByZXZlbnQgdXBkYXRpbmcgZXhpc3RpbmcgZHJhZnQuCiAgICAgICAgICAgIGlmICggJEZvcm1EcmFmdEFjdGlvbiBlcSAnQWRkJyAmJiAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9ICkgewogICAgICAgICAgICAgICAgJFBhcmFtT2JqZWN0LT57UXVlcnl9LT5wYXJhbSgKICAgICAgICAgICAgICAgICAgICAtbmFtZSAgPT4gJ0Zvcm1EcmFmdElEJywKICAgICAgICAgICAgICAgICAgICAtdmFsdWUgPT4gJycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkRm9ybURyYWZ0QWN0aW9uT2s7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb24gZXEgJ0FkZCcKICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAoICRGb3JtRHJhZnRBY3Rpb24gZXEgJ1VwZGF0ZScgJiYgJEdldFBhcmFte0Zvcm1EcmFmdElEfSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRGb3JtRHJhZnRBY3Rpb25PayA9ICRQYXJhbU9iamVjdC0+U2F2ZUZvcm1EcmFmdCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGVQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBSZXBseVRvQXJ0aWNsZSA9PiB1bmRlZiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRGb3JtRHJhZnRBY3Rpb25PaykgewogICAgICAgICAgICAgICAgJEZvcm1EcmFmdFJlc3BvbnNle1N1Y2Nlc3N9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICVGb3JtRHJhZnRSZXNwb25zZSA9ICgKICAgICAgICAgICAgICAgICAgICBTdWNjZXNzICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBwZXJmb3JtIHJlcXVlc3RlZCBkcmFmdCBhY3Rpb24hJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICglRm9ybURyYWZ0UmVzcG9uc2UpIHsKCiAgICAgICAgICAgICMgYnVpbGQgSlNPTiBvdXRwdXQKICAgICAgICAgICAgbXkgJEpTT04gPSAkTGF5b3V0T2JqZWN0LT5KU09ORW5jb2RlKAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJUZvcm1EcmFmdFJlc3BvbnNlLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZW5kIEpTT04gcmVzcG9uc2UKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnaW5saW5lJywKICAgICAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzdGF0ZSBvYmplY3QKICAgICAgICBteSAkU3RhdGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKTsKCiAgICAgICAgIyBjaGVjayBwZW5kaW5nIHRpbWUKICAgICAgICBpZiAoICRHZXRQYXJhbXtOZXdTdGF0ZUlEfSApIHsKICAgICAgICAgICAgbXkgJVN0YXRlRGF0YSA9ICRTdGF0ZU9iamVjdC0+U3RhdGVHZXQoCiAgICAgICAgICAgICAgICBJRCA9PiAkR2V0UGFyYW17TmV3U3RhdGVJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIHN0YXRlIHR5cGUKICAgICAgICAgICAgaWYgKCAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXnBlbmRpbmcvaSApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgICAgICAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICAgICAgICAgIGlmICggIWRlZmluZWQgJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3J7J0RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBkYXRldGltZSBvYmplY3QKICAgICAgICAgICAgICAgIG15ICRQZW5kaW5nRGF0ZVRpbWVPYmplY3QgPSAkS2VybmVsOjpPTS0+Q3JlYXRlKAogICAgICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgICAgIE9iamVjdFBhcmFtcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kID0+IDAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBnZXQgY3VycmVudCBzeXN0ZW0gZXBvY2gKICAgICAgICAgICAgICAgIG15ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgZGF0ZQogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICEkUGVuZGluZ0RhdGVUaW1lT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgfHwgJFBlbmRpbmdEYXRlVGltZU9iamVjdCA8ICRDdXJTeXN0ZW1EYXRlVGltZU9iamVjdAogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7J0RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDb25maWctPntOb3RlfSAmJiAkQ29uZmlnLT57Tm90ZU1hbmRhdG9yeX0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIHN1YmplY3QKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1N1YmplY3R9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydTdWJqZWN0SW52YWxpZCd9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBib2R5CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtCb2R5fSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnQm9keUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgb3duZXIKICAgICAgICBpZiAoICRDb25maWctPntPd25lcn0gJiYgJENvbmZpZy0+e093bmVyTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte05ld093bmVySUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydOZXdPd25lckludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgcmVzcG9uc2libGUKICAgICAgICBpZiAoICRDb25maWctPntSZXNwb25zaWJsZX0gJiYgJENvbmZpZy0+e1Jlc3BvbnNpYmxlTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte05ld1Jlc3BvbnNpYmxlSUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydOZXdSZXNwb25zaWJsZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgdGl0bGUKICAgICAgICBpZiAoICRDb25maWctPntUaXRsZX0gJiYgISRHZXRQYXJhbXtUaXRsZX0gKSB7CiAgICAgICAgICAgICRFcnJvcnsnVGl0bGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayB0eXBlCiAgICAgICAgaWYgKAogICAgICAgICAgICAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKQogICAgICAgICAgICAmJgogICAgICAgICAgICAoICRDb25maWctPntUaWNrZXRUeXBlfSApICYmCiAgICAgICAgICAgICggISRHZXRQYXJhbXtUeXBlSUR9ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEVycm9yeydUeXBlSURJbnZhbGlkJ30gPSAnIFNlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgc2VydmljZQogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U2VydmljZX0KICAgICAgICAgICAgJiYgJEdldFBhcmFte1NMQUlEfQogICAgICAgICAgICAmJiAhJEdldFBhcmFte1NlcnZpY2VJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEVycm9yeydTZXJ2aWNlSW52YWxpZCd9ID0gJyBTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIG1hbmRhdG9yeSBzZXJ2aWNlCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlfQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U2VydmljZU1hbmRhdG9yeX0KICAgICAgICAgICAgJiYgISRHZXRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRFcnJvcnsnU2VydmljZUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBtYW5kYXRvcnkgc2xhCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpCiAgICAgICAgICAgICYmICRDb25maWctPntTZXJ2aWNlfQogICAgICAgICAgICAmJiAkQ29uZmlnLT57U0xBTWFuZGF0b3J5fQogICAgICAgICAgICAmJiAhJEdldFBhcmFte1NMQUlEfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRXJyb3J7J1NMQUludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBtYW5kYXRvcnkgcXVldWUKICAgICAgICBpZiAoICRDb25maWctPntRdWV1ZX0gJiYgJENvbmZpZy0+e1F1ZXVlTWFuZGF0b3J5fSApIHsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte05ld1F1ZXVlSUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yeydOZXdRdWV1ZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbWFuZGF0b3J5IHN0YXRlCiAgICAgICAgaWYgKCAkQ29uZmlnLT57U3RhdGV9ICYmICRDb25maWctPntTdGF0ZU1hbmRhdG9yeX0gKSB7CiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtOZXdTdGF0ZUlEfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnsnTmV3U3RhdGVJbnZhbGlkJ30gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIHRpbWUgdW5pdHMsIGJ1dCBvbmx5IGlmIHRoZSBjdXJyZW50IHNjcmVlbiBoYXMgYSBub3RlCiAgICAgICAgIyAgIChhY2NvdW50ZWQgdGltZSBjYW4gb25seSBiZSBzdG9yZWQgaWYgYW5kIGFydGljbGUgaXMgZ2VuZXJhdGVkKQogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICYmICRDb25maWctPntOb3RlfQogICAgICAgICAgICAmJiAkR2V0UGFyYW17VGltZVVuaXRzfSBlcSAnJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRXJyb3J7J1RpbWVVbml0c0ludmFsaWQnfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBleHBhbmQKICAgICAgICBpZiAoICRHZXRQYXJhbXtFeHBhbmR9ICkgewogICAgICAgICAgICAlRXJyb3IgPSAoKTsKICAgICAgICAgICAgJEVycm9ye0V4cGFuZH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgaHRtbCBzdHJpbmdzIGZvciBhbGwgZHluYW1pYyBmaWVsZHMKICAgICAgICBteSBAVGlja2V0VHlwZUR5bmFtaWNGaWVsZHM7CiAgICAgICAgbXkgQEFydGljbGVUeXBlRHluYW1pY0ZpZWxkczsKCiAgICAgICAgIyBjeWNsZSB0cm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiMgLS0tCiMgT1RSU01hc3RlclNsYXZlCiMgLS0tCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkTWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWQKICAgICAgICAgICAgICAgICYmICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSBlcSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQ7CiAgICAgICAgICAgIH0KIyAtLS0KCiAgICAgICAgICAgIG15ICRQb3NzaWJsZVZhbHVlc0ZpbHRlcjsKCiAgICAgICAgICAgIG15ICRJc0FDTFJlZHVjaWJsZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0FDTFJlZHVjaWJsZScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJElzQUNMUmVkdWNpYmxlKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAgICAgICAgIG15ICRQb3NzaWJsZVZhbHVlcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5Qb3NzaWJsZVZhbHVlc0dldCgKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBmaWVsZCBoYXMgUG9zc2libGVWYWx1ZXMgcHJvcGVydHkgaW4gaXRzIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJFBvc3NpYmxlVmFsdWVzKSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHBvc3NpYmxlIHZhbHVlcyBrZXkgPT4gdmFsdWUgdG8ga2V5ID0+IGtleSBmb3IgQUNMcyB1c2luZyBhIEhhc2ggc2xpY2UKICAgICAgICAgICAgICAgICAgICBteSAlQWNsRGF0YSA9ICV7JFBvc3NpYmxlVmFsdWVzfTsKICAgICAgICAgICAgICAgICAgICBAQWNsRGF0YXsga2V5cyAlQWNsRGF0YSB9ID0ga2V5cyAlQWNsRGF0YTsKCiAgICAgICAgICAgICAgICAgICAgIyBzZXQgcG9zc2libGUgdmFsdWVzIGZpbHRlciBmcm9tIEFDTHMKICAgICAgICAgICAgICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUFjbERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUZpbHRlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBGaWxlciBrZXkgPT4ga2V5IGJhY2sgdG8ga2V5ID0+IHZhbHVlIHVzaW5nIG1hcAogICAgICAgICAgICAgICAgICAgICAgICAleyRQb3NzaWJsZVZhbHVlc0ZpbHRlcn0gPSBtYXAgeyAkXyA9PiAkUG9zc2libGVWYWx1ZXMtPnskX30gfQogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyAlRmlsdGVyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFZhbGlkYXRpb25SZXN1bHQ7CiMgLS0tCiMgT1RSU01hc3RlclNsYXZlCiMgLS0tCiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IGVxICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCApIHsKICAgICAgICAgICAgICAgJFBvc3NpYmxlVmFsdWVzRmlsdGVyID0gJFNlbGYtPl9HZXRNYXN0ZXJTbGF2ZURhdGEoCiAgICAgICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgICAgICBNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQsCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KIyAtLS0KCiAgICAgICAgICAgICMgRG8gbm90IHZhbGlkYXRlIG9ubHkgaWYgb2JqZWN0IHR5cGUgaXMgQXJ0aWNsZSBhbmQgQ3JlYXRlQXJ0aWNsZSB2YWx1ZSBpcyBub3QgZGVmaW5lZC4KICAgICAgICAgICAgaWYgKCAhKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gZXEgJ0FydGljbGUnICYmICEkR2V0UGFyYW17Q3JlYXRlQXJ0aWNsZX0gKSApIHsKCiAgICAgICAgICAgICAgICAkVmFsaWRhdGlvblJlc3VsdCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnkgPT4KICAgICAgICAgICAgICAgICAgICAgICAgJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhSXNIYXNoUmVmV2l0aERhdGEoJFZhbGlkYXRpb25SZXN1bHQpICkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBwZXJmb3JtIHZhbGlkYXRpb24gb24gZmllbGQgJXMhJywgJER5bmFtaWNGaWVsZENvbmZpZy0+e0xhYmVsfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudCA9PiBUcmFuc2xhdGFibGUoJ1BsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLicpLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBQcm9wYWdhdGUgdmFsaWRhdGlvbiBlcnJvciB0byB0aGUgRXJyb3IgdmFyaWFibGUgdG8gYmUgZGV0ZWN0ZWQgYnkgdGhlIGZyb250ZW5kLgogICAgICAgICAgICAgICAgaWYgKCAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICcgU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICREeW5hbWljRmllbGRDb25maWctPntPYmplY3RUeXBlfSBlcSAnVGlja2V0JyApIHsKCiAgICAgICAgICAgICAgICAjIEdldCBmaWVsZCBodG1sLgogICAgICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZEhUTUwgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RWRpdEZpZWxkUmVuZGVyKAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gJFBvc3NpYmxlVmFsdWVzRmlsdGVyLAogICAgICAgICAgICAgICAgICAgIFNlcnZlckVycm9yICAgICAgICAgID0+ICRWYWxpZGF0aW9uUmVzdWx0LT57U2VydmVyRXJyb3J9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZSAgICAgICAgID0+ICRWYWxpZGF0aW9uUmVzdWx0LT57RXJyb3JNZXNzYWdlfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBNYW5kYXRvcnkgICAgICAgICAgICA9PiAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyLAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXBkYXRhYmxlRmllbGRzICAgICAgPT4gJFNlbGYtPl9HZXRGaWVsZHNUb1VwZGF0ZSgpLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBUaWNrZXRUeXBlRHluYW1pY0ZpZWxkcywgewogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBGaWVsZCA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0ZpZWxkfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57T2JqZWN0VHlwZX0gZXEgJ0FydGljbGUnICkgewogICAgICAgICAgICAgICAgbXkgJENsYXNzICAgICAgICAgICAgPSAnJzsKICAgICAgICAgICAgICAgIG15ICRNYW5kYXRvcnlUb29sdGlwID0gMDsKCiAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntEeW5hbWljRmllbGR9LT57ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID09IDIgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkQ29uZmlnLT57Tm90ZU1hbmRhdG9yeX0gfHwKICAgICAgICAgICAgICAgICAgICAgICAgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDbGFzcyA9ICdWYWxpZGF0ZV9SZXF1aXJlZCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgICAgICAgICAgICA9ICdWYWxpZGF0ZV9EZXBlbmRpbmdSZXF1aXJlZEFORCBWYWxpZGF0ZV9EZXBlbmRpbmdfQ3JlYXRlQXJ0aWNsZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICRNYW5kYXRvcnlUb29sdGlwID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBHZXQgZmllbGQgaHRtbC4KICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFJlbmRlcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQb3NzaWJsZVZhbHVlc0ZpbHRlciwKICAgICAgICAgICAgICAgICAgICBTZXJ2ZXJFcnJvciAgICAgICAgICA9PiAkVmFsaWRhdGlvblJlc3VsdC0+e1NlcnZlckVycm9yfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBFcnJvck1lc3NhZ2UgICAgICAgICA9PiAkVmFsaWRhdGlvblJlc3VsdC0+e0Vycm9yTWVzc2FnZX0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgICAgPT4gKCAkQ2xhc3MgZXEgJ1ZhbGlkYXRlX1JlcXVpcmVkJyApID8gMSA6IDAsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgICAgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICAgICAgICAgIEFKQVhVcGRhdGUgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXBkYXRhYmxlRmllbGRzICAgICAgPT4gJFNlbGYtPl9HZXRGaWVsZHNUb1VwZGF0ZSgpLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZHMsIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRIVE1MLT57TGFiZWx9LAogICAgICAgICAgICAgICAgICAgIEZpZWxkICAgICAgICAgICAgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5VG9vbHRpcCA9PiAkTWFuZGF0b3J5VG9vbHRpcCwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgTWFrZSBzdXJlIHdlIGRvbid0IHNhdmUgZm9ybSBpZiBhIGRyYWZ0IHdhcyBsb2FkZWQuCiAgICAgICAgaWYgKCAkU2VsZi0+e0xvYWRlZEZvcm1EcmFmdElEfSApIHsKICAgICAgICAgICAgJUVycm9yID0gKCBMb2FkZWRGb3JtRHJhZnQgPT4gMSApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBlcnJvcnMKICAgICAgICBpZiAoJUVycm9yKSB7CgogICAgICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdTbWFsbCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgQm9keUNsYXNzID0+ICdQb3B1cCcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrKAogICAgICAgICAgICAgICAgQXR0YWNobWVudHMgICAgICAgPT4gXEBBdHRhY2htZW50cywKICAgICAgICAgICAgICAgIFRpbWVVbml0c1JlcXVpcmVkID0+ICgKICAgICAgICAgICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok5lZWRBY2NvdW50ZWRUaW1lJykKICAgICAgICAgICAgICAgICAgICA/ICdWYWxpZGF0ZV9SZXF1aXJlZCcKICAgICAgICAgICAgICAgICAgICA6ICcnCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICAgICAgICAgIFRpY2tldFR5cGVEeW5hbWljRmllbGRzICA9PiBcQFRpY2tldFR5cGVEeW5hbWljRmllbGRzLAogICAgICAgICAgICAgICAgQXJ0aWNsZVR5cGVEeW5hbWljRmllbGRzID0+IFxAQXJ0aWNsZVR5cGVEeW5hbWljRmllbGRzLAoKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVFcnJvciwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoCiAgICAgICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgbmV3IHRpdGxlCiAgICAgICAgaWYgKCAkQ29uZmlnLT57VGl0bGV9ICkgewogICAgICAgICAgICBpZiAoIGRlZmluZWQgJEdldFBhcmFte1RpdGxlfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFRpdGxlVXBkYXRlKAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICRHZXRQYXJhbXtUaXRsZX0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgbmV3IHR5cGUKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgJiYgJENvbmZpZy0+e1RpY2tldFR5cGV9ICkgewogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtUeXBlSUR9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZVNldCgKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgVHlwZUlEICAgPT4gJEdldFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgbmV3IHNlcnZpY2UKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgJiYgJENvbmZpZy0+e1NlcnZpY2V9ICkgewogICAgICAgICAgICBpZiAoIGRlZmluZWQgJEdldFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlU2V0KAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlQUNMQ29tcGF0R2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRHZXRQYXJhbXtTTEFJRH0gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRTTEFTZXQoCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgID0+ICRHZXRQYXJhbXtTTEFJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJFVubG9ja09uQXdheSA9IDE7CgogICAgICAgICMgbW92ZSB0aWNrZXQgdG8gYSBuZXcgcXVldWUsIGJ1dCBvbmx5IGlmIHRoZSBxdWV1ZSB3YXMgY2hhbmdlZAogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZy0+e1F1ZXVlfQogICAgICAgICAgICAmJiAkR2V0UGFyYW17TmV3UXVldWVJRH0KICAgICAgICAgICAgJiYgJEdldFBhcmFte05ld1F1ZXVlSUR9IG5lICRUaWNrZXR7UXVldWVJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgbW92ZSB0aWNrZXQgKHNlbmQgbm90aWZpY2F0aW9uIGlmIG5vIG5ldyBvd25lciBpcyBzZWxlY3RlZCkKICAgICAgICAgICAgbXkgJEJvZHlBc1RleHQgPSAnJzsKICAgICAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICRCb2R5QXNUZXh0ID0gJExheW91dE9iamVjdC0+UmljaFRleHQyQXNjaWkoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtCb2R5fSB8fCAwLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRCb2R5QXNUZXh0ID0gJEdldFBhcmFte0JvZHl9IHx8IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXkgJE1vdmUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRRdWV1ZVNldCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgICAgICA9PiAkR2V0UGFyYW17TmV3UXVldWVJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+ICRHZXRQYXJhbXtOZXdVc2VySUR9LAogICAgICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgID0+ICRCb2R5QXNUZXh0LAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJE1vdmUgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgbmV3IG93bmVyCiAgICAgICAgbXkgQE5vdGlmeURvbmU7CiAgICAgICAgaWYgKCAkQ29uZmlnLT57T3duZXJ9ICkgewogICAgICAgICAgICBteSAkQm9keVRleHQgPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dDJBc2NpaSgKICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkR2V0UGFyYW17Qm9keX0gfHwgJycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJEdldFBhcmFte05ld093bmVySUR9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja1NldCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBMb2NrICAgICA9PiAnbG9jaycsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRHZXRQYXJhbXtOZXdPd25lcklEfSwKICAgICAgICAgICAgICAgICAgICBDb21tZW50ICAgPT4gJEJvZHlUZXh0LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRVbmxvY2tPbkF3YXkgPSAwOwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdG8gbm90IG5vdGlmeSBvd25lciB0d2ljZQogICAgICAgICAgICAgICAgaWYgKCAkU3VjY2VzcyAmJiAkU3VjY2VzcyBlcSAxICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQE5vdGlmeURvbmUsICRHZXRQYXJhbXtOZXdPd25lcklEfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzZXQgbmV3IHJlc3BvbnNpYmxlCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6UmVzcG9uc2libGUnKSAmJiAkQ29uZmlnLT57UmVzcG9uc2libGV9ICkgewogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSApIHsKICAgICAgICAgICAgICAgIG15ICRCb2R5VGV4dCA9ICRMYXlvdXRPYmplY3QtPlJpY2hUZXh0MkFzY2lpKAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkR2V0UGFyYW17Qm9keX0gfHwgJycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRSZXNwb25zaWJsZVNldCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBOZXdVc2VySUQgPT4gJEdldFBhcmFte05ld1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICAgICAgICAgIENvbW1lbnQgICA9PiAkQm9keVRleHQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgdG8gbm90IG5vdGlmeSByZXNwb25zaWJsZSB0d2ljZQogICAgICAgICAgICAgICAgaWYgKCAkU3VjY2VzcyAmJiAkU3VjY2VzcyBlcSAxICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQE5vdGlmeURvbmUsICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbm90ZQogICAgICAgIG15ICRBcnRpY2xlSUQgPSAnJzsKICAgICAgICBteSAkUmV0dXJuVVJMOwoKICAgICAgICAjIHNldCBwcmlvcml0eQogICAgICAgIGlmICggJENvbmZpZy0+e1ByaW9yaXR5fSAmJiAkR2V0UGFyYW17TmV3UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFByaW9yaXR5U2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJEdldFBhcmFte05ld1ByaW9yaXR5SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBzdGF0ZQogICAgICAgIGlmICggJENvbmZpZy0+e1N0YXRlfSAmJiAkR2V0UGFyYW17TmV3U3RhdGVJRH0gKSB7CiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+ICRHZXRQYXJhbXtOZXdTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGQgPT4gJEdldFBhcmFte0R5bmFtaWNGaWVsZH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHVubG9jayB0aGUgdGlja2V0IGFmdGVyIGNsb3NlCiAgICAgICAgICAgIG15ICVTdGF0ZURhdGEgPSAkU3RhdGVPYmplY3QtPlN0YXRlR2V0KAogICAgICAgICAgICAgICAgSUQgPT4gJEdldFBhcmFte05ld1N0YXRlSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzZXQgdW5sb2NrIG9uIGNsb3NlIHN0YXRlCiAgICAgICAgICAgIGlmICggJFN0YXRlRGF0YXtUeXBlTmFtZX0gPX4gL15jbG9zZS9pICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja1NldCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBMb2NrICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNldCBwZW5kaW5nIHRpbWUgb24gcGVuZGluZyBzdGF0ZQogICAgICAgICAgICBlbHNpZiAoICRTdGF0ZURhdGF7VHlwZU5hbWV9ID1+IC9ecGVuZGluZy9pICkgewoKICAgICAgICAgICAgICAgICMgc2V0IHBlbmRpbmcgdGltZQogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0UGVuZGluZ1RpbWVTZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgcmVkaXJlY3QgcGFyZW50IHdpbmRvdyB0byBsYXN0IHNjcmVlbiBvdmVydmlldyBvbiBjbG9zZWQgdGlja2V0cwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkU3RhdGVEYXRhe1R5cGVOYW1lfSA9fiAvXmNsb3NlL2kKICAgICAgICAgICAgICAgICYmICEkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OlJlZGlyZWN0QWZ0ZXJDbG9zZURpc2FibGVkJykKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFJldHVyblVSTCA9ICRTZWxmLT57TGFzdFNjcmVlbk92ZXJ2aWV3fSB8fCAnQWN0aW9uPUFnZW50RGFzaGJvYXJkJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17Q3JlYXRlQXJ0aWNsZX0KICAgICAgICAgICAgJiYgJENvbmZpZy0+e05vdGV9CiAgICAgICAgICAgICYmICggJEdldFBhcmFte1N1YmplY3R9IHx8ICRHZXRQYXJhbXtCb2R5fSApCiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U3ViamVjdH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRDb25maWctPntTdWJqZWN0fSApIHsKICAgICAgICAgICAgICAgICAgICBteSAkU3ViamVjdCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJENvbmZpZy0+e1N1YmplY3R9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFte1N1YmplY3R9ID0gJFN1YmplY3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U3ViamVjdH0gPSAkR2V0UGFyYW17U3ViamVjdH0KICAgICAgICAgICAgICAgICAgICB8fCAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05vIHN1YmplY3QnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgcHJlIGxvYWRlZCBhdHRhY2htZW50CiAgICAgICAgICAgIG15IEBBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNEYXRhKAogICAgICAgICAgICAgICAgRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHN1Ym1pdCBhdHRhY2htZW50CiAgICAgICAgICAgIG15ICVVcGxvYWRTdHVmZiA9ICRQYXJhbU9iamVjdC0+R2V0VXBsb2FkQWxsKAogICAgICAgICAgICAgICAgUGFyYW0gPT4gJ0ZpbGVVcGxvYWQnLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJVVwbG9hZFN0dWZmKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBBdHRhY2htZW50cywgXCVVcGxvYWRTdHVmZjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE1pbWVUeXBlID0gJ3RleHQvcGxhaW4nOwogICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgJE1pbWVUeXBlID0gJ3RleHQvaHRtbCc7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgdW51c2VkIGlubGluZSBpbWFnZXMKICAgICAgICAgICAgICAgIG15IEBOZXdBdHRhY2htZW50RGF0YTsKICAgICAgICAgICAgICAgIEFUVEFDSE1FTlQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnQgKEBBdHRhY2htZW50cykgewogICAgICAgICAgICAgICAgICAgIG15ICRDb250ZW50SUQgPSAkQXR0YWNobWVudC0+e0NvbnRlbnRJRH07CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkQ29udGVudElECiAgICAgICAgICAgICAgICAgICAgICAgICYmICggJEF0dGFjaG1lbnQtPntDb250ZW50VHlwZX0gPX4gL2ltYWdlL2kgKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENvbnRlbnRJREhUTUxRdW90ZSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ID0+ICRDb250ZW50SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIHdvcmthcm91bmQgZm9yIGxpbmsgZW5jb2RlIG9mIHJpY2ggdGV4dCBlZGl0b3IsIHNlZSBidWcjNTA1MwogICAgICAgICAgICAgICAgICAgICAgICBteSAkQ29udGVudElETGlua0VuY29kZSA9ICRMYXlvdXRPYmplY3QtPkxpbmtFbmNvZGUoJENvbnRlbnRJRCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSA9fiBzLyhDb250ZW50SUQ9KSRDb250ZW50SURMaW5rRW5jb2RlLyQxJENvbnRlbnRJRC9nOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgYXR0YWNobWVudCBpZiBub3QgbGlua2VkIGluIGJvZHkKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkR2V0UGFyYW17Qm9keX0gIX4gLyhcUSRDb250ZW50SURIVE1MUXVvdGVcRXxcUSRDb250ZW50SURcRSkvaTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgcmVtZW1iZXIgaW5saW5lIGltYWdlcyBhbmQgbm9ybWFsIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICAgICAgICAgcHVzaCBATmV3QXR0YWNobWVudERhdGEsIFwleyRBdHRhY2htZW50fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIEBBdHRhY2htZW50cyA9IEBOZXdBdHRhY2htZW50RGF0YTsKCiAgICAgICAgICAgICAgICAjIHZlcmlmeSBodG1sIGRvY3VtZW50CiAgICAgICAgICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT5SaWNoVGV4dERvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRHZXRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRGcm9tID0gIlwiJFNlbGYtPntVc2VyRnVsbG5hbWV9XCIgPCRTZWxmLT57VXNlckVtYWlsfT4iOwogICAgICAgICAgICBteSBATm90aWZ5VXNlcklEczsKCiAgICAgICAgICAgICMgZ2V0IGxpc3Qgb2YgdXNlcnMgdGhhdCB3aWxsIGJlIGluZm9ybWVkIHdpdGhvdXQgc2VsZWN0aW9uIGluIGluZm9ybWVkL2ludm9sdmVkIGxpc3QKICAgICAgICAgICAgbXkgQFVzZXJMaXN0V2l0aG91dFNlbGVjdGlvbgogICAgICAgICAgICAgICAgPSBzcGxpdCggJywnLCAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnVXNlckxpc3RXaXRob3V0U2VsZWN0aW9uJyApIHx8ICIiICk7CgogICAgICAgICAgICAjIGdldCBpbmZvcm0gdXNlciBsaXN0CiAgICAgICAgICAgIG15IEBJbmZvcm1Vc2VySUQgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSW5mb3JtVXNlcklEJyApOwoKICAgICAgICAgICAgIyBnZXQgaW52b2x2ZWQgdXNlciBsaXN0CiAgICAgICAgICAgIG15IEBJbnZvbHZlZFVzZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJbnZvbHZlZFVzZXJJRCcgKTsKCiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0luZm9ybUFnZW50fSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQE5vdGlmeVVzZXJJRHMsIEBJbmZvcm1Vc2VySUQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJENvbmZpZy0+e0ludm9sdmVkQWdlbnR9ICkgewogICAgICAgICAgICAgICAgcHVzaCBATm90aWZ5VXNlcklEcywgQEludm9sdmVkVXNlcklEOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRTZWxmLT57UmVwbHlUb0FydGljbGV9ICkgewogICAgICAgICAgICAgICAgcHVzaCBATm90aWZ5VXNlcklEcywgQFVzZXJMaXN0V2l0aG91dFNlbGVjdGlvbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0FjdGlvbn0gZXEgJ0FnZW50VGlja2V0RW1haWxPdXRib3VuZCcgKSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZTo6QmFja2VuZDo6RW1haWwnKS0+QXJ0aWNsZVNlbmQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBTZW5kZXJUeXBlICAgICAgICAgICAgICAgICAgICAgID0+ICdhZ2VudCcsCiAgICAgICAgICAgICAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkRnJvbSwKICAgICAgICAgICAgICAgICAgICBNaW1lVHlwZSAgICAgICAgICAgICAgICAgICAgICAgID0+ICRNaW1lVHlwZSwKICAgICAgICAgICAgICAgICAgICBDaGFyc2V0ICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRMYXlvdXRPYmplY3QtPntVc2VyQ2hhcnNldH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgICAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeVR5cGV9LAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgICAgICAgICAgICAgPT4gJENvbmZpZy0+e0hpc3RvcnlDb21tZW50fSwKICAgICAgICAgICAgICAgICAgICBGb3JjZU5vdGlmaWNhdGlvblRvVXNlcklEICAgICAgID0+IFxATm90aWZ5VXNlcklEcywKICAgICAgICAgICAgICAgICAgICBFeGNsdWRlTXV0ZU5vdGlmaWNhdGlvblRvVXNlcklEID0+IFxATm90aWZ5RG9uZSwKICAgICAgICAgICAgICAgICAgICBVbmxvY2tPbkF3YXkgICAgICAgICAgICAgICAgICAgID0+ICRVbmxvY2tPbkF3YXksCiAgICAgICAgICAgICAgICAgICAgQXR0YWNobWVudCAgICAgICAgICAgICAgICAgICAgICA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZUlEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZTo6QmFja2VuZDo6SW50ZXJuYWwnKS0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgICAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgICAgICAgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRGcm9tLAogICAgICAgICAgICAgICAgICAgIE1pbWVUeXBlICAgICAgICAgICAgICAgICAgICAgICAgPT4gJE1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgIENoYXJzZXQgICAgICAgICAgICAgICAgICAgICAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJDaGFyc2V0fSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgICAgICAgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICAgICAgICAgICAgICAgICAgID0+ICRDb25maWctPntIaXN0b3J5VHlwZX0sCiAgICAgICAgICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgICAgICAgICAgICAgICAgICA9PiAkQ29uZmlnLT57SGlzdG9yeUNvbW1lbnR9LAogICAgICAgICAgICAgICAgICAgIEZvcmNlTm90aWZpY2F0aW9uVG9Vc2VySUQgICAgICAgPT4gXEBOb3RpZnlVc2VySURzLAogICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVNdXRlTm90aWZpY2F0aW9uVG9Vc2VySUQgPT4gXEBOb3RpZnlEb25lLAogICAgICAgICAgICAgICAgICAgIFVubG9ja09uQXdheSAgICAgICAgICAgICAgICAgICAgPT4gJFVubG9ja09uQXdheSwKICAgICAgICAgICAgICAgICAgICBBdHRhY2htZW50ICAgICAgICAgICAgICAgICAgICAgID0+IFxAQXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAhJEFydGljbGVJRCApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHRpbWUgYWNjb3VudGluZwogICAgICAgICAgICBpZiAoICRHZXRQYXJhbXtUaW1lVW5pdHN9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0QWNjb3VudFRpbWUoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgICAgIFRpbWVVbml0ICA9PiAkR2V0UGFyYW17VGltZVVuaXRzfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyByZW1vdmUgcHJlIHN1Ym1pdHRlZCBhdHRhY2htZW50cwogICAgICAgICAgICAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZSggRm9ybUlEID0+ICRTZWxmLT57Rm9ybUlEfSApOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgZHluYW1pYyBmaWVsZHMKICAgICAgICAjIGN5Y2xlIHRocm91Z2ggdGhlIGFjdGl2YXRlZCBEeW5hbWljIEZpZWxkcyBmb3IgdGhpcyBzY3JlZW4KICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CiMgLS0tCiMgT1RSU01hc3RlclNsYXZlCiMgLS0tCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkTWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWQKICAgICAgICAgICAgICAgICYmICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSBlcSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQ7CiAgICAgICAgICAgIH0KIyAtLS0KCiAgICAgICAgICAgICMgc2V0IHRoZSBvYmplY3QgSUQgKFRpY2tldElEIG9yIEFydGljbGVJRCkgZGVwZW5kaW5nIG9uIHRoZSBmaWVsZCBjb25maWdyYXRpb24KICAgICAgICAgICAgbXkgJE9iamVjdElEID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdBcnRpY2xlJyA/ICRBcnRpY2xlSUQgOiAkU2VsZi0+e1RpY2tldElEfTsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRPYmplY3RJRCwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIElmIGZvcm0gd2FzIGNhbGxlZCBiYXNlZCBvbiBhIGRyYWZ0LAogICAgICAgICMgICBkZWxldGUgZHJhZnQgc2luY2UgaXRzIGNvbnRlbnQgaGFzIG5vdyBiZWVuIHVzZWQuCiAgICAgICAgaWYgKAogICAgICAgICAgICAkR2V0UGFyYW17Rm9ybURyYWZ0SUR9CiAgICAgICAgICAgICYmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Rm9ybURyYWZ0JyktPkZvcm1EcmFmdERlbGV0ZSgKICAgICAgICAgICAgICAgIEZvcm1EcmFmdElEID0+ICRHZXRQYXJhbXtGb3JtRHJhZnRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiBUcmFuc2xhdGFibGUoJ0NvdWxkIG5vdCBkZWxldGUgZHJhZnQhJyksCiAgICAgICAgICAgICAgICBDb21tZW50ID0+IFRyYW5zbGF0YWJsZSgnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGxvYWQgbmV3IFVSTCBpbiBwYXJlbnQgd2luZG93IGFuZCBjbG9zZSBwb3B1cAogICAgICAgICRSZXR1cm5VUkwgfHw9ICJBY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRTZWxmLT57VGlja2V0SUR9O0FydGljbGVJRD0kQXJ0aWNsZUlEIjsKCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgIFVSTCA9PiAkUmV0dXJuVVJMLAogICAgICAgICk7CiAgICB9CiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQUpBWFVwZGF0ZScgKSB7CiAgICAgICAgbXkgJVRpY2tldCAgICAgICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KCBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSApOwogICAgICAgIG15ICRDdXN0b21lclVzZXIgICA9ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9OwogICAgICAgIG15ICRFbGVtZW50Q2hhbmdlZCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdFbGVtZW50Q2hhbmdlZCcgKSB8fCAnJzsKCiAgICAgICAgbXkgJFNlcnZpY2VJRDsKCiAgICAgICAgIyBnZXQgc2VydmljZSB2YWx1ZSBmcm9tIHBhcmFtIGlmIGZpZWxkIGlzIHZpc2libGUgaW4gdGhlIHNjcmVlbgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSAmJiAkQ29uZmlnLT57U2VydmljZX0gKSB7CiAgICAgICAgICAgICRTZXJ2aWNlSUQgPSAkR2V0UGFyYW17U2VydmljZUlEfSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIHVzZSB0aWNrZXQgc2VydmljZSB2YWx1ZSBzaW5jZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCiAgICAgICAgZWxzaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewogICAgICAgICAgICAkU2VydmljZUlEID0gJFRpY2tldHtTZXJ2aWNlSUR9IHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgbXkgJFF1ZXVlSUQgPSAkR2V0UGFyYW17TmV3UXVldWVJRH0gfHwgJFRpY2tldHtRdWV1ZUlEfTsKICAgICAgICBteSAkU3RhdGVJRCA9ICRHZXRQYXJhbXtOZXdTdGF0ZUlEfSB8fCAkVGlja2V0e1N0YXRlSUR9OwoKICAgICAgICAjIGdldCBsaXN0IHR5cGUKICAgICAgICBteSAkVHJlZVZpZXcgPSAwOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAgICAgJFRyZWVWaWV3ID0gMTsKICAgICAgICB9CgogICAgICAgIG15ICRPd25lcnMgPSAkU2VsZi0+X0dldE93bmVycygKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBRdWV1ZUlEICA9PiAkUXVldWVJRCwKICAgICAgICAgICAgU3RhdGVJRCAgPT4gJFN0YXRlSUQsCiAgICAgICAgICAgIEFsbFVzZXJzID0+ICRHZXRQYXJhbXtPd25lckFsbH0sCiAgICAgICAgKTsKICAgICAgICBteSAkT2xkT3duZXJzID0gJFNlbGYtPl9HZXRPbGRPd25lcnMoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgUXVldWVJRCAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFN0YXRlSUQgID0+ICRTdGF0ZUlELAogICAgICAgICAgICBBbGxVc2VycyA9PiAkR2V0UGFyYW17T3duZXJBbGx9LAogICAgICAgICk7CiAgICAgICAgbXkgJFJlc3BvbnNpYmxlVXNlcnMgPSAkU2VsZi0+X0dldFJlc3BvbnNpYmxlKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFF1ZXVlSUQgID0+ICRRdWV1ZUlELAogICAgICAgICAgICBTdGF0ZUlEICA9PiAkU3RhdGVJRCwKICAgICAgICAgICAgQWxsVXNlcnMgPT4gJEdldFBhcmFte093bmVyQWxsfSwKICAgICAgICApOwogICAgICAgIG15ICRQcmlvcml0aWVzID0gJFNlbGYtPl9HZXRQcmlvcml0aWVzKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKICAgICAgICBteSAkU2VydmljZXMgPSAkU2VsZi0+X0dldFNlcnZpY2VzKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRDdXN0b21lclVzZXIsCiAgICAgICAgICAgIFF1ZXVlSUQgICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICBTdGF0ZUlEICAgICAgICA9PiAkU3RhdGVJRCwKICAgICAgICApOwogICAgICAgIG15ICRUeXBlcyA9ICRTZWxmLT5fR2V0VHlwZXMoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciwKICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFN0YXRlSUQgICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICk7CiAgICAgICAgbXkgJE5ld1F1ZXVlcyA9ICRTZWxmLT5fR2V0UXVldWVzKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXNldCBwcmV2aW91cyBTZXJ2aWNlSUQgdG8gcmVzZXQgU0xBLUxpc3QgaWYgbm8gc2VydmljZSBpcyBzZWxlY3RlZAogICAgICAgIGlmICggIWRlZmluZWQgJFNlcnZpY2VJRCB8fCAhJFNlcnZpY2VzLT57JFNlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICRTZXJ2aWNlSUQgPSAnJzsKICAgICAgICB9CiAgICAgICAgbXkgJFNMQXMgPSAkU2VsZi0+X0dldFNMQXMoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciwKICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFN0YXRlSUQgICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICAgICBTZXJ2aWNlSUQgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICk7CiAgICAgICAgbXkgJE5leHRTdGF0ZXMgPSAkU2VsZi0+X0dldE5leHRTdGF0ZXMoCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VySUQgPT4gJEN1c3RvbWVyVXNlciB8fCAnJywKICAgICAgICAgICAgUXVldWVJRCAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIFN0YXRlSUQgICAgICAgID0+ICRTdGF0ZUlELAogICAgICAgICk7CgogICAgICAgICMgdXBkYXRlIER5bmFtaWMgRmllbGRzIFBvc3NpYmxlIFZhbHVlcyB2aWEgQUpBWAogICAgICAgIG15IEBEeW5hbWljRmllbGRBSkFYOwoKICAgICAgICAjIGN5Y2xlIHRyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgICAgIERZTkFNSUNGSUVMRDoKICAgICAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgICAgIG15ICRJc0FDTFJlZHVjaWJsZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgQmVoYXZpb3IgICAgICAgICAgID0+ICdJc0FDTFJlZHVjaWJsZScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkSXNBQ0xSZWR1Y2libGU7CgogICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY29udmVydCBwb3NzaWJsZSB2YWx1ZXMga2V5ID0+IHZhbHVlIHRvIGtleSA9PiBrZXkgZm9yIEFDTHMgdXNpbmcgYSBIYXNoIHNsaWNlCiAgICAgICAgICAgIG15ICVBY2xEYXRhID0gJXskUG9zc2libGVWYWx1ZXN9OwogICAgICAgICAgICBAQWNsRGF0YXsga2V5cyAlQWNsRGF0YSB9ID0ga2V5cyAlQWNsRGF0YTsKCiAgICAgICAgICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBmaWx0ZXIgZnJvbSBBQ0xzCiAgICAgICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIFJldHVyblN1YlR5cGUgPT4gJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9LAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICA9PiBcJUFjbERhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgIyBjb252ZXJ0IEZpbGVyIGtleSA9PiBrZXkgYmFjayB0byBrZXkgPT4gdmFsdWUgdXNpbmcgbWFwCiAgICAgICAgICAgICAgICAleyRQb3NzaWJsZVZhbHVlc30gPSBtYXAgeyAkXyA9PiAkUG9zc2libGVWYWx1ZXMtPnskX30gfSBrZXlzICVGaWx0ZXI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICREYXRhVmFsdWVzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uRGF0YUdldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+ICRQb3NzaWJsZVZhbHVlcywKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgKSB8fCAkUG9zc2libGVWYWx1ZXM7CgogICAgICAgICAgICAjIGFkZCBkeW5hbWljIGZpZWxkIHRvIHRoZSBsaXN0IG9mIGZpZWxkcyB0byB1cGRhdGUKICAgICAgICAgICAgcHVzaCgKICAgICAgICAgICAgICAgIEBEeW5hbWljRmllbGRBSkFYLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdEeW5hbWljRmllbGRfJyAuICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkRGF0YVZhbHVlcywKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkRHluYW1pY0ZpZWxkVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1RyYW5zbGF0YWJsZVZhbHVlc30gfHwgMCwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkU3RhbmRhcmRUZW1wbGF0ZXMgPSAkU2VsZi0+X0dldFN0YW5kYXJkVGVtcGxhdGVzKAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFF1ZXVlSUQgfHwgJycsCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFRlbXBsYXRlQUpBWDsKCiAgICAgICAgIyB1cGRhdGUgdGlja2V0IGJvZHkgYW5kIGF0dGFjaGVtZW50cyBpZiBuZWVkZWQuCiAgICAgICAgaWYgKCAkRWxlbWVudENoYW5nZWQgZXEgJ1N0YW5kYXJkVGVtcGxhdGVJRCcgKSB7CiAgICAgICAgICAgIG15IEBUaWNrZXRBdHRhY2htZW50czsKICAgICAgICAgICAgbXkgJFRlbXBsYXRlVGV4dDsKCiAgICAgICAgICAgICMgcmVtb3ZlIGFsbCBhdHRhY2htZW50cyBmcm9tIHRoZSBVcGxvYWQgY2FjaGUKICAgICAgICAgICAgbXkgJFJlbW92ZVN1Y2Nlc3MgPSAkVXBsb2FkQ2FjaGVPYmplY3QtPkZvcm1JRFJlbW92ZSgKICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggISRSZW1vdmVTdWNjZXNzICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiRm9ybSBhdHRhY2htZW50cyBjb3VsZCBub3QgYmUgZGVsZXRlZCEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgdGhlIHRlbXBsYXRlIHRleHQgYW5kIHNldCBuZXcgYXR0YWNobWVudHMgaWYgYSB0ZW1wbGF0ZSBpcyBzZWxlY3RlZAogICAgICAgICAgICBpZiAoIElzUG9zaXRpdmVJbnRlZ2VyKCAkR2V0UGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSApICkgewogICAgICAgICAgICAgICAgbXkgJFRlbXBsYXRlR2VuZXJhdG9yID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRlbXBsYXRlR2VuZXJhdG9yJyk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGVtcGxhdGUgdGV4dCwgcmVwbGFjZSBzbWFydCB0YWdzIChsaW1pdGVkIGFzIHRpY2tldCBpcyBub3QgY3JlYXRlZCkKICAgICAgICAgICAgICAgICRUZW1wbGF0ZVRleHQgPSAkVGVtcGxhdGVHZW5lcmF0b3ItPlRlbXBsYXRlKAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlSUQgPT4gJEdldFBhcmFte1N0YW5kYXJkVGVtcGxhdGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBpZiBSZXBseVRvQXJ0aWNsZSBpcyBnaXZlbiwgZ2V0IHRoaXMgYXJ0aWNsZSB0byBnZW5lcmF0ZQogICAgICAgICAgICAgICAgIyB0aGUgcXVvdGVkIGFydGljbGUgY29udGVudAogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfSApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSB0byBxdW90ZQogICAgICAgICAgICAgICAgICAgIG15ICRCb2R5ID0gJExheW91dE9iamVjdC0+QXJ0aWNsZVF1b3RlKAogICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgPT4gJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1JRCAgICAgICAgICAgID0+ICRTZWxmLT57Rm9ybUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkQ2FjaGVPYmplY3QgPT4gJFVwbG9hZENhY2hlT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgcHJlcGFyZSBxdW90ZWQgYm9keSBjb250ZW50CiAgICAgICAgICAgICAgICAgICAgJEJvZHkgPSAkU2VsZi0+X0dldFF1b3RlZFJlcGx5Qm9keSgKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFNlbGYtPntSZXBseVRvQXJ0aWNsZUNvbnRlbnR9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgIEJvZHkgPT4gJEJvZHksCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFRlbXBsYXRlVGV4dCA9ICRUZW1wbGF0ZVRleHQgLiAnPGJyPjxicj4nIC4gJEJvZHk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkVGVtcGxhdGVUZXh0ID0gJFRlbXBsYXRlVGV4dCAuICJcblxuIiAuICRCb2R5OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBTdGRBdHRhY2htZW50T2JqZWN0CiAgICAgICAgICAgICAgICBteSAkU3RkQXR0YWNobWVudE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGRBdHRhY2htZW50Jyk7CgogICAgICAgICAgICAgICAgIyBhZGQgc3RkLiBhdHRhY2htZW50cyB0byB0aWNrZXQKICAgICAgICAgICAgICAgIG15ICVBbGxTdGRBdHRhY2htZW50cyA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50U3RhbmRhcmRUZW1wbGF0ZU1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmRUZW1wbGF0ZUlEID0+ICRHZXRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciAoIHNvcnQga2V5cyAlQWxsU3RkQXR0YWNobWVudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnRzRGF0YSA9ICRTdGRBdHRhY2htZW50T2JqZWN0LT5TdGRBdHRhY2htZW50R2V0KCBJRCA9PiAkXyApOwogICAgICAgICAgICAgICAgICAgICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlEQWRkRmlsZSgKICAgICAgICAgICAgICAgICAgICAgICAgRm9ybUlEICAgICAgPT4gJFNlbGYtPntGb3JtSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NpdGlvbiA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgICVBdHRhY2htZW50c0RhdGEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNlbmQgYSBsaXN0IG9mIGF0dGFjaG1lbnRzIGluIHRoZSB1cGxvYWQgY2FjaGUgYmFjayB0byB0aGUgY2xpZW50c2lkZSBKYXZhU2NyaXB0CiAgICAgICAgICAgICAgICAjIHdoaWNoIHJlbmRlcnMgdGhlbiB0aGUgbGlzdCBvZiBjdXJyZW50bHkgdXBsb2FkZWQgYXR0YWNobWVudHMKICAgICAgICAgICAgICAgIEBUaWNrZXRBdHRhY2htZW50cyA9ICRVcGxvYWRDYWNoZU9iamVjdC0+Rm9ybUlER2V0QWxsRmlsZXNNZXRhKAogICAgICAgICAgICAgICAgICAgIEZvcm1JRCA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoQFRpY2tldEF0dGFjaG1lbnRzKSB7CiAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0gPSAkTGF5b3V0T2JqZWN0LT5IdW1hblJlYWRhYmxlRGF0YVNpemUoCiAgICAgICAgICAgICAgICAgICAgICAgIFNpemUgPT4gJEF0dGFjaG1lbnQtPntGaWxlc2l6ZX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQFRlbXBsYXRlQUpBWCA9ICgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdVc2VUZW1wbGF0ZU5vdGUnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJzAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkVGVtcGxhdGVUZXh0IHx8ICcnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICA9PiAnVGlja2V0QXR0YWNobWVudHMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFxAVGlja2V0QXR0YWNobWVudHMsCiAgICAgICAgICAgICAgICAgICAgS2VlcERhdGEgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkSlNPTiA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uSlNPTigKICAgICAgICAgICAgWwoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ05ld093bmVySUQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkT3duZXJzLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17TmV3T3duZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJFJlc3BvbnNpYmxlVXNlcnMsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRHZXRQYXJhbXtOZXdSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ05ld1N0YXRlSUQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkTmV4dFN0YXRlcywKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJEdldFBhcmFte05ld1N0YXRlSUR9LAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSA/IDAgOiAxLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnTmV3UHJpb3JpdHlJRCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRQcmlvcml0aWVzLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17TmV3UHJpb3JpdHlJRH0sCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDAsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTZXJ2aWNlSUQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkU2VydmljZXMsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTTEFJRCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRTTEFzLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17U0xBSUR9LAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgICAgIE1heCAgICAgICAgICA9PiAxMDAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnU3RhbmRhcmRUZW1wbGF0ZUlEJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJFN0YW5kYXJkVGVtcGxhdGVzLAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkR2V0UGFyYW17U3RhbmRhcmRUZW1wbGF0ZUlEfSwKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBNYXggICAgICAgICAgPT4gMTAwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRUeXBlcywKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJEdldFBhcmFte1R5cGVJRH0sCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdOZXdRdWV1ZUlEJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJE5ld1F1ZXVlcywKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJEdldFBhcmFte05ld1F1ZXVlSUR9LAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFRyZWVWaWV3ICAgICA9PiAkVHJlZVZpZXcsCiAgICAgICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDEwMCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBARHluYW1pY0ZpZWxkQUpBWCwKICAgICAgICAgICAgICAgIEBUZW1wbGF0ZUFKQVgsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRMYXlvdXRPYmplY3QtPntDaGFyc2V0fSwKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJEpTT04sCiAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgICAgICBOb0NhY2hlICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgbXkgJEJvZHkgPSAnJzsKCiAgICAgICAgIyBpZiBSZXBseVRvQXJ0aWNsZSBpcyBnaXZlbiwgZ2V0IHRoaXMgYXJ0aWNsZSB0byBnZW5lcmF0ZQogICAgICAgICMgdGhlIHF1b3RlZCBhcnRpY2xlIGNvbnRlbnQKICAgICAgICBpZiAoICRTZWxmLT57UmVwbHlUb0FydGljbGV9ICkgewoKICAgICAgICAgICAgIyBnZXQgYXJ0aWNsZSB0byBxdW90ZQogICAgICAgICAgICAkQm9keSA9ICRMYXlvdXRPYmplY3QtPkFydGljbGVRdW90ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICAgICAgPT4gJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0sCiAgICAgICAgICAgICAgICBGb3JtSUQgICAgICAgICAgICA9PiAkU2VsZi0+e0Zvcm1JRH0sCiAgICAgICAgICAgICAgICBVcGxvYWRDYWNoZU9iamVjdCA9PiAkVXBsb2FkQ2FjaGVPYmplY3QsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHByZXBhcmUgcXVvdGVkIGJvZHkgY29udGVudAogICAgICAgICAgICAkQm9keSA9ICRTZWxmLT5fR2V0UXVvdGVkUmVwbHlCb2R5KAogICAgICAgICAgICAgICAgJXsgJFNlbGYtPntSZXBseVRvQXJ0aWNsZUNvbnRlbnR9IH0sCiAgICAgICAgICAgICAgICBCb2R5ID0+ICRCb2R5LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBpZiBhIGJvZHkgY29udGVudCB3YXMgcHJlIGRlZmluZWQsIGFkZCB0aGlzIGJlZm9yZSB0aGUgcXVvdGVkIGFydGljbGUgY29udGVudAogICAgICAgIGlmICggJEdldFBhcmFte0JvZHl9ICkgewoKICAgICAgICAgICAgIyBtYWtlIHN1cmUgYm9keSBpcyByaWNoIHRleHQKICAgICAgICAgICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPkFzY2lpMlJpY2hUZXh0KAogICAgICAgICAgICAgICAgICAgIFN0cmluZyA9PiAkR2V0UGFyYW17Qm9keX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkQm9keSA9ICRHZXRQYXJhbXtCb2R5fSAuICRCb2R5OwogICAgICAgIH0KCiAgICAgICAgIyBmaWxsdXAgY29uZmlndXJlZCBkZWZhdWx0IHZhcnMKICAgICAgICBpZiAoICRCb2R5IGVxICcnICYmICRDb25maWctPntCb2R5fSApIHsKICAgICAgICAgICAgJEJvZHkgPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAkQ29uZmlnLT57Qm9keX0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG1ha2Ugc3VyZSBib2R5IGlzIHJpY2ggdGV4dAogICAgICAgICAgICBpZiAoICRMYXlvdXRPYmplY3QtPntCcm93c2VyUmljaFRleHR9ICkgewogICAgICAgICAgICAgICAgJEJvZHkgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJSaWNoVGV4dCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEJvZHksCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNldCBCb2R5IHZhciB0byBjYWxjdWxhdGVkIGNvbnRlbnQKICAgICAgICAkR2V0UGFyYW17Qm9keX0gPSAkQm9keTsKCiAgICAgICAgbXkgJVNhZmV0eUNoZWNrUmVzdWx0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscycpLT5TYWZldHkoCiAgICAgICAgICAgIFN0cmluZyA9PiAkR2V0UGFyYW17Qm9keX0sCgogICAgICAgICAgICAjIFN0cmlwIG91dCBleHRlcm5hbCBjb250ZW50IGlmIEJsb2NrTG9hZGluZ1JlbW90ZUNvbnRlbnQgaXMgZW5hYmxlZC4KICAgICAgICAgICAgTm9FeHRTcmNMb2FkID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QmxvY2tMb2FkaW5nUmVtb3RlQ29udGVudCcpLAoKICAgICAgICAgICAgIyBEaXNhbGxvdyBwb3RlbnRpYWxseSB1bnNhZmUgY29udGVudC4KICAgICAgICAgICAgTm9BcHBsZXQgICAgID0+IDEsCiAgICAgICAgICAgIE5vT2JqZWN0ICAgICA9PiAxLAogICAgICAgICAgICBOb0VtYmVkICAgICAgPT4gMSwKICAgICAgICAgICAgTm9TVkcgICAgICAgID0+IDEsCiAgICAgICAgICAgIE5vSmF2YVNjcmlwdCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJEdldFBhcmFte0JvZHl9ID0gJFNhZmV0eUNoZWNrUmVzdWx0e1N0cmluZ307CgogICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gKSB7CiAgICAgICAgICAgIG15ICRUaWNrZXRTdWJqZWN0UmUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6U3ViamVjdFJlJykgfHwgJ1JlJzsKICAgICAgICAgICAgJEdldFBhcmFte1N1YmplY3R9ID0gJFRpY2tldFN1YmplY3RSZSAuICc6ICcgLiAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlQ29udGVudH17U3ViamVjdH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggIWRlZmluZWQgJEdldFBhcmFte1N1YmplY3R9ICYmICRDb25maWctPntTdWJqZWN0fSApIHsKICAgICAgICAgICAgJEdldFBhcmFte1N1YmplY3R9ID0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJENvbmZpZy0+e1N1YmplY3R9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgQFRpY2tldFR5cGVEeW5hbWljRmllbGRzOwogICAgICAgIG15IEBBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZHM7CgogICAgICAgICMgY3ljbGUgdHJvdWdoIHRoZSBhY3RpdmF0ZWQgRHluYW1pYyBGaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICAgICAgRFlOQU1JQ0ZJRUxEOgogICAgICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkfSApIHsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGRDb25maWcpOwojIC0tLQojIE9UUlNNYXN0ZXJTbGF2ZQojIC0tLQogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhJE1hc3RlclNsYXZlQWR2YW5jZWRFbmFibGVkCiAgICAgICAgICAgICAgICAmJiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gZXEgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgICAgICB9CiMgLS0tCgogICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXNGaWx0ZXI7CgogICAgICAgICAgICBteSAkSXNBQ0xSZWR1Y2libGUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+SGFzQmVoYXZpb3IoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNBQ0xSZWR1Y2libGUnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRJc0FDTFJlZHVjaWJsZSkgewoKICAgICAgICAgICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgICAgICAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+UG9zc2libGVWYWx1ZXNHZXQoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgZmllbGQgaGFzIFBvc3NpYmxlVmFsdWVzIHByb3BlcnR5IGluIGl0cyBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCRQb3NzaWJsZVZhbHVlcykgKSB7CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBwb3NzaWJsZSB2YWx1ZXMga2V5ID0+IHZhbHVlIHRvIGtleSA9PiBrZXkgZm9yIEFDTHMgdXNpbmcgYSBIYXNoIHNsaWNlCiAgICAgICAgICAgICAgICAgICAgbXkgJUFjbERhdGEgPSAleyRQb3NzaWJsZVZhbHVlc307CiAgICAgICAgICAgICAgICAgICAgQEFjbERhdGF7IGtleXMgJUFjbERhdGEgfSA9IGtleXMgJUFjbERhdGE7CgogICAgICAgICAgICAgICAgICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBmaWx0ZXIgZnJvbSBBQ0xzCiAgICAgICAgICAgICAgICAgICAgbXkgJEFDTCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbCgKICAgICAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gXCVBY2xEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICgkQUNMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVGaWx0ZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgRmlsZXIga2V5ID0+IGtleSBiYWNrIHRvIGtleSA9PiB2YWx1ZSB1c2luZyBtYXAKICAgICAgICAgICAgICAgICAgICAgICAgJXskUG9zc2libGVWYWx1ZXNGaWx0ZXJ9ID0gbWFwIHsgJF8gPT4gJFBvc3NpYmxlVmFsdWVzLT57JF99IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgJUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KIyAtLS0KIyBPVFJTTWFzdGVyU2xhdmUKIyAtLS0KICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gZXEgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkICkgewogICAgICAgICAgICAgICAkUG9zc2libGVWYWx1ZXNGaWx0ZXIgPSAgJFNlbGYtPl9HZXRNYXN0ZXJTbGF2ZURhdGEoCiAgICAgICAgICAgICAgICBUaWNrZXQgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgICAgICBNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQsCiAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KIyAtLS0KCiAgICAgICAgICAgICMgdG8gc3RvcmUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIGRhdGFiYXNlIChvciB1bmRlZmluZWQpCiAgICAgICAgICAgIG15ICRWYWx1ZTsKCiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdUaWNrZXQnICkgewoKICAgICAgICAgICAgICAgICMgT25seSBnZXQgdmFsdWVzIGZvciBUaWNrZXQgZmllbGRzIChhbGwgc2NyZWVucyBiYXNlZCBvbiBBZ2VudFRpY2tlQWN0aW9uQ29tbW9uCiAgICAgICAgICAgICAgICAjIGdlbmVyYXRlcyBhIG5ldyBhcnRpY2xlLCB0aGVuIGFydGljbGUgZmllbGRzIHdpbGwgYmUgYWx3YXlzIGVtcHR5IGF0IHRoZSBiZWdpbm5pbmcpLgogICAgICAgICAgICAgICAgIyBWYWx1ZSBpcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIGZyb20gVGlja2V0LgogICAgICAgICAgICAgICAgJFZhbHVlID0gJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH07CgogICAgICAgICAgICAgICAgIyBHZXQgZmllbGQgaHRtbC4KICAgICAgICAgICAgICAgIG15ICREeW5hbWljRmllbGRIVE1MID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkVkaXRGaWVsZFJlbmRlcigKICAgICAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlVmFsdWVzRmlsdGVyID0+ICRQb3NzaWJsZVZhbHVlc0ZpbHRlciwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgTWFuZGF0b3J5ICAgICAgICAgICAgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0tPnsgJER5bmFtaWNGaWVsZENvbmZpZy0+e05hbWV9IH0gPT0gMiwKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBBSkFYVXBkYXRlICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVwZGF0YWJsZUZpZWxkcyAgICAgID0+ICRTZWxmLT5fR2V0RmllbGRzVG9VcGRhdGUoKSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcHVzaCBAVGlja2V0VHlwZUR5bmFtaWNGaWVsZHMsIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntMYWJlbH0sCiAgICAgICAgICAgICAgICAgICAgRmllbGQgPT4gJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0sCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJER5bmFtaWNGaWVsZENvbmZpZy0+e09iamVjdFR5cGV9IGVxICdBcnRpY2xlJyApIHsKICAgICAgICAgICAgICAgIG15ICRDbGFzcyAgICAgICAgICAgID0gJyc7CiAgICAgICAgICAgICAgICBteSAkTWFuZGF0b3J5VG9vbHRpcCA9IDA7CgogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfS0+eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9PSAyICkgewogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJENvbmZpZy0+e05vdGVNYW5kYXRvcnl9IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzICAgICAgICAgICAgPSAnVmFsaWRhdGVfRGVwZW5kaW5nUmVxdWlyZWRBTkQgVmFsaWRhdGVfRGVwZW5kaW5nX0NyZWF0ZUFydGljbGUnOwogICAgICAgICAgICAgICAgICAgICAgICAkTWFuZGF0b3J5VG9vbHRpcCA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgR2V0IGZpZWxkIGh0bWwuCiAgICAgICAgICAgICAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICAgID0+ICggJENsYXNzIGVxICdWYWxpZGF0ZV9SZXF1aXJlZCcgKSA/IDEgOiAwLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICBMYXlvdXRPYmplY3QgICAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRQYXJhbU9iamVjdCwKICAgICAgICAgICAgICAgICAgICBBSkFYVXBkYXRlICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVwZGF0YWJsZUZpZWxkcyAgICAgID0+ICRTZWxmLT5fR2V0RmllbGRzVG9VcGRhdGUoKSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcHVzaCBAQXJ0aWNsZVR5cGVEeW5hbWljRmllbGRzLCB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0sCiAgICAgICAgICAgICAgICAgICAgTGFiZWwgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfSwKICAgICAgICAgICAgICAgICAgICBGaWVsZCAgICAgICAgICAgID0+ICREeW5hbWljRmllbGRIVE1MLT57RmllbGR9LAogICAgICAgICAgICAgICAgICAgIE1hbmRhdG9yeVRvb2x0aXAgPT4gJE1hbmRhdG9yeVRvb2x0aXAsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHByaW50IGZvcm0gLi4uCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdTbWFsbCcsCiAgICAgICAgICAgIFZhbHVlICAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgIEJvZHlDbGFzcyA9PiAnUG9wdXAnLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2soCiAgICAgICAgICAgIFRpbWVVbml0c1JlcXVpcmVkID0+ICgKICAgICAgICAgICAgICAgICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKQogICAgICAgICAgICAgICAgPyAnVmFsaWRhdGVfUmVxdWlyZWQnCiAgICAgICAgICAgICAgICA6ICcnCiAgICAgICAgICAgICksCiAgICAgICAgICAgIFRpY2tldFR5cGVEeW5hbWljRmllbGRzICA9PiBcQFRpY2tldFR5cGVEeW5hbWljRmllbGRzLAogICAgICAgICAgICBBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZHMgPT4gXEBBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZHMsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJVRpY2tldCwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKAogICAgICAgICAgICBUeXBlID0+ICdTbWFsbCcsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9NYXNrIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkVHJlZVZpZXcgPSAwOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpIGVxICd0cmVlJyApIHsKICAgICAgICAkVHJlZVZpZXcgPSAxOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgbGF5b3V0IG9iamVjdAogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIERlZmluZSB0aGUgZHluYW1pYyBmaWVsZHMgdG8gc2hvdyBiYXNlZCBvbiB0aGUgb2JqZWN0IHR5cGUuCiAgICBteSAkT2JqZWN0VHlwZSA9IFsnVGlja2V0J107CgogICAgIyBPbmx5IHNjcmVlbnMgdGhhdCBhZGQgbm90ZXMgY2FuIG1vZGlmeSBBcnRpY2xlIGR5bmFtaWMgZmllbGRzLgogICAgaWYgKCAkQ29uZmlnLT57Tm90ZX0gKSB7CiAgICAgICAgJE9iamVjdFR5cGUgPSBbICdUaWNrZXQnLCAnQXJ0aWNsZScgXTsKICAgIH0KCiAgICAjIEdldCBkeW5hbWljIGZpZWxkcyBmb3IgdGhpcyBzY3JlZW4uCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJE9iamVjdFR5cGUsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgV2lkZ2V0IFRpY2tldCBBY3Rpb25zCiAgICBpZiAoCiAgICAgICAgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6VHlwZScpICYmICRDb25maWctPntUaWNrZXRUeXBlfSApCiAgICAgICAgfHwKICAgICAgICAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgICAgICYmICRDb25maWctPntTZXJ2aWNlfSApICAgICB8fAogICAgICAgICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlJlc3BvbnNpYmxlJykgJiYgJENvbmZpZy0+e1Jlc3BvbnNpYmxlfSApIHx8CiAgICAgICAgJENvbmZpZy0+e1RpdGxlfSAgICB8fAogICAgICAgICRDb25maWctPntRdWV1ZX0gICAgfHwKICAgICAgICAkQ29uZmlnLT57T3duZXJ9ICAgIHx8CiAgICAgICAgJENvbmZpZy0+e1N0YXRlfSAgICB8fAogICAgICAgICRDb25maWctPntQcmlvcml0eX0gfHwKICAgICAgICBzY2FsYXIgQHsgJFBhcmFte1RpY2tldFR5cGVEeW5hbWljRmllbGRzfSB9ID4gMAogICAgICAgICkKICAgIHsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2lkZ2V0VGlja2V0QWN0aW9ucycsCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRDb25maWctPntUaXRsZX0gKSB7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1RpdGxlJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE5hbWVzID0gJFNlbGYtPl9HZXRGaWVsZHNUb1VwZGF0ZSgKICAgICAgICBPbmx5RHluYW1pY0ZpZWxkcyA9PiAxLAogICAgKTsKCiAgICAjIHNlbmQgZGF0YSB0byBKUwogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdEeW5hbWljRmllbGROYW1lcycsCiAgICAgICAgVmFsdWUgPT4gJER5bmFtaWNGaWVsZE5hbWVzLAogICAgKTsKCiAgICAjIHR5cGVzCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgJiYgJENvbmZpZy0+e1RpY2tldFR5cGV9ICkgewogICAgICAgIG15ICVUeXBlID0gJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgQWN0aW9uID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwogICAgICAgICRQYXJhbXtUeXBlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdWYWxpZGF0ZV9SZXF1aXJlZCBNb2Rlcm5pemUgJyAuICggJFBhcmFte0Vycm9yc30tPntUeXBlSURJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUeXBlLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17VHlwZUlEfSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUeXBlJywKICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgfQoKICAgICMgc2VydmljZXMKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSAmJiAkQ29uZmlnLT57U2VydmljZX0gKSB7CiAgICAgICAgbXkgJFNlcnZpY2VzID0gJFNlbGYtPl9HZXRTZXJ2aWNlcygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBBY3Rpb24gICAgICAgICA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlcklEID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyByZXNldCBwcmV2aW91cyBTZXJ2aWNlSUQgdG8gcmVzZXQgU0xBLUxpc3QgaWYgbm8gc2VydmljZSBpcyBzZWxlY3RlZAogICAgICAgIGlmICggISRQYXJhbXtTZXJ2aWNlSUR9IHx8ICEkU2VydmljZXMtPnsgJFBhcmFte1NlcnZpY2VJRH0gfSApIHsKICAgICAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAnJzsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtTZXJ2aWNlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkU2VydmljZXMsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gIk1vZGVybml6ZSAiCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1NlcnZpY2VNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte1NlcnZpY2VJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJlZVZpZXcgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdUcmVlVmlldycsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBTZXJ2aWNlTWFuZGF0b3J5ID0+ICRDb25maWctPntTZXJ2aWNlTWFuZGF0b3J5fSB8fCAwLAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIG15ICVTTEEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTTEFMaXN0KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIEFjdGlvbiA9PiAkU2VsZi0+e0FjdGlvbn0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte1NMQVN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVTTEEsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1NMQUlEJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17U0xBSUR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICJNb2Rlcm5pemUgIgogICAgICAgICAgICAgICAgLiAoICRDb25maWctPntTTEFNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte1NlcnZpY2VJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgU29ydCAgICAgICAgID0+ICdBbHBoYW51bWVyaWNWYWx1ZScsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICBNYXggICAgICAgICAgPT4gMjAwLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTTEEnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFNMQU1hbmRhdG9yeSA9PiAkQ29uZmlnLT57U0xBTWFuZGF0b3J5fSwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJENvbmZpZy0+e1F1ZXVlfSApIHsKCiAgICAgICAgIyBmZXRjaCBhbGwgcXVldWVzCiAgICAgICAgbXkgJU1vdmVRdWV1ZXMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRNb3ZlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBUeXBlICAgICA9PiAnbW92ZV9pbnRvJywKICAgICAgICApOwoKICAgICAgICAjIHNldCBtb3ZlIHF1ZXVlcwogICAgICAgICRQYXJhbXtRdWV1ZXNTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkFnZW50UXVldWVMaXN0T3B0aW9uKAogICAgICAgICAgICBEYXRhICAgICA9PiB7ICVNb3ZlUXVldWVzLCAnJyA9PiAnLScgfSwKICAgICAgICAgICAgTXVsdGlwbGUgPT4gMCwKICAgICAgICAgICAgU2l6ZSAgICAgPT4gMCwKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ05ld1F1ZXVlSUQgTW9kZXJuaXplICcKICAgICAgICAgICAgICAgIC4gKCAkQ29uZmlnLT57UXVldWVNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte05ld1F1ZXVlSW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ05ld1F1ZXVlSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17TmV3UXVldWVJRH0sCiAgICAgICAgICAgIFRyZWVWaWV3ICAgICAgID0+ICRUcmVlVmlldywKICAgICAgICAgICAgQ3VycmVudFF1ZXVlSUQgPT4gJFBhcmFte1F1ZXVlSUR9LAogICAgICAgICAgICBPbkNoYW5nZVN1Ym1pdCA9PiAwLAogICAgICAgICk7CgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdRdWV1ZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgUXVldWVNYW5kYXRvcnkgPT4gJENvbmZpZy0+e1F1ZXVlTWFuZGF0b3J5fSB8fCAwLAogICAgICAgICAgICAgICAgJVBhcmFtCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgbXkgJFF1ZXVlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyk7CiAgICBteSAkVXNlck9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwogICAgbXkgJEdyb3VwT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyk7CgogICAgaWYgKCAkQ29uZmlnLT57T3duZXJ9ICkgewoKICAgICAgICAjIGdldCB1c2VyIG9mIG93biBncm91cHMKICAgICAgICBteSAlU2hvd25Vc2VyczsKICAgICAgICBteSAlQWxsR3JvdXBzTWVtYmVycyA9ICRVc2VyT2JqZWN0LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6Q2hhbmdlT3duZXJUb0V2ZXJ5b25lJykgKSB7CiAgICAgICAgICAgICVTaG93blVzZXJzID0gJUFsbEdyb3Vwc01lbWJlcnM7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkR0lEICAgICAgICA9ICRRdWV1ZU9iamVjdC0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRUaWNrZXR7UXVldWVJRH0gKTsKICAgICAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkR3JvdXBPYmplY3QtPlBlcm1pc3Npb25Hcm91cEdldCgKICAgICAgICAgICAgICAgIEdyb3VwSUQgPT4gJEdJRCwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ293bmVyJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJU1lbWJlckxpc3QgKSB7CiAgICAgICAgICAgICAgICAkU2hvd25Vc2Vyc3skVXNlcklEfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRVc2VySUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQUNMID0gJFRpY2tldE9iamVjdC0+VGlja2V0QWNsKAogICAgICAgICAgICAlVGlja2V0LAogICAgICAgICAgICBBY3Rpb24gICAgICAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgUmV0dXJuVHlwZSAgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnTmV3T3duZXInLAogICAgICAgICAgICBEYXRhICAgICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRBQ0wpIHsKICAgICAgICAgICAgJVNob3duVXNlcnMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBvbGQgb3duZXIKICAgICAgICBteSBAT2xkVXNlckluZm8gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lckxpc3QoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICAgICAgbXkgQE9sZE93bmVyczsKICAgICAgICBteSAlT2xkT3duZXJzU2hvd247CiAgICAgICAgbXkgJVNlZW5PbGRPd25lcjsKICAgICAgICBpZiAoQE9sZFVzZXJJbmZvKSB7CiAgICAgICAgICAgIG15ICRDb3VudGVyID0gMTsKICAgICAgICAgICAgVVNFUjoKICAgICAgICAgICAgZm9yIG15ICRVc2VyICggcmV2ZXJzZSBAT2xkVXNlckluZm8gKSB7CgogICAgICAgICAgICAgICAgIyBza2lwIGlmIG9sZCBvd25lciBpcyBhbHJlYWR5IGluIHRoZSBsaXN0CiAgICAgICAgICAgICAgICBuZXh0IFVTRVIgaWYgJFNlZW5PbGRPd25lcnsgJFVzZXItPntVc2VySUR9IH07CiAgICAgICAgICAgICAgICAkU2Vlbk9sZE93bmVyeyAkVXNlci0+e1VzZXJJRH0gfSA9IDE7CiAgICAgICAgICAgICAgICBteSAkS2V5ICAgPSAkVXNlci0+e1VzZXJJRH07CiAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAiJENvdW50ZXI6ICRVc2VyLT57VXNlckZ1bGxuYW1lfSI7CiAgICAgICAgICAgICAgICBwdXNoIEBPbGRPd25lcnMsIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAkT2xkT3duZXJzU2hvd257JEtleX0gPSAkVmFsdWU7CiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkT2xkT3duZXJTZWxlY3RlZElEID0gJyc7CiAgICAgICAgaWYgKCAkUGFyYW17T2xkT3duZXJJRH0gKSB7CiAgICAgICAgICAgICRPbGRPd25lclNlbGVjdGVkSUQgPSAkUGFyYW17T2xkT3duZXJJRH07CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJE9sZFVzZXJJbmZvWzBdLT57VXNlcklEfSApIHsKICAgICAgICAgICAgJE9sZE93bmVyU2VsZWN0ZWRJRCA9ICRPbGRVc2VySW5mb1swXS0+e1VzZXJJRH0gLiAnMSc7CiAgICAgICAgfQoKICAgICAgICBteSAkT2xkT3duZXJBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdPbGRPd25lcicsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gXCVPbGRPd25lcnNTaG93biwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRPbGRPd25lckFDTCkgewogICAgICAgICAgICAlT2xkT3duZXJzU2hvd24gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCk7CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIHN0cmluZwogICAgICAgICRQYXJhbXtPd25lclN0cmd9ID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtOZXdPd25lcklEfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTmV3T3duZXJJRCcsCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e093bmVyTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgLiAoICRQYXJhbXtOZXdPd25lckludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgRmlsdGVycyAgICAgID0+IHsKICAgICAgICAgICAgICAgIE9sZE93bmVycyA9PiB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnUHJldmlvdXMgT3duZXInKSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgPT4gXCVPbGRPd25lcnNTaG93biwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ093bmVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBPd25lck1hbmRhdG9yeSA9PiAkQ29uZmlnLT57T3duZXJNYW5kYXRvcnl9IHx8IDAsCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpICYmICRDb25maWctPntSZXNwb25zaWJsZX0gKSB7CgogICAgICAgICMgZ2V0IHVzZXIgb2Ygb3duIGdyb3VwcwogICAgICAgIG15ICVTaG93blVzZXJzOwogICAgICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJFVzZXJPYmplY3QtPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpDaGFuZ2VPd25lclRvRXZlcnlvbmUnKSApIHsKICAgICAgICAgICAgJVNob3duVXNlcnMgPSAlQWxsR3JvdXBzTWVtYmVyczsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRHSUQgICAgICAgID0gJFF1ZXVlT2JqZWN0LT5HZXRRdWV1ZUdyb3VwSUQoIFF1ZXVlSUQgPT4gJFRpY2tldHtRdWV1ZUlEfSApOwogICAgICAgICAgICBteSAlTWVtYmVyTGlzdCA9ICRHcm91cE9iamVjdC0+UGVybWlzc2lvbkdyb3VwR2V0KAogICAgICAgICAgICAgICAgR3JvdXBJRCA9PiAkR0lELAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAncmVzcG9uc2libGUnLAogICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlTWVtYmVyTGlzdCApIHsKICAgICAgICAgICAgICAgICRTaG93blVzZXJzeyRVc2VySUR9ID0gJEFsbEdyb3Vwc01lbWJlcnN7JFVzZXJJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBSZXR1cm5UeXBlICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXR1cm5TdWJUeXBlID0+ICdSZXNwb25zaWJsZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJEFDTCkgewogICAgICAgICAgICAlU2hvd25Vc2VycyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFjbERhdGEoKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHJlc3BvbnNpYmxlCiAgICAgICAgJFBhcmFte1Jlc3BvbnNpYmxlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte05ld1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdOZXdSZXNwb25zaWJsZUlEJywKICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplICcKICAgICAgICAgICAgICAgIC4gKCAkQ29uZmlnLT57UmVzcG9uc2libGVNYW5kYXRvcnl9ID8gJ1ZhbGlkYXRlX1JlcXVpcmVkICcgOiAnJyApCiAgICAgICAgICAgICAgICAuICggJFBhcmFte05ld1Jlc3BvbnNpYmxlSW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgIFNpemUgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Jlc3BvbnNpYmxlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBSZXNwb25zaWJsZU1hbmRhdG9yeSA9PiAkQ29uZmlnLT57UmVzcG9uc2libGVNYW5kYXRvcnl9IHx8IDAsCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICB9CgogICAgaWYgKCAkQ29uZmlnLT57U3RhdGV9ICkgewoKICAgICAgICBteSAlU3RhdGU7CiAgICAgICAgbXkgJVN0YXRlTGlzdCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlTGlzdCgKICAgICAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgaWYgKCAhJFBhcmFte05ld1N0YXRlSUR9ICkgewogICAgICAgICAgICBpZiAoICRDb25maWctPntTdGF0ZURlZmF1bHR9ICkgewogICAgICAgICAgICAgICAgJFN0YXRle1NlbGVjdGVkVmFsdWV9ID0gJENvbmZpZy0+e1N0YXRlRGVmYXVsdH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTdGF0ZXtTZWxlY3RlZElEfSA9ICRQYXJhbXtOZXdTdGF0ZUlEfTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgbmV4dCBzdGF0ZXMgc3RyaW5nCiAgICAgICAgJFBhcmFte1N0YXRlU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgPT4gXCVTdGF0ZUxpc3QsCiAgICAgICAgICAgIE5hbWUgID0+ICdOZXdTdGF0ZUlEJywKICAgICAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZSAnCiAgICAgICAgICAgICAgICAuICggJENvbmZpZy0+e1N0YXRlTWFuZGF0b3J5fSA/ICdWYWxpZGF0ZV9SZXF1aXJlZCAnIDogJycgKQogICAgICAgICAgICAgICAgLiAoICRQYXJhbXtOZXdTdGF0ZUludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAkQ29uZmlnLT57U3RhdGVEZWZhdWx0fSA/IDAgOiAxLAogICAgICAgICAgICAlU3RhdGUsCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFN0YXRlTWFuZGF0b3J5ID0+ICRDb25maWctPntTdGF0ZU1hbmRhdG9yeX0gfHwgMCwKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBpZiAoIElzQXJyYXlSZWZXaXRoRGF0YSggJENvbmZpZy0+e1N0YXRlVHlwZX0gKSApIHsKCiAgICAgICAgICAgIFNUQVRFVFlQRToKICAgICAgICAgICAgZm9yIG15ICRTdGF0ZVR5cGUgKCBAeyAkQ29uZmlnLT57U3RhdGVUeXBlfSB9ICkgewoKICAgICAgICAgICAgICAgIG5leHQgU1RBVEVUWVBFIGlmICEkU3RhdGVUeXBlOwogICAgICAgICAgICAgICAgbmV4dCBTVEFURVRZUEUgaWYgJFN0YXRlVHlwZSAhfiAvcGVuZGluZy9pOwoKICAgICAgICAgICAgICAgICMgZ2V0IHVzZWQgY2FsZW5kYXIKICAgICAgICAgICAgICAgIG15ICRDYWxlbmRhciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENhbGVuZGFyR2V0KAogICAgICAgICAgICAgICAgICAgICVUaWNrZXQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRQYXJhbXtEYXRlU3RyaW5nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgRm9ybWF0ICAgICAgICAgICA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgICAgICAgICAgWWVhclBlcmlvZFBhc3QgICA9PiAwLAogICAgICAgICAgICAgICAgICAgIFllYXJQZXJpb2RGdXR1cmUgPT4gNSwKICAgICAgICAgICAgICAgICAgICBEaWZmVGltZSAgICAgICAgID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6UGVuZGluZ0RpZmZUaW1lJykKICAgICAgICAgICAgICAgICAgICAgICAgfHwgMCwKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgICA9PiAkUGFyYW17RGF0ZUludmFsaWR9IHx8ICcgJywKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZSAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlRGF0ZUluRnV0dXJlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICAgPT4gJENhbGVuZGFyLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGF0ZVBlbmRpbmcnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbGFzdCBTVEFURVRZUEU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgcHJpb3JpdHkKICAgIGlmICggJENvbmZpZy0+e1ByaW9yaXR5fSApIHsKCiAgICAgICAgbXkgJVByaW9yaXR5OwogICAgICAgIG15ICVQcmlvcml0eUxpc3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQcmlvcml0eUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICApOwogICAgICAgIGlmICggISRDb25maWctPntQcmlvcml0eURlZmF1bHR9ICkgewogICAgICAgICAgICAkUHJpb3JpdHlMaXN0eycnfSA9ICctJzsKICAgICAgICB9CiAgICAgICAgaWYgKCAhJFBhcmFte05ld1ByaW9yaXR5SUR9ICkgewogICAgICAgICAgICBpZiAoICRDb25maWctPntQcmlvcml0eURlZmF1bHR9ICkgewogICAgICAgICAgICAgICAgJFByaW9yaXR5e1NlbGVjdGVkVmFsdWV9ID0gJENvbmZpZy0+e1ByaW9yaXR5RGVmYXVsdH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQcmlvcml0eXtTZWxlY3RlZElEfSA9ICRQYXJhbXtOZXdQcmlvcml0eUlEfTsKICAgICAgICB9CiAgICAgICAgJFByaW9yaXR5e1NlbGVjdGVkSUR9IHx8PSAkUGFyYW17UHJpb3JpdHlJRH07CiAgICAgICAgJFBhcmFte1ByaW9yaXR5U3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSAgPT4gXCVQcmlvcml0eUxpc3QsCiAgICAgICAgICAgIE5hbWUgID0+ICdOZXdQcmlvcml0eUlEJywKICAgICAgICAgICAgQ2xhc3MgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICVQcmlvcml0eSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgR2V0IFRpY2tldCB0eXBlIGR5bmFtaWMgZmllbGRzLgogICAgZm9yIG15ICRUaWNrZXRUeXBlRHluYW1pY0ZpZWxkICggQHsgJFBhcmFte1RpY2tldFR5cGVEeW5hbWljRmllbGRzfSB9ICkgewogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRUeXBlRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgRGF0YSA9PiAkVGlja2V0VHlwZUR5bmFtaWNGaWVsZCwKICAgICAgICApOwoKICAgICAgICAjIE91dHB1dCBjdXN0b21pemF0aW9uIGJsb2NrIHRvbywgaWYgaXQgZXhpc3RzLgogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdUaWNrZXRUeXBlRHluYW1pY0ZpZWxkXycgLiAkVGlja2V0VHlwZUR5bmFtaWNGaWVsZC0+e05hbWV9LAogICAgICAgICAgICBEYXRhID0+ICRUaWNrZXRUeXBlRHluYW1pY0ZpZWxkLAogICAgICAgICk7CiAgICB9CgogICAgIyBFbmQgV2lkZ2V0IFRpY2tldCBBY3Rpb25zCgogICAgIyBXaWRnZXQgQXJ0aWNsZQogICAgaWYgKCAkQ29uZmlnLT57Tm90ZX0gKSB7CgogICAgICAgICRQYXJhbXtXaWRnZXRTdGF0dXN9ID0gJ0NvbGxhcHNlZCc7CgogICAgICAgIGlmICgKICAgICAgICAgICAgJENvbmZpZy0+e05vdGVNYW5kYXRvcnl9CiAgICAgICAgICAgIHx8ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKQogICAgICAgICAgICB8fCAkU2VsZi0+e1JlcGx5VG9BcnRpY2xlfQogICAgICAgICAgICB8fCAkUGFyYW17Q3JlYXRlQXJ0aWNsZX0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFBhcmFte1dpZGdldFN0YXR1c30gPSAnRXhwYW5kZWQnOwogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnLT57Tm90ZU1hbmRhdG9yeX0KICAgICAgICAgICAgfHwgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRQYXJhbXtTdWJqZWN0UmVxdWlyZWR9ID0gJ1ZhbGlkYXRlX1JlcXVpcmVkJzsKICAgICAgICAgICAgJFBhcmFte0JvZHlSZXF1aXJlZH0gICAgPSAnVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBhcmFte1N1YmplY3RSZXF1aXJlZH0gPSAnVmFsaWRhdGVfRGVwZW5kaW5nUmVxdWlyZWRBTkQgVmFsaWRhdGVfRGVwZW5kaW5nX0NyZWF0ZUFydGljbGUnOwogICAgICAgICAgICAkUGFyYW17Qm9keVJlcXVpcmVkfSAgICA9ICdWYWxpZGF0ZV9EZXBlbmRpbmdSZXF1aXJlZEFORCBWYWxpZGF0ZV9EZXBlbmRpbmdfQ3JlYXRlQXJ0aWNsZSc7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBjdXN0b21lciB2aXNpYmlsaXR5IG9mIHRoaXMgbm90ZSB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgYXJ0aWNsZSBmb3Igd2hvbSB0aGlzIGlzIHRoZSByZXBseQogICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gJiYgIWRlZmluZWQgJFBhcmFte0lzVmlzaWJsZUZvckN1c3RvbWVyfSApIHsKICAgICAgICAgICAgJFBhcmFte0lzVmlzaWJsZUZvckN1c3RvbWVyfSA9ICRTZWxmLT57UmVwbHlUb0FydGljbGVDb250ZW50fS0+e0lzVmlzaWJsZUZvckN1c3RvbWVyfTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAhZGVmaW5lZCAkUGFyYW17SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9ICkgewogICAgICAgICAgICAkUGFyYW17SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9ID0gJENvbmZpZy0+e0lzVmlzaWJsZUZvckN1c3RvbWVyRGVmYXVsdH07CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgYXR0YWNobWVudHMKICAgICAgICBBVFRBQ0hNRU5UOgogICAgICAgIGZvciBteSAkQXR0YWNobWVudCAoIEB7ICRQYXJhbXtBdHRhY2htZW50c30gfSApIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnQtPntDb250ZW50SUR9CiAgICAgICAgICAgICAgICAmJiAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fQogICAgICAgICAgICAgICAgJiYgKCAkQXR0YWNobWVudC0+e0NvbnRlbnRUeXBlfSA9fiAvaW1hZ2UvaSApCiAgICAgICAgICAgICAgICAmJiAoICRBdHRhY2htZW50LT57RGlzcG9zaXRpb259IGVxICdpbmxpbmUnICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdXNoIEB7ICRQYXJhbXtBdHRhY2htZW50TGlzdH0gfSwgJEF0dGFjaG1lbnQ7CiAgICAgICAgfQoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnV2lkZ2V0QXJ0aWNsZScsCiAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYWxsIHVzZXIgaWRzIG9mIGFnZW50cywgdGhhdCBjYW4gYmUgc2hvd24gaW4gdGhpcyBkaWFsb2cKICAgICAgICAjIGJhc2VkIG9uIHF1ZXVlIHJpZ2h0cwogICAgICAgIG15ICVTaG93blVzZXJzOwogICAgICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJFVzZXJPYmplY3QtPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKICAgICAgICBteSAkR0lEICAgICAgICA9ICRRdWV1ZU9iamVjdC0+R2V0UXVldWVHcm91cElEKCBRdWV1ZUlEID0+ICRUaWNrZXR7UXVldWVJRH0gKTsKICAgICAgICBteSAlTWVtYmVyTGlzdCA9ICRHcm91cE9iamVjdC0+UGVybWlzc2lvbkdyb3VwR2V0KAogICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ25vdGUnLAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJU1lbWJlckxpc3QgKSB7CiAgICAgICAgICAgICRTaG93blVzZXJzeyRVc2VySUR9ID0gJEFsbEdyb3Vwc01lbWJlcnN7JFVzZXJJRH07CiAgICAgICAgfQoKICAgICAgICAjIGNyZWF0ZSBlbWFpbCBwYXJzZXIgb2JqZWN0CiAgICAgICAgbXkgJEVtYWlsUGFyc2VyT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkVtYWlsUGFyc2VyLT5uZXcoCiAgICAgICAgICAgIE1vZGUgID0+ICdTdGFuZGFsb25lJywKICAgICAgICAgICAgRGVidWcgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGFuZCByZXRyaWV2ZSBpbnZvbHZlZCBhbmQgaW5mb3JtZWQgYWdlbnRzIG9mIFJlcGx5VG8gTm90ZQogICAgICAgIG15IEBSZXBseVRvVXNlcnM7CiAgICAgICAgbXkgJVJlcGx5VG9Vc2Vyc0hhc2g7CiAgICAgICAgbXkgJVJlcGx5VG9Vc2VySURzOwogICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gKSB7CiAgICAgICAgICAgIG15IEBSZXBseVRvUGFydHMgPSAkRW1haWxQYXJzZXJPYmplY3QtPlNwbGl0QWRkcmVzc0xpbmUoCiAgICAgICAgICAgICAgICBMaW5lID0+ICRTZWxmLT57UmVwbHlUb0FydGljbGVDb250ZW50fS0+e1RvfSB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIFJFUExZVE9QQVJUOgogICAgICAgICAgICBmb3IgbXkgJFNpbmdsZVJlcGx5VG9QYXJ0IChAUmVwbHlUb1BhcnRzKSB7CiAgICAgICAgICAgICAgICBteSAkUmVwbHlUb0FkZHJlc3MgPSAkRW1haWxQYXJzZXJPYmplY3QtPkdldEVtYWlsQWRkcmVzcygKICAgICAgICAgICAgICAgICAgICBFbWFpbCA9PiAkU2luZ2xlUmVwbHlUb1BhcnQsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG5leHQgUkVQTFlUT1BBUlQgaWYgISRSZXBseVRvQWRkcmVzczsKICAgICAgICAgICAgICAgIHB1c2ggQFJlcGx5VG9Vc2VycywgJFJlcGx5VG9BZGRyZXNzOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkUmVwbHlUb1VzZXJzSGFzaHskX30rKyBmb3IgQFJlcGx5VG9Vc2VyczsKCiAgICAgICAgICAgICMgZ2V0IHVzZXIgaWRzIG9mIGF2YWlsYWJsZSB1c2VycwogICAgICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlU2hvd25Vc2VycyApIHsKICAgICAgICAgICAgICAgIG15ICVVc2VyRGF0YSA9ICRVc2VyT2JqZWN0LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJFVzZXJFbWFpbCA9ICRVc2VyRGF0YXtVc2VyRW1haWx9OwogICAgICAgICAgICAgICAgaWYgKCAkUmVwbHlUb1VzZXJzSGFzaHskVXNlckVtYWlsfSApIHsKICAgICAgICAgICAgICAgICAgICAkUmVwbHlUb1VzZXJJRHN7JFVzZXJJRH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBvcmlnaW5hbCBub3RlIHNlbmRlciB0byBsaXN0IG9mIHVzZXIgaWRzCiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBAeyAkU2VsZi0+e1JlcGx5VG9TZW5kZXJVc2VySUR9IH0gKSB7CgogICAgICAgICAgICAgICAgIyBpZiBzZW5kZXIgcmVwbGllcyB0byBoaW1zZWxmLCBkbyBub3QgaW5jbHVkZSBzZW5kZXIgaW4gbGlzdAogICAgICAgICAgICAgICAgaWYgKCAkVXNlcklEIG5lICRTZWxmLT57VXNlcklEfSApIHsKICAgICAgICAgICAgICAgICAgICAkUmVwbHlUb1VzZXJJRHN7JFVzZXJJRH0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHJlbW92ZSB1c2VyIGlkIG9mIGFjdGl2ZSB1c2VyCiAgICAgICAgICAgIGRlbGV0ZSAkUmVwbHlUb1VzZXJJRHN7ICRTZWxmLT57VXNlcklEfSB9OwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkQ29uZmlnLT57SW5mb3JtQWdlbnR9IHx8ICRDb25maWctPntJbnZvbHZlZEFnZW50fSApIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvcm1BZGRpdGlvbmFsQWdlbnRzJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHBhcmFtIG9iamVjdAogICAgICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICAgICAgIyBnZXQgYWxsIGFnZW50cyBmb3IgImludm9sdmVkIGFnZW50cyIKICAgICAgICBpZiAoICRDb25maWctPntJbnZvbHZlZEFnZW50fSApIHsKCiAgICAgICAgICAgIG15IEBVc2VySURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0SW52b2x2ZWRBZ2VudHNMaXN0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSBASW52b2x2ZWRBZ2VudHM7CiAgICAgICAgICAgIG15ICRDb3VudGVyID0gMTsKCiAgICAgICAgICAgIG15IEBJbnZvbHZlZFVzZXJJRCA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdJbnZvbHZlZFVzZXJJRCcgKTsKCiAgICAgICAgICAgIG15ICVBZ2VudFdpdGhQZXJtaXNzaW9uID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uR3JvdXBHZXQoCiAgICAgICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdybycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBVU0VSOgogICAgICAgICAgICBmb3IgbXkgJFVzZXIgKCByZXZlcnNlIEBVc2VySURzICkgewoKICAgICAgICAgICAgICAgIG5leHQgVVNFUiBpZiAhZGVmaW5lZCAkQWdlbnRXaXRoUGVybWlzc2lvbnsgJFVzZXItPntVc2VySUR9IH07CgogICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gIiRDb3VudGVyOiAkVXNlci0+e1VzZXJGdWxsbmFtZX0iOwogICAgICAgICAgICAgICAgaWYgKCAkVXNlci0+e091dE9mT2ZmaWNlTWVzc2FnZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFZhbHVlIC49ICIgJFVzZXItPntPdXRPZk9mZmljZU1lc3NhZ2V9IjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwdXNoIEBJbnZvbHZlZEFnZW50cywgewogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICRVc2VyLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKCiAgICAgICAgICAgICAgICAjIGFkZCBpbnZvbHZlZCB1c2VyIGFzIHNlbGVjdGVkIGVudHJpZXMsIGlmIGF2YWlsYWJsZSBpbiBSZXBseVRvQWRkcmVzc2VzIGxpc3QKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gJiYgJFJlcGx5VG9Vc2VySURzeyAkVXNlci0+e1VzZXJJRH0gfSApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBJbnZvbHZlZFVzZXJJRCwgJFVzZXItPntVc2VySUR9OwogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAkUmVwbHlUb1VzZXJJRHN7ICRVc2VyLT57VXNlcklEfSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkSW52b2x2ZWRBZ2VudFNpemUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Okludm9sdmVkQWdlbnRNYXhTaXplJykgfHwgMzsKICAgICAgICAgICAgJFBhcmFte0ludm9sdmVkQWdlbnRTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcQEludm9sdmVkQWdlbnRzLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiBcQEludm9sdmVkVXNlcklELAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnSW52b2x2ZWRVc2VySUQnLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgPT4gJEludm9sdmVkQWdlbnRTaXplLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBibG9jayBpcyBjYWxsZWQgYmVsb3cgImluZm9ybSBhZ2VudHMiCiAgICAgICAgfQoKICAgICAgICAjIGFnZW50IGxpc3QKICAgICAgICBpZiAoICRDb25maWctPntJbmZvcm1BZ2VudH0gKSB7CgogICAgICAgICAgICAjIGdldCBpbmZvcm0gdXNlciBsaXN0CiAgICAgICAgICAgIG15ICVJbmZvcm1BZ2VudHM7CiAgICAgICAgICAgIG15IEBJbmZvcm1Vc2VySUQgICAgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAnSW5mb3JtVXNlcklEJyApOwogICAgICAgICAgICBteSAlSW5mb3JtQWdlbnRMaXN0ID0gJEdyb3VwT2JqZWN0LT5QZXJtaXNzaW9uR3JvdXBHZXQoCiAgICAgICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdybycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVJbmZvcm1BZ2VudExpc3QgKSB7CiAgICAgICAgICAgICAgICAkSW5mb3JtQWdlbnRzeyRVc2VySUR9ID0gJEFsbEdyb3Vwc01lbWJlcnN7JFVzZXJJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgZW1haWwgYWRkcmVzcyBvZiBhbGwgdXNlcnMgYW5kIGNvbXBhcmUgdG8gcmVwbHl0by1hZGRyZXNzZXMKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVJbmZvcm1BZ2VudHMgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUmVwbHlUb1VzZXJJRHN7JFVzZXJJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEluZm9ybVVzZXJJRCwgJFVzZXJJRDsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRSZXBseVRvVXNlcklEc3skVXNlcklEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRJbmZvcm1BZ2VudFNpemUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6OkluZm9ybUFnZW50TWF4U2l6ZScpCiAgICAgICAgICAgICAgICB8fCAzOwogICAgICAgICAgICAkUGFyYW17T3B0aW9uU3RyZ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVJbmZvcm1BZ2VudHMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+IFxASW5mb3JtVXNlcklELAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnSW5mb3JtVXNlcklEJywKICAgICAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgID0+ICRJbmZvcm1BZ2VudFNpemUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb3JtQWdlbnQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgaW52b2x2ZWQKICAgICAgICBpZiAoICRDb25maWctPntJbnZvbHZlZEFnZW50fSApIHsKCiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSW52b2x2ZWRBZ2VudCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgbGlzdCBvZiBhZ2VudHMsIHRoYXQgcmVjZWl2ZSB0aGlzIG5vdGUgKFJlcGx5VG9Ob3RlKQogICAgICAgICMgYXQgbGVhc3Qgc2VuZGVyIG9mIG9yaWdpbmFsIG5vdGUgYW5kIGFsbCByZWNlcGllbnRzIG9mIHRoZSBvcmlnaW5hbCBub3RlCiAgICAgICAgIyB0aGF0IGNvdWxkbid0IGJlIHNlbGVjdGVkIHdpdGggaW52b2x2ZWQvaW5mb3JtIGFnZW50cwogICAgICAgIGlmICggJFNlbGYtPntSZXBseVRvQXJ0aWNsZX0gKSB7CgogICAgICAgICAgICBteSAkVXNlcnNIYXNoU2l6ZSA9IGtleXMgJVJlcGx5VG9Vc2VySURzOwogICAgICAgICAgICBteSAkQ291bnRlciAgICAgICA9IDA7CiAgICAgICAgICAgICRQYXJhbXtVc2VyTGlzdFdpdGhvdXRTZWxlY3Rpb259ID0gam9pbiggJywnLCBrZXlzICVSZXBseVRvVXNlcklEcyApOwoKICAgICAgICAgICAgaWYgKCAkVXNlcnNIYXNoU2l6ZSA+IDAgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvcm1BZ2VudHNXaXRob3V0U2VsZWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVSZXBseVRvVXNlcklEcyApIHsKICAgICAgICAgICAgICAgICAgICAkQ291bnRlcisrOwoKICAgICAgICAgICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkVXNlck9iamVjdC0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmZvcm1BZ2VudHNXaXRob3V0U2VsZWN0aW9uU2luZ2xlVXNlcicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVVc2VyRGF0YSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAjIG91dHB1dCBhIHNlcGFyYXRvciAoSW5mb3JtQWdlbnRzV2l0aG91dFNlbGVjdGlvblNpbmdsZVVzZXJTZXBhcmF0b3IpLAogICAgICAgICAgICAgICAgICAgICMgaWYgbm90IGxhc3QgZW50cnkKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb3VudGVyIDwgJFVzZXJzSGFzaFNpemUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5mb3JtQWdlbnRzV2l0aG91dFNlbGVjdGlvblNpbmdsZVVzZXJTZXBhcmF0b3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcJVVzZXJEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgcmljaCB0ZXh0IGVkaXRvcgogICAgICAgIGlmICggJExheW91dE9iamVjdC0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CgogICAgICAgICAgICAjIHVzZSBoZWlnaHQvd2lkdGggZGVmaW5lZCBmb3IgdGhpcyBzY3JlZW4KICAgICAgICAgICAgJFBhcmFte1JpY2hUZXh0SGVpZ2h0fSA9ICRDb25maWctPntSaWNoVGV4dEhlaWdodH0gfHwgMDsKICAgICAgICAgICAgJFBhcmFte1JpY2hUZXh0V2lkdGh9ICA9ICRDb25maWctPntSaWNoVGV4dFdpZHRofSAgfHwgMDsKCiAgICAgICAgICAgICMgc2V0IHVwIHJpY2ggdGV4dCBlZGl0b3IKICAgICAgICAgICAgJExheW91dE9iamVjdC0+U2V0UmljaFRleHRQYXJhbWV0ZXJzKAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQ29uZmlnLT57Tm90ZU1hbmRhdG9yeX0KICAgICAgICAgICAgfHwgJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpOZWVkQWNjb3VudGVkVGltZScpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3ViamVjdExhYmVsTWFuZGF0b3J5JywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dExhYmVsTWFuZGF0b3J5JywKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3ViamVjdExhYmVsJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSaWNoVGV4dExhYmVsJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgdGV4dCB0ZW1wbGF0ZSBzdHJpbmcKICAgICAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhbmRhcmRUZW1wbGF0ZScpLT5TdGFuZGFyZFRlbXBsYXRlTGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgVHlwZSAgPT4gJ05vdGUnLAogICAgICAgICk7CgogICAgICAgIG15ICRRdWV1ZVN0YW5kYXJkVGVtcGxhdGVzID0gJFNlbGYtPl9HZXRTdGFuZGFyZFRlbXBsYXRlcygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSB8fCAnJywKICAgICAgICApOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKAogICAgICAgICAgICAgICAgJFF1ZXVlU3RhbmRhcmRUZW1wbGF0ZXMKICAgICAgICAgICAgICAgICAgICB8fCAoICRDb25maWctPntRdWV1ZX0gJiYgSXNIYXNoUmVmV2l0aERhdGEoIFwlU3RhbmRhcmRUZW1wbGF0ZXMgKSApCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFBhcmFte1N0YW5kYXJkVGVtcGxhdGVTdHJnfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRRdWV1ZVN0YW5kYXJkVGVtcGxhdGVzIHx8IHt9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdTdGFuZGFyZFRlbXBsYXRlSUQnLAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtTdGFuZGFyZFRlbXBsYXRlSUR9IHx8ICcnLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBTb3J0ICAgICAgICAgPT4gJ0FscGhhbnVtZXJpY1ZhbHVlJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgTWF4ICAgICAgICAgID0+IDIwMCwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGFuZGFyZFRlbXBsYXRlJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGltZSBhY2NvdW50aW5nIGJveAogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpBY2NvdW50VGltZScpICkgewogICAgICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TmVlZEFjY291bnRlZFRpbWUnKSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RpbWVVbml0c0xhYmVsTWFuZGF0b3J5JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVGltZVVuaXRzTGFiZWwnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUaW1lVW5pdHMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgQXJ0aWNsZSB0eXBlIGR5bmFtaWMgZmllbGRzLgogICAgICAgIGZvciBteSAkQXJ0aWNsZVR5cGVEeW5hbWljRmllbGQgKCBAeyAkUGFyYW17QXJ0aWNsZVR5cGVEeW5hbWljRmllbGRzfSB9ICkgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVUeXBlRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJEFydGljbGVUeXBlRHluYW1pY0ZpZWxkLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZVR5cGVEeW5hbWljRmllbGQtPntNYW5kYXRvcnlUb29sdGlwfSApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FydGljbGVUeXBlRHluYW1pY0ZpZWxkRXJyb3InLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFydGljbGVUeXBlRHluYW1pY0ZpZWxkLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBPdXRwdXQgY3VzdG9taXphdGlvbiBibG9jayB0b28sIGlmIGl0IGV4aXN0cy4KICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZF8nIC4gJEFydGljbGVUeXBlRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBEYXRhID0+ICRBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBFbmQgV2lkZ2V0IEFydGljbGUKCiAgICAjIGdldCBvdXRwdXQgYmFjawogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtCiAgICApOwp9CgpzdWIgX0dldE5leHRTdGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlTmV4dFN0YXRlcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U3RhdGVMaXN0KAogICAgICAgIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9LAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICByZXR1cm4gXCVOZXh0U3RhdGVzOwp9CgpzdWIgX0dldFJlc3BvbnNpYmxlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CiAgICBteSAlU2hvd25Vc2VyczsKICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgc2hvdyBhbGwgdXNlcnMKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkNoYW5nZU93bmVyVG9FdmVyeW9uZScpICkgewogICAgICAgICVTaG93blVzZXJzID0gJUFsbEdyb3Vwc01lbWJlcnM7CiAgICB9CgogICAgIyBzaG93IG9ubHkgdXNlcnMgd2l0aCByZXNwb25zaWJsZSBvciBydyBwZW1pc3Npb25zIGluIHRoZSBxdWV1ZQogICAgZWxzaWYgKCAkUGFyYW17UXVldWVJRH0gJiYgISRQYXJhbXtBbGxVc2Vyc30gKSB7CiAgICAgICAgbXkgJEdJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5HZXRRdWV1ZUdyb3VwSUQoCiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFBhcmFte05ld1F1ZXVlSUR9IHx8ICRQYXJhbXtRdWV1ZUlEfQogICAgICAgICk7CiAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkdyb3VwR2V0KAogICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ3Jlc3BvbnNpYmxlJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAkU2hvd25Vc2Vyc3skVXNlcklEfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRVc2VySUR9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnUmVzcG9uc2libGUnLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4geyAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCkgfSBpZiAkQUNMOwoKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0T3duZXJzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CiAgICBteSAlU2hvd25Vc2VyczsKICAgIG15ICVBbGxHcm91cHNNZW1iZXJzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgc2hvdyBhbGwgdXNlcnMKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OkNoYW5nZU93bmVyVG9FdmVyeW9uZScpICkgewogICAgICAgICVTaG93blVzZXJzID0gJUFsbEdyb3Vwc01lbWJlcnM7CiAgICB9CgogICAgIyBzaG93IG9ubHkgdXNlcnMgd2l0aCBvd25lciBvciBydyBwZW1pc3Npb25zIGluIHRoZSBxdWV1ZQogICAgZWxzaWYgKCAkUGFyYW17UXVldWVJRH0gJiYgISRQYXJhbXtBbGxVc2Vyc30gKSB7CiAgICAgICAgbXkgJEdJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5HZXRRdWV1ZUdyb3VwSUQoCiAgICAgICAgICAgIFF1ZXVlSUQgPT4gJFBhcmFte05ld1F1ZXVlSUR9IHx8ICRQYXJhbXtRdWV1ZUlEfQogICAgICAgICk7CiAgICAgICAgbXkgJU1lbWJlckxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+UGVybWlzc2lvbkdyb3VwR2V0KAogICAgICAgICAgICBHcm91cElEID0+ICRHSUQsCiAgICAgICAgICAgIFR5cGUgICAgPT4gJ293bmVyJywKICAgICAgICApOwogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCBrZXlzICVNZW1iZXJMaXN0ICkgewogICAgICAgICAgICAkU2hvd25Vc2Vyc3skVXNlcklEfSA9ICRBbGxHcm91cHNNZW1iZXJzeyRVc2VySUR9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB0aWNrZXQgb2JqZWN0CiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnTmV3T3duZXInLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVTaG93blVzZXJzLAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4geyAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2xEYXRhKCkgfSBpZiAkQUNMOwoKICAgIHJldHVybiBcJVNob3duVXNlcnM7Cn0KCnN1YiBfR2V0T2xkT3duZXJzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICBteSBAT2xkVXNlckluZm8gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lckxpc3QoIFRpY2tldElEID0+ICRTZWxmLT57VGlja2V0SUR9ICk7CiAgICBteSAlVXNlckhhc2g7CiAgICBpZiAoQE9sZFVzZXJJbmZvKSB7CiAgICAgICAgbXkgJENvdW50ZXIgPSAxOwogICAgICAgIFVTRVI6CiAgICAgICAgZm9yIG15ICRVc2VyICggcmV2ZXJzZSBAT2xkVXNlckluZm8gKSB7CgogICAgICAgICAgICBuZXh0IFVTRVIgaWYgJFVzZXJIYXNoeyAkVXNlci0+e1VzZXJJRH0gfTsKCiAgICAgICAgICAgICRVc2VySGFzaHsgJFVzZXItPntVc2VySUR9IH0gPSAiJENvdW50ZXI6ICRVc2VyLT57VXNlckZ1bGxuYW1lfSI7CiAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgfQogICAgfQoKICAgICMgd29ya2Zsb3cKICAgIG15ICRBQ0wgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBY2woCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgICAgICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFJldHVyblR5cGUgICAgPT4gJ1RpY2tldCcsCiAgICAgICAgUmV0dXJuU3ViVHlwZSA9PiAnT2xkT3duZXInLAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVVc2VySGFzaCwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIHsgJFRpY2tldE9iamVjdC0+VGlja2V0QWNsRGF0YSgpIH0gaWYgJEFDTDsKCiAgICByZXR1cm4gXCVVc2VySGFzaDsKfQoKc3ViIF9HZXRTZXJ2aWNlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UKICAgIG15ICVTZXJ2aWNlOwoKICAgICMgZ2V0IG9wdGlvbnMgZm9yIGRlZmF1bHQgc2VydmljZXMgZm9yIHVua25vd24gY3VzdG9tZXJzCiAgICBteSAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIKICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnVGlja2V0OjpTZXJ2aWNlOjpEZWZhdWx0OjpVbmtub3duQ3VzdG9tZXInKTsKCiAgICAjIGNoZWNrIGlmIG5vIEN1c3RvbWVyVXNlcklEIGlzIHNlbGVjdGVkCiAgICAjIGlmICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lciA9IDAgbGVhdmUgQ3VzdG9tZXJVc2VySUQgZW1wdHksIGl0IHdpbGwgbm90IGdldCBhbnkgc2VydmljZXMKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMSBzZXQgQ3VzdG9tZXJVc2VySUQgdG8gZ2V0IGRlZmF1bHQgc2VydmljZXMKICAgIGlmICggISRQYXJhbXtDdXN0b21lclVzZXJJRH0gJiYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyICkgewogICAgICAgICRQYXJhbXtDdXN0b21lclVzZXJJRH0gPSAnPERFRkFVTFQ+JzsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIGlmICggJFBhcmFte0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0U2VydmljZUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVTZXJ2aWNlOwp9CgpzdWIgX0dldFNMQXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGlmIG5vbiBzZXQgY3VzdG9tZXJzIGNhbiBnZXQgZGVmYXVsdCBzZXJ2aWNlcyB0aGVuIHRoZXkgc2hvdWxkIGFsc28gYmUgYWJsZSB0byBnZXQgdGhlIFNMQXMKICAgICMgIGZvciB0aG9zZSBzZXJ2aWNlcyAodGhpcyB3b3JrcyBkdXJpbmcgdGlja2V0IGNyZWF0aW9uKS4KICAgICMgaWYgbm8gQ3VzdG9tZXJVc2VySUQgaXMgc2V0LCBUaWNrZXRTTEFMaXN0IHdpbGwgY29tcGxhaW4gZHVyaW5nIEFKQVggdXBkYXRlcyBhcyBVc2VySUQgaXMgbm90CiAgICAjICBwYXNzZWQuIFNlZSBidWcgMTExNDcuCgogICAgIyBnZXQgb3B0aW9ucyBmb3IgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgdW5rbm93biBjdXN0b21lcnMKICAgIG15ICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwoKICAgICMgY2hlY2sgaWYgbm8gQ3VzdG9tZXJVc2VySUQgaXMgc2VsZWN0ZWQKICAgICMgaWYgJERlZmF1bHRTZXJ2aWNlVW5rbm93bkN1c3RvbWVyID0gMCBsZWF2ZSBDdXN0b21lclVzZXJJRCBlbXB0eSwgaXQgd2lsbCBub3QgZ2V0IGFueSBzZXJ2aWNlcwogICAgIyBpZiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgPSAxIHNldCBDdXN0b21lclVzZXJJRCB0byBnZXQgZGVmYXVsdCBzZXJ2aWNlcwogICAgaWYgKCAhJFBhcmFte0N1c3RvbWVyVXNlcklEfSAmJiAkRGVmYXVsdFNlcnZpY2VVbmtub3duQ3VzdG9tZXIgKSB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlcklEfSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgIG15ICVTTEE7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewogICAgICAgICVTTEEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldFNMQUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVTTEE7Cn0KCnN1YiBfR2V0UHJpb3JpdGllcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVQcmlvcml0aWVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5UaWNrZXRQcmlvcml0eUxpc3QoCiAgICAgICAgJVBhcmFtLAogICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICApOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgIG15ICRDb25maWcgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoIlRpY2tldDo6RnJvbnRlbmQ6OiRTZWxmLT57QWN0aW9ufSIpOwoKICAgIGlmICggISRDb25maWctPntQcmlvcml0eURlZmF1bHR9ICkgewogICAgICAgICRQcmlvcml0aWVzeycnfSA9ICctJzsKICAgIH0KICAgIHJldHVybiBcJVByaW9yaXRpZXM7Cn0KCnN1YiBfR2V0RmllbGRzVG9VcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAVXBkYXRhYmxlRmllbGRzOwoKICAgICMgc2V0IHRoZSBmaWVsZHMgdGhhdCBjYW4gYmUgdXBkYXRlYWJsZSB2aWEgQUpBWFVwZGF0ZQogICAgaWYgKCAhJFBhcmFte09ubHlEeW5hbWljRmllbGRzfSApIHsKICAgICAgICBAVXBkYXRhYmxlRmllbGRzID0gcXcoCiAgICAgICAgICAgIFR5cGVJRCBTZXJ2aWNlSUQgU0xBSUQgTmV3T3duZXJJRCBOZXdSZXNwb25zaWJsZUlEIE5ld1N0YXRlSUQKICAgICAgICAgICAgTmV3UHJpb3JpdHlJRAogICAgICAgICk7CiAgICB9CgogICAgIyBkZWZpbmUgdGhlIGR5bmFtaWMgZmllbGRzIHRvIHNob3cgYmFzZWQgb24gdGhlIG9iamVjdCB0eXBlCiAgICBteSAkT2JqZWN0VHlwZSA9IFsnVGlja2V0J107CgogICAgIyBnZXQgY29uZmlnIG9mIGZyb250ZW5kIG1vZHVsZQogICAgbXkgJENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgiVGlja2V0OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CiMgLS0tCiMgT1RSU01hc3RlclNsYXZlCiMgLS0tCiAgICAjIGdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZAogICAgbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJykgfHwgJyc7CiAgICBteSAkTWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ01hc3RlclNsYXZlOjpBZHZhbmNlZEVuYWJsZWQnKSB8fCAwOwoKICAgIGlmICgkTWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWQpIHsKICAgICAgICAkQ29uZmlnLT57RHluYW1pY0ZpZWxkfS0+eyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0gPSAxOwogICAgfQojIC0tLQoKICAgICMgb25seSBzY3JlZW5zIHRoYXQgYWRkIG5vdGVzIGNhbiBtb2RpZnkgQXJ0aWNsZSBkeW5hbWljIGZpZWxkcwogICAgaWYgKCAkQ29uZmlnLT57Tm90ZX0gKSB7CiAgICAgICAgJE9iamVjdFR5cGUgPSBbICdUaWNrZXQnLCAnQXJ0aWNsZScgXTsKICAgIH0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIHRoaXMgc2NyZWVuCiAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gJE9iamVjdFR5cGUsCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gJENvbmZpZy0+e0R5bmFtaWNGaWVsZH0gfHwge30sCiAgICApOwoKICAgICMgY3ljbGUgdGhyb3VnaCB0aGUgYWN0aXZhdGVkIER5bmFtaWMgRmllbGRzIGZvciB0aGlzIHNjcmVlbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyREeW5hbWljRmllbGR9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgbXkgJElzQUNMUmVkdWNpYmxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5IYXNCZWhhdmlvcigKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIEJlaGF2aW9yICAgICAgICAgICA9PiAnSXNBQ0xSZWR1Y2libGUnLAogICAgICAgICk7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRJc0FDTFJlZHVjaWJsZTsKCiAgICAgICAgcHVzaCBAVXBkYXRhYmxlRmllbGRzLCAnRHluYW1pY0ZpZWxkXycgLiAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX07CiAgICB9CgogICAgcmV0dXJuIFxAVXBkYXRhYmxlRmllbGRzOwp9CgpzdWIgX0dldFF1b3RlZFJlcGx5Qm9keSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QnJvd3NlclJpY2hUZXh0fSApIHsKCiAgICAgICAgIyByZXdyYXAgYm9keSBpZiBleGlzdHMKICAgICAgICBpZiAoICRQYXJhbXtCb2R5fSApIHsKICAgICAgICAgICAgJFBhcmFte0JvZHl9ID1+IHMvXHQvIC9nOwogICAgICAgICAgICBteSAkUXVvdGUgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpRdW90ZScpIHx8ICcnLAogICAgICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCRRdW90ZSkgewoKICAgICAgICAgICAgICAgICMgcXVvdGUgdGV4dAogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gIjxibG9ja3F1b3RlIHR5cGU9XCJjaXRlXCI+JFBhcmFte0JvZHl9PC9ibG9ja3F1b3RlPlxuIjsKCiAgICAgICAgICAgICAgICAjIGNsZWFudXAgbm90IGNvbXBhdC4gdGFncwogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+UmljaFRleHREb2N1bWVudENsZWFudXAoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtCb2R5fSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJFJlc3BvbnNlRm9ybWF0ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgIC0+Rm9ybWF0VGltZVN0cmluZyggJFBhcmFte0NyZWF0ZVRpbWV9LCAnRGF0ZUZvcm1hdCcsICdOb1NlY29uZHMnICk7CiAgICAgICAgICAgICAgICAkUmVzcG9uc2VGb3JtYXQgLj0gJyAtICcgLiAkUGFyYW17RnJvbX0gLiAnICc7CiAgICAgICAgICAgICAgICAkUmVzcG9uc2VGb3JtYXQKICAgICAgICAgICAgICAgICAgICAuPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ3dyb3RlJykgLiAnOic7CgogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gJFJlc3BvbnNlRm9ybWF0IC4gJFBhcmFte0JvZHl9OwoKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICI8YnIvPiIgLiAkUGFyYW17Qm9keX07CgogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17Q3JlYXRlVGltZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdEYXRlJykgLgogICAgICAgICAgICAgICAgICAgICAgICAiOiAkUGFyYW17Q3JlYXRlVGltZX08YnIvPiIgLiAkUGFyYW17Qm9keX07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yIChxdyhTdWJqZWN0IFJlcGx5VG8gUmVwbHktVG8gQ2MgVG8gRnJvbSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkXykgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIjogJFBhcmFteyRffTxici8+IiAuICRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEZyb20gPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJSaWNoVGV4dCgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte0Zyb219LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkTWVzc2FnZUZyb20gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ01lc3NhZ2UgZnJvbScpOwogICAgICAgICAgICAgICAgbXkgJEVuZE1lc3NhZ2UgID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdFbmQgbWVzc2FnZScpOwoKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICI8YnIvPi0tLS0gJE1lc3NhZ2VGcm9tICRGcm9tIC0tLTxici8+PGJyLz4iIC4gJFBhcmFte0JvZHl9OwogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9IC49ICI8YnIvPi0tLS0gJEVuZE1lc3NhZ2UgLS0tPGJyLz4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgcHJlcGFyZSBib2R5LCBzdWJqZWN0LCBSZXBseVRvIC4uLgogICAgICAgICMgcmV3cmFwIGJvZHkgaWYgZXhpc3RzCiAgICAgICAgaWYgKCAkUGFyYW17Qm9keX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9fiBzL1x0LyAvZzsKICAgICAgICAgICAgbXkgJFF1b3RlID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpRdW90ZScpOwogICAgICAgICAgICBpZiAoJFF1b3RlKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPX4gcy9cbi9cbiRRdW90ZSAvZzsKICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICJcbiRRdW90ZSAiIC4gJFBhcmFte0JvZHl9OwoKICAgICAgICAgICAgICAgIG15ICRSZXNwb25zZUZvcm1hdCA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAtPkZvcm1hdFRpbWVTdHJpbmcoICRQYXJhbXtDcmVhdGVUaW1lfSwgJ0RhdGVGb3JtYXQnLCAnTm9TZWNvbmRzJyApOwogICAgICAgICAgICAgICAgJFJlc3BvbnNlRm9ybWF0IC49ICcgLSAnIC4gJFBhcmFte0Zyb219IC4gJyAnOwogICAgICAgICAgICAgICAgJFJlc3BvbnNlRm9ybWF0CiAgICAgICAgICAgICAgICAgICAgLj0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCd3cm90ZScpIC4gIjpcbiI7CgogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gJFJlc3BvbnNlRm9ybWF0IC4gJFBhcmFte0JvZHl9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gIlxuIiAuICRQYXJhbXtCb2R5fTsKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte0NyZWF0ZVRpbWV9ICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtCb2R5fSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnRGF0ZScpIC4KICAgICAgICAgICAgICAgICAgICAgICAgIjogJFBhcmFte0NyZWF0ZVRpbWV9XG4iIC4gJFBhcmFte0JvZHl9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvciAocXcoU3ViamVjdCBSZXBseVRvIFJlcGx5LVRvIENjIFRvIEZyb20pKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17JF99ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17Qm9keX0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJF8pIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6ICRQYXJhbXskX31cbiIgLiAkUGFyYW17Qm9keX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRNZXNzYWdlRnJvbSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTWVzc2FnZSBmcm9tJyk7CiAgICAgICAgICAgICAgICBteSAkRW5kTWVzc2FnZSAgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ0VuZCBtZXNzYWdlJyk7CgogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9ID0gIlxuLS0tLSAkTWVzc2FnZUZyb20gJFBhcmFte0Zyb219IC0tLVxuXG4iIC4gJFBhcmFte0JvZHl9OwogICAgICAgICAgICAgICAgJFBhcmFte0JvZHl9IC49ICJcbi0tLS0gJEVuZE1lc3NhZ2UgLS0tXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Qm9keX07Cn0KCnN1YiBfR2V0U3RhbmRhcmRUZW1wbGF0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjcmVhdGUgdGVtcGxhdGVzCiAgICBteSAlVGVtcGxhdGVzOwoKICAgICMgY2hlY2sgbmVlZGVkCiAgICByZXR1cm4gXCVUZW1wbGF0ZXMgaWYgISRQYXJhbXtRdWV1ZUlEfSAmJiAhJFBhcmFte1RpY2tldElEfTsKCiAgICBteSAkUXVldWVJRCA9ICRQYXJhbXtRdWV1ZUlEfSB8fCAnJzsKICAgIGlmICggISRQYXJhbXtRdWV1ZUlEfSAmJiAkUGFyYW17VGlja2V0SUR9ICkgewoKICAgICAgICAjIGdldCBRdWV1ZUlEIGZyb20gdGhlIHRpY2tldAogICAgICAgIG15ICVUaWNrZXQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFF1ZXVlSUQgPSAkVGlja2V0e1F1ZXVlSUR9IHx8ICcnOwogICAgfQoKICAgICMgZmV0Y2ggYWxsIHN0ZC4gdGVtcGxhdGVzCiAgICBteSAlU3RhbmRhcmRUZW1wbGF0ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVTdGFuZGFyZFRlbXBsYXRlTWVtYmVyTGlzdCgKICAgICAgICBRdWV1ZUlEICAgICAgID0+ICRRdWV1ZUlELAogICAgICAgIFRlbXBsYXRlVHlwZXMgPT4gMSwKICAgICk7CgogICAgIyByZXR1cm4gZW1wdHkgaGFzaCBpZiB0aGVyZSBhcmUgbm8gdGVtcGxhdGVzIGZvciB0aGlzIHNjcmVlbgogICAgcmV0dXJuIFwlVGVtcGxhdGVzIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJFN0YW5kYXJkVGVtcGxhdGVze05vdGV9ICk7CgogICAgIyByZXR1cm4ganVzdCB0aGUgdGVtcGxhdGVzIGZvciB0aGlzIHNjcmVlbgogICAgcmV0dXJuICRTdGFuZGFyZFRlbXBsYXRlc3tOb3RlfTsKfQoKc3ViIF9HZXRUeXBlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHR5cGUKICAgIG15ICVUeXBlOwogICAgaWYgKCAkUGFyYW17UXVldWVJRH0gfHwgJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAlVHlwZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+VGlja2V0VHlwZUxpc3QoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFNlbGYtPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICRTZWxmLT57QWN0aW9ufSwKICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CiAgICByZXR1cm4gXCVUeXBlOwp9CgpzdWIgX0dldFF1ZXVlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgR2V0IFF1ZXVlcy4KICAgIG15ICVRdWV1ZXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldE1vdmVMaXN0KAogICAgICAgICVQYXJhbSwKICAgICAgICBUaWNrZXRJRCA9PiAkU2VsZi0+e1RpY2tldElEfSwKICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgQWN0aW9uICAgPT4gJFNlbGYtPntBY3Rpb259LAogICAgICAgIFR5cGUgICAgID0+ICdtb3ZlX2ludG8nLAogICAgKTsKICAgIHJldHVybiBcJVF1ZXVlczsKfQojIC0tLQojIE9UUlNNYXN0ZXJTbGF2ZQojIC0tLQpzdWIgX0dldE1hc3RlclNsYXZlRGF0YSB7CiAgICBteSAoJFNlbGYsICVQYXJhbSkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAkVW5zZXRNYXN0ZXJTbGF2ZSAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ01hc3RlclNsYXZlOjpVbnNldE1hc3RlclNsYXZlJykgfHwgMDsKICAgIG15ICRVcGRhdGVNYXN0ZXJTbGF2ZSA9ICRDb25maWdPYmplY3QtPkdldCgnTWFzdGVyU2xhdmU6OlVwZGF0ZU1hc3RlclNsYXZlJykgfHwgMDsKCiAgICBteSAlVGlja2V0ID0gJXsgJFBhcmFte1RpY2tldH0gfTsKICAgIG15ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCA9ICRQYXJhbXtNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH07CgogICAgbXkgJEZpZWxkVmFsdWUgPSAkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgfSB8fCAnJzsKCiAgICAjIGdldCBsYXlvdXQgb2JqZWN0CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgICcnID0+ICctJywKICAgICk7CgogICAgaWYgKCAkRmllbGRWYWx1ZSBuZSAnTWFzdGVyJyApIHsKICAgICAgICAkRGF0YXtNYXN0ZXJ9ID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdOZXcgTWFzdGVyIFRpY2tldCcpOwogICAgfQogICAgaWYgKCAkVW5zZXRNYXN0ZXJTbGF2ZSAmJiAkRmllbGRWYWx1ZSBlcSAnTWFzdGVyJyApIHsKICAgICAgICAkRGF0YXtVbnNldE1hc3Rlcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1Vuc2V0IE1hc3RlciBUaWNrZXQnKTsKICAgIH0KICAgIGlmICggJFVuc2V0TWFzdGVyU2xhdmUgJiYgJEZpZWxkVmFsdWUgPX4gbXteU2xhdmVPZjooLio/KSR9eG1zICkgewogICAgICAgICREYXRhe1Vuc2V0U2xhdmV9ICA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnVW5zZXQgU2xhdmUgVGlja2V0Jyk7CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJFRpY2tldEhvb2sgICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Okhvb2snKTsKICAgIG15ICRUaWNrZXRIb29rRGl2aWRlciA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rRGl2aWRlcicpOwoKICAgIGlmICggJFVwZGF0ZU1hc3RlclNsYXZlICkgewogICAgICAgIG15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgIFJlc3VsdCA9PiAnQVJSQVknLAoKICAgICAgICAgICAgIyBtYXN0ZXIgc2xhdmUgZHluYW1pYyBmaWVsZAogICAgICAgICAgICAnRHluYW1pY0ZpZWxkXycgLiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICdNYXN0ZXInLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgU3RhdGVUeXBlICA9PiAnT3BlbicsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gNjAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBQZXJtaXNzaW9uID0+ICdybycsCiAgICAgICAgKTsKCiAgICAgICAgVElDS0VUSUQ6CiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgICAgICBteSAlQ3VycmVudFRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgISVDdXJyZW50VGlja2V0OwogICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICRGaWVsZFZhbHVlIGVxICJTbGF2ZU9mOiRDdXJyZW50VGlja2V0e1RpY2tldE51bWJlcn0iOwogICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICRGaWVsZFZhbHVlICYmICRUaWNrZXR7VGlja2V0SUR9IGVxICRDdXJyZW50VGlja2V0e1RpY2tldElEfTsKCiAgICAgICAgICAgICREYXRheyJTbGF2ZU9mOiRDdXJyZW50VGlja2V0e1RpY2tldE51bWJlcn0ifSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdTbGF2ZSBvZiAlcyVzJXM6ICVzJywKICAgICAgICAgICAgICAgICRUaWNrZXRIb29rLAogICAgICAgICAgICAgICAgJFRpY2tldEhvb2tEaXZpZGVyLAogICAgICAgICAgICAgICAgJEN1cnJlbnRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICRDdXJyZW50VGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlRGF0YTsKfQojIC0tLQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VGlja2V0QnVsazo6TWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZAogICAgJFNlbGYtPntNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0gICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ01hc3RlclNsYXZlOjpEeW5hbWljRmllbGQnKSAgICB8fCAnJzsKICAgICRTZWxmLT57TWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWR9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6QWR2YW5jZWRFbmFibGVkJykgfHwgMDsKCiAgICBpZiAoICRTZWxmLT57TWFzdGVyU2xhdmVEeW5hbWljRmllbGR9ICkgewogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkQ29uZmlnfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBOYW1lID0+ICRTZWxmLT57TWFzdGVyU2xhdmVEeW5hbWljRmllbGR9LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgRGlzcGxheSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgdGhlcmUgaXMgbm8gY29uZmlndXJlZCBkeW5hbWljIGZpZWxkIG9yIGlmIGFkdmFuY2VkIG1vZGUgaXMgbm90IGVuYWJsZSwgdGhlcmUgaXMgbm90aGluZyB0byBkbwogICAgcmV0dXJuIGlmICEkU2VsZi0+e01hc3RlclNsYXZlRHluYW1pY0ZpZWxkfTsKICAgIHJldHVybiBpZiAhJFNlbGYtPntNYXN0ZXJTbGF2ZUFkdmFuY2VkRW5hYmxlZH07CgogICAgbXkgJFNlcnZlckVycm9yOwogICAgbXkgJEVycm9yTWVzc2FnZTsKICAgIGlmICggZXhpc3RzICRQYXJhbXtFcnJvcnN9LT57ICRTZWxmLT57RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9IH0gKSB7CiAgICAgICAgJFNlcnZlckVycm9yICA9IDE7CiAgICAgICAgJEVycm9yTWVzc2FnZSA9ICRQYXJhbXtFcnJvcnN9LT57ICRTZWxmLT57RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9IH07CiAgICB9CgogICAgbXkgJFBvc3NpYmxlVmFsdWVzRmlsdGVyID0gJFNlbGYtPl9HZXRNYXN0ZXJTbGF2ZURhdGEoCiAgICAgICAgJVBhcmFtLAogICAgICAgIE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0+ICRTZWxmLT57TWFzdGVyU2xhdmVEeW5hbWljRmllbGR9LAogICAgKTsKCiAgICAjIGdldCBmaWVsZCBIVE1MCiAgICBteSAkRHluYW1pY0ZpZWxkSFRNTCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKS0+RWRpdEZpZWxkUmVuZGVyKAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICRTZWxmLT57RHluYW1pY0ZpZWxkQ29uZmlnfSwKICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgU2VydmVyRXJyb3IgICAgICAgICAgPT4gJFNlcnZlckVycm9yIHx8ICcnLAogICAgICAgIEVycm9yTWVzc2FnZSAgICAgICAgID0+ICRFcnJvck1lc3NhZ2UgfHwgJycsCiAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpLAogICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKSwKICAgICAgICBNYW5kYXRvcnkgICAgICAgICAgICA9PiAwLAogICAgKTsKCiAgICAjIGluZGVudGF0aW9uIGhlcmUgaXMgb24gcHVycG9zZSBzbyB0aGUgSFRNTCB3aWxsIGxvb2sgYWNjb3JkaW5nIHRvIHRoZSBmcmFtZXdvcmsKICAgIG15ICRIVE1MU3RyaW5nID0gPDwiRU9GIjsKICAgICAgICAgICAgICAgICAgICAkRHluYW1pY0ZpZWxkSFRNTC0+e0xhYmVsfQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZEhUTUwtPntGaWVsZH0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CkVPRgoKICAgIHJldHVybiAkSFRNTFN0cmluZzsKfQoKc3ViIFZhbGlkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpZiB0aGVyZSBpcyBubyBjb25maWd1cmVkIGR5bmFtaWMgZmllbGQgb3IgaWYgYWR2YW5jZWQgbW9kZSBpcyBub3QgZW5hYmxlLCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvCiAgICByZXR1cm4gaWYgISRTZWxmLT57TWFzdGVyU2xhdmVEeW5hbWljRmllbGR9OwogICAgcmV0dXJuIGlmICEkU2VsZi0+e01hc3RlclNsYXZlQWR2YW5jZWRFbmFibGVkfTsKCiAgICBteSAkUG9zc2libGVWYWx1ZXNGaWx0ZXIgPSAkU2VsZi0+X0dldE1hc3RlclNsYXZlRGF0YSgKICAgICAgICAlUGFyYW0sCiAgICAgICAgTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgPT4gJFNlbGYtPntNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0sCiAgICApOwoKICAgIG15ICRWYWxpZGF0aW9uUmVzdWx0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpLT5FZGl0RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyAgID0+ICRTZWxmLT57RHluYW1pY0ZpZWxkQ29uZmlnfSwKICAgICAgICBQb3NzaWJsZVZhbHVlc0ZpbHRlciA9PiAkUG9zc2libGVWYWx1ZXNGaWx0ZXIsCiAgICAgICAgUGFyYW1PYmplY3QgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLAogICAgICAgIE1hbmRhdG9yeSAgICAgICAgICAgID0+IDAsCiAgICApOwoKICAgIGlmICggJFZhbGlkYXRpb25SZXN1bHQtPntTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgRXJyb3JLZXkgICA9PiAkU2VsZi0+e0R5bmFtaWNGaWVsZENvbmZpZ30tPntOYW1lfSwKICAgICAgICAgICAgICAgIEVycm9yVmFsdWUgPT4gJFZhbGlkYXRpb25SZXN1bHQtPntFcnJvck1lc3NhZ2V9LAogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBTdG9yZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgaWYgdGhlcmUgaXMgbm8gY29uZmlndXJlZCBkeW5hbWljIGZpZWxkIG9yIGlmIGFkdmFuY2VkIG1vZGUgaXMgbm90IGVuYWJsZSwgdGhlcmUgaXMgbm90aGluZyB0byBkbwogICAgcmV0dXJuIDEgaWYgISRTZWxmLT57TWFzdGVyU2xhdmVEeW5hbWljRmllbGR9OwogICAgcmV0dXJuIDEgaWYgISRTZWxmLT57TWFzdGVyU2xhdmVBZHZhbmNlZEVuYWJsZWR9OwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCiAgICAjIGV4dHJhY3QgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9ybSB0aGUgd2ViIHJlcXVlc3QKICAgIG15ICREeW5hbWljRmllbGRWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFNlbGYtPntEeW5hbWljRmllbGRDb25maWd9LAogICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyksCiAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKSwKICAgICk7CgogICAgIyBzZXQgdGhlIHZhbHVlCiAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFNlbGYtPntEeW5hbWljRmllbGRDb25maWd9LAogICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkVmFsdWUsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9HZXRNYXN0ZXJTbGF2ZURhdGEgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBnZXQgbWFzdGVyIHNsYXZlIGNvbmZpZwogICAgbXkgJFVuc2V0TWFzdGVyU2xhdmUgID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6VW5zZXRNYXN0ZXJTbGF2ZScpICB8fCAwOwogICAgbXkgJFVwZGF0ZU1hc3RlclNsYXZlID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6VXBkYXRlTWFzdGVyU2xhdmUnKSB8fCAwOwoKICAgIG15ICVEYXRhID0gKAogICAgICAgICcnICAgICA9PiAnLScsCiAgICAgICAgTWFzdGVyID0+ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgnTmV3IE1hc3RlciBUaWNrZXQnKSwKICAgICk7CgogICAgaWYgKCRVbnNldE1hc3RlclNsYXZlKSB7CiAgICAgICAgJERhdGF7VW5zZXRNYXN0ZXJ9ID0gVHJhbnNsYXRhYmxlKCdVbnNldCBNYXN0ZXIgVGlja2V0cycpOwogICAgICAgICREYXRhe1Vuc2V0U2xhdmV9ICA9IFRyYW5zbGF0YWJsZSgnVW5zZXQgU2xhdmUgVGlja2V0cycpOwogICAgfQoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIGlmICgkVXBkYXRlTWFzdGVyU2xhdmUpIHsKCiAgICAgICAgbXkgQFRpY2tldElEcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICAgICAgUmVzdWx0ID0+ICdBUlJBWScsCgogICAgICAgICAgICAjIG1hc3RlciBzbGF2ZSBkeW5hbWljIGZpZWxkCiAgICAgICAgICAgICdEeW5hbWljRmllbGRfJyAuICRQYXJhbXtNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0gPT4gewogICAgICAgICAgICAgICAgRXF1YWxzID0+ICdNYXN0ZXInLAogICAgICAgICAgICB9LAoKICAgICAgICAgICAgU3RhdGVUeXBlICA9PiAnT3BlbicsCiAgICAgICAgICAgIExpbWl0ICAgICAgPT4gNjAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gJ3JvJywKICAgICAgICApOwoKICAgICAgICBteSAkVGlja2V0SG9vayAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6SG9vaycpOwogICAgICAgIG15ICRUaWNrZXRIb29rRGl2aWRlciA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rRGl2aWRlcicpOwoKICAgICAgICBUSUNLRVRJRDoKICAgICAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CgogICAgICAgICAgICAjIGdldCBlYWNoIHRpY2tldCBmcm9tIHRoZSBzZWFyY2ggcmVzdWx0cwogICAgICAgICAgICBteSAlQ3VycmVudFRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICElQ3VycmVudFRpY2tldDsKCiAgICAgICAgICAgICREYXRheyJTbGF2ZU9mOiRDdXJyZW50VGlja2V0e1RpY2tldE51bWJlcn0ifSA9ICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICdTbGF2ZSBvZiAlcyVzJXM6ICVzJywKICAgICAgICAgICAgICAgICRUaWNrZXRIb29rLAogICAgICAgICAgICAgICAgJFRpY2tldEhvb2tEaXZpZGVyLAogICAgICAgICAgICAgICAgJEN1cnJlbnRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICRDdXJyZW50VGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gXCVEYXRhOwoKfQoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkludmlzaWJsZVRleHQiPgogICAgICAgIFslIFRyYW5zbGF0ZSgiRHluYW1pYyBGaWVsZHMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoRGF0YS5PYmplY3RUeXBlTmFtZSkgfCBodG1sICVdOgogICAgICAgIFslIFVTRSBUaXRsZSA9IFN0cmluZyhEYXRhLkJyZWFkY3J1bWJUZXh0KSAlXQogICAgICAgIFslIFRpdGxlIHwgaHRtbCAlXQogICAgPC9oMT4KCiAgICBbJSBCcmVhZGNydW1iUGF0aCA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ0R5bmFtaWMgRmllbGRzIE1hbmFnZW1lbnQnKSwKICAgICAgICAgICAgICAgIExpbmsgPT4gJ0FkbWluRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgfSwKICAgICAgICBdCiAgICAlXQoKICAgIFslIFVTRSBCcmVhZGNydW1iTmFtZSA9IFN0cmluZyhUcmFuc2xhdGUoRGF0YS5PYmplY3RUeXBlTmFtZSkpICVdCgogICAgWyUgU1dJVENIIERhdGEuTW9kZSAlXQogICAgICAgIFslIENBU0UgJ0FkZCcgJV0KICAgICAgICAgICAgWyUgQnJlYWRjcnVtYlBhdGgucHVzaCh7IE5hbWUgPT4gQnJlYWRjcnVtYk5hbWUuYXBwZW5kKCAnOiAnLCBUaXRsZSApIH0pICVdCiAgICAgICAgWyUgQ0FTRSAnQ2hhbmdlJyAlXQogICAgICAgICAgICBbJSBCcmVhZGNydW1iUGF0aC5wdXNoKHsgTmFtZSA9PiBCcmVhZGNydW1iTmFtZS5hcHBlbmQoICc6ICcsIFRpdGxlLCAnIC0gJywgRGF0YS5OYW1lICkgfSkgJV0KICAgIFslIEVORCAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWRtaW5EeW5hbWljRmllbGQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIGJhY2sgdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IkFkbWluRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUiIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlslIERhdGEuTW9kZSB8IGh0bWwgJV1BY3Rpb24iIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik9iamVjdFR5cGUiIHZhbHVlPSJbJSBEYXRhLk9iamVjdFR5cGUgfCBodG1sICVdIiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJGaWVsZFR5cGUiIHZhbHVlPSJbJSBEYXRhLkZpZWxkVHlwZSB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IklEIiB2YWx1ZT0iWyUgRGF0YS5JRCB8IGh0bWwgJV0iIC8+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJHZW5lcmFsIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTGF5b3V0R3JpZCBDb2x1bW5zV2l0aFNwYWNpbmciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTaXplMW9mMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmFtZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5hbWUiIGNsYXNzPSJXNTBwYyBbJSBEYXRhLk5hbWVTZXJ2ZXJFcnJvciB8IGh0bWwgJV0gWyUgRGF0YS5TaG93V2FybmluZyB8IGh0bWwgJV0gIFZhbGlkYXRlX0FscGhhbnVtZXJpYyIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIyMDAiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBuYW1lPSJOYW1lIiBbJSBEYXRhLlJlYWRvbmx5SW50ZXJuYWxGaWVsZCB8IGh0bWwgJV0gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLCBhbmQgdGhlIHZhbHVlIHNob3VsZCBiZSBhbHBoYWJldGljIGFuZCBudW1lcmljIGNoYXJhY3RlcnMgb25seS4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZShEYXRhLk5hbWVTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiTXVzdCBiZSB1bmlxdWUgYW5kIG9ubHkgYWNjZXB0IGFscGhhYmV0aWMgYW5kIG51bWVyaWMgY2hhcmFjdGVycy4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJXYXJuaW5nIEhpZGRlbiI+WyUgVHJhbnNsYXRlKCJDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgcmVxdWlyZSBtYW51YWwgY2hhbmdlcyBpbiB0aGUgc3lzdGVtLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkxhYmVsIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiBbJSBUcmFuc2xhdGUoIkxhYmVsIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkxhYmVsIiBjbGFzcz0iVzUwcGMgWyUgRGF0YS5MYWJlbFNlcnZlckVycm9yIHwgaHRtbCAlXSBWYWxpZGF0ZV9SZXF1aXJlZCIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIyMDAiIHZhbHVlPSJbJSBEYXRhLkxhYmVsIHwgaHRtbCAlXSIgbmFtZT0iTGFiZWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTGFiZWxFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxhYmVsU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbFNlcnZlckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRoZSBuYW1lIHRvIGJlIHNob3duIG9uIHRoZSBzY3JlZW5zIHdoZXJlIHRoZSBmaWVsZCBpcyBhY3RpdmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iRmllbGRPcmRlciI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNsYXRlKCJGaWVsZCBvcmRlciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5EeW5hbWljRmllbGRPcmRlclN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmllbGRPcmRlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIG51bWVyaWMuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJGaWVsZE9yZGVyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5GaWVsZE9yZGVyU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5bJSBUcmFuc2xhdGUoIlRoaXMgaXMgdGhlIG9yZGVyIGluIHdoaWNoIHRoaXMgZmllbGQgd2lsbCBiZSBzaG93biBvbiB0aGUgc2NyZWVucyB3aGVyZSBpcyBhY3RpdmUuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTaXplMW9mMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZGl0eVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkZpZWxkVHlwZU5hbWUiPlslIFRyYW5zbGF0ZSgiRmllbGQgdHlwZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJGaWVsZFR5cGVOYW1lIiByZWFkb25seSBjbGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKERhdGEuRmllbGRUeXBlTmFtZSkgfCBodG1sICVdIiBuYW1lPSJGaWVsZFR5cGVOYW1lIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iT2JqZWN0VHlwZU5hbWUiPlslIFRyYW5zbGF0ZSgiT2JqZWN0IHR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iT2JqZWN0VHlwZU5hbWUiIHJlYWRvbmx5IGNsYXNzPSJXNTBwYyIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIyMDAiIHZhbHVlPSJbJSBUcmFuc2xhdGUoRGF0YS5PYmplY3RUeXBlTmFtZSkgfCBodG1sICVdIiBuYW1lPSJPYmplY3RUeXBlTmFtZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnRlcm5hbEZpZWxkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJJbnRlcm5hbEZpZWxkIj5bJSBUcmFuc2xhdGUoIkludGVybmFsIGZpZWxkIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IkludGVybmFsRmllbGQiIHJlYWRvbmx5IGNsYXNzPSJXNTBwYyIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIxIiB2YWx1ZT0iWyUgRGF0YS5JbnRlcm5hbEZpZWxkIHwgaHRtbCAlXSIgbmFtZT0iSW50ZXJuYWxGaWVsZCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcHJvdGVjdGVkIGFuZCBjYW4ndCBiZSBkZWxldGVkLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkludGVybmFsRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWRtaW5EeW5hbWljRmllbGQiPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgJG9yaWdpbjogb3RycyAtIDgyMDdkMGY2ODFhZGNkZWI1YzFiNDk3YWM1NDdhMWQ5NzQ5ODM4ZDUgLSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FnZW50VGlja2V0QWN0aW9uQ29tbW9uLnR0CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCiMgLS0tCiMgT1RSU01hc3RlclNsYXZlCiMgLS0tCgojIFRoaXMgbW9kdWxlIHVzZXMgQWdlbnRUaWNrZXRBY3Rpb25Db21tb24gYXMgYSBiYXNlLCBmb3IgZWFzeSB1cGRhdGUgYW5kIGZyYW1ld29yayBjb21wYXRpYmlsaXR5CiMgc3BlY2lhbCBtYXJrZXJzIGhhcyBiZWVuIHNldCBhbG9uZyB0aGUgZmlsZSB0byBlYXN5IHNwb3QgdGhlIGRpZmZlcmVuY2VzIGludHJvZHVjZWQgYnkKIyBPVFJTTWFzdGVyU2xhdmUgcGFja2FnZQojIC0tLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiUHJvcGVydGllcyIpICVdCgo8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iY29tcG9zZSIgaWQ9IkNvbXBvc2UiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlN0b3JlIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJUaWNrZXRJRCIgdmFsdWU9IlslIERhdGEuVGlja2V0SUQgfCBodG1sICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZXBseVRvQXJ0aWNsZSIgdmFsdWU9IlslIERhdGEuUmVwbHlUb0FydGljbGUgfCBodG1sICVdIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJFeHBhbmQiIGlkPSJFeHBhbmQiIHZhbHVlPSIiLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkZvcm1JRCIgdmFsdWU9IlslIERhdGEuRm9ybUlEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybURyYWZ0VGl0bGUiIHZhbHVlPSJbJSBEYXRhLkZvcm1EcmFmdFRpdGxlIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybURyYWZ0SUQiIHZhbHVlPSJbJSBEYXRhLkZvcm1EcmFmdElEIHwgaHRtbCAlXSIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRm9ybURyYWZ0QWN0aW9uIiBpZD0iRm9ybURyYWZ0QWN0aW9uIiAvPgoKICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgxPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZ2VudFRpY2tldEZyZWVUZXh0IikgJV0KWyUgVHJhbnNsYXRlKCJDaGFuZ2UgRnJlZSBUZXh0IG9mICVzJXMlcyIsIENvbmZpZygnVGlja2V0OjpIb29rJyksIENvbmZpZygnVGlja2V0OjpIb29rRGl2aWRlcicpLCBEYXRhLlRpY2tldE51bWJlcikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJBZ2VudFRpY2tldEZyZWVUZXh0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWdlbnRUaWNrZXRPd25lciIpICVdClslIFRyYW5zbGF0ZSgiQ2hhbmdlIE93bmVyIG9mICVzJXMlcyIsIENvbmZpZygnVGlja2V0OjpIb29rJyksIENvbmZpZygnVGlja2V0OjpIb29rRGl2aWRlcicpLCBEYXRhLlRpY2tldE51bWJlcikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJBZ2VudFRpY2tldE93bmVyIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWdlbnRUaWNrZXRDbG9zZSIpICVdClslIFRyYW5zbGF0ZSgiQ2xvc2UgJXMlcyVzIiwgQ29uZmlnKCdUaWNrZXQ6Okhvb2snKSwgQ29uZmlnKCdUaWNrZXQ6Okhvb2tEaXZpZGVyJyksIERhdGEuVGlja2V0TnVtYmVyKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFnZW50VGlja2V0Q2xvc2UiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZ2VudFRpY2tldE5vdGUiKSAlXQpbJSBUcmFuc2xhdGUoIkFkZCBOb3RlIHRvICVzJXMlcyIsIENvbmZpZygnVGlja2V0OjpIb29rJyksIENvbmZpZygnVGlja2V0OjpIb29rRGl2aWRlcicpLCBEYXRhLlRpY2tldE51bWJlcikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJBZ2VudFRpY2tldE5vdGUiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZ2VudFRpY2tldFBlbmRpbmciKSAlXQpbJSBUcmFuc2xhdGUoIlNldCBQZW5kaW5nIFRpbWUgZm9yICVzJXMlcyIsIENvbmZpZygnVGlja2V0OjpIb29rJyksIENvbmZpZygnVGlja2V0OjpIb29rRGl2aWRlcicpLCBEYXRhLlRpY2tldE51bWJlcikgfCBodG1sICVdClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJBZ2VudFRpY2tldFBlbmRpbmciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZ2VudFRpY2tldFByaW9yaXR5IikgJV0KWyUgVHJhbnNsYXRlKCJDaGFuZ2UgUHJpb3JpdHkgb2YgJXMlcyVzIiwgQ29uZmlnKCdUaWNrZXQ6Okhvb2snKSwgQ29uZmlnKCdUaWNrZXQ6Okhvb2tEaXZpZGVyJyksIERhdGEuVGlja2V0TnVtYmVyKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFnZW50VGlja2V0UHJpb3JpdHkiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZ2VudFRpY2tldFJlc3BvbnNpYmxlIikgJV0KWyUgVHJhbnNsYXRlKCJDaGFuZ2UgUmVzcG9uc2libGUgb2YgJXMlcyVzIiwgQ29uZmlnKCdUaWNrZXQ6Okhvb2snKSwgQ29uZmlnKCdUaWNrZXQ6Okhvb2tEaXZpZGVyJyksIERhdGEuVGlja2V0TnVtYmVyKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFnZW50VGlja2V0UmVzcG9uc2libGUiKSAlXQojIC0tLQojIE9UUlNNYXN0ZXJTbGF2ZQojIC0tLQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJIZWFkZXJBZ2VudFRpY2tldE1hc3RlclNsYXZlIikgJV0KWyUgVHJhbnNsYXRlKCJNYW5hZ2UgTWFzdGVyL1NsYXZlIHN0YXR1cyBmb3IgJXMlcyVzIiwgQ29uZmlnKCdUaWNrZXQ6Okhvb2snKSwgQ29uZmlnKCdUaWNrZXQ6Okhvb2tEaXZpZGVyJyksIERhdGEuVGlja2V0TnVtYmVyKSB8IGh0bWwgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFnZW50VGlja2V0TWFzdGVyU2xhdmUiKSAlXQojIC0tLQogICAgICAgICAgICAgICAgICZtZGFzaDsgWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0KICAgICAgICAgICAgPC9oMT4KICAgICAgICAgICAgPHAgY2xhc3M9IkFzdGVyaXNrRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiQWxsIGZpZWxkcyBtYXJrZWQgd2l0aCBhbiBhc3RlcmlzayAoKikgYXJlIG1hbmRhdG9yeS4iKSB8IGh0bWwgJV08L3A+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaWNrZXRCYWNrIikgJV0KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+WyUgVHJhbnNsYXRlKCJDYW5jZWwgJiBjbG9zZSIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgPC9wPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0QmFjayIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlByb3BlcnRpZXNMb2NrIikgJV0KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoZSB0aWNrZXQgaGFzIGJlZW4gbG9ja2VkIikgfCBodG1sICVdLgogICAgICAgICAgICAgICAgPGEgY2xhc3M9IlVuZG9DbG9zZVBvcHVwIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRUaWNrZXRMb2NrO1N1YmFjdGlvbj1VbmxvY2s7VGlja2V0SUQ9WyUgRGF0YS5UaWNrZXRJRCAlXVslIElGIERhdGEuUHJldmlvdXNPd25lciAlXTtQcmV2aW91c093bmVyPVslIERhdGEuUHJldmlvdXNPd25lciAlXVslIEVORCAlXTtbJSBFbnYoIkNoYWxsZW5nZVRva2VuUGFyYW0iKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiVW5kbyAmIGNsb3NlIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcD4KWyUgUmVuZGVyQmxvY2tFbmQoIlByb3BlcnRpZXNMb2NrIikgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIFslIElOQ0xVREUgIkZvcm1FbGVtZW50cy9EcmFmdE5vdGlmaWNhdGlvbnMudHQiICVdClslIFJlbmRlckJsb2NrU3RhcnQoIldpZGdldFRpY2tldEFjdGlvbnMiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRXhwYW5kZWQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiVG9nZ2xlIHRoaXMgd2lkZ2V0IikgfCBodG1sICVdIj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJUaWNrZXQgU2V0dGluZ3MiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGl0bGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUaXRsZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIlRpdGxlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iVGl0bGUiIG5hbWU9IlRpdGxlIiB2YWx1ZT0iWyUgRGF0YS5UaXRsZSB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLlRpdGxlSW52YWxpZCB8IGh0bWwgJV0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaXRsZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpdGxlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlR5cGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUeXBlSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5UeXBlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVHlwZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVHlwZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVHlwZSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJRdWV1ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUXVldWVNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5ld1F1ZXVlSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJRdWV1ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOZXdRdWV1ZUlEIj5bJSBUcmFuc2xhdGUoIlF1ZXVlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlF1ZXVlc1N0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUXVldWVNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOZXdRdWV1ZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOZXdRdWV1ZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlF1ZXVlIGludmFsaWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUXVldWUiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VydmljZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU2VydmljZU1hbmRhdG9yeSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iU2VydmljZUlEIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTZXJ2aWNlSUQiPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TZXJ2aWNlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5TZXJ2aWNlTWFuZGF0b3J5ICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU2VydmljZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTZXJ2aWNlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiU2VydmljZSBpbnZhbGlkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU2VydmljZU1hbmRhdG9yeSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlNlcnZpY2VJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TZXJ2aWNlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU2VydmljZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU2VydmljZUlEU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTZXJ2aWNlTWFuZGF0b3J5IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNMQSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU0xBTWFuZGF0b3J5ICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJTTEFJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgTGV2ZWwgQWdyZWVtZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNMQUlEIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgTGV2ZWwgQWdyZWVtZW50IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNMQVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU0xBTWFuZGF0b3J5ICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU0xBSURFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU0xBSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiU0xBIGludmFsaWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEEiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiU0xBTWFuZGF0b3J5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iU0xBSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIExldmVsIEFncmVlbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNMQVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlNMQUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU0xBSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiU0xBIGludmFsaWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBTWFuZGF0b3J5IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIk93bmVyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgRGF0YS5Pd25lck1hbmRhdG9yeSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmV3T3duZXJJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIk5ldyBPd25lciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOZXdPd25lcklEIj5bJSBUcmFuc2xhdGUoIk5ldyBPd25lciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Pd25lclN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuT3duZXJNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOZXdPd25lcklERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSBzZXQgYSBuZXcgb3duZXIhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmV3T3duZXJJRFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJPd25lciBpbnZhbGlkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk93bmVyIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIk93bmVyTWFuZGF0b3J5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmV3T3duZXJJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIk5ldyBPd25lciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk93bmVyU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmV3T3duZXJJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugc2V0IGEgbmV3IG93bmVyISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5ld093bmVySURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiT3duZXIgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPd25lck1hbmRhdG9yeSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSZXNwb25zaWJsZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUmVzcG9uc2libGVNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5ld1Jlc3BvbnNpYmxlSUQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJOZXcgUmVzcG9uc2libGUiKSB8IGh0bWwgJV06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOZXdSZXNwb25zaWJsZUlEIj5bJSBUcmFuc2xhdGUoIk5ldyBSZXNwb25zaWJsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5SZXNwb25zaWJsZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuUmVzcG9uc2libGVNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOZXdSZXNwb25zaWJsZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSBzZXQgYSBuZXcgcmVzcG9uc2libGUhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5ld1Jlc3BvbnNpYmxlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUmVzcG9uc2libGUgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlJlc3BvbnNpYmxlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlJlc3BvbnNpYmxlTWFuZGF0b3J5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmV3UmVzcG9uc2libGVJRCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIk5ldyBSZXNwb25zaWJsZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlJlc3BvbnNpYmxlU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmV3UmVzcG9uc2libGVJREVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugc2V0IGEgbmV3IHJlc3BvbnNpYmxlISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5ld1Jlc3BvbnNpYmxlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUmVzcG9uc2libGUgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJSZXNwb25zaWJsZU1hbmRhdG9yeSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTdGF0ZSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU3RhdGVNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5ld1N0YXRlSUQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJOZXh0IHN0YXRlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5ld1N0YXRlSUQiPlslIFRyYW5zbGF0ZSgiTmV4dCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5TdGF0ZVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIERhdGEuU3RhdGVNYW5kYXRvcnkgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOZXdTdGF0ZUlERXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5ld1N0YXRlSURTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiU3RhdGUgaW52YWxpZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlN0YXRlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlN0YXRlUGVuZGluZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlBlbmRpbmcgZGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkRhdGVTdHJpbmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRheVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJEYXRlIGludmFsaWQhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iSG91clNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJEYXRlIGludmFsaWQhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiRm9yIGFsbCBwZW5kaW5nKiBzdGF0ZXMuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU3RhdGVQZW5kaW5nIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlByaW9yaXR5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTmV3UHJpb3JpdHlJRCI+WyUgVHJhbnNsYXRlKCJQcmlvcml0eSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Qcmlvcml0eVN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlByaW9yaXR5IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldFR5cGVEeW5hbWljRmllbGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGlja2V0VHlwZUR5bmFtaWNGaWVsZCIpICVdCgojIEV4YW1wbGUgb2YgaG93IHRvIHVzZSBmaXhlZCBkeW5hbWljIGZpZWxkIGJsb2NrcyBmb3IgY3VzdG9taXphdGlvbnMuIEJsb2NrIGJlbG93IGlzIGZvciBmaWVsZHMgb2YgdHlwZSAnVGlja2V0Jy4KIyAgIE5PVEU6IEZpZWxkMSBhbmQgRmllbGQyIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGR5bmFtaWMgZmllbGRzIGFuZCBoYXZlIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIGFjdHVhbCBmaWVsZCBuYW1lcy4KI1slIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldFR5cGVEeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldFR5cGVEeW5hbWljRmllbGRfRmllbGQyIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldFR5cGVEeW5hbWljRmllbGRfRmllbGQyIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkxhYmVsICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIlRpY2tldFR5cGVEeW5hbWljRmllbGRfRmllbGQyIikgJV0KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiV2lkZ2V0VGlja2V0QWN0aW9ucyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJXaWRnZXRBcnRpY2xlIikgJV0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBbJSBEYXRhLldpZGdldFN0YXR1cyB8IGh0bWwgJV0iIGlkPSJXaWRnZXRBcnRpY2xlIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlRvZ2dsZSB0aGlzIHdpZGdldCIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBZGQgQXJ0aWNsZSIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KWyUgSUYgRGF0YS5XaWRnZXRTdGF0dXMgPT0gJ0V4cGFuZGVkJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9IkNyZWF0ZUFydGljbGUiIG5hbWU9IkNyZWF0ZUFydGljbGUiIHZhbHVlPSIxIiAvPgpbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDcmVhdGVBcnRpY2xlIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZSBhbiBBcnRpY2xlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iQ3JlYXRlQXJ0aWNsZSIgbmFtZT0iQ3JlYXRlQXJ0aWNsZSIgdmFsdWU9IjEiIFslIElGIERhdGEuQ3JlYXRlQXJ0aWNsZSAlXSBjaGVja2VkPSJjaGVja2VkIlslIEVORCAlXSAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmZvcm1BZGRpdGlvbmFsQWdlbnRzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9ybUFnZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkluZm9ybVVzZXJJRCI+WyUgVHJhbnNsYXRlKCJJbmZvcm0gYWdlbnRzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb3JtQWdlbnQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnZvbHZlZEFnZW50IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ikludm9sdmVkVXNlcklEIj5bJSBUcmFuc2xhdGUoIkluZm9ybSBpbnZvbHZlZCBhZ2VudHMiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuSW52b2x2ZWRBZ2VudFN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW52b2x2ZWRBZ2VudCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIkhlcmUgeW91IGNhbiBzZWxlY3QgYWRkaXRpb25hbCBhZ2VudHMgd2hpY2ggc2hvdWxkIHJlY2VpdmUgYSBub3RpZmljYXRpb24gcmVnYXJkaW5nIHRoZSBuZXcgYXJ0aWNsZS4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KWyUgUmVuZGVyQmxvY2tFbmQoIkluZm9ybUFkZGl0aW9uYWxBZ2VudHMiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbmZvcm1BZ2VudHNXaXRob3V0U2VsZWN0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJUZXh0IHdpbGwgYWxzbyBiZSByZWNlaXZlZCBieSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlVzZXJMaXN0V2l0aG91dFNlbGVjdGlvbiIgdmFsdWU9IlslIERhdGEuVXNlckxpc3RXaXRob3V0U2VsZWN0aW9uICB8IGh0bWwgJV0iIC8+ClslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9ybUFnZW50c1dpdGhvdXRTZWxlY3Rpb25TaW5nbGVVc2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT0iWyUgRGF0YS5Vc2VyRW1haWwgJV0iPlslIERhdGEuVXNlckZ1bGxuYW1lICVdPC9zcGFuPlslIFJlbmRlckJsb2NrU3RhcnQoIkluZm9ybUFnZW50c1dpdGhvdXRTZWxlY3Rpb25TaW5nbGVVc2VyU2VwYXJhdG9yIikgJV0sWyUgUmVuZGVyQmxvY2tFbmQoIkluZm9ybUFnZW50c1dpdGhvdXRTZWxlY3Rpb25TaW5nbGVVc2VyU2VwYXJhdG9yIikgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkluZm9ybUFnZW50c1dpdGhvdXRTZWxlY3Rpb25TaW5nbGVVc2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5mb3JtQWdlbnRzV2l0aG91dFNlbGVjdGlvbiIpICVdCgogICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU3ViamVjdExhYmVsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlN1YmplY3QiPlslIFRyYW5zbGF0ZSgiU3ViamVjdCIpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja0VuZCgiU3ViamVjdExhYmVsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiU3ViamVjdExhYmVsTWFuZGF0b3J5IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlN1YmplY3QiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJTdWJqZWN0IikgfCBodG1sICVdOjwvbGFiZWw+ClslIFJlbmRlckJsb2NrRW5kKCJTdWJqZWN0TGFiZWxNYW5kYXRvcnkiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iU3ViamVjdCIgbmFtZT0iU3ViamVjdCIgdmFsdWU9IlslIERhdGEuU3ViamVjdCB8IGh0bWwgJV0iIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZSBbJSBEYXRhLlN1YmplY3RJbnZhbGlkICVdIFslIERhdGEuU3ViamVjdFJlcXVpcmVkICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3ViamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTdWJqZWN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlRpY2tldE9wdGlvbnMiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiT3B0aW9ucyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgoKPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1RpY2tldE9wdGlvbnNCZWdpbiAtLT4KPCEtLSBPdXRwdXRGaWx0ZXJIb29rX1RpY2tldE9wdGlvbnNFbmQgLS0+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUaWNrZXRPcHRpb25zIikgJV0KCjwhLS0gT3V0cHV0RmlsdGVySG9va19Ob1RpY2tldE9wdGlvbnNGYWxsYmFjayAtLT4KClslIFJlbmRlckJsb2NrU3RhcnQoIlN0YW5kYXJkVGVtcGxhdGUiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU3RhbmRhcmRUZW1wbGF0ZUlEIj5bJSBUcmFuc2xhdGUoIlRleHQgVGVtcGxhdGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlN0YW5kYXJkVGVtcGxhdGVTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiU2V0dGluZyBhIHRlbXBsYXRlIHdpbGwgb3ZlcndyaXRlIGFueSB0ZXh0IG9yIGF0dGFjaG1lbnQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTdGFuZGFyZFRlbXBsYXRlIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlJpY2hUZXh0TGFiZWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUmljaFRleHQiPlslIFRyYW5zbGF0ZSgiVGV4dCIpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja0VuZCgiUmljaFRleHRMYWJlbCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlJpY2hUZXh0TGFiZWxNYW5kYXRvcnkiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iUmljaFRleHQiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJUZXh0IikgfCBodG1sICVdOjwvbGFiZWw+ClslIFJlbmRlckJsb2NrRW5kKCJSaWNoVGV4dExhYmVsTWFuZGF0b3J5IikgJV0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dEZpZWxkIiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJSaWNoVGV4dCIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlIFslIERhdGEuQm9keUludmFsaWQgJV0gWyUgRGF0YS5Cb2R5UmVxdWlyZWQgJV0iIG5hbWU9IkJvZHkiIHJvd3M9IjE1IiBjb2xzPSJbJSBDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSIpICVdIj5bJSBEYXRhLkJvZHkgfCBodG1sICVdPC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSaWNoVGV4dFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIkF0dGFjaG1lbnRzIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+ClslIElOQ0xVREUgIkZvcm1FbGVtZW50cy9BdHRhY2htZW50TGlzdC50dCIgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IklzVmlzaWJsZUZvckN1c3RvbWVyIj5bJSBUcmFuc2xhdGUoIklzIHZpc2libGUgZm9yIGN1c3RvbWVyIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJJc1Zpc2libGVGb3JDdXN0b21lciIgaWQ9IklzVmlzaWJsZUZvckN1c3RvbWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiBEYXRhLklzVmlzaWJsZUZvckN1c3RvbWVyICVdY2hlY2tlZD0iY2hlY2tlZCIgWyUgRU5EICVdLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZVVuaXRzTGFiZWwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVGltZVVuaXRzIj5bJSBUcmFuc2xhdGUoIlRpbWUgdW5pdHMiKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKENvbmZpZygiVGlja2V0OjpGcm9udGVuZDo6VGltZVVuaXRzIikpIHwgaHRtbCAlXTo8L2xhYmVsPgpbJSBSZW5kZXJCbG9ja0VuZCgiVGltZVVuaXRzTGFiZWwiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUaW1lVW5pdHNMYWJlbE1hbmRhdG9yeSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUaW1lVW5pdHMiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJUaW1lIHVuaXRzIikgfCBodG1sICVdIFslIFRyYW5zbGF0ZShDb25maWcoIlRpY2tldDo6RnJvbnRlbmQ6OlRpbWVVbml0cyIpKSB8IGh0bWwgJV06PC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVVbml0c0xhYmVsTWFuZGF0b3J5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGltZVVuaXRzIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGltZVVuaXRzIiBpZD0iVGltZVVuaXRzIiB2YWx1ZT0iWyUgRGF0YS5UaW1lVW5pdHMgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfVGltZVVuaXRzIFslIERhdGEuVGltZVVuaXRzUmVxdWlyZWQgfCBodG1sICVdIFslIERhdGEuVGltZVVuaXRzSW52YWxpZCB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaW1lVW5pdHNFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiSW52YWxpZCB0aW1lISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUaW1lVW5pdHNTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlRpbWVVbml0cyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaWVsZCAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBcnRpY2xlVHlwZUR5bmFtaWNGaWVsZEVycm9yIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRHluYW1pY0ZpZWxkX1slIERhdGEuTmFtZSAlXUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVUeXBlRHluYW1pY0ZpZWxkRXJyb3IiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZVR5cGVEeW5hbWljRmllbGQiKSAlXQoKIyBFeGFtcGxlIG9mIGhvdyB0byB1c2UgZml4ZWQgZHluYW1pYyBmaWVsZCBibG9ja3MgZm9yIGN1c3RvbWl6YXRpb25zLiBCbG9jayBiZWxvdyBpcyBmb3IgZmllbGRzIG9mIHR5cGUgJ0FydGljbGUnLgojICAgTk9URTogRmllbGQxIGFuZCBGaWVsZDIgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZHluYW1pYyBmaWVsZHMgYW5kIGhhdmUgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgYWN0dWFsIGZpZWxkIG5hbWVzLgojWyUgUmVuZGVyQmxvY2tTdGFydCgiQXJ0aWNsZVR5cGVEeW5hbWljRmllbGRfRmllbGQxIikgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSb3cgUm93X0R5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgfCBodG1sICVdIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5MYWJlbCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuRmllbGQgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgKERhdGEuTWFuZGF0b3J5VG9vbHRpcCkgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkR5bmFtaWNGaWVsZF9bJSBEYXRhLk5hbWUgJV1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiNbJSBSZW5kZXJCbG9ja0VuZCgiQXJ0aWNsZVR5cGVEeW5hbWljRmllbGRfRmllbGQxIikgJV0KI1slIFJlbmRlckJsb2NrU3RhcnQoIkFydGljbGVUeXBlRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUm93IFJvd19EeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGFiZWwgJV0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkZpZWxkICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIChEYXRhLk1hbmRhdG9yeVRvb2x0aXApICVdCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJEeW5hbWljRmllbGRfWyUgRGF0YS5OYW1lICVdRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgojWyUgUmVuZGVyQmxvY2tFbmQoIkFydGljbGVUeXBlRHluYW1pY0ZpZWxkX0ZpZWxkMiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIldpZGdldEFydGljbGUiKSAlXQoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJzdWJtaXRSaWNoVGV4dCIgYWNjZXNza2V5PSJnIiB0aXRsZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0gKGcpIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNoZWNrLXNxdWFyZS1vIj48L2k+IFslIFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICBbJSBJTkNMVURFICJGb3JtRWxlbWVudHMvRHJhZnRCdXR0b25zLnR0IiAlXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZm9ybT4KWyUgUmVuZGVyQmxvY2tFbmQoIlByb3BlcnRpZXMiKSAlXQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpEcml2ZXI6Ok1hc3RlclNsYXZlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHBhcmVudCBxdyhLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpEcml2ZXI6OkJhc2VTZWxlY3QpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6TGFuZ3VhZ2UnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpEcml2ZXI6Ok1hc3RlclNsYXZlCgo9aGVhZDEgU1lOT1BTSVMKCkR5bmFtaWNGaWVsZHMgTWFzdGVyU2xhdmUgRHJpdmVyIGRlbGVnYXRlCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgcHVibGljIGludGVyZmFjZSBvZiBMPEtlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQ+LgpQbGVhc2UgbG9vayB0aGVyZSBmb3IgYSBkZXRhaWxlZCByZWZlcmVuY2Ugb2YgdGhlIGZ1bmN0aW9ucy4KCj1oZWFkMiBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZC0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IGZpZWxkIGJlaGF2aW9ycwogICAgJFNlbGYtPntCZWhhdmlvcnN9ID0gewogICAgICAgICdJc0FDTFJlZHVjaWJsZScgICAgICAgICAgICAgICA9PiAwLAogICAgICAgICdJc05vdGlmaWNhdGlvbkV2ZW50Q29uZGl0aW9uJyA9PiAxLAogICAgICAgICdJc1NvcnRhYmxlJyAgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICdJc0ZpbHRyYWJsZScgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICdJc1N0YXRzQ29uZGl0aW9uJyAgICAgICAgICAgICA9PiAxLAogICAgICAgICdJc0N1c3RvbWVySW50ZXJmYWNlQ2FwYWJsZScgICA9PiAwLAogICAgfTsKCiAgICAjIGdldCB0aGUgRHluYW1pYyBGaWVsZCBCYWNrZW5kIGN1c3RvbSBleHRlbnNpb25zCiAgICBteSAkRHluYW1pY0ZpZWxkRHJpdmVyRXh0ZW5zaW9ucwogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdEeW5hbWljRmllbGRzOjpFeHRlbnNpb246OkRyaXZlcjo6TWFzdGVyU2xhdmUnKTsKCiAgICBFWFRFTlNJT046CiAgICBmb3IgbXkgJEV4dGVuc2lvbktleSAoIHNvcnQga2V5cyAleyREeW5hbWljRmllbGREcml2ZXJFeHRlbnNpb25zfSApIHsKCiAgICAgICAgIyBza2lwIGludmFsaWQgZXh0ZW5zaW9ucwogICAgICAgIG5leHQgRVhURU5TSU9OIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggJER5bmFtaWNGaWVsZERyaXZlckV4dGVuc2lvbnMtPnskRXh0ZW5zaW9uS2V5fSApOwoKICAgICAgICAjIGNyZWF0ZSBhIGV4dGVuc2lvbiBjb25maWcgc2hvcnRjdXQKICAgICAgICBteSAkRXh0ZW5zaW9uID0gJER5bmFtaWNGaWVsZERyaXZlckV4dGVuc2lvbnMtPnskRXh0ZW5zaW9uS2V5fTsKCiAgICAgICAgIyBjaGVjayBpZiBleHRlbnNpb24gaGFzIGEgbmV3IG1vZHVsZQogICAgICAgIGlmICggJEV4dGVuc2lvbi0+e01vZHVsZX0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGlmIG1vZHVsZSBjYW4gYmUgbG9hZGVkCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TWFpbicpLT5SZXF1aXJlQmFzZUNsYXNzKCAkRXh0ZW5zaW9uLT57TW9kdWxlfSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRpZSAiQ2FuJ3QgbG9hZCBkeW5hbWljIGZpZWxkcyBiYWNrZW5kIG1vZHVsZSIKICAgICAgICAgICAgICAgICAgICAuICIgJEV4dGVuc2lvbi0+e01vZHVsZX0hICRAIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiBleHRlbnNpb24gY29udGFpbnMgbW9yZSBiZWhhdmlvcnMKICAgICAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkRXh0ZW5zaW9uLT57QmVoYXZpb3JzfSApICkgewoKICAgICAgICAgICAgJXsgJFNlbGYtPntCZWhhdmlvcnN9IH0gPSAoCiAgICAgICAgICAgICAgICAleyAkU2VsZi0+e0JlaGF2aW9yc30gfSwKICAgICAgICAgICAgICAgICV7ICRFeHRlbnNpb24tPntCZWhhdmlvcnN9IH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgVmFsdWVJc0RpZmZlcmVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgU3BlY2lhbCBjYXNlcyB3aGVyZSB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQgYnV0IHRoZXkgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIGVxdWFscy4KICAgIHJldHVybgogICAgICAgIGlmICFkZWZpbmVkICRQYXJhbXtWYWx1ZTF9CiAgICAgICAgJiYgKAogICAgICAgIGRlZmluZWQgJFBhcmFte1ZhbHVlMn0KICAgICAgICAmJiAoCiAgICAgICAgICAgICRQYXJhbXtWYWx1ZTJ9IGVxICdVbnNldE1hc3RlcicKICAgICAgICAgICAgfHwgJFBhcmFte1ZhbHVlMn0gZXEgJ1Vuc2V0U2xhdmUnCiAgICAgICAgICAgIHx8ICRQYXJhbXtWYWx1ZTJ9IGVxICcnCiAgICAgICAgKQogICAgICAgICk7CgogICAgIyBDb21wYXJlIHRoZSByZXN1bHRzLgogICAgcmV0dXJuIERhdGFJc0RpZmZlcmVudCgKICAgICAgICBEYXRhMSA9PiBcJFBhcmFte1ZhbHVlMX0sCiAgICAgICAgRGF0YTIgPT4gXCRQYXJhbXtWYWx1ZTJ9CiAgICApOwp9CgpzdWIgVmFsdWVTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5fSGFuZGxlTGlua3MoCiAgICAgICAgRmllbGROYW1lICA9PiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9LAogICAgICAgIEZpZWxkVmFsdWUgPT4gJFBhcmFte1ZhbHVlfSwKICAgICAgICBUaWNrZXRJRCAgID0+ICRQYXJhbXtPYmplY3RJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGVyZSB3YXMgYW4gZXJyb3IgaGFuZGxpbmcgdGhlIGxpbmtzIGZvciBtYXN0ZXIvc2xhdmUsIHZhbHVlIGNvdWxkIG5vdCBiZSBzZXQiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkVmFsdWUgPSAkUGFyYW17VmFsdWV9ICF+IC9eKD86VW5zZXRNYXN0ZXJ8VW5zZXRTbGF2ZSkkLyA/ICRQYXJhbXtWYWx1ZX0gOiAnJzsKCiAgICAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpLT5WYWx1ZVNldCgKICAgICAgICBGaWVsZElEICA9PiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e0lEfSwKICAgICAgICBPYmplY3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIFZhbHVlICAgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmFsdWVUZXh0ID0+ICRWYWx1ZSwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuICRTdWNjZXNzOwp9CgpzdWIgRWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBodHRwIHJlcXVlc3QKICAgIG15ICRWYWx1ZSA9ICRTZWxmLT5FZGl0RmllbGRWYWx1ZUdldCgKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30sCiAgICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbXtQYXJhbU9iamVjdH0sCgogICAgICAgICMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBEcml2ZXIgYnV0IHBsYWNlIGl0IGZvciBjb25zaXN0ZW5jeSByZWFzb25zCiAgICAgICAgUmV0dXJuVmFsdWVTdHJ1Y3R1cmUgPT4gMSwKICAgICk7CgogICAgbXkgJFNlcnZlckVycm9yOwogICAgbXkgJEVycm9yTWVzc2FnZTsKCiAgICAjIHBlcmZvcm0gbmVjZXNzYXJ5IHZhbGlkYXRpb25zCiAgICBpZiAoICRQYXJhbXtNYW5kYXRvcnl9ICYmICEkVmFsdWUgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gMSwKICAgICAgICB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgIG15ICRQb3NzaWJsZVZhbHVlczsKCiAgICAgICAgIyB1c2UgUG9zc2libGVWYWx1ZXNGaWx0ZXIgaWYgc2VudAogICAgICAgIGlmICggZGVmaW5lZCAkUGFyYW17UG9zc2libGVWYWx1ZXNGaWx0ZXJ9ICkgewogICAgICAgICAgICAkUG9zc2libGVWYWx1ZXMgPSAkUGFyYW17UG9zc2libGVWYWx1ZXNGaWx0ZXJ9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IHBvc3NpYmxlIHZhbHVlcyBsaXN0CiAgICAgICAgICAgICRQb3NzaWJsZVZhbHVlcyA9ICRTZWxmLT5Qb3NzaWJsZVZhbHVlc0dldCgKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdmFsaWRhdGUgaWYgdmFsdWUgaXMgaW4gcG9zc2libGUgdmFsdWVzIGxpc3QgKGJ1dCBsZXQgcGFzcyBlbXB0eSB2YWx1ZXMpCiAgICAgICAgaWYgKCAkVmFsdWUgJiYgISRQb3NzaWJsZVZhbHVlcy0+eyRWYWx1ZX0gKSB7CiAgICAgICAgICAgICRTZXJ2ZXJFcnJvciAgPSAxOwogICAgICAgICAgICAkRXJyb3JNZXNzYWdlID0gJ1RoZSBmaWVsZCBjb250ZW50IGlzIGludmFsaWQnOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSByZXN1bHRpbmcgc3RydWN0dXJlCiAgICBteSAkUmVzdWx0ID0gewogICAgICAgIFNlcnZlckVycm9yICA9PiAkU2VydmVyRXJyb3IsCiAgICAgICAgRXJyb3JNZXNzYWdlID0+ICRFcnJvck1lc3NhZ2UsCiAgICB9OwoKICAgIHJldHVybiAkUmVzdWx0Owp9CgpzdWIgRGlzcGxheVZhbHVlUmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgSFRNTE91dHB1dCBhcyBkZWZhdWx0IGlmIG5vdCBzcGVjaWZpZWQKICAgIGlmICggIWRlZmluZWQgJFBhcmFte0hUTUxPdXRwdXR9ICkgewogICAgICAgICRQYXJhbXtIVE1MT3V0cHV0fSA9IDE7CiAgICB9CgogICAgIyBnZXQgcmF3IFZhbHVlIHN0cmluZ3MgZnJvbSBmaWVsZCB2YWx1ZQogICAgbXkgJFZhbHVlID0gZGVmaW5lZCAkUGFyYW17VmFsdWV9ID8gJFBhcmFte1ZhbHVlfSA6ICcnOwoKICAgICMgZ2V0IHJlYWwgdmFsdWUKICAgIGlmICggJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9LT57JFZhbHVlfSApIHsKCiAgICAgICAgIyBnZXQgcmVhZGFibGUgdmFsdWUKICAgICAgICAkVmFsdWUgPSAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30tPnskVmFsdWV9OwogICAgfQoKICAgIGlmICggJFZhbHVlIGVxICdNYXN0ZXInICkgewogICAgICAgICRWYWx1ZSA9ICRQYXJhbXtMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ01hc3RlcicpOwogICAgfQogICAgZWxzaWYgKCAkVmFsdWUgPX4gbXtTbGF2ZU9mOihcZCspfW1zeCApIHsKCiAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICQxOwogICAgICAgIGlmICgkVGlja2V0TnVtYmVyKSB7CiAgICAgICAgICAgIG15ICRDb25maWdPYmplY3QgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICAgICAgICAgIG15ICRUaWNrZXRIb29rICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJyk7CiAgICAgICAgICAgIG15ICRUaWNrZXRIb29rRGl2aWRlciA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rRGl2aWRlcicpOwogICAgICAgICAgICAkVmFsdWUgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKAogICAgICAgICAgICAgICAgJ1NsYXZlIG9mICVzJXMlcycsCiAgICAgICAgICAgICAgICAkVGlja2V0SG9vaywKICAgICAgICAgICAgICAgICRUaWNrZXRIb29rRGl2aWRlciwKICAgICAgICAgICAgICAgICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IHRpdGxlIGFzIHZhbHVlIGFmdGVyIHVwZGF0ZSBhbmQgYmVmb3JlIGxpbWl0CiAgICBteSAkVGl0bGUgPSAkVmFsdWU7CgogICAgIyBIVE1MT3V0cHV0IHRyYW5zZm9ybWF0aW9ucwogICAgaWYgKCAkUGFyYW17SFRNTE91dHB1dH0gKSB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgPT4gJFZhbHVlLAogICAgICAgICAgICBNYXggID0+ICRQYXJhbXtWYWx1ZU1heENoYXJzfSB8fCAnJywKICAgICAgICApOwoKICAgICAgICAkVGl0bGUgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCA9PiAkVGl0bGUsCiAgICAgICAgICAgIE1heCAgPT4gJFBhcmFte1RpdGxlTWF4Q2hhcnN9IHx8ICcnLAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoICRQYXJhbXtWYWx1ZU1heENoYXJzfSAmJiBsZW5ndGgoJFZhbHVlKSA+ICRQYXJhbXtWYWx1ZU1heENoYXJzfSApIHsKICAgICAgICAgICAgJFZhbHVlID0gc3Vic3RyKCAkVmFsdWUsIDAsICRQYXJhbXtWYWx1ZU1heENoYXJzfSApIC4gJy4uLic7CiAgICAgICAgfQogICAgICAgIGlmICggJFBhcmFte1RpdGxlTWF4Q2hhcnN9ICYmIGxlbmd0aCgkVGl0bGUpID4gJFBhcmFte1RpdGxlTWF4Q2hhcnN9ICkgewogICAgICAgICAgICAkVGl0bGUgPSBzdWJzdHIoICRUaXRsZSwgMCwgJFBhcmFte1RpdGxlTWF4Q2hhcnN9ICkgLiAnLi4uJzsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZmllbGQgbGluayBmcm9tIGNvbmZpZwogICAgbXkgJExpbmsgICAgICAgID0gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntDb25maWd9LT57TGlua30gICAgICAgIHx8ICcnOwogICAgbXkgJExpbmtQcmV2aWV3ID0gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntDb25maWd9LT57TGlua1ByZXZpZXd9IHx8ICcnOwoKICAgIG15ICREYXRhID0gewogICAgICAgIFZhbHVlICAgICAgID0+ICRWYWx1ZSwKICAgICAgICBUaXRsZSAgICAgICA9PiAkVGl0bGUsCiAgICAgICAgTGluayAgICAgICAgPT4gJExpbmssCiAgICAgICAgTGlua1ByZXZpZXcgPT4gJExpbmtQcmV2aWV3LAogICAgfTsKCiAgICByZXR1cm4gJERhdGE7Cn0KCnN1YiBQb3NzaWJsZVZhbHVlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdG8gc3RvcmUgdGhlIHBvc3NpYmxlIHZhbHVlcwogICAgbXkgJVBvc3NpYmxlVmFsdWVzID0gKAogICAgICAgICcnID0+ICctJywKICAgICk7CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdHMKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgICMgZmluZCBhbGwgY3VycmVudCBvcGVuIG1hc3RlciBzbGF2ZSB0aWNrZXRzCiAgICBteSBAVGlja2V0SURzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIFJlc3VsdCA9PiAnQVJSQVknLAoKICAgICAgICAjIG1hc3RlciBzbGF2ZSBkeW5hbWljIGZpZWxkCiAgICAgICAgJ0R5bmFtaWNGaWVsZF8nIC4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntOYW1lfSA9PiB7CiAgICAgICAgICAgIEVxdWFscyA9PiAnTWFzdGVyJywKICAgICAgICB9LAoKICAgICAgICBTdGF0ZVR5cGUgID0+ICdPcGVuJywKICAgICAgICBMaW1pdCAgICAgID0+IDYwLAogICAgICAgIFVzZXJJRCAgICAgPT4gJExheW91dE9iamVjdC0+e1VzZXJJRH0sCiAgICAgICAgUGVybWlzc2lvbiA9PiAncm8nLAogICAgKTsKCiAgICAjIHNldCBkeW5hbWljIGZpZWxkIHBvc3NpYmxlIHZhbHVlcwogICAgJFBvc3NpYmxlVmFsdWVze01hc3Rlcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ05ldyBNYXN0ZXIgVGlja2V0Jyk7CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRUaWNrZXRIb29rICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJyk7CiAgICBteSAkVGlja2V0SG9va0RpdmlkZXIgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6SG9va0RpdmlkZXInKTsKCiAgICBUSUNLRVQ6CiAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CiAgICAgICAgbXkgJUN1cnJlbnRUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBUSUNLRVQgaWYgISVDdXJyZW50VGlja2V0OwoKICAgICAgICAjIHNldCBkeW5hbWljIGZpZWxkIHBvc3NpYmxlIHZhbHVlcwogICAgICAgICRQb3NzaWJsZVZhbHVlc3siU2xhdmVPZjokQ3VycmVudFRpY2tldHtUaWNrZXROdW1iZXJ9In0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoCiAgICAgICAgICAgICdTbGF2ZSBvZiAlcyVzJXM6ICVzJywKICAgICAgICAgICAgJFRpY2tldEhvb2ssCiAgICAgICAgICAgICRUaWNrZXRIb29rRGl2aWRlciwKICAgICAgICAgICAgJEN1cnJlbnRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgJEN1cnJlbnRUaWNrZXR7VGl0bGV9LAogICAgICAgICk7CiAgICB9CgogICAgIyBJZiBjb25maWcgVW5zZXRNYXN0ZXJTbGF2ZSBpcyBlbmFibGVkIGFuZCB3ZSBhcmUgcmVxdWVzdGluZyB2YWx1ZXMgZnJvbSBBZG1pbkdlbmVyaWNBZ2VudCwKICAgICMgICBhZGQgVW5zZXRNYXN0ZXIgYW5kIFVuc2V0U2xhdmUgcG9zc2libGUgdmFsdWVzLiBTZWUgYnVnIzE0Nzc4IChodHRwczovL2J1Z3Mub3Rycy5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzc4KS4KICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6VW5zZXRNYXN0ZXJTbGF2ZScpICYmICRMYXlvdXRPYmplY3QtPntBY3Rpb259IGVxICdBZG1pbkdlbmVyaWNBZ2VudCcgKQogICAgewogICAgICAgICRQb3NzaWJsZVZhbHVlc3tVbnNldE1hc3Rlcn0gPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFuc2xhdGUoJ1Vuc2V0IE1hc3RlciBUaWNrZXQnKTsKICAgICAgICAkUG9zc2libGVWYWx1ZXN7VW5zZXRTbGF2ZX0gID0gJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCdVbnNldCBTbGF2ZSBUaWNrZXQnKTsKICAgIH0KCiAgICAjIHJldHVybiB0aGUgcG9zc2libGUgdmFsdWVzIGhhc2ggYXMgYSByZWZlcmVuY2UKICAgIHJldHVybiBcJVBvc3NpYmxlVmFsdWVzOwp9CgpzdWIgX0hhbmRsZUxpbmtzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhGaWVsZE5hbWUgRmllbGRWYWx1ZSBUaWNrZXRJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICBteSAkRmllbGROYW1lID0gJFBhcmFte0ZpZWxkTmFtZX07CgogICAgbXkgJVRpY2tldCA9ICRQYXJhbXtUaWNrZXR9CiAgICAgICAgPyAleyAkUGFyYW17VGlja2V0fSB9CiAgICAgICAgOiAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwoKICAgIG15ICRPbGRWYWx1ZSA9ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRGaWVsZE5hbWUgfTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBtYXN0ZXIgc2xhdmUgY29uZmlnCiAgICBteSAkTWFzdGVyU2xhdmVLZWVwUGFyZW50Q2hpbGRBZnRlclVuc2V0ICA9ICRDb25maWdPYmplY3QtPkdldCgnTWFzdGVyU2xhdmU6OktlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQnKSAgfHwgMDsKICAgIG15ICRNYXN0ZXJTbGF2ZUZvbGxvd1VwZGF0ZWRNYXN0ZXIgICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6Rm9sbG93VXBkYXRlZE1hc3RlcicpICAgICAgICB8fCAwOwogICAgbXkgJE1hc3RlclNsYXZlS2VlcFBhcmVudENoaWxkQWZ0ZXJVcGRhdGUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ01hc3RlclNsYXZlOjpLZWVwUGFyZW50Q2hpbGRBZnRlclVwZGF0ZScpIHx8IDA7CgogICAgbXkgJE5ld1ZhbHVlID0gJFBhcmFte0ZpZWxkVmFsdWV9OwoKICAgICMgZ2V0IGxpbmsgb2JqZWN0CiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CgogICAgIyBzZXQgYSBuZXcgbWFzdGVyIHRpY2tldAogICAgIyBjaGVjayBpZiBpdCBpcyBhbHJlYWR5IGEgbWFzdGVyIHRpY2tldAogICAgaWYgKAogICAgICAgICROZXdWYWx1ZSBlcSAnTWFzdGVyJwogICAgICAgICYmICggISRPbGRWYWx1ZSB8fCAkT2xkVmFsdWUgbmUgJE5ld1ZhbHVlICkKICAgICAgICApCiAgICB7CgogICAgICAgICMgY2hlY2sgaWYgaXQgd2FzIGEgc2xhdmUgdGlja2V0IGJlZm9yZSBhbmQgaWYgd2UgaGF2ZSB0byBkZWxldGUKICAgICAgICAjIHRoZSBvbGQgcGFyZW50IGNoaWxkIGxpbmsgKE1hc3RlclNsYXZlS2VlcFBhcmVudENoaWxkQWZ0ZXJVbnNldCkKICAgICAgICBpZiAoCiAgICAgICAgICAgICRPbGRWYWx1ZQogICAgICAgICAgICAmJiAkT2xkVmFsdWUgPX4gL15TbGF2ZU9mOiguKj8pJC8KICAgICAgICAgICAgJiYgISRNYXN0ZXJTbGF2ZUtlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFNvdXJjZUtleSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldElETG9va3VwKAogICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICQxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJExpbmtPYmplY3QtPkxpbmtEZWxldGUoCiAgICAgICAgICAgICAgICBPYmplY3QxID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgS2V5MSAgICA9PiAkU291cmNlS2V5LAogICAgICAgICAgICAgICAgT2JqZWN0MiA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIEtleTIgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1BhcmVudENoaWxkJywKICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGEgbmV3IHNsYXZlIHRpY2tldAogICAgIyBjaGVjayBpZiBpdCdzIGFscmVhZHkgdGhlIHNsYXZlIG9mIHRoZSB3aXNoZWQgbWFzdGVyIHRpY2tldAogICAgZWxzaWYgKAogICAgICAgICROZXdWYWx1ZSA9fiAvXlNsYXZlT2Y6KC4qPykkLwogICAgICAgICYmICggISRPbGRWYWx1ZSB8fCAkT2xkVmFsdWUgbmUgJE5ld1ZhbHVlICkKICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJFNvdXJjZUtleSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldElETG9va3VwKAogICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAkTGlua09iamVjdC0+TGlua0FkZCgKICAgICAgICAgICAgU291cmNlT2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICBTb3VyY2VLZXkgICAgPT4gJFNvdXJjZUtleSwKICAgICAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICBUYXJnZXRLZXkgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJUxpbmtzID0gJExpbmtPYmplY3QtPkxpbmtLZXlMaXN0KAogICAgICAgICAgICBPYmplY3QxICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIEtleTEgICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICBPYmplY3QyICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICBUeXBlICAgICAgPT4gJ1BhcmVudENoaWxkJywgICAgICAjIChvcHRpb25hbCkKICAgICAgICAgICAgRGlyZWN0aW9uID0+ICdUYXJnZXQnLCAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgQm90aCAoU291cmNlfFRhcmdldHxCb3RoKQogICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFNsYXZlVGlja2V0SURzOwoKICAgICAgICBMSU5LRURUSUNLRVRJRDoKICAgICAgICBmb3IgbXkgJExpbmtlZFRpY2tldElEICggc29ydCBrZXlzICVMaW5rcyApIHsKICAgICAgICAgICAgbmV4dCBMSU5LRURUSUNLRVRJRCBpZiAhJExpbmtzeyRMaW5rZWRUaWNrZXRJRH07CgogICAgICAgICAgICAjIGp1c3QgdGFrZSB0aWNrZXQgd2l0aCBzbGF2ZSBhdHRyaWJ1dGVzIGZvciBhY3Rpb24KICAgICAgICAgICAgbXkgJUxpbmtlZFRpY2tldCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJExpbmtlZFRpY2tldElELAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJExpbmtlZFRpY2tldFZhbHVlID0gJExpbmtlZFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJEZpZWxkTmFtZSB9OwoKICAgICAgICAgICAgbmV4dCBMSU5LRURUSUNLRVRJRCBpZiAhJExpbmtlZFRpY2tldFZhbHVlOwogICAgICAgICAgICBuZXh0IExJTktFRFRJQ0tFVElEIGlmICRMaW5rZWRUaWNrZXRWYWx1ZSAhfiAvXlNsYXZlT2Y6KC4qPykkLzsKCiAgICAgICAgICAgICMgcmVtZW1iZXIgbGlua2VkIHRpY2tldCBpZAogICAgICAgICAgICBwdXNoIEBTbGF2ZVRpY2tldElEcywgJExpbmtlZFRpY2tldElEOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkT2xkVmFsdWUgJiYgJE9sZFZhbHVlIGVxICdNYXN0ZXInICkgewoKICAgICAgICAgICAgaWYgKCAkTWFzdGVyU2xhdmVGb2xsb3dVcGRhdGVkTWFzdGVyICYmIEBTbGF2ZVRpY2tldElEcyApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkTGlua2VkVGlja2V0SUQgKEBTbGF2ZVRpY2tldElEcykgewogICAgICAgICAgICAgICAgICAgICRMaW5rT2JqZWN0LT5MaW5rQWRkKAogICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUtleSAgICA9PiAkU291cmNlS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXRPYmplY3QgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldEtleSAgICA9PiAkTGlua2VkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISRNYXN0ZXJTbGF2ZUtlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQgKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJExpbmtlZFRpY2tldElEIChAU2xhdmVUaWNrZXRJRHMpIHsKICAgICAgICAgICAgICAgICAgICAkTGlua09iamVjdC0+TGlua0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0MSA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5MSAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QyID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgICAgICAgICBLZXkyICAgID0+ICRMaW5rZWRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkT2xkVmFsdWUKICAgICAgICAgICAgJiYgJE9sZFZhbHVlID1+IC9eU2xhdmVPZjooLio/KSQvCiAgICAgICAgICAgICYmICEkTWFzdGVyU2xhdmVLZWVwUGFyZW50Q2hpbGRBZnRlclVwZGF0ZQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkU291cmNlS2V5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGlua09iamVjdC0+TGlua0RlbGV0ZSgKICAgICAgICAgICAgICAgIE9iamVjdDEgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICBLZXkxICAgID0+ICRTb3VyY2VLZXksCiAgICAgICAgICAgICAgICBPYmplY3QyID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgS2V5MiAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICROZXdWYWx1ZSA9fiAvXig/OlVuc2V0TWFzdGVyfFVuc2V0U2xhdmUpJC8gJiYgJE9sZFZhbHVlICkgewoKICAgICAgICBpZiAoICROZXdWYWx1ZSBlcSAnVW5zZXRNYXN0ZXInICYmICEkTWFzdGVyU2xhdmVLZWVwUGFyZW50Q2hpbGRBZnRlclVuc2V0ICkgewogICAgICAgICAgICBteSAlTGlua3MgPSAkTGlua09iamVjdC0+TGlua0tleUxpc3QoCiAgICAgICAgICAgICAgICBPYmplY3QxICAgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICBLZXkxICAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICAgICAgICAgIE9iamVjdDIgICA9PiAnVGlja2V0JywKICAgICAgICAgICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdQYXJlbnRDaGlsZCcsICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgICAgICAgICBEaXJlY3Rpb24gPT4gJ1RhcmdldCcsICAgICAgICAgICAjIChvcHRpb25hbCkgZGVmYXVsdCBCb3RoIChTb3VyY2V8VGFyZ2V0fEJvdGgpCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSBAU2xhdmVUaWNrZXRJRHM7CgogICAgICAgICAgICBMSU5LRURUSUNLRVRJRDoKICAgICAgICAgICAgZm9yIG15ICRMaW5rZWRUaWNrZXRJRCAoIHNvcnQga2V5cyAlTGlua3MgKSB7CiAgICAgICAgICAgICAgICBuZXh0IExJTktFRFRJQ0tFVElEIGlmICEkTGlua3N7JExpbmtlZFRpY2tldElEfTsKCiAgICAgICAgICAgICAgICAjIGp1c3QgdGFrZSB0aWNrZXQgd2l0aCBzbGF2ZSBhdHRyaWJ1dGVzIGZvciBhY3Rpb24KICAgICAgICAgICAgICAgIG15ICVMaW5rZWRUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkTGlua2VkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkTGlua2VkVGlja2V0VmFsdWUgPSAkTGlua2VkVGlja2V0eyAnRHluYW1pY0ZpZWxkXycgLiAkRmllbGROYW1lIH07CiAgICAgICAgICAgICAgICBuZXh0IExJTktFRFRJQ0tFVElEIGlmICEkTGlua2VkVGlja2V0VmFsdWU7CiAgICAgICAgICAgICAgICBuZXh0IExJTktFRFRJQ0tFVElEIGlmICRMaW5rZWRUaWNrZXRWYWx1ZSAhfiAvXlNsYXZlT2Y6KC4qPykkLzsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRpY2tldCBpZAogICAgICAgICAgICAgICAgcHVzaCBAU2xhdmVUaWNrZXRJRHMsICRMaW5rZWRUaWNrZXRJRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJE1hc3RlclNsYXZlREYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgICAgIE5hbWUgPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgICAgICBmb3IgbXkgJExpbmtlZFRpY2tldElEIChAU2xhdmVUaWNrZXRJRHMpIHsKICAgICAgICAgICAgICAgICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlKAogICAgICAgICAgICAgICAgICAgIE9iamVjdDEgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgS2V5MSAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIE9iamVjdDIgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICAgICAgS2V5MiAgICA9PiAkTGlua2VkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgVW5zZXRTbGF2ZSBEeW5hbWljRmllbGQgdmFsdWUgZnJvbSBhZmZlY3RlZCBzbGF2ZSB0aWNrZXRzLgogICAgICAgICAgICAgICAgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVERiwKICAgICAgICAgICAgICAgICAgICBGaWVsZElEICAgICAgICAgICAgPT4gJE1hc3RlclNsYXZlREYtPntJRH0sCiAgICAgICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRMaW5rZWRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ1Vuc2V0U2xhdmUnLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkTmV3VmFsdWUgZXEgJ1Vuc2V0U2xhdmUnCiAgICAgICAgICAgICYmICEkTWFzdGVyU2xhdmVLZWVwUGFyZW50Q2hpbGRBZnRlclVuc2V0CiAgICAgICAgICAgICYmICRPbGRWYWx1ZSA9fiAvXlNsYXZlT2Y6KC4qPykkLwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkU291cmNlS2V5ID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkTGlua09iamVjdC0+TGlua0RlbGV0ZSgKICAgICAgICAgICAgICAgIE9iamVjdDEgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgICAgICBLZXkxICAgID0+ICRTb3VyY2VLZXksCiAgICAgICAgICAgICAgICBPYmplY3QyID0+ICdUaWNrZXQnLAogICAgICAgICAgICAgICAgS2V5MiAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBTZWFyY2hGaWVsZFJlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBjb25maWcgZnJvbSBmaWVsZCBjb25maWcKICAgIG15ICRGaWVsZENvbmZpZyA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57Q29uZmlnfTsKICAgIG15ICRGaWVsZE5hbWUgICA9ICdTZWFyY2hfRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9OwogICAgbXkgJEZpZWxkTGFiZWwgID0gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntMYWJlbH07CgogICAgbXkgJFZhbHVlOwoKICAgIG15IEBEZWZhdWx0VmFsdWU7CgogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtEZWZhdWx0VmFsdWV9ICkgewogICAgICAgIEBEZWZhdWx0VmFsdWUgPSBzcGxpdCAvOy8sICRQYXJhbXtEZWZhdWx0VmFsdWV9OwogICAgfQoKICAgICMgc2V0IHRoZSBmaWVsZCB2YWx1ZQogICAgaWYgKEBEZWZhdWx0VmFsdWUpIHsKICAgICAgICAkVmFsdWUgPSBcQERlZmF1bHRWYWx1ZTsKICAgIH0KCiAgICAjIGdldCB0aGUgZmllbGQgdmFsdWUsIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBhZnRlciB0aGUgcHJvZmlsZSBpcyBsb2FkZWQKICAgIG15ICRGaWVsZFZhbHVlcyA9ICRTZWxmLT5TZWFyY2hGaWVsZFZhbHVlR2V0KAogICAgICAgICVQYXJhbSwKICAgICk7CgogICAgaWYgKCBkZWZpbmVkICRGaWVsZFZhbHVlcyApIHsKICAgICAgICAkVmFsdWUgPSAkRmllbGRWYWx1ZXM7CiAgICB9CgogICAgIyBjaGVjayBhbmQgc2V0IGNsYXNzIGlmIG5lY2Vzc2FyeQogICAgbXkgJEZpZWxkQ2xhc3MgPSAnRHluYW1pY0ZpZWxkTXVsdGlTZWxlY3QgTW9kZXJuaXplJzsKCiAgICAjIHNldCBUcmVlVmlldyBjbGFzcwogICAgaWYgKCAkRmllbGRDb25maWctPntUcmVlVmlld30gKSB7CiAgICAgICAgJEZpZWxkQ2xhc3MgLj0gJyBEeW5hbWljRmllbGRXaXRoVHJlZVZpZXcnOwogICAgfQoKICAgIG15ICRMYW5ndWFnZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6TGFuZ3VhZ2UnKTsKCiAgICAjIHNldCBQb3NzaWJsZVZhbHVlcyAobWFzdGVyIHNob3VsZCBiZSBhbHdheXMgYW4gb3B0aW9uKQogICAgbXkgJFNlbGVjdGlvbkRhdGEgPSB7CiAgICAgICAgTWFzdGVyID0+ICRMYW5ndWFnZU9iamVjdC0+VHJhbnNsYXRlKCdNYXN0ZXIgVGlja2V0JyksCiAgICB9OwoKICAgICMgZ2V0IGhpc3RvcmljYWwgdmFsdWVzIGZyb20gZGF0YWJhc2UKICAgIG15ICRIaXN0b3JpY2FsVmFsdWVzID0gJFNlbGYtPkhpc3RvcmljYWxWYWx1ZXNHZXQoJVBhcmFtKTsKCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEhpc3RvcmljYWxWYWx1ZXMpICkgewoKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwogICAgICAgIG15ICRUaWNrZXRIb29rICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpIb29rJyk7CiAgICAgICAgbXkgJFRpY2tldEhvb2tEaXZpZGVyID0gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6Okhvb2tEaXZpZGVyJyk7CgogICAgICAgICMgUmVjcmVhdGUgdGhlIGRpc3BsYXkgdmFsdWUgZnJvbSB0aGUgYWxyZWFkeSBzZXQgdGlja2V0cy4KICAgICAgICBWQUxVRToKICAgICAgICBmb3IgbXkgJFZhbHVlS2V5ICggc29ydCBrZXlzICV7JEhpc3RvcmljYWxWYWx1ZXN9ICkgewoKICAgICAgICAgICAgaWYgKCAkVmFsdWVLZXkgPX4gbXtTbGF2ZU9mOiguKil9Z214ICkgewogICAgICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICQxOwoKICAgICAgICAgICAgICAgIG15ICRUaWNrZXRJRCA9ICRUaWNrZXRPYmplY3QtPlRpY2tldElETG9va3VwKAogICAgICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkVGlja2V0TnVtYmVyLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlVGlja2V0OwogICAgICAgICAgICAgICAgaWYgKCRUaWNrZXRJRCkgewogICAgICAgICAgICAgICAgICAgICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbmV4dCBWQUxVRSBpZiAhJVRpY2tldDsKCiAgICAgICAgICAgICAgICAkU2VsZWN0aW9uRGF0YS0+eyRWYWx1ZUtleX0gPSAkTGFuZ3VhZ2VPYmplY3QtPlRyYW5zbGF0ZSgKICAgICAgICAgICAgICAgICAgICAnU2xhdmUgb2YgJXMlcyVzOiAlcycsCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldEhvb2ssCiAgICAgICAgICAgICAgICAgICAgJFRpY2tldEhvb2tEaXZpZGVyLAogICAgICAgICAgICAgICAgICAgICRUaWNrZXR7VGlja2V0TnVtYmVyfSwKICAgICAgICAgICAgICAgICAgICAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyB1c2UgUG9zc2libGVWYWx1ZXNGaWx0ZXIgaWYgZGVmaW5lZAogICAgJFNlbGVjdGlvbkRhdGEgPSAkUGFyYW17UG9zc2libGVWYWx1ZXNGaWx0ZXJ9IC8vICRTZWxlY3Rpb25EYXRhOwoKICAgIG15ICRIVE1MU3RyaW5nID0gJFBhcmFte0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiAkU2VsZWN0aW9uRGF0YSwKICAgICAgICBOYW1lICAgICAgICAgPT4gJEZpZWxkTmFtZSwKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFZhbHVlLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAwLAogICAgICAgIENsYXNzICAgICAgICA9PiAkRmllbGRDbGFzcywKICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICBIVE1MUXVvdGUgICAgPT4gMSwKICAgICk7CgogICAgIyBjYWxsIEVkaXRMYWJlbFJlbmRlciBvbiB0aGUgY29tbW9uIERyaXZlcgogICAgbXkgJExhYmVsU3RyaW5nID0gJFNlbGYtPkVkaXRMYWJlbFJlbmRlcigKICAgICAgICAlUGFyYW0sCiAgICAgICAgRmllbGROYW1lID0+ICRGaWVsZE5hbWUsCiAgICApOwoKICAgIG15ICREYXRhID0gewogICAgICAgIEZpZWxkID0+ICRIVE1MU3RyaW5nLAogICAgICAgIExhYmVsID0+ICRMYWJlbFN0cmluZywKICAgIH07CgogICAgcmV0dXJuICREYXRhOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpFdmVudDo6TWFzdGVyU2xhdmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNvbW11bmljYXRpb25DaGFubmVsJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJywKKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhEYXRhIEV2ZW50IENvbmZpZykpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGlmICggISRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgRGF0YS0+e1RpY2tldElEfSEiCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBnZXQgdGlja2V0IGF0dHJpYnV0ZXMKICAgIG15ICVUaWNrZXQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgICAgICA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgKTsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZAogICAgbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBjaGVjayBpZiBpdCdzIGEgbWFzdGVyL3NsYXZlIHRpY2tldAogICAgcmV0dXJuIDEgaWYgISRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCB9OwogICAgcmV0dXJuIDEgaWYgJFRpY2tldHsgJ0R5bmFtaWNGaWVsZF8nIC4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIH0gIX4gL14obWFzdGVyfHllcykkL2k7CgogICAgIyBnZXQgbGluayBvYmplY3QKICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKCiAgICAjIGZpbmQgc2xhdmVzCiAgICBteSAlTGlua3MgPSAkTGlua09iamVjdC0+TGlua0tleUxpc3QoCiAgICAgICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgICAgIEtleTEgICAgICA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgT2JqZWN0MiAgID0+ICdUaWNrZXQnLAogICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgIFR5cGUgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgICAgIERpcmVjdGlvbiA9PiAnVGFyZ2V0JywKICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIG15IEBUaWNrZXRJRHM7CiAgICBUSUNLRVRJRDoKICAgIGZvciBteSAkVGlja2V0SUQgKCBzb3J0IGtleXMgJUxpbmtzICkgewogICAgICAgIG5leHQgVElDS0VUSUQgaWYgISRMaW5rc3skVGlja2V0SUR9OwoKICAgICAgICAjIGp1c3QgdGFrZSB0aWNrZXQgd2l0aCBzbGF2ZSBhdHRyaWJ1dGVzIGZvciBhY3Rpb24KICAgICAgICBteSAlVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRUaWNrZXRWYWx1ZSA9ICRUaWNrZXR7ICdEeW5hbWljRmllbGRfJyAuICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCB9OwoKICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICEkVGlja2V0VmFsdWU7CiAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAkVGlja2V0VmFsdWUgIX4gL15TbGF2ZU9mOiguKj8pJC87CgogICAgICAgICMgcmVtZW1iZXIgdGlja2V0IGlkCiAgICAgICAgcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQ7CiAgICB9CgogICAgIyBubyBzbGF2ZXMKICAgIGlmICggIUBUaWNrZXRJRHMgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gU2xhdmVzIG9mIHRpY2tldCAkVGlja2V0e1RpY2tldElEfSEiLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7CgogICAgIyBhdXRvIHJlc3BvbnNlIGFjdGlvbgogICAgaWYgKCAkUGFyYW17RXZlbnR9IGVxICdBcnRpY2xlU2VuZCcgKSB7CiAgICAgICAgbXkgQEFydGljbGVzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxIGlmICFAQXJ0aWNsZXM7CgogICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkQXJ0aWNsZXNbLTFdLT57VGlja2V0SUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVzWy0xXS0+e0FydGljbGVJRH0sCiAgICAgICAgKTsKICAgICAgICBteSAlQXJ0aWNsZSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRBcnRpY2xlc1stMV0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXNbLTFdLT57QXJ0aWNsZUlEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHRoZSBzZW5kIG1haWwgaXMgb2YgdHlwZSBmb3J3YXJkCiAgICAgICAgbXkgJElzRm9yd2FyZCA9ICRTZWxmLT5fQXJ0aWNsZUhpc3RvcnlUeXBlR2l2ZW4oCiAgICAgICAgICAgIFRpY2tldElEICAgID0+ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEICAgPT4gJEFydGljbGV7QXJ0aWNsZUlEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgPT4gJ0ZvcndhcmQnLAogICAgICAgICAgICBVc2VySUQgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZSBTeXNDb25maWcgaXMgZGlzYWJsZWQgYW5kIHRoZSBuZXcgYXJ0aWNsZSBpcyBhbiBmb3J3YXJkIGFydGljbGUKICAgICAgICAjIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHRoZSBmb3J3YXJkIGZvciB0aGUgc2xhdmUgdGlja2V0cwogICAgICAgIG15ICRGb3J3YXJkU2xhdmVzID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6Rm9yd2FyZFNsYXZlcycpOwoKICAgICAgICByZXR1cm4gMSBpZiAkSXNGb3J3YXJkICYmICEkRm9yd2FyZFNsYXZlczsKCiAgICAgICAgIyBkbyBub3Qgc2VuZCBpbnRlcm5hbCBjb21tdW5pY2F0aW9ucyB0byBlbmQgY3VzdG9tZXJzIG9mIHNsYXZlIHRpY2tldHMKICAgICAgICByZXR1cm4gMSBpZiAhJEFydGljbGV7SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9OwoKICAgICAgICAjIG1hcmsgdGlja2V0IHRvIHByZXZlbnQgYSBsb29wCiAgICAgICAgJFRpY2tldE9iamVjdC0+SGlzdG9yeUFkZCgKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgQ3JlYXRlVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ01pc2MnLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ01hc3RlclRpY2tldEFjdGlvbjogQXJ0aWNsZVNlbmQnLAogICAgICAgICk7CgogICAgICAgICMganVzdCBhIGZsYWcgZm9yIGtub3cgd2hlbiB0aGUgZmlyc3Qgc2xhdmUgdGlja2V0IGlzIHByZXNlbnQKICAgICAgICBteSAkRmlyc3RTbGF2ZVRpY2tldCA9IDE7CiAgICAgICAgbXkgJFRtcEFydGljbGVCb2R5OwoKICAgICAgICAjIEdldCBhdHRhY2htZW50cyBpbiBtYXN0ZXIgZm9yIHVzYWdlIGluIHNsYXZlIHRpY2tldHMgKHNlZSBidWcjMTQ5ODMpLgogICAgICAgIG15ICVBdHRhY2htZW50SW5kZXggPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXNbLTFdLT57QXJ0aWNsZUlEfSwKICAgICAgICApOwoKICAgICAgICBteSBAQXR0YWNobWVudHM7CiAgICAgICAgQVRUQUNITUVOVDoKICAgICAgICBmb3IgbXkgJEZpbGVJRCAoIHNvcnQga2V5cyAlQXR0YWNobWVudEluZGV4ICkgewogICAgICAgICAgICBuZXh0IEFUVEFDSE1FTlQgaWYgISRGaWxlSUQ7CiAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXNbLTFdLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkRmlsZUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBBVFRBQ0hNRU5UIGlmICFJc0hhc2hSZWZXaXRoRGF0YSggXCVBdHRhY2htZW50ICk7CiAgICAgICAgICAgIHB1c2ggQEF0dGFjaG1lbnRzLCB7JUF0dGFjaG1lbnR9OwogICAgICAgIH0KCiAgICAgICAgIyBwZXJmb3JtIGFjdGlvbiBvbiBsaW5rZWQgdGlja2V0cwogICAgICAgIFRJQ0tFVElEOgogICAgICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICAgICAgbXkgJENoZWNrU3VjY2VzcyA9ICRTZWxmLT5fTG9vcENoZWNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBTdHJpbmcgICA9PiAnTWFzdGVyVGlja2V0QWN0aW9uOiBBcnRpY2xlU2VuZCcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgISRDaGVja1N1Y2Nlc3M7CgogICAgICAgICAgICBteSAlVGlja2V0U2xhdmUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHRyeSB0byBnZXQgdGhlIGN1c3RvbWVyIGRhdGEgb2YgdGhlIHNsYXZlIHRpY2tldAogICAgICAgICAgICBteSAlQ3VzdG9tZXI7CiAgICAgICAgICAgIGlmICggJFRpY2tldFNsYXZle0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAgICAgICAgICVDdXN0b21lciA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlckRhdGFHZXQoCiAgICAgICAgICAgICAgICAgICAgVXNlciA9PiAkVGlja2V0U2xhdmV7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJENoZWNrSXRlbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgY3VzdG9tZXIgZW1haWwgaXMgdmFsaWQKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJEN1c3RvbWVye1VzZXJFbWFpbH0KICAgICAgICAgICAgICAgICYmICEkQ2hlY2tJdGVtT2JqZWN0LT5DaGVja0VtYWlsKCBBZGRyZXNzID0+ICRDdXN0b21lcntVc2VyRW1haWx9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEN1c3RvbWVye1VzZXJFbWFpbH0gPSAnJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiB3ZSBjYW4ndCBmaW5kIGEgdmFsaWQgVXNlckVtYWlsIGluIEN1c3RvbWVyRGF0YQogICAgICAgICAgICAjIHdlIGhhdmUgdG8gZ2V0IHRoZSBsYXN0IEFydGljbGUgd2l0aCBTZW5kZXJUeXBlICdjdXN0b21lcicKICAgICAgICAgICAgIyBhbmQgZ2V0IHRoZSBVc2VyRW1haWwKICAgICAgICAgICAgaWYgKCAhJEN1c3RvbWVye1VzZXJFbWFpbH0gKSB7CiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICAgICAgICAgICAgICBteSBAQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIEFydGljbGVTZW5kZXJUeXBlID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICRDb21tdW5pY2F0aW9uQ2hhbm5lbE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDb21tdW5pY2F0aW9uQ2hhbm5lbCcpOwoKICAgICAgICAgICAgICAgIG15IEBNSU1FQmFzZUNoYW5uZWxzOwogICAgICAgICAgICAgICAgZm9yIG15ICRDaGFubmVsIChxdyhFbWFpbCBJbnRlcm5hbCBQaG9uZSkpIHsKICAgICAgICAgICAgICAgICAgICBteSAlQ29tbXVuaWNhdGlvbkNoYW5uZWwgPSAkQ29tbXVuaWNhdGlvbkNoYW5uZWxPYmplY3QtPkNoYW5uZWxHZXQoCiAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWxOYW1lID0+ICRDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIHB1c2ggQE1JTUVCYXNlQ2hhbm5lbHMsICRDb21tdW5pY2F0aW9uQ2hhbm5lbHtDaGFubmVsSUR9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEFSVElDTEU6CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFydGljbGUgKCByZXZlcnNlIEBBcnRpY2xlcyApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIGdyZXAgeyAkQXJ0aWNsZS0+e0NvbW11bmljYXRpb25DaGFubmVsSUR9ID09ICRfIH0gQE1JTUVCYXNlQ2hhbm5lbHMgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVBcnRpY2xlRGF0YSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUdldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JEFydGljbGV9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkQXJ0aWNsZURhdGF7RnJvbX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQ3VzdG9tZXJ7VXNlckVtYWlsfSA9ICRBcnRpY2xlRGF0YXtGcm9tfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgQVJUSUNMRTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBpZiBjdXN0b21lciBlbWFpbCBpcyB2YWxpZAogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJ7VXNlckVtYWlsfQogICAgICAgICAgICAgICAgJiYgISRDaGVja0l0ZW1PYmplY3QtPkNoZWNrRW1haWwoIEFkZHJlc3MgPT4gJEN1c3RvbWVye1VzZXJFbWFpbH0gKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQ3VzdG9tZXJ7VXNlckVtYWlsfSA9ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGlmIHdlIHN0aWxsIGhhdmUgbm8gVXNlckVtYWlsLCBkcm9wIGFuIGVycm9yCiAgICAgICAgICAgIGlmICggISRDdXN0b21lcntVc2VyRW1haWx9ICkgewogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5QWRkKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIEhpc3RvcnlUeXBlICA9PiAnTWlzYycsCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiTWFzdGVyVGlja2V0OiBubyBjdXN0b21lciBlbWFpbCBmb3VuZCwgc2VuZCBubyBtYXN0ZXIgbWVzc2FnZSB0byBjdXN0b21lci4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnU3lzdGVtIHdhcyB1bmFibGUgdG8gYWRkIGEgbmV3IGhpc3RvcnkgZW50cnkgKG5vIGN1c3RvbWVyIGVtYWlsIGZvdW5kJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbmV4dCBUSUNLRVRJRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzZXQgdGhlIG5ldyBUbyBmb3IgQXJ0aWNsZVNlbmQKICAgICAgICAgICAgJEFydGljbGV7VG99ID0gJEN1c3RvbWVye1VzZXJFbWFpbH07CgogICAgICAgICAgICAjIHJlYnVpbGQgc3ViamVjdAogICAgICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpTdWJqZWN0Q2xlYW5BbGxOdW1iZXJzJywKICAgICAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRTdWJqZWN0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3ViamVjdEJ1aWxkKAogICAgICAgICAgICAgICAgVGlja2V0TnVtYmVyID0+ICRUaWNrZXRTbGF2ZXtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgU3ViamVjdCAgICAgID0+ICRBcnRpY2xle1N1YmplY3R9IHx8ICcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBleGNoYW5nZSBDdXN0b21lciBmcm9tIE1hc3RlclRpY2tldCBmb3IgdGhlIG9uZSBpbnRvIHRoZSBTbGF2ZVRpY2tldAogICAgICAgICAgICBteSAkUmVwbGFjZU9uQ29tbXVuaWNhdGlvbkNoYW5uZWxzCiAgICAgICAgICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnUmVwbGFjZUN1c3RvbWVyUmVhbE5hbWVPblNsYXZlQXJ0aWNsZUNvbW11bmljYXRpb25DaGFubmVscycpOwogICAgICAgICAgICBteSAkQ2hhbm5lbE5hbWUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkNoYW5uZWxOYW1lR2V0KCk7CgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBkZWZpbmVkICRSZXBsYWNlT25Db21tdW5pY2F0aW9uQ2hhbm5lbHMtPnskQ2hhbm5lbE5hbWV9ICYmCiAgICAgICAgICAgICAgICAkUmVwbGFjZU9uQ29tbXVuaWNhdGlvbkNoYW5uZWxzLT57JENoYW5uZWxOYW1lfSBlcSAnMScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCRGaXJzdFNsYXZlVGlja2V0KSB7CiAgICAgICAgICAgICAgICAgICAgJEZpcnN0U2xhdmVUaWNrZXQgPSAwOwogICAgICAgICAgICAgICAgICAgICRUbXBBcnRpY2xlQm9keSAgID0gJEFydGljbGV7Qm9keX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAjIGdldCBib2R5IGZyb20gdGVtcG9yYWwgaW4gb2RlciB0byBnZXQgaXQKICAgICAgICAgICAgICAgICAgICAjIHdpdGhvdXQgY2hhbmdlcyBmcm9tIHByZXZpb3VzIHNsYXZlIHRpY2tldHMKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZXtCb2R5fSA9ICRUbXBBcnRpY2xlQm9keTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkU2VhcmNoID0gJEN1c3RvbWVyVXNlck9iamVjdC0+Q3VzdG9tZXJOYW1lKAogICAgICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICBteSAkUmVwbGFjZSA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyTmFtZSgKICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldFNsYXZle0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICkgfHwgJyc7CiAgICAgICAgICAgICAgICBpZiAoICRTZWFyY2ggJiYgJFJlcGxhY2UgKSB7CiAgICAgICAgICAgICAgICAgICAgJEFydGljbGV7Qm9keX0gPX4gc3sgXFEkU2VhcmNoXEUgfXskUmVwbGFjZX14bXNnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHNlbmQgYXJ0aWNsZSBhZ2FpbgogICAgICAgICAgICAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVTZW5kKAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICBTdWJqZWN0ICAgICAgICA9PiAkU3ViamVjdCwKICAgICAgICAgICAgICAgIENjICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgQmNjICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnU2VuZEFuc3dlcicsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAiU2VudCBhbnN3ZXIgdG8gJyRBcnRpY2xle1RvfScgYmFzZWQgb24gbWFzdGVyIHRpY2tldC4iLAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBBdHRhY2htZW50ICAgICA9PiBcQEF0dGFjaG1lbnRzLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGFydGljbGUgY3JlYXRlCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ0FydGljbGVDcmVhdGUnICkgewoKICAgICAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKICAgICAgICBteSBAQXJ0aWNsZXMgICAgICA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxIGlmICFAQXJ0aWNsZXM7CgogICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRBcnRpY2xlc1stMV0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXNbLTFdLT57QXJ0aWNsZUlEfSwKICAgICAgICApOwogICAgICAgIG15ICVBcnRpY2xlID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgPT4gJEFydGljbGVzWy0xXS0+e1RpY2tldElEfSwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlc1stMV0tPntBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgICMgbWFyayB0aWNrZXQgdG8gcHJldmVudCBhIGxvb3AKICAgICAgICAkVGlja2V0T2JqZWN0LT5IaXN0b3J5QWRkKAogICAgICAgICAgICBUaWNrZXRJRCAgICAgPT4gJFBhcmFte0RhdGF9LT57VGlja2V0SUR9LAogICAgICAgICAgICBDcmVhdGVVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICA9PiAnTWlzYycsCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAiTWFzdGVyVGlja2V0QWN0aW9uOiBBcnRpY2xlQ3JlYXRlIiwKICAgICAgICApOwoKICAgICAgICBteSAkQ2hhbm5lbE5hbWUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkNoYW5uZWxOYW1lR2V0KCk7CgogICAgICAgICMgZG8gbm90IHByb2Nlc3MgZW1haWwgYXJ0aWNsZXMgKGFscmVhZHkgZG9uZSBpbiBBcnRpY2xlU2VuZCBldmVudCEpCiAgICAgICAgaWYgKAogICAgICAgICAgICAkQXJ0aWNsZXtTZW5kZXJUeXBlfSBlcSAnYWdlbnQnCiAgICAgICAgICAgICYmICRBcnRpY2xle0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAmJiAkQ2hhbm5lbE5hbWUgZXEgJ0VtYWlsJwogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICAjIHNldCB0aGUgc2FtZSBzdGF0ZSwgYnV0IG9ubHkgZm9yIG5vdGVzCiAgICAgICAgaWYgKCAkQ2hhbm5lbE5hbWUgbmUgJ0ludGVybmFsJyApIHsKCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgIyBwZXJmb3JtIGFjdGlvbiBvbiBsaW5rZWQgdGlja2V0cwogICAgICAgIFRJQ0tFVElEOgogICAgICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICAgICAgbXkgJENoZWNrU3VjY2VzcyA9ICRTZWxmLT5fTG9vcENoZWNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBTdHJpbmcgICA9PiAnTWFzdGVyVGlja2V0QWN0aW9uOiBBcnRpY2xlQ3JlYXRlJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhJENoZWNrU3VjY2VzczsKCiAgICAgICAgICAgICMgYXJ0aWNsZSBjcmVhdGUKICAgICAgICAgICAgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgICAgICAgICAgICAgJUFydGljbGUsCiAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnQWRkTm90ZScsCiAgICAgICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnQWRkZWQgYXJ0aWNsZSBiYXNlZCBvbiBtYXN0ZXIgdGlja2V0LicsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgc3RhdGUgYWN0aW9uCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldFN0YXRlVXBkYXRlJyApIHsKCiAgICAgICAgIyBtYXJrIHRpY2tldCB0byBwcmV2ZW50IGEgbG9vcAogICAgICAgICRUaWNrZXRPYmplY3QtPkhpc3RvcnlBZGQoCiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIENyZWF0ZVVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFN0YXRlVXBkYXRlIiwKICAgICAgICApOwoKICAgICAgICAjIHBlcmZvcm0gYWN0aW9uIG9uIGxpbmtlZCB0aWNrZXRzCiAgICAgICAgVElDS0VUSUQ6CiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgICAgICBteSAkQ2hlY2tTdWNjZXNzID0gJFNlbGYtPl9Mb29wQ2hlY2soCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICdNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFN0YXRlVXBkYXRlJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhJENoZWNrU3VjY2VzczsKCiAgICAgICAgICAgICMgc2V0IHRoZSBzYW1lIHN0YXRlCiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFN0YXRlU2V0KAogICAgICAgICAgICAgICAgU3RhdGVJRCAgPT4gJFRpY2tldHtTdGF0ZUlEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBzZXQgcGVuZGluZyB0aW1lCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldFBlbmRpbmdUaW1lVXBkYXRlJyApIHsKCiAgICAgICAgIyBtYXJrIHRpY2tldCB0byBwcmV2ZW50IGEgbG9vcAogICAgICAgICRUaWNrZXRPYmplY3QtPkhpc3RvcnlBZGQoCiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIENyZWF0ZVVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFBlbmRpbmdUaW1lVXBkYXRlIiwKICAgICAgICApOwoKICAgICAgICAjIHBlcmZvcm0gYWN0aW9uIG9uIGxpbmtlZCB0aWNrZXRzCiAgICAgICAgVElDS0VUSUQ6CiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgICAgICBteSAkQ2hlY2tTdWNjZXNzID0gJFNlbGYtPl9Mb29wQ2hlY2soCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICdNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFBlbmRpbmdUaW1lVXBkYXRlJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG5leHQgVElDS0VUSUQgaWYgISRDaGVja1N1Y2Nlc3M7CgogICAgICAgICAgICAjIHNldCB0aGUgc2FtZSBwZW5kaW5nIHRpbWUKICAgICAgICAgICAgbXkgJFRpbWVTdGFtcCA9ICcwMDAwLTAwLTAwIDAwOjAwOjAwJzsKICAgICAgICAgICAgaWYgKCAkVGlja2V0e1JlYWxUaWxsVGltZU5vdFVzZWR9ICkgewogICAgICAgICAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICAgICAnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJywKICAgICAgICAgICAgICAgICAgICBPYmplY3RQYXJhbXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBFcG9jaCA9PiAkVGlja2V0e1JlYWxUaWxsVGltZU5vdFVzZWR9LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFRpbWVTdGFtcCA9ICREYXRlVGltZU9iamVjdC0+VG9TdHJpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5UaWNrZXRQZW5kaW5nVGltZVNldCgKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICRUaW1lU3RhbXAsCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBwcmlvcml0eSBhY3Rpb24KICAgIGVsc2lmICggJFBhcmFte0V2ZW50fSBlcSAnVGlja2V0UHJpb3JpdHlVcGRhdGUnICkgewoKICAgICAgICAjIG1hcmsgdGlja2V0IHRvIHByZXZlbnQgYSBsb29wCiAgICAgICAgJFRpY2tldE9iamVjdC0+SGlzdG9yeUFkZCgKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgQ3JlYXRlVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ01pc2MnLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gIk1hc3RlclRpY2tldEFjdGlvbjogVGlja2V0UHJpb3JpdHlVcGRhdGUiLAogICAgICAgICk7CgogICAgICAgICMgcGVyZm9ybSBhY3Rpb24gb24gbGlua2VkIHRpY2tldHMKICAgICAgICBUSUNLRVRJRDoKICAgICAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CiAgICAgICAgICAgIG15ICRDaGVja1N1Y2Nlc3MgPSAkU2VsZi0+X0xvb3BDaGVjaygKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgU3RyaW5nICAgPT4gJ01hc3RlclRpY2tldEFjdGlvbjogVGlja2V0UHJpb3JpdHlVcGRhdGUnLAogICAgICAgICAgICApOwogICAgICAgICAgICBuZXh0IFRJQ0tFVElEIGlmICEkQ2hlY2tTdWNjZXNzOwoKICAgICAgICAgICAgIyBzZXQgdGhlIHNhbWUgc3RhdGUKICAgICAgICAgICAgJFRpY2tldE9iamVjdC0+VGlja2V0UHJpb3JpdHlTZXQoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJFRpY2tldHtQcmlvcml0eUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgb3duZXIgYWN0aW9uCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldE93bmVyVXBkYXRlJyApIHsKCiAgICAgICAgIyBtYXJrIHRpY2tldCB0byBwcmV2ZW50IGEgbG9vcAogICAgICAgICRUaWNrZXRPYmplY3QtPkhpc3RvcnlBZGQoCiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIENyZWF0ZVVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldE93bmVyVXBkYXRlIiwKICAgICAgICApOwoKICAgICAgICAjIHBlcmZvcm0gYWN0aW9uIG9uIGxpbmtlZCB0aWNrZXRzCiAgICAgICAgVElDS0VUSUQ6CiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgICAgICBteSAkQ2hlY2tTdWNjZXNzID0gJFNlbGYtPl9Mb29wQ2hlY2soCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICdNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldE93bmVyVXBkYXRlJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhJENoZWNrU3VjY2VzczsKCiAgICAgICAgICAgICMgc2V0IHRoZSBzYW1lIHN0YXRlCiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIE5ld1VzZXJJRCAgICAgICAgICA9PiAkVGlja2V0e093bmVySUR9LAogICAgICAgICAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgcmVzcG9uc2libGUgYWN0aW9uCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldFJlc3BvbnNpYmxlVXBkYXRlJyApIHsKCiAgICAgICAgIyBtYXJrIHRpY2tldCB0byBwcmV2ZW50IGEgbG9vcAogICAgICAgICRUaWNrZXRPYmplY3QtPkhpc3RvcnlBZGQoCiAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkUGFyYW17RGF0YX0tPntUaWNrZXRJRH0sCiAgICAgICAgICAgIENyZWF0ZVVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICJNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFJlc3BvbnNpYmxlVXBkYXRlIiwKICAgICAgICApOwoKICAgICAgICAjIHBlcmZvcm0gYWN0aW9uIG9uIGxpbmtlZCB0aWNrZXRzCiAgICAgICAgVElDS0VUSUQ6CiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgICAgICBteSAkQ2hlY2tTdWNjZXNzID0gJFNlbGYtPl9Mb29wQ2hlY2soCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgIFN0cmluZyAgID0+ICdNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFJlc3BvbnNpYmxlVXBkYXRlJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhJENoZWNrU3VjY2VzczsKCiAgICAgICAgICAgICMgc2V0IHRoZSBzYW1lIHN0YXRlCiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldFJlc3BvbnNpYmxlU2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIE5ld1VzZXJJRCAgICAgICAgICA9PiAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICAgICAgU2VuZE5vTm90aWZpY2F0aW9uID0+IDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgdW5sb2NrL2xvY2sgYWN0aW9uCiAgICBlbHNpZiAoICRQYXJhbXtFdmVudH0gZXEgJ1RpY2tldExvY2tVcGRhdGUnICkgewoKICAgICAgICAjIG1hcmsgdGlja2V0IHRvIHByZXZlbnQgYSBsb29wCiAgICAgICAgJFRpY2tldE9iamVjdC0+SGlzdG9yeUFkZCgKICAgICAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtEYXRhfS0+e1RpY2tldElEfSwKICAgICAgICAgICAgQ3JlYXRlVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ01pc2MnLAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gIk1hc3RlclRpY2tldEFjdGlvbjogVGlja2V0TG9ja1VwZGF0ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBwZXJmb3JtIGFjdGlvbiBvbiBsaW5rZWQgdGlja2V0cwogICAgICAgIFRJQ0tFVElEOgogICAgICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICAgICAgbXkgJENoZWNrU3VjY2VzcyA9ICRTZWxmLT5fTG9vcENoZWNrKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBTdHJpbmcgICA9PiAnTWFzdGVyVGlja2V0QWN0aW9uOiBUaWNrZXRMb2NrVXBkYXRlJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBUSUNLRVRJRCBpZiAhJENoZWNrU3VjY2VzczsKCiAgICAgICAgICAgICMgc2V0IHRoZSBzYW1lIHN0YXRlCiAgICAgICAgICAgICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICBMb2NrICAgICAgICAgICAgICAgPT4gJFRpY2tldHtMb2NrfSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBTZW5kTm9Ob3RpZmljYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKc3ViIF9Mb29wQ2hlY2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFRpY2tldElEIFN0cmluZyBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGlja2V0IG9iamVjdAogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICBteSBATGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgVXNlcklEICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2V0IHRpbWUgb2JqZWN0CiAgICBteSAkQ3VycmVudERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyk7CgogICAgZm9yIG15ICREYXRhICggcmV2ZXJzZSBATGluZXMgKSB7CiAgICAgICAgaWYgKCAkRGF0YS0+e0hpc3RvcnlUeXBlfSBlcSAnTWlzYycgJiYgJERhdGEtPntOYW1lfSBlcSAkUGFyYW17U3RyaW5nfSApIHsKICAgICAgICAgICAgbXkgJERhdGVUaW1lT2JqZWN0ID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgKICAgICAgICAgICAgICAgICdLZXJuZWw6OlN5c3RlbTo6RGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT2JqZWN0UGFyYW1zID0+IHsKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJERhdGEtPntDcmVhdGVUaW1lfSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICAgICAgJERhdGVUaW1lT2JqZWN0LT5BZGQoCiAgICAgICAgICAgICAgICBTZWNvbmRzID0+IDE1LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICREYXRlVGltZU9iamVjdCA+ICRDdXJyZW50RGF0ZVRpbWVPYmplY3QgKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0T2JqZWN0LT5IaXN0b3J5QWRkKAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIENyZWF0ZVVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ01pc2MnLAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAiTWFzdGVyVGlja2V0TG9vcDogc3RvcHBlZCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX0FydGljbGVIaXN0b3J5VHlwZUdpdmVuKCkKCkNoZWNrIGlmIGhpc3RvcnkgdHlwZSBmb3IgYXJ0aWNsZSBpcyBnaXZlbgoKICAgIG15ICRJc0hpc3RvcnlUeXBlID0gJEV2ZW50T2JqZWN0LT5fQXJ0aWNsZUhpc3RvcnlUeXBlR2l2ZW4oCiAgICAgICAgVGlja2V0SUQgICAgPT4gJFRpY2tldElELAogICAgICAgIEFydGljbGVJRCAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgSGlzdG9yeVR5cGUgPT4gJ0ZvcndhcmQnLAogICAgICAgIFVzZXJJRCAgICAgID0+ICRVc2VySUQsCiAgICApOwoKUmV0dXJucwoKICAgbXkgJElzSGlzdG9yeVR5cGUgPSAxOwoKPWN1dAoKc3ViIF9BcnRpY2xlSGlzdG9yeVR5cGVHaXZlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVGlja2V0SUQgQXJ0aWNsZUlEIEhpc3RvcnlUeXBlIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBvYmplY3QKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgbXkgJFRpY2tldElEICAgID0gJFBhcmFte1RpY2tldElEfTsKICAgIG15ICRBcnRpY2xlSUQgICA9ICRQYXJhbXtBcnRpY2xlSUR9OwogICAgbXkgJEhpc3RvcnlUeXBlID0gJFBhcmFte0hpc3RvcnlUeXBlfTsKICAgIG15ICRVc2VySUQgICAgICA9ICRQYXJhbXtVc2VySUR9OwoKICAgIG15IEBMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+ICRVc2VySUQsCiAgICApOwoKICAgIG15ICRNYXRjaGVkID0gMDsKCiAgICByZXR1cm4gJE1hdGNoZWQgaWYgIUlzQXJyYXlSZWZXaXRoRGF0YSggXEBMaW5lcyApOwoKICAgIEhJU1RPUllEQVRBOgogICAgZm9yIG15ICRIaXN0b3J5RGF0YSAoIHJldmVyc2UgQExpbmVzICkgewogICAgICAgIG5leHQgSElTVE9SWURBVEEgaWYgJEhpc3RvcnlEYXRhLT57QXJ0aWNsZUlEfSAhPSAkQXJ0aWNsZUlEOwogICAgICAgIG5leHQgSElTVE9SWURBVEEgaWYgJEhpc3RvcnlEYXRhLT57SGlzdG9yeVR5cGV9IG5lICRIaXN0b3J5VHlwZTsKCiAgICAgICAgJE1hdGNoZWQgPSAxOwoKICAgICAgICBsYXN0IEhJU1RPUllEQVRBOwogICAgfQoKICAgIHJldHVybiAkTWF0Y2hlZDsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKbXkgJFBhcmFtT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyA9PiB7CiAgICAgICAgVXNlcklEID0+IDEsCiAgICB9LAopOwpteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwpteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZCBkYXRhCm15ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ01hc3RlclNsYXZlOjpEeW5hbWljRmllbGQnKTsKbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgIE5hbWUgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkLAopOwoKbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiMgZmluZCBhbGwgY3VycmVudCBvcGVuIG1hc3RlciBzbGF2ZSB0aWNrZXRzCm15IEBUaWNrZXRJRHMgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICBSZXN1bHQgPT4gJ0FSUkFZJywKCiAgICAjIG1hc3RlciBzbGF2ZSBkeW5hbWljIGZpZWxkCiAgICAnRHluYW1pY0ZpZWxkXycgLiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgPT4gewogICAgICAgIEVxdWFscyA9PiAnTWFzdGVyJywKICAgIH0sCgogICAgU3RhdGVUeXBlICA9PiAnT3BlbicsCiAgICBVc2VySUQgICAgID0+IDEsCiAgICBQZXJtaXNzaW9uID0+ICdybycsCik7CgojIHNldCB0aWNrZXRzIHRvIHJlbW92ZWQgc28gdGhleSBhcmUgbm90IGZvbmQgbGF0ZXIgaW4gdGhlIHRlc3QgY2FzZXMKIyAgICB0aGUgdGlja2V0cyB3aWxsIGJlIHJlc3RvcmVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdAojICAgIGR1ZSB0byB0aGUgUmVzdG9yZURhdGFiYXNlIG9wdGlvbiBpbiBoZWxwZXIgb2JqZWN0CmZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICAgICAgU3RhdGUgICAgPT4gJ3JlbW92ZWQnLAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgKTsKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJUZW1wb3Jhcnkgc2V0IE1hc3RlciBUaWNrZXQ6ICRUaWNrZXRJRCB0byByZW1vdmVkIiwKICAgICk7Cn0KCiMgZGVmaW5lIHRlc3RzCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgPT4gJ01hc3RlclNsYXZlIC0gUG9zc2libGUgVmFsdWVzIEZpbHRlcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gewogICAgICAgICAgICAgICAgTWFzdGVyID0+ICdOZXcgTWFzdGVyIFRpY2tldCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIExheW91dE9iamVjdCA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IHsKICAgICAgICAgICAgRmllbGQgPT4KICAgICAgICAgICAgICAgICc8c2VsZWN0IGNsYXNzPSJEeW5hbWljRmllbGRUZXh0IE1vZGVybml6ZSIgaWQ9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgbmFtZT0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIiBzaXplPSIxIj4KICA8b3B0aW9uIHZhbHVlPSJNYXN0ZXIiPk5ldyBNYXN0ZXIgVGlja2V0PC9vcHRpb24+Cjwvc2VsZWN0PgonLAogICAgICAgICAgICBMYWJlbCA9PiAnPGxhYmVsIGlkPSJMYWJlbER5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgZm9yPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiPgpNYXN0ZXIgVGlja2V0Ogo8L2xhYmVsPgonCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdVbnNldE1hc3RlclNsYXZlIC0gUG9zc2libGUgVmFsdWVzIEZpbHRlcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnICAgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgICAgICAgICAgUG9zc2libGVWYWx1ZXNGaWx0ZXIgPT4gewogICAgICAgICAgICAgICAgTWFzdGVyICAgICAgPT4gJ05ldyBNYXN0ZXIgVGlja2V0JywKICAgICAgICAgICAgICAgIFVuc2V0TWFzdGVyID0+ICdVbnNldCBNYXN0ZXIgVGlja2V0cycsCiAgICAgICAgICAgICAgICBVbnNldFNsYXZlICA9PiAnVW5zZXQgU2xhdmUgVGlja2V0cycsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIExheW91dE9iamVjdCA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICBQYXJhbU9iamVjdCAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IHsKICAgICAgICAgICAgRmllbGQgPT4KICAgICAgICAgICAgICAgICc8c2VsZWN0IGNsYXNzPSJEeW5hbWljRmllbGRUZXh0IE1vZGVybml6ZSIgaWQ9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgbmFtZT0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIiBzaXplPSIxIj4KICA8b3B0aW9uIHZhbHVlPSJNYXN0ZXIiPk5ldyBNYXN0ZXIgVGlja2V0PC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iVW5zZXRNYXN0ZXIiPlVuc2V0IE1hc3RlciBUaWNrZXRzPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iVW5zZXRTbGF2ZSI+VW5zZXQgU2xhdmUgVGlja2V0czwvb3B0aW9uPgo8L3NlbGVjdD4KJywKICAgICAgICAgICAgTGFiZWwgPT4gJzxsYWJlbCBpZD0iTGFiZWxEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiIGZvcj0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIj4KTWFzdGVyIFRpY2tldDoKPC9sYWJlbD4KJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTWFzdGVyU2xhdmU6IE5vIHZhbHVlICcsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBDbGFzcyAgICAgICAgICAgICAgPT4gJ015Q2xhc3MnLAogICAgICAgICAgICBVc2VEZWZhdWx0VmFsdWUgICAgPT4gMCwKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiB7CiAgICAgICAgICAgIEZpZWxkID0+IDw8IkVPRiIgLiAnPC9zZWxlY3Q+JywKPHNlbGVjdCBjbGFzcz0iRHluYW1pY0ZpZWxkVGV4dCBNb2Rlcm5pemUgTXlDbGFzcyIgaWQ9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgbmFtZT0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIiBzaXplPSIxIj4KICA8b3B0aW9uIHZhbHVlPSIiPi08L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJNYXN0ZXIiPk5ldyBNYXN0ZXIgVGlja2V0PC9vcHRpb24+CkVPRgogICAgICAgICAgICBMYWJlbCA9PiAnPGxhYmVsIGlkPSJMYWJlbER5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgZm9yPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiPgpNYXN0ZXIgVGlja2V0Ogo8L2xhYmVsPgonCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdNYXN0ZXJTbGF2ZTogTm8gdmFsdWUgLyBEZWZhdWx0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICA9PiAnTXlDbGFzcycsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gewogICAgICAgICAgICBGaWVsZCA9PiA8PCJFT0YiIC4gJzwvc2VsZWN0PicsCjxzZWxlY3QgY2xhc3M9IkR5bmFtaWNGaWVsZFRleHQgTW9kZXJuaXplIE15Q2xhc3MiIGlkPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiIG5hbWU9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgc2l6ZT0iMSI+CiAgPG9wdGlvbiB2YWx1ZT0iIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPi08L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJNYXN0ZXIiPk5ldyBNYXN0ZXIgVGlja2V0PC9vcHRpb24+CkVPRgogICAgICAgICAgICBMYWJlbCA9PiAnPGxhYmVsIGlkPSJMYWJlbER5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgZm9yPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiPgpNYXN0ZXIgVGlja2V0Ogo8L2xhYmVsPgonCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdNYXN0ZXJTbGF2ZTogVmFsdWUgZGlyZWN0JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnTWFzdGVyJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgID0+ICdNeUNsYXNzJywKICAgICAgICAgICAgVXNlRGVmYXVsdFZhbHVlICAgID0+IDAsCiAgICAgICAgfSwKICAgICAgICBFeHBlY3RlZFJlc3VsdHMgPT4gewogICAgICAgICAgICBGaWVsZCA9PiA8PCJFT0YiIC4gJzwvc2VsZWN0PicsCjxzZWxlY3QgY2xhc3M9IkR5bmFtaWNGaWVsZFRleHQgTW9kZXJuaXplIE15Q2xhc3MiIGlkPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiIG5hbWU9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgc2l6ZT0iMSI+CiAgPG9wdGlvbiB2YWx1ZT0iIj4tPC9vcHRpb24+CiAgPG9wdGlvbiB2YWx1ZT0iTWFzdGVyIiBzZWxlY3RlZD0ic2VsZWN0ZWQiPk5ldyBNYXN0ZXIgVGlja2V0PC9vcHRpb24+CkVPRgogICAgICAgICAgICBMYWJlbCA9PiAnPGxhYmVsIGlkPSJMYWJlbER5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgZm9yPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiPgpNYXN0ZXIgVGlja2V0Ogo8L2xhYmVsPgonCiAgICAgICAgfSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICdNYXN0ZXJTbGF2ZTogTWFuZGF0b3J5JywKICAgICAgICBDb25maWcgPT4gewogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgICAgICAgICAgTGF5b3V0T2JqZWN0ICAgICAgID0+ICRMYXlvdXRPYmplY3QsCiAgICAgICAgICAgIFBhcmFtT2JqZWN0ICAgICAgICA9PiAkUGFyYW1PYmplY3QsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnTWFzdGVyJywKICAgICAgICAgICAgQ2xhc3MgICAgICAgICAgICAgID0+ICdNeUNsYXNzJywKICAgICAgICAgICAgVXNlRGVmYXVsdFZhbHVlICAgID0+IDAsCiAgICAgICAgICAgIE1hbmRhdG9yeSAgICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgRXhwZWN0ZWRSZXN1bHRzID0+IHsKICAgICAgICAgICAgRmllbGQgPT4KICAgICAgICAgICAgICAgICc8c2VsZWN0IGNsYXNzPSJEeW5hbWljRmllbGRUZXh0IE1vZGVybml6ZSBNeUNsYXNzIFZhbGlkYXRlX1JlcXVpcmVkIiBpZD0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIiBuYW1lPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiIHNpemU9IjEiPgogIDxvcHRpb24gdmFsdWU9IiI+LTwvb3B0aW9uPgogIDxvcHRpb24gdmFsdWU9Ik1hc3RlciIgc2VsZWN0ZWQ9InNlbGVjdGVkIj5OZXcgTWFzdGVyIFRpY2tldDwvb3B0aW9uPgo8L3NlbGVjdD4KPGRpdiBpZD0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgIDxwPgogICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQuCiAgICA8L3A+CjwvZGl2PgonLAogICAgICAgICAgICBMYWJlbCA9PiAnPGxhYmVsIGlkPSJMYWJlbER5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgZm9yPSJEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiIGNsYXNzPSJNYW5kYXRvcnkiPgogICAgPHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4KTWFzdGVyIFRpY2tldDoKPC9sYWJlbD4KJwogICAgICAgIH0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICA9PiAnTWFzdGVyU2xhdmU6IFNlcnZlciBFcnJvcicsCiAgICAgICAgQ29uZmlnID0+IHsKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEsCiAgICAgICAgICAgIExheW91dE9iamVjdCAgICAgICA9PiAkTGF5b3V0T2JqZWN0LAogICAgICAgICAgICBQYXJhbU9iamVjdCAgICAgICAgPT4gJFBhcmFtT2JqZWN0LAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ01hc3RlcicsCiAgICAgICAgICAgIENsYXNzICAgICAgICAgICAgICA9PiAnTXlDbGFzcycsCiAgICAgICAgICAgIFVzZURlZmF1bHRWYWx1ZSAgICA9PiAwLAogICAgICAgICAgICBTZXJ2ZXJFcnJvciAgICAgICAgPT4gMSwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlICAgICAgID0+ICdUaGlzIGlzIGFuIGVycm9yLicKICAgICAgICB9LAogICAgICAgIEV4cGVjdGVkUmVzdWx0cyA9PiB7CiAgICAgICAgICAgIEZpZWxkID0+CiAgICAgICAgICAgICAgICAnPHNlbGVjdCBjbGFzcz0iRHluYW1pY0ZpZWxkVGV4dCBNb2Rlcm5pemUgTXlDbGFzcyBTZXJ2ZXJFcnJvciIgaWQ9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSIgbmFtZT0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIiBzaXplPSIxIj4KICA8b3B0aW9uIHZhbHVlPSIiPi08L29wdGlvbj4KICA8b3B0aW9uIHZhbHVlPSJNYXN0ZXIiIHNlbGVjdGVkPSJzZWxlY3RlZCI+TmV3IE1hc3RlciBUaWNrZXQ8L29wdGlvbj4KPC9zZWxlY3Q+CjxkaXYgaWQ9IkR5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICA8cD4KICAgICAgICBUaGlzIGlzIGFuIGVycm9yLgogICAgPC9wPgo8L2Rpdj4KJywKICAgICAgICAgICAgTGFiZWwgPT4gJzxsYWJlbCBpZD0iTGFiZWxEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiIGZvcj0iRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIj4KTWFzdGVyIFRpY2tldDoKPC9sYWJlbD4KJwogICAgICAgIH0sCiAgICB9LAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGV4ZWN1dGUgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgbXkgJEZpZWxkSFRNTCA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5FZGl0RmllbGRSZW5kZXIoICV7ICRUZXN0LT57Q29uZmlnfSB9ICk7CgogICAgIyBoZXJlZG9jcyBhbHdheXMgaGF2ZSB0aGUgbmV3bGluZSwgZXZlbiBpZiBpdCBpcyBub3QgZXhwZWN0ZWQKICAgIGlmICggJEZpZWxkSFRNTC0+e0ZpZWxkfSAhfiBte1xuJH0gKSB7CiAgICAgICAgY2hvbXAgJFRlc3QtPntFeHBlY3RlZFJlc3VsdHN9LT57RmllbGR9OwogICAgfQoKICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAkRmllbGRIVE1MLAogICAgICAgICRUZXN0LT57RXhwZWN0ZWRSZXN1bHRzfSwKICAgICAgICAiJFRlc3QtPntOYW1lfSB8IEVkaXRGaWVsZFJlbmRlcigpIiwKICAgICk7Cn0KCiMgQ2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZS4KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoSXNIYXNoUmVmV2l0aERhdGEpOwoKIyBnZXQgbmVlZGVkIG9iamVjdHMKbXkgJFRpY2tldE9iamVjdCAgICAgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7Cm15ICRMaW5rT2JqZWN0ICAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgbWFzdGVyL3NsYXZlIGR5bmFtaWMgZmllbGQgZGF0YQpteSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJyk7Cm15ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICBOYW1lID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCwKKTsKCiMgZ2V0IHJhbmRvbSBJRApteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyBjcmVhdGUgdGVzdCB0aWNrZXRzCm15IEBUaWNrZXRJRHM7Cm15IEBUaWNrZXROdW1iZXJzOwpmb3IgbXkgJFRpY2tldCAoIDEgLi4gMyApIHsKICAgIG15ICRUaWNrZXROdW1iZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGVOdW1iZXIoKTsKICAgIG15ICRUaWNrZXRJRCAgICAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgVE4gICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgVGl0bGUgICAgICAgID0+ICdVbml0IHRlc3QgdGlja2V0ICcgLiAkUmFuZG9tSUQgLiAnICcgLiAkVGlja2V0LAogICAgICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICduZXcnLAogICAgICAgIEN1c3RvbWVyTm8gICA9PiAnMTIzNDY1JywKICAgICAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQGV4YW1wbGUuY29tJywKICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkVGlja2V0SUQsCiAgICAgICAgIlRpY2tldENyZWF0ZSgpIFRpY2tldCBJRCAkVGlja2V0SUQgLSBUTjogJFRpY2tldE51bWJlciIsCiAgICApOwogICAgcHVzaCBAVGlja2V0SURzLCAgICAgJFRpY2tldElEOwogICAgcHVzaCBAVGlja2V0TnVtYmVycywgJFRpY2tldE51bWJlcjsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3QgbWFzdGVyL3NsYXZlIHRpY2tldCB2YWx1ZSBzZXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBzZXQgZmlyc3QgdGVzdCB0aWNrZXQgYXMgbWFzdGVyIHRpY2tldApteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1swXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnTWFzdGVyJywKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlZhbHVlU2V0KCkgVGlja2V0IElEICRUaWNrZXRJRHNbMF0gRHluYW1pY0ZpZWxkICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCB1cGRhdGVkIGFzIE1hc3RlclRpY2tldCIsCik7CgojIHNldCBzZWNvbmQgdGVzdCB0aWNrZXQgYXMgc2xhdmUgdGlja2V0CiRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEsCiAgICBGaWVsZElEICAgICAgICAgICAgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YS0+e0lEfSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SURzWzFdLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICJTbGF2ZU9mOiRUaWNrZXROdW1iZXJzWzBdIiwKICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlZhbHVlU2V0KCkgVGlja2V0IElEICRUaWNrZXRJRHNbMV0gRHluYW1pY0ZpZWxkICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCB1cGRhdGVkIGFzIFNsYXZlT2Y6JFRpY2tldE51bWJlcnNbMF0iLAopOwoKIyB2ZXJpZnkgdGhlcmUgaXMgcGFyZW50LWNoaWxkIGxpbmsgYmV0d2VlbiBtYXN0ZXIvc2xhdmUgdGlja2V0cwpteSAlTGlua0tleUxpc3QgPSAkTGlua09iamVjdC0+TGlua0tleUxpc3QoCiAgICBPYmplY3QxICAgPT4gJ1RpY2tldCcsCiAgICBLZXkxICAgICAgPT4gJFRpY2tldElEc1swXSwKICAgIE9iamVjdDIgICA9PiAnVGlja2V0JywKICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgVHlwZSAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICBEaXJlY3Rpb24gPT4gJ0JvdGgnLAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJUxpbmtLZXlMaXN0ICkgPyAxIDogMCwKICAgICJMaW5rS2V5TGlzdCgpIE1hc3Rlci9TbGF2ZSBsaW5rIGZvdW5kIC0gVGlja2V0IElEICRUaWNrZXRJRHNbMF0gYW5kICRUaWNrZXRJRHNbMV0iLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3QgVW5zZXRNYXN0ZXJ8VW5zZXRTbGF2ZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGVuYWJsZSB0aGUgTWFzdGVyU2xhdmU6OktlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQgc3lzY29uZmlnCiRTdWNjZXNzID0gJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpLZWVwUGFyZW50Q2hpbGRBZnRlclVuc2V0JywKICAgIFZhbHVlID0+IDEKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTZXQoKSBzeXNjb25maWcgS2VlcFBhcmVudENoaWxkQWZ0ZXJVbnNldCAtIGVuYWJsZWQiLAopOwoKIyBzZXQgc2Vjb25kIHRpY2tldCBhcyBzbGF2ZSB0aWNrZXQgYWdhaW4KJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgIEZpZWxkSUQgICAgICAgICAgICA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLT57SUR9LAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRHNbMV0sCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gIlNsYXZlT2Y6JFRpY2tldE51bWJlcnNbMF0iLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVmFsdWVTZXQoKSBUaWNrZXQgSUQgJFRpY2tldElEc1sxXSBEeW5hbWljRmllbGQgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIHVwZGF0ZWQgYWdhaW4gYXMgU2xhdmVPZjokVGlja2V0TnVtYmVyc1swXSIsCik7CgojIHZlcmlmeSB0aGVyZSBpcyBwYXJlbnQtY2hpbGQgbGluayBiZXR3ZWVuIG1hc3Rlci9zbGF2ZSB0aWNrZXRzCiVMaW5rS2V5TGlzdCA9ICRMaW5rT2JqZWN0LT5MaW5rS2V5TGlzdCgKICAgIE9iamVjdDEgICA9PiAnVGlja2V0JywKICAgIEtleTEgICAgICA9PiAkVGlja2V0SURzWzBdLAogICAgT2JqZWN0MiAgID0+ICdUaWNrZXQnLAogICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICBUeXBlICAgICAgPT4gJ1BhcmVudENoaWxkJywKICAgIERpcmVjdGlvbiA9PiAnVGFyZ2V0JywKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJUxpbmtLZXlMaXN0ICkgPyAxIDogMCwKICAgICJMaW5rS2V5TGlzdCgpIE1hc3Rlci9TbGF2ZSBsaW5rIGZvdW5kIC0gVGlja2V0IElEICRUaWNrZXRJRHNbMF0gYW5kICRUaWNrZXRJRHNbMV0iLAopOwoKIyBVbnNldE1hc3RlciB2YWx1ZSBmcm9tIGZpcnN0IHRpY2tldAokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1swXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnVW5zZXRNYXN0ZXInLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVmFsdWVTZXQoKSBUaWNrZXQgSUQgJFRpY2tldElEc1swXSBEeW5hbWljRmllbGQgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIHVwZGF0ZWQgYXMgVW5zZXRNYXN0ZXIiLAopOwoKIyBVbnNldFNsYXZlIHZhbHVlIGZyb20gc2Vjb25kIHRpY2tldAokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1sxXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnVW5zZXRTbGF2ZScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkVGlja2V0SURzWzFdIER5bmFtaWNGaWVsZCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgdXBkYXRlZCBhcyBVbnNldFNsYXZlIiwKKTsKCiMgdmVyaWZ5IHRoZXJlIGlzIHN0aWxsIHBhcmVudC1jaGlsZCBsaW5rIGJldHdlZW4gdHdvIHRpY2tldHMKJUxpbmtLZXlMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtLZXlMaXN0KAogICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgS2V5MSAgICAgID0+ICRUaWNrZXRJRHNbMF0sCiAgICBPYmplY3QyICAgPT4gJ1RpY2tldCcsCiAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgIFR5cGUgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgRGlyZWN0aW9uID0+ICdUYXJnZXQnLAogICAgVXNlcklEICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlTGlua0tleUxpc3QgKSA/IDEgOiAwLAogICAgIkxpbmtLZXlMaXN0KCkgTWFzdGVyL1NsYXZlIGxpbmsgZm91bmQgLSBUaWNrZXQgSUQgJFRpY2tldElEc1swXSBhbmQgJFRpY2tldElEc1sxXSAtIEtlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQgc3lzY29uZmlnIGVuYWJsZWQiLAopOwoKIyBkaXNhYmxlIHRoZSBNYXN0ZXJTbGF2ZTo6S2VlcFBhcmVudENoaWxkQWZ0ZXJVbnNldCBzeXNjb25maWcKJFN1Y2Nlc3MgPSAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnTWFzdGVyU2xhdmU6OktlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQnLAogICAgVmFsdWUgPT4gMAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlNldCgpIHN5c2NvbmZpZyBLZWVwUGFyZW50Q2hpbGRBZnRlclVuc2V0IC0gZGlzYWJsZWQiLAopOwoKIyByZW1vdmUgcGFyZW50LWNoaWxkIGxpbmsgYmV0d2VlbiB0d28gdGlja2V0cwokU3VjY2VzcyA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlQWxsKAogICAgT2JqZWN0ID0+ICdUaWNrZXQnLAogICAgS2V5ICAgID0+ICRUaWNrZXRJRHNbMF0sCiAgICBVc2VySUQgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJMaW5rRGVsZXRlQWxsKCkgcGFyZW50LWNoaWxkIGxpbmsgZm9yIHRpY2tldCBJRCAkVGlja2V0SURzWzBdIC0gcmVtb3ZlZCIsCik7CgojIHNldCBmaXJzdCB0ZXN0IHRpY2tldCBhcyBtYXN0ZXIgdGlja2V0CiRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEsCiAgICBGaWVsZElEICAgICAgICAgICAgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YS0+e0lEfSwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkVGlja2V0SURzWzBdLAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICdNYXN0ZXInLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVmFsdWVTZXQoKSBUaWNrZXQgSUQgJFRpY2tldElEc1swXSBEeW5hbWljRmllbGQgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIHVwZGF0ZWQgYXMgTWFzdGVyVGlja2V0IiwKKTsKCiMgc2V0IHNlY29uZCB0ZXN0IHRpY2tldCBhcyBzbGF2ZSB0aWNrZXQKJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgIEZpZWxkSUQgICAgICAgICAgICA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLT57SUR9LAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRHNbMV0sCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gIlNsYXZlT2Y6JFRpY2tldE51bWJlcnNbMF0iLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVmFsdWVTZXQoKSBUaWNrZXQgSUQgJFRpY2tldElEc1sxXSBEeW5hbWljRmllbGQgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIHVwZGF0ZWQgYXMgU2xhdmVPZjokVGlja2V0TnVtYmVyc1swXSIsCik7CgojIHZlcmlmeSB0aGVyZSBpcyBzdGlsbCBwYXJlbnQtY2hpbGQgbGluayBiZXR3ZWVuIHR3byB0aWNrZXRzCiVMaW5rS2V5TGlzdCA9ICRMaW5rT2JqZWN0LT5MaW5rS2V5TGlzdCgKICAgIE9iamVjdDEgICA9PiAnVGlja2V0JywKICAgIEtleTEgICAgICA9PiAkVGlja2V0SURzWzBdLAogICAgT2JqZWN0MiAgID0+ICdUaWNrZXQnLAogICAgU3RhdGUgICAgID0+ICdWYWxpZCcsCiAgICBUeXBlICAgICAgPT4gJ1BhcmVudENoaWxkJywKICAgIERpcmVjdGlvbiA9PiAnVGFyZ2V0JywKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJUxpbmtLZXlMaXN0ICkgPyAxIDogMCwKICAgICJMaW5rS2V5TGlzdCgpIE1hc3Rlci9TbGF2ZSBsaW5rIGZvdW5kIC0gVGlja2V0IElEICRUaWNrZXRJRHNbMF0gYW5kICRUaWNrZXRJRHNbMV0iLAopOwoKIyBVbnNldE1hc3RlciB2YWx1ZSBmcm9tIGZpcnN0IHRpY2tldAokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1swXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnVW5zZXRNYXN0ZXInLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVmFsdWVTZXQoKSBUaWNrZXQgSUQgJFRpY2tldElEc1swXSBEeW5hbWljRmllbGQgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIHVwZGF0ZWQgYXMgVW5zZXRNYXN0ZXIiLAopOwoKIyBVbnNldFNsYXZlIHZhbHVlIGZyb20gc2Vjb25kIHRpY2tldAokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1sxXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAnVW5zZXRTbGF2ZScsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkVGlja2V0SURzWzFdIER5bmFtaWNGaWVsZCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgdXBkYXRlZCBhcyBVbnNldFNsYXZlIiwKKTsKCiMgdmVyaWZ5IHRoZXJlIGlzIG5vIG1vcmUgcGFyZW50LWNoaWxkIGxpbmsgYmV0d2VlbiB0d28gdGlja2V0cwolTGlua0tleUxpc3QgPSAkTGlua09iamVjdC0+TGlua0tleUxpc3QoCiAgICBPYmplY3QxICAgPT4gJ1RpY2tldCcsCiAgICBLZXkxICAgICAgPT4gJFRpY2tldElEc1swXSwKICAgIE9iamVjdDIgICA9PiAnVGlja2V0JywKICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgVHlwZSAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICBEaXJlY3Rpb24gPT4gJ1RhcmdldCcsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAhSXNIYXNoUmVmV2l0aERhdGEoIFwlTGlua0tleUxpc3QgKSwKICAgICJMaW5rS2V5TGlzdCgpIE1hc3Rlci9TbGF2ZSBsaW5rIHJlbW92ZWQgLSBUaWNrZXQgSUQgJFRpY2tldElEc1swXSBhbmQgJFRpY2tldElEc1sxXSAtIEtlZXBQYXJlbnRDaGlsZEFmdGVyVW5zZXQgc3lzY29uZmlnIGRpc2FibGVkIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IHVwZGF0ZSBNYXN0ZXJ8U2xhdmUgZmllbGQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBlbmFibGUgdGhlIE1hc3RlclNsYXZlOjpLZWVwUGFyZW50Q2hpbGRBZnRlclVwZGF0ZSBzeXNjb25maWcKJFN1Y2Nlc3MgPSAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnTWFzdGVyU2xhdmU6OktlZXBQYXJlbnRDaGlsZEFmdGVyVXBkYXRlJywKICAgIFZhbHVlID0+IDEKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJTZXQoKSBzeXNjb25maWcgS2VlcFBhcmVudENoaWxkQWZ0ZXJVcGRhdGUgLSBlbmFibGVkIiwKKTsKCiMgc2V0IGZpcnN0IHRlc3QgdGlja2V0IGFzIG1hc3RlciB0aWNrZXQKJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgIEZpZWxkSUQgICAgICAgICAgICA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLT57SUR9LAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRHNbMF0sCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ01hc3RlcicsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkVGlja2V0SURzWzBdIER5bmFtaWNGaWVsZCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgdXBkYXRlZCBhcyBNYXN0ZXJUaWNrZXQiLAopOwoKIyBzZXQgc2Vjb25kIHRlc3QgdGlja2V0IGFzIG1hc3RlciB0aWNrZXQKJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YSwKICAgIEZpZWxkSUQgICAgICAgICAgICA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLT57SUR9LAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRHNbMV0sCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gIk1hc3RlciIsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkVGlja2V0SURzWzFdIER5bmFtaWNGaWVsZCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgdXBkYXRlZCBhcyBNYXN0ZXJUaWNrZXQiLAopOwoKIyBzZXQgdGhpcmQgdGVzdCB0aWNrZXQgYXMgc2xhdmUgb2Ygc2Vjb25kIHRpY2tldAokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1syXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAiU2xhdmVPZjokVGlja2V0TnVtYmVyc1sxXSIsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkVGlja2V0SURzWzJdIER5bmFtaWNGaWVsZCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgdXBkYXRlZCBhcyBTbGF2ZU9mOiRUaWNrZXROdW1iZXJzWzFdIiwKKTsKCiMgdmVyaWZ5IHRoZXJlIGlzIHBhcmVudC1jaGlsZCBsaW5rIGJldHdlZW4gdHdvIHRpY2tldHMKJUxpbmtLZXlMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtLZXlMaXN0KAogICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgS2V5MSAgICAgID0+ICRUaWNrZXRJRHNbMV0sCiAgICBPYmplY3QyICAgPT4gJ1RpY2tldCcsCiAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgIFR5cGUgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgRGlyZWN0aW9uID0+ICdUYXJnZXQnLAogICAgVXNlcklEICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgSXNIYXNoUmVmV2l0aERhdGEoIFwlTGlua0tleUxpc3QgKSA/IDEgOiAwLAogICAgIkxpbmtLZXlMaXN0KCkgTWFzdGVyL1NsYXZlIGxpbmsgZm91bmQgLSBUaWNrZXQgSUQgJFRpY2tldElEc1sxXSBhbmQgJFRpY2tldElEc1syXSIsCik7CgojIHNldCBzZWNvbmQgdGlja2V0IGFzIHNsYXZlIG9mIGZpcnN0IHRpY2tldAokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhLAogICAgRmllbGRJRCAgICAgICAgICAgID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFRpY2tldElEc1sxXSwKICAgIFZhbHVlICAgICAgICAgICAgICA9PiAiU2xhdmVPZjokVGlja2V0TnVtYmVyc1swXSIsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkVGlja2V0SURzWzFdIER5bmFtaWNGaWVsZCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgdXBkYXRlZCBhcyBTbGF2ZU9mOiRUaWNrZXROdW1iZXJzWzBdIiwKKTsKCiMgdmVyaWZ5IHRoZXJlIHBhcmVudC1jaGlsZC1wYXJlbnQgbGluayBiZXR3ZWVuIHRocmVlIHRpY2tldHMKJUxpbmtLZXlMaXN0ID0gJExpbmtPYmplY3QtPkxpbmtLZXlMaXN0KAogICAgT2JqZWN0MSAgID0+ICdUaWNrZXQnLAogICAgS2V5MSAgICAgID0+ICRUaWNrZXRJRHNbMV0sCiAgICBPYmplY3QyICAgPT4gJ1RpY2tldCcsCiAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgIFR5cGUgICAgICA9PiAnUGFyZW50Q2hpbGQnLAogICAgRGlyZWN0aW9uID0+ICdCb3RoJywKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgIElzSGFzaFJlZldpdGhEYXRhKCBcJUxpbmtLZXlMaXN0ICksCiAgICAiTGlua0tleUxpc3QoKSBNYXN0ZXIvU2xhdmUgbGluayBmb3VuZCAtIFRpY2tldCBJRCAkVGlja2V0SURzWzBdLCAkVGlja2V0SURzWzFdIGFuZCAkVGlja2V0SURzWzJdIC0gS2VlcFBhcmVudENoaWxkQWZ0ZXJVcGRhdGUgc3lzY29uZmlnIGVuYWJsZWQiLAopOwoKIyBDbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlLgoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBFbmFibGUgdGhlIFVuc2V0TWFzdGVyU2xhdmUgY29uZmlnLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdNYXN0ZXJTbGF2ZTo6VW5zZXRNYXN0ZXJTbGF2ZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyIGFuZCBsb2cgaW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFkbWluR2VuZXJpY0FnZW50IHNjcmVlbiBmb3IgbmV3IGpvYiBhZGRpbmcuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5HZW5lcmljQWdlbnQ7U3ViYWN0aW9uPVVwZGF0ZSIpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nOyIgKTsKCiAgICAgICAgIyBFeHBhbmQgYXBwcm9wcmlhdGUgd2lkZ2V0LgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnLldpZGdldFNpbXBsZS5Db2xsYXBzZWQ6Y29udGFpbnMoXCJVcGRhdGUvQWRkIFRpY2tldCBBdHRyaWJ1dGVzXCIpIC5XaWRnZXRBY3Rpb24uVG9nZ2xlIGEnKS50cmlnZ2VyKCdjbGljaycpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIFwkKCcuV2lkZ2V0U2ltcGxlLkV4cGFuZGVkJykubGVuZ3RoOyIKICAgICAgICApOwoKICAgICAgICAjIEFkZCBhcHByb3ByaWF0ZSBkeW5hbWljIGZpZWxkLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0FkZE5ld0R5bmFtaWNGaWVsZHMnKS52YWwoJ0R5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJyNTZWxlY3RlZE5ld0R5bmFtaWNGaWVsZHMgI0R5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZScpLmxlbmd0aDsiCiAgICAgICAgKTsKCiAgICAgICAgIyBWZXJpZnkgcG9zc2libGUgTWFzdGVyU2xhdmUgdmFsdWVzICdVbnNldE1hc3RlcicgYW5kICdVbnNldFNsYXZlJyBpbiAnVXBkYXRlL0FkZCBUaWNrZXQgQXR0cmlidXRlcycgd2lkZ2V0LgogICAgICAgICMgU2VlIGJ1ZyMxNDc3OCAoaHR0cHM6Ly9idWdzLm90cnMub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc3OCkuCiAgICAgICAgZm9yIG15ICRPcHRpb24gKHF3KFVuc2V0TWFzdGVyIFVuc2V0U2xhdmUpKSB7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIG9wdGlvblt2YWx1ZT0kT3B0aW9uXScpLmxlbmd0aDsiKSwKICAgICAgICAgICAgICAgICJNYXN0ZXJTbGF2ZSBvcHRpb24gJyRPcHRpb24nIGlzIGF2YWlsYWJsZS4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIERpc2FibGUgdGhlIFVuc2V0TWFzdGVyU2xhdmUgY29uZmlnLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdNYXN0ZXJTbGF2ZTo6VW5zZXRNYXN0ZXJTbGF2ZScsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBSZWZyZXNoIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkUmVmcmVzaCgpOwoKICAgICAgICAjIEV4cGFuZCBhcHByb3ByaWF0ZSB3aWRnZXQuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcuV2lkZ2V0U2ltcGxlLkNvbGxhcHNlZDpjb250YWlucyhcIlVwZGF0ZS9BZGQgVGlja2V0IEF0dHJpYnV0ZXNcIikgLldpZGdldEFjdGlvbi5Ub2dnbGUgYScpLnRyaWdnZXIoJ2NsaWNrJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gXCQoJy5XaWRnZXRTaW1wbGUuRXhwYW5kZWQnKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICMgQWRkIGFwcHJvcHJpYXRlIGR5bmFtaWMgZmllbGQuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjQWRkTmV3RHluYW1pY0ZpZWxkcycpLnZhbCgnRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiBcJCgnI1NlbGVjdGVkTmV3RHluYW1pY0ZpZWxkcyAjRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlJykubGVuZ3RoOyIKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSBwb3NzaWJsZSBNYXN0ZXJTbGF2ZSB2YWx1ZXMgJ1Vuc2V0TWFzdGVyJyBhbmQgJ1Vuc2V0U2xhdmUnIGFyZSBub3QgYXZhaWxhYmxlCiAgICAgICAgIyAgIGluICdVcGRhdGUvQWRkIFRpY2tldCBBdHRyaWJ1dGVzJyB3aWRnZXQuCiAgICAgICAgZm9yIG15ICRPcHRpb24gKHF3KFVuc2V0TWFzdGVyIFVuc2V0U2xhdmUpKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI0R5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZSBvcHRpb25bdmFsdWU9JE9wdGlvbl0nKS5sZW5ndGg7IiksCiAgICAgICAgICAgICAgICAiTWFzdGVyU2xhdmUgb3B0aW9uICckT3B0aW9uJyBpcyBub3QgYXZhaWxhYmxlLiIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgojIENyZWF0ZSBsb2NhbCBmdW5jdGlvbiBmb3Igd2FpdCBvbiBBSkFYIHVwZGF0ZS4KbXkgJFdhaXRGb3JBSkFYID0gc3ViIHsKCiAgICBUaW1lOjpIaVJlczo6c2xlZXAoMC4yKTsKCiAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAhJCgic3Bhbi5BSkFYTG9hZGVyOnZpc2libGUiKS5sZW5ndGg7JwogICAgKTsKfTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIEVuYWJsZSB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpBZHZhbmNlZEVuYWJsZWQnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgRG8gbm90IGNoZWNrIFJpY2hUZXh0LgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdGcm9udGVuZDo6UmljaFRleHQnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgRG8gbm90IGNoZWNrIHNlcnZpY2UgYW5kIHR5cGUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgIFZhbHVlID0+IDAKICAgICAgICApOwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OlR5cGUnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgRG8gbm90IHNlbmQgZW1haWxzLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdTZW5kbWFpbE1vZHVsZScsCiAgICAgICAgICAgIFZhbHVlID0+ICdLZXJuZWw6OlN5c3RlbTo6RW1haWw6OlRlc3QnLAogICAgICAgICk7CgogICAgICAgICMgQWRkIHRlc3QgY3VzdG9tZXIgZm9yIHRlc3RpbmcuCiAgICAgICAgbXkgJFRlc3RDdXN0b21lckxvZ2luUGhvbmUgPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgdXNlciBhbmQgbG9naW4uCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50VGlja2V0UGhvbmUgc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0UGhvbmUiKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yalF1ZXJ5RXZlbnRCb3VuZCgKICAgICAgICAgICAgQ1NTU2VsZWN0b3IgPT4gJyNEZXN0JywKICAgICAgICAgICAgRXZlbnQgICAgICAgPT4gJ2NoYW5nZScsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNEZXN0JykudmFsKCcyfHxSYXcnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwoKICAgICAgICAjIFdhaXQgZm9yIEFKQVggdG8gZmluaXNoLgogICAgICAgICRXYWl0Rm9yQUpBWC0+KCk7CgogICAgICAgIG15ICRNYXN0ZXJUaWNrZXRTdWJqZWN0ID0gIk1hc3RlciBUaWNrZXQiOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0Zyb21DdXN0b21lciIsICdjc3MnICktPnNlbmRfa2V5cygkVGVzdEN1c3RvbWVyTG9naW5QaG9uZSk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImxpLnVpLW1lbnUtaXRlbTp2aXNpYmxlIikubGVuZ3RoOycgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCdsaS51aS1tZW51LWl0ZW06bnRoLWNoaWxkKDEpIGEnKS50cmlnZ2VyKCdjbGljaycpOyIsCiAgICAgICAgKTsKCiAgICAgICAgIyBXYWl0IGZvciBBSkFYIHRvIGZpbmlzaC4KICAgICAgICAkV2FpdEZvckFKQVgtPigpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJqZWN0IiwgICdjc3MnICktPnNlbmRfa2V5cygkTWFzdGVyVGlja2V0U3ViamVjdCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUmljaFRleHQiLCAnY3NzJyApLT5zZW5kX2tleXMoJ1NlbGVuaXVtIGJvZHkgdGVzdCcpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0R5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZScpLnZhbCgnTWFzdGVyJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiCiAgICAgICAgKTsKCiAgICAgICAgIyBXYWl0IGZvciBBSkFYIHRvIGZpbmlzaC4KICAgICAgICAkV2FpdEZvckFKQVgtPigpOwoKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNzdWJtaXRSaWNoVGV4dCcpWzBdLnNjcm9sbEludG9WaWV3KHRydWUpOyIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNzdWJtaXRSaWNoVGV4dCcpLmxlbmd0aDsiCiAgICAgICAgICAgICksCiAgICAgICAgICAgICJFbGVtZW50ICcjc3VibWl0UmljaFRleHQnIGlzIGZvdW5kIGluIHRoZSBzY3JlZW4iCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNzdWJtaXRSaWNoVGV4dCIsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICAgICAgIyBHZXQgbWFzdGVyIHRlc3QgcGhvbmUgdGlja2V0IGRhdGEuCiAgICAgICAgbXkgKCAkTWFzdGVyVGlja2V0SUQsICRNYXN0ZXJUaWNrZXROdW1iZXIgKSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlYXJjaCgKICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0hBU0gnLAogICAgICAgICAgICBMaW1pdCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkVGVzdEN1c3RvbWVyTG9naW5QaG9uZSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJE1hc3RlclRpY2tldElELAogICAgICAgICAgICAiTWFzdGVyIFRpY2tldElEIC0gJE1hc3RlclRpY2tldElEIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkTWFzdGVyVGlja2V0TnVtYmVyLAogICAgICAgICAgICAiTWFzdGVyIFRpY2tldE51bWJlciAtICRNYXN0ZXJUaWNrZXROdW1iZXIiLAogICAgICAgICk7CgogICAgICAgICMgQWRkIG5ldyB0ZXN0IGN1c3RvbWVyIGZvciB0ZXN0aW5nLgogICAgICAgIG15ICRUZXN0Q3VzdG9tZXJMb2dpbnNFbWFpbCA9ICRIZWxwZXItPlRlc3RDdXN0b21lclVzZXJDcmVhdGUoKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFRpY2tldEVtYWlsIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldEVtYWlsIik7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcmpRdWVyeUV2ZW50Qm91bmQoCiAgICAgICAgICAgIENTU1NlbGVjdG9yID0+ICcjRGVzdCcsCiAgICAgICAgICAgIEV2ZW50ICAgICAgID0+ICdjaGFuZ2UnLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHNsYXZlIHRlc3QgZW1haWwgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjRGVzdCcpLnZhbCgnMnx8UmF3JykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKCiAgICAgICAgIyBXYWl0IGZvciBBSkFYIHRvIGZpbmlzaC4KICAgICAgICAkV2FpdEZvckFKQVgtPigpOwoKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNUb0N1c3RvbWVyIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRUZXN0Q3VzdG9tZXJMb2dpbnNFbWFpbCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoImxpLnVpLW1lbnUtaXRlbTp2aXNpYmxlIikubGVuZ3RoOycgKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJ2xpLnVpLW1lbnUtaXRlbTpudGgtY2hpbGQoMSkgYScpLnRyaWdnZXIoJ2NsaWNrJyk7IiwKICAgICAgICApOwoKICAgICAgICAjIFdhaXQgZm9yIEFKQVggdG8gZmluaXNoLgogICAgICAgICRXYWl0Rm9yQUpBWC0+KCk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1YmplY3QiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCdTbGF2ZSBUaWNrZXQnKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNSaWNoVGV4dCIsICdjc3MnICktPnNlbmRfa2V5cygnU2VsZW5pdW0gYm9keSB0ZXN0Jyk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlJykudmFsKCdTbGF2ZU9mOiRNYXN0ZXJUaWNrZXROdW1iZXInKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwoKICAgICAgICAjIFdhaXQgZm9yIEFKQVggdG8gZmluaXNoLgogICAgICAgICRXYWl0Rm9yQUpBWC0+KCk7CgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI3N1Ym1pdFJpY2hUZXh0JylbMF0uc2Nyb2xsSW50b1ZpZXcodHJ1ZSk7IiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI3N1Ym1pdFJpY2hUZXh0JykubGVuZ3RoOyIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgIkVsZW1lbnQgJyNzdWJtaXRSaWNoVGV4dCcgaXMgZm91bmQgaW4gdGhlIHNjcmVlbiIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI3N1Ym1pdFJpY2hUZXh0IiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGdldCBzbGF2ZSB0ZXN0IGVtYWlsIHRpY2tldCBkYXRhCiAgICAgICAgbXkgKCAkU2xhdmVUaWNrZXRJRCwgJFNsYXZlVGlja2V0TnVtYmVyICkgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgICAgICAgICAgTGltaXQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJFRlc3RDdXN0b21lckxvZ2luc0VtYWlsLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2xhdmVUaWNrZXRJRCwKICAgICAgICAgICAgIlNsYXZlIFRpY2tldElEIC0gJFNsYXZlVGlja2V0SUQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTbGF2ZVRpY2tldE51bWJlciwKICAgICAgICAgICAgIlNsYXZlIFRpY2tldE51bWJlciAtICRTbGF2ZVRpY2tldE51bWJlciIsCiAgICAgICAgKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byB0aWNrZXQgem9vbSBwYWdlIG9mIGNyZWF0ZWQgbWFzdGVyIHRlc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kTWFzdGVyVGlja2V0SUQiKTsKCiAgICAgICAgIyBWZXJpZnkgbWFzdGVyLXNsYXZlIHRpY2tldCBsaW5rLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFNsYXZlVGlja2V0TnVtYmVyICkgPiAtMSwKICAgICAgICAgICAgIlNsYXZlIHRpY2tldCBudW1iZXI6ICRTbGF2ZVRpY2tldE51bWJlciAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIGhpc3RvcnkgdmlldyBvZiBjcmVhdGVkIG1hc3RlciB0ZXN0IHRpY2tldC4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldEhpc3Rvcnk7VGlja2V0SUQ9JE1hc3RlclRpY2tldElEIik7CgogICAgICAgICMgVmVyaWZ5IGR5bmFtaWMgZmllbGQgbWFzdGVyIHRpY2tldCB1cGRhdGUuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnQ2hhbmdlZCBkeW5hbWljIGZpZWxkIE1hc3RlclNsYXZlIGZyb20gIiIgdG8gIk1hc3RlciIuJyApID4gLTEsCiAgICAgICAgICAgICJNYXN0ZXIgZHluYW1pYyBmaWVsZCB1cGRhdGUgdmFsdWUgLSBmb3VuZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byB0aWNrZXQgem9vbSBwYWdlIG9mIGNyZWF0ZWQgc2xhdmUgdGVzdCB0aWNrZXQuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRTbGF2ZVRpY2tldElEIik7CgogICAgICAgICMgVmVyaWZ5IHNsYXZlLW1hc3RlciB0aWNrZXQgbGluawogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJE1hc3RlclRpY2tldE51bWJlciApID4gLTEsCiAgICAgICAgICAgICJNYXN0ZXIgdGlja2V0IG51bWJlcjogJE1hc3RlclRpY2tldE51bWJlciAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIGhpc3RvcnkgdmlldyBvZiBjcmVhdGVkIHNsYXZlIHRlc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0SGlzdG9yeTtUaWNrZXRJRD0kU2xhdmVUaWNrZXRJRCIpOwoKICAgICAgICAjIFZlcmlmeSBkeW5hbWljIGZpZWxkIHNsYXZlIHRpY2tldCB1cGRhdGUuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnQ2hhbmdlZCBkeW5hbWljIGZpZWxkIE1hc3RlclNsYXZlIGZyb20gIiIgdG8gIlNsYXZlT2Y6JyApID4gLTEsCiAgICAgICAgICAgICJTbGF2ZSBkeW5hbWljIGZpZWxkIHVwZGF0ZSB2YWx1ZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSB0ZXN0IHRpY2tldHMuCiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoICRNYXN0ZXJUaWNrZXRJRCwgJFNsYXZlVGlja2V0SUQgKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0RGVsZXRlKAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgVGlja2V0IGRlbGV0aW9uIGNvdWxkIGZhaWwgaWYgYXBhY2hlIHN0aWxsIHdyaXRlcyB0byB0aWNrZXQgaGlzdG9yeS4gVHJ5IGFnYWluIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICBzbGVlcCAzOwogICAgICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgLSBkZWxldGVkIgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIEVuYWJsZSB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpBZHZhbmNlZEVuYWJsZWQnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpVcGRhdGVNYXN0ZXJTbGF2ZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBEbyBub3QgY2hlY2sgUmljaFRleHQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ0Zyb250ZW5kOjpSaWNoVGV4dCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBEbyBub3Qgc2VuZCBlbWFpbHMuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlbmRtYWlsTW9kdWxlJywKICAgICAgICAgICAgVmFsdWUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbDo6VGVzdCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBEaXNhYmxlIFR5cGUgZmVhdHVyZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpUeXBlJywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIE1ha2Ugc3VyZSBJbnZvdmVkQWdlbnQgYW5kIEluZm9ybUFnZW50IGFyZSBkaXNhYmxlZCwgb3RoZXJ3aXNlIGl0IHVzZXMgcGFydCBvZiB0aGUgdmlzaWJsZQogICAgICAgICMgU2NyZWVuIG1ha2luZyB0aGUgc3VibWl0IGJ1dHRvbiBub3QgdmlzaWJsZSBhbmQgdGhlbiBub3QgY2xpY2stYWJsZS4KICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRNYXN0ZXJTbGF2ZSMjI0ludm9sdmVkQWdlbnQnLAogICAgICAgICAgICBWYWx1ZSA9PiAwLAogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNJbmZvcm1BZ2VudCcsCiAgICAgICAgICAgIFZhbHVlID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBNYWtlIHN1cmUgTm90ZSBpcyBlbmFibGVkIGluIEFnZW50VGlja2V0TWFzdGVyU2xhdmUgc2NyZWVuLgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldE1hc3RlclNsYXZlIyMjTm90ZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBHZXQgdGVzdCB1c2VyIElELgogICAgICAgIG15ICRUZXN0VXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHR3byB0ZXN0IHRpY2tldHMuCiAgICAgICAgbXkgQFRpY2tldElEczsKICAgICAgICBteSBAVGlja2V0TnVtYmVyczsKICAgICAgICBmb3IgbXkgJFRpY2tldENyZWF0ZSAoIDEgLi4gMiApIHsKICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgICAgICBteSAkVGlja2V0SUQgICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAgICAgVE4gICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NlbGVuaXVtIHRlc3QgVGlja2V0JywKICAgICAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICA9PiAnU2VsZW5pdW1DdXN0b21lcicsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ1NlbGVuaXVtQ3VzdG9tZXJAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgLSBjcmVhdGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQFRpY2tldElEcywgICAgICRUaWNrZXRJRDsKICAgICAgICAgICAgcHVzaCBAVGlja2V0TnVtYmVycywgJFRpY2tldE51bWJlcjsKICAgICAgICB9CgogICAgICAgICMgTG9naW4gYXMgdGVzdCB1c2VyLgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gdGlja2V0IHpvb20gcGFnZSBvZiBmaXJzdCBjcmVhdGVkIHRlc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Wm9vbTtUaWNrZXRJRD0kVGlja2V0SURzWzBdIik7CgogICAgICAgICMgQ2xpY2sgb24gTWFzdGVyU2xhdmUgYW5kIHN3aXRjaCB3aW5kb3cuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFnZW50VGlja2V0TWFzdGVyU2xhdmU7VGlja2V0SUQ9JFRpY2tldElEc1swXScgKV0iKQogICAgICAgICAgICAtPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBhZ2UgaGFzIGxvYWRlZCwgaWYgbmVjZXNzYXJ5LgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLldpZGdldFNpbXBsZSIpLmxlbmd0aDsnCiAgICAgICAgKTsKCiAgICAgICAgIyBPcGVuIGNvbGxhcHNlZCB3aWRnZXRzLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcuV2lkZ2V0U2ltcGxlLkNvbGxhcHNlZCAuV2lkZ2V0QWN0aW9uID4gYScpLnRyaWdnZXIoJ2NsaWNrJyk7IgogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiLldpZGdldFNpbXBsZS5FeHBhbmRlZCIpLmxlbmd0aDsnCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBwYWdlLgogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUgU3ViamVjdCBSaWNoVGV4dCBGaWxlVXBsb2FkIElzVmlzaWJsZUZvckN1c3RvbWVyIHN1Ym1pdFJpY2hUZXh0KQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgU2V0IGZpcnN0IHRlc3QgdGlja2V0IGFzIG1hc3RlciB0aWNrZXQuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlJykudmFsKCdNYXN0ZXInKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1YmplY3QiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCdTZWxlbml1bSBNYXN0ZXIgVGlja2V0Jyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUmljaFRleHQiLCAnY3NzJyApLT5zZW5kX2tleXMoJ1NlbGVuaXVtIE1hc3RlciBUaWNrZXQnKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEBjbGFzcz0nQ2FsbEZvckFjdGlvbiBQcmltYXJ5J11bY29udGFpbnMoLiwnU3VibWl0JyldIiktPmNsaWNrKCk7CgogICAgICAgICMgU3dpdGNoIHdpbmRvdyBiYWNrIHRvIGFnZW50IHRpY2tldCB6b29tIHZpZXcgb2YgdGhlIGZpcnN0IGNyZWF0ZWQgdGVzdCB0aWNrZXQuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoQ29yZSkgPT0gIm9iamVjdCIgJiYgdHlwZW9mKENvcmUuQXBwKSA9PSAib2JqZWN0IiAmJiBDb3JlLkFwcC5QYWdlTG9hZENvbXBsZXRlOycKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIHRpY2tldCBoaXN0b3J5IHBhZ2Ugb2YgZmlyc3QgY3JlYXRlZCB0ZXN0IHRpY2tldC4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldEhpc3Rvcnk7VGlja2V0SUQ9JFRpY2tldElEc1swXSIpOwoKICAgICAgICAjIFdhaXQgdW50aWwgcGFnZSBoYXMgbG9hZGVkLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuV2lkZ2V0U2ltcGxlIikubGVuZ3RoOycKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSBkeW5hbWljIGZpZWxkIG1hc3RlciB0aWNrZXQgdXBkYXRlLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ0NoYW5nZWQgZHluYW1pYyBmaWVsZCBNYXN0ZXJTbGF2ZSBmcm9tICIiIHRvICJNYXN0ZXIiLicgKSA+IC0xLAogICAgICAgICAgICAiTWFzdGVyIGR5bmFtaWMgZmllbGQgdXBkYXRlIHZhbHVlIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gdGlja2V0IHpvb20gcGFnZSBvZiBzZWNvbmQgY3JlYXRlZCB0ZXN0IHRpY2tldC4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFRpY2tldElEc1sxXSIpOwoKICAgICAgICAjIENsaWNrIG9uIE1hc3RlclNsYXZlIGFuZCBzd2l0Y2ggd2luZG93LgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZ2VudFRpY2tldE1hc3RlclNsYXZlO1RpY2tldElEPSRUaWNrZXRJRHNbMV0nICldIikKICAgICAgICAgICAgLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgV2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjc3VibWl0UmljaFRleHQnKS5sZW5ndGgiCiAgICAgICAgKTsKCiAgICAgICAgc2xlZXAgMTsKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkUmVmcmVzaCgpOwoKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUnKS52YWwoJ1NsYXZlT2Y6JFRpY2tldE51bWJlcnNbMF0nKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1YmplY3QiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCdTZWxlbml1bSBTbGF2ZSBUaWNrZXQnKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNSaWNoVGV4dCIsICdjc3MnICktPnNlbmRfa2V5cygnU2VsZW5pdW0gU2xhdmUgVGlja2V0Jyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAY2xhc3M9J0NhbGxGb3JBY3Rpb24gUHJpbWFyeSddW2NvbnRhaW5zKC4sJ1N1Ym1pdCcpXSIpLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZihDb3JlKSA9PSAib2JqZWN0IiAmJiB0eXBlb2YoQ29yZS5BcHApID09ICJvYmplY3QiICYmIENvcmUuQXBwLlBhZ2VMb2FkQ29tcGxldGU7JwogICAgICAgICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gdGlja2V0IGhpc3RvcnkgcGFnZSBvZiBmaXJzdCBjcmVhdGVkIHRlc3QgdGlja2V0LgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0SGlzdG9yeTtUaWNrZXRJRD0kVGlja2V0SURzWzFdIik7CgogICAgICAgICMgV2FpdCB1bnRpbCBwYWdlIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIi5XaWRnZXRTaW1wbGUiKS5sZW5ndGg7JwogICAgICAgICk7CgogICAgICAgICMgVmVyaWZ5IGR5bmFtaWMgZmllbGQgc2xhdmUgdGlja2V0IHVwZGF0ZS4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLAogICAgICAgICAgICAgICAgJ0NoYW5nZWQgZHluYW1pYyBmaWVsZCBNYXN0ZXJTbGF2ZSBmcm9tICIiIHRvICJTbGF2ZU9mOicgLiAkVGlja2V0TnVtYmVyc1swXQogICAgICAgICAgICApID4gLTEsCiAgICAgICAgICAgICJTbGF2ZSBkeW5hbWljIGZpZWxkIHVwZGF0ZSB2YWx1ZSAtIGZvdW5kIiwKICAgICAgICApOwoKICAgICAgICAjIERpc2FibGUgTm90ZSBpbiBBZ2VudFRpY2tldE1hc3RlclNsYXZlIHNjcmVlbiBhbmQKICAgICAgICAjIGNoZWNrIGlmIE1hc3RlclNsYXZlIGR5bmFtaWMgZmllbGQgaXMgc2hvd24gaW4gdGhlIHNjcmVlbiAoc2VlIGJ1ZyMxNDc4MCkuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0TWFzdGVyU2xhdmUjIyNOb3RlJywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldE1hc3RlclNsYXZlO1RpY2tldElEPSRUaWNrZXRJRHNbMV0iKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlIikubGVuZ3RoOycKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgncmV0dXJuICQoIiNEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUiKS5sZW5ndGg7JyksCiAgICAgICAgICAgICJNYXN0ZXJTbGF2ZSBkeW5hbWljIGZpZWxkIGlzIGZvdW5kIgogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHR3byBtb3JlIHRlc3QgdGlja2V0cy4KICAgICAgICBmb3IgbXkgJFRpY2tldENyZWF0ZSAoIDEgLi4gMiApIHsKICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgICAgICBteSAkVGlja2V0SUQgICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAgICAgVE4gICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NlbGVuaXVtIHRlc3QgVGlja2V0JywKICAgICAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgU3RhdGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUeXBlSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIEN1c3RvbWVySUQgICA9PiAnU2VsZW5pdW1DdXN0b21lcicsCiAgICAgICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ1NlbGVuaXVtQ3VzdG9tZXJAbG9jYWxob3N0LmNvbScsCiAgICAgICAgICAgICAgICBPd25lcklEICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFRlc3RVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFRpY2tldElELAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgaXMgY3JlYXRlZC4iLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcHVzaCBAVGlja2V0SURzLCAgICAgJFRpY2tldElEOwogICAgICAgICAgICBwdXNoIEBUaWNrZXROdW1iZXJzLCAkVGlja2V0TnVtYmVyOwogICAgICAgIH0KCiAgICAgICAgIyBTZXQgTWFzdGVyLVNsYXZlIHJlbGF0aW9uIGZvciB0ZXN0IFRpY2tldHMuCiAgICAgICAgbXkgQFRlc3RDYXNlID0gKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SURzWzJdLAogICAgICAgICAgICAgICAgVmFsdWUgICAgPT4gIk1hc3RlciIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRHNbM10sCiAgICAgICAgICAgICAgICBWYWx1ZSAgICA9PiAiU2xhdmVPZjokVGlja2V0TnVtYmVyc1syXSIsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJE1hc3RlclNsYXZlREZOYW1lID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJykgfHwgJyc7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZCAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJE1hc3RlclNsYXZlREZOYW1lLAogICAgICAgICk7CiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICAgICAgbXkgJFN1Y2Nlc3M7CiAgICAgICAgZm9yIG15ICRUZXN0IChAVGVzdENhc2UpIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgICAgICAgICAgICAgIEZpZWxkSUQgICAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57SUR9LAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUZXN0LT57VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUZXN0LT57VmFsdWV9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVmFsdWUgJyRUZXN0LT57VmFsdWV9JyBpcyBzZXQgZm9yIFRpY2tldElEICRUZXN0LT57VGlja2V0SUR9LiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIFZlcmlmeSBNYXN0ZXIgU2xhdmUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgU2xhdmUgdGlja2V0LgogICAgICAgIG15ICREeW5hbWljRmllbGRWYWx1ZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpOwogICAgICAgIG15ICRWYWx1ZSAgICAgICAgICAgICAgICAgICA9ICREeW5hbWljRmllbGRWYWx1ZU9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIEZpZWxkSUQgID0+ICREeW5hbWljRmllbGQtPntJRH0sCiAgICAgICAgICAgIE9iamVjdElEID0+ICRUaWNrZXRJRHNbM10sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRWYWx1ZS0+WzBdLT57VmFsdWVUZXh0fSwKICAgICAgICAgICAgIlNsYXZlT2Y6JFRpY2tldE51bWJlcnNbMl0iLAogICAgICAgICAgICAiTWFzdGVyIFNsYXZlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIFNsYXZlIHRpY2tldCIKICAgICAgICApOwoKICAgICAgICAjIFZlcmlmeSB0aGVyZSBpcyBNYXN0ZXItU2xhdmUgcmVsYXRpb24gYmV0d2VlbiB0d28gdGVzdCBUaWNrZXRzLgogICAgICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKICAgICAgICBteSAkTGlua0xpc3QgICA9ICRMaW5rT2JqZWN0LT5MaW5rTGlzdCgKICAgICAgICAgICAgT2JqZWN0ID0+ICdUaWNrZXQnLAogICAgICAgICAgICBLZXkgICAgPT4gJFRpY2tldElEc1syXSwKICAgICAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIElzSGFzaFJlZldpdGhEYXRhKCRMaW5rTGlzdCksCiAgICAgICAgICAgICJNYXN0ZXJTbGF2ZSBsaW5rIGV4aXN0cy4iCiAgICAgICAgKTsKCiAgICAgICAgIyBFbmFibGUgY29uZmlnICJNYXN0ZXJTbGF2ZTo6VW5zZXRNYXN0ZXJTbGF2ZSIuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpVbnNldE1hc3RlclNsYXZlJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50VGlja2V0TWFzdGVyU2xhdmUgc2NyZWVuIG9mIE1hc3RlciBUaWNrZXQuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0TWFzdGVyU2xhdmU7VGlja2V0SUQ9JFRpY2tldElEc1syXSIKICAgICAgICApOwoKICAgICAgICAjIFVuc2V0TWFzdGVyIHN0YXR1cyBvZiBNYXN0ZXIgVGlja2V0LgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0R5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZScpLnZhbCgnVW5zZXRNYXN0ZXInKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQGNsYXNzPSdDYWxsRm9yQWN0aW9uIFByaW1hcnknXVtjb250YWlucyguLCdTdWJtaXQnKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgY2FjaGUgaXMgY29ycmVjdC4KICAgICAgICBteSAkQ2FjaGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKTsKICAgICAgICBmb3IgbXkgJENhY2hlIChxdyggRHluYW1pY0ZpZWxkVmFsdWUgTGlua09iamVjdCApKSB7CiAgICAgICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCggVHlwZSA9PiAkQ2FjaGUgKTsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgaWYgbGluayB0byBTbGF2ZSB0aWNrZXQgaXMgZGVsZXRlZC4gU2VlIGJ1ZyMxNDc4MS4KICAgICAgICAkTGlua0xpc3QgPSAkTGlua09iamVjdC0+TGlua0xpc3QoCiAgICAgICAgICAgIE9iamVjdCA9PiAnVGlja2V0JywKICAgICAgICAgICAgS2V5ICAgID0+ICRUaWNrZXRJRHNbMl0sCiAgICAgICAgICAgIFN0YXRlICA9PiAnVmFsaWQnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAhSXNIYXNoUmVmV2l0aERhdGEoJExpbmtMaXN0KSwKICAgICAgICAgICAgIk1hc3RlclNsYXZlIGxpbmsgZGVsZXRlZC4iCiAgICAgICAgKTsKCiAgICAgICAgIyBDaGVjayBpZiBTbGF2ZSB2YWx1ZSBmb3IgTWFzdGVyIFNsYXZlIGZpZWxkIGlzIGRlbGV0ZWQgZnJvbSBTbGF2ZSB0aWNrZXQgYWZ0ZXIgVW5zZXRNYXN0ZXIuCiAgICAgICAgJFZhbHVlID0gJER5bmFtaWNGaWVsZFZhbHVlT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgRmllbGRJRCAgPT4gJER5bmFtaWNGaWVsZC0+e0lEfSwKICAgICAgICAgICAgT2JqZWN0SUQgPT4gJFRpY2tldElEc1szXSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+SXNEZWVwbHkoCiAgICAgICAgICAgICRWYWx1ZSwKICAgICAgICAgICAgW10sCiAgICAgICAgICAgICJNYXN0ZXIgU2xhdmUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgU2xhdmUgdGlja2V0IgogICAgICAgICk7CgogICAgICAgICMgQ2hlY2sgaWYgdGhlcmUgaXMgTWFzdGVyU2xhdmUgZXJyb3IgbG9nIGR1cmluZyB0aWNrZXQgY3JlYXRpb24uIFNlZSBidWcjMTQ4OTkuCiAgICAgICAgbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZ2VudFRpY2tldFBob25lIGFuZCBjcmVhdGUgdGVzdCB0aWNrZXQuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRQaG9uZSIpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI0Zyb21DdXN0b21lciIpLmxlbmd0aDsnICk7CgogICAgICAgIG15ICRUZXN0Q3VzdG9tZXIgPSAnY3VzdG9tZXInIC4gJFJhbmRvbUlEIC4gJ0BnbWFpbC5jb20nOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0Zyb21DdXN0b21lciIsICdjc3MnICktPnNlbmRfa2V5cygkVGVzdEN1c3RvbWVyKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAhJCgiLkFKQVhMb2FkZXI6dmlzaWJsZSIpLmxlbmd0aDsnICk7CgogICAgICAgICMgTG9zZSB0aGUgZm9jdXMuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICdib2R5JywgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCIjVGlja2V0Q3VzdG9tZXJDb250ZW50RnJvbUN1c3RvbWVyIGlucHV0LkN1c3RvbWVyVGlja2V0VGV4dCIpLmxlbmd0aDsnCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNEZXN0JywKICAgICAgICAgICAgVmFsdWUgICA9PiAnMnx8UmF3JywKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICEkKCIuQUpBWExvYWRlcjp2aXNpYmxlIikubGVuZ3RoOycgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3ViamVjdCIsICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1YmplY3QiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCJTdWJqZWN0JFJhbmRvbUlEIik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUmljaFRleHQiLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1JpY2hUZXh0IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCJUZXh0JFJhbmRvbUlEIik7CgogICAgICAgICMgU3VibWl0IGZvcm0uCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgIlwkKCcjc3VibWl0UmljaFRleHQnKVswXS5zY3JvbGxJbnRvVmlldyh0cnVlKTsiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI3N1Ym1pdFJpY2hUZXh0JykubGVuZ3RoOyIpLAogICAgICAgICAgICAiRWxlbWVudCAnI3N1Ym1pdFJpY2hUZXh0JyBpcyBmb3VuZCBpbiBzY3JlZW4iCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNzdWJtaXRSaWNoVGV4dCcsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIuTWVzc2FnZUJveCBhW2hyZWYqPVwnQWdlbnRUaWNrZXRab29tO1RpY2tldElEPVwnXSIpLmxlbmd0aDsnCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFRpY2tldCAgID0gc3BsaXQoICdUaWNrZXRJRD0nLCAkU2VsZW5pdW0tPmdldF9jdXJyZW50X3VybCgpICk7CiAgICAgICAgbXkgJFRpY2tldElEID0gJFRpY2tldFsxXTsKCiAgICAgICAgcHVzaCBAVGlja2V0SURzLCAkVGlja2V0SUQ7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWRtaW5Mb2cuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5Mb2ciKTsKCiAgICAgICAgIyBDaGVjayBpZiBNYXN0ZXJTbGF2ZSBlcnJvciBsb2cgaXMgY3JlYXRlZC4KICAgICAgICBteSAkTWVzc2FnZSA9ICJDb3VsZCBub3QgdXBkYXRlIGZpZWxkIE1hc3RlclNsYXZlIGZvciBUaWNrZXQgSUQgJFRpY2tldElEIjsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcjTG9nRW50cmllcyAuRXJyb3I6ZXEoMCknKS50ZXh0KCkuaW5kZXhPZignJE1lc3NhZ2UnKSA9PSAtMTsiKSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2UgaXMgbm90IGNyZWF0ZWQgZm9yIHVwZGF0ZSBmaWVsZCBNYXN0ZXJTbGF2ZSBmb3IgVGlja2V0IElEICRUaWNrZXRJRCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IHRpY2tldHMuCiAgICAgICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiVGlja2V0IElEICRUaWNrZXRJRCBpcyBkZWxldGVkLiIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgTWFrZSBzdXJlIHRoZSBjYWNoZSBpcyBjb3JyZWN0LgogICAgICAgICRDYWNoZU9iamVjdC0+Q2xlYW5VcCgKICAgICAgICAgICAgVHlwZSA9PiAnVGlja2V0JywKICAgICAgICApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICBteSAkVGlja2V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgICAgIG15ICRBcnRpY2xlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJyk7CiAgICAgICAgbXkgJFF1ZXVlT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpOwogICAgICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdDaGVja01YUmVjb3JkJywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICAgICAgVmFsdWUgPT4gMCwKICAgICAgICApOwogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIEtleSAgID0+ICdTZW5kbWFpbE1vZHVsZScsCiAgICAgICAgICAgIFZhbHVlID0+ICdLZXJuZWw6OlN5c3RlbTo6RW1haWw6OlRlc3QnLAogICAgICAgICk7CiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpGb3J3YXJkU2xhdmVzJywKICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHNhbHV0YXRpb24gdXNpbmcgcmljaCB0ZXh0LgogICAgICAgIG15ICRTYWx1dGF0aW9uVGV4dCA9ICI8c3Ryb25nPlRlc3QgQm9sZCAke1JhbmRvbUlEfSA8L3N0cm9uZz4iOwogICAgICAgIG15ICRTYWx1dGF0aW9uSUQgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTYWx1dGF0aW9uJyktPlNhbHV0YXRpb25BZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICJOZXcgU2FsdXRhdGlvbiAkUmFuZG9tSUQiLAogICAgICAgICAgICBUZXh0ICAgICAgICA9PiAkU2FsdXRhdGlvblRleHQsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb21tZW50ICAgICA9PiAnc29tZSBjb21tZW50JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2FsdXRhdGlvbklELAogICAgICAgICAgICAiU2FsdXRhdGlvbklEICRTYWx1dGF0aW9uSUQgaXMgY3JlYXRlZC4iLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRlc3QgcXVldWUuCiAgICAgICAgbXkgJFF1ZXVlTmFtZSA9ICJTYWx1dGF0aW9uICRSYW5kb21JRCI7CiAgICAgICAgbXkgJFF1ZXVlSUQgICA9ICRRdWV1ZU9iamVjdC0+UXVldWVBZGQoCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICA9PiAkUXVldWVOYW1lLAogICAgICAgICAgICBHcm91cCAgICAgICAgICAgPT4gJ2FkbWluJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIEdyb3VwSUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBTeXN0ZW1BZGRyZXNzSUQgPT4gMSwKICAgICAgICAgICAgU2FsdXRhdGlvbklEICAgID0+ICRTYWx1dGF0aW9uSUQsCiAgICAgICAgICAgIFNpZ25hdHVyZUlEICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgPT4gJ1NvbWUgY29tbWVudCcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICA9PiAxCgogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRRdWV1ZUlELAogICAgICAgICAgICAiUXVldWVJRCAkUXVldWVJRCBpcyBjcmVhdGVkLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBBc3NpZ24gYW5zd2VyIHRlbXBsYXRlcyB0byBxdWV1ZS4KICAgICAgICBmb3IgbXkgJFRlbXBsYXRlSUQgKCAxIC4uIDIgKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFF1ZXVlT2JqZWN0LT5RdWV1ZVN0YW5kYXJkVGVtcGxhdGVNZW1iZXJBZGQoCiAgICAgICAgICAgICAgICBRdWV1ZUlEICAgICAgICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgICAgICBTdGFuZGFyZFRlbXBsYXRlSUQgPT4gJFRlbXBsYXRlSUQsCiAgICAgICAgICAgICAgICBBY3RpdmUgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlRlbXBsYXRlSUQgJyRUZW1wbGF0ZUlEJyBpcyBhc3NpZ25lZCB0byBRdWV1ZUlEICckUXVldWVJRCcuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKCk7CiAgICAgICAgbXkgJVRlc3RDdXN0b21lclVzZXIgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDdXN0b21lclVzZXInKS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIG1hc3RlciB0aWNrZXQuCiAgICAgICAgbXkgJE1hc3RlclRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgIG15ICRNYXN0ZXJUaWNrZXRJRCAgICAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFROICAgICAgICAgICA9PiAkTWFzdGVyVGlja2V0TnVtYmVyLAogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gIk1hc3RlciAkUmFuZG9tSUQiLAogICAgICAgICAgICBRdWV1ZUlEICAgICAgPT4gJFF1ZXVlSUQsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgICAgICAgICAgQ3VzdG9tZXJObyAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJE1hc3RlclRpY2tldElELAogICAgICAgICAgICAiVGlja2V0SUQgJE1hc3RlclRpY2tldElEIGlzIGNyZWF0ZWQgKG1hc3RlcikuIiwKICAgICAgICApOwoKICAgICAgICBteSAkQXJ0aWNsZUlEID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JDaGFubmVsKCBDaGFubmVsTmFtZSA9PiAnUGhvbmUnICktPkFydGljbGVDcmVhdGUoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgICAgICAgICAgSXNWaXNpYmxlRm9yQ3VzdG9tZXIgPT4gMSwKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJ01hc3RlciBBcnRpY2xlJywKICAgICAgICAgICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ1VuaXQgdGVzdCBNYXN0ZXJUaWNrZXQnLAogICAgICAgICAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdQaG9uZUNhbGxDdXN0b21lcicsCiAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdVbml0IHRlc3QgYXJ0aWNsZScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJEFydGljbGVJRCwKICAgICAgICAgICAgIkFydGljbGVJRCAkQXJ0aWNsZUlEIGlzIGNyZWF0ZWQuIiwKICAgICAgICApOwoKICAgICAgICAjIEdldCBtYXN0ZXIvc2xhdmUgZHluYW1pYyBmaWVsZCBkYXRhLgogICAgICAgIG15ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ01hc3RlclNsYXZlOjpEeW5hbWljRmllbGQnKTsKICAgICAgICBteSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBOYW1lID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCwKICAgICAgICApOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIElEID0+ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZERhdGEtPntJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CgogICAgICAgICMgU2V0IHRlc3QgdGlja2V0IGFzIG1hc3RlciB0aWNrZXQuCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJE1hc3RlclRpY2tldElELAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ01hc3RlcicsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiVGlja2V0SUQgJE1hc3RlclRpY2tldElELCBEeW5hbWljRmllbGQgJyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCcgaXMgdXBkYXRlZCBhcyBNYXN0ZXJUaWNrZXQuIiwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSBzbGF2ZSB0aWNrZXQuCiAgICAgICAgbXkgJFNsYXZlVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAiU2xhdmUgJFJhbmRvbUlEIiwKICAgICAgICAgICAgUXVldWVJRCAgICAgID0+ICRRdWV1ZUlELAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICAgICAgICAgIEN1c3RvbWVySUQgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiwKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTbGF2ZVRpY2tldElELAogICAgICAgICAgICAiVGlja2V0SUQgJFNsYXZlVGlja2V0SUQgaXMgY3JlYXRlZCAoc2xhdmUpLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBTZXQgdGVzdCB0aWNrZXQgdG8gc2xhdmUuCiAgICAgICAgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFNsYXZlVGlja2V0SUQsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAiU2xhdmVPZjokTWFzdGVyVGlja2V0TnVtYmVyIiwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJUaWNrZXRJRCAkU2xhdmVUaWNrZXRJRCwgRHluYW1pY0ZpZWxkICckTWFzdGVyU2xhdmVEeW5hbWljRmllbGQnIGlzIHVwZGF0ZWQgYXMgU2xhdmVUaWNrZXQuIiwKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSB0ZXN0IHVzZXIuCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAogICAgICAgICk7CgogICAgICAgICMgR2V0IHRlc3QgdXNlciBJRC4KICAgICAgICBteSAkVGVzdFVzZXJJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIExvZ2luIGFzIHRlc3QgdXNlci4KICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50VGlja2V0Q29tcG9zZSBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0Q29tcG9zZTtUaWNrZXRJRD0kTWFzdGVyVGlja2V0SUQ7QXJ0aWNsZUlEPSRBcnRpY2xlSUQ7UmVwbHlBbGw9O1Jlc3BvbnNlSUQ9MSIKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjc3VibWl0UmljaFRleHQnKS5sZW5ndGg7IiApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1RvQ3VzdG9tZXIiLCAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCAkVGVzdEN1c3RvbWVyVXNlcntVc2VyRW1haWx9ICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjc3VibWl0UmljaFRleHQiLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JFNsYXZlVGlja2V0SUQiCiAgICAgICAgKTsKCiAgICAgICAgIyBXYWl0IGZvciB0aGUgaWZyYW1lIHRvIHNob3cgdXAuCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJy5BcnRpY2xlTWFpbENvbnRlbnQgaWZyYW1lJykuY29udGVudHMoKS5sZW5ndGggPT0gMTsiCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5Td2l0Y2hUb0ZyYW1lKAogICAgICAgICAgICBGcmFtZVNlbGVjdG9yID0+ICcuQXJ0aWNsZU1haWxDb250ZW50IGlmcmFtZScsCiAgICAgICAgICAgIFdhaXRGb3JMb2FkICAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIENoZWNrIGlmIHNsYXZlIHRpY2tldCBhcnRpY2xlIGhlcyBzYWx1dGF0aW9uIGluIHJpY2ggdGV4dCBmb3JtYXQuIFNlZSBidWcjMTQ5ODMuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkU2FsdXRhdGlvblRleHQgKSA+IC0xLAogICAgICAgICAgICAiU2xhdmUgYXJ0aWNsZSBjb250YWlucyByaWNoIHRleHQgJyRTYWx1dGF0aW9uVGV4dCcuICIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGVhbnVwLgogICAgICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAjIERlbGV0ZSB0ZXN0IGNyZWF0ZWQgdGlja2V0cy4KICAgICAgICBmb3IgbXkgJFRpY2tldElEICggJE1hc3RlclRpY2tldElELCAkU2xhdmVUaWNrZXRJRCApIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBUaWNrZXQgZGVsZXRpb24gY291bGQgZmFpbCBpZiBhcGFjaGUgc3RpbGwgd3JpdGVzIHRvIHRpY2tldCBoaXN0b3J5LiBUcnkgYWdhaW4gaW4gdGhpcyBjYXNlLgogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgIHNsZWVwIDM7CiAgICAgICAgICAgICAgICAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldERlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJUaWNrZXRJRCAkVGlja2V0SUQgaXMgZGVsZXRlZC4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIHF1ZXVlX3N0YW5kYXJkX3RlbXBsYXRlIFdIRVJFIHF1ZXVlX2lkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFF1ZXVlSUQsIF0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICJTdGFuZGFyZF90ZW1wbGF0ZV9xdWV1ZSByZWxhdGlvbiBmb3IgUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkLiIKICAgICAgICApOwoKICAgICAgICAjIERlbGV0ZSBxdWV1ZXMuCiAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBxdWV1ZSBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRRdWV1ZUlELCBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiUXVldWVJRCAkUXVldWVJRCBpcyBkZWxldGVkLiIsCiAgICAgICAgKTsKCiAgICAgICAgIyBEZWxldGUgc2FsdXRhdGlvbi4KICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIHNhbHV0YXRpb24gV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2FsdXRhdGlvbklELCBdLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiU2FsdXRhdGlvbklEICRTYWx1dGF0aW9uSUQgaXMgZGVsZXRlZC4iLAogICAgICAgICk7CgogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKICAgICAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICAgICAjIEVuYWJsZSB0aGUgYWR2YW5jZWQgTWFzdGVyU2xhdmUuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpBZHZhbmNlZEVuYWJsZWQnLAogICAgICAgICAgICBWYWx1ZSA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgRW5hYmxlIGNoYW5nZSB0aGUgTWFzdGVyU2xhdmUgc3RhdGUgb2YgYSB0aWNrZXQuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpVcGRhdGVNYXN0ZXJTbGF2ZScsCiAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBEbyBub3Qgc2VuZCBlbWFpbHMuCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlbmRtYWlsTW9kdWxlJywKICAgICAgICAgICAgVmFsdWUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbDo6VGVzdCcsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbICdhZG1pbicsICd1c2VycycgXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgIyBHZXQgdGVzdCB1c2VyIElELgogICAgICAgIG15ICRUZXN0VXNlcklEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHRocmVlIHRlc3QgdGlja2V0cy4KICAgICAgICBteSBAVGlja2V0SURzOwogICAgICAgIG15IEBUaWNrZXROdW1iZXJzOwogICAgICAgIG15ICRUaWNrZXRUaXRsZSA9ICdNYXN0ZXJTbGF2ZSAnIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBmb3IgbXkgJFRpY2tldENyZWF0ZSAoIDEgLi4gMyApIHsKICAgICAgICAgICAgbXkgJFRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwogICAgICAgICAgICBteSAkVGlja2V0SUQgICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAgICAgVE4gICAgICAgICAgID0+ICRUaWNrZXROdW1iZXIsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJFRpY2tldFRpdGxlLAogICAgICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICBTdGF0ZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFR5cGVJRCAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ3VzdG9tZXJJRCAgID0+ICdTZWxlbml1bUN1c3RvbWVyJywKICAgICAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAZXhhbXBsZS5jb20nLAogICAgICAgICAgICAgICAgT3duZXJJRCAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgID0+ICRUZXN0VXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICJUaWNrZXQgSUQgJFRpY2tldElEIC0gY3JlYXRlZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBUaWNrZXRJRHMsICAgICAkVGlja2V0SUQ7CiAgICAgICAgICAgIHB1c2ggQFRpY2tldE51bWJlcnMsICRUaWNrZXROdW1iZXI7CiAgICAgICAgfQoKICAgICAgICAjIExvZ2luIGFzIHRlc3QgdXNlci4KICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFnZW50VGlja2V0U2VhcmNoLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFnZW50VGlja2V0U2VhcmNoIik7CgogICAgICAgICMgV2FpdCB1bnRpbCBmb3JtIGhhcyBsb2FkZWQsIGlmIG5lY2Vzc2FyeS4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjQXR0cmlidXRlJykubGVuZ3RoOyIgKTsKCiAgICAgICAgIyBTZWFyY2ggdGVzdCBjcmVhdGVkIHRpY2tldHMgYnkgdGl0bGUuCiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNBdHRyaWJ1dGUnKS52YWwoJ1RpdGxlJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJUaXRsZSIsICduYW1lJyApLT5zZW5kX2tleXMoJFRpY2tldFRpdGxlKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEBpZD0nU2VhcmNoRm9ybVN1Ym1pdCddW1xAdmFsdWU9J1J1biBzZWFyY2gnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJy5DaGVja2JveFt2YWx1ZT0kVGlja2V0SURzWzBdXScpLmxlbmd0aDsiCiAgICAgICAgKTsKCiAgICAgICAgIyBTZWxlY3QgZmlyc3QgdGVzdCBjcmVhdGVkIHRpY2tldC4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnLkNoZWNrYm94W3ZhbHVlPSRUaWNrZXRJRHNbMF1dJykuY2xpY2soKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcuQ2hlY2tib3hbdmFsdWU9JFRpY2tldElEc1swXV06Y2hlY2tlZCcpLmxlbmd0aDsiCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayBvbiBidWxrIGFuZCBzd2l0Y2ggc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiQnVsayIsICdsaW5rX3RleHQnICktPmNsaWNrKCk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggV2luZG93Q291bnQgPT4gMiApOwogICAgICAgIG15ICRIYW5kbGVzID0gJFNlbGVuaXVtLT5nZXRfd2luZG93X2hhbmRsZXMoKTsKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMV0gKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBvcHVwIGlzIGNvbXBsZXRlbHkgbG9hZGVkLgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgJ3JldHVybiB0eXBlb2YoQ29yZSkgPT0gIm9iamVjdCIgJiYgdHlwZW9mKENvcmUuQXBwKSA9PSAib2JqZWN0IiAmJiBDb3JlLkFwcC5QYWdlTG9hZENvbXBsZXRlOycsCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+CiAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJyNEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUnKS5sZW5ndGggJiYgXCQoJyNzdWJtaXRSaWNoVGV4dCcpLmxlbmd0aDsiCiAgICAgICAgKTsKCiAgICAgICAgIyBTZXQgdGVzdCB0aWNrZXQgYXMgbWFzdGVyIHRpY2tldC4KICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAiXCQoJyNEeW5hbWljRmllbGRfTWFzdGVyU2xhdmUnKS52YWwoJ01hc3RlcicpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjc3VibWl0UmljaFRleHQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPnN3aXRjaF90b193aW5kb3coICRIYW5kbGVzLT5bMF0gKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDEgKTsKCiAgICAgICAgIyBXYWl0IHVudGlsIHBvcHVwIGlzIGNvbXBsZXRlbHkgbG9hZGVkLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgU2VsZWN0IHNlY29uZCBhbmQgdGhpcmQgdGVzdCBjcmVhdGVkIHRpY2tldC4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcuQ2hlY2tib3hbdmFsdWU9JFRpY2tldElEc1sxXV0nKS5sZW5ndGg7IgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJy5DaGVja2JveFt2YWx1ZT0kVGlja2V0SURzWzFdXScpLmNsaWNrKCk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnaW5wdXRbdmFsdWU9JFRpY2tldElEc1sxXV06Y2hlY2tlZCcpLmxlbmd0aDsiCiAgICAgICAgKTsKCiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICJyZXR1cm4gdHlwZW9mKFwkKSA9PT0gJ2Z1bmN0aW9uJyAmJiBcJCgnLkNoZWNrYm94W3ZhbHVlPSRUaWNrZXRJRHNbMl1dJykubGVuZ3RoOyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcuQ2hlY2tib3hbdmFsdWU9JFRpY2tldElEc1syXV0nKS5jbGljaygpOyIpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAicmV0dXJuIHR5cGVvZihcJCkgPT09ICdmdW5jdGlvbicgJiYgXCQoJ2lucHV0W3ZhbHVlPSRUaWNrZXRJRHNbMl1dOmNoZWNrZWQnKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICMgQ2xpY2sgb24gYnVsayBhbmQgc3dpdGNoIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIkJ1bGsiLCAnbGlua190ZXh0JyApLT5jbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIFdpbmRvd0NvdW50ID0+IDIgKTsKICAgICAgICAkSGFuZGxlcyA9ICRTZWxlbml1bS0+Z2V0X3dpbmRvd19oYW5kbGVzKCk7CiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzFdICk7CgogICAgICAgICMgV2FpdCB1bnRpbCBwb3B1cCBpcyBjb21wbGV0ZWx5IGxvYWRlZC4KICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4KICAgICAgICAgICAgICAgICdyZXR1cm4gdHlwZW9mKENvcmUpID09ICJvYmplY3QiICYmIHR5cGVvZihDb3JlLkFwcCkgPT0gIm9iamVjdCIgJiYgQ29yZS5BcHAuUGFnZUxvYWRDb21wbGV0ZTsnLAogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PgogICAgICAgICAgICAgICAgInJldHVybiB0eXBlb2YoXCQpID09PSAnZnVuY3Rpb24nICYmIFwkKCcjRHluYW1pY0ZpZWxkX01hc3RlclNsYXZlJykubGVuZ3RoICYmIFwkKCcjc3VibWl0UmljaFRleHQnKS5sZW5ndGg7IgogICAgICAgICk7CgogICAgICAgICMgU2V0IHRlc3QgdGlja2V0cyBhcyBzbGF2ZSB0aWNrZXRzLgogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICJcJCgnI0R5bmFtaWNGaWVsZF9NYXN0ZXJTbGF2ZScpLnZhbCgnU2xhdmVPZjokVGlja2V0TnVtYmVyc1swXScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7IgogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI3N1Ym1pdFJpY2hUZXh0IiwgJ2NzcycgKS0+Y2xpY2soKTsKCiAgICAgICAgJFNlbGVuaXVtLT5zd2l0Y2hfdG9fd2luZG93KCAkSGFuZGxlcy0+WzBdICk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBXaW5kb3dDb3VudCA9PiAxICk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gbWFzdGVyIHRpY2tldCB6b29tIHZpZXcuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWdlbnRUaWNrZXRab29tO1RpY2tldElEPSRUaWNrZXRJRHNbMF0iKTsKCiAgICAgICAgIyBWZXJpZnkgbWFzdGVyLXNsYXZlIHRpY2tldCBsaW5rLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJFRpY2tldE51bWJlcnNbMV0gKSA+IC0xLAogICAgICAgICAgICAiU2xhdmUgdGlja2V0IG51bWJlcjogJFRpY2tldE51bWJlcnNbMV0gLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRUaWNrZXROdW1iZXJzWzJdICkgPiAtMSwKICAgICAgICAgICAgIlNsYXZlIHRpY2tldCBudW1iZXI6ICRUaWNrZXROdW1iZXJzWzJdIC0gZm91bmQiLAogICAgICAgICk7CgogICAgICAgICMgRGVsZXRlIGNyZWF0ZWQgdGVzdCB0aWNrZXRzLgogICAgICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlRpY2tldCBJRCAkVGlja2V0SUQgLSBkZWxldGVkIgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGNhY2hlIGlzIGNvcnJlY3QuCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgKTsKICAgIH0KKTsKCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIHN0YXJ0IFJlc3RvcmVEYXRhYnNlCiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlck9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgojIGVuYWJsZSBjb25maWcgTWFzdGVyU2xhdmU6OkZvcndhcmRTbGF2ZXMKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpGb3J3YXJkU2xhdmVzJywKICAgIFZhbHVlID0+IDEsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja01YUmVjb3JkJywKICAgIFZhbHVlID0+IDAsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdTZW5kbWFpbE1vZHVsZScsCiAgICBWYWx1ZSA9PiAnS2VybmVsOjpTeXN0ZW06OkVtYWlsOjpEb05vdFNlbmRFbWFpbCcsCik7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnTWFzdGVyU2xhdmU6OkR5bmFtaWNGaWVsZCcpOwpteSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgTmFtZSA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQsCik7CgojIENyZWF0ZSBuZXcgdXNlci4KbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0VXNlckNyZWF0ZSgKICAgIEdyb3VwcyAgID0+IFsgJ2FkbWluJywgJ3VzZXJzJyBdLAogICAgTGFuZ3VhZ2UgPT4gJ2VuJwopOwokU2VsZi0+VHJ1ZSgKICAgICRUZXN0VXNlckxvZ2luLAogICAgIlVzZXJBZGQoKSAkVGVzdFVzZXJMb2dpbiIsCik7CgojIENyZWF0ZSBuZXcgY3VzdG9tZXIgdXNlcnMuCm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4xID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgKICAgIExhbmd1YWdlID0+ICdlbicsCik7CiRTZWxmLT5UcnVlKAogICAgJFRlc3RDdXN0b21lclVzZXJMb2dpbjEsCiAgICAiQ3VzdG9tZXJVc2VyQWRkKCkgJFRlc3RDdXN0b21lclVzZXJMb2dpbjEiLAopOwoKbXkgJFRlc3RDdXN0b21lclVzZXJMb2dpbjIgPSAkSGVscGVyT2JqZWN0LT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKAogICAgTGFuZ3VhZ2UgPT4gJ2VuJywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGVzdEN1c3RvbWVyVXNlckxvZ2luMiwKICAgICJDdXN0b21lclVzZXJBZGQoKSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luMiIsCik7CgpteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKIyBDcmVhdGUgZmlyc3QgdGVzdCB0aWNrZXQuCm15ICRNYXN0ZXJUaWNrZXROdW1iZXIgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGVOdW1iZXIoKTsKbXkgJE1hc3RlclRpY2tldElEICAgICA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFROICAgICAgICAgICA9PiAkTWFzdGVyVGlja2V0TnVtYmVyLAogICAgVGl0bGUgICAgICAgID0+ICdNYXN0ZXIgdW5pdCB0ZXN0IHRpY2tldCAnIC4gJFJhbmRvbUlELAogICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICBTdGF0ZSAgICAgICAgPT4gJ25ldycsCiAgICBDdXN0b21lck5vICAgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbjEsCiAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbjEsCiAgICAsCiAgICBPd25lcklEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJE1hc3RlclRpY2tldElELAogICAgIlRpY2tldENyZWF0ZSgpIFRpY2tldCBJRCAkTWFzdGVyVGlja2V0SUQiLAopOwoKbXkgJEVtYWlsQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckNoYW5uZWwoCiAgICBDaGFubmVsTmFtZSA9PiAnRW1haWwnLAopOwoKIyBDcmVhdGUgYXJ0aWNsZSBmb3IgdGVzdCB0aWNrZXQuCm15ICRBcnRpY2xlSUQgPSAkRW1haWxCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJE1hc3RlclRpY2tldElELAogICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ3Jvb3RAbG9jYWxob3N0JywKICAgIFRvICAgICAgICAgICAgICAgICAgID0+ICd0ZXN0QGV4YW1wbGVzLmNvbScsCiAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdNYXN0ZXIgQXJ0aWNsZScsCiAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAiVW5pdCB0ZXN0IE1hc3RlclRpY2tldCAkVGVzdEN1c3RvbWVyVXNlckxvZ2luMSAkVGVzdEN1c3RvbWVyVXNlckxvZ2luMSIsCiAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnRW1haWxDdXN0b21lcicsCiAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnVW5pdCB0ZXN0IGFydGljbGUnLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkQXJ0aWNsZUlELAogICAgIkFydGljbGVDcmVhdGUoKSBBcnRpY2xlIElEICRBcnRpY2xlSUQiLAopOwoKbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgSUQgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YS0+e0lEfSwKKTsKCm15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwoKIyBTZXQgdGVzdCB0aWNrZXQgYXMgbWFzdGVyIHRpY2tldC4KbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ01hc3RlcicsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkTWFzdGVyVGlja2V0SUQgRHluYW1pY0ZpZWxkICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCB1cGRhdGVkIGFzIE1hc3RlclRpY2tldCIsCik7CgojIENyZWF0ZSBzZWNvbmQgdGVzdCB0aWNrZXQuCm15ICRTbGF2ZVRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwpteSAkU2xhdmVUaWNrZXRJRCAgICAgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICBUTiAgICAgICAgICAgPT4gJFNsYXZlVGlja2V0TnVtYmVyLAogICAgVGl0bGUgICAgICAgID0+ICdTbGF2ZSB1bml0IHRlc3QgdGlja2V0ICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVySUQgICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luMiwKICAgIEN1c3RvbWVyVXNlciA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luMiwKICAgIE93bmVySUQgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFNsYXZlVGlja2V0SUQsCiAgICAiVGlja2V0Q3JlYXRlKCkgVGlja2V0IElEICRTbGF2ZVRpY2tldElEIiwKKTsKCiMgU2V0IHRlc3QgdGlja2V0IGFzIHNsYXZlIG9mIG1hc3RlciB0aWNrZXQuCiRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGQsCiAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJFNsYXZlVGlja2V0SUQsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gIlNsYXZlT2Y6JE1hc3RlclRpY2tldE51bWJlciIsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkU2xhdmVUaWNrZXRJRCBEeW5hbWljRmllbGQgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkIHVwZGF0ZWQgYXMgU2xhdmVUaWNrZXQiLAopOwoKbXkgJEV2ZW50T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6Ok1hc3RlclNsYXZlJyk7CgpteSBAVGVzdHMgPSAoCiAgICB7CiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0RvIG5vdCByZXBsYWNlJywKICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiB7CiAgICAgICAgICAgIEVtYWlsID0+IDAsCiAgICAgICAgfSwKICAgICAgICBNYXRjaCA9PiAiJFRlc3RDdXN0b21lclVzZXJMb2dpbjEgJFRlc3RDdXN0b21lclVzZXJMb2dpbjEiLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICA9PiAnQ3VzdG9tZXIgcmVwbGFjZScsCiAgICAgICAgRWZmZWN0aXZlVmFsdWUgPT4gewogICAgICAgICAgICBFbWFpbCA9PiAxLAogICAgICAgIH0sCiAgICAgICAgTWF0Y2ggPT4gIiRUZXN0Q3VzdG9tZXJVc2VyTG9naW4yICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4yIiwKICAgIH0sCik7CgpteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKClRFU1Q6CmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ1JlcGxhY2VDdXN0b21lclJlYWxOYW1lT25TbGF2ZUFydGljbGVDb21tdW5pY2F0aW9uQ2hhbm5lbHMnLAogICAgICAgIFZhbHVlID0+ICRUZXN0LT57RWZmZWN0aXZlVmFsdWV9LAogICAgKTsKICAgIG15ICRTdWNjZXNzID0gJEV2ZW50T2JqZWN0LT5SdW4oCiAgICAgICAgRXZlbnQgPT4gJ0FydGljbGVTZW5kJywKICAgICAgICBEYXRhICA9PiB7CiAgICAgICAgICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgICAgICB9LAogICAgICAgIENvbmZpZyA9PiB7fSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiJFRlc3QtPntOYW1lfSAtIEFydGljbGVTZW5kIGV2ZW50IGV4ZWN1dGVkIGNvcnJlY3RseSIsCiAgICApOwoKICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICBUaWNrZXRJRCA9PiAkU2xhdmVUaWNrZXRJRCwKICAgICk7CgogICAgbXkgJEFydGljbGVCYWNrZW5kT2JqZWN0ID0gJEFydGljbGVPYmplY3QtPkJhY2tlbmRGb3JBcnRpY2xlKAogICAgICAgIFRpY2tldElEICA9PiAkQXJ0aWNsZXNbLTFdLT57VGlja2V0SUR9LAogICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXNbLTFdLT57QXJ0aWNsZUlEfSwKICAgICk7CgogICAgbXkgJUFydGljbGUgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgVGlja2V0SUQgID0+ICRBcnRpY2xlc1stMV0tPntUaWNrZXRJRH0sCiAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlc1stMV0tPntBcnRpY2xlSUR9LAogICAgKTsKCiAgICBteSAkTWF0Y2hTdWNjZXNzID0gJEFydGljbGV7Qm9keX0gPX4gbXskVGVzdC0+e01hdGNofX0gLy8gMDsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkTWF0Y2hTdWNjZXNzLAogICAgICAgICIkVGVzdC0+e05hbWV9IC0gTmV3IGFydGljbGUgYm9keSBtYXRjaGVkIGN1c3RvbWVyIHJlYWwgbmFtZTogJyRUZXN0LT57TWF0Y2h9JyIsCiAgICApOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyMgbm8gY3JpdGljIChNb2R1bGVzOjpSZXF1aXJlRXhwbGljaXRQYWNrYWdlKQp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkVGlja2V0T2JqZWN0ICAgICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7Cm15ICRMaW5rT2JqZWN0ICAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKbXkgJEN1c3RvbWVyVXNlck9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7Cm15ICRDb25maWdPYmplY3QgICAgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiMgc3RhcnQgUmVzdG9yZURhdGFic2UKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGVuYWJsZSBjb25maWcgTWFzdGVyU2xhdmU6OkZvcndhcmRTbGF2ZXMKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ01hc3RlclNsYXZlOjpGb3J3YXJkU2xhdmVzJywKICAgIFZhbHVlID0+IDEsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja01YUmVjb3JkJywKICAgIFZhbHVlID0+IDAsCik7CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIGdldCByYW5kb20gSUQKbXkgJFJhbmRvbUlEID0gJEhlbHBlck9iamVjdC0+R2V0UmFuZG9tSUQoKTsKCiMgZ2V0IG1hc3Rlci9zbGF2ZSBkeW5hbWljIGZpZWxkIGRhdGEKbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnTWFzdGVyU2xhdmU6OkR5bmFtaWNGaWVsZCcpOwpteSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGREYXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgTmFtZSA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQsCik7CgojIGNyZWF0ZSBuZXcgdXNlcgpteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXJPYmplY3QtPlRlc3RVc2VyQ3JlYXRlKAogICAgR3JvdXBzICAgPT4gWyAnYWRtaW4nLCAndXNlcnMnIF0sCiAgICBMYW5ndWFnZSA9PiAnZW4nCik7CiRTZWxmLT5UcnVlKAogICAgJFRlc3RVc2VyTG9naW4sCiAgICAiVXNlckFkZCgpICRUZXN0VXNlckxvZ2luIiwKKTsKCiMgY3JlYXRlIG5ldyBjdXN0b21lciB1c2VyCm15ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4gPSAkSGVscGVyT2JqZWN0LT5UZXN0Q3VzdG9tZXJVc2VyQ3JlYXRlKAogICAgTGFuZ3VhZ2UgPT4gJ2VuJywKKTsKJFNlbGYtPlRydWUoCiAgICAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgIkN1c3RvbWVyVXNlckFkZCgpICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4iLAopOwoKIyBjcmVhdGUgZmlyc3QgdGVzdCB0aWNrZXQKbXkgJE1hc3RlclRpY2tldE51bWJlciA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZU51bWJlcigpOwpteSAkTWFzdGVyVGlja2V0SUQgICAgID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgVE4gICAgICAgICAgID0+ICRNYXN0ZXJUaWNrZXROdW1iZXIsCiAgICBUaXRsZSAgICAgICAgPT4gJ01hc3RlciB1bml0IHRlc3QgdGlja2V0ICcgLiAkUmFuZG9tSUQsCiAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgIFN0YXRlICAgICAgICA9PiAnbmV3JywKICAgIEN1c3RvbWVyTm8gICA9PiAkVGVzdEN1c3RvbWVyVXNlckxvZ2luLAogICAgQ3VzdG9tZXJVc2VyID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICAsCiAgICBPd25lcklEID0+IDEsCiAgICBVc2VySUQgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJE1hc3RlclRpY2tldElELAogICAgIlRpY2tldENyZWF0ZSgpIFRpY2tldCBJRCAkTWFzdGVyVGlja2V0SUQiLAopOwoKbXkgJEVtYWlsQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKS0+QmFja2VuZEZvckNoYW5uZWwoCiAgICBDaGFubmVsTmFtZSA9PiAnRW1haWwnLAopOwoKIyBjcmVhdGUgYXJ0aWNsZSBmb3IgdGVzdCB0aWNrZXQKbXkgJEFydGljbGVJRCA9ICRFbWFpbEJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAxLAogICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdNYXN0ZXIgQXJ0aWNsZScsCiAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAnVW5pdCB0ZXN0IE1hc3RlclRpY2tldCcsCiAgICBDb250ZW50VHlwZSAgICAgICAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICBIaXN0b3J5VHlwZSAgICAgICAgICA9PiAnRW1haWxDdXN0b21lcicsCiAgICBIaXN0b3J5Q29tbWVudCAgICAgICA9PiAnVW5pdCB0ZXN0IGFydGljbGUnLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkQXJ0aWNsZUlELAogICAgIkFydGljbGVDcmVhdGUoKSBBcnRpY2xlIElEICRBcnRpY2xlSUQiLAopOwoKbXkgJER5bmFtaWNGaWVsZCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgSUQgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkRGF0YS0+e0lEfSwKKTsKCiMgc2V0IHRlc3QgdGlja2V0IGFzIG1hc3RlciB0aWNrZXQKbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZCwKICAgIE9iamVjdElEICAgICAgICAgICA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJ01hc3RlcicsCiAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJWYWx1ZVNldCgpIFRpY2tldCBJRCAkTWFzdGVyVGlja2V0SUQgRHluYW1pY0ZpZWxkICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCB1cGRhdGVkIGFzIE1hc3RlclRpY2tldCIsCik7CgojIGNyZWF0ZSBzZWNvbmQgdGVzdCB0aWNrZXQKbXkgJFNsYXZlVGlja2V0TnVtYmVyID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlTnVtYmVyKCk7Cm15ICRTbGF2ZVRpY2tldElEICAgICA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgIFROICAgICAgICAgICA9PiAkU2xhdmVUaWNrZXROdW1iZXIsCiAgICBUaXRsZSAgICAgICAgPT4gJ1NsYXZlIHVuaXQgdGVzdCB0aWNrZXQgJyAuICRSYW5kb21JRCwKICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgU3RhdGUgICAgICAgID0+ICduZXcnLAogICAgQ3VzdG9tZXJJRCAgID0+ICRUZXN0Q3VzdG9tZXJVc2VyTG9naW4sCiAgICBDdXN0b21lclVzZXIgPT4gJFRlc3RDdXN0b21lclVzZXJMb2dpbiAuICdAbG9jYWx1bml0dGVzdC5jb20nLAogICAgT3duZXJJRCAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU2xhdmVUaWNrZXRJRCwKICAgICJUaWNrZXRDcmVhdGUoKSBUaWNrZXQgSUQgJFNsYXZlVGlja2V0SUQiLAopOwokU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkLAogICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRTbGF2ZVRpY2tldElELAogICAgVmFsdWUgICAgICAgICAgICAgID0+ICJTbGF2ZU9mOiRNYXN0ZXJUaWNrZXROdW1iZXIiLAogICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBldmVudCBBcnRpY2xlU2VuZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBtYXN0ZXIgdGlja2V0IGFydGljbGUgYW5kIGZvcndhcmQgaXQKbXkgJE1hc3Rlck5ld1N1YmplY3QgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdWJqZWN0QnVpbGQoCiAgICBUaWNrZXROdW1iZXIgPT4gJE1hc3RlclRpY2tldE51bWJlciwKICAgIFN1YmplY3QgICAgICA9PiAnTWFzdGVyIEFydGljbGUnLAogICAgQWN0aW9uICAgICAgID0+ICdGb3J3YXJkJywKKTsKbXkgJEZvcndhcmRBcnRpY2xlSUQgPSAkRW1haWxCYWNrZW5kT2JqZWN0LT5BcnRpY2xlU2VuZCgKICAgIFRpY2tldElEICAgICAgICAgICAgID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IDEsCiAgICBTZW5kZXJUeXBlICAgICAgICAgICA9PiAnYWdlbnQnLAogICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJ1NvbWUgQWdlbnQgPGVtYWlsQGV4YW1wbGUuY29tPicsCiAgICBUbyAgICAgICAgICAgICAgICAgICA9PiAnU29tZSBDdXN0b21lciBBIDxjdXN0b21lci1hQGV4YW1wbGUuY29tPicsCiAgICBTdWJqZWN0ICAgICAgICAgICAgICA9PiAkTWFzdGVyTmV3U3ViamVjdCwKICAgIEJvZHkgICAgICAgICAgICAgICAgID0+ICdVbml0IHRlc3QgZm9yd2FyZGVkIGFydGljbGUnLAogICAgQ2hhcnNldCAgICAgICAgICAgICAgPT4gJ2lzby04ODU5LTE1JywKICAgIE1pbWVUeXBlICAgICAgICAgICAgID0+ICd0ZXh0L3BsYWluJywKICAgIEhpc3RvcnlUeXBlICAgICAgICAgID0+ICdGb3J3YXJkJywKICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICdGb3J3YXJkZWQgYXJ0aWNsZScsCiAgICBOb0FnZW50Tm90aWZ5ICAgICAgICA9PiAwLAogICAgVXNlcklEICAgICAgICAgICAgICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJBcnRpY2xlU2VuZCgpIEZvcndhcmRlZCBNYXN0ZXJUaWNrZXQgQXJ0aWNsZSBJRCAkRm9yd2FyZEFydGljbGVJRCIsCik7CgojIGdldCBtYXN0ZXIgdGlja2V0IGhpc3RvcnkKbXkgQE1hc3Rlckhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwoKbXkgJE1hc3Rlckxhc3RIaXN0b3J5RW50cnkgPSAkTWFzdGVySGlzdG9yeUxpbmVzWy0xXTsKCiMgdmVyaWZ5IG1hc3RlciB0aWNrZXQgYXJ0aWNsZSBpcyBjcmVhdGVkCiRTZWxmLT5Jc0RlZXBseSgKICAgICRNYXN0ZXJMYXN0SGlzdG9yeUVudHJ5LT57TmFtZX0sCiAgICAnTWFzdGVyVGlja2V0QWN0aW9uOiBBcnRpY2xlU2VuZCcsCiAgICAiTWFzdGVyVGlja2V0IEFydGljbGVTZW5kIGV2ZW50IC0gIiwKKTsKCiMgZ2V0IHNsYXZlIHRpY2tldCBoaXN0b3J5Cm15IEBTbGF2ZUhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkU2xhdmVUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7Cm15ICRTbGF2ZUxhc3RIaXN0b3J5RW50cnkgPSAkU2xhdmVIaXN0b3J5TGluZXNbLTFdOwoKIyB2ZXJpZnkgc2xhdmUgdGlja2V0IGFydGljbGUgdHJpZWQgdG8gc2VuZAokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2xhdmVMYXN0SGlzdG9yeUVudHJ5LT57TmFtZX0sCiAgICAnTWFzdGVyVGlja2V0OiBubyBjdXN0b21lciBlbWFpbCBmb3VuZCwgc2VuZCBubyBtYXN0ZXIgbWVzc2FnZSB0byBjdXN0b21lci4nLAogICAgIlNsYXZlVGlja2V0IEFydGljbGVTZW5kIGV2ZW50IC0gIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IGV2ZW50IEFydGljbGVDcmVhdGUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpteSAkSW50ZXJuYWxCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpLT5CYWNrZW5kRm9yQ2hhbm5lbCgKICAgIENoYW5uZWxOYW1lID0+ICdJbnRlcm5hbCcsCik7CgojIGNyZWF0ZSBub3RlIGFydGljbGUgZm9yIG1hc3RlciB0aWNrZXQKbXkgJEFydGljbGVJRENyZWF0ZSA9ICRJbnRlcm5hbEJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiAwLAogICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJ2FnZW50JywKICAgIFN1YmplY3QgICAgICAgICAgICAgID0+ICdOb3RlIGFydGljbGUnLAogICAgQm9keSAgICAgICAgICAgICAgICAgPT4gJ1VuaXQgdGVzdCBNYXN0ZXJUaWNrZXQnLAogICAgQ29udGVudFR5cGUgICAgICAgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ0FkZE5vdGUnLAogICAgSGlzdG9yeUNvbW1lbnQgICAgICAgPT4gJ1VuaXQgdGVzdCBhcnRpY2xlJywKICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJEFydGljbGVJRENyZWF0ZSwKICAgICJBcnRpY2xlQ3JlYXRlKCkgTm90ZSBBcnRpY2xlIElEICRBcnRpY2xlSURDcmVhdGUgY3JlYXRlZCBmb3IgTWFzdGVyVGlja2V0IElEICRNYXN0ZXJUaWNrZXRJRCIsCik7CgojIGdldCBtYXN0ZXIgdGlja2V0IGhpc3RvcnkKQE1hc3Rlckhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwooJE1hc3Rlckxhc3RIaXN0b3J5RW50cnkpID0gZ3JlcCB7ICRfLT57TmFtZX0gZXEgJ01hc3RlclRpY2tldEFjdGlvbjogQXJ0aWNsZUNyZWF0ZScgfSBATWFzdGVySGlzdG9yeUxpbmVzOwoKIyB2ZXJpZnkgbWFzdGVyIHRpY2tldCBhcnRpY2xlIGlzIGNyZWF0ZWQKJFNlbGYtPklzRGVlcGx5KAogICAgJE1hc3Rlckxhc3RIaXN0b3J5RW50cnktPntOYW1lfSwKICAgICdNYXN0ZXJUaWNrZXRBY3Rpb246IEFydGljbGVDcmVhdGUnLAogICAgIk1hc3RlclRpY2tldCBBcnRpY2xlQ3JlYXRlIGV2ZW50IC0gIiwKKTsKCiMgZ2V0IHNsYXZlIHRpY2tldCBoaXN0b3J5CkBTbGF2ZUhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkU2xhdmVUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CigkU2xhdmVMYXN0SGlzdG9yeUVudHJ5KSA9IGdyZXAgeyAkXy0+e05hbWV9IGVxICdBZGRlZCBhcnRpY2xlIGJhc2VkIG9uIG1hc3RlciB0aWNrZXQuJyB9IEBTbGF2ZUhpc3RvcnlMaW5lczsKCiMgdmVyaWZ5IHNsYXZlIHRpY2tldCBhcnRpY2xlIGlzIGNyZWF0ZWQKJFNlbGYtPklzRGVlcGx5KAogICAgJFNsYXZlTGFzdEhpc3RvcnlFbnRyeS0+e05hbWV9LAogICAgJ0FkZGVkIGFydGljbGUgYmFzZWQgb24gbWFzdGVyIHRpY2tldC4nLAogICAgIlNsYXZlVGlja2V0IEFydGljbGVDcmVhdGUgZXZlbnQgLSAiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3QgZXZlbnQgVGlja2V0U3RhdGVVcGRhdGUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjaGFuZ2UgbWFzdGVyIHRpY2tldCBzdGF0ZSB0byAnb3BlbicKJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgIFN0YXRlICAgID0+ICdvcGVuJywKICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVGlja2V0U3RhdGVTZXQoKSBNYXN0ZXJUaWNrZXQgc3RhdGUgdXBkYXRlZCAtICdvcGVuJyIsCik7CgojIGdldCBtYXN0ZXIgdGlja2V0IGhpc3RvcnkKQE1hc3Rlckhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokTWFzdGVyTGFzdEhpc3RvcnlFbnRyeSA9ICRNYXN0ZXJIaXN0b3J5TGluZXNbLTFdOwoKIyB2ZXJpZnkgbWFzdGVyIHRpY2tldCBzdGF0ZSBpcyB1cGRhdGVkCiRTZWxmLT5Jc0RlZXBseSgKICAgICRNYXN0ZXJMYXN0SGlzdG9yeUVudHJ5LT57TmFtZX0sCiAgICAnTWFzdGVyVGlja2V0QWN0aW9uOiBUaWNrZXRTdGF0ZVVwZGF0ZScsCiAgICAiTWFzdGVyVGlja2V0IFRpY2tldFN0YXRlVXBkYXRlIGV2ZW50IC0gIiwKKTsKCiMgdmVyaWZ5IHNsYXZlIHRpY2tldCBzdGF0ZSBpcyB1cGRhdGVkCm15ICVTbGF2ZVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkU2xhdmVUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2xhdmVUaWNrZXREYXRhe1N0YXRlfSwKICAgICdvcGVuJywKICAgICJTbGF2ZVRpY2tldCBzdGF0ZSB1cGRhdGVkIC0gJ29wZW4nIC0gIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IGV2ZW50IFRpY2tldFBlbmRpbmdUaW1lVXBkYXRlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY2hhbmdlIHBlbmRpbmcgdGltZSBmb3IgbWFzdGVyIHRpY2tldAokU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFBlbmRpbmdUaW1lU2V0KAogICAgWWVhciAgICAgPT4gMDAwMCwKICAgIE1vbnRoICAgID0+IDAwLAogICAgRGF5ICAgICAgPT4gMDAsCiAgICBIb3VyICAgICA9PiAwMCwKICAgIE1pbnV0ZSAgID0+IDAwLAogICAgVGlja2V0SUQgPT4gJE1hc3RlclRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUaWNrZXRQZW5kaW5nVGltZVNldCgpIE1hc3RlclRpY2tldCBwZW5kaW5nIHRpbWUgdXBkYXRlZCIsCik7CgojIGdldCBtYXN0ZXIgdGlja2V0IGhpc3RvcnkKQE1hc3Rlckhpc3RvcnlMaW5lcyA9ICRUaWNrZXRPYmplY3QtPkhpc3RvcnlHZXQoCiAgICBUaWNrZXRJRCA9PiAkTWFzdGVyVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokTWFzdGVyTGFzdEhpc3RvcnlFbnRyeSA9ICRNYXN0ZXJIaXN0b3J5TGluZXNbLTFdOwoKIyB2ZXJpZnkgbWFzdGVyIHRpY2tldCBwZW5kaW5nIHRpbWUgaXMgdXBkYXRlZAokU2VsZi0+SXNEZWVwbHkoCiAgICAkTWFzdGVyTGFzdEhpc3RvcnlFbnRyeS0+e05hbWV9LAogICAgJ01hc3RlclRpY2tldEFjdGlvbjogVGlja2V0UGVuZGluZ1RpbWVVcGRhdGUnLAogICAgIk1hc3RlclRpY2tldCBUaWNrZXRQZW5kaW5nVGltZVVwZGF0ZSBldmVudCAtICIsCik7CgojIGdldCBzbGF2ZSB0aWNrZXQgaGlzdG9yeQpAU2xhdmVIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgVGlja2V0SUQgPT4gJFNsYXZlVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2xhdmVMYXN0SGlzdG9yeUVudHJ5ID0gJFNsYXZlSGlzdG9yeUxpbmVzWy0xXTsKCiMgdmVyaWZ5IHNsYXZlIHRpY2tldCBwZW5kaW5nIHRpbWUgaXMgdXBkYXRlZAokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2xhdmVMYXN0SGlzdG9yeUVudHJ5LT57TmFtZX0sCiAgICAnJSUwMC0wMC0wMCAwMDowMCcsCiAgICAiU2xhdmVUaWNrZXQgcGVuZGluZyB0aW1lIHVwZGF0ZSAtICIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBldmVudCBUaWNrZXRQcmlvcml0eVVwZGF0ZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNoYW5nZSBtYXN0ZXIgdGlja2V0IHByaW9yaXR5IHRvICcyIGxvdycKJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQcmlvcml0eVNldCgKICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIFByaW9yaXR5ID0+ICcyIGxvdycsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRTdWNjZXNzLAogICAgIlRpY2tldFByaW9yaXR5U2V0KCkgTWFzdGVyVGlja2V0IHByaW9yaXR5IHVwZGF0ZWQgLSAnMiBsb3cnIiwKKTsKCiMgZ2V0IG1hc3RlciB0aWNrZXQgaGlzdG9yeQpATWFzdGVySGlzdG9yeUxpbmVzID0gJFRpY2tldE9iamVjdC0+SGlzdG9yeUdldCgKICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRNYXN0ZXJMYXN0SGlzdG9yeUVudHJ5ID0gJE1hc3Rlckhpc3RvcnlMaW5lc1stMV07CgojIHZlcmlmeSBtYXN0ZXIgdGlja2V0IHByaW9yaXR5IGlzIHVwZGF0ZWQKJFNlbGYtPklzRGVlcGx5KAogICAgJE1hc3Rlckxhc3RIaXN0b3J5RW50cnktPntOYW1lfSwKICAgICdNYXN0ZXJUaWNrZXRBY3Rpb246IFRpY2tldFByaW9yaXR5VXBkYXRlJywKICAgICJNYXN0ZXJUaWNrZXQgVGlja2V0UHJpb3JpdHlVcGRhdGUgZXZlbnQgLSAiLAopOwoKIyB2ZXJpZnkgc2xhdmUgdGlja2V0IHByaW9yaXR5IGlzIHVwZGF0ZWQKJVNsYXZlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgIFRpY2tldElEID0+ICRTbGF2ZVRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPklzRGVlcGx5KAogICAgJFNsYXZlVGlja2V0RGF0YXtQcmlvcml0eX0sCiAgICAnMiBsb3cnLAogICAgIlNsYXZlVGlja2V0IHByaW9yaXR5IHVwZGF0ZWQgLSAnMiBsb3cnIC0gIiwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyB0ZXN0IGV2ZW50IFRpY2tldE93bmVyVXBkYXRlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY2hhbmdlIG1hc3RlciB0aWNrZXQgb3duZXIKJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lclNldCgKICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIE5ld1VzZXIgID0+ICRUZXN0VXNlckxvZ2luLAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUaWNrZXRPd25lclNldCgpIE1hc3RlclRpY2tldCBvd25lciB1cGRhdGVkIC0gJFRlc3RVc2VyTG9naW4iLAopOwoKIyBnZXQgbWFzdGVyIHRpY2tldCBoaXN0b3J5CkBNYXN0ZXJIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgVGlja2V0SUQgPT4gJE1hc3RlclRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJE1hc3Rlckxhc3RIaXN0b3J5RW50cnkgPSAkTWFzdGVySGlzdG9yeUxpbmVzWy0xXTsKCiMgdmVyaWZ5IG1hc3RlciB0aWNrZXQgb3duZXIgaXMgdXBkYXRlZAokU2VsZi0+SXNEZWVwbHkoCiAgICAkTWFzdGVyTGFzdEhpc3RvcnlFbnRyeS0+e05hbWV9LAogICAgJ01hc3RlclRpY2tldEFjdGlvbjogVGlja2V0T3duZXJVcGRhdGUnLAogICAgIk1hc3RlclRpY2tldCBUaWNrZXRPd25lclVwZGF0ZSBldmVudCAtICIsCik7CgojIHZlcmlmeSBzbGF2ZSB0aWNrZXQgb3duZXIgaXMgdXBkYXRlZAolU2xhdmVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgVGlja2V0SUQgPT4gJFNsYXZlVGlja2V0SUQsCiAgICBVc2VySUQgICA9PiAxLAopOwokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2xhdmVUaWNrZXREYXRhe093bmVyfSwKICAgICRUZXN0VXNlckxvZ2luLAogICAgIlNsYXZlVGlja2V0IG93bmVyIHVwZGF0ZWQgLSAiLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIHRlc3QgZXZlbnQgVGlja2V0UmVzcG9uc2libGVVcGRhdGUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBzZXQgbmV3IHJlc3BvbnNpYmxlIHVzZXIgZm9yIG1hc3RlciB0aWNrZXQKJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRSZXNwb25zaWJsZVNldCgKICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIE5ld1VzZXIgID0+ICRUZXN0VXNlckxvZ2luLAogICAgVXNlcklEICAgPT4gMSwKKTsKJFNlbGYtPlRydWUoCiAgICAkU3VjY2VzcywKICAgICJUaWNrZXRSZXNwb25zaWJsZVNldCgpIE1hc3RlclRpY2tldCByZXNwb25zaWJsZSB1cGRhdGVkIC0gJFRlc3RVc2VyTG9naW4iLAopOwoKIyBnZXQgbWFzdGVyIHRpY2tldCBoaXN0b3J5CkBNYXN0ZXJIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgVGlja2V0SUQgPT4gJE1hc3RlclRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJE1hc3Rlckxhc3RIaXN0b3J5RW50cnkgPSAkTWFzdGVySGlzdG9yeUxpbmVzWy0xXTsKCiMgdmVyaWZ5IG1hc3RlciB0aWNrZXQgcmVzcG9uc2libGUgdXNlciBpcyB1cGRhdGVkCiRTZWxmLT5Jc0RlZXBseSgKICAgICRNYXN0ZXJMYXN0SGlzdG9yeUVudHJ5LT57TmFtZX0sCiAgICAnTWFzdGVyVGlja2V0QWN0aW9uOiBUaWNrZXRSZXNwb25zaWJsZVVwZGF0ZScsCiAgICAiTWFzdGVyVGlja2V0IFRpY2tldFJlc3BvbnNpYmxlVXBkYXRlIGV2ZW50IC0gIiwKKTsKCiMgdmVyaWZ5IHNsYXZlIHRpY2tldCBvd25lciBpcyB1cGRhdGVkCiVTbGF2ZVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkU2xhdmVUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5Jc0RlZXBseSgKICAgICRTbGF2ZVRpY2tldERhdGF7UmVzcG9uc2libGV9LAogICAgJFRlc3RVc2VyTG9naW4sCiAgICAiU2xhdmVUaWNrZXQgcmVzcG9uc2libGUgdXBkYXRlZCAtICIsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgdGVzdCBldmVudCBUaWNrZXRMb2NrVXBkYXRlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgbG9jayBtYXN0ZXIgdGlja2V0CiRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0TG9ja1NldCgKICAgIExvY2sgICAgID0+ICdsb2NrJywKICAgIFRpY2tldElEID0+ICRNYXN0ZXJUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1Y2Nlc3MsCiAgICAiVGlja2V0TG9ja1NldCgpIE1hc3RlclRpY2tldCBpcyBsb2NrZWQiLAopOwoKIyBnZXQgbWFzdGVyIHRpY2tldCBoaXN0b3J5CkBNYXN0ZXJIaXN0b3J5TGluZXMgPSAkVGlja2V0T2JqZWN0LT5IaXN0b3J5R2V0KAogICAgVGlja2V0SUQgPT4gJE1hc3RlclRpY2tldElELAogICAgVXNlcklEICAgPT4gMSwKKTsKJE1hc3Rlckxhc3RIaXN0b3J5RW50cnkgPSAkTWFzdGVySGlzdG9yeUxpbmVzWy0xXTsKCiMgdmVyaWZ5IG1hc3RlciB0aWNrZXQgaXMgbG9ja2VkCiRTZWxmLT5Jc0RlZXBseSgKICAgICRNYXN0ZXJMYXN0SGlzdG9yeUVudHJ5LT57TmFtZX0sCiAgICAnTWFzdGVyVGlja2V0QWN0aW9uOiBUaWNrZXRMb2NrVXBkYXRlJywKICAgICJNYXN0ZXJUaWNrZXQgVGlja2V0TG9ja1VwZGF0ZSBldmVudCAtICIsCik7CgojIHZlcmlmeSBzbGF2ZSB0aWNrZXQgaXMgbG9ja2VkCiVTbGF2ZVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICBUaWNrZXRJRCA9PiAkU2xhdmVUaWNrZXRJRCwKICAgIFVzZXJJRCAgID0+IDEsCik7CiRTZWxmLT5Jc0RlZXBseSgKICAgICRTbGF2ZVRpY2tldERhdGF7TG9ja30sCiAgICAnbG9jaycsCiAgICAiU2xhdmVUaWNrZXQgbG9jayB1cGRhdGVkIC0gIiwKKTsKCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKMTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjEgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuQWdlbnQgPSBDb3JlLkFnZW50IHx8IHt9OwpDb3JlLkFnZW50LkFkbWluID0gQ29yZS5BZ2VudC5BZG1pbiB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIENvcmUuQWdlbnQuQWRtaW4uRHluYW1pY0ZpZWxkTWFzdGVyU2xhdmUKICogQG1lbWJlcm9mIENvcmUuQWdlbnQuQWRtaW4KICogQGF1dGhvciBPVFJTIEFHCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIGZ1bmN0aW9ucyBmb3IgU3lzdGVtQ29uZmlndXJhdGlvbiBtb2R1bGUuCiAqLwogQ29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGRNYXN0ZXJTbGF2ZSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAkKCcuU2hvd1dhcm5pbmcnKS5iaW5kKCdjaGFuZ2Uga2V5dXAnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgncC5XYXJuaW5nJykucmVtb3ZlQ2xhc3MoJ0hpZGRlbicpOwogICAgfSk7CiAgICBDb3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZC5WYWxpZGF0aW9uSW5pdCgpOwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oQ29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGRNYXN0ZXJTbGF2ZSB8fCB7fSkpOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjEgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwovLyAtLQovLyAkb3JpZ2luOiBvdHJzIC0gODIwN2QwZjY4MWFkY2RlYjVjMWI0OTdhYzU0N2ExZDk3NDk4MzhkNSAtIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5BZ2VudC5UaWNrZXRBY3Rpb25Db21tb24uanMKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkFnZW50ID0gQ29yZS5BZ2VudCB8fCB7fTsKCi8vIC0tLQovLyBPVFJTTWFzdGVyU2xhdmUKLy8gLS0tCi8vLyoqCi8vICogQG5hbWVzcGFjZSBDb3JlLkFnZW50LlRpY2tldEFjdGlvbkNvbW1vbgovLyAqIEBtZW1iZXJvZiBDb3JlLkFnZW50Ci8vICogQGF1dGhvciBPVFJTIEFHCi8vICogQGRlc2NyaXB0aW9uCi8vICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIEFnZW50VGlja2V0QWN0aW9uQ29tbW9uLgovLyAqLwovL0NvcmUuQWdlbnQuVGlja2V0QWN0aW9uQ29tbW9uID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewovKioKICogQG5hbWVzcGFjZSBDb3JlLkFnZW50LlRpY2tldE1hc3RlclNsYXZlCiAqIEBtZW1iZXJvZiBDb3JlLkFnZW50CiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIFRpY2tldE1hc3RlclNsYXZlLgogKi8KQ29yZS5BZ2VudC5UaWNrZXRNYXN0ZXJTbGF2ZSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKLy8gLS0tCgogICAgLyoqCiAgICAgKiBAbmFtZSBJbml0CiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRBY3Rpb25Db21tb24KICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG1vZHVsZSBmdW5jdGlvbmFsaXR5LgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewoKICAgICAgICB2YXIgRHluYW1pY0ZpZWxkTmFtZXMgPSBDb3JlLkNvbmZpZy5HZXQoJ0R5bmFtaWNGaWVsZE5hbWVzJyksCiAgICAgICAgICAgIEZpZWxkcyA9IFsnVHlwZUlEJywgJ1NlcnZpY2VJRCcsICdTTEFJRCcsICdOZXdPd25lcklEJywgJ05ld1Jlc3BvbnNpYmxlSUQnLCAnTmV3U3RhdGVJRCcsICdOZXdQcmlvcml0eUlEJ10sCiAgICAgICAgICAgIE1vZGlmaWVkRmllbGRzOwoKICAgICAgICAvLyBCaW5kIGV2ZW50cyB0byBzcGVjaWZpYyBmaWVsZHMKICAgICAgICAkLmVhY2goRmllbGRzLCBmdW5jdGlvbihJbmRleCwgVmFsdWUpIHsKICAgICAgICAgICAgTW9kaWZpZWRGaWVsZHMgPSBDb3JlLkRhdGEuQ29weU9iamVjdChGaWVsZHMpLmNvbmNhdChEeW5hbWljRmllbGROYW1lcyk7CiAgICAgICAgICAgIE1vZGlmaWVkRmllbGRzLnNwbGljZShJbmRleCwgMSk7CgogICAgICAgICAgICBGaWVsZFVwZGF0ZShWYWx1ZSwgTW9kaWZpZWRGaWVsZHMpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBCaW5kIGV2ZW50IHRvIFF1ZXVlIGZpZWxkLgogICAgICAgICQoJyNOZXdRdWV1ZUlEJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgQ29yZS5BSkFYLkZvcm1VcGRhdGUoJCgnI0NvbXBvc2UnKSwgJ0FKQVhVcGRhdGUnLCAnTmV3UXVldWVJRCcsIFsnVHlwZUlEJywgJ1NlcnZpY2VJRCcsICdOZXdPd25lcklEJywgJ05ld1Jlc3BvbnNpYmxlSUQnLCAnTmV3U3RhdGVJRCcsICdOZXdQcmlvcml0eUlEJywgJ1N0YW5kYXJkVGVtcGxhdGVJRCddLmNvbmNhdChEeW5hbWljRmllbGROYW1lcykpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBCaW5kIGV2ZW50IHRvIFN0YW5kYXJkVGVtcGxhdGUgZmllbGQuCiAgICAgICAgJCgnI1N0YW5kYXJkVGVtcGxhdGVJRCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIENvcmUuQWdlbnQuVGlja2V0QWN0aW9uLkNvbmZpcm1UZW1wbGF0ZU92ZXJ3cml0ZSgnUmljaFRleHQnLCAkKHRoaXMpLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBDb3JlLkFKQVguRm9ybVVwZGF0ZSgkKCcjQ29tcG9zZScpLCAnQUpBWFVwZGF0ZScsICdTdGFuZGFyZFRlbXBsYXRlSUQnLCBbJ1JpY2hUZXh0RmllbGQnXSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CgogICAgICAgIC8vIEJpbmQgY2xpY2sgZXZlbnQgdG8gQ3JlYXRlQXJ0aWNsZSBjaGVja2JveCBhbmQgdG9nZ2xlIHdpZGdldC4KICAgICAgICAkKCcjQ3JlYXRlQXJ0aWNsZSwgI1dpZGdldEFydGljbGUgLldpZGdldEFjdGlvbi5Ub2dnbGUnKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQoJyNXaWRnZXRBcnRpY2xlIC5WYWxpZGF0ZV9EZXBlbmRpbmdSZXF1aXJlZEFORC5WYWxpZGF0ZV9EZXBlbmRpbmdfQ3JlYXRlQXJ0aWNsZScpLmVhY2goZnVuY3Rpb24gKEluZGV4LCBFbGVtZW50KSB7CiAgICAgICAgICAgICAgICB2YXIgJEVsZW1lbnQgPSAkKEVsZW1lbnQpOwogICAgICAgICAgICAgICAgdmFyIENsb3Nlc3RDbGFzcyA9ICdGaWVsZCc7CiAgICAgICAgICAgICAgICBpZiAoJEVsZW1lbnQuYXR0cignaWQnKSA9PT0gJ1JpY2hUZXh0JykgewogICAgICAgICAgICAgICAgICAgIENsb3Nlc3RDbGFzcyA9ICdSaWNoVGV4dEZpZWxkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkKCcjQ3JlYXRlQXJ0aWNsZScpLnByb3AoJ2NoZWNrZWQnKSAmJiAkKCcjV2lkZ2V0QXJ0aWNsZScpLmhhc0NsYXNzKCdFeHBhbmRlZCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQuY2xvc2VzdCgnLicgKyBDbG9zZXN0Q2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICAgIC5wcmV2KCdsYWJlbCcpCiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnTWFuZGF0b3J5JykKICAgICAgICAgICAgICAgICAgICAgICAgLnByZXBlbmQoJzxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkRWxlbWVudC5jbG9zZXN0KCcuJyArIENsb3Nlc3RDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgLnByZXYoJ2xhYmVsJykKICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdNYW5kYXRvcnknKQogICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnc3BhbicpCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuVW5IaWdobGlnaHRFcnJvcihFbGVtZW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqIEBuYW1lIEZpZWxkVXBkYXRlCiAgICAgKiBAbWVtYmVyb2YgQ29yZS5BZ2VudC5UaWNrZXRBY3Rpb25Db21tb24KICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IFZhbHVlIC0gRmllbGRJRAogICAgICogQHBhcmFtIHtBcnJheX0gTW9kaWZpZWRGaWVsZHMgLSBGaWVsZHMKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBDcmVhdGUgb24gY2hhbmdlIGV2ZW50IGhhbmRsZXIKICAgICAqLwogICAgZnVuY3Rpb24gRmllbGRVcGRhdGUgKFZhbHVlLCBNb2RpZmllZEZpZWxkcykgewogICAgICAgICQoJyMnICsgVmFsdWUpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIENvcmUuQUpBWC5Gb3JtVXBkYXRlKCQoJyNDb21wb3NlJyksICdBSkFYVXBkYXRlJywgVmFsdWUsIE1vZGlmaWVkRmllbGRzKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwovLyAtLS0KLy8gT1RSU01hc3RlclNsYXZlCi8vIC0tLQovL30oQ29yZS5BZ2VudC5UaWNrZXRBY3Rpb25Db21tb24gfHwge30pKTsKfShDb3JlLkFnZW50LlRpY2tldE1hc3RlclNsYXZlIHx8IHt9KSk7Ci8vIC0tLQo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSB2YXI6OnBhY2thZ2VzZXR1cDo6T1RSU01hc3RlclNsYXZlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKKTsKCj1oZWFkMSBOQU1FCgp2YXI6OnBhY2thZ2VzZXR1cDo6T1RSU01hc3RlclNsYXZlIC0gY29kZSB0byBleGVjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFNZTk9QU0lTCgpGdW5jdGlvbnMgZm9yIGluc3RhbGxpbmcgdGhlIE9UUlNNYXN0ZXJTbGF2ZSBwYWNrYWdlLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0LiBEbyBub3QgdXNlIGl0IGRpcmVjdGx5LCBpbnN0ZWFkIHVzZToKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgndmFyOjpwYWNrYWdlc2V0dXA6Ok9UUlNNYXN0ZXJTbGF2ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIEZvcmNlIGEgcmVsb2FkIG9mIFpaWkF1dG8ucG0gdG8gZ2V0IHRoZSBmcmVzaCBjb25maWd1cmF0aW9uIHZhbHVlcy4KICAgIGZvciBteSAkTW9kdWxlICggc29ydCBrZXlzICVJTkMgKSB7CiAgICAgICAgaWYgKCAkTW9kdWxlID1+IG0vWlpaQUE/dXRvXC5wbSQvICkgewogICAgICAgICAgICBkZWxldGUgJElOQ3skTW9kdWxlfTsKICAgICAgICB9CiAgICB9CgogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgICAgIE9iamVjdHMgPT4gWydLZXJuZWw6OkNvbmZpZyddLAogICAgKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkcyBsaXN0CiAgICAkU2VsZi0+e0R5bmFtaWNGaWVsZHNMaXN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkTGlzdEdldCgKICAgICAgICBWYWxpZCAgICAgID0+IDAsCiAgICAgICAgT2JqZWN0VHlwZSA9PiBbJ1RpY2tldCddLAogICAgKTsKCiAgICBpZiAoICFJc0FycmF5UmVmV2l0aERhdGEoICRTZWxmLT57RHluYW1pY0ZpZWxkc0xpc3R9ICkgKSB7CiAgICAgICAgJFNlbGYtPntEeW5hbWljRmllbGRzTGlzdH0gPSBbXTsKICAgIH0KCiAgICAjIGNyZWF0ZSBhIGR5bmFtaWMgZmllbGQgbG9va3VwIHRhYmxlIChieSBuYW1lKQogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZHNMaXN0fSB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkOwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkKTsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhJER5bmFtaWNGaWVsZC0+e05hbWV9OwogICAgICAgICRTZWxmLT57RHluYW1pY0ZpZWxkTG9va3VwfS0+eyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGQ7CiAgICB9CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBpZiB3ZSBnb3QgYW4gaW5zdGFsbGVkIHZlcnNpb24gb2YgTWFzdGVyU2xhdmUsIG1pZ3JhdGUgdGhlIGRhdGEKICAgICMgb3RoZXJ3aXNlIHNldCB0aGUgZHluYW1pYyBmaWVsZHMKICAgIG15ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZElEID0gJFNlbGYtPl9DaGVja01hc3RlclNsYXZlRGF0YSgpOwogICAgaWYgKCRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZElEKSB7CgogICAgICAgICRTZWxmLT5fTWlncmF0ZU9UUlNNYXN0ZXJTbGF2ZSgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkSUQgPT4gJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkSUQsCiAgICAgICAgICAgIE1hc3RlclNsYXZlICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5fU2V0RHluYW1pY0ZpZWxkcygpOwogICAgfQoKICAgICMgc2V0IGRhc2hib2FyZCBjb25maWcgaWYgbmVlZGVkCiAgICAkU2VsZi0+X1NldERhc2hib2FyZENvbmZpZygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVVwZ3JhZGUoKQoKcnVuIHRoZSBjb2RlIHVwZ3JhZGUgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT5fU2V0RHluYW1pY0ZpZWxkcygpOwoKICAgICMgc2V0IGRhc2hib2FyZCBjb25maWcgaWYgbmVlZGVkCiAgICAkU2VsZi0+X1NldERhc2hib2FyZENvbmZpZygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZTEyNSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0IGZvciB2ZXJzaW9ucyBwcmlvciB0byAxLjIuNQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVwZ3JhZGUxMjUoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZTEyNSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdXBncmFkZS9taWdyYXRlIG9ubHkgaW4gY2FzZSB0aGVyZSBpcyBhIGluc3RhbGxlZAogICAgIyB2ZXJzaW9uIG9mIE9UUlNNYXN0ZXJTbGF2ZSB2ZXJzaW9uIDwgMS4yLjUKICAgICRTZWxmLT5fTWlncmF0ZU9UUlNNYXN0ZXJTbGF2ZSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgogICAgJFNlbGYtPl9NaWdyYXRlQ29uZmlncygpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+X1JlbW92ZUR5bmFtaWNGaWVsZHMoKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9TZXREeW5hbWljRmllbGRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY29uZmlnIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBnZXQgZHluYW1pYyBmaWVsZCBuYW1lcyBmcm9tIFN5c0NvbmZpZwogICAgbXkgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0gJENvbmZpZ09iamVjdC0+R2V0KCdNYXN0ZXJTbGF2ZTo6RHluYW1pY0ZpZWxkJykgfHwgJ01hc3RlclNsYXZlJzsKCiAgICAjIHNldCBhdHRyaWJ1dGVzIG9mIG5ldyBkeW5hbWljIGZpZWxkcwogICAgbXkgJU5ld0R5bmFtaWNGaWVsZHMgPSAoCiAgICAgICAgJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQsCiAgICAgICAgICAgIExhYmVsICAgICAgPT4gJ01hc3RlciBUaWNrZXQnLAogICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdNYXN0ZXJTbGF2ZScsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgICAgID0+ICcnLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgc2V0IE1heEZpZWxkT3JkZXIgKG5lZWRlZCBmb3IgYWRkaW5nIG5ldyBkeW5hbWljIGZpZWxkcykKICAgIG15ICRNYXhGaWVsZE9yZGVyID0gMDsKICAgIGlmICggIUlzQXJyYXlSZWZXaXRoRGF0YSggJFNlbGYtPntEeW5hbWljRmllbGRzTGlzdH0gKSApIHsKICAgICAgICAkTWF4RmllbGRPcmRlciA9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBEWU5BTUlDRklFTEQ6CiAgICAgICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkU2VsZi0+e0R5bmFtaWNGaWVsZHNMaXN0fSB9ICkgewogICAgICAgICAgICBpZiAoIGludCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRPcmRlcn0gPiBpbnQgJE1heEZpZWxkT3JkZXIgKSB7CiAgICAgICAgICAgICAgICAkTWF4RmllbGRPcmRlciA9ICREeW5hbWljRmllbGRDb25maWctPntGaWVsZE9yZGVyfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIG9iamVjdAogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKCiAgICBmb3IgbXkgJE5ld0ZpZWxkTmFtZSAoIHNvcnQga2V5cyAlTmV3RHluYW1pY0ZpZWxkcyApIHsKCiAgICAgICAgIyBjaGVjayBpZiBkeW5hbWljIGZpZWxkIGFscmVhZHkgZXhpc3RzCiAgICAgICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntEeW5hbWljRmllbGRMb29rdXB9LT57JE5ld0ZpZWxkTmFtZX0gKSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRTZWxmLT57RHluYW1pY0ZpZWxkTG9va3VwfS0+eyROZXdGaWVsZE5hbWV9OwoKICAgICAgICAgICAgbXkgJFVwZGF0ZTsKCiAgICAgICAgICAgICMgdXBkYXRlIGZpZWxkIGNvbmZpZ3VyYXRpb24gaWYgaXQgd2FzIG90aGVyIHRoYW4gTWFzdGVyU2xhdmUgKGUuZy4gRHJvcGRvd24pCiAgICAgICAgICAgIGlmICggJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gbmUgJ01hc3RlclNsYXZlJyApIHsKICAgICAgICAgICAgICAgIG15ICRJRCA9ICREeW5hbWljRmllbGRDb25maWctPntJRH07CiAgICAgICAgICAgICAgICAleyREeW5hbWljRmllbGRDb25maWd9ID0gKCAleyREeW5hbWljRmllbGRDb25maWd9LCAleyAkTmV3RHluYW1pY0ZpZWxkc3skTmV3RmllbGROYW1lfSB9ICk7CiAgICAgICAgICAgICAgICAkVXBkYXRlID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBkeW5hbWljIGZpZWxkIGV4aXN0cyBtYWtlIHN1cmUgaXMgdmFsaWQKICAgICAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkQ29uZmlnLT57VmFsaWRJRH0gbmUgJzEnICkgewogICAgICAgICAgICAgICAgJFVwZGF0ZSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkVXBkYXRlKSB7CgogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJXskRHluYW1pY0ZpZWxkQ29uZmlnfSwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgICAgICAgICAgUmVvcmRlciA9PiAwLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3Qgc2V0IGR5bmFtaWMgZmllbGQgJyROZXdGaWVsZE5hbWUnIHRvIHZhbGlkISIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICREeW5hbWljRmllbGRDb25maWctPntJbnRlcm5hbEZpZWxkfSBuZSAnMScgKSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgSW50ZXJuYWxGaWVsZCB2YWx1ZSBtYW51YWxseSBzaW5jZSBBUEkgZG9lcyBub3Qgc3VwcG9ydAogICAgICAgICAgICAgICAgIyBpbnRlcm5hbF9maWVsZCB1cGRhdGUKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICAgICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURSBkeW5hbWljX2ZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgIFNFVCBpbnRlcm5hbF9maWVsZCA9IDEKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCREeW5hbWljRmllbGRDb25maWctPntJRH0gXSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBzZXQgZHluYW1pYyBmaWVsZCAnJE5ld0ZpZWxkTmFtZScgYXMgaW50ZXJuYWwhIiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2xlYW4gZHluYW1pYyBmaWVsZCBjYWNoZQogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGNyZWF0ZSBpdAogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTWF4RmllbGRPcmRlcisrOwogICAgICAgICAgICBteSAkSUQgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRBZGQoCiAgICAgICAgICAgICAgICAleyAkTmV3RHluYW1pY0ZpZWxkc3skTmV3RmllbGROYW1lfSB9LAogICAgICAgICAgICAgICAgRmllbGRPcmRlciA9PiAkTWF4RmllbGRPcmRlciwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICggISRJRCApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNvdWxkIG5vdCBhZGQgZHluYW1pYyBmaWVsZCAnJE5ld0ZpZWxkTmFtZSchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBlbmFibGUgZHluYW1pYyBmaWVsZCBmb3IgdGlja2V0IHpvb20KICAgICMgZ2V0IG9sZCBjb25maWd1cmF0aW9uCiAgICBteSAkV2luZG93Q29uZmlnICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tJyk7CiAgICBteSAlRHluYW1pY0ZpZWxkcyA9ICV7ICRXaW5kb3dDb25maWctPntEeW5hbWljRmllbGR9IHx8IHt9IH07CgogICAgJER5bmFtaWNGaWVsZHN7JE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkfSA9CiAgICAgICAgZGVmaW5lZCAkRHluYW1pY0ZpZWxkc3skTWFzdGVyU2xhdmVEeW5hbWljRmllbGR9CiAgICAgICAgPyAkRHluYW1pY0ZpZWxkc3skTWFzdGVyU2xhdmVEeW5hbWljRmllbGR9CiAgICAgICAgOiAxOwoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CiAgICByZXR1cm4gMCBpZiAhJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnT1RSU01hc3RlclNsYXZlIC0gZGVwbG95IEFnZW50VGlja2V0Wm9vbSBkeW5hbWljIGZpZWxkcycsCiAgICAgICAgU2V0dGluZ3MgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tIyMjRHluYW1pY0ZpZWxkJywKICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+IFwlRHluYW1pY0ZpZWxkcywKICAgICAgICAgICAgICAgIElzVmFsaWQgICAgICAgID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfTWlncmF0ZU9UUlNNYXN0ZXJTbGF2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGNvbmZpZyBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgbmFtZXMgZnJvbSBTeXNDb25maWcKICAgIG15ICRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCA9ICRDb25maWdPYmplY3QtPkdldCgnTWFzdGVyU2xhdmU6OkR5bmFtaWNGaWVsZCcpCiAgICAgICAgfHwgJ01hc3RlclNsYXZlJzsKCiAgICAjIGNoZWNrIGlmIHRoZXJlIGlzbid0IGFscmVhZHkgYSBkeW5hbWljIGZpZWxkIHdpdGggdGhlIGRlc3RpbmVkIG5hbWUKICAgIHJldHVybiAxIGlmIElzSGFzaFJlZldpdGhEYXRhKCAkU2VsZi0+e0R5bmFtaWNGaWVsZExvb2t1cH0tPnskTWFzdGVyU2xhdmVEeW5hbWljRmllbGR9ICk7CgogICAgbXkgJE9sZE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkSUQ7CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGNoZWNrIGlmIHdlIGdvdCBhIER5bmFtaWNGaWVsZElECiAgICBpZiAoICRQYXJhbXtEeW5hbWljRmllbGRJRH0gKSB7CiAgICAgICAgJE9sZE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkSUQgPSAkUGFyYW17RHluYW1pY0ZpZWxkSUR9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgaWYgbm90OiBnZXQgdGhlIG1pZ3JhdGVkIGZpZWxkIElEIGJ5IHNlYXJjaGluZyBmb3IgcG9zc2libGUgZGF0YQogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICJTRUxFQ1QgZGZ2LmZpZWxkX2lkIEZST00gZHluYW1pY19maWVsZF92YWx1ZSBkZnYgIgogICAgICAgICAgICAgICAgLiAiV0hFUkUgZGZ2LnZhbHVlX3RleHQgTElLRSAnU2xhdmVPZjolJyBPUiBkZnYudmFsdWVfdGV4dCA9ICdNYXN0ZXInIiwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJE9sZE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkSUQgPSAkUm93WzBdOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHdlIGZvdW5kIGEgdmFsaWQgSUQKICAgIHJldHVybiAwIGlmICEkT2xkTWFzdGVyU2xhdmVEeW5hbWljRmllbGRJRDsKCiAgICBpZiAoICRQYXJhbXtNYXN0ZXJTbGF2ZX0gKSB7CiAgICAgICAgJFNlbGYtPl9NaWdyYXRlTWFzdGVyU2xhdmVEYXRhKAogICAgICAgICAgICBEeW5hbWljRmllbGRJRCA9PiAkT2xkTWFzdGVyU2xhdmVEeW5hbWljRmllbGRJRCwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGR5bmFtaWMgZmllbGQgb2JqZWN0CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgICMgdHJ5IHRvIGdldCB0aGUgZHluYW1pYyBmaWVsZCAgZGF0YSAoZm9yIGZpZWxkIG9yZGVyIGV0Yy4pCiAgICBteSAkT2xkRHluYW1pY0ZpZWxkID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIElEID0+ICRPbGRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZElELAogICAgKTsKCiAgICByZXR1cm4gMCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJE9sZER5bmFtaWNGaWVsZCk7CgogICAgIyB1cGRhdGUgdGhlIG5hbWUgb2YgdGhlIGR5bmFtaWMgZmllbGQgdG8gTWFzdGVyU2xhdmUgYW5kIHN0b3JlIGl0CiAgICAjIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uCiAgICByZXR1cm4gMCBpZiAhJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkVXBkYXRlKAogICAgICAgICV7JE9sZER5bmFtaWNGaWVsZH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQsCiAgICAgICAgTGFiZWwgICAgICA9PiAnTWFzdGVyIFRpY2tldCcsCiAgICAgICAgRmllbGRUeXBlICA9PiAnTWFzdGVyU2xhdmUnLAogICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgIERlZmF1bHRWYWx1ZSAgICAgICA9PiAnJywKICAgICAgICAgICAgUG9zc2libGVOb25lICAgICAgID0+IDEsCiAgICAgICAgICAgIFRyYW5zbGF0YWJsZVZhbHVlcyA9PiAxLAogICAgICAgIH0sCiAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBSZW9yZGVyICAgICAgID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCiAgICAjIHVwZGF0ZSBJbnRlcm5hbEZpZWxkIHZhbHVlIG1hbnVhbGx5IHNpbmNlIEFQSSBkb2VzIG5vdCBzdXBwb3J0IGludGVybmFsX2ZpZWxkIHVwZGF0ZQogICAgbXkgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCA9PiAnCiAgICAgICAgICAgIFVQREFURSBkeW5hbWljX2ZpZWxkCiAgICAgICAgICAgIFNFVCBpbnRlcm5hbF9maWVsZCA9IDEKICAgICAgICAgICAgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRPbGRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZElELT57SUR9IF0sCiAgICApOwogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3Qgc2V0IGR5bmFtaWMgZmllbGQgJyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCcgYXMgaW50ZXJuYWwhIiwKICAgICAgICApOwogICAgfQoKICAgICMgY2xlYW4gZHluYW1pYyBmaWVsZCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAnRHluYW1pY0ZpZWxkJywKICAgICk7CgogICAgIyBhY3RpdmF0ZSB0aGUgRHluYW1pY0ZpZWxkIGluIHRpY2tldCBkZXRhaWxzIGJsb2NrCiAgICBteSAkS2V5U3RyaW5nICAgICAgID0gIlRpY2tldDo6RnJvbnRlbmQ6OkFnZW50VGlja2V0Wm9vbSI7CiAgICBteSAkRXhpc3RpbmdTZXR0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCRLZXlTdHJpbmcpIHx8IHt9OwogICAgbXkgJVZhbHVlc1RvU2V0ICAgICA9ICV7ICRFeGlzdGluZ1NldHRpbmctPntEeW5hbWljRmllbGR9IHx8IHt9IH07CiAgICAkVmFsdWVzVG9TZXR7TWFzdGVyU2xhdmV9ID0gMTsKCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKS0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnT1RSU01hc3RlclNsYXZlIC0gZGVwbG95IGR5bmFtaWMgZmllbGRzLicsCiAgICAgICAgU2V0dGluZ3MgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAkS2V5U3RyaW5nIC4gIiMjI0R5bmFtaWNGaWVsZCIsCiAgICAgICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiBcJVZhbHVlc1RvU2V0LAogICAgICAgICAgICAgICAgSXNWYWxpZCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9DaGVja01hc3RlclNsYXZlRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBpZiBub3Q6IGdldCB0aGUgbWlncmF0ZWQgZmllbGQgSUQgYnkgc2VhcmNoaW5nIGZvciBwb3NzaWJsZSBkYXRhCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBkZnYuZmllbGRfaWQgRlJPTSBkeW5hbWljX2ZpZWxkX3ZhbHVlIGRmdiBXSEVSRSBkZnYudmFsdWVfdGV4dCA9ICdTbGF2ZSciLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgIG15ICRPbGRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZElEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE9sZE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkT2xkTWFzdGVyU2xhdmVEeW5hbWljRmllbGRJRDsKfQoKc3ViIF9NaWdyYXRlTWFzdGVyU2xhdmVEYXRhIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhJFBhcmFte0R5bmFtaWNGaWVsZElEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgRHluYW1pY0ZpZWxkSUQgZm9yIE1hc3RlclNsYXZlIGRhdGEgbWlncmF0aW9uISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGdldCBhbGwgdGhlIHNsYXZlIHRpY2tldCBpZHMgd2UgaGF2ZSB0byB1cGRhdGUKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIgogICAgICAgICAgICBTRUxFQ1QgZGZ2Lm9iamVjdF9pZAogICAgICAgICAgICBGUk9NIGR5bmFtaWNfZmllbGRfdmFsdWUgZGZ2CiAgICAgICAgICAgIFdIRVJFIGRmdi52YWx1ZV90ZXh0ID0gJ1NsYXZlJwogICAgICAgICAgICAgICAgQU5EIGRmdi5maWVsZF9pZCA9ID8iLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtEeW5hbWljRmllbGRJRH0gXSwKICAgICAgICBMaW1pdCA9PiA1MCwKICAgICk7CgogICAgbXkgQER5bmFtaWNGaWVsZERhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoKCBARHluYW1pY0ZpZWxkRGF0YSwgJFJvd1swXSApOwogICAgfQoKICAgICMgdHJ5IHRvIGdldCB0aGUgZHluYW1pYyBmaWVsZCBkYXRhIGZvciBzZXR0aW5nIG5ldyB2YWx1ZQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIElEID0+ICRQYXJhbXtEeW5hbWljRmllbGRJRH0sCiAgICApOwoKICAgIHJldHVybiBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgIyBsb29wIG92ZXIgdGhlIHRpY2tldCBpZHMgd2UgaGF2ZSB0byB1cGRhdGUKICAgIE9MRFNMQVZFU1RZTEU6CiAgICBmb3IgbXkgJFRpY2tldElEIChARHluYW1pY0ZpZWxkRGF0YSkgewoKICAgICAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgICAgIG15ICRMaW5rTGlzdFdpdGhEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKS0+TGlua0xpc3RXaXRoRGF0YSgKICAgICAgICAgICAgT2JqZWN0ICAgID0+ICdUaWNrZXQnLAogICAgICAgICAgICBLZXkgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBTdGF0ZSAgICAgPT4gJ1ZhbGlkJywKICAgICAgICAgICAgVHlwZSAgICAgID0+ICdQYXJlbnRDaGlsZCcsCiAgICAgICAgICAgIERpcmVjdGlvbiA9PiAnU291cmNlJywKICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayB3aGF0IHRpY2tldHMgbWlnaHQgYmUgdGhlIG1hc3RlcgogICAgICAgIG15IEBQYXJlbnRUaWNrZXRJRHMgPSBrZXlzICV7ICRMaW5rTGlzdFdpdGhEYXRhLT57VGlja2V0fS0+e1BhcmVudENoaWxkfS0+e1NvdXJjZX0gfTsKCiAgICAgICAgbXkgJFRpY2tldE51bWJlcjsKCiAgICAgICAgIyBpZiB3ZSBnb3QgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBtYXN0ZXIgdGlja2V0LCB0cnkgdG8gZGV0ZXJtaW5lIHdoaWNoCiAgICAgICAgIyBvbmUgaXMgdGhlIG1hc3RlciB3ZSBhcmUgbG9va2luZyBmb3IKICAgICAgICBpZiAoJCNQYXJlbnRUaWNrZXRJRHMpIHsKCiAgICAgICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgICAgIFNRTCA9PiAiCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIGRmdi5vYmplY3RfaWQKICAgICAgICAgICAgICAgICAgICBGUk9NIGR5bmFtaWNfZmllbGRfdmFsdWUgZGZ2CiAgICAgICAgICAgICAgICAgICAgV0hFUkUgZGZ2LnZhbHVlX3RleHQgPSAnTWFzdGVyJwogICAgICAgICAgICAgICAgICAgICAgICBBTkQgZGZ2LmZpZWxkX2lkID0gPwogICAgICAgICAgICAgICAgICAgICAgICBBTkQgZGZ2Lm9iamVjdF9pZCBJTiAoIgogICAgICAgICAgICAgICAgICAgIC4gam9pbiggJywnLCBtYXAgeyAkREJPYmplY3QtPlF1b3RlKCRfKSB9IEBQYXJlbnRUaWNrZXRJRHMgKQogICAgICAgICAgICAgICAgICAgIC4gJyknLAogICAgICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0R5bmFtaWNGaWVsZElEfSBdLAogICAgICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15IEBQYXJlbnRUaWNrZXRJRHM7CiAgICAgICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICREQk9iamVjdC0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAgICAgcHVzaCggQFBhcmVudFRpY2tldElEcywgJFJvd1swXSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJCNQYXJlbnRUaWNrZXRJRHMpIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZGV0ZXJtaW5lIE1hc3RlclRpY2tldCBmb3IgVGlja2V0SUQgJFRpY2tldElEIChQb3NzaWJsZSBNYXN0ZXJzOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gam9pbiAnLCAnLCBAUGFyZW50VGlja2V0SURzCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIikhIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRUaWNrZXROdW1iZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPlRpY2tldE51bWJlckxvb2t1cCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJlbnRUaWNrZXRJRHNbMF0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFRpY2tldE51bWJlcgogICAgICAgICAgICAgICAgPSAkTGlua0xpc3RXaXRoRGF0YS0+e1RpY2tldH0tPntQYXJlbnRDaGlsZH0tPntTb3VyY2V9LT57ICRQYXJlbnRUaWNrZXRJRHNbMF0gfS0+e1RpY2tldE51bWJlcn07CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSB0byB2YWxpZAogICAgICAgICMgZGF0YSBmb3IgT1RSU01hc3RlclNsYXZlCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyktPlZhbHVlU2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICdTbGF2ZU9mOicgLiAkVGlja2V0TnVtYmVyLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkVycm9yIHdoaWxlIG1pZ3JhdGluZyBNYXN0ZXJTbGF2ZSBEeW5hbWljRmllbGQgJyIKICAgICAgICAgICAgICAgICAgICAuICRQYXJhbXtEeW5hbWljRmllbGRJRH0KICAgICAgICAgICAgICAgICAgICAuICInIGZvciBUaWNrZXRJRCAnIgogICAgICAgICAgICAgICAgICAgIC4gJFRpY2tldElECiAgICAgICAgICAgICAgICAgICAgLiAiJyEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZG8gc29tZSByZWN1cnNpb24gaWYgd2UgZ290IG1vcmUgdGhhbiA1MCBzbGF2ZSB0aWNrZXRzIGluIHRoaXMgcnVuCiAgICAjIGRvaW5nIHRoaXMgdG8gaGF2ZSBhIGJldHRlciBwZXJmb3JtYW5jZQogICAgaWYgKCA1MCA9PSBzY2FsYXIgQER5bmFtaWNGaWVsZERhdGEgKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+X01pZ3JhdGVNYXN0ZXJTbGF2ZURhdGEoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZElEID0+ICRQYXJhbXtEeW5hbWljRmllbGRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJFcnJvciB3aGlsZSBtaWdyYXRpbmcgTWFzdGVyU2xhdmUgZGF0YSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1JlbW92ZUR5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjb25maWcgb2JqZWN0CiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIG5hbWVzIGZyb20gU3lzQ29uZmlnCiAgICBteSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ01hc3RlclNsYXZlOjpEeW5hbWljRmllbGQnKSB8fCAnTWFzdGVyU2xhdmUnOwoKICAgICMgY2hlY2sgaWYgZHluYW1pYyBmaWVsZCBhbHJlYWR5IGV4aXN0cwogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFNlbGYtPntEeW5hbWljRmllbGRMb29rdXB9LT57JE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkfSApICkgewoKICAgICAgICAjIGdldCB0aGUgZmllbGQgSUQKICAgICAgICBteSAkRHluYW1pY0ZpZWxkSUQgPSAkU2VsZi0+e0R5bmFtaWNGaWVsZExvb2t1cH0tPnskTWFzdGVyU2xhdmVEeW5hbWljRmllbGR9LT57SUR9OwoKICAgICAgICAjIGRlbGV0ZSBhbGwgZmllbGQgdmFsdWVzCiAgICAgICAgbXkgJFZhbHVlc0RlbGV0ZVN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnKS0+QWxsVmFsdWVzRGVsZXRlKAogICAgICAgICAgICBGaWVsZElEID0+ICREeW5hbWljRmllbGRJRCwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICgkVmFsdWVzRGVsZXRlU3VjY2VzcykgewoKICAgICAgICAgICAgIyBkZWxldGUgZmllbGQKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZERlbGV0ZSgKICAgICAgICAgICAgICAgIElEICAgICAgPT4gJER5bmFtaWNGaWVsZElELAogICAgICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICAgICAgUmVvcmRlciA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGVsZXRlIGR5bmFtaWMgZmllbGQgJyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZCchIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDb3VsZCBub3QgZGVsZXRlIHZhbHVlcyBmb3IgZHluYW1pYyBmaWVsZCAnJE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkJyEiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwoKICAgICMgZGlzYWJsZSBTeXNDb25maWcgc2V0dGluZ3MKICAgIHJldHVybiBpZiAhJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnT1RSU01hc3RlclNsYXZlIC0gIyBkaXNhYmxlIFN5c0NvbmZpZyBzZXR0aW5ncy4nLAogICAgICAgIFNldHRpbmdzID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0R5bmFtaWNGaWVsZHM6OkRyaXZlciMjI01hc3RlclNsYXZlJywKICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+IHsKICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TmFtZSAgPT4gJ01hc3RlciAvIFNsYXZlJywKICAgICAgICAgICAgICAgICAgICBNb2R1bGUgICAgICAgPT4gJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6TWFzdGVyU2xhdmUnLAogICAgICAgICAgICAgICAgICAgIENvbmZpZ0RpYWxvZyA9PiAnQWRtaW5EeW5hbWljRmllbGRNYXN0ZXJTbGF2ZScsCiAgICAgICAgICAgICAgICAgICAgRGlzYWJsZWRBZGQgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgSXNWYWxpZCA9PiAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAnUHJlQXBwbGljYXRpb25Nb2R1bGUjIyNBZ2VudFByZU1hc3RlclNsYXZlJywKICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+ICdLZXJuZWw6Ok1vZHVsZXM6OkFnZW50UHJlTWFzdGVyU2xhdmUnLAogICAgICAgICAgICAgICAgSXNWYWxpZCAgICAgICAgPT4gMCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGRpc2NhcmQgY29uZmlnIG9iamVjdCBhbmQgZHluYW1pYyBmaWVsZCBiYWNrZW5kIHRvIHByZXZlbnQgZXJyb3IgbWVzc2FnZXMgZHVlIG1pc3NpbmcgZHJpdmVyCiAgICAkS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoCiAgICAgICAgT2JqZWN0cyA9PiBbICdLZXJuZWw6OkNvbmZpZycsICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyBdLAogICAgKTsKCiAgICAjIGRpc2FibGUgZHluYW1pYyBmaWVsZCBmb3IgdGlja2V0IHpvb20KICAgICMgZ2V0IG9sZCBjb25maWd1cmF0aW9uCiAgICBteSAkV2luZG93Q29uZmlnICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpGcm9udGVuZDo6QWdlbnRUaWNrZXRab29tJyk7CiAgICBteSAlRHluYW1pY0ZpZWxkcyA9ICV7ICRXaW5kb3dDb25maWctPntEeW5hbWljRmllbGR9IHx8IHt9IH07CgogICAgaWYgKCBkZWZpbmVkICREeW5hbWljRmllbGRzeyRNYXN0ZXJTbGF2ZUR5bmFtaWNGaWVsZH0gKSB7CiAgICAgICAgJER5bmFtaWNGaWVsZHN7JE1hc3RlclNsYXZlRHluYW1pY0ZpZWxkfSA9IDA7CiAgICB9CgogICAgcmV0dXJuIGlmICEkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nc1NldCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENvbW1lbnRzID0+ICdPVFJTTWFzdGVyU2xhdmUgLSBkZXBsb3kgZHluYW1pYyBmaWVsZHMuJywKICAgICAgICBTZXR0aW5ncyA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdUaWNrZXQ6OkZyb250ZW5kOjpBZ2VudFRpY2tldFpvb20jIyNEeW5hbWljRmllbGQnLAogICAgICAgICAgICAgICAgRWZmZWN0aXZlVmFsdWUgPT4gXCVEeW5hbWljRmllbGRzLAogICAgICAgICAgICAgICAgSXNWYWxpZCAgICAgICAgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9TZXREYXNoYm9hcmRDb25maWcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIG5hbWVzIGZyb20gU3lzQ29uZmlnCiAgICBteSAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ01hc3RlclNsYXZlOjpEeW5hbWljRmllbGQnKSB8fCAnTWFzdGVyU2xhdmUnOwoKICAgICMgaWYgTWFzdGVyU2xhdmUgZHluYW1pYyBmaWVsZCBpcyAnTWFzdGVyU2xhdmUnIHRoZSBjb25maWcgaXMgYWxyZWFkeSBzZXQsIG5vdGhpbmcgZWxzZSB0byBkbwogICAgcmV0dXJuIDEgaWYgKCAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgZXEgJ01hc3RlclNsYXZlJyApOwoKICAgICMgb3RoZXJ3aXNlIHNldCB0aGUgbmV3IGNvbmZpZwogICAgIyBhdHRyaWJ1dGVzIGNvbW1vbiBmb3IgYm90aCBNYXN0ZXIgYW5kIFNsYXZlIHdpZGdldHMKICAgIG15ICVDb21tb25Db25maWcgPSAoCiAgICAgICAgTW9kdWxlICAgICAgICA9PiAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkRhc2hib2FyZFRpY2tldEdlbmVyaWMnLAogICAgICAgIEZpbHRlciAgICAgICAgPT4gJ0FsbCcsCiAgICAgICAgVGltZSAgICAgICAgICA9PiAnQWdlJywKICAgICAgICBMaW1pdCAgICAgICAgID0+IDEwLAogICAgICAgIFBlcm1pc3Npb24gICAgPT4gJ3J3JywKICAgICAgICBCbG9jayAgICAgICAgID0+ICdDb250ZW50TGFyZ2UnLAogICAgICAgIEdyb3VwICAgICAgICAgPT4gJycsCiAgICAgICAgRGVmYXVsdCAgICAgICA9PiAxLAogICAgICAgIENhY2hlVFRMTG9jYWwgPT4gMC41LAogICAgKTsKCiAgICAjIGF0dHJpYnV0ZXMgZm9yIE1hc3RlciB3aWRnZXQKICAgIG15ICVNYXN0ZXJDb25maWcgPSAoCiAgICAgICAgVGl0bGUgICAgICAgPT4gJ01hc3RlciBUaWNrZXRzJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnQWxsIG1hc3RlciB0aWNrZXRzJywKICAgICAgICBBdHRyaWJ1dGVzICA9PiAnRHluYW1pY0ZpZWxkXycgLiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgLiAnX0VxdWFscz1NYXN0ZXI7JywKICAgICk7CgogICAgIyBhdHRyaWJ1dGVzIGZvciBTbGF2ZSB3aWRnZXQKICAgIG15ICVTbGF2ZUNvbmZpZyA9ICgKICAgICAgICBUaXRsZSAgICAgICA9PiAnU2xhdmUgVGlja2V0cycsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0FsbCBzbGF2ZSB0aWNrZXRzJywKICAgICAgICBBdHRyaWJ1dGVzICA9PiAnRHluYW1pY0ZpZWxkXycgLiAkTWFzdGVyU2xhdmVEeW5hbWljRmllbGQgLiAnX0xpa2U9U2xhdmUqOycsCiAgICApOwoKICAgICMgZ2V0IFN5c0NvbmZpZyBvYmplY3QKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgIyB3cml0ZSBjb25maWd1cmF0aW9ucwogICAgcmV0dXJuIGlmICEkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nc1NldCgKICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIENvbW1lbnRzID0+ICdPVFJTTWFzdGVyU2xhdmUgLSBkZXBsb3kgZHluYW1pYyBmaWVsZHMgZm9yIGRhc2hib2FyZC4nLAogICAgICAgIFNldHRpbmdzID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0Rhc2hib2FyZEJhY2tlbmQjIyMwOTAwLVRpY2tldE1hc3RlcicsCiAgICAgICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJUNvbW1vbkNvbmZpZywKICAgICAgICAgICAgICAgICAgICAlTWFzdGVyQ29uZmlnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIElzVmFsaWQgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0Rhc2hib2FyZEJhY2tlbmQjIyMwOTEwLVRpY2tldFNsYXZlJywKICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+IHsKICAgICAgICAgICAgICAgICAgICAlQ29tbW9uQ29uZmlnLAogICAgICAgICAgICAgICAgICAgICVTbGF2ZUNvbmZpZywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBJc1ZhbGlkID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfTWlncmF0ZUNvbmZpZ3MgewoKICAgICMgY3JlYXRlIG5lZWRlZCBvYmplY3RzCiAgICBteSAkU3lzQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycpOwogICAgbXkgJENvbmZpZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBtaWdyYXRlIG1hc3RlciBzbGF2ZSB0aWNrZXQgbWVudSBTeXNDb25maWcKICAgICMgZ2V0IHNldHRpbmcgY29udGVudCBmb3IgbWFzdGVyIHNsYXZlIFN5c0NvbmZpZwogICAgbXkgJFNldHRpbmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKTsKCiAgICBpZiAoICRTZXR0aW5nLT57JzQ4MC1NYXN0ZXJTbGF2ZSd9LT57TW9kdWxlfSApIHsKCiAgICAgICAgIyB1cGRhdGUgbW9kdWxlIGxvY2F0aW9uCiAgICAgICAgJFNldHRpbmctPnsnNDgwLU1hc3RlclNsYXZlJ30tPntNb2R1bGV9ID0gIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpUaWNrZXRNZW51OjpHZW5lcmljIjsKCiAgICAgICAgIyBzZXQgbmV3IHNldHRpbmcKICAgICAgICAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nc1NldCgKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudHMgPT4gJ09UUlNNYXN0ZXJTbGF2ZSAtIGRlcGxveSBtZW51IG1vZHVsZSBzZXR0aW5ncy4nLAogICAgICAgICAgICBTZXR0aW5ncyA9PiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1RpY2tldDo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyM0ODAtTWFzdGVyU2xhdmUnLAogICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+ICRTZXR0aW5nLT57JzQ4MC1NYXN0ZXJTbGF2ZSd9LAogICAgICAgICAgICAgICAgICAgIElzVmFsaWQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIG1hc3RlciBzbGF2ZSBkYXNoYm9hcmQgU3lzQ29uZmlnCiAgICAjIGdldCBzZXR0aW5nIGNvbnRlbnQgZm9yIG1hc3RlciBzbGF2ZSBTeXNDb25maWcKICAgICRTZXR0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdEYXNoYm9hcmRCYWNrZW5kJyk7CgogICAgQkFDS0VORDoKICAgIGZvciBteSAkQmFja2VuZCAocXcoMDkwMC1UaWNrZXRNYXN0ZXIgMDkxMC1UaWNrZXRTbGF2ZSkpIHsKICAgICAgICBuZXh0IEJBQ0tFTkQgaWYgISRTZXR0aW5nLT57JEJhY2tlbmR9LT57TW9kdWxlfTsKCiAgICAgICAgIyB1cGRhdGUgbW9kdWxlIGxvY2F0aW9uCiAgICAgICAgJFNldHRpbmctPnskQmFja2VuZH0tPntNb2R1bGV9ID0gIktlcm5lbDo6T3V0cHV0OjpIVE1MOjpEYXNoYm9hcmQ6OlRpY2tldEdlbmVyaWMiOwoKICAgICAgICAjIHNldCBuZXcgc2V0dGluZwogICAgICAgICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdzU2V0KAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50cyA9PiAnT1RSU01hc3RlclNsYXZlIC0gZGVwbG95IGRhc2hib2FyZCBiYWNrZW5kIHNldHRpbmdzLicsCiAgICAgICAgICAgIFNldHRpbmdzID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICA9PiAiRGFzaGJvYXJkQmFja2VuZCMjIyRCYWNrZW5kIiwKICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiAkU2V0dGluZy0+eyRCYWNrZW5kfSwKICAgICAgICAgICAgICAgICAgICBJc1ZhbGlkICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9CjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA2NTAvSGVpZ2h0IDIwMC9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgNjUwL1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAo0MTg4Pj4Kc3RyZWFtCnja7V1/rBxVFZ7XmkKD8W1pahqIdKo1NUp5SyQlGqEjJCIV6LYpMWkjfbUiSkQfKkQhylZJIBrjFk0NQtItCQQF8ZU0aVMQ96WmTbWGfRRUSNVdCCmkCm+1SizWZ/v62u7ec+7Mndm5v3a/75/2zczuzpnzzf3uOffce4MAAAAAAAAAAADAbVSKOr99pI4nDKihtkznt3+8hicMgIkAmAgmAmAiACaCiQCYCICJYCIAJgJgIpgIgIkAmAgmAmAiACZmRqvYwBMGHGDixjIeMKCI4TCnLyoNkUPjRTxfwDSKz9JjF6M6ETCO+hC0GXAA5bugzf2B+Ztvfg3aDFjH7NrSl685IBwcGFp66QcWFM4J/nm4+cLe/S9BmwHtePTTQfDWDY93HFu+5vL3tP35x6ce3QttBvRi47en/vnmvWcODd2+vCBcdegX974KbQY0Ys3D0/+p3nR0Wpg3fHc+c+GBW39l4/6Y7Di0uRextDb71H/Hrj984p+zy7fNYC9tff1B8/c38kNoc1/g/P1tzd9U3HLW92+RXXz0tvtM319YH4Q290XYvG9J+59Hrt951rfulF9+9MaHoM2ABsx84rrOA8dGXtoxI+YDr680G0JDm/sE93yDHHr4gsviPvH06ha0Gcgbw1uYg3tfWxn3mc8/YFebN43Abz2HZbtmcYf/MvaZd8g/9NwnXrepzc3iBBzXa1i0Zx5/4o2t686Vf2ydsaCF02bMGOg9DO75oDRE3nJVKP3czlVvQZuBHMPm7Z+MOfuz910iO3XkI89Dm4H88KMvxZ4e+9dy2akbzYy0GNHmsFgMw3BBm91BfaLWaPS2752y+oubEy74w/61M/kzlVt7Q5vDKIoW8KdatVqtR5NFrll9xa6ZSZe88cgN72JPbL/W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
Get('var::packagesetup::OTRSMasterSlave')->CodeInstall();
]]>
Get('var::packagesetup::OTRSMasterSlave')->CodeUpgrade125();
]]>
Get('var::packagesetup::OTRSMasterSlave')->CodeUpgrade();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
]]>
Get('var::packagesetup::OTRSMasterSlave')->CodeReinstall();
]]>
Get('var::packagesetup::OTRSMasterSlave')->CodeUninstall();
]]>
WELCOME
You are about to install the OTRS package OTRSMasterSlave.
((enjoy))
]]>
BIENVENIDO
Usted está a punto de instalar el paquete OTRSMasterSlave de OTRS.
((enjoy))
]]>
ÜDVÖZÖLJÜK
Ön az OTRSMasterSlave OTRS csomag telepítésére készül.
((enjoy))
]]>
WELCOME
You are about to upgrade the OTRS package OTRSMasterSlave.
((enjoy))
]]>
BIENVENIDO
Usted está apunto de actualizar el paquete OTRSMasterSlave de OTRS.
((enjoy))
]]>
ÜDVÖZÖLJÜK
Ön az OTRSMasterSlave OTRS csomag frissítésére készül.
((enjoy))
]]>
ATTENTION
If you uninstall this package, ParentChild ticket links will remain, but all ticket Master
Slave relations that were created during the use of this package be deleted.
All data from these relations will be irrevocably lost!
((enjoy))
]]>
ATENCIÓN
Si usted desinstala este paquete, los vínculos de tickets PadreHijo
permanecerán, pero todas relaciones de tickets Master Slave creadas durante
el uso de este paquete serán borradas.
¡Todos los datos de esas relaciones se perderán irrevocablemente!.
((enjoy))
]]>
FIGYELEM
Ha eltávolítja ezt a csomagot, akkor a szülő-gyermek jegy hivatkozások meg fognak maradni,
de az összes olyan mester-alárendelt kapcsolat törlésre kerül, amelyek a csomag használata
során lettek létrehozva.
Ezekből a kapcsolatokból az összes adat visszavonhatatlanul el fog veszni!
((enjoy))
]]>