411 lines
58 KiB
JSON
411 lines
58 KiB
JSON
{
|
|
"influx": {
|
|
"url": "http://10.0.5.232:8086",
|
|
"org": "MEASCON",
|
|
"token": "_jtoxcVDIbol2Uqt_vlhidut-EO0Xo0ZXea2UC5a5Bgotk836F0xPN4NSGY1jYI_WaBKRau4RyZ-g2XSFiNdXw==",
|
|
"username": "PCM",
|
|
"password": "1842moon",
|
|
"landingUrl": "http://10.0.5.232:8086/orgs/b2542eeb72a3e614/dashboards/0f8ab8a328fe9000?lower=now%28%29+-+1h",
|
|
"bucket": "PCM",
|
|
"measurement": "PCM_Measurement"
|
|
},
|
|
"placeholders": {
|
|
"chart1": {
|
|
"type": "chart",
|
|
"label": "chart1",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart2": {
|
|
"type": "chart",
|
|
"label": "chart2",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart3": {
|
|
"type": "chart",
|
|
"label": "chart3",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart4": {
|
|
"type": "chart",
|
|
"label": "chart4",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart5": {
|
|
"type": "chart",
|
|
"label": "chart5",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart6": {
|
|
"type": "chart",
|
|
"label": "chart6",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart7": {
|
|
"type": "chart",
|
|
"label": "chart7",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart8": {
|
|
"type": "chart",
|
|
"label": "chart8",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart9": {
|
|
"type": "chart",
|
|
"label": "chart9",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart10": {
|
|
"type": "chart",
|
|
"label": "chart10",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart11": {
|
|
"type": "chart",
|
|
"label": "chart11",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"chart12": {
|
|
"type": "chart",
|
|
"label": "chart12",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"table1": {
|
|
"type": "table",
|
|
"label": "table1",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {},
|
|
"table": {
|
|
"firstColumn": "time",
|
|
"firstTitle": "",
|
|
"titles": {}
|
|
}
|
|
},
|
|
"table2": {
|
|
"type": "table",
|
|
"label": "table2",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {},
|
|
"table": {
|
|
"firstColumn": "time",
|
|
"firstTitle": "",
|
|
"titles": {}
|
|
}
|
|
},
|
|
"table3": {
|
|
"type": "table",
|
|
"label": "table3",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {},
|
|
"table": {
|
|
"firstColumn": "time",
|
|
"firstTitle": "",
|
|
"titles": {}
|
|
}
|
|
},
|
|
"tb1": {
|
|
"type": "manualTable",
|
|
"label": "tb1",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"tb2": {
|
|
"type": "manualTable",
|
|
"label": "tb2",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text1": {
|
|
"type": "text",
|
|
"label": "text1",
|
|
"title": "",
|
|
"value": "@current_date",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text2": {
|
|
"type": "text",
|
|
"label": "text2",
|
|
"title": "",
|
|
"value": "@process_no",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text3": {
|
|
"type": "text",
|
|
"label": "text3",
|
|
"title": "",
|
|
"value": "@part_no",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text4": {
|
|
"type": "text",
|
|
"label": "text4",
|
|
"title": "",
|
|
"value": "@executor",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text5": {
|
|
"type": "text",
|
|
"label": "text5",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text6": {
|
|
"type": "text",
|
|
"label": "text6",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text7": {
|
|
"type": "text",
|
|
"label": "text7",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text8": {
|
|
"type": "text",
|
|
"label": "text8",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text9": {
|
|
"type": "text",
|
|
"label": "text9",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text10": {
|
|
"type": "text",
|
|
"label": "text10",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text11": {
|
|
"type": "text",
|
|
"label": "text11",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text12": {
|
|
"type": "text",
|
|
"label": "text12",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text13": {
|
|
"type": "text",
|
|
"label": "text13",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
},
|
|
"text14": {
|
|
"type": "text",
|
|
"label": "text14",
|
|
"title": "",
|
|
"value": "",
|
|
"dbQuery": "",
|
|
"chart": {}
|
|
}
|
|
},
|
|
"tcpModbus": {
|
|
"ip": "10.0.5.232",
|
|
"port": 5020
|
|
},
|
|
"devices": [
|
|
{
|
|
"deviceName": "温度传感器",
|
|
"alarmRegister": 0,
|
|
"alarmType": "holding",
|
|
"thresholds": [
|
|
{
|
|
"name": "温度上限",
|
|
"register": 0,
|
|
"regType": "input",
|
|
"value": 29.0
|
|
},
|
|
{
|
|
"name": "温度下线",
|
|
"register": 1,
|
|
"regType": "input",
|
|
"value": 0.0
|
|
},
|
|
{
|
|
"name": "是否报警",
|
|
"register": 0,
|
|
"regType": "coil",
|
|
"value": 0.0
|
|
},
|
|
{
|
|
"name": "报警信息",
|
|
"register": 0,
|
|
"regType": "holding",
|
|
"value": 0.0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"deviceName": "测试开关",
|
|
"alarmRegister": 0,
|
|
"alarmType": "holding",
|
|
"thresholds": [
|
|
{
|
|
"name": "开始测试",
|
|
"register": 0,
|
|
"regType": "coil",
|
|
"value": 0.0
|
|
},
|
|
{
|
|
"name": "结束测试",
|
|
"register": 1,
|
|
"regType": "coil",
|
|
"value": 0.0
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"db": {
|
|
"engine": "sqlserver",
|
|
"host": "localhost",
|
|
"port": 1433,
|
|
"database": "",
|
|
"username": "",
|
|
"password": ""
|
|
},
|
|
"experimentProcess": {
|
|
"headers": [
|
|
"实验内容",
|
|
"实验步骤",
|
|
"工况(档位)",
|
|
"输入转速",
|
|
"转速阈值"
|
|
],
|
|
"rows": [
|
|
[
|
|
"性能试验",
|
|
"10",
|
|
"3",
|
|
"981",
|
|
"20"
|
|
],
|
|
[
|
|
"性能试验",
|
|
"20",
|
|
"4",
|
|
"1906",
|
|
"10"
|
|
],
|
|
[
|
|
"性能试验",
|
|
"30",
|
|
"5",
|
|
"2096",
|
|
"10"
|
|
],
|
|
[
|
|
"耐久试验",
|
|
"40.1",
|
|
"1",
|
|
"476",
|
|
"10"
|
|
],
|
|
[
|
|
"耐久试验",
|
|
"40.1",
|
|
"2",
|
|
"731",
|
|
"10"
|
|
],
|
|
[
|
|
"耐久试验",
|
|
"40.1",
|
|
"2",
|
|
"731",
|
|
"10"
|
|
]
|
|
],
|
|
"scriptFile": "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQ0KIiIiDQrmtYvor5Xpg6jkvY3muKnluqborrDlvZXooajnlJ/miJDohJrmnKzvvIjluKbotJ/ovb3nirbmgIHnrZvpgInvvIkNCg0KLSDlv73nlaXkvKDlhaXnmoQgZXhwZXJpbWVudFByb2Nlc3PvvIzoh6rooYzmnoTpgKDlm7rlrprnu5PmnoTnmoTmlbDmja4NCi0g5LuOIEluZmx1eERCIOafpeivouavj+S4qua1i+ivlemDqOS9jeWcqOWQhOaXtumXtOeCueeahOeerOaXtua4qeW6puWAvA0KLSDmt7vliqAgbG9hZF9zdGF0dXMgPSAxIOeahOetm+mAieadoeS7tu+8jOehruS/neWPquWcqOecn+ato+mHh+mbhuaVsOaNruaXtuiOt+WPlua4qeW6pg0KLSDovpPlh7rmoLzlvI/kuI7lupTnlKjkuK3nmoQgc2NyaXB0VGFibGUg5Y2g5L2N56ym5YW85a65DQotIOm7mOiupOaKiiB7c2NyaXB0VGFibGUxfSDmlL7lnKgi5rWL6K+V6YOo5L2NIuaJgOWcqOeahOWNleWFg+agvA0KDQrnjq/looPlj5jph4/vvJoNCiAgICBUQUJMRV9UT0tFTiAgICAgICAgIOebruagh+WNoOS9jeespu+8jOm7mOiupCBzY3JpcHRUYWJsZTENCiAgICBUQUJMRV9TVEFSVF9ST1cgICAgIOWGmeWFpei1t+Wni+ihjOWBj+enu++8jOm7mOiupCAwDQogICAgVEFCTEVfU1RBUlRfQ09MICAgICDlhpnlhaXotbflp4vliJflgY/np7vvvIzpu5jorqQgMA0KICAgIFRBQkxFX1RJTUVfU0xPVFMgICAg6YCX5Y+35YiG6ZqU55qE5pe26Ze05Yi75bqm77yM6buY6K6kICIwLjVoLDFoLDEuNWgsMmgsMi41aCwzaCwzLjVoIg0KICAgIFRBQkxFX01PVE9SX1NQRUVEICAg55S15py66L2s6YCf5qCH562+77yM6buY6K6kICI5ODBSUE0iDQogICAgRVhQRVJJTUVOVF9TVEFSVCAgICAg5a6e6aqM5byA5aeL5pe26Ze077yISVNPIDg2MDEg5qC85byP77yM5aaCIDIwMjQtMDEtMDFUMTA6MDA6MDBa77yJDQogICAgRVhQRVJJTUVOVF9FTkQgICAgICAg5a6e6aqM57uT5p2f5pe26Ze077yISVNPIDg2MDEg5qC85byP77yJDQogICAgSU5GTFVYX1VSTCAgICAgICAgICAgSW5mbHV4REIgVVJMDQogICAgSU5GTFVYX09SRyAgICAgICAgICAgSW5mbHV4REIg57uE57uHDQogICAgSU5GTFVYX1RPS0VOICAgICAgICAgSW5mbHV4REIg5Luk54mMDQogICAgSU5GTFVYX0JVQ0tFVCAgICAgICAgSW5mbHV4REIg5qG25ZCN77yM6buY6K6kIFBDTQ0KICAgIElORkxVWF9NRUFTVVJFTUVOVCAgIEluZmx1eERCIOa1i+mHj+WQje+8jOm7mOiupCBQQ01fTWVhc3VyZW1lbnQNCiIiIg0KDQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zDQoNCmltcG9ydCBqc29uDQppbXBvcnQgbG9nZ2luZw0KaW1wb3J0IG9zDQppbXBvcnQgc3lzDQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhDQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBPcHRpb25hbA0KDQoNCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQ0KDQoNCmRlZiBfbWFza19zZWNyZXQodmFsdWU6IE9wdGlvbmFsW3N0cl0pIC0+IHN0cjoNCiAgICAiIiLmjqnnoIHmlY/mhJ/kv6Hmga8iIiINCiAgICBpZiBub3QgdmFsdWU6DQogICAgICAgIHJldHVybiAiPGVtcHR5PiINCiAgICBpZiBsZW4odmFsdWUpIDw9IDg6DQogICAgICAgIHJldHVybiAiKiIgKiBsZW4odmFsdWUpDQogICAgcmV0dXJuIHZhbHVlWzo0XSArICIqIiAqIChsZW4odmFsdWUpIC0gOCkgKyB2YWx1ZVstNDpdDQoNCg0KZGVmIF9zZXR1cF9sb2dnaW5nKCkgLT4gTm9uZToNCiAgICAiIiLorr7nva7ml6Xlv5ciIiINCiAgICBsb2dfbGV2ZWxfc3RyID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX0xPR19MRVZFTCIsICJERUJVRyIpLnVwcGVyKCkNCiAgICBsb2dfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ19sZXZlbF9zdHIsIGxvZ2dpbmcuREVCVUcpDQogICAgDQogICAgIyDphY3nva7moLnml6Xlv5forrDlvZXlmagNCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKA0KICAgICAgICBsZXZlbD1sb2dfbGV2ZWwsDQogICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgWyUobGV2ZWxuYW1lKXNdICUobmFtZSlzOiAlKG1lc3NhZ2UpcycsDQogICAgICAgIGhhbmRsZXJzPVsNCiAgICAgICAgICAgIGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQ0KICAgICAgICBdDQogICAgKQ0KICAgIA0KICAgICMg5aaC5p6c5oyH5a6a5LqG5pel5b+X5paH5Lu277yM5re75Yqg5paH5Lu25aSE55CG5ZmoDQogICAgbG9nX2ZpbGUgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTE9HX0ZJTEUiLCAiIikuc3RyaXAoKQ0KICAgIGlmIGxvZ19maWxlOg0KICAgICAgICB0cnk6DQogICAgICAgICAgICBmaWxlX2hhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGxvZ19maWxlLCBlbmNvZGluZz0ndXRmLTgnKQ0KICAgICAgICAgICAgZmlsZV9oYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkNCiAgICAgICAgICAgIGZpbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoDQogICAgICAgICAgICAgICAgJyUoYXNjdGltZSlzIFslKGxldmVsbmFtZSlzXSAlKG5hbWUpczogJShtZXNzYWdlKXMnDQogICAgICAgICAgICApKQ0KICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5hZGRIYW5kbGVyKGZpbGVfaGFuZGxlcikNCiAgICAgICAgICAgIExPR0dFUi5pbmZvKCLml6Xlv5fmlofku7blt7LphY3nva46ICVzIiwgbG9nX2ZpbGUpDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCLphY3nva7ml6Xlv5fmlofku7blpLHotKU6ICVzIiwgZSkNCg0KDQpkZWYgX2dldF9pbmZsdXhfY29uZmlnKCkgLT4gRGljdFtzdHIsIHN0cl06DQogICAgIiIi6I635Y+WSW5mbHV4RELphY3nva4iIiINCiAgICBjb25maWcgPSB7DQogICAgICAgICd1cmwnOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX1VSTCIsICIiKS5zdHJpcCgpLA0KICAgICAgICAnb3JnJzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9PUkciLCAiIikuc3RyaXAoKSwNCiAgICAgICAgJ3Rva2VuJzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9UT0tFTiIsICIiKS5zdHJpcCgpLA0KICAgICAgICAnYnVja2V0Jzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9CVUNLRVQiLCAiUENNIikuc3RyaXAoKSwNCiAgICAgICAgJ21lYXN1cmVtZW50Jzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9NRUFTVVJFTUVOVCIsICJQQ01fTWVhc3VyZW1lbnQiKS5zdHJpcCgpLA0KICAgIH0NCiAgICANCiAgICBMT0dHRVIuZGVidWcoDQogICAgICAgICJJbmZsdXhEQumFjee9rjogdXJsPSVzIG9yZz0lcyB0b2tlbj0lcyBidWNrZXQ9JXMgbWVhc3VyZW1lbnQ9JXMiLA0KICAgICAgICBjb25maWdbJ3VybCddIG9yICI8ZW1wdHk+IiwNCiAgICAgICAgY29uZmlnWydvcmcnXSBvciAiPGVtcHR5PiIsDQogICAgICAgIF9tYXNrX3NlY3JldChjb25maWdbJ3Rva2VuJ10pLA0KICAgICAgICBjb25maWdbJ2J1Y2tldCddLA0KICAgICAgICBjb25maWdbJ21lYXN1cmVtZW50J10sDQogICAgKQ0KICAgIA0KICAgIHJldHVybiBjb25maWcNCg0KDQpkZWYgX3BhcnNlX2V4cGVyaW1lbnRfdGltZXMoKSAtPiB0dXBsZVtPcHRpb25hbFtkYXRldGltZV0sIE9wdGlvbmFsW2RhdGV0aW1lXV06DQogICAgIiIi6Kej5p6Q5a6e6aqM5pe26Ze0IiIiDQogICAgc3RhcnRfc3RyID0gb3MuZW52aXJvbi5nZXQoIkVYUEVSSU1FTlRfU1RBUlQiLCAiIikuc3RyaXAoKQ0KICAgIGVuZF9zdHIgPSBvcy5lbnZpcm9uLmdldCgiRVhQRVJJTUVOVF9FTkQiLCAiIikuc3RyaXAoKQ0KICAgIA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSA9IE5vbmUNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdID0gTm9uZQ0KICAgIA0KICAgIGlmIHN0YXJ0X3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTWiIsICIlWS0lbS0lZFQlSDolTTolUyV6Il06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUuc3RycHRpbWUoc3RhcnRfc3RyLCBmbXQpDQogICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0X3RpbWUudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TlubbljrvpmaTml7bljLrkv6Hmga8NCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBzdGFydF90aW1lLmFzdGltZXpvbmUodHo9Tm9uZSkucmVwbGFjZSh0emluZm89Tm9uZSkNCiAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICAgICAgcHJpbnQoZiJXYXJuaW5nOiBGYWlsZWQgdG8gcGFyc2UgRVhQRVJJTUVOVF9TVEFSVCAne3N0YXJ0X3N0cn0nOiB7ZX0iLCBmaWxlPXN5cy5zdGRlcnIpDQogICAgDQogICAgaWYgZW5kX3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTWiIsICIlWS0lbS0lZFQlSDolTTolUyV6Il06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGVuZF9zdHIsIGZtdCkNCiAgICAgICAgICAgICAgICAgICAgaWYgZW5kX3RpbWUudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TlubbljrvpmaTml7bljLrkv6Hmga8NCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF90aW1lID0gZW5kX3RpbWUuYXN0aW1lem9uZSh0ej1Ob25lKS5yZXBsYWNlKHR6aW5mbz1Ob25lKQ0KICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgICAgICBwcmludChmIldhcm5pbmc6IEZhaWxlZCB0byBwYXJzZSBFWFBFUklNRU5UX0VORCAne2VuZF9zdHJ9Jzoge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQ0KICAgIA0KICAgIHJldHVybiBzdGFydF90aW1lLCBlbmRfdGltZQ0KDQoNCmRlZiBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyOiBzdHIpIC0+IGZsb2F0Og0KICAgICIiIuino+aekOaXtumXtOanveWtl+espuS4suS4uuWwj+aXtuaVsCIiIg0KICAgIGlmIG5vdCBzbG90X3N0cjoNCiAgICAgICAgcmV0dXJuIDAuMA0KICAgIA0KICAgIHNsb3Rfc3RyID0gc2xvdF9zdHIuc3RyaXAoKS5sb3dlcigpDQogICAgDQogICAgaWYgc2xvdF9zdHIuZW5kc3dpdGgoJ2gnKToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNsb3Rfc3RyWzotMV0pDQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICAgICAgcGFzcw0KICAgIA0KICAgIHRyeToNCiAgICAgICAgcmV0dXJuIGZsb2F0KHNsb3Rfc3RyKQ0KICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICBwYXNzDQogICAgDQogICAgcmV0dXJuIDAuMA0KDQoNCmRlZiBfdGltZV9zbG90cygpIC0+IExpc3Rbc3RyXToNCiAgICByYXcgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfVElNRV9TTE9UUyIsICIiKS5zdHJpcCgpDQogICAgaWYgbm90IHJhdzoNCiAgICAgICAgIyDmoLnmja7lm77niYfvvIzml7bpl7TliLvluqbmmK/vvJowLjVoLCAxaCwgMS41aCwgMmgsIDIuNWgsIDNoLCAzLjVo77yIN+WIl++8iQ0KICAgICAgICByZXR1cm4gWyIwLjVoIiwgIjFoIiwgIjEuNWgiLCAiMmgiLCAiMi41aCIsICIzaCIsICIzLjVoIl0NCiAgICBzbG90cyA9IFtzbG90LnN0cmlwKCkgZm9yIHNsb3QgaW4gcmF3LnNwbGl0KCIsIildDQogICAgcmV0dXJuIFtzbG90IGZvciBzbG90IGluIHNsb3RzIGlmIHNsb3RdDQoNCg0KZGVmIF9kZWZhdWx0X3NlY3Rpb25zKCkgLT4gTGlzdFtEaWN0W3N0ciwgQW55XV06DQogICAgIyBuYW1lIC0+IHJvd3MgdW5kZXJuZWF0aO+8iGVudHJpZXPvvIkNCiAgICAjIOavj+S4qiBlbnRyeSDlr7nlupTkuIDkuKrmtYvor5Xpg6jkvY3vvIzpnIDopoHmmKDlsITliLAgSW5mbHV4REIg55qEIGZpZWxkIOaIliB0YWcNCiAgICByZXR1cm4gWw0KICAgICAgICB7Im5hbWUiOiAi5Li76L205om/IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMxIiwgImZpZWxkIjogIuS4u+i9tOaJvyMxIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jMSJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMiIsICJmaWVsZCI6ICLkuLvovbTmib8jMiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzIifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzMiLCAiZmllbGQiOiAi5Li76L205om/IzMiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuS4u+i9tOaJvyMzIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiM0IiwgImZpZWxkIjogIuS4u+i9tOaJvyM0IiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jNCJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNSIsICJmaWVsZCI6ICLkuLvovbTmib8jNSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzUifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzYiLCAiZmllbGQiOiAi5Li76L205om/IzYiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuS4u+i9tOaJvyM2In0sDQogICAgICAgIF19LA0KICAgICAgICB7Im5hbWUiOiAi5Y2B5a2X5aS0IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMxIiwgImZpZWxkIjogIuWNgeWtl+WktCMxIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLljYHlrZflpLQjMSJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMiIsICJmaWVsZCI6ICLljYHlrZflpLQjMiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Y2B5a2X5aS0IzIifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzMiLCAiZmllbGQiOiAi5Y2B5a2X5aS0IzMiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWNgeWtl+WktCMzIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiM0IiwgImZpZWxkIjogIuWNgeWtl+WktCM0IiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLljYHlrZflpLQjNCJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNSIsICJmaWVsZCI6ICLljYHlrZflpLQjNSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Y2B5a2X5aS0IzUifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLlh4/pgJ/nrrHlsI/ovbTmib8iLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzHvvIjovpPlhaXms5XlhbDnq6/vvIkiLCAiZmllbGQiOiAi5YeP6YCf566x5bCP6L205om/MSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5bCP6L205om/IzEifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzIiLCAiZmllbGQiOiAi5YeP6YCf566x5bCP6L205om/IzIiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWHj+mAn+euseWwj+i9tOaJvyMyIn0sDQogICAgICAgIF19LA0KICAgICAgICB7Im5hbWUiOiAi5YeP6YCf566x5aSn6L205om/IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMz77yI5aSn56uv55uW56uv77yJIiwgImZpZWxkIjogIuWHj+mAn+euseWkp+i9tOaJvyMzIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLlh4/pgJ/nrrHlpKfovbTmib8jMyJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNCIsICJmaWVsZCI6ICLlh4/pgJ/nrrHlpKfovbTmib8jNCIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5aSn6L205om/IzQifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLmtqbmu5HmsrnmuKkiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIiwgImZpZWxkIjogIm1lYW4iLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIua2pua7keayuea4qSJ9LCAicmVzdWx0X2tleSI6ICLmtqbmu5HmsrnmuKkifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLmtqbmu5HmsrnljosiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiKFBzaSkiLCAiZmllbGQiOiAibWVhbiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAi5ram5ruR5rK55Y6LIn0sICJyZXN1bHRfa2V5IjogIua2pua7keayueWOiyJ9LA0KICAgICAgICBdfSwNCiAgICBdDQoNCmRlZiBfcXVlcnlfbG9hZF9zdGF0dXNfdGltZWxpbmUoDQogICAgc3RhcnRfdGltZTogZGF0ZXRpbWUsDQogICAgZW5kX3RpbWU6IGRhdGV0aW1lLA0KICAgIGluZmx1eF91cmw6IHN0ciwNCiAgICBpbmZsdXhfb3JnOiBzdHIsDQogICAgaW5mbHV4X3Rva2VuOiBzdHIsDQogICAgaW5mbHV4X2J1Y2tldDogc3RyLA0KICAgIGluZmx1eF9tZWFzdXJlbWVudDogc3RyLA0KKSAtPiBMaXN0W0RpY3Rbc3RyLCBBbnldXToNCiAgICAiIiLmn6Xor6LmlbTkuKrlrp7pqozmnJ/pl7TnmoRsb2FkX3N0YXR1c+aXtumXtOe6v+aVsOaNriIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgIExPR0dFUi53YXJuaW5nKCJJbmZsdXhEQiBjbGllbnQgbm90IGF2YWlsYWJsZSwgc2tpcCBsb2FkX3N0YXR1cyB0aW1lbGluZSBxdWVyeSIpDQogICAgICAgIHJldHVybiBbXQ0KDQogICAgdHJ5Og0KICAgICAgICBjbGllbnQgPSBJbmZsdXhEQkNsaWVudCh1cmw9aW5mbHV4X3VybCwgb3JnPWluZmx1eF9vcmcsIHRva2VuPWluZmx1eF90b2tlbikNCiAgICAgICAgcXVlcnlfYXBpID0gY2xpZW50LnF1ZXJ5X2FwaSgpDQoNCiAgICAgICAgc3RhcnRfcmZjID0gc3RhcnRfdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgZW5kX3JmYyA9IGVuZF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KDQogICAgICAgICMg5p+l6K+ibG9hZF9zdGF0dXPlrZfmrrXnmoTmiYDmnInmlbDmja7ngrnvvIjlnKhCcmVha2Vy5pWw5o2u57G75Z6L5Lit77yJDQogICAgICAgIGZsdXggPSBmJycnDQpmcm9tKGJ1Y2tldDogIntpbmZsdXhfYnVja2V0fSIpDQogIHw+IHJhbmdlKHN0YXJ0OiB7c3RhcnRfcmZjfSwgc3RvcDoge2VuZF9yZmN9KQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfbWVhc3VyZW1lbnQiXSA9PSAie2luZmx1eF9tZWFzdXJlbWVudH0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJkYXRhX3R5cGUiXSA9PSAiQnJlYWtlciIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9maWVsZCJdID09ICJsb2FkX3N0YXR1cyIpDQogIHw+IHNvcnQoY29sdW1uczogWyJfdGltZSJdKQ0KICB8PiB5aWVsZChuYW1lOiAibG9hZF9zdGF0dXNfdGltZWxpbmUiKQ0KJycnLnN0cmlwKCkNCg0KICAgICAgICBMT0dHRVIuZGVidWcoIkxvYWQgc3RhdHVzIHRpbWVsaW5lIHF1ZXJ5OlxuJXMiLCBmbHV4KQ0KDQogICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToNCiAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgTWlzc2luZ1Bpdm90RnVuY3Rpb24pDQogICAgICAgICAgICBmcmFtZXMgPSBxdWVyeV9hcGkucXVlcnlfZGF0YV9mcmFtZShmbHV4KQ0KICAgICAgICANCiAgICAgICAgaWYgaXNpbnN0YW5jZShmcmFtZXMsIGxpc3QpOg0KICAgICAgICAgICAgZGYgPSBwZC5jb25jYXQoZnJhbWVzLCBpZ25vcmVfaW5kZXg9VHJ1ZSkgaWYgZnJhbWVzIGVsc2UgcGQuRGF0YUZyYW1lKCkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGRmID0gZnJhbWVzDQoNCiAgICAgICAgaWYgZGYuZW1wdHkgb3IgJ192YWx1ZScgbm90IGluIGRmLmNvbHVtbnMgb3IgJ190aW1lJyBub3QgaW4gZGYuY29sdW1uczoNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCJObyBsb2FkX3N0YXR1cyB0aW1lbGluZSBkYXRhIGZvdW5kIikNCiAgICAgICAgICAgIHJldHVybiBbXQ0KDQogICAgICAgICMg6L2s5o2i5Li65pe26Ze057q/5pWw5o2u77yM56Gu5L+d5pe25Yy65LiA6Ie05oCnDQogICAgICAgIHRpbWVsaW5lID0gW10NCiAgICAgICAgZm9yIF8sIHJvdyBpbiBkZi5pdGVycm93cygpOg0KICAgICAgICAgICAgdGltZV9vYmogPSBwZC50b19kYXRldGltZShyb3dbJ190aW1lJ10pDQogICAgICAgICAgICAjIOi9rOaNouS4uuacrOWcsOaXtumXtO+8jOWOu+mZpOaXtuWMuuS/oeaBr++8jOS4jnN0YXJ0X3RpbWUvZW5kX3RpbWXkv53mjIHkuIDoh7QNCiAgICAgICAgICAgIGlmIGhhc2F0dHIodGltZV9vYmosICd0eicpIGFuZCB0aW1lX29iai50eiBpcyBub3QgTm9uZToNCiAgICAgICAgICAgICAgICAjIOWvueS6jnBhbmRhcyBUaW1lc3RhbXDvvIzlhYjovazmjaLkuLrmnKzlnLDml7bljLrlho3ovazkuLpQeXRob24gZGF0ZXRpbWUNCiAgICAgICAgICAgICAgICB0aW1lX29iaiA9IHRpbWVfb2JqLnR6X2NvbnZlcnQoTm9uZSkudG9fcHlkYXRldGltZSgpDQogICAgICAgICAgICBlbGlmIGhhc2F0dHIodGltZV9vYmosICd0b19weWRhdGV0aW1lJyk6DQogICAgICAgICAgICAgICAgIyDovazmjaLkuLpQeXRob24gZGF0ZXRpbWXlr7nosaENCiAgICAgICAgICAgICAgICB0aW1lX29iaiA9IHRpbWVfb2JqLnRvX3B5ZGF0ZXRpbWUoKQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAjIOehruS/neayoeacieaXtuWMuuS/oeaBrw0KICAgICAgICAgICAgaWYgaGFzYXR0cih0aW1lX29iaiwgJ3R6aW5mbycpIGFuZCB0aW1lX29iai50emluZm8gaXMgbm90IE5vbmU6DQogICAgICAgICAgICAgICAgdGltZV9vYmogPSB0aW1lX29iai5yZXBsYWNlKHR6aW5mbz1Ob25lKQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgdGltZWxpbmUuYXBwZW5kKHsNCiAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVfb2JqLA0KICAgICAgICAgICAgICAgICdsb2FkX3N0YXR1cyc6IGZsb2F0KHJvd1snX3ZhbHVlJ10pDQogICAgICAgICAgICB9KQ0KDQogICAgICAgIExPR0dFUi5pbmZvKCJMb2FkIHN0YXR1cyB0aW1lbGluZTogJWQgZGF0YSBwb2ludHMgZnJvbSAlcyB0byAlcyIsIA0KICAgICAgICAgICAgICAgICAgIGxlbih0aW1lbGluZSksIHN0YXJ0X3RpbWUsIGVuZF90aW1lKQ0KICAgICAgICANCiAgICAgICAgIyDosIPor5XvvJrmo4Dmn6Xml7bpl7Tlr7nosaHnsbvlnosNCiAgICAgICAgaWYgdGltZWxpbmU6DQogICAgICAgICAgICBmaXJzdF90aW1lID0gdGltZWxpbmVbMF1bJ3RpbWUnXQ0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJUaW1lbGluZSBmaXJzdCB0aW1lOiAlcyAodHlwZTogJXMsIHR6aW5mbzogJXMpIiwgDQogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF90aW1lLCB0eXBlKGZpcnN0X3RpbWUpLCBnZXRhdHRyKGZpcnN0X3RpbWUsICd0emluZm8nLCBOb25lKSkNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJzdGFydF90aW1lOiAlcyAodHlwZTogJXMsIHR6aW5mbzogJXMpIiwgDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUsIHR5cGUoc3RhcnRfdGltZSksIGdldGF0dHIoc3RhcnRfdGltZSwgJ3R6aW5mbycsIE5vbmUpKQ0KICAgICAgICBMT0dHRVIuZGVidWcoImVuZF90aW1lOiAlcyAodHlwZTogJXMsIHR6aW5mbzogJXMpIiwgDQogICAgICAgICAgICAgICAgICAgIGVuZF90aW1lLCB0eXBlKGVuZF90aW1lKSwgZ2V0YXR0cihlbmRfdGltZSwgJ3R6aW5mbycsIE5vbmUpKQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuIHRpbWVsaW5lDQoNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIExPR0dFUi5lcnJvcigiRXJyb3IgcXVlcnlpbmcgbG9hZF9zdGF0dXMgdGltZWxpbmU6ICVzIiwgZSkNCiAgICAgICAgcmV0dXJuIFtdDQogICAgZmluYWxseToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCg0KDQpkZWYgX2NhbGN1bGF0ZV9lZmZlY3RpdmVfdGltZV9wb2ludHMoDQogICAgc3RhcnRfdGltZTogZGF0ZXRpbWUsDQogICAgZW5kX3RpbWU6IGRhdGV0aW1lLA0KICAgIHRpbWVfc2xvdHM6IExpc3Rbc3RyXSwNCiAgICBpbmZsdXhfY29uZmlnOiBEaWN0W3N0ciwgc3RyXQ0KKSAtPiBEaWN0W3N0ciwgT3B0aW9uYWxbZGF0ZXRpbWVdXToNCiAgICAiIiLorqHnrpfln7rkuo7mnInmlYjov5DooYzml7bpl7TntK/orqHnmoTnnJ/lrp7ml7bpl7TngrkiIiINCiAgICANCiAgICAjIDEuIOiOt+WPlmxvYWRfc3RhdHVz5pe26Ze057q/DQogICAgdGltZWxpbmUgPSBfcXVlcnlfbG9hZF9zdGF0dXNfdGltZWxpbmUoDQogICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lLA0KICAgICAgICBpbmZsdXhfY29uZmlnWyd1cmwnXSwgaW5mbHV4X2NvbmZpZ1snb3JnJ10sIGluZmx1eF9jb25maWdbJ3Rva2VuJ10sDQogICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLCBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddDQogICAgKQ0KICAgIA0KICAgIGlmIG5vdCB0aW1lbGluZToNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoIk5vIGxvYWRfc3RhdHVzIHRpbWVsaW5lIGRhdGEsIGZhbGxiYWNrIHRvIG9yaWdpbmFsIHRpbWUgY2FsY3VsYXRpb24iKQ0KICAgICAgICAjIOWbnumAgOWIsOWOn+Wni+aXtumXtOiuoeeulw0KICAgICAgICByZXN1bHQgPSB7fQ0KICAgICAgICBmb3Igc2xvdF9zdHIgaW4gdGltZV9zbG90czoNCiAgICAgICAgICAgIHNsb3RfaG91cnMgPSBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyKQ0KICAgICAgICAgICAgcmVzdWx0W3Nsb3Rfc3RyXSA9IHN0YXJ0X3RpbWUgKyB0aW1lZGVsdGEoaG91cnM9c2xvdF9ob3VycykNCiAgICAgICAgcmV0dXJuIHJlc3VsdA0KICAgIA0KICAgICMgMi4g6K6h566X5pyJ5pWI6L+Q6KGM5pe26Ze05q61DQogICAgZWZmZWN0aXZlX3BlcmlvZHMgPSBbXQ0KICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gTm9uZQ0KICAgIA0KICAgIGZvciBpLCBwb2ludCBpbiBlbnVtZXJhdGUodGltZWxpbmUpOg0KICAgICAgICBpZiBwb2ludFsnbG9hZF9zdGF0dXMnXSA9PSAxLjA6DQogICAgICAgICAgICBpZiBjdXJyZW50X3BlcmlvZF9zdGFydCBpcyBOb25lOg0KICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gcG9pbnRbJ3RpbWUnXQ0KICAgICAgICBlbHNlOiAgIyBsb2FkX3N0YXR1cyAhPSAxLjANCiAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgIGVmZmVjdGl2ZV9wZXJpb2RzLmFwcGVuZCh7DQogICAgICAgICAgICAgICAgICAgICdzdGFydCc6IGN1cnJlbnRfcGVyaW9kX3N0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAnZW5kJzogcG9pbnRbJ3RpbWUnXSwNCiAgICAgICAgICAgICAgICAgICAgJ2R1cmF0aW9uX2hvdXJzJzogKHBvaW50Wyd0aW1lJ10gLSBjdXJyZW50X3BlcmlvZF9zdGFydCkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICBjdXJyZW50X3BlcmlvZF9zdGFydCA9IE5vbmUNCiAgICANCiAgICAjIOWkhOeQhuacgOWQjuS4gOS4quWRqOacn++8iOWmguaenOWunumqjOe7k+adn+aXtuS7jeWcqOi/kOihjO+8iQ0KICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIG5vdCBOb25lOg0KICAgICAgICBlZmZlY3RpdmVfcGVyaW9kcy5hcHBlbmQoew0KICAgICAgICAgICAgJ3N0YXJ0JzogY3VycmVudF9wZXJpb2Rfc3RhcnQsDQogICAgICAgICAgICAnZW5kJzogZW5kX3RpbWUsDQogICAgICAgICAgICAnZHVyYXRpb25faG91cnMnOiAoZW5kX3RpbWUgLSBjdXJyZW50X3BlcmlvZF9zdGFydCkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgICAgIH0pDQogICAgDQogICAgdG90YWxfZWZmZWN0aXZlX2hvdXJzID0gc3VtKHBlcmlvZFsnZHVyYXRpb25faG91cnMnXSBmb3IgcGVyaW9kIGluIGVmZmVjdGl2ZV9wZXJpb2RzKQ0KICAgIExPR0dFUi5pbmZvKCJFZmZlY3RpdmUgcnVubmluZyBwZXJpb2RzOiAlZCBwZXJpb2RzLCB0b3RhbCAlLjNmIGhvdXJzIiwgDQogICAgICAgICAgICAgICBsZW4oZWZmZWN0aXZlX3BlcmlvZHMpLCB0b3RhbF9lZmZlY3RpdmVfaG91cnMpDQogICAgDQogICAgZm9yIHBlcmlvZCBpbiBlZmZlY3RpdmVfcGVyaW9kczoNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJFZmZlY3RpdmUgcGVyaW9kOiAlcyDihpIgJXMgKCUuM2YgaG91cnMpIiwNCiAgICAgICAgICAgICAgICAgICAgcGVyaW9kWydzdGFydCddLnN0cmZ0aW1lKCclSDolTTolUycpLA0KICAgICAgICAgICAgICAgICAgICBwZXJpb2RbJ2VuZCddLnN0cmZ0aW1lKCclSDolTTolUycpLA0KICAgICAgICAgICAgICAgICAgICBwZXJpb2RbJ2R1cmF0aW9uX2hvdXJzJ10pDQogICAgDQogICAgIyAzLiDorqHnrpfmr4/kuKrml7bpl7Tmp73lr7nlupTnmoTnnJ/lrp7ml7bpl7TngrkNCiAgICBlZmZlY3RpdmVfdGltZV9wb2ludHMgPSB7fQ0KICAgIA0KICAgIGZvciBzbG90X3N0ciBpbiB0aW1lX3Nsb3RzOg0KICAgICAgICB0YXJnZXRfZWZmZWN0aXZlX2hvdXJzID0gX3BhcnNlX3RpbWVfc2xvdChzbG90X3N0cikNCiAgICAgICAgDQogICAgICAgIGlmIHRhcmdldF9lZmZlY3RpdmVfaG91cnMgPD0gMDoNCiAgICAgICAgICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50c1tzbG90X3N0cl0gPSBOb25lDQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICANCiAgICAgICAgaWYgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycyA+IHRvdGFsX2VmZmVjdGl2ZV9ob3VyczoNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCJUYXJnZXQgZWZmZWN0aXZlIHRpbWUgJS4zZmggZXhjZWVkcyB0b3RhbCBlZmZlY3RpdmUgdGltZSAlLjNmaCBmb3Igc2xvdCAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9lZmZlY3RpdmVfaG91cnMsIHRvdGFsX2VmZmVjdGl2ZV9ob3Vycywgc2xvdF9zdHIpDQogICAgICAgICAgICBlZmZlY3RpdmVfdGltZV9wb2ludHNbc2xvdF9zdHJdID0gTm9uZQ0KICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgDQogICAgICAgICMg5Zyo5pyJ5pWI5pe26Ze05q615Lit5p+l5om+57Sv6K6h6L+Q6KGMdGFyZ2V0X2VmZmVjdGl2ZV9ob3Vyc+Wwj+aXtueahOaXtumXtOeCuQ0KICAgICAgICBjdW11bGF0aXZlX2hvdXJzID0gMC4wDQogICAgICAgIHRhcmdldF90aW1lX3BvaW50ID0gTm9uZQ0KICAgICAgICANCiAgICAgICAgZm9yIHBlcmlvZCBpbiBlZmZlY3RpdmVfcGVyaW9kczoNCiAgICAgICAgICAgIHBlcmlvZF9kdXJhdGlvbiA9IHBlcmlvZFsnZHVyYXRpb25faG91cnMnXQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiBjdW11bGF0aXZlX2hvdXJzICsgcGVyaW9kX2R1cmF0aW9uID49IHRhcmdldF9lZmZlY3RpdmVfaG91cnM6DQogICAgICAgICAgICAgICAgIyDnm67moIfml7bpl7TngrnlnKjov5nkuKrlkajmnJ/lhoUNCiAgICAgICAgICAgICAgICByZW1haW5pbmdfaG91cnMgPSB0YXJnZXRfZWZmZWN0aXZlX2hvdXJzIC0gY3VtdWxhdGl2ZV9ob3Vycw0KICAgICAgICAgICAgICAgIHRhcmdldF90aW1lX3BvaW50ID0gcGVyaW9kWydzdGFydCddICsgdGltZWRlbHRhKGhvdXJzPXJlbWFpbmluZ19ob3VycykNCiAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICBjdW11bGF0aXZlX2hvdXJzICs9IHBlcmlvZF9kdXJhdGlvbg0KICAgICAgICANCiAgICAgICAgZWZmZWN0aXZlX3RpbWVfcG9pbnRzW3Nsb3Rfc3RyXSA9IHRhcmdldF90aW1lX3BvaW50DQogICAgICAgIA0KICAgICAgICBpZiB0YXJnZXRfdGltZV9wb2ludDoNCiAgICAgICAgICAgIExPR0dFUi5pbmZvKCJTbG90ICVzOiBlZmZlY3RpdmUgJS4zZmgg4oaSIGFjdHVhbCB0aW1lICVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgc2xvdF9zdHIsIHRhcmdldF9lZmZlY3RpdmVfaG91cnMsIHRhcmdldF90aW1lX3BvaW50LnN0cmZ0aW1lKCclSDolTTolUycpKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIkNvdWxkIG5vdCBjYWxjdWxhdGUgZWZmZWN0aXZlIHRpbWUgcG9pbnQgZm9yIHNsb3QgJXMiLCBzbG90X3N0cikNCiAgICANCiAgICByZXR1cm4gZWZmZWN0aXZlX3RpbWVfcG9pbnRzDQoNCg0KZGVmIF9xdWVyeV9pbmZsdXhkYl9yYW5nZV93aXRoX2xvYWRfc3RhdHVzKA0KICAgIGZpZWxkX25hbWU6IHN0ciwNCiAgICBzdGFydF90aW1lOiBkYXRldGltZSwNCiAgICBlbmRfdGltZTogZGF0ZXRpbWUsDQogICAgaW5mbHV4X3VybDogc3RyLA0KICAgIGluZmx1eF9vcmc6IHN0ciwNCiAgICBpbmZsdXhfdG9rZW46IHN0ciwNCiAgICBpbmZsdXhfYnVja2V0OiBzdHIsDQogICAgaW5mbHV4X21lYXN1cmVtZW50OiBzdHIsDQogICAgZmlsdGVyczogT3B0aW9uYWxbRGljdFtzdHIsIHN0cl1dID0gTm9uZSwNCikgLT4gT3B0aW9uYWxbZmxvYXRdOg0KICAgICIiIuafpeivoiBJbmZsdXhEQiDojrflj5bmjIflrprlrZfmrrXlnKjml7bpl7TojIPlm7TlhoXnmoTlubPlnYflgLzvvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iSIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgIExPR0dFUi53YXJuaW5nKCJJbmZsdXhEQiBjbGllbnQgbm90IGF2YWlsYWJsZSwgc2tpcCBxdWVyeSBmb3IgZmllbGQ9JXMiLCBmaWVsZF9uYW1lKQ0KICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgdHJ5Og0KICAgICAgICBjbGllbnQgPSBJbmZsdXhEQkNsaWVudCh1cmw9aW5mbHV4X3VybCwgb3JnPWluZmx1eF9vcmcsIHRva2VuPWluZmx1eF90b2tlbikNCiAgICAgICAgcXVlcnlfYXBpID0gY2xpZW50LnF1ZXJ5X2FwaSgpDQoNCiAgICAgICAgc3RhcnRfcmZjID0gc3RhcnRfdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgZW5kX3JmYyA9IGVuZF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KDQogICAgICAgICMg5p6E5bu66L+H5ruk5p2h5Lu2DQogICAgICAgIHRhZ19maWx0ZXJzID0gIiINCiAgICAgICAgaWYgZmlsdGVyczoNCiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGZpbHRlcnMuaXRlbXMoKToNCiAgICAgICAgICAgICAgICB0YWdfZmlsdGVycyArPSBmJ1xuICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJ7a2V5fSJdID09ICJ7dmFsdWV9IiknDQoNCiAgICAgICAgIyDlr7nkuo7njq/looPmuKnluqbvvIzlj5blhajpg6jpnZ4w5pWw5o2u55qE5Z2H5YC877yb5YW25LuW5a2X5q615LuN6ZyAbG9hZF9zdGF0dXM9Meetm+mAiQ0KICAgICAgICBpZiBmaWVsZF9uYW1lID09ICLnjq/looPmuKnluqYiOg0KICAgICAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtzdGFydF9yZmN9LCBzdG9wOiB7ZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9maWVsZCJdID09ICJ7ZmllbGRfbmFtZX0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfdmFsdWUiXSAhPSAwLjApe3RhZ19maWx0ZXJzfQ0KICB8PiBtZWFuKCkNCiAgfD4geWllbGQobmFtZTogIm1lYW5fbm9uX3plcm8iKQ0KJycnLnN0cmlwKCkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGZsdXggPSBmJycnDQpmcm9tKGJ1Y2tldDogIntpbmZsdXhfYnVja2V0fSIpDQogIHw+IHJhbmdlKHN0YXJ0OiB7c3RhcnRfcmZjfSwgc3RvcDoge2VuZF9yZmN9KQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfbWVhc3VyZW1lbnQiXSA9PSAie2luZmx1eF9tZWFzdXJlbWVudH0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfZmllbGQiXSA9PSAie2ZpZWxkX25hbWV9Iil7dGFnX2ZpbHRlcnN9DQogIHw+IG1lYW4oKQ0KICB8PiB5aWVsZChuYW1lOiAibWVhbl90ZW1wZXJhdHVyZV9kYXRhIikNCicnJy5zdHJpcCgpDQoNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJGbHV45p+l6K+i6K+t5Y+lIChyYW5nZSk6XG4lcyIsIGZsdXgpDQoNCiAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOg0KICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBNaXNzaW5nUGl2b3RGdW5jdGlvbikNCiAgICAgICAgICAgIGZyYW1lcyA9IHF1ZXJ5X2FwaS5xdWVyeV9kYXRhX2ZyYW1lKGZsdXgpDQogICAgICAgIA0KICAgICAgICBpZiBpc2luc3RhbmNlKGZyYW1lcywgbGlzdCk6DQogICAgICAgICAgICBkZiA9IHBkLmNvbmNhdChmcmFtZXMsIGlnbm9yZV9pbmRleD1UcnVlKSBpZiBmcmFtZXMgZWxzZSBwZC5EYXRhRnJhbWUoKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZGYgPSBmcmFtZXMNCg0KICAgICAgICBpZiBkZi5lbXB0eSBvciAnX3ZhbHVlJyBub3QgaW4gZGYuY29sdW1uczoNCiAgICAgICAgICAgIGlmIGZpZWxkX25hbWUgPT0gIueOr+Wig+a4qeW6piI6DQogICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJObyB2YWxpZCByYW5nZSBkYXRhIGZvdW5kIGZvciBmaWVsZD0lcyAobm9uLXplcm8gZGF0YSkiLCBmaWVsZF9uYW1lKQ0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoIk5vIHZhbGlkIHJhbmdlIGRhdGEgZm91bmQgZm9yIGZpZWxkPSVzIiwgZmllbGRfbmFtZSkNCiAgICAgICAgICAgIHJldHVybiBOb25lDQogICAgICAgICAgICANCiAgICAgICAgbWVhbl92YWx1ZSA9IGRmWydfdmFsdWUnXS5pbG9jWzBdDQogICAgICAgIGlmIHBkLmlzbmEobWVhbl92YWx1ZSk6DQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIk1lYW4gdmFsdWUgaXMgTmFOIGZvciBmaWVsZD0lcyIsIGZpZWxkX25hbWUpDQogICAgICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgICAgIHZhbHVlID0gZmxvYXQobWVhbl92YWx1ZSkNCiAgICAgICAgaWYgZmllbGRfbmFtZSA9PSAi546v5aKD5rip5bqmIjoNCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiRmllbGQ9JXMgcmFuZ2VfbWVhbl92YWx1ZT0lLjNmIChub24temVybyBkYXRhKSIsIGZpZWxkX25hbWUsIHZhbHVlKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJGaWVsZD0lcyByYW5nZV9tZWFuX3ZhbHVlPSUuM2YiLCBmaWVsZF9uYW1lLCB2YWx1ZSkNCiAgICAgICAgcmV0dXJuIHZhbHVlDQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICBMT0dHRVIuZXJyb3IoIkVycm9yIHF1ZXJ5aW5nIEluZmx1eERCIHJhbmdlIGZvciBmaWVsZD0lczogJXMiLCBmaWVsZF9uYW1lLCBlKQ0KICAgICAgICByZXR1cm4gTm9uZQ0KICAgIGZpbmFsbHk6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246DQogICAgICAgICAgICBwYXNzDQoNCg0KZGVmIF9xdWVyeV9pbmZsdXhkYl93aXRoX2xvYWRfc3RhdHVzKA0KICAgIGZpZWxkX25hbWU6IHN0ciwNCiAgICB0YXJnZXRfdGltZTogZGF0ZXRpbWUsDQogICAgaW5mbHV4X3VybDogc3RyLA0KICAgIGluZmx1eF9vcmc6IHN0ciwNCiAgICBpbmZsdXhfdG9rZW46IHN0ciwNCiAgICBpbmZsdXhfYnVja2V0OiBzdHIsDQogICAgaW5mbHV4X21lYXN1cmVtZW50OiBzdHIsDQogICAgZmlsdGVyczogT3B0aW9uYWxbRGljdFtzdHIsIHN0cl1dID0gTm9uZSwNCikgLT4gT3B0aW9uYWxbZmxvYXRdOg0KICAgICIiIuafpeivoiBJbmZsdXhEQiDojrflj5bmjIflrprlrZfmrrXlnKjmjIflrprml7bpl7TngrnnmoTnnqzml7blgLzvvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iSIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgIExPR0dFUi53YXJuaW5nKCJJbmZsdXhEQiBjbGllbnQgbm90IGF2YWlsYWJsZSwgc2tpcCBxdWVyeSBmb3IgZmllbGQ9JXMiLCBmaWVsZF9uYW1lKQ0KICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgdHJ5Og0KICAgICAgICBjbGllbnQgPSBJbmZsdXhEQkNsaWVudCh1cmw9aW5mbHV4X3VybCwgb3JnPWluZmx1eF9vcmcsIHRva2VuPWluZmx1eF90b2tlbikNCiAgICAgICAgcXVlcnlfYXBpID0gY2xpZW50LnF1ZXJ5X2FwaSgpDQoNCiAgICAgICAgTE9HR0VSLmRlYnVnKA0KICAgICAgICAgICAgIlF1ZXJ5aW5nIGZpZWxkPSVzIG1lYXN1cmVtZW50PSVzIHRhcmdldF90aW1lPSVzIGZpbHRlcnM9JXMgKHdpdGggbG9hZF9zdGF0dXM9MSkiLA0KICAgICAgICAgICAgZmllbGRfbmFtZSwNCiAgICAgICAgICAgIGluZmx1eF9tZWFzdXJlbWVudCwNCiAgICAgICAgICAgIHRhcmdldF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKSwNCiAgICAgICAgICAgIGZpbHRlcnMgb3Ige30sDQogICAgICAgICkNCg0KICAgICAgICAjIOafpeivoumAu+i+ke+8muafpeivouebruagh+aXtumXtOeCuemZhOi/keeahOaVsOaNru+8jOS9huWPquimgSBsb2FkX3N0YXR1cyA9IDEg55qE5pWw5o2uDQogICAgICAgICMg5L2/55So5LiA5Liq5pe26Ze056qX5Y+j5p2l5p+l5om+5pyA5o6l6L+R55qE5pyJ5pWI5pWw5o2u54K5DQogICAgICAgIHdpbmRvd19taW51dGVzID0gMTAgICMg5YmN5ZCOMTDliIbpkp/nmoTnqpflj6MNCiAgICAgICAgDQogICAgICAgIHF1ZXJ5X3N0YXJ0ID0gdGFyZ2V0X3RpbWUgLSB0aW1lZGVsdGEobWludXRlcz13aW5kb3dfbWludXRlcykNCiAgICAgICAgcXVlcnlfZW5kID0gdGFyZ2V0X3RpbWUgKyB0aW1lZGVsdGEobWludXRlcz13aW5kb3dfbWludXRlcykNCiAgICAgICAgDQogICAgICAgIHF1ZXJ5X3N0YXJ0X3JmYyA9IHF1ZXJ5X3N0YXJ0LnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICBxdWVyeV9lbmRfcmZjID0gcXVlcnlfZW5kLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KDQogICAgICAgICMg5p6E5bu66L+H5ruk5p2h5Lu2DQogICAgICAgIHRhZ19maWx0ZXJzID0gIiINCiAgICAgICAgaWYgZmlsdGVyczoNCiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGZpbHRlcnMuaXRlbXMoKToNCiAgICAgICAgICAgICAgICB0YWdfZmlsdGVycyArPSBmJ1xuICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJ7a2V5fSJdID09ICJ7dmFsdWV9IiknDQoNCiAgICAgICAgIyDmn6Xor6LmuKnluqbmlbDmja7vvIjkuI3pnIDopoFsb2FkX3N0YXR1c+etm+mAie+8jOWboOS4uuW3sue7j+WfuuS6juacieaViOaXtumXtOeCueafpeivou+8iQ0KICAgICAgICBmbHV4ID0gZicnJw0KZnJvbShidWNrZXQ6ICJ7aW5mbHV4X2J1Y2tldH0iKQ0KICB8PiByYW5nZShzdGFydDoge3F1ZXJ5X3N0YXJ0X3JmY30sIHN0b3A6IHtxdWVyeV9lbmRfcmZjfSkNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX21lYXN1cmVtZW50Il0gPT0gIntpbmZsdXhfbWVhc3VyZW1lbnR9IikNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX2ZpZWxkIl0gPT0gIntmaWVsZF9uYW1lfSIpe3RhZ19maWx0ZXJzfQ0KICB8PiBzb3J0KGNvbHVtbnM6IFsiX3RpbWUiXSkNCiAgfD4gbGFzdCgpDQogIHw+IHlpZWxkKG5hbWU6ICJpbnN0YW50YW5lb3VzX2F0X2VmZmVjdGl2ZV90aW1lIikNCicnJy5zdHJpcCgpDQoNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJGbHV45p+l6K+i6K+t5Y+lOlxuJXMiLCBmbHV4KQ0KDQogICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToNCiAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgTWlzc2luZ1Bpdm90RnVuY3Rpb24pDQogICAgICAgICAgICBmcmFtZXMgPSBxdWVyeV9hcGkucXVlcnlfZGF0YV9mcmFtZShmbHV4KQ0KICAgICAgICANCiAgICAgICAgaWYgaXNpbnN0YW5jZShmcmFtZXMsIGxpc3QpOg0KICAgICAgICAgICAgZGYgPSBwZC5jb25jYXQoZnJhbWVzLCBpZ25vcmVfaW5kZXg9VHJ1ZSkgaWYgZnJhbWVzIGVsc2UgcGQuRGF0YUZyYW1lKCkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGRmID0gZnJhbWVzDQoNCiAgICAgICAgIyDojrflj5bnnqzml7blgLzvvIjmnIDov5HnmoTkuIDkuKrmnInmlYjmlbDmja7ngrnvvIkNCiAgICAgICAgaWYgZGYuZW1wdHkgb3IgJ192YWx1ZScgbm90IGluIGRmLmNvbHVtbnM6DQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIk5vIHZhbGlkIGRhdGEgZm91bmQgZm9yIGZpZWxkPSVzIGF0IGVmZmVjdGl2ZSB0aW1lIHBvaW50IiwgZmllbGRfbmFtZSkNCiAgICAgICAgICAgIHJldHVybiBOb25lDQogICAgICAgICAgICANCiAgICAgICAgIyDlj5bnrKzkuIDooYznmoTlgLzvvIjlm6DkuLrmn6Xor6Llt7Lnu4/mjpLluo/lubblj5bkuoZsYXN0KCnvvIkNCiAgICAgICAgaW5zdGFudF92YWx1ZSA9IGRmWydfdmFsdWUnXS5pbG9jWzBdDQogICAgICAgIGlmIHBkLmlzbmEoaW5zdGFudF92YWx1ZSk6DQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIkluc3RhbnRhbmVvdXMgdmFsdWUgaXMgTmFOIGZvciBmaWVsZD0lcyIsIGZpZWxkX25hbWUpDQogICAgICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgICAgIHZhbHVlID0gZmxvYXQoaW5zdGFudF92YWx1ZSkNCiAgICAgICAgDQogICAgICAgICMg5aaC5p6c5pyJ5pe26Ze05L+h5oGv77yM6K6w5b2V5a6e6ZmF55qE5pWw5o2u5pe26Ze054K5DQogICAgICAgIGlmICdfdGltZScgaW4gZGYuY29sdW1uczoNCiAgICAgICAgICAgIGFjdHVhbF90aW1lID0gZGZbJ190aW1lJ10uaWxvY1swXQ0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJGaWVsZD0lcyBpbnN0YW50YW5lb3VzX3ZhbHVlPSUuM2YgYWN0dWFsX3RpbWU9JXMgKGF0IGVmZmVjdGl2ZSB0aW1lKSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSwgdmFsdWUsIGFjdHVhbF90aW1lKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJGaWVsZD0lcyBpbnN0YW50YW5lb3VzX3ZhbHVlPSUuM2YgKGF0IGVmZmVjdGl2ZSB0aW1lKSIsIGZpZWxkX25hbWUsIHZhbHVlKQ0KICAgICAgICAgICAgDQogICAgICAgIHJldHVybiB2YWx1ZQ0KICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgTE9HR0VSLmVycm9yKCJFcnJvciBxdWVyeWluZyBJbmZsdXhEQiBmb3IgZmllbGQ9JXM6ICVzIiwgZmllbGRfbmFtZSwgZSkNCiAgICAgICAgcmV0dXJuIE5vbmUNCiAgICBmaW5hbGx5Og0KICAgICAgICB0cnk6DQogICAgICAgICAgICBjbGllbnQuY2xvc2UoKQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICAgICAgICAgcGFzcw0KDQoNCmRlZiBfbG9hZF90ZW1wZXJhdHVyZV9kYXRhX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgdGltZV9zbG90czogTGlzdFtzdHJdLA0KICAgIHNlY3Rpb25zOiBMaXN0W0RpY3Rbc3RyLCBBbnldXSwNCiAgICBzdGFydF90aW1lOiBPcHRpb25hbFtkYXRldGltZV0sDQogICAgZW5kX3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSwNCikgLT4gRGljdFtzdHIsIERpY3Rbc3RyLCBmbG9hdF1dOg0KICAgICIiIuS7jiBJbmZsdXhEQiDmn6Xor6LmiYDmnInmtYvor5Xpg6jkvY3lnKjlkITml7bpl7TngrnnmoTnnqzml7bmuKnluqblgLzvvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iSIiIg0KICAgIGlmIG5vdCBzdGFydF90aW1lIG9yIG5vdCBlbmRfdGltZToNCiAgICAgICAgTE9HR0VSLmluZm8oIlNraXAgZGF0YSBxdWVyeTogbWlzc2luZyBzdGFydC9lbmQgKCVzLCAlcykiLCBzdGFydF90aW1lLCBlbmRfdGltZSkNCiAgICAgICAgcmV0dXJuIHt9DQogICAgDQogICAgaW5mbHV4X2NvbmZpZyA9IF9nZXRfaW5mbHV4X2NvbmZpZygpDQogICAgDQogICAgaWYgbm90IGFsbChbaW5mbHV4X2NvbmZpZ1sndXJsJ10sIGluZmx1eF9jb25maWdbJ29yZyddLCBpbmZsdXhfY29uZmlnWyd0b2tlbiddLCANCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWydidWNrZXQnXSwgaW5mbHV4X2NvbmZpZ1snbWVhc3VyZW1lbnQnXV0pOg0KICAgICAgICBMT0dHRVIud2FybmluZygNCiAgICAgICAgICAgICJTa2lwIGRhdGEgcXVlcnk6IG1pc3NpbmcgSW5mbHV4IGNvbmZpZyB1cmw9JXMgYnVja2V0PSVzIG1lYXN1cmVtZW50PSVzIiwNCiAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ3VybCddIG9yICI8ZW1wdHk+IiwNCiAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddIG9yICI8ZW1wdHk+IiwNCiAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ21lYXN1cmVtZW50J10gb3IgIjxlbXB0eT4iLA0KICAgICAgICApDQogICAgICAgIHJldHVybiB7fQ0KICAgIA0KICAgICMg6K6h566X5oC75pe26ZW/77yI5bCP5pe277yJDQogICAgdG90YWxfZHVyYXRpb24gPSAoZW5kX3RpbWUgLSBzdGFydF90aW1lKS50b3RhbF9zZWNvbmRzKCkgLyAzNjAwLjANCiAgICBMT0dHRVIuaW5mbygNCiAgICAgICAgIkZldGNoIGluc3RhbnRhbmVvdXMgdGVtcGVyYXR1cmUgZGF0YSAobG9hZF9zdGF0dXM9MSkgd2luZG93PSVz4oaSJXMgdG90YWxfaG91cnM9JS4zZiB0aW1lX3BvaW50cz0lcyIsDQogICAgICAgIHN0YXJ0X3RpbWUuaXNvZm9ybWF0KCksDQogICAgICAgIGVuZF90aW1lLmlzb2Zvcm1hdCgpLA0KICAgICAgICB0b3RhbF9kdXJhdGlvbiwNCiAgICAgICAgIiwiLmpvaW4odGltZV9zbG90cyksDQogICAgKQ0KICAgIA0KICAgICMg5pS26ZuG5omA5pyJ6ZyA6KaB5p+l6K+i55qE5a2X5q61DQogICAgcXVlcnlfdGFyZ2V0czogTGlzdFt0dXBsZVtzdHIsIERpY3Rbc3RyLCBBbnldXV0gPSBbXQ0KICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOg0KICAgICAgICBlbnRyaWVzID0gc2VjdGlvbi5nZXQoImVudHJpZXMiKSBvciBbXQ0KICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoNCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZW50cnksIGRpY3QpOg0KICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSBlbnRyeS5nZXQoImZpZWxkIiwgIiIpDQogICAgICAgICAgICAgICAgaWYgZmllbGRfbmFtZToNCiAgICAgICAgICAgICAgICAgICAgcXVlcnlfdGFyZ2V0cy5hcHBlbmQoKGZpZWxkX25hbWUsIGVudHJ5KSkNCg0KICAgIGlmIG5vdCBxdWVyeV90YXJnZXRzOg0KICAgICAgICByZXR1cm4ge30NCiAgICANCiAgICAjIOiuoeeul+WfuuS6juacieaViOi/kOihjOaXtumXtOe0r+iuoeeahOecn+WunuaXtumXtOeCuQ0KICAgIExPR0dFUi5pbmZvKCI9PT0g5byA5aeL6K6h566X5pyJ5pWI5pe26Ze054K5ID09PSIpDQogICAgZWZmZWN0aXZlX3RpbWVfcG9pbnRzID0gX2NhbGN1bGF0ZV9lZmZlY3RpdmVfdGltZV9wb2ludHMoDQogICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCB0aW1lX3Nsb3RzLCBpbmZsdXhfY29uZmlnDQogICAgKQ0KICAgIA0KICAgICMg5Li65q+P5Liq5pyJ5pWI5pe26Ze054K55p+l6K+i5rip5bqm5pWw5o2uDQogICAgdGVtcGVyYXR1cmVfZGF0YTogRGljdFtzdHIsIERpY3Rbc3RyLCBmbG9hdF1dID0ge30NCiAgICANCiAgICBmb3IgaWR4LCBzbG90X3N0ciBpbiBlbnVtZXJhdGUodGltZV9zbG90cyk6DQogICAgICAgIHRhcmdldF90aW1lX3BvaW50ID0gZWZmZWN0aXZlX3RpbWVfcG9pbnRzLmdldChzbG90X3N0cikNCiAgICAgICAgDQogICAgICAgIGlmIHRhcmdldF90aW1lX3BvaW50IGlzIE5vbmU6DQogICAgICAgICAgICBMT0dHRVIud2FybmluZygiTm8gZWZmZWN0aXZlIHRpbWUgcG9pbnQgY2FsY3VsYXRlZCBmb3Igc2xvdCAlcywgc2tpcHBpbmciLCBzbG90X3N0cikNCiAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgIA0KICAgICAgICBMT0dHRVIuZGVidWcoIlByb2Nlc3Npbmcgc2xvdCAlcyBhdCBlZmZlY3RpdmUgdGltZSBwb2ludCAlcyIsIA0KICAgICAgICAgICAgICAgICAgICBzbG90X3N0ciwgdGFyZ2V0X3RpbWVfcG9pbnQuc3RyZnRpbWUoJyVZLSVtLSVkICVIOiVNOiVTJykpDQogICAgICAgIA0KICAgICAgICBmb3IgZmllbGRfbmFtZSwgZW50cnkgaW4gcXVlcnlfdGFyZ2V0czoNCiAgICAgICAgICAgIHJlc3VsdF9rZXkgPSBlbnRyeS5nZXQoInJlc3VsdF9rZXkiKSBvciBmaWVsZF9uYW1lDQogICAgICAgICAgICBpZiBub3QgcmVzdWx0X2tleToNCiAgICAgICAgICAgICAgICByZXN1bHRfa2V5ID0gZmllbGRfbmFtZQ0KICAgICAgICAgICAgZW50cnlfZmlsdGVycyA9IGVudHJ5LmdldCgiZmlsdGVycyIpIGlmIGlzaW5zdGFuY2UoZW50cnksIGRpY3QpIGVsc2UgTm9uZQ0KICAgICAgICAgICAgaWYgcmVzdWx0X2tleSBub3QgaW4gdGVtcGVyYXR1cmVfZGF0YToNCiAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZV9kYXRhW3Jlc3VsdF9rZXldID0ge30NCg0KICAgICAgICAgICAgIyDkvb/nlKjntKLlvJXkvZzkuLprZXnvvIzlm6DkuLrlj6/og73mnInph43lpI3nmoTml7bpl7TliLvluqYNCiAgICAgICAgICAgIHNsb3Rfa2V5ID0gZiJ7aWR4fV97c2xvdF9zdHJ9IiAgIyDkvb/nlKjntKLlvJUr5pe26Ze05Yi75bqm5L2c5Li65ZSv5LiAa2V5DQoNCiAgICAgICAgICAgICMg5p+l6K+i556s5pe25YC877yI5Zyo5pyJ5pWI5pe26Ze054K577yJDQogICAgICAgICAgICB2YWx1ZSA9IF9xdWVyeV9pbmZsdXhkYl93aXRoX2xvYWRfc3RhdHVzKA0KICAgICAgICAgICAgICAgIGZpZWxkX25hbWUsDQogICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQsDQogICAgICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1sndXJsJ10sDQogICAgICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1snb3JnJ10sDQogICAgICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1sndG9rZW4nXSwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWydidWNrZXQnXSwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddLA0KICAgICAgICAgICAgICAgIGZpbHRlcnM9ZW50cnlfZmlsdGVycyBpZiBlbnRyeV9maWx0ZXJzIGVsc2UgTm9uZSwNCiAgICAgICAgICAgICkNCg0KICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6DQogICAgICAgICAgICAgICAgdGVtcGVyYXR1cmVfZGF0YVtyZXN1bHRfa2V5XVtzbG90X2tleV0gPSB2YWx1ZQ0KICAgICAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygNCiAgICAgICAgICAgICAgICAgICAgIlNsb3Q9JXMgZmllbGQ9JXMgdmFsdWU9JS4zZiBhdCBlZmZlY3RpdmVfdGltZT0lcyIsDQogICAgICAgICAgICAgICAgICAgIHNsb3Rfa2V5LA0KICAgICAgICAgICAgICAgICAgICByZXN1bHRfa2V5LA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSwNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQuc3RyZnRpbWUoJyVIOiVNOiVTJykNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygNCiAgICAgICAgICAgICAgICAgICAgIlNsb3Q9JXMgZmllbGQ9JXMgbm9fZGF0YSBhdCBlZmZlY3RpdmVfdGltZT0lcyIsDQogICAgICAgICAgICAgICAgICAgIHNsb3Rfa2V5LA0KICAgICAgICAgICAgICAgICAgICByZXN1bHRfa2V5LA0KICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdGltZV9wb2ludC5zdHJmdGltZSgnJUg6JU06JVMnKQ0KICAgICAgICAgICAgICAgICkNCg0KICAgIHJldHVybiB0ZW1wZXJhdHVyZV9kYXRhDQoNCg0KZGVmIF9idWlsZF9jZWxsc193aXRoX2xvYWRfc3RhdHVzKA0KICAgIHRpbWVfc2xvdHM6IExpc3Rbc3RyXSwNCiAgICBzZWN0aW9uczogTGlzdFtEaWN0W3N0ciwgQW55XV0sDQogICAgbW90b3Jfc3BlZWQ6IHN0ciwNCiAgICBzdGFydF90aW1lOiBPcHRpb25hbFtkYXRldGltZV0sDQogICAgZW5kX3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSwNCiAgICB0ZW1wZXJhdHVyZV9kYXRhOiBEaWN0W3N0ciwgRGljdFtzdHIsIGZsb2F0XV0sDQogICAgdXNlX2RlZmF1bHRzOiBib29sID0gRmFsc2UsDQopIC0+IExpc3RbRGljdFtzdHIsIEFueV1dOg0KICAgICIiIuaehOW7uuWNleWFg+agvOaVsOaNru+8iOWfuuS6jiBsb2FkX3N0YXR1cyA9IDEg55qE5pyJ5pWI5pWw5o2u77yJLSDkuI7ljp/lp4vohJrmnKznu5PmnoTlrozlhajkuIDoh7QiIiINCiAgICBjZWxsczogTGlzdFtEaWN0W3N0ciwgQW55XV0gPSBbXQ0KDQogICAgZGVmIGFkZF9jZWxsKHJvdzogaW50LCBjb2w6IGludCwgdmFsdWU6IHN0ciA9ICIiLCByb3dzcGFuOiBpbnQgPSAxLCBjb2xzcGFuOiBpbnQgPSAxKSAtPiBOb25lOg0KICAgICAgICBwYXlsb2FkOiBEaWN0W3N0ciwgQW55XSA9IHsicm93Ijogcm93LCAiY29sIjogY29sLCAidmFsdWUiOiB2YWx1ZX0NCiAgICAgICAgaWYgcm93c3BhbiA+IDE6DQogICAgICAgICAgICBwYXlsb2FkWyJyb3dzcGFuIl0gPSByb3dzcGFuDQogICAgICAgIGlmIGNvbHNwYW4gPiAxOg0KICAgICAgICAgICAgcGF5bG9hZFsiY29sc3BhbiJdID0gY29sc3Bhbg0KICAgICAgICBjZWxscy5hcHBlbmQocGF5bG9hZCkNCg0KICAgICMg5qih5p2/5bem5L6n5qCH6aKY5YiX5bey57uP5Y676Zmk77yM6L+Z6YeM5LuF55Sf5oiQ57qv5pWw5o2u5Yy677yM5LuOICgwLDApIOW8gOWni+Whq+WFpeaVsOWAvOOAgg0KICAgICMgY3VycmVudF9yb3cg5a+55bqU5qih5p2/5Lit55qE5a6e6ZmF5pWw5o2u6KGM57Si5byV44CCDQogICAgY3VycmVudF9yb3cgPSAwDQogICAgZm9yIHNlY3Rpb24gaW4gc2VjdGlvbnM6DQogICAgICAgIGVudHJpZXMgPSBzZWN0aW9uLmdldCgiZW50cmllcyIpIG9yIFtdDQogICAgICAgIGlmIG5vdCBlbnRyaWVzOg0KICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgIyDmr4/kuKrmtYvor5Xpg6jkvY3lrZDpobnlr7nlupTmqKHmnb/kuK3nmoTkuIDooYwNCiAgICAgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6DQogICAgICAgICAgICAjIOaUr+aMgeaWsOagvOW8j++8iOW4piBmaWVsZCDmmKDlsITvvInlkozml6fmoLzlvI/vvIjnuq/lrZfnrKbkuLLvvIkNCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZW50cnksIGRpY3QpOg0KICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSBlbnRyeS5nZXQoImZpZWxkIiwgIiIpDQogICAgICAgICAgICAgICAgZW50cnlfZmlsdGVycyA9IGVudHJ5LmdldCgiZmlsdGVycyIpDQogICAgICAgICAgICAgICAgZW50cnlfa2V5ID0gZW50cnkuZ2V0KCJyZXN1bHRfa2V5Iikgb3IgZmllbGRfbmFtZQ0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gIiINCiAgICAgICAgICAgICAgICBlbnRyeV9maWx0ZXJzID0gTm9uZQ0KICAgICAgICAgICAgICAgIGVudHJ5X2tleSA9ICIiDQoNCiAgICAgICAgICAgICMg5LuF6L6T5Ye65pWw5YC85YiX77ya5YiX57Si5byV55u05o6l5a+55bqU5pe26Ze05q61DQogICAgICAgICAgICAjIOW8uuWItuWhq+WFheaJgOacieWIl++8jOS8mOWFiOS9v+eUqOafpeivouaVsOaNru+8jOWQpuWImeS9v+eUqOm7mOiupOWAvA0KICAgICAgICAgICAgaWYgZmllbGRfbmFtZToNCiAgICAgICAgICAgICAgICB0YXJnZXRfa2V5ID0gZW50cnlfa2V5IG9yIGZpZWxkX25hbWUNCg0KICAgICAgICAgICAgICAgICMg6YGN5Y6G5omA5pyJ5pe26Ze05q615YiX77yM56Gu5L+d5q+P5LiA5YiX6YO95pyJ5pWw5o2uDQogICAgICAgICAgICAgICAgZm9yIGNvbF9pZHgsIHNsb3QgaW4gZW51bWVyYXRlKHRpbWVfc2xvdHMpOg0KICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE5vbmUNCg0KICAgICAgICAgICAgICAgICAgICAjIOS8mOWFiOS9v+eUqOafpeivouWIsOeahOaVsOaNrg0KICAgICAgICAgICAgICAgICAgICBpZiB0ZW1wZXJhdHVyZV9kYXRhOg0KICAgICAgICAgICAgICAgICAgICAgICAgc2xvdF9kYXRhID0gdGVtcGVyYXR1cmVfZGF0YS5nZXQodGFyZ2V0X2tleSwge30pDQogICAgICAgICAgICAgICAgICAgICAgICBpZiBzbG90X2RhdGE6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdF9rZXkgPSBmIntjb2xfaWR4fV97c2xvdH0iDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzbG90X2RhdGEuZ2V0KHNsb3Rfa2V5KQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmUgYW5kIHVzZV9kZWZhdWx0czoNCiAgICAgICAgICAgICAgICAgICAgICAgICMg5L2/55So5Z+656GA6buY6K6k5YC8ICsg5pe26Ze05q615YGP56e777yI5q+P5Liq5pe26Ze05q615aKe5YqgMC4x5bqm77yJDQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X2Jhc2VfdmFsdWUgPSAyNS4wICAjIOeugOWMlueahOm7mOiupOWAvA0KICAgICAgICAgICAgICAgICAgICAgICAgdGltZV9vZmZzZXQgPSBjb2xfaWR4ICogMC4xDQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRfYmFzZV92YWx1ZSArIHRpbWVfb2Zmc2V0DQoNCiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3N0ciA9ICIiDQogICAgICAgICAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgICAgICAgICAjIOagvOW8j+WMluS4uuWtl+espuS4su+8iOS/neeVmTHkvY3lsI/mlbDvvIkNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3N0ciA9IGYie3ZhbHVlOi4xZn0iDQoNCiAgICAgICAgICAgICAgICAgICAgYWRkX2NlbGwoY3VycmVudF9yb3csIGNvbF9pZHgsIHZhbHVlX3N0cikNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgIyDlpoLmnpzmsqHmnInlrZfmrrXlkI3vvIzloavlhYXnqbrlrZfnrKbkuLINCiAgICAgICAgICAgICAgICBmb3IgY29sX2lkeCBpbiByYW5nZShsZW4odGltZV9zbG90cykpOg0KICAgICAgICAgICAgICAgICAgICBhZGRfY2VsbChjdXJyZW50X3JvdywgY29sX2lkeCwgIiIpDQogICAgICAgICAgICBjdXJyZW50X3JvdyArPSAxDQoNCiAgICByZXR1cm4gY2VsbHMNCg0KDQpkZWYgYnVpbGRfdGVtcGVyYXR1cmVfdGFibGVfd2l0aF9sb2FkX3N0YXR1cyhfOiBEaWN0W3N0ciwgQW55XSkgLT4gRGljdFtzdHIsIEFueV06DQogICAgIiIi5p6E5bu65rip5bqm6KGo5qC85pWw5o2u77yI5LuF5L2/55SoIGxvYWRfc3RhdHVzID0gMSDnmoTmnInmlYjmlbDmja7vvIkiIiINCiAgICBfc2V0dXBfbG9nZ2luZygpDQogICAgDQogICAgdG9rZW4gPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfVE9LRU4iLCAic2NyaXB0VGFibGUxIikNCiAgICByb3dfb2Zmc2V0ID0gaW50KG9zLmVudmlyb24uZ2V0KCJUQUJMRV9TVEFSVF9ST1ciLCAiMCIpIG9yIDApDQogICAgY29sX29mZnNldCA9IGludChvcy5lbnZpcm9uLmdldCgiVEFCTEVfU1RBUlRfQ09MIiwgIjAiKSBvciAwKQ0KICAgIG1vdG9yX3NwZWVkID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX01PVE9SX1NQRUVEIiwgIjk4MFJQTSIpDQogICAgDQogICAgIyDop6PmnpDlrp7pqozml7bpl7TojIPlm7QNCiAgICBzdGFydF90aW1lLCBlbmRfdGltZSA9IF9wYXJzZV9leHBlcmltZW50X3RpbWVzKCkNCiAgICANCiAgICB0aW1lX3Nsb3RzID0gX3RpbWVfc2xvdHMoKQ0KICAgIHNlY3Rpb25zID0gX2RlZmF1bHRfc2VjdGlvbnMoKQ0KICAgIA0KICAgICMg5p+l6K+i5rip5bqm5pWw5o2u77yI5LuF5b2TIGxvYWRfc3RhdHVzID0gMSDml7bvvIkNCiAgICB0ZW1wZXJhdHVyZV9kYXRhID0gX2xvYWRfdGVtcGVyYXR1cmVfZGF0YV93aXRoX2xvYWRfc3RhdHVzKHRpbWVfc2xvdHMsIHNlY3Rpb25zLCBzdGFydF90aW1lLCBlbmRfdGltZSkNCiAgICANCiAgICAjIOWni+e7iOemgeatoum7mOiupOaVsOaNru+8jOS/neivgeafpeivouS4jeWIsOWAvOaXtuS/neaMgeepuueZvQ0KICAgIHVzZV9kZWZhdWx0cyA9IEZhbHNlDQogICAgDQogICAgY2VsbHMgPSBfYnVpbGRfY2VsbHNfd2l0aF9sb2FkX3N0YXR1cygNCiAgICAgICAgdGltZV9zbG90cywgDQogICAgICAgIHNlY3Rpb25zLCANCiAgICAgICAgbW90b3Jfc3BlZWQsIA0KICAgICAgICBzdGFydF90aW1lLCANCiAgICAgICAgZW5kX3RpbWUsIA0KICAgICAgICB0ZW1wZXJhdHVyZV9kYXRhLA0KICAgICAgICB1c2VfZGVmYXVsdHM9dXNlX2RlZmF1bHRzDQogICAgKQ0KICAgIA0KICAgICMg5bqU55So6KGM5YGP56e7DQogICAgZm9yIGNlbGwgaW4gY2VsbHM6DQogICAgICAgIGNlbGxbInJvdyJdICs9IDQNCiAgICANCiAgICAjIOa3u+WKoOWunumqjOaXtumXtOS/oeaBr++8iOS4juWOn+Wni+iEmuacrOWujOWFqOS4gOiHtOeahOmAu+i+ke+8iQ0KICAgIHN0YXJ0X3RpbWVfcm93ID0gMQ0KICAgIHN0YXJ0X3RpbWVfdmFsdWVfY29sID0gMQ0KICAgIGVuZF90aW1lX3ZhbHVlX2NvbCA9IDMNCiAgICANCiAgICAjIOiOt+WPluWOn+Wni+aXtumXtOWtl+espuS4sui/m+ihjOWkhOeQhu+8iOS4juWOn+Wni+iEmuacrOS/neaMgeS4gOiHtO+8iQ0KICAgIHN0YXJ0X3N0ciA9IG9zLmVudmlyb24uZ2V0KCJFWFBFUklNRU5UX1NUQVJUIiwgIiIpLnN0cmlwKCkNCiAgICBpZiBzdGFydF9zdHIgYW5kIHN0YXJ0X3RpbWU6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgICMg5L2/55So5LiO5Y6f5aeL6ISa5pys55u45ZCM55qE5pe26Ze05aSE55CG6YC76L6RDQogICAgICAgICAgICB1dGNfYXdhcmVfZHQgPSBkYXRldGltZS5zdHJwdGltZShzdGFydF9zdHIsICIlWS0lbS0lZFQlSDolTTolUyV6IikNCiAgICAgICAgICAgIGxvY2FsX2R0MSA9IHV0Y19hd2FyZV9kdC5hc3RpbWV6b25lKHR6PU5vbmUpDQogICAgICAgICAgICBsb2NhbF9kdDIgPSB1dGNfYXdhcmVfZHQuYXN0aW1lem9uZSh0ej1Ob25lKSArIHRpbWVkZWx0YShob3Vycz0zLjUpDQogICAgICAgICAgICBzdGFydF90aW1lX3ZhbHVlID0gbG9jYWxfZHQxLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpDQogICAgICAgICAgICBlbmRfdGltZV92YWx1ZSA9IGxvY2FsX2R0Mi5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKQ0KICAgICAgICAgICAgY2VsbHMuYXBwZW5kKHsicm93Ijogc3RhcnRfdGltZV9yb3csICJjb2wiOiBzdGFydF90aW1lX3ZhbHVlX2NvbCwgInZhbHVlIjogc3RhcnRfdGltZV92YWx1ZX0pDQogICAgICAgICAgICBjZWxscy5hcHBlbmQoeyJyb3ciOiBzdGFydF90aW1lX3JvdywgImNvbCI6IGVuZF90aW1lX3ZhbHVlX2NvbCwgInZhbHVlIjogZW5kX3RpbWVfdmFsdWV9KQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgICAgICBMT0dHRVIud2FybmluZygiRmFpbGVkIHRvIHByb2Nlc3MgZXhwZXJpbWVudCB0aW1lIHN0cmluZ3M6ICVzIiwgZSkNCiAgICANCiAgICAjIOafpeivoueOr+Wig+a4qeW6pu+8iOS4juWOn+Wni+iEmuacrOWujOWFqOS4gOiHtOeahOmAu+i+ke+8iQ0KICAgIGluZmx1eF91cmwgPSBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX1VSTCIsICIiKS5zdHJpcCgpDQogICAgaW5mbHV4X29yZyA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfT1JHIiwgIiIpLnN0cmlwKCkNCiAgICBpbmZsdXhfdG9rZW4gPSBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX1RPS0VOIiwgIiIpLnN0cmlwKCkNCiAgICBpbmZsdXhfYnVja2V0ID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9CVUNLRVQiLCAiUENNIikuc3RyaXAoKQ0KICAgIGluZmx1eF9tZWFzdXJlbWVudCA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfTUVBU1VSRU1FTlQiLCAiUENNX01lYXN1cmVtZW50Iikuc3RyaXAoKQ0KICAgIA0KICAgIGlmIHN0YXJ0X3RpbWUgYW5kIGVuZF90aW1lOg0KICAgICAgICAjIOWvueS6jueOr+Wig+a4qeW6pu+8jOS9v+eUqOaXtumXtOiMg+WbtOafpeivou+8iOS4juWOn+Wni+iEmuacrOmAu+i+keS4gOiHtO+8iQ0KICAgICAgICB2YWx1ZSA9IF9xdWVyeV9pbmZsdXhkYl9yYW5nZV93aXRoX2xvYWRfc3RhdHVzKA0KICAgICAgICAgICAgIueOr+Wig+a4qeW6piIsDQogICAgICAgICAgICBzdGFydF90aW1lLA0KICAgICAgICAgICAgZW5kX3RpbWUsDQogICAgICAgICAgICBpbmZsdXhfdXJsLA0KICAgICAgICAgICAgaW5mbHV4X29yZywNCiAgICAgICAgICAgIGluZmx1eF90b2tlbiwNCiAgICAgICAgICAgIGluZmx1eF9idWNrZXQsDQogICAgICAgICAgICBpbmZsdXhfbWVhc3VyZW1lbnQsDQogICAgICAgICAgICBmaWx0ZXJzPXsiZGF0YV90eXBlIjogIkxTREFRIn0sDQogICAgICAgICkNCiAgICAgICAgIyDnoa7kv512YWx1ZeS4jeaYr05vbmXvvIzpgb/lhY1Xb3JkIENPTeaTjeS9nOW8guW4uO+8iOS4juWOn+Wni+iEmuacrOS4gOiHtO+8iQ0KICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToNCiAgICAgICAgICAgIGNlbGxzLmFwcGVuZCh7InJvdyI6IDAsICJjb2wiOiAxLCAidmFsdWUiOiBmInt2YWx1ZTouMWZ9In0pDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBjZWxscy5hcHBlbmQoeyJyb3ciOiAwLCAiY29sIjogMSwgInZhbHVlIjogIiJ9KQ0KICAgIA0KICAgIExPR0dFUi5pbmZvKA0KICAgICAgICAiVGVtcGVyYXR1cmUgdGFibGUgYnVpbHQgd2l0aCBsb2FkX3N0YXR1cz0xIGZpbHRlcjogdG9rZW49JXMgY2VsbHM9JWQgdGltZV9zbG90cz0lcyIsDQogICAgICAgIHRva2VuLA0KICAgICAgICBsZW4oY2VsbHMpLA0KICAgICAgICAiLCIuam9pbih0aW1lX3Nsb3RzKSwNCiAgICApDQogICAgDQogICAgcmV0dXJuIHsNCiAgICAgICAgInRva2VuIjogdG9rZW4sDQogICAgICAgICJzdGFydFJvdyI6IHJvd19vZmZzZXQsDQogICAgICAgICJzdGFydENvbCI6IGNvbF9vZmZzZXQsDQogICAgICAgICJjZWxscyI6IGNlbGxzLA0KICAgIH0NCg0KDQpkZWYgX2xvYWRfcGF5bG9hZCgpIC0+IERpY3Rbc3RyLCBBbnldOg0KICAgICIiIuS7juagh+WHhui+k+WFpeaIlueOr+Wig+WPmOmHj+WKoOi9vXBheWxvYWTmlbDmja4iIiINCiAgICB0cnk6DQogICAgICAgICMg5bCd6K+V5LuO5qCH5YeG6L6T5YWl6K+75Y+WSlNPTg0KICAgICAgICB0cnk6DQogICAgICAgICAgICBpbXBvcnQgc2VsZWN0DQogICAgICAgICAgICBpZiBzZWxlY3Quc2VsZWN0KFtzeXMuc3RkaW5dLCBbXSwgW10sIDAuMClbMF06DQogICAgICAgICAgICAgICAgcGF5bG9hZF9zdHIgPSBzeXMuc3RkaW4ucmVhZCgpLnN0cmlwKCkNCiAgICAgICAgICAgICAgICBpZiBwYXlsb2FkX3N0cjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMocGF5bG9hZF9zdHIpDQogICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgICAgICMgV2luZG93c+S4inNlbGVjdOWPr+iDveS4jeWPr+eUqO+8jOWwneivleebtOaOpeivu+WPlg0KICAgICAgICAgICAgaW1wb3J0IG1zdmNydA0KICAgICAgICAgICAgaWYgbXN2Y3J0LmtiaGl0KCk6DQogICAgICAgICAgICAgICAgcGF5bG9hZF9zdHIgPSBzeXMuc3RkaW4ucmVhZCgpLnN0cmlwKCkNCiAgICAgICAgICAgICAgICBpZiBwYXlsb2FkX3N0cjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMocGF5bG9hZF9zdHIpDQogICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgcGFzcw0KICAgIA0KICAgICMg5aaC5p6c5rKh5pyJ5qCH5YeG6L6T5YWl77yM6L+U5Zue56m65a2X5YW4DQogICAgcmV0dXJuIHt9DQoNCg0KZGVmIF9sb2dfZW52aXJvbm1lbnRfdmFyaWFibGVzKCkgLT4gTm9uZToNCiAgICAiIiLorrDlvZXnm7jlhbPnjq/looPlj5jph48iIiINCiAgICBlbnZfdmFycyA9IFsNCiAgICAgICAgIlRBQkxFX1RPS0VOIiwgIlRBQkxFX1NUQVJUX1JPVyIsICJUQUJMRV9TVEFSVF9DT0wiLCAiVEFCTEVfVElNRV9TTE9UUyIsICJUQUJMRV9NT1RPUl9TUEVFRCIsDQogICAgICAgICJFWFBFUklNRU5UX1NUQVJUIiwgIkVYUEVSSU1FTlRfRU5EIiwNCiAgICAgICAgIklORkxVWF9VUkwiLCAiSU5GTFVYX09SRyIsICJJTkZMVVhfVE9LRU4iLCAiSU5GTFVYX0JVQ0tFVCIsICJJTkZMVVhfTUVBU1VSRU1FTlQiDQogICAgXQ0KICAgIA0KICAgIGZvciB2YXIgaW4gZW52X3ZhcnM6DQogICAgICAgIHZhbHVlID0gb3MuZW52aXJvbi5nZXQodmFyLCAiIikNCiAgICAgICAgaWYgIlRPS0VOIiBpbiB2YXIgYW5kIHZhbHVlOg0KICAgICAgICAgICAgdmFsdWUgPSBfbWFza19zZWNyZXQodmFsdWUpDQogICAgICAgIExPR0dFUi5kZWJ1ZygiRU5WICVzPSVzIiwgdmFyLCB2YWx1ZSBvciAiPGVtcHR5PiIpDQoNCg0KZGVmIG1haW4oKSAtPiBpbnQ6DQogICAgdHJ5Og0KICAgICAgICB0cnk6DQogICAgICAgICAgICBpZiBub3QgbG9nZ2luZy5nZXRMb2dnZXIoKS5oYW5kbGVyczoNCiAgICAgICAgICAgICAgICBsb2dfbGV2ZWxfbmFtZSA9IG9zLmVudmlyb24uZ2V0KCJUQUJMRV9MT0dfTEVWRUwiLCAiREVCVUciKS5zdHJpcCgpIG9yICJERUJVRyINCiAgICAgICAgICAgICAgICBsb2dfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ19sZXZlbF9uYW1lLnVwcGVyKCksIGxvZ2dpbmcuREVCVUcpDQogICAgICAgICAgICAgICAgbG9nX2ZpbGVfcmF3ID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX0xPR19GSUxFIiwgInRlc3QubG9nIikuc3RyaXAoKSBvciAidGVzdC5sb2ciDQogICAgICAgICAgICAgICAgbG9nX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgobG9nX2ZpbGVfcmF3KQ0KDQogICAgICAgICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZygNCiAgICAgICAgICAgICAgICAgICAgbGV2ZWw9bG9nX2xldmVsLA0KICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9IiUoYXNjdGltZSlzIFslKGxldmVsbmFtZSlzXSAlKG5hbWUpczogJShtZXNzYWdlKXMiLA0KICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz1bDQogICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLkZpbGVIYW5kbGVyKGxvZ19maWxlLCBlbmNvZGluZz0idXRmLTgiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKSwNCiAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgTE9HR0VSLmluZm8oIkxvZ2dpbmcgaW5pdGlhbGl6ZWQgLT4gZmlsZT0lcyBsZXZlbD0lcyIsIGxvZ19maWxlLCBsb2dnaW5nLmdldExldmVsTmFtZShsb2dfbGV2ZWwpKQ0KICAgICAgICAgICAgICAgIF9sb2dfZW52aXJvbm1lbnRfdmFyaWFibGVzKCkNCiAgICAgICAgICAgIHN5cy5zdGRvdXQucmVjb25maWd1cmUoZW5jb2Rpbmc9InV0Zi04IikgICMgdHlwZTogaWdub3JlW2F0dHItZGVmaW5lZF0NCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCiAgICAgICAgDQogICAgICAgIHBheWxvYWQgPSBfbG9hZF9wYXlsb2FkKCkNCiAgICAgICAgdGFibGVfc3BlYyA9IGJ1aWxkX3RlbXBlcmF0dXJlX3RhYmxlX3dpdGhfbG9hZF9zdGF0dXMocGF5bG9hZCkNCiAgICAgICAgcmVzdWx0ID0geyJ0YWJsZXMiOiBbdGFibGVfc3BlY119DQogICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LCBlbnN1cmVfYXNjaWk9RmFsc2UpKQ0KICAgICAgICByZXR1cm4gMA0KICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOg0KICAgICAgICBwcmludChmImVycm9yOiB7ZXhjfSIsIGZpbGU9c3lzLnN0ZGVycikNCiAgICAgICAgcmV0dXJuIDENCg0KDQppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOg0KICAgIHN5cy5leGl0KG1haW4oKSkNCg==",
|
|
"scriptName": "table.py",
|
|
"remark": "PCM性能测试实验"
|
|
},
|
|
"configService": {
|
|
"host": "10.0.5.232",
|
|
"port": 5000,
|
|
"configPath": "config-1.2-debug.yaml"
|
|
},
|
|
"globalParameters": {
|
|
"parameters": {
|
|
"work_order_no": "W2001150.001-01:10",
|
|
"process_no": "W2001150.001-01:10",
|
|
"part_no": "P67-13-103",
|
|
"executor": "朱吉生",
|
|
"current_date": "2025-12-03"
|
|
}
|
|
}
|
|
} |