-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathsnmptraps-generate-mib2zabbix.sh
More file actions
20 lines (8 loc) · 47.5 KB
/
snmptraps-generate-mib2zabbix.sh
File metadata and controls
20 lines (8 loc) · 47.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo IyEvdXNyL2Jpbi9wZXJsCgo9cG9kCgo9aGVhZDEgTkFNRQoKbWliMnphYmJpeC5wbCAtIFNOTVAgTUlCIHRvIFphYmJpeCBUZW1wbGF0ZQoKPWhlYWQxIFNZTk9QU0lTCgptaWIyemFiYml4LnBsIC1vIDxPSUQ+IFtPUFRJT05TXS4uLgoKRXhwb3J0IGxvYWRlZCBTTk1QIE1JQiBPSURzIHRvIFphYmJpeCBUZW1wbGF0ZSBYTUwKCiAgICAtZiwgLS1maWxlbmFtZT1QQVRIICAgICAgICAgb3V0cHV0IGZpbGVuYW1lIChkZWZhdWx0OiBzdGRvdXQpCgogICAgLU4sIC0tbmFtZT1TVFJJTkcgICAgICAgICAgIHRlbXBsYXRlIG5hbWUgKGRlZmF1bHQ6IE9JRCBsYWJlbCkKICAgIC1HLCAtLWdyb3VwPVNUUklORyAgICAgICAgICB0ZW1wbGF0ZSBncm91cCAoZGVmYXVsdDogJ1RlbXBsYXRlcycpCiAgICAtZSwgLS1lbmFibGUtaXRlbXMgICAgICAgICAgZW5hYmxlIGFsbCB0ZW1wbGF0ZSBpdGVtcyAoZGVmYXVsdDogZGlzYWJsZWQpCgogICAgLW8sIC0tb2lkPVNUUklORyAgICAgICAgICAgIE9JRCB0cmVlIHJvb3QgdG8gZXhwb3J0CgogICAgLXYsIC0tc25tcHZlcj0xfDJ8MyAgICAgICAgIFNOTVAgdmVyc2lvbiAoZGVmYXVsdDogMikKICAgIC1wLCAtLXBvcnQ9UE9SVCAgICAgICAgICAgICBTTk1QIFVEUCBwb3J0IG51bWJlciAoZGVmYXVsdDogMTYxKQoKU05NUCBWZXJzaW9uIDEgb3IgMmMgc3BlY2lmaWMKCiAgICAtYywgLS1jb21tdW5pdHk9U1RSSU5HICAgICAgU05NUCBjb21tdW5pdHkgc3RyaW5nIChkZWZhdWx0OiAncHVibGljJykKClNOTVAgVmVyc2lvbiAzIHNwZWNpZmljCgogICAgLUwsIC0tbGV2ZWw9TEVWRUwgICAgICAgICAgIHNlY3VyaXR5IGxldmVsIChub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdikKICAgIC1uLCAtLWNvbnRleHQ9Q09OVEVYVCAgICAgICBjb250ZXh0IG5hbWUKICAgIC11LCAtLXVzZXJuYW1lPVVTRVJOQU1FICAgICBzZWN1cml0eSBuYW1lCiAgICAtYSwgLS1hdXRoPVBST1RPQ09MICAgICAgICAgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgKE1ENXxTSEEpCiAgICAtQSwgLS1hdXRocGFzcz1QQVNTUEhSQVNFICAgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgcGFzc3BocmFzZQogICAgLXgsIC0tcHJpdmFjeT1QUk9UT0NPTCAgICAgIHByaXZhY3kgcHJvdG9jb2wgKERFU3xBRVMpCiAgICAtWCwgLS1wcml2cGFzcz1QQVNTUEhSQVNFICAgcHJpdmFjeSBwYXNzcGhyYXNlCgpaYWJiaXggaXRlbSBjb25maWd1cmF0aW9uCgogICAgLS1jaGVjay1kZWxheT1TRUNPTkRTICAgICAgIGNoZWNrIGludGVydmFsIGluIHNlY29uZHMgKGRlZmF1bHQ6IDYwKQogICAgLS1kaXNjLWRlbGF5PVNFQ09ORFMgICAgICAgIGRpc2NvdmVyeSBpbnRlcnZhbCBpbiBzZWNvbmRzIChkZWZhdWx0OiAzNjAwKQogICAgLS1oaXN0b3J5PURBWVMgICAgICAgICAgICAgIGhpc3RvcnkgcmV0ZW50aW9uIGluIGRheXMgKGRlZmF1bHQ6IDcpCiAgICAtLXRyZW5kcz1EQVlTICAgICAgICAgICAgICAgdHJlbmRzIHJldGVudGlvbiBpbiBkYXlzIChkZWZhdWx0OiAzNjUpCgogICAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgbWVzc2FnZQoKPWhlYWQxIERFU0NSSVBUSU9OCgpCPG1pYjJ6YWJiaXgucGw+IHdpbGwgZXhwb3J0IGEgbG9hZGVkIE1JQiB0cmVlIGludG8gYSBaYWJiaXggVGVtcGxhdGUgc3RhcnRpbmcKZnJvbSB0aGUgT0lEIHJvb3Qgc3BlY2lmaWVkLgoKUmVxdWlyZXM6IFphYmJpeCB2MywgUGVybCB2NSwgUG9kOjpVc2FnZSwgWE1MOjpTaW1wbGUsIE5ldC1TTk1QCgo9aGVhZDEgQVVUSE9SCgpSeWFuIEFybXN0cm9uZyA8cnlhbkBjYXZhbGllcmNvZGVyLmNvbT4KCj1oZWFkMSBTRUUgQUxTTwoKR3VpZGVsaW5lcyBmb3IgQXV0aG9ycyBhbmQgUmV2aWV3ZXJzIG9mIE1JQiBEb2N1bWVudHMKaHR0cHM6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQxODEudHh0CgpOZXh0IEdlbmVyYXRpb24gU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gKFNNSW5nKSBNYXBwaW5ncyB0byB0aGUKU2ltcGxlIE5ldHdvcmsgTWFuYWdlbWVudCBQcm90b2NvbCAoU05NUCkKaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM3ODEKClNOTVAgVGFibGUgQmFzaWNzCmh0dHA6Ly93d3cud2Vibm1zLmNvbS9zbm1wL2hlbHAvc25tcGFwaS9zbm1wdjMvdGFibGVfaGFuZGxpbmcvc25tcHRhYmxlc19iYXNpY3MuaHRtbAoKPWhlYWQxIFNVQlJPVVRJTkVTCgo9Y3V0Cgp1c2Ugc3RyaWN0OwojdXNlIHdhcm5pbmdzOwoKdXNlIEN3ZCAnYWJzX3BhdGgnOwp1c2UgRGF0YTo6RHVtcGVyOwp1c2UgRGF0ZTo6Rm9ybWF0Owp1c2UgRW5jb2RlIHF3KGRlY29kZSBlbmNvZGUpOwp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBQb2Q6OlVzYWdlOwp1c2UgR2V0b3B0OjpMb25nOwp1c2UgU05NUDsKdXNlIFhNTDo6U2ltcGxlOwoKIyBHZXQgcGF0aCBpbmZvIGFzIGNvbnN0YW50cwp1c2UgY29uc3RhbnQgU0NSSVBUX05BTUUgICAgPT4gYmFzZW5hbWUoJDApOwp1c2UgY29uc3RhbnQgQkFTRV9QQVRIICAgICAgPT4gZGlybmFtZShhYnNfcGF0aCgkMCkpOwoKdXNlIGNvbnN0YW50IFpCWF9TRVJWRVJfQ09ORiAgICA9PiAnL2V0Yy96YWJiaXgvemFiYml4X3NlcnZlci5jb25mJzsKdXNlIGNvbnN0YW50IFpCWF9XRUJfQ09ORiAgICAgICA9PiAnL2V0Yy96YWJiaXgvd2ViL3phYmJpeC5jb25mLnBocCc7CgojIEZvciBaYWJiaXggdHlwZSBjb25zdGFudHMgc2VlOgojIGh0dHBzOi8vd3d3LnphYmJpeC5jb20vZG9jdW1lbnRhdGlvbi8zLjAvbWFudWFsL2FwaS9yZWZlcmVuY2UvaXRlbS9vYmplY3QKIyBaYWJiaXggSXRlbSBzdGF0dXMKdXNlIGNvbnN0YW50IFpCWF9JVEVNX0VOQUJMRUQgICAgICAgPT4gMDsKdXNlIGNvbnN0YW50IFpCWF9JVEVNX0RJU0FCTEVEICAgICAgPT4gMTsKCiMgWmFiYml4IEl0ZW0gVHlwZSBJRHMKdXNlIGNvbnN0YW50IFpCWF9JVEVNX1RZUEVfU05NUFYxICAgPT4gMTsKdXNlIGNvbnN0YW50IFpCWF9JVEVNX1RZUEVfU05NUFYyICAgPT4gNDsKdXNlIGNvbnN0YW50IFpCWF9JVEVNX1RZUEVfU05NUFYzICAgPT4gNjsKdXNlIGNvbnN0YW50IFpCWF9JVEVNX1RZUEVfU05NUFRSQVAgPT4gMTc7CgojIFphYmJpeCBJdGVtIFZhbHVlIFR5cGUgSURzCnVzZSBjb25zdGFudCBaQlhfVkFMX1RZUEVfRkxPQVQgICAgID0+IDA7CnVzZSBjb25zdGFudCBaQlhfVkFMX1RZUEVfQ0hBUiAgICAgID0+IDE7CnVzZSBjb25zdGFudCBaQlhfVkFMX1RZUEVfTE9HICAgICAgID0+IDI7CnVzZSBjb25zdGFudCBaQlhfVkFMX1RZUEVfVUlOVCAgICAgID0+IDM7CnVzZSBjb25zdGFudCBaQlhfVkFMX1RZUEVfVEVYVCAgICAgID0+IDQ7CgojIFphYmJpeCBJdGVtIFN0b3JhZ2UgdHlwZXMgKGRlbHRhKQp1c2UgY29uc3RhbnQgWkJYX0lURU1fU1RPUkVfQVNJUyAgICAgICAgPT4gMDsgIyBTdG9yZSB2YWx1ZSBhcyBpcwp1c2UgY29uc3RhbnQgWkJYX0lURU1fU1RPUkVfU1BFRUQgICAgICAgPT4gMTsgIyBEZWx0YSwgc3BlZWQgcGVyIHNlY29uZAp1c2UgY29uc3RhbnQgWkJYX0lURU1fU1RPUkVfQ0hBTkdFICAgICAgPT4gMjsgIyBEZWx0YSwgc2ltcGxlIGNoYW5nZQoKIyBaYWJiaXggSXRlbSBTTk1QdjMgY29uc3RhbnRzCnVzZSBjb25zdGFudCBaQlhfVjNfUFJJVl9ERVMgICAgICAgICAgICA9PiAwOwp1c2UgY29uc3RhbnQgWkJYX1YzX1BSSVZfQUVTICAgICAgICAgICAgPT4gMTsKdXNlIGNvbnN0YW50IFpCWF9WM19BVVRIX01ENSAgICAgICAgICAgID0+IDA7CnVzZSBjb25zdGFudCBaQlhfVjNfQVVUSF9TSEEgICAgICAgICAgICA9PiAxOwp1c2UgY29uc3RhbnQgWkJYX1YzX1NFQ19OT0FVVEhOT1BSSVYgICAgPT4gMDsKdXNlIGNvbnN0YW50IFpCWF9WM19TRUNfQVVUSE5PUFJJViAgICAgID0+IDE7CnVzZSBjb25zdGFudCBaQlhfVjNfU0VDX0FVVEhQUklWICAgICAgICA9PiAyOwoKIyBTTk1QIFR5cGUgLT4gWmFiYml4IHR5cGUgbWFwcGluZwpteSAkdHlwZV9tYXAgPSB7CiAgICAnQklUUycgICAgICAgICAgPT4gWkJYX1ZBTF9UWVBFX1RFWFQsICAgICAgICMgWmFiYml4ICdUZXh0JyB2YWx1ZSB0eXBlCiAgICAnQ09VTlRFUicgICAgICAgPT4gWkJYX1ZBTF9UWVBFX1VJTlQsICAgICAgICMgWmFiYml4ICdOdW1lcmljIFVuc2lnbmVkJyB2YWx1ZSB0eXBlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyCiAgICAnQ09VTlRFUjMyJyAgICAgPT4gWkJYX1ZBTF9UWVBFX1VJTlQsICAgICAgICMgWmFiYml4ICdOdW1lcmljIFVuc2lnbmVkJyB2YWx1ZSB0eXBlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyCiAgICAnQ09VTlRFUjY0JyAgICAgPT4gWkJYX1ZBTF9UWVBFX1VJTlQsICAgICAgICMgWmFiYml4ICdOdW1lcmljIFVuc2lnbmVkJyB2YWx1ZSB0eXBlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyCiAgICAnR0FVR0UnICAgICAgICAgPT4gWkJYX1ZBTF9UWVBFX1VJTlQsICAgICAgICMgWmFiYml4ICdOdW1lcmljIFVuc2lnbmVkJyB2YWx1ZSB0eXBlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyCiAgICAnR0FVR0UzMicgICAgICAgPT4gWkJYX1ZBTF9UWVBFX1VJTlQsICAgICAgICMgWmFiYml4ICdOdW1lcmljIFVuc2lnbmVkJyB2YWx1ZSB0eXBlIGZvciBhbiB1bnNpZ25lZCBpbnRlZ2VyCiAgICAnSU5URUdFUicgICAgICAgPT4gWkJYX1ZBTF9UWVBFX0ZMT0FULCAgICAgICMgWmFiYml4ICdOdW1lcmljIEZsb2F0JyB2YWx1ZSB0eXBlIGZvciBhIHNpZ25lZCBpbnRlZ2VyCiAgICAnSU5URUdFUjMyJyAgICAgPT4gWkJYX1ZBTF9UWVBFX0ZMT0FULCAgICAgICMgWmFiYml4ICdOdW1lcmljIEZsb2F0JyB2YWx1ZSB0eXBlIGZvciBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlcgogICAgJ0lQQUREUicgICAgICAgID0+IFpCWF9WQUxfVFlQRV9URVhULCAgICAgICAjIFphYmJpeCAnVGV4dCcgdmFsdWUgdHlwZSBmb3IgYW4gSVAgYWRkcmVzcwogICAgJ05FVEFERERSJyAgICAgID0+IFpCWF9WQUxfVFlQRV9URVhULCAgICAgICAjIFphYmJpeCAnVGV4dCcgdmFsdWUgdHlwZSBmb3IgYSBuZXR3b3JrIGFkZHJlc3MKICAgICdOT1RJRicgICAgICAgICA9PiBaQlhfSVRFTV9UWVBFX1NOTVBUUkFQLCAgIyBaYWJiaXggJ1NOTVAgVHJhcCcgaXRlbSB0eXBlCiAgICAnVFJBUCcgICAgICAgICAgPT4gWkJYX0lURU1fVFlQRV9TTk1QVFJBUCwgICMgWmFiYml4ICdTTk1QIFRyYXAnIGl0ZW0gdHlwZQogICAgJ09CSkVDVElEJyAgICAgID0+IFpCWF9WQUxfVFlQRV9URVhULCAgICAgICAjIFphYmJpeCAnVGV4dCcgdmFsdWUgdHlwZSBmb3IgYW4gT0lECiAgICAnT0NURVRTVFInICAgICAgPT4gWkJYX1ZBTF9UWVBFX1RFWFQsICAgICAgICMgWmFiYml4ICdUZXh0JyB2YWx1ZSB0eXBlCiAgICAnT1BBUVVFJyAgICAgICAgPT4gWkJYX1ZBTF9UWVBFX1RFWFQsICAgICAgICMgWmFiYml4ICdUZXh0JyB2YWx1ZSB0eXBlCiAgICAnVElDS1MnICAgICAgICAgPT4gWkJYX1ZBTF9UWVBFX1VJTlQsICAgICAgICMgWmFiYml4ICdOdW1lcmljIFVuc2lnbmVkJyBmb3IgYSBNb2R1bGUgMjMyIHRpbWVzdGFtcAogICAgJ1VOU0lHTkVEMzInICAgID0+IFpCWF9WQUxfVFlQRV9VSU5UICAgICAgICAjIFphYmJpeCAnTnVtZXJpYyBVbnNpZ25lZCcgdmFsdWUgdHlwZSBmb3IgYW4gdW5zaWduZWQgMzJiaXQgaW50ZWdlcgp9OwoKIyBTTk1QIFZlcnNpb24gLT4gWmFiYml4IGl0ZW0gdHlwZSBtYXBwaW5nCm15ICRzbm1wdmVyX21hcCA9IHsKICAgIDEgICAgICAgICAgICAgICA9PiBaQlhfSVRFTV9UWVBFX1NOTVBWMSwgIyBaYWJiaXggU05NUHYxIEFnZW50IHR5cGUgZm9yIFNOTVB2MQogICAgMiAgICAgICAgICAgICAgID0+IFpCWF9JVEVNX1RZUEVfU05NUFYyLCAjIFphYmJpeCBTTk1QdjIgQWdlbnQgdHlwZSBmb3IgU05NUHYyCiAgICAzICAgICAgICAgICAgICAgPT4gWkJYX0lURU1fVFlQRV9TTk1QVjMgICMgWmFiYml4IFNOTVB2MyBBZ2VudCB0eXBlIGZvciBTTk1QdjMKfTsKCiMgU05NUCBBdXRoIGNvbmZpZyAtPiBaYWJiaXggaXRlbSBhdXRoIGNvbmZpZwpteSAkc25tcHYzX2F1dGhfbGV2ZWxfbWFwID0gewogICAgJ25vYXV0aG5vcHJpdicgID0+IFpCWF9WM19TRUNfTk9BVVRITk9QUklWLAogICAgJ2F1dGhub3ByaXYnICAgID0+IFpCWF9WM19TRUNfQVVUSE5PUFJJViwKICAgICdhdXRocHJpdicgICAgICA9PiBaQlhfVjNfU0VDX0FVVEhQUklWCn07CgpteSAkc25tcHYzX2F1dGhfcHJvdG9jb2xfbWFwID0gewogICAgJ21kNScgICAgICAgICAgID0+IFpCWF9WM19BVVRIX01ENSwKICAgICdzaGEnICAgICAgICAgICA9PiBaQlhfVjNfQVVUSF9TSEEKfTsKCm15ICRzbm1wdjNfc2VjX3Byb3RvY29sX21hcCA9IHsKICAgICdkZXMnICAgICAgICAgICA9PiBaQlhfVjNfUFJJVl9ERVMsCiAgICAnYWVzJyAgICAgICAgICAgPT4gWkJYX1YzX1BSSVZfQUVTCn07CgojIERlZmF1bHQgY29tbWFuZCBsaW5lIG9wdGlvbnMKbXkgJG9wdHMgPSAgewogICAgZGVsYXkgICAgICAgICAgICAgICA9PiA2MCwgICAgICAgICAgICAgICMgMSBtaW51dGUgY2hlY2sgaW50ZXJ2YWwKICAgIGRpc2NfZGVsYXkgICAgICAgICAgPT4gMzYwMCwgICAgICAgICAgICAjIEhvdXJseSBkaXNjb3ZlcnkKICAgIGVuYWJsZWl0ZW1zICAgICAgICAgPT4gMCwgICAgICAgICAgICAgICAjIERpc2FibGUgaXRlbXMKICAgIGdyb3VwICAgICAgICAgICAgICAgPT4gJ1RlbXBsYXRlcycsCiAgICBoaXN0b3J5ICAgICAgICAgICAgID0+IDcsCiAgICB0cmVuZHMgICAgICAgICAgICAgID0+IDM2NSwKICAgIGxpc3QgICAgICAgICAgICAgICAgPT4gMCwKICAgIG1heGRlcHRoICAgICAgICAgICAgPT4gLTEsCiAgICBvaWQgICAgICAgICAgICAgICAgID0+ICcuMScsCiAgICB1c2VfbWFjcm9zICAgICAgICAgID0+IDAsCiAgICBzbm1wY29tbSAgICAgICAgICAgID0+ICdwdWJsaWMnLAogICAgc25tcHBvcnQgICAgICAgICAgICA9PiAxNjEsCiAgICBzbm1wdmVyICAgICAgICAgICAgID0+IDIsCiAgICB2M2F1dGhfbGV2ZWwgICAgICAgID0+ICdub0F1dGhOb1ByaXYnLAogICAgdjNjb250ZXh0ICAgICAgICAgICA9PiAnJywKICAgIHYzdXNlciAgICAgICAgICAgICAgPT4gJycsCiAgICB2M2F1dGhfcHJvdG9jb2wgICAgID0+ICdtZDUnLAogICAgdjNhdXRoX3Bhc3MgICAgICAgICA9PiAnJywKICAgIHYzc2VjX3Byb3RvY29sICAgICAgPT4gJ2RlcycsCiAgICB2M3NlY19wYXNzICAgICAgICAgID0+ICcnCn07CgojIENhcHR1cmUgY2FsbGluZyBhcmdzCm15ICRjbWQgPSBiYXNlbmFtZSgkMCkgLiAiIEBBUkdWIjsKCiMgR2V0IGNvbW1hbmQgbGluZSBvcHRpb25zCkdldG9wdDo6TG9uZzo6Q29uZmlndXJlICgicG9zaXhfZGVmYXVsdCIsICJidW5kbGluZyIpOwpHZXRPcHRpb25zKAogICAgJ2Z8ZmlsZW5hbWU9cycgICAgICAgICAgPT4gXCRvcHRzLT57IGZpbGVuYW1lIH0sICAgICAgICAjIEZpbGVuYW1lIHRvIG91dHB1dAoKICAgICdOfG5hbWU9cycgICAgICAgICAgICAgID0+IFwkb3B0cy0+eyBuYW1lIH0sICAgICAgICAgICAgIyBUZW1wbGF0ZSBuYW1lCiAgICAnR3xncm91cD1zJyAgICAgICAgICAgICA9PiBcJG9wdHMtPnsgZ3JvdXAgfSwgICAgICAgICAgICMgVGVtcGxhdGUgZ3JvdXAKICAgICdvfG9pZD1zJyAgICAgICAgICAgICAgID0+IFwkb3B0cy0+eyBvaWQgfSwgICAgICAgICAgICAgIyBSb290IE9JRCB0byBleHBvcnQKCiAgICAnZXxlbmFibGUtaXRlbXMnICAgICAgICA9PiBcJG9wdHMtPnsgZW5hYmxlaXRlbXMgfSwgICAgICMgRW5hYmxlIHRlbXBsYXRlIGl0ZW1zCgogICAgJ3Z8c25tcHZlcj1pJyAgICAgICAgICAgPT4gXCRvcHRzLT57IHNubXB2ZXIgfSwgICAgICAgICAjIFNOTVAgVmVyc2lvbgogICAgJ3B8cG9ydD1pJyAgICAgICAgICAgICAgPT4gXCRvcHRzLT57IHNubXBwb3J0IH0sICAgICAgICAjIFNOTVAgUG9ydAoKICAgICdjfGNvbW11bml0eT1zJyAgICAgICAgID0+IFwkb3B0cy0+eyBzbm1wY29tbSB9LCAgICAgICAgIyBTTk1QIENvbW11bml0eSBzdHJpbmcKCiAgICAnTHxsZXZlbD1zJyAgICAgICAgICAgICA9PiBcJG9wdHMtPnsgdjNhdXRoX2xldmVsIH0sICAgICMgU05NUHYzIEF1dGhlbnRpY2F0aW9uIGxldmVsCiAgICAnbnxjb250ZXh0PXMnICAgICAgICAgICA9PiBcJG9wdHMtPnsgdjNjb250ZXh0IH0sICAgICAgICMgU05NUHYzIFNlY3VyaXR5IENvbnRleHQKICAgICd1fHVzZXJuYW1lPXMnICAgICAgICAgID0+IFwkb3B0cy0+eyB2M3VzZXIgfSwgICAgICAgICAgIyBTTk1QdjMgQXV0aGVudGljYXRpb24gdXNlcm5hbWUKICAgICdhfGF1dGg9cycgICAgICAgICAgICAgID0+IFwkb3B0cy0+eyB2M2F1dGhfcHJvdG9jb2wgfSwgIyBTTk1QdjMgQXV0aGVudGljYXRpb24gcHJvdG9jb2wKICAgICdBfGF1dGhwYXNzPXMnICAgICAgICAgID0+IFwkb3B0cy0+eyB2M2F1dGhfcGFzcyB9LCAgICAgIyBTTk1QdjMgQXV0aGVudGljYXRpb24gcGFzc3BocmFzZQogICAgJ3h8cHJpdmFjeT1zJyAgICAgICAgICAgPT4gXCRvcHRzLT57IHYzc2VjX3Byb3RvY29sIH0sICAjIFNOTVB2MyBQcml2YWN5IHByb3RvY29sCiAgICAnWHxwcml2cGFzcz1zJyAgICAgICAgICA9PiBcJG9wdHMtPnsgdjJzZWNfcGFzc30sICAgICAgICMgU05NUHYzIFByaXZhY3kgcGFzc3BocmFzZQoKICAgICdjaGVjay1kZWxheT1pJyAgICAgICAgID0+IFwkb3B0cy0+eyBkZWxheSB9LCAgICAgICAgICAgIyBVcGRhdGUgaW50ZXJ2YWwgaW4gc2Vjb25kcwogICAgJ2Rpc2MtZGVsYXk9aScgICAgICAgICAgPT4gXCRvcHRzLT57IGRpc2NfZGVsYXkgfSwgICAgICAjIFVwZGF0ZSBpbnRlcnZhbCBpbiBzZWNvbmRzCiAgICAnaGlzdG9yeT1pJyAgICAgICAgICAgICA9PiBcJG9wdHMtPnsgaGlzdG9yeSB9LCAgICAgICAgICMgSGlzdG9yeSByZXRlbnRpb24gaW4gZGF5cwogICAgJ3RyZW5kcz1pJyAgICAgICAgICAgICAgPT4gXCRvcHRzLT57IHRyZW5kcyB9LCAgICAgICAgICAjIFRyZW5kcyByZXRlbnRpb24gaW4gZGF5cwoKICAgICdofGhlbHAnICAgICAgICAgICAgPT4gXCRvcHRzLT57IGhlbHAgfQopIHx8IHBvZDJ1c2FnZSgpOwoKIyBQcmludCB1c2FnZSBpZiByZXF1ZXN0ZWQKcG9kMnVzYWdlKHsgLWV4aXR2YWwgPT4gMCB9KSBpZiAoJG9wdHMtPnsgaGVscCB9KTsKCiMgVmFsaWRhdGUgU05NUHYzIHNldHRpbmdzCmlmICgkb3B0cy0+eyBzbm1wdmVyIH0gPT0gMykgewogICAgJG9wdHMtPnsgc25tcGNvbW0gfSA9ICcnOwogICAgaWYgKGRlZmluZWQgJHNubXB2M19hdXRoX2xldmVsX21hcC0+eyBsYygkb3B0cy0+eyB2M2F1dGhfbGV2ZWwgfSkgfSkgewogICAgICAgICRvcHRzLT57IHYzYXV0aF9sZXZlbCB9ID0gJHNubXB2M19hdXRoX2xldmVsX21hcC0+eyBsYygkb3B0cy0+eyB2M2F1dGhfbGV2ZWwgfSkgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgZGllKCJVbmtub3duIGF1dGhlbnRpY2F0aW9uIGxldmVsICckb3B0cy0+eyB2M2F1dGhfbGV2ZWwgfSciKTsKICAgIH0KICAgIGlmIChkZWZpbmVkICRzbm1wdjNfYXV0aF9wcm90b2NvbF9tYXAtPnsgbGMoJG9wdHMtPnsgdjNhdXRoX3Byb3RvY29sIH0pIH0pIHsKICAgICAgICAkb3B0cy0+eyB2M2F1dGhfcHJvdG9jb2wgfSA9ICRzbm1wdjNfYXV0aF9wcm90b2NvbF9tYXAtPnsgbGMoJG9wdHMtPnsgdjNhdXRoX3Byb3RvY29sIH0pIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGRpZSgiVW5rbm93biBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCAnJG9wdHMtPnsgdjNhdXRoX3Byb3RvY29sIH0nIik7CiAgICB9CiAgICBpZiAoZGVmaW5lZCAkc25tcHYzX3NlY19wcm90b2NvbF9tYXAtPnsgbGMoJG9wdHMtPnsgdjNzZWNfcHJvdG9jb2wgfSkgfSkgewogICAgICAgICRvcHRzLT57IHYzc2VjX3Byb3RvY29sIH0gPSAkc25tcHYzX3NlY19wcm90b2NvbF9tYXAtPnsgbGMoJG9wdHMtPnsgdjNzZWNfcHJvdG9jb2wgfSkgfQogICAgfQogICAgZWxzZSB7CiAgICAgICAgZGllKCJVbmtub3duIHByaXZhY3kgcHJvdG9jb2wgJyRvcHRzLT57IHYzc2VjX3Byb3RvY29sIH0nIik7CiAgICB9Cn0KCiMgQmFzZSB0ZW1wbGF0ZSBmb3IgVGVtcGxhdGUgSXRlbXMsIERpc2NvdmVyeSBSdWxlcyBhbmQgSXRlbSBQcm90b3R5cGVzCiMgU2VlOiBodHRwczovL3d3dy56YWJiaXguY29tL2RvY3VtZW50YXRpb24vMi4yL21hbnVhbC9hcGkvcmVmZXJlbmNlL2l0ZW0vb2JqZWN0Cm15ICVpdGVtX2Jhc2VfdGVtcGxhdGUgPSAoCiAgICBhbGxvd2VkX2hvc3RzICAgICAgICAgICA9PiAnJywKICAgIGFwcGxpY2F0aW9ucyAgICAgICAgICAgID0+IFtdLAogICAgYXV0aHR5cGUgICAgICAgICAgICAgICAgPT4gJzAnLAogICAgZGVsYXlfZmxleCAgICAgICAgICAgICAgPT4gJycsCiAgICBpcG1pX3NlbnNvciAgICAgICAgICAgICA9PiAnJywKICAgIHBhcmFtcyAgICAgICAgICAgICAgICAgID0+ICcnLAogICAgcGFzc3dvcmQgICAgICAgICAgICAgICAgPT4gJycsCiAgICBwb3J0ICAgICAgICAgICAgICAgICAgICA9PiAneyRTTk1QX1BPUlR9JywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVc2UgbWFjcm8gZm9yIFNOTVAgVURQIFBvcnQKICAgIHByaXZhdGVrZXkgICAgICAgICAgICAgID0+ICcnLAogICAgcHVibGlja2V5ICAgICAgICAgICAgICAgPT4gJycsCiAgICBzbm1wX2NvbW11bml0eSAgICAgICAgICA9PiAkb3B0cy0+eyBzbm1wdmVyIH0gPCAzID8gJ3skU05NUF9DT01NVU5JVFl9JyA6ICcnLCAgICAgICAgICAgIyBVc2UgbWFjcm8gZm9yIFNOTVAgQ29tbXVuaXR5IHN0cmluZwogICAgc25tcHYzX2F1dGhwYXNzcGhyYXNlICAgPT4gJG9wdHMtPnsgc25tcHZlciB9ID09IDMgPyAneyRTTk1QX0FVVEhQQVNTfScgOiAnJywgICAgICAgICAgICMgVXNlIG1hY3JvIGZvciBTTk1QdjMgQXV0aGVudGljYXRpb24gcGFzc3BocmFzZQogICAgc25tcHYzX2F1dGhwcm90b2NvbCAgICAgPT4gJG9wdHMtPnsgc25tcHZlciB9ID09IDMgPyAkb3B0cy0+eyB2M2F1dGhfcHJvdG9jb2wgfSA6ICcwJywKICAgIHNubXB2M19jb250ZXh0bmFtZSAgICAgID0+ICRvcHRzLT57IHNubXB2ZXIgfSA9PSAzID8gJ3skU05NUF9DT05URVhUfScgOiAnJywgICAgICAgICAgICAjIFVzZSBtYWNybyBmb3IgU05NUHYzIGNvbnRleHQgbmFtZQogICAgc25tcHYzX3ByaXZwYXNzcGhyYXNlICAgPT4gJG9wdHMtPnsgc25tcHZlciB9ID09IDMgPyAneyRTTk1QX1BSSVZQQVNTfScgOiAnJywgICAgICAgICAgICMgVXNlIG1hY3JvIGZvciBTTk1QdjMgUHJpdmFjeSBwYXNzcGhyYXNlCiAgICBzbm1wdjNfcHJpdnByb3RvY29sICAgICA9PiAkb3B0cy0+eyBzbm1wdmVyIH0gPT0gMyA/ICRvcHRzLT57IHYzc2VjX3Byb3RvY29sIH0gOiAnMCcsCiAgICBzbm1wdjNfc2VjdXJpdHlsZXZlbCAgICA9PiAkb3B0cy0+eyBzbm1wdmVyIH0gPT0gMyA/ICRvcHRzLT57IHYzYXV0aF9sZXZlbCB9IDogJzAnLAogICAgc25tcHYzX3NlY3VyaXR5bmFtZSAgICAgPT4gJG9wdHMtPnsgc25tcHZlciB9ID09IDMgPyAneyRTTk1QX1VTRVJ9JyA6ICcnLCAgICAgICAgICAgICAgICMgVXNlIG1hY3JvIGZvciBTTk1QdjMgVXNlcm5hbWUKICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgID0+ICgkb3B0cy0+eyBlbmFibGVpdGVtcyB9ID8gWkJYX0lURU1fRU5BQkxFRCA6IFpCWF9JVEVNX0RJU0FCTEVEKSwgIyBFbmFibGVkICgwKSB8IERpc2FibGVkICgxKQogICAgdXNlcm5hbWUgICAgICAgICAgICAgICAgPT4gJycsCik7CgojIEl0ZW0gdGVtcGxhdGUgZm9yIHN0YW5kYXJkIFRlbXBsYXRlIGl0ZW1zCm15ICVpdGVtX3RlbXBsYXRlID0gKAogICAgZGF0YV90eXBlICAgICAgICAgICAgICAgPT4gJzAnLAogICAgZGVsYXkgICAgICAgICAgICAgICAgICAgPT4gJG9wdHMtPnsgZGVsYXkgfSwgICAgICAgICMgVXBkYXRlIGludGVybmFsIHNlY29uZHMKICAgIGRlbHRhICAgICAgICAgICAgICAgICAgID0+ICcwJywgICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSBkZWx0YQogICAgZm9ybXVsYSAgICAgICAgICAgICAgICAgPT4gJzEnLCAgICAgICAgICAgICAgICAgICAgICMgTXVsdGlwbGllciBmYWN0b3IKICAgIGhpc3RvcnkgICAgICAgICAgICAgICAgID0+ICRvcHRzLT57IGhpc3RvcnkgfSwgICAgICAjIEhpc3RvcnkgcmV0ZW50aW9uIGluIGRheXMKICAgIGludmVudG9yeV9saW5rICAgICAgICAgID0+ICcwJywKICAgIG11bHRpcGxpZXIgICAgICAgICAgICAgID0+ICcwJywgICAgICAgICAgICAgICAgICAgICAjIEVuYWJsZSBtdWx0aXBsaWVyCiAgICB0cmVuZHMgICAgICAgICAgICAgICAgICA9PiAkb3B0cy0+eyB0cmVuZHMgfSwgICAgICAgIyBUcmVuZHMgcmV0ZW50aW9uIGluIGRheXMKICAgIHVuaXRzICAgICAgICAgICAgICAgICAgID0+ICcnLAogICAgdmFsdWVtYXAgICAgICAgICAgICAgICAgPT4gJycsCiAgICBsb2d0aW1lZm10ICAgICAgICAgICAgICA9PiAnJywKKTsKJWl0ZW1fdGVtcGxhdGUgPSAoJWl0ZW1fYmFzZV90ZW1wbGF0ZSwgJWl0ZW1fdGVtcGxhdGUpOwoKIyBEaXNjb3ZlcnkgcnVsZSB0ZW1wbGF0ZQpteSAlZGlzY19ydWxlX3RlbXBsYXRlID0gKAogICAgZGVsYXkgICAgICAgICAgICAgICAgICAgPT4gJG9wdHMtPnsgZGlzY19kZWxheSB9LAogICAgbGlmZXRpbWUgICAgICAgICAgICAgICAgPT4gJzMwJywKICAgIGZpbHRlciAgICAgICAgICAgICAgICAgID0+IHsKICAgICAgICBldmFsdHlwZSAgICAgICAgICAgID0+IDAsCiAgICAgICAgZm9ybXVsYSAgICAgICAgICAgICA9PiB1bmRlZiwKICAgICAgICBjb25kaXRpb25zICAgICAgICAgID0+IHVuZGVmCiAgICB9LAoKICAgICMgVGhlIGZvbGxvd2luZyBpdGVtcyBtdXN0IGJlIGNyZWF0ZWQgYXMgdW5pcXVlIHJlZnMgZm9yIGVhY2ggaXRlbQogICAgaG9zdF9wcm90b3R5cGVzICAgICAgICAgPT4gW10sCiAgICBpdGVtX3Byb3RvdHlwZXMgICAgICAgICA9PiBbXSwKICAgIGdyYXBoX3Byb3RvdHlwZXMgICAgICAgID0+IFtdLAogICAgdHJpZ2dlcl9wcm90b3R5cGVzICAgICAgPT4gW10KKTsKJWRpc2NfcnVsZV90ZW1wbGF0ZSA9ICglaXRlbV9iYXNlX3RlbXBsYXRlLCAlZGlzY19ydWxlX3RlbXBsYXRlKTsKCiMgU05NUCBUcmFwIHRlbXBsYXRlCm15ICV0cmFwX3RlbXBsYXRlID0gKAogICAgYWxsb3dlZF9ob3N0cyAgICAgICAgICAgPT4gJycsCiAgICBhcHBsaWNhdGlvbnMgICAgICAgICAgICA9PiBbXSwKICAgIGF1dGh0eXBlICAgICAgICAgICAgICAgID0+IDAsCiAgICBkYXRhX3R5cGUgICAgICAgICAgICAgICA9PiAwLAogICAgZGVsYXkgICAgICAgICAgICAgICAgICAgPT4gJzAnLAogICAgZGVsYXlfZmxleCAgICAgICAgICAgICAgPT4gJycsCiAgICBkZWx0YSAgICAgICAgICAgICAgICAgICA9PiAwLAogICAgZGVzY3JpcHRpb24gICAgICAgICAgICAgPT4gJycsCiAgICBmb3JtdWxhICAgICAgICAgICAgICAgICA9PiAxLAogICAgaGlzdG9yeSAgICAgICAgICAgICAgICAgPT4gJG9wdHMtPnsgaGlzdG9yeSB9LAogICAgaW52ZW50b3J5X2xpbmsgICAgICAgICAgPT4gMCwKICAgIGlwbWlfc2Vuc29yICAgICAgICAgICAgID0+ICcnLAogICAgbG9ndGltZWZtdCAgICAgICAgICAgICAgPT4gJ2hoOm1tOnNzIGRkL01NL3l5eXknLAogICAgbXVsdGlwbGllciAgICAgICAgICAgICAgPT4gJzAnLAogICAgcGFyYW1zICAgICAgICAgICAgICAgICAgPT4gJycsCiAgICBwYXNzd29yZCAgICAgICAgICAgICAgICA9PiAnJywKICAgIHBvcnQgICAgICAgICAgICAgICAgICAgID0+ICcnLAogICAgcHJpdmF0ZWtleSAgICAgICAgICAgICAgPT4gJycsCiAgICBwdWJsaWNrZXkgICAgICAgICAgICAgICA9PiAnJywKICAgIHNubXBfY29tbXVuaXR5ICAgICAgICAgID0+ICcnLAogICAgc25tcF9vaWQgICAgICAgICAgICAgICAgPT4gJycsCiAgICBzbm1wdjNfYXV0aHBhc3NwaHJhc2UgICA9PiAnJywKICAgIHNubXB2M19hdXRocHJvdG9jb2wgICAgID0+IDAsCiAgICBzbm1wdjNfY29udGV4dG5hbWUgICAgICA9PiAnJywKICAgIHNubXB2M19wcml2cGFzc3BocmFzZSAgID0+ICcnLAogICAgc25tcHYzX3ByaXZwcm90b2NvbCAgICAgPT4gMCwKICAgIHNubXB2M19zZWN1cml0eWxldmVsICAgID0+IDAsCiAgICBzbm1wdjNfc2VjdXJpdHluYW1lICAgICA9PiAnJywKICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgID0+ICgkb3B0cy0+eyBlbmFibGVpdGVtcyB9ID8gWkJYX0lURU1fRU5BQkxFRCA6IFpCWF9JVEVNX0RJU0FCTEVEKSwKICAgIHRyZW5kcyAgICAgICAgICAgICAgICAgID0+ICRvcHRzLT57IHRyZW5kcyB9LAogICAgdHlwZSAgICAgICAgICAgICAgICAgICAgPT4gWkJYX0lURU1fVFlQRV9TTk1QVFJBUCwKICAgIHVuaXRzICAgICAgICAgICAgICAgICAgID0+ICcnLAogICAgdXNlcm5hbWUgICAgICAgICAgICAgICAgPT4gJycsCiAgICB2YWx1ZV90eXBlICAgICAgICAgICAgICA9PiBaQlhfVkFMX1RZUEVfTE9HLAogICAgdmFsdWVtYXAgICAgICAgICAgICAgICAgPT4gJycKKTsKCiMgSXRlbSBwcm90b3R5cGUgdGVtcGxhdGUKbXkgJWl0ZW1fcHJvdG9fdGVtcGxhdGUgPSAoCiAgICBhcHBsaWNhdGlvbl9wcm90b3R5cGVzICA9PiB1bmRlZiwKKTsKJWl0ZW1fcHJvdG9fdGVtcGxhdGUgPSAoJWl0ZW1fdGVtcGxhdGUsICVpdGVtX3Byb3RvX3RlbXBsYXRlKTsKCiMgR2xvYmFsIHZhbHVlIG1hcHMgYXJyYXkKbXkgJHZhbHVlbWFwcyA9IHt9OwoKPWhlYWQyIHV0Zjhfc2FudGl6ZQoKUGFyYW1ldGVycyAgICAgIDogKHN0cmluZykgJG1hbGZvcm1lZF91dGY4ClJldHVybnMgICAgICAgICA6IChzdHJpbmcpICR3ZWxsZm9ybWVkX3V0ZjgKRGVzY3JpcHRpb24gICAgIDogUmV0dXJucyBhIHNhbml0aXplZCBVVEY4IHN0cmluZywgcmVtb3ZpbmcgaW5jb21wYXRhYmxlIGNoYXJhY3RlcnMKCj1jdXQKc3ViIHV0Zjhfc2FuaXRpemUgewogICAgbXkgKCRtYWxmb3JtZWRfdXRmOCkgPSBAXzsKCiAgICBteSAkb2N0ZXRzID0gZGVjb2RlKCdVVEYtOCcsICRtYWxmb3JtZWRfdXRmOCwgRW5jb2RlOjpGQl9ERUZBVUxUKTsKICAgIHJldHVybiBlbmNvZGUoJ1VURi04JywgJG9jdGV0cywgRW5jb2RlOjpGQl9DUk9BSyk7Cn0KCj1oZWFkMiBvaWRfcGF0aAoKUGFyYW1ldGVycyAgOiBTTk1QOjpNSUI6Ok5vZGUgICAkb2lkClJldHVybnMgICAgIDogKFN0cmluZykgJG9pZF9wYXRoCkRlc2NyaXB0aW9uIDogUmV0dXJucyB0aGUgZnVsbHkgcXVhbGlmaWVkIHRleHR1YWwgcGF0aCBvZiBhIE1JQiBub2RlIGJ5CiAgICAgICAgICAgICAgICAgIHRyYXZlcnNpbmcgdGhlIG5vZGUncyBwYXJlbnRzLgoKPWN1dApzdWIgb2lkX3BhdGggewogICAgbXkgKCRvaWQpID0gQF87CgogICAgbXkgJHBhdGggPSAkb2lkLT57IGxhYmVsIH07CiAgICBteSAkbm9kZSA9ICRvaWQ7CiAgICB3aGlsZSAoJG5vZGUgPSAkbm9kZS0+eyBwYXJlbnQgfSkgewogICAgICAgICRwYXRoID0gIiRub2RlLT57IGxhYmVsIH0uJHBhdGgiOwogICAgfQoKICAgIHJldHVybiAkcGF0aDsKfQoKPWhlYWQyIG5vZGVfdG9faXRlbQoKUGFyYW1ldGVycyAgOiBTTk1QOjpNSUI6Ok5vZGUgICAkbm9kZQogICAgICAgICAgICAgICAgICAoSGFzaCkgICAgICAgICAgICAkdGVtcGxhdGUKUmV0dXJucyAgICAgOiAoSGFzaCkgICAgICAgICAgICAkaXRlbQpEZXNjcmlwdGlvbiA6IFJldHVybnMgYSBaYWJiaXggSXRlbSBoYXNoIGRlcml2ZWQgZnJvbSB0aGUgc3BlY2lmaWVkIE1JQiBPSUQKCj1jdXQKc3ViIG5vZGVfdG9faXRlbSB7CiAgICBteSAoJG5vZGUsICR0ZW1wbGF0ZSkgPSBAXzsKICAgICR0ZW1wbGF0ZSA9ICR0ZW1wbGF0ZSB8fCBcJWl0ZW1fdGVtcGxhdGU7CgogICAgIyBDcmVhdGUgaXRlbSBoYXNoCiAgICBteSAkaXRlbSA9IHsgJXsgJHRlbXBsYXRlIH0gfTsKCiAgICAkaXRlbS0+eyBuYW1lIH0gPSAkbm9kZS0+eyBsYWJlbCB9OwogICAgJGl0ZW0tPnsgc25tcF9vaWQgfSA9ICRub2RlLT57IG9iamVjdElEIH07CiAgICBpZiAoJG5vZGUtPnsgdW5pdHMgfSkgewogICAgICAgICMgQ29udmVydCB1bml0IHRvIFphYmJpeCBwb3N0Zml4CiAgICAgICAgIyBTZWUgJ1VuaXRzJyBzZWN0aW9uIG9mIGh0dHBzOi8vd3d3LnphYmJpeC5jb20vZG9jdW1lbnRhdGlvbi8zLjAvbWFudWFsL2NvbmZpZy9pdGVtcy9pdGVtCiAgICAgICAgaWYgKCRub2RlLT57IHVuaXRzIH0gPX4gL15zZWNvbmRzJC8pIHsKICAgICAgICAgICAgJGl0ZW0tPnsgdW5pdHMgfSA9ICdzJzsKICAgICAgICB9IGVsc2lmICgkbm9kZS0+eyB1bml0cyB9ID1+IC9eKGh1bmRyZWRzIG9mIHNlY29uZHMpJC9pKSB7CiAgICAgICAgICAgICRpdGVtLT57IHVuaXRzIH0gPSAncyc7CiAgICAgICAgICAgICRpdGVtLT57IG11bHRpcGxpZXIgfSA9ICcxJzsKICAgICAgICAgICAgJGl0ZW0tPnsgZm9ybXVsYSB9ID0gJzEwMCc7CiAgICAgICAgfSBlbHNpZiAoJG5vZGUtPnsgdW5pdHMgfSA9fiAvXihtaWxsaXNlY29uZHN8bWlsbGktc2Vjb25kcykkL2kpIHsKICAgICAgICAgICAgJGl0ZW0tPnsgdW5pdHMgfSA9ICdzJzsKICAgICAgICAgICAgJGl0ZW0tPnsgbXVsdGlwbGllciB9ID0gJzEnOwogICAgICAgICAgICAkaXRlbS0+eyBmb3JtdWxhIH0gPSAnLjAwMSc7CiAgICAgICAgfSBlbHNpZiAoJG5vZGUtPnsgdW5pdHMgfSA9fiAvXm1pY3Jvc2Vjb25kcyQvaSkgewogICAgICAgICAgICAkaXRlbS0+eyB1bml0cyB9ID0gJ3MnOwogICAgICAgICAgICAkaXRlbS0+eyBtdWx0aXBsaWVyIH0gPSAnMSc7CiAgICAgICAgICAgICRpdGVtLT57IGZvcm11bGEgfSA9ICcuMDAwMDAxJzsKICAgICAgICB9IGVsc2lmICgkbm9kZS0+eyB1bml0cyB9ID1+IC9eKG9jdGV0c3xieXRlcykkL2kpIHsKICAgICAgICAgICAgJGl0ZW0tPnsgdW5pdHMgfSA9ICdCJzsKICAgICAgICB9IGVsc2lmICgkbm9kZS0+eyB1bml0cyB9ID1+IC9eKGstb2N0ZXRzfGtieXRlc3xrYikkL2kpIHsKICAgICAgICAgICAgJGl0ZW0tPnsgdW5pdHMgfSA9ICdCJzsKICAgICAgICAgICAgJGl0ZW0tPnsgbXVsdGlwbGllciB9ID0gJzEnOwogICAgICAgICAgICAkaXRlbS0+eyBmb3JtdWxhIH0gPSAnLjAwMSc7CiAgICAgICAgfSBlbHNpZiAoJG5vZGUtPnsgdW5pdHMgfSA9fiAvXihiaXRzIHBlciBzZWNvbmQpJC9pKSB7CiAgICAgICAgICAgICRpdGVtLT57IHVuaXRzIH0gPSAnYic7CiAgICAgICAgfSBlbHNpZiAoJG5vZGUtPnsgdW5pdHMgfSA9fiAvXihrYnBzfGtpbG9iaXRzIHBlciBzZWNvbmQpJC9pKSB7CiAgICAgICAgICAgICRpdGVtLT57IHVuaXRzIH0gPSAnYic7CiAgICAgICAgICAgICRpdGVtLT57IG11bHRpcGxpZXIgfSA9ICcxJzsKICAgICAgICAgICAgJGl0ZW0tPnsgZm9ybXVsYSB9ID0gJy4wMDEnOwogICAgICAgIH0gZWxzaWYgKCRub2RlLT57IHVuaXRzIH0gPX4gL15wZXJjZW50JC9pKSB7CiAgICAgICAgICAgICRpdGVtLT57IHVuaXRzIH0gPSAnJSc7CiAgICAgICAgfSBlbHNpZiAoJG5vZGUtPnsgdW5pdHMgfSA9fiAvXC9zJC9pKSB7CiAgICAgICAgICAgICMgdHJ1bmNhdGUgL3MgKC9zZWMgd2lsbCBiZSBhZGRlZCBsYXRlcikKICAgICAgICAgICAgJGl0ZW0tPnsgdW5pdHMgfSA9IHN1YnN0cigkbm9kZS0+eyB1bml0cyB9LCAwLCAtMikgLiAiL3NlYyI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIyBkZWZhdWx0IHRvIG9yaWdpbmFsCiAgICAgICAgICAgICRpdGVtLT57IHVuaXRzIH0gPSAkbm9kZS0+eyB1bml0cyB9OwogICAgICAgIH0KICAgIH0KCiAgICAjIE1lcmdlIGluIGl0ZW0gZGVmYXVsdHMKICAgICV7ICRpdGVtIH0gPSAoJXsgJHRlbXBsYXRlIH0sICV7ICRpdGVtIH0gKTsKCiAgICAjIENyZWF0ZSBTTk1QIEFnZW50IGl0ZW0KICAgICRpdGVtLT57IHR5cGUgfSA9ICRzbm1wdmVyX21hcC0+eyAkb3B0cy0+eyBzbm1wdmVyIH0gfTsKCiAgICAjIEl0ZW0ga2V5CiAgICAkaXRlbS0+eyBrZXkgfSA9ICIkbm9kZS0+eyBtb2R1bGVJRCB9LiRub2RlLT57IGxhYmVsIH0iOwoKICAgICMgTWFwIHZhbHVlIHR5cGUgKElnbm9yZSBmb3IgT0lEIFRhYmxlIEVudHJ5IFJvd3MpCiAgICBpZiAoJG5vZGUtPnsgdHlwZSB9KSB7CiAgICAgICAgJGl0ZW0tPnsgdmFsdWVfdHlwZSB9ID0gJHR5cGVfbWFwLT57ICRub2RlLT57IHR5cGUgfSB9OwogICAgICAgIGlmICghZGVmaW5lZCgkaXRlbS0+eyB2YWx1ZV90eXBlIH0pKSB7CiAgICAgICAgICAgIHByaW50IFNUREVSUiAiTm8gdHlwZSBtYXBwaW5nIGZvdW5kIGZvciB0eXBlICRub2RlLT57IHR5cGUgfSBpbiAkbm9kZS0+eyBvYmplY3RJRCB9XG4iOwogICAgICAgIH0KICAgIH0KCiAgICAjIFNldCBzdG9yYWdlIHR5cGUgdG8gRGVsdGEgZm9yIE1JQiBjb3VudGVyIHR5cGVzCiAgICBpZiAoICRub2RlLT57IHR5cGUgfSB+fiBbJ0NPVU5URVInLCAnQ09VTlRFUjMyJywgJ0NPVU5URVI2NCddKSB7CiAgICAgICAgJGl0ZW0tPnsgZGVsdGEgfSA9IFpCWF9JVEVNX1NUT1JFX1NQRUVEOwoKICAgICAgICBpZiAoJGl0ZW0tPnsgdW5pdHMgfSA9fiAvXnMkLykgewogICAgICAgICAgICAkaXRlbS0+eyB1bml0cyB9ID0gJy9zZWMnOwogICAgICAgIH0gZWxzaWYgKCRpdGVtLT57IHVuaXRzIH0gPX4gL15iJC9pKSB7CiAgICAgICAgICAgICRpdGVtLT57IHVuaXRzIH0gLj0gJ3BzJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaXRlbS0+eyB1bml0cyB9IC49ICcvc2VjJzsKICAgICAgICB9CiAgICB9CgogICAgIyBUcmFuc2xhdGUgU05NUCBUaWNrcwogICAgaWYgKCRub2RlLT57IHR5cGUgfSBlcSAnVElDS1MnKSB7CiAgICAgICAgJGl0ZW0tPnsgbXVsdGlwbGllciB9ID0gJzEnOwogICAgICAgICRpdGVtLT57IGZvcm11bGEgfSA9ICcuMDEnOwogICAgICAgICRpdGVtLT57IHVuaXRzIH0gPSAndXB0aW1lJzsKICAgIH0KCiAgICAjIFBhcnNlIGl0ZW0gZGVzY2lwdGlvbgogICAgJGl0ZW0tPnsgZGVzY3JpcHRpb24gfSA9IHV0Zjhfc2FuaXRpemUoJG5vZGUtPnsgZGVzY3JpcHRpb24gfSk7CiAgICBpZiAoJGl0ZW0tPnsgZGVzY3JpcHRpb24gfSkgewogICAgICAgICRpdGVtLT57IGRlc2NyaXB0aW9uIH0gPX4gcy9eXHMrfFxzKyR8XG4vL2c7ICAgICMgVHJpbSBsZWZ0L3JpZ2h0IHdoaXRlc3BhY2UgYW5kIG5ld2xpbmVzCiAgICAgICAgJGl0ZW0tPnsgZGVzY3JpcHRpb24gfSA9fiBzL1xzezIsfS8gL2c7ICAgICAgICAgIyBSZW1vdmUgcGFkZGluZwogICAgfQoKICAgICMgUHJvY2VzcyB2YWx1ZSBtYXBzCiAgICBpZiAoc2NhbGFyIGtleXMgJSB7JG5vZGUtPnsgZW51bXMgfSB9KSB7CiAgICAgICAgbXkgJG1hcF9uYW1lID0gIiRub2RlLT57IG1vZHVsZUlEIH06OiRub2RlLT57IGxhYmVsIH0iOwoKICAgICAgICAjIElmIHRoZSBtYXBfbmFtZSBpcyBsb25nZXIgdGhhbiA2NCBjaGFyYWN0ZXJzIHRydW5jYXRlIHRvIDY0IGNoYXJhY3RlcnMKICAgICAgICAjIHRvIG1hdGNoIG1heGltdW0gZGF0YWJhc2UgZmllbGQgbGVuZ3RoLgogICAgICAgIGlmIChsZW5ndGgoJG1hcF9uYW1lKSA+IDY0KSB7CiAgICAgICAgICAgICRtYXBfbmFtZSA9IHN1YnN0cigkbWFwX25hbWUsMCw2MSkgLiAiLi4uIjsKICAgICAgICB9CgogICAgICAgICMgYWRkIHRlbXBsYXRlIHZhbHVlIG1hcAogICAgICAgICR2YWx1ZW1hcHMtPnsgJG1hcF9uYW1lIH0tPnsgJ21hcHBpbmdzJyB9ID0gW107CiAgICAgICAgZm9yZWFjaChrZXlzICV7ICRub2RlLT57IGVudW1zIH0gfSkgewogICAgICAgICAgICBwdXNoKEB7ICR2YWx1ZW1hcHMtPnsgJG1hcF9uYW1lIH0tPnsgJ21hcHBpbmdzJyB9IH0sIHsKICAgICAgICAgICAgICAgICd2YWx1ZScgICAgID0+ICRub2RlLT57IGVudW1zIH0tPnsgJF8gfSwKICAgICAgICAgICAgICAgICduZXd2YWx1ZScgID0+ICRfCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgICMgQXNzaWduIHZhbHVlIG1hcCB0byBpdGVtCiAgICAgICAgJGl0ZW0tPnsgdmFsdWVtYXAgfSA9IHsgbmFtZSA9PiAkbWFwX25hbWUgfTsKICAgIH0KCiAgICByZXR1cm4gJGl0ZW07Cn0KCj1oZWFkMiBub2RlX3RvX3RyYXBpdGVtCgpQYXJhbWV0ZXJzICA6IFNOTVA6Ok1JQjo6Tm9kZSAgICRub2RlCiAgICAgICAgICAgICAgICAgIChIYXNoKSAgICAgICAgICAgICR0ZW1wbGF0ZQpSZXR1cm5zICAgICA6IChIYXNoKSAgICAgICAgICAgICRpdGVtCkRlc2NyaXB0aW9uIDogUmV0dXJucyBhIFphYmJpeCBTTk1QIFRyYXAgSXRlbSBoYXNoIGRlcml2ZWQgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIE1JQiBPSUQKCj1jdXQKc3ViIG5vZGVfdG9fdHJhcGl0ZW0gewogICAgbXkgKCRub2RlLCAkdGVtcGxhdGUpID0gQF87CiAgICAkdGVtcGxhdGUgPSAkdGVtcGxhdGUgfHwgXCV0cmFwX3RlbXBsYXRlOwoKICAgICMgQ3JlYXRlIGl0ZW0gaGFzaAogICAgbXkgJGl0ZW0gPSB7ICV7ICR0ZW1wbGF0ZSB9IH07CgogICAgJGl0ZW0tPnsgbmFtZSB9ID0gIlNOTVAgVHJhcDogJG5vZGUtPnsgbW9kdWxlSUQgfTo6JG5vZGUtPnsgbGFiZWwgfSI7CgogICAgIyBNZXJnZSBpbiBpdGVtIGRlZmF1bHRzCiAgICAleyAkaXRlbSB9ID0gKCV7ICR0ZW1wbGF0ZSB9LCAleyAkaXRlbSB9ICk7CgogICAgIyBDcmVhdGUgdHJhcCBrZXkKICAgIG15ICRvaWQgPSAkbm9kZS0+eyBvYmplY3RJRCB9OwogICAgJG9pZCA9fiBzL1wuL1xcLi9nOwogICAgJGl0ZW0tPnsga2V5IH0gPSAic25tcHRyYXBbXCJcXHMkb2lkXFxzXCJdIjsKCiAgICAjIFBhcnNlIGl0ZW0gZGVzY2lwdGlvbgogICAgbXkgJGRlc2MgPSAnJzsKICAgIGlmICgkbm9kZS0+eyBkZXNjcmlwdGlvbiB9KSB7CiAgICAgICAgJGRlc2MgPSAkbm9kZS0+eyBkZXNjcmlwdGlvbiB9OwogICAgICAgICRkZXNjID1+IHMvXlxzK3xccyskfFxuLy9nOyAgICAgICAgIyBUcmltIGxlZnQvcmlnaHQgd2hpdGVzcGFjZSBhbmQgbmV3bGluZXMKICAgICAgICAkZGVzYyA9fiBzL1xzezIsfS8gL2c7ICAgICAgICAgICMgUmVtb3ZlIHBhZGRpbmcKICAgIH0KCiAgICAjIEFwcGVuZCB2YXJiaW5kcyB0byBkZXNjcmlwdGlvbgogICAgaWYgKGRlZmluZWQoJG5vZGUtPnsgdmFyYmluZHMgfSkgJiYgc2NhbGFyIEB7ICRub2RlLT57IHZhcmJpbmRzIH0gfSkgewogICAgICAgIG15ICR2YXJjb3VudCA9IHNjYWxhciBAeyAkbm9kZS0+eyB2YXJiaW5kcyB9IH07CgogICAgICAgIGlmICgkZGVzYyBuZSAnJykgewogICAgICAgICAgICAkZGVzYyAuPSAiXG5cbiI7CiAgICAgICAgfQoKICAgICAgICAkZGVzYyAuPSAiVmFyYmluZHM6XG4iOwoKICAgICAgICBmb3IobXkgJGkgPSAwOyAkaSA8ICR2YXJjb3VudDsgJGkrKykgewogICAgICAgICAgICBteSAkdmFyYmluZF9sYWJlbCA9ICRub2RlLT57IHZhcmJpbmRzIH1bJGldOwogICAgICAgICAgICAkZGVzYyAuPSAiJGkuICR2YXJiaW5kX2xhYmVsIjsKCiAgICAgICAgICAgICMgVHJ5IHRvIGZpbmQgT0lEIGZvciBlYWNoIHZhcmJpbmQKICAgICAgICAgICAgbXkgJHZhcmJpbmRfcGF0aCA9ICIkbm9kZS0+eyBtb2R1bGVJRCB9OjokdmFyYmluZF9sYWJlbCI7CiAgICAgICAgICAgIG15ICR2YXJiaW5kID0gJFNOTVA6Ok1JQnsgJHZhcmJpbmRfcGF0aCB9OwoKICAgICAgICAgICAgaWYgKGRlZmluZWQoJHZhcmJpbmQpKSB7CiAgICAgICAgICAgICAgICAkZGVzYyAuPSAiICgkdmFyYmluZC0+eyB0eXBlIH0pXG4iIGlmICR2YXJiaW5kLT57IHR5cGUgfTsKCiAgICAgICAgICAgICAgICBpZiAoJHZhcmJpbmQtPnsgZGVzY3JpcHRpb24gfSkgewogICAgICAgICAgICAgICAgICAgIG15ICR2YmRlc2MgPSAkdmFyYmluZC0+eyBkZXNjcmlwdGlvbiB9OwogICAgICAgICAgICAgICAgICAgICR2YmRlc2MgPX4gcy9bIFx0XSsvIC9nOyAgICAgICAgIyBSZXBsYWNlIGxvbmcgd2hpdGVzcGFjZSB3aXRoIHNpbmdsZSBzcGFjZQogICAgICAgICAgICAgICAgICAgICR2YmRlc2MgPX4gcy9eID8vICAgICAgL21nOyAgICAgICAjIFByZXBlbmQgaW5kZW50IHRvIGVhY2ggZGVzY3JpcHRpb24gbGluZQogICAgICAgICAgICAgICAgICAgICRkZXNjIC49ICIkdmJkZXNjXG5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZGVzYyAuPSAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgJGl0ZW0tPnsgZGVzY3JpcHRpb24gfSA9ICRkZXNjOwoKICAgIHJldHVybiAkaXRlbTsKfQoKPWhlYWQyIG5vZGVfaXNfY3VycmVudAoKUGFyYW1ldGVycyAgOiBTTk1QOjpNSUI6Ok5vZGUgICAkbm9kZQpSZXR1cm5zICAgICA6IChpbnQpICAgICAgICAgICAgIDB8MQpEZXNjcmlwdGlvbiA6IFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIE9JRCBpcyBub3Qgb2Jzb2xldGUKCj1jdXQKc3ViIG5vZGVfaXNfY3VycmVudCB7CiAgICBteSAoJG5vZGUpID0gQF87CgogICAgcmV0dXJuICgKICAgICAgICBub2RlX2lzX3ZhbGlkX3RyYXAoJG5vZGUpCiAgICAgICAgfHwgKGRlZmluZWQoJG5vZGUtPnsgc3RhdHVzIH0pICYmICRub2RlLT57IHN0YXR1cyB9IG5lICdPYnNvbGV0ZScpCiAgICApOwp9Cgo9aGVhZDIgbm9kZV9pc192YWxpZF9zY2FsYXIKClBhcmFtZXRlcnMgIDogU05NUDo6TUlCOjpOb2RlICAgJG5vZGUKUmV0dXJucyAgICAgOiAoaW50KSAgICAgICAgICAgICAwfDEKRGVzY3JpcHRpb24gOiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBPSUQgaXMgY3VycmVudCwgcmVhZGFibGUgYW5kCiAgICAgICAgICAgICAgICAgIGRlZmluZXMgYSB2YWxpZCB2YWx1ZSB0eXBlLgoKPWN1dApzdWIgbm9kZV9pc192YWxpZF9zY2FsYXIgewogICAgbXkgKCRub2RlKSA9IEBfOwoKICAgIHJldHVybiAoCiAgICAgICAgbm9kZV9pc19jdXJyZW50KCRub2RlKQogICAgICAgICYmICRub2RlLT57IHR5cGUgfQogICAgICAgICYmICgKICAgICAgICAgICAgJG5vZGUtPnsgdHlwZSB9IGVxICdOT1RJRicgfHwgJG5vZGUtPnsgdHlwZSB9IGVxICdUUkFQJwogICAgICAgICAgICB8fCAoJG5vZGUtPnsgYWNjZXNzIH0gZXEgJ1JlYWRPbmx5JyB8fCAkbm9kZS0+eyBhY2Nlc3MgfSBlcSAnUmVhZFdyaXRlJykKICAgICAgICApCgogICAgKTsKfQoKPWhlYWQyIG5vZGVfaXNfdmFsaWRfdHJhcAoKUGFyYW1ldGVycyAgOiBTTk1QOjpNSUI6Ok5vZGUgICAkbm9kZQpSZXR1cm5zICAgICA6IChpbnQpICAgICAgICAgICAgIDB8MQpEZXNjcmlwdGlvbiA6IFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIE9JRCBpcyBhbiBTTk1QIFRyYXAKCj1jdXQKc3ViIG5vZGVfaXNfdmFsaWRfdHJhcCB7CiAgICBteSAoJG5vZGUpID0gQF87CgogICAgcmV0dXJuICgKICAgICAgICBkZWZpbmVkKCRub2RlLT57IHR5cGUgfSkgJiYgKCRub2RlLT57IHR5cGUgfSBlcSAnTk9USUYnIHx8ICRub2RlLT57IHR5cGUgfSBlcSAnVFJBUCcpCiAgICApOwp9Cgo9aGVhZDIgbm9kZV9pc192YWxpZF90YWJsZQoKUGFyYW1ldGVycyAgOiBTTk1QOjpNSUI6Ok5vZGUgICAkbm9kZQpSZXR1cm5zICAgICA6IChpbnQpICAgICAgICAgICAgIDB8MQpEZXNjcmlwdGlvbiA6IFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIE9JRCBpcyBhIHZhbGlkIHRhYmxlIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsIHJlYWRhYmxlIGFuZCBjb250YWlucyBhIHNpbmdsZSBjaGlsZCAocm93CiAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24pCgo9Y3V0CnN1YiBub2RlX2lzX3ZhbGlkX3RhYmxlIHsKICAgIG15ICgkbm9kZSkgPSBAXzsKCiAgICAjIFRoZSBNSUIgd2lsbCBkZWZpbmUgYSAnU0VRVUVOQ0UgT0YnIGF0dHJpYnV0ZSBmb3IgdGFibGVzIGJ1dAogICAgIyBTTk1QOjpNSUI6Ok5PREUgZG9lcyBub3QgZXhwb3NlIHRoaXMgdmFsdWUuIEluc3RlYWQsIGEgdGFibGUKICAgICMgbm9kZSBtdXN0IGJlICdOb0FjY2VzcycgYW5kIGhhdmUgYSBzaW5nbGUgJ05vQWNjZXNzJyBjaGlsZAogICAgcmV0dXJuICgKICAgICAgICBub2RlX2lzX2N1cnJlbnQoJG5vZGUpCgogICAgICAgICMgVGFibGUgaXMgTm9BY2Nlc3MKICAgICAgICAmJiAkbm9kZS0+eyBhY2Nlc3MgfSBlcSAnTm9BY2Nlc3MnCgogICAgICAgICMgVGFibGUgaGFzIG9uZSBjaGlsZCAocm93IGRlZmluaXRpb24pCiAgICAgICAgJiYgKHNjYWxhciBAeyAkbm9kZS0+eyBjaGlsZHJlbiB9IH0pID09IDEKCiAgICAgICAgIyBUYWJsZSByb3cgaXMgTm9BY2Nlc3MKICAgICAgICAmJiAkbm9kZS0+eyBjaGlsZHJlbiB9WzBdLT57IGFjY2VzcyB9IGVxICdOb0FjY2VzcycKCiAgICAgICAgIyBUYWJsZSByb3cgZGVmaW5lcyBhdGxlYXN0IG9uZSBpbmRleAogICAgICAgICYmIChzY2FsYXIgQHsgJG5vZGUtPnsgY2hpbGRyZW4gfVswXS0+eyBpbmRleGVzIH0gfSkKICAgICk7Cn0KCj1oZWFkMiBidWlsZF90ZW1wbGF0ZQoKUGFyYW1ldGVycyAgOiAoaGFzaCkgICAgICAgICAgICAkdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgU05NUDo6TUlCOjpOT0RFICAgJG5vZGUKUmV0dXJucyAgICAgOiAodm9pZCkKRGVzY3JpcHRpb24gOiBUcmF2ZXJzZXMgYSBsb2FkZWQgTUlCIHRyZWUgZnJvbSB0aGUgc3BlY2lmaWVkIE9JRCBub2RlCiAgICAgICAgICAgICAgICAgIGEgcG9wdWxhdGVzIGEgWmFiYml4IFRlbXBsYXRlIGhhc2ggd2l0aCBpdGVtcywgZGlzY292ZXJ5CiAgICAgICAgICAgICAgICAgIHJ1bGVzLCBpdGVtIHByb3RvdHlwZXMsIGdyb3VwcyBhbmQgbWFjcm9zLgoKPWN1dApzdWIgYnVpbGRfdGVtcGxhdGUgewogICAgbXkgKCR0ZW1wbGF0ZSwgJG5vZGUpID0gQF87CgogICAgIyBJZ25vcmUgb2Jzb2xldGUgT0lEcwogICAgaWYgKG5vZGVfaXNfY3VycmVudCgkbm9kZSkpIHsKICAgICAgICAjIENyZWF0ZSBhbiBJdGVtIEFwcGxpY2F0aW9uIG5hbWUgZm9yIHRoaXMgbm9kZQogICAgICAgIG15ICRhcHBuYW1lID0gIiRub2RlLT57IG1vZHVsZUlEIH06OiRub2RlLT57IHBhcmVudCB9LT57IGxhYmVsIH0iOwoKICAgICAgICAjIElzIHRoaXMgYSBzY2FsYXIgdmFsdWUgT0lEPwogICAgICAgIGlmIChub2RlX2lzX3ZhbGlkX3RyYXAoJG5vZGUpKSB7CiAgICAgICAgICAgICMgQ29udmVydCB0aGUgU05NUDo6TUlCOjpOb2RlIHRvIGEgWmFiYml4IFRlbXBsYXRlIFNOTVAgVHJhcCBJdGVtCiAgICAgICAgICAgIG15ICRpdGVtID0gbm9kZV90b190cmFwaXRlbSgkbm9kZSk7CgogICAgICAgICAgICAjIEFkZCBpdGVtIGFwcGxpY2F0aW9ucyB0byB0ZW1wbGF0ZSBhcHBsaWNhdGlvbiBsaXN0CiAgICAgICAgICAgICRpdGVtLT57IGFwcGxpY2F0aW9ucyB9ID0gW3sgbmFtZSA9PiAkYXBwbmFtZSB9XTsKICAgICAgICAgICAgJHRlbXBsYXRlLT57IGFwcHRhZ3MgfS0+eyAkYXBwbmFtZSB9ID0gMTsKCiAgICAgICAgICAgICMgQWRkIGl0ZW0gdG8gdGVtcGxhdGUKICAgICAgICAgICAgcHVzaChAeyAkdGVtcGxhdGUtPnsgaXRlbXMgfSB9LCAkaXRlbSApOwoKICAgICAgICAgICAgIyBJZiB0aGUgc25tcHRyYXAgaGFzIGNoaWxkcmVuLgogICAgICAgICAgICBmb3JlYWNoKEB7ICRub2RlLT57IGNoaWxkcmVuIH0gfSkgewoKICAgICAgICAgICAgICAgICMgQ29udmVydCB0aGUgU05NUDo6TUlCOjpOb2RlIHRvIGEgWmFiYml4IFRlbXBsYXRlIFNOTVAgVHJhcCBJdGVtCiAgICAgICAgICAgICAgICBteSAkaXRlbSA9IG5vZGVfdG9fdHJhcGl0ZW0oJF8pOwoKICAgICAgICAgICAgICAgICMgQWRkIGl0ZW0gYXBwbGljYXRpb25zIHRvIHRlbXBsYXRlIGFwcGxpY2F0aW9uIGxpc3QKICAgICAgICAgICAgICAgICRpdGVtLT57IGFwcGxpY2F0aW9ucyB9ID0gW3sgbmFtZSA9PiAkYXBwbmFtZSB9XTsKICAgICAgICAgICAgICAgICR0ZW1wbGF0ZS0+eyBhcHB0YWdzIH0tPnsgJGFwcG5hbWUgfSA9IDE7CgogICAgICAgICAgICAgICAgIyBBZGQgaXRlbSB0byB0ZW1wbGF0ZQogICAgICAgICAgICAgICAgcHVzaChAeyAkdGVtcGxhdGUtPnsgaXRlbXMgfSB9LCAkaXRlbSApOwoKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2lmIChub2RlX2lzX3ZhbGlkX3NjYWxhcigkbm9kZSkpIHsKCiAgICAgICAgICAgICMgQ29udmVydCB0aGUgU05NUDo6TUlCOjpOb2RlIHRvIGEgWmFiYml4IFRlbXBsYXRlIEl0ZW0gaGFzaAogICAgICAgICAgICBteSAkaXRlbSA9IG5vZGVfdG9faXRlbSgkbm9kZSk7CgogICAgICAgICAgICAjIEFwcGVuZCAnLjAnIHRvIG5vcm1hbCBTTk1QIE9JRFMKICAgICAgICAgICAgJGl0ZW0tPnsgc25tcF9vaWQgfSA9ICIkaXRlbS0+eyBzbm1wX29pZCB9LjAiOwoKICAgICAgICAgICAgIyBBZGQgaXRlbSBhcHBsaWNhdGlvbnMgdG8gdGVtcGxhdGUgYXBwbGljYXRpb24gbGlzdAogICAgICAgICAgICAkaXRlbS0+eyBhcHBsaWNhdGlvbnMgfSA9IFt7IG5hbWUgPT4gJGFwcG5hbWUgfV07CiAgICAgICAgICAgICR0ZW1wbGF0ZS0+eyBhcHB0YWdzIH0tPnsgJGFwcG5hbWUgfSA9IDE7CgogICAgICAgICAgICAjIEFkZCBpdGVtIHRvIHRlbXBsYXRlCiAgICAgICAgICAgIHB1c2goQHsgJHRlbXBsYXRlLT57IGl0ZW1zIH0gfSwgJGl0ZW0gKTsKCiAgICAgICAgfSBlbHNpZiAobm9kZV9pc192YWxpZF90YWJsZSgkbm9kZSkpIHsKICAgICAgICAgICAgIyBHZXQgcm93IE9JRAogICAgICAgICAgICBteSAkdGFibGUgPSAkbm9kZTsKICAgICAgICAgICAgbXkgJHJvdyA9ICRub2RlLT57IGNoaWxkcmVuIH1bMF07CgogICAgICAgICAgICAjIFZhbGlkYXRlIG5hbWluZyBzdGFuZGFyZAogICAgICAgICAgICBpZiAoJHRhYmxlLT57IGxhYmVsIH0gIX4gL1RhYmxlLykgewogICAgICAgICAgICAgICAgcHJpbnQgU1RERVJSICJXYXJuaW5nOiAkdGFibGUtPnsgbW9kdWxlSUQgfTo6ICR0YWJsZS0+eyBsYWJlbCB9IGFwcGVhcnMgdG8gYmUgYSB0YWJsZSBidXQgZG9lcyBub3QgaGF2ZSB0aGUgJ1RhYmxlJyBzdWZmaXhcbiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkcm93LT57IGxhYmVsIH0gIX4gL0VudHJ5LykgewogICAgICAgICAgICAgICAgcHJpbnQgU1RERVJSICJXYXJuaW5nOiAkcm93LT57IG1vZHVsZUlEIH06OiAkcm93LT57IGxhYmVsIH0gYXBwZWFycyB0byBiZSBhIHRhYmxlIGVudHJ5IGJ1dCBkb2VzIG5vdCBoYXZlIHRoZSAnRW50cnk7IHN1ZmZpeFxuIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUaGlzIGlzIGEgdGFibGUuIEJ1aWxkIGEgZGlzY292ZXJ5IHJ1bGUKICAgICAgICAgICAgbXkgJGRpc2NfcnVsZSA9IHt9OwogICAgICAgICAgICAkZGlzY19ydWxlID0gbm9kZV90b19pdGVtKCRyb3csIFwlZGlzY19ydWxlX3RlbXBsYXRlKTsKCiAgICAgICAgICAgICMgVXBkYXRlIGRpc2NvdmVyeSBydWxlIG5hbWUKICAgICAgICAgICAgJGRpc2NfcnVsZS0+eyBuYW1lIH0gPSAiJGRpc2NfcnVsZS0+eyBuYW1lIH0gRGlzY292ZXJ5IjsKICAgICAgICAgICAgJGRpc2NfcnVsZS0+eyBzbm1wX29pZCB9ID0gImRpc2NvdmVyeVsiOwoKICAgICAgICAgICAgIyBmaW5kIGFueSAqRGVzY3IgY29sdW1uCiAgICAgICAgICAgIG15ICRpbmRleCA9ICd7I1NOTVBJTkRFWH0nOwogICAgICAgICAgICBmb3JlYWNoIG15ICRjb2x1bW4oQHsgJHJvdy0+eyBjaGlsZHJlbiB9IH0pIHsKICAgICAgICAgICAgICAgIGlmIChub2RlX2lzX3ZhbGlkX3NjYWxhcigkY29sdW1uKSkgewogICAgICAgICAgICAgICAgICAgIGlmKCRjb2x1bW4tPnsgbGFiZWwgfSA9fiBtL0Rlc2NyJC8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc2NfcnVsZS0+eyBzbm1wX29pZCB9IC49ICJ7I1NOTVBWQUxVRX0sJGNvbHVtbi0+eyBvYmplY3RJRCB9LCI7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleCA9ICd7I1NOTVBWQUxVRX0nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBEZWZpbmUgbWFjcm9zIGluIGRpc2NvdmVyeSBrZXkgdXAgdG8gMjU1IGNoYXJzCiAgICAgICAgICAgICMgU2VlOiBodHRwczovL3d3dy56YWJiaXguY29tL2RvY3VtZW50YXRpb24vMy4wL21hbnVhbC9kaXNjb3ZlcnkvbG93X2xldmVsX2Rpc2NvdmVyeSNkaXNjb3Zlcnlfb2Zfc25tcF9vaWRzCiAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNvbHVtbihAeyAkcm93LT57IGNoaWxkcmVuIH0gfSkgewogICAgICAgICAgICAgICAgaWYgKG5vZGVfaXNfdmFsaWRfc2NhbGFyKCRjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJG5ld19zbm1wX29pZCA9ICRkaXNjX3J1bGUtPnsgc25tcF9vaWQgfSAuICJ7IyIgLiB1YygkY29sdW1uLT57IGxhYmVsIH0pIC4gIn0sIiAuICRjb2x1bW4tPnsgb2JqZWN0SUQgfSAuICIsIjsKICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoKCRuZXdfc25tcF9vaWQpIDw9IDI1NSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZGlzY19ydWxlLT57IHNubXBfb2lkIH0gPSAkbmV3X3NubXBfb2lkOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkZGlzY19ydWxlLT57IHNubXBfb2lkIH0gPSBzdWJzdHIoJGRpc2NfcnVsZS0+eyBzbm1wX29pZCB9LCAwLCAtMSkgLiAiXSI7CgogICAgICAgICAgICAjIEZldGNoIGFuIGFyYml0cmFyeSBjb2x1bW4gT0lEIGZvciBaYWJiaXggdG8gdXNlIGZvciBkaXNjb3ZlcnkKICAgICAgICAgICAgbXkgJGluZGV4X29pZCA9ICRyb3ctPnsgY2hpbGRyZW4gfVswXTsKICAgICAgICAgICAgaWYgKCFkZWZpbmVkKCRpbmRleF9vaWQpKSB7CiAgICAgICAgICAgICAgICBwcmludCBTVERFUlIgIk5vIGluZGV4IGZvdW5kIGZvciB0YWJsZSAkdGFibGUtPnsgbW9kdWxlSUR9OjokdGFibGUtPnsgbGFiZWwgfSAoJHRhYmxlLT57IG9iamVjdElEIH0pXG4iOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIyBSZW1vdmUgdW5yZXF1aXJlZCBmaWVsZHMKICAgICAgICAgICAgICAgIGRlbGV0ZSgkZGlzY19ydWxlLT57IGFwcGxpY2F0aW9ucyB9KTsKICAgICAgICAgICAgICAgIGRlbGV0ZSgkZGlzY19ydWxlLT57IGRhdGFfdHlwZSB9KTsKCiAgICAgICAgICAgICAgICAjIENyZWF0ZSBuZXcgYXJyYXkgZm9yIHByb3RvdHlwZXMKICAgICAgICAgICAgICAgICRkaXNjX3J1bGUtPnsgaXRlbV9wcm90b3R5cGVzIH0gPSBbXTsKCiAgICAgICAgICAgICAgICAjIEFkZCBwcm90b3R5cGVzIGZvciBlYWNoIHJvdyBjb2x1bW4KICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGNvbHVtbihAeyAkcm93LT57IGNoaWxkcmVuIH0gfSkgewogICAgICAgICAgICAgICAgICAgIGlmIChub2RlX2lzX3ZhbGlkX3NjYWxhcigkY29sdW1uKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobXkgJHByb3RvID0gbm9kZV90b19pdGVtKCRjb2x1bW4sIFwlaXRlbV9wcm90b190ZW1wbGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm90by0+eyBuYW1lIH0gPSAiJHByb3RvLT57IG5hbWUgfSBmb3IgJGluZGV4IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm90by0+eyBrZXkgfSA9ICIkY29sdW1uLT57IGxhYmVsIH1cWyRpbmRleF0iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb3RvLT57IHNubXBfb2lkIH0gPSAiJHByb3RvLT57IHNubXBfb2lkIH0ueyNTTk1QSU5ERVh9IjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFkZCBpdGVtIGFwcGxpY2F0aW9ucyB0byB0ZW1wbGF0ZSBhcHBsaWNhdGlvbiBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJvdG8tPnsgYXBwbGljYXRpb25zIH0gPSBbeyBuYW1lID0+ICRhcHBuYW1lIH1dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlLT57IGFwcHRhZ3MgfS0+eyAkYXBwbmFtZSB9ID0gMTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEB7ICRkaXNjX3J1bGUtPnsgaXRlbV9wcm90b3R5cGVzIH0gfSwgJHByb3RvKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIEFkZCBkaXNjb3ZlcnkgcnVsZSB0byB0ZW1wbGF0ZQogICAgICAgICAgICAgICAgcHVzaChAeyAkdGVtcGxhdGUtPnsgZGlzY292ZXJ5X3J1bGVzIH0gfSwgJGRpc2NfcnVsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICMgUGFyc2UgY2hpbGRyZW4KICAgICAgICBmb3JlYWNoKEB7ICRub2RlLT57IGNoaWxkcmVuIH0gfSkgewogICAgICAgICAgICBidWlsZF90ZW1wbGF0ZSgkdGVtcGxhdGUsICRfKTsKICAgICAgICB9CiAgICB9Cn0KCiMgSW5pdGlhbGl6ZSBuZXQtc25tcAokU05NUDo6c2F2ZV9kZXNjcmlwdGlvbnMgPSAxOwpTTk1QOjppbml0TWliKCk7CgojIFZlcmlmeSB0aGUgc3BlY2lmaWVkIE9JRCBleGlzdHMKaWYgKCRvcHRzLT57IG9pZCB9ICF+IG0vXlwuLykgewogICAgJG9wdHMtPnsgb2lkIH0gPSAiLiIgLiAkb3B0cy0+eyBvaWQgfQp9CgpteSAkb2lkX3Jvb3QgPSAkU05NUDo6TUlCeyAkb3B0cy0+eyBvaWQgfSB9OwppZiAoISRvaWRfcm9vdCB8fCAkb2lkX3Jvb3QtPnsgb2JqZWN0SUQgfSBuZSAkb3B0cy0+eyBvaWQgfSkgewogICAgcHJpbnQgU1RERVJSICJPSUQgJG9wdHMtPnsgb2lkIH0gbm90IGZvdW5kIGluIE1JQiB0cmVlLlxuIjsKICAgIGV4aXQgMTsKCiMgQnVpbGQgYSBaYWJiaXggdGVtcGxhdGUKfSBlbHNlIHsKICAgIG15ICRzdWZmaXggPSAkb3B0cy0+eyBzbm1wdmVyIH0gPiAyID8gIiB2JG9wdHMtPnsgc25tcHZlciB9IiA6ICcnOwogICAgbXkgJHRlbXBsYXRlX25hbWUgPSAkb3B0cy0+eyBuYW1lIH0gfHwgIlRlbXBsYXRlIFNOTVAgJG9pZF9yb290LT57IG1vZHVsZUlEIH0gLSAkb2lkX3Jvb3QtPnsgbGFiZWwgfSRzdWZmaXgiOwogICAgbXkgJHRlbXBsYXRlICAgICAgICA9IHsKICAgICAgICBuYW1lICAgICAgICAgICAgPT4gJHRlbXBsYXRlX25hbWUsCiAgICAgICAgdGVtcGxhdGUgICAgICAgID0+ICR0ZW1wbGF0ZV9uYW1lLAogICAgICAgIGRlc2NyaXB0aW9uICAgICA9PiAiR2VuZXJhdGVkIGJ5IG1pYjJ6YWJiaXgiLAogICAgICAgIGFwcHRhZ3MgICAgICAgICA9PiB7fSwKICAgICAgICBhcHBsaWNhdGlvbnMgICAgPT4gW10sCiAgICAgICAgZGlzY292ZXJ5X3J1bGVzID0+IFtdLAogICAgICAgIGdyb3VwcyAgICAgICAgICA9PiBbewogICAgICAgICAgICBuYW1lICAgICAgICA9PiAkb3B0cy0+eyBncm91cCB9CiAgICAgICAgfV0sCiAgICAgICAgaXRlbXMgICAgICAgICAgID0+IFtdLAogICAgICAgIG1hY3JvcyAgICAgID0+IFsKICAgICAgICAgICAgeyBtYWNybyA9PiAneyRNSUIyWkFCQklYX0NNRH0nLCB2YWx1ZSA9PiAkY21kIH0sCiAgICAgICAgICAgIHsgbWFjcm8gPT4gJ3skT0lEfScsICAgICAgICAgICAgdmFsdWUgPT4gIiRvaWRfcm9vdC0+eyBvYmplY3RJRCB9IiB9LAogICAgICAgICAgICB7IG1hY3JvID0+ICd7JE9JRF9QQVRIfScsICAgICAgIHZhbHVlID0+IG9pZF9wYXRoKCRvaWRfcm9vdCkgfSwKICAgICAgICAgICAgeyBtYWNybyA9PiAneyRPSURfTU9EfScsICAgICAgICB2YWx1ZSA9PiAkb2lkX3Jvb3QtPnsgbW9kdWxlSUQgfSB9LAogICAgICAgICAgICB7IG1hY3JvID0+ICd7JFNOTVBfUE9SVH0nLCAgICAgIHZhbHVlID0+ICRvcHRzLT57IHNubXBwb3J0IH0gfQogICAgICAgIF0KICAgIH07CgogICAgIyBBZGQgU05NUCBjb25uZWN0aW9uIG1hY3JvcwogICAgaWYoJG9wdHMtPnsgc25tcHZlciB9IDwgMykgewogICAgICAgIHB1c2goQHsgJHRlbXBsYXRlLT57IG1hY3JvcyB9IH0sIHsgbWFjcm8gPT4gJ3skU05NUF9DT01NVU5JVFl9JywgdmFsdWUgPT4gJG9wdHMtPnsgc25tcGNvbW0gfSB9KTsKICAgIH0gZWxzaWYoJG9wdHMtPnsgc25tcHZlciB9ID09IDMpIHsKICAgICAgICBwdXNoKEB7ICR0ZW1wbGF0ZS0+eyBtYWNyb3MgfSB9LCB7IG1hY3JvID0+ICd7JFNOTVBfVVNFUn0nLCAgICAgIHZhbHVlID0+ICRvcHRzLT57IHYzdXNlciB9IH0pOwogICAgICAgIHB1c2goQHsgJHRlbXBsYXRlLT57IG1hY3JvcyB9IH0sIHsgbWFjcm8gPT4gJ3skU05NUF9DT05URVhUfScsICAgdmFsdWUgPT4gJG9wdHMtPnsgdjNjb250ZXh0IH0gfSk7CiAgICAgICAgcHVzaChAeyAkdGVtcGxhdGUtPnsgbWFjcm9zIH0gfSwgeyBtYWNybyA9PiAneyRTTk1QX0FVVEhQQVNTfScsICB2YWx1ZSA9PiAkb3B0cy0+eyB2M2F1dGhfcGFzcyB9IH0pOwogICAgICAgIHB1c2goQHsgJHRlbXBsYXRlLT57IG1hY3JvcyB9IH0sIHsgbWFjcm8gPT4gJ3skU05NUF9QUklWUEFTU30nLCAgdmFsdWUgPT4gJG9wdHMtPnsgdjNzZWNfcGFzcyB9IH0pOwogICAgfTsKICAgIGJ1aWxkX3RlbXBsYXRlKCR0ZW1wbGF0ZSwgJG9pZF9yb290LCAwKTsKCiAgICAjIENvbnZlcnQgYXBwbGljYXRpb25zIGhhc2ggdG8gYXJyYXkKICAgIEB7ICR0ZW1wbGF0ZS0+eyBhcHBsaWNhdGlvbnMgfSB9ID0gbWFwIHsgeyBuYW1lID0+ICRfIH0gfSBrZXlzICV7ICR0ZW1wbGF0ZS0+eyBhcHB0YWdzIH0gfTsKICAgIGRlbGV0ZSgkdGVtcGxhdGUtPnsgYXBwdGFncyB9KTsKCiAgICAjIEJ1aWxkIFhNTCBkb2N1bWVudAogICAgbXkgJHRpbWUgPSB0aW1lKCk7CiAgICBteSAkb3V0cHV0ID0gewogICAgICAgIHZlcnNpb24gICAgID0+ICczLjAnLAogICAgICAgIGRhdGUgICAgICAgID0+IHRpbWUyc3RyKCIlWS0lbS0lZFQlSDolTTolU1oiLCAkdGltZSksCiAgICAgICAgZ3JvdXBzICAgICAgPT4gJHRlbXBsYXRlLT57IGdyb3VwcyB9LAogICAgICAgIHRlbXBsYXRlcyAgID0+IFskdGVtcGxhdGVdLAogICAgICAgIHRyaWdnZXJzICAgID0+IFtdLAogICAgICAgIGdyYXBocyAgICAgID0+IFtdLAogICAgICAgIHZhbHVlX21hcHMgID0+IFskdmFsdWVtYXBzXQogICAgfTsKCiAgICAjIE91dHB1dCBzdHJlYW0KICAgIG15ICRmaCA9ICpTVERPVVQ7CiAgICBpZiAoJG9wdHMtPnsgZmlsZW5hbWUgfSkgewogICAgICAgIG9wZW4oJGZoLCAiPiRvcHRzLT57IGZpbGVuYW1lIH0iKSBvciBkaWUgIiQhIjsKICAgIH0KCiAgICAjIE91dHB1dCBYTUwKICAgIFhNTG91dCgkb3V0cHV0LAogICAgICAgIE91dHB1dEZpbGUgICAgICA9PiBcJGZoLAogICAgICAgIFhNTERlY2wgICAgICAgICA9PiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+IiwKICAgICAgICBSb290TmFtZSAgICAgICAgPT4gJ3phYmJpeF9leHBvcnQnLAogICAgICAgIE5vQXR0ciAgICAgICAgICA9PiAxLAogICAgICAgIFN1cHByZXNzRW1wdHkgICA9PiB1bmRlZiwKICAgICAgICBHcm91cFRhZ3MgICAgICAgPT4gewogICAgICAgICAgICAnYXBwbGljYXRpb25zJyAgICAgICAgICA9PiAnYXBwbGljYXRpb24nLAogICAgICAgICAgICAnZ3JvdXBzJyAgICAgICAgICAgICAgICA9PiAnZ3JvdXAnLAogICAgICAgICAgICAndGVtcGxhdGVzJyAgICAgICAgICAgICA9PiAndGVtcGxhdGUnLAogICAgICAgICAgICAnaXRlbXMnICAgICAgICAgICAgICAgICA9PiAnaXRlbScsCiAgICAgICAgICAgICdtYWNyb3MnICAgICAgICAgICAgICAgID0+ICdtYWNybycsCiAgICAgICAgICAgICdkaXNjb3ZlcnlfcnVsZXMnICAgICAgID0+ICdkaXNjb3ZlcnlfcnVsZScsCiAgICAgICAgICAgICdpdGVtX3Byb3RvdHlwZXMnICAgICAgID0+ICdpdGVtX3Byb3RvdHlwZScsCiAgICAgICAgICAgICd0cmlnZ2VyX3Byb3RvdHlwZXMnICAgID0+ICd0cmlnZ2VyX3Byb3RvdHlwZScsCiAgICAgICAgICAgICdncmFwaF9wcm90b3R5cGVzJyAgICAgID0+ICdncmFwaF9wcm90b3R5cGUnLAogICAgICAgICAgICAnaG9zdF9wcm90b3R5cGVzJyAgICAgICA9PiAnaG9zdF9wcm90b3R5cGUnLAogICAgICAgICAgICAndmFsdWVfbWFwcycgICAgICAgICAgICA9PiAleyAkdmFsdWVtYXBzIH0gPyAndmFsdWVfbWFwJyA6IHVuZGVmLAogICAgICAgICAgICAnbWFwcGluZ3MnICAgICAgICAgICAgICA9PiAnbWFwcGluZycKICAgICAgICB9CiAgICApOwoKICAgIGlmICgkb3B0cy0+eyBmaWxlbmFtZSB9KSB7CiAgICAgICAgY2xvc2UgJGZoOwogICAgfQp9Cg== | base64 --decode | sudo tee /usr/bin/mib2zabbix.pl
sudo chmod +x /usr/bin/mib2zabbix.pl
mkdir TEMPERATUREALERT
cd TEMPERATUREALERT
echo ClRFTVBFUkFUVVJFQUxFUlQtTUlCIERFRklOSVRJT05TIDo6PSBCRUdJTgoKSU1QT1JUUwoJTU9EVUxFLUlERU5USVRZLAogICAgICAgIE9CSkVDVC1UWVBFCiAgICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1TTUkKCURpc3BsYXlTdHJpbmcKICAgICAgICAgICAgICAgIEZST00gU05NUHYyLVRDCgllbnRlcnByaXNlcwoJCUZST00gUkZDMTE1NS1TTUkKCVRSQVAtVFlQRSAgICAgICAgICAgICAgIAoJCUZST00gUkZDLTEyMTU7Cgp0YU1JQiBNT0RVTEUtSURFTlRJVFkKICAgICAgICBMQVNULVVQREFURUQgIjA2MTAzMTEyMDBaIiAgICAgIAogICAgICAgIE9SR0FOSVpBVElPTiAiVGVtcGVyYXR1cmVAbGVydCIKICAgICAgICBDT05UQUNULUlORk8KICAgICAgICAgICAgICAgICJIYXJyeSBTY2hlY2h0ZXIKCiAgICAgICAgICAgICAgICBQb3N0YWw6IDMwNTkgQ29ubmVjdGljdXQgQXZlLCAjODExNQoJCQlXYXNoaW5ndG9uLCBEQyAgMjAwMDgKCiAgICAgICAgICAgICAgICBFLW1haWw6IGluZm9AdGVtcGVyYXR1cmVhbGVydC5jb20iCiAgICAgICAgREVTQ1JJUFRJT04gCgkJIlRoZSBUZW1wZXJhdHVyZUBsZXJ0IFNOTVAgTUlCLiIKICAgICAgICBSRVZJU0lPTiAiMDYxMDMxMTIwMFoiCglERVNDUklQVElPTgoJCSJDdXJyZW50IHJldmlzaW9uLiIKCTo6PSB7IGVudGVycHJpc2VzIDI3Mjk3IH0KCgp0YVRyYXBzCQlPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyB0YU1JQiAwIH0KdGFTZXJ2aWNlIAlPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyB0YU1JQiAxIH0KCnRhRGV2aWNlSW5kZXggT0JKRUNULVRZUEUKICAgICAgICBTWU5UQVggIERpc3BsYXlTdHJpbmcKICAgICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgICAgIFNUQVRVUyBjdXJyZW50CiAgICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICAgICJDT00gUG9ydCBvZiB0aGUgZGV2aWNlIgogOjo9IHsgdGFTZXJ2aWNlIDEgfQoKdGFUZW1wZXJhdHVyZSBPQkpFQ1QtVFlQRQogICAgICAgIFNZTlRBWCAgRGlzcGxheVN0cmluZwogICAgICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgICAgU1RBVFVTIGN1cnJlbnQKICAgICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgICAgIlRoZSB0ZW1wZXJhdHVyZSBwaWNrZWQgdXAgYnkgdGhlIG1vbml0b3IuIgogOjo9IHsgdGFTZXJ2aWNlIDIgfQoKdGFMYXN0Q2hlY2sgT0JKRUNULVRZUEUKICAgICAgICBTWU5UQVggIERpc3BsYXlTdHJpbmcKICAgICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgICAgIFNUQVRVUyBjdXJyZW50CiAgICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICAgICJUaGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBtb25pdG9yIGNoZWNrZWQgdGhlIHRlbXBlcmF0dXJlLiIKIDo6PSB7IHRhU2VydmljZSAzIH0KCnRhTm9ybWFsIE5PVElGSUNBVElPTi1UWVBFCiAgICAgT0JKRUNUUyAgICAgICAgICAgeyB0YURldmljZUluZGV4LCB0YVRlbXBlcmF0dXJlLCB0YUxhc3RDaGVjayB9CiAgICAgU1RBVFVTICAgICAgICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAiRmlyZWQgd2hlbiB0aGUgYWxhcm0gaXMgcmVhZC4iCiAgICAgOjo9IHsgdGFUcmFwcyAxIH0KCnRhSGlnaEFsYXJtIE5PVElGSUNBVElPTi1UWVBFCiAgICAgT0JKRUNUUyAgICAgICAgICAgeyB0YURldmljZUluZGV4LCB0YVRlbXBlcmF0dXJlLCB0YUxhc3RDaGVjayB9CiAgICAgU1RBVFVTICAgICAgICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAiRmlyZWQgd2hlbiB0aGUgaGlnaCBhbGFybSBpcyB0cmlwcGVkLiIKICAgICA6Oj0geyB0YVRyYXBzIDIgfQoKdGFMb3dBbGFybSBOT1RJRklDQVRJT04tVFlQRQogICAgIE9CSkVDVFMgICAgICAgICAgIHsgdGFEZXZpY2VJbmRleCwgdGFUZW1wZXJhdHVyZSwgdGFMYXN0Q2hlY2sgfQogICAgIFNUQVRVUyAgICAgICAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgIkZpcmVkIHdoZW4gdGhlIGxvdyBhbGFybSBpcyB0cmlwcGVkLiIKICAgICA6Oj0geyB0YVRyYXBzIDMgfQoKdGFTaHV0ZG93biBOT1RJRklDQVRJT04tVFlQRQogICAgIFNUQVRVUyAgICAgICAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgIkZpcmVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHNodXR0aW5nIGRvd24gdGhlIHNlcnZlci4iCiAgICAgOjo9IHsgdGFUcmFwcyA0IH0KCkVORAo= | base64 --decode > TEMPERATUREALERT-MIB
snmptranslate -Tz -m ./TEMPERATUREALERT-MIB
# note down '1.3.6.1.4.1.27297'
snmptranslate -Tz -m ./TEMPERATUREALERT-MIB | mib2zabbix.pl -o 1.3.6.1.4.1.27297 -f TEMPERATUREALERT-MIB.xml -N TEMPERATUREALERT-MIB