# Name: smd_prognostics v0.20 # Type: Admin/Public side plugin # Pro-active diagnostics that alarm when things have changed in Txp # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 1 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE1OiJzbWRfcHJvZ25vc3RpY3MiO3M6NjoiYXV0aG9yIjtz OjExOiJTdGVmIERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZk YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjAiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFR4cCI7czo0OiJjb2RlIjtzOjcxODQ3OiIvKioNCiAqIHNtZF9w cm9nbm9zdGljcw0KICoNCiAqIEEgVGV4dHBhdHRlcm4gQ01TIHBsdWdpbiBmb3IgcHJvLWFj dGl2ZSBkaWFnbm9zdGljcw0KICogIC0+IERldGVjdCBjaGFuZ2VzIHRvIHRoZSBmaWxlIHN5 c3RlbQ0KICogIC0+IEFja25vd2xlZGdlIGFsYXJtcyAoc2VudCB2aWEgZS1tYWlsIG9yIHRv IHRoZSBhZG1pbiBpbnRlcmZhY2UpDQogKg0KICogQGF1dGhvciBTdGVmIERhd3Nvbg0KICog QGxpbmsgICBodHRwOi8vc3RlZmRhd3Nvbi5jb20vDQogKi8NCg0KZ2xvYmFsICRzbWRfcHJv Z25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkc21kX3Byb2du b3N0aWNzX3NxbHByb3Q7DQokc21kX3Byb2dub3N0aWNzX2V2ZW50ID0gJ3NtZF9wcm9nbm9z dGljcyc7DQokc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcyA9IHJ0cmltKGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfZGlyJywgdHhwYXRoLCAxKSwgRFMpIC4gRFMgLiBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX3ByZWZpeCcsICcnKS4nc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vt cy50eHQnOw0KJGhkcm9uID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVy cycsICcnKTsNCiRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdCA9IG5ldyBzbWRfcHJvZ19QaFBy b3RlY3RvcihmYWxzZSk7DQoNCmlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCgln bG9iYWwgJHNtZF9wcm9nbm9zdGljc19zdHlsZSwgJHR4cF91c2VyLCAkZXZlbnQsICRzdGVw Ow0KDQoJJHNtZF9wcm9nbm9zdGljc19wcml2cyA9ICcxLDInOw0KCSRzbWRfcHJvZ25vc3Rp Y3Nfc3VwcHJlc3MgPSBncHMoJ3NtZF9wcm9nbm9zdGljc19zdXBwcmVzcycpOw0KCSRzbWRf cHJvZ25vc3RpY3Nfc3R5bGUgPSBhcnJheSgNCgkJJ21zZycgPT4NCiAgICAgICAgICcuc21k X3Byb2dfd2FybiB7IG1hcmdpbjowIGF1dG8gMTBweDsgd2lkdGg6NTAwcHg7IGJhY2tncm91 bmQ6I2ZmYzsgYm9yZGVyOjJweCBkYXNoZWQgcmVkOyBwYWRkaW5nOjEwcHg7IGNvbG9yOiM0 NDQ7IH0NCiAgICAgICAgICAuc21kX3Byb2dfd2FybiBhIHsgZm9udC13ZWlnaHQ6Ym9sZDsg Y29sb3I6Izk2MzsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ193YXJuIHNwYW4geyBmb250LXdl aWdodDpib2xkOyB9DQogICAgICAgICAgLnNtZF9wcm9nX3dhcm4gZGl2IHsgZm9udC13ZWln aHQ6Ym9sZDsgcGFkZGluZy1ib3R0b206MTBweDsgfScsDQoJCSdzZXR1cCcgPT4NCiAgICAg ICAgICcuc21kX2xhYmVsIHsgdGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnQ7IHZlcnRpY2Fs LWFsaWduOm1pZGRsZTsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ19idG5zIGZvcm0geyBkaXNw bGF5OmlubGluZTsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ25vc3RpY3Nfc2V0dXAgaDMgeyBt YXJnaW46MjVweCAwIDA7IH0nLA0KCQknbWV0ZXInID0+DQogICAgICAgICAnI3NtZF9wcm9n X21ldGVyIHsgbWFyZ2luOjAgYXV0bzsgYm9yZGVyOjFweCBzb2xpZCAjY2NjOyB3aWR0aDoz NjBweDsgcGFkZGluZzo1cHg7IGZvbnQtc2l6ZToxMjAlOyB9DQogICAgICAgICAgLnNtZF9w cm9nX3Bhc3Nfc3RyZW5ndGggeyBjb2xvcjpncmVlbjsgZm9udC13ZWlnaHQ6Ym9sZDsgfScs DQoJCSdhZHZpY2UnID0+DQogICAgICAgICAnLnNtZF9wcm9nX2FkdmljZSB7IHdpZHRoOjc1 MHB4OyB9DQogICAgICAgICAgI2xpc3Quc21kX3Byb2dfYWR2aWNlIHRkIHsgcGFkZGluZzo1 cHg7IH0NCiAgICAgICAgICAuc21kX3Byb2dfYnRucyB7IHdpZHRoOjE0MHB4OyB9JywNCgkp Ow0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJpdnMiLCAidHhwX3VzZXJzIiwgIm5hbWUg PSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIiciKTsNCgkkdXNlcnMgPSBnZXRfcHJlZignc21k X3Byb2dub3N0aWNzX3VzZXJzJywgJycpOw0KCSRhbGxvdyA9ICgkdXNlcnMpID8gaW5fYXJy YXkoJHR4cF91c2VyLCBkb19saXN0KCR1c2VycykpIDogdHJ1ZTsNCglpZiAoJGFsbG93KSB7 DQoJCWFkZF9wcml2cygkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNz X3ByaXZzKTsNCgkJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX3Byb2dub3N0aWNz X2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZzKTsNCgkJcmVnaXN0ZXJfdGFiKCdleHRl bnNpb25zJywgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgc21kX3Byb2dub3N0aWNzX2dUeHQo J3NtZF9wcm9nbm9zdGljcycpKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9z dGljc19zZXR1cCcsICdwbHVnaW5fcHJlZnMuJy4kc21kX3Byb2dub3N0aWNzX2V2ZW50KTsN CgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19kaXNwYXRjaGVyJywgJHNt ZF9wcm9nbm9zdGljc19ldmVudCk7DQoJfQ0KDQoJLy8gUGFzc3dvcmQgY2hlY2tlciBnb2Vz IG9uIEFkbWluLT5Vc2VycyBvciBBZG1pbi0+VXNlciBNYW5hZ2VyJ3MgRWRpdCBzdGVwIGZv ciBhbGwgdXNlcnMuDQoJLy8gU2luY2UgdGhlICRzdGVwIGlzIHNvbWV0aW1lcyBlbXB0eSAo aWYgc21kX3VtIGlzIGJlaW5nIHVzZWQgdG8gc2VsZi1lZGl0IGEgbG93LXByaXYgdXNlciwg Zm9yIGV4YW1wbGUpDQoJLy8gd2UgbmVlZCB0byBhbHNvIGFkZCB0aGUgbWV0ZXIgaW4gdGhp cyBjYXNlLiBUaGUgc2lkZS1lZmZlY3QgaXMgdGhhdCB0aGUgbWV0ZXIgY29kZSBhbHNvIGFw cGVhcnMgb24NCgkvLyB0aGUgc21kX3VtIHVzZXIgbGlzdCBwYWdlLCBidXQgaXQgY2FuJ3Qg YmUgaGVscGVkLg0KCWlmICggJGV2ZW50ID09ICdhZG1pbicgfHwgKCRldmVudCA9PSAnc21k X3VtJyAmJiAoaW5fYXJyYXkoJHN0ZXAsIGFycmF5KCcnLCAnc21kX3VtX2VkaXQnLCAnc21k X3VtX3NhdmUnLCAnc21kX3VtX3NhdmVfbmV3JywgJ3NtZF91bV9jaGFuZ2VfcGFzcycpKSAp KSApIHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJl bmd0aCcsICdhZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJfQ0KDQoJaWYgKCRoZHJvbikg ew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVhZGVy cycsICdhZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJfQ0KDQoJLy8gQWRtaW4gc2lkZSBj YWxsYmFjayBmb3IgY2hlY2tpbmcgZmlsZXMNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nfc3Vw cHJlc3MgJiYgaW5fYXJyYXkoJHByaXZzLCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3NfcHJp dnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2FkbWlu X3NpZGUnLCAncGFnZXRvcF9lbmQnKTsNCgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNhbGxi YWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJl JywgJycpLCAncHVibGljJykgIT09IGZhbHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3Nt ZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJldGV4 dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9pbmpl Y3QnLCAnc21kX25vJyksICdzbWRfbm8nKSA9PT0gZmFsc2UpIHsNCglyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAncHJldGV4dCcpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19k aXNwYXRjaGVyKCRldnQsICRzdHApIHsNCgkkYXZhaWxhYmxlX3N0ZXBzID0gYXJyYXkoDQoJ CSdzbWRfcHJvZ25vc3RpY3NfZmlsZXMnICA9PiBmYWxzZSwNCgkJJ3NtZF9wcm9nbm9zdGlj c19zZXR1cCcgID0+IGZhbHNlLA0KCQknc21kX3Byb2dub3N0aWNzX2FkdmljZScgPT4gZmFs c2UsDQoJCSdzbWRfcHJvZ25vc3RpY3NfYWNrJyAgICA9PiBmYWxzZSwNCgkpOw0KDQoJaWYg KCEkc3RwIG9yICFib3VuY2VyKCRzdHAsICRhdmFpbGFibGVfc3RlcHMpKSB7DQoJCSRzdHAg PSAnc21kX3Byb2dub3N0aWNzX3NldHVwJzsNCgl9DQoJJHN0cCgpOw0KfQ0KDQovLyBTdHVi IHRvIGNhbGwgdGhlIHZlcmlmaWNhdGlvbiBjb2RlIGZyb20gdGhlIFVSTA0KZnVuY3Rpb24g c21kX3Byb2dub3N0aWNzKCRldnQsICRzdHApIHsNCglyZXR1cm4gc21kX2RvX3Byb2dub3N0 aWNzKCk7DQp9DQoNCi8vIFZlcmlmeSB0aGUgZmlsZSBjaGVja3N1bXMNCi8vICRtb2RlID0g MDogbm9ybWFsIC8gMTogbm8gdXBkYXRlIChyZXR1cm4gYXJyYXlzIG9ubHkpIC8gMjogc2ls ZW50IHVwZGF0ZQ0KZnVuY3Rpb24gc21kX2RvX3Byb2dub3N0aWNzKCRtb2RlPTApIHsNCgln bG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1 bXMsICRzbWRfcHJvZ25vc3RpY3Nfc3R5bGU7DQoNCgkkbm93ID0gdGltZSgpOw0KCSRub2sg PSAkbWlzcyA9ICRhZGRlZCA9ICRhbGxmaWxlcyA9ICRoYXNoZG93biA9ICRoYXNobW9kID0g YXJyYXkoKTsNCgkkdGltZW5vdyA9IGRhdGUoJ0g6aTpzJywgJG5vdyk7DQoJbGlzdCgkYmVn LCAkZW5kKSA9IGRvX2xpc3QoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3 ZWVuJywgJ3wnKSwgJ3wnKTsgLy8gRGVmYXVsdCBpcyBwaXBlIHNvIHdlIGNhbiBndWFyYW50 ZWUgdHdvIHJldHVybiB2YWxzDQoJJHRkaWZmID0gKCRtb2RlID09IDEgfHwgKCAoJHRpbWVu b3cgPiAkYmVnKSAmJiAoJHRpbWVub3cgPCAkZW5kKSAmJiAoJG5vdyAtIGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfbGFzdGNoZWNrJywgMCkgPiBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2NoZWNrX2ZyZXEnLCAzNjAwKSkgKSApID8gdHJ1ZSA6IGZhbHNlOw0KDQoJLy8gUGFy dHMgc2hhbWVsZXNzbHkgcGxhZ2lhcmlzZWQgZnJvbSB0eHBfZGlhZw0KCWlmICgkdGRpZmYp IHsNCgkJJHN1bWhhc2ggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3N1bWhhc2gnLCBO VUxMLCAoJG1vZGU9PTEgPyAxIDogMCkpOw0KCQkkbG9va2F0ID0gZ2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19jaGVja19mb3InLCAnJyk7DQoJCSRhZGRzID0gKHN0cnBvcygkbG9va2F0 LCAnYWRkJykgIT09IGZhbHNlKTsNCgkJJGRlbHMgPSAoc3RycG9zKCRsb29rYXQsICdkZWxl dGUnKSAhPT0gZmFsc2UpOw0KCQkkbW9kcyA9IChzdHJwb3MoJGxvb2thdCwgJ21vZGlmeScp ICE9PSBmYWxzZSk7DQoNCgkJaWYgKCRjcyA9IEBmaWxlKCRzbWRfcHJvZ25vc3RpY3NfY2hl Y2tzdW1zKSkgew0KCQkJJGhhc2ggPSBtZDUoc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgk c21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpOw0KCQkJaWYgKCRoYXNoICE9ICRzdW1oYXNo KSB7DQoJCQkJJGhhc2htb2RbXSA9ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KCQkJ fSBlbHNlIHsNCgkJCQkkY3RyID0gMDsNCgkJCQkkcXR5X3BlciA9ICgoJHF0eSA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywgJycpKSA9PSAnJykgPyBjb3VudCgk Y3MpIDogJHF0eTsNCgkJCQkkc29fZmFyID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19x dHlfc29fZmFyJywgMCk7DQoJCQkJJHVudGlsID0gJHNvX2ZhciArICRxdHlfcGVyOw0KCQkJ CWZvcmVhY2ggKCRjcyBhcyAkYykgew0KCQkJCQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTog XCgoLiopXCkkQCcsIHRyaW0oJGMpLCAkbSkpIHsNCgkJCQkJCWxpc3QoLCRmaWxlLCRtZDUp ID0gJG07DQoJCQkJCQlpZiAoJGRlbHMgJiYgIWZpbGVfZXhpc3RzKCRmaWxlKSkgew0KCQkJ CQkJCSRtaXNzW10gPSAkZmlsZTsNCgkJCQkJCX0gZWxzZSBpZiAoJG1vZHMgJiYgJG1kNSAh PSAnTlVMTCcpIHsNCgkJCQkJCQkvLyBDaGVjayBmaWxlX2V4aXN0cyBsYXN0IGFzIGl0J3Mg dGhlIHNsb3dlc3Qgb3BlcmF0aW9uOyBhbGxvd3MgUEhQIHRvIHNob3J0IGNpcmN1aXQgY29u ZGl0aW9uYWxzIGZhc3Rlcg0KCQkJCQkJCWlmICggKCAoKCRjdHIgPj0gJHNvX2ZhcikgJiYg KCRjdHIgPCAkdW50aWwpIHx8ICRtb2RlID09IDEpICkgJiYgZmlsZV9leGlzdHMoJGZpbGUp ICkgew0KCQkJCQkJCQkkY29udGVudCA9IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZp bGUpOw0KCQkJCQkJCQlpZiAoKG1kNSgkY29udGVudCkgIT0gJG1kNSkgJiYgKCRmaWxlICE9 ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSkgew0KCQkJCQkJCQkJJG5va1tdID0gJGZp bGU7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJJGN0cisrOw0KCQkJCQkJfQ0KCQkJ CQkJJGFsbGZpbGVzW10gPSAkZmlsZTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCS8vIFN0YXNo IHRoZSBzdG9yeSBzbyBmYXIgcmVhZHkgZm9yIG5leHQgdGltZSB0aGUgZnVuY3Rpb24gaXMg Y2FsbGVkDQoJCQkJaWYgKCRtb2RlICE9IDEpIHsNCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc19xdHlfc29fZmFyJywgKCgkdW50aWwgPCAkY3RyKSA/ICR1bnRpbCA6IDApLCAn c21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9DQoJCQkJ aWYgKCRhZGRzKSB7DQoJCQkJCSRmaWxlbGlzdCA9IHNtZF9wcm9nbm9zdGljc19yZWFkZmls ZXMoKTsNCgkJCQkJJGFkZGVkID0gYXJyYXlfZGlmZigkZmlsZWxpc3QsICRhbGxmaWxlcyk7 DQoJCQkJfQ0KDQoJCQkJaWYgKCRtb2RlICE9IDEpIHsNCgkJCQkJc2V0X3ByZWYoJ3NtZF9w cm9nbm9zdGljc19sYXN0Y2hlY2snLCAkbm93LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERF TiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkvLyBGaWxl IGRvZXNuJ3QgZXhpc3QNCgkJCSRoYXNoZG93bltdID0gJHNtZF9wcm9nbm9zdGljc19jaGVj a3N1bXM7DQoJCX0NCgl9DQoNCgkvLyBBc3NlbWJsZSBtZXNzYWdlDQoJaWYgKCRub2sgfHwg JG1pc3MgfHwgJGFkZGVkIHx8ICRoYXNoZG93biB8fCAkaGFzaG1vZCkgew0KCQlpZiAoJG1v ZGU9PTEpIHsNCgkJCXJldHVybiBhcnJheSgkbm9rLCAkbWlzcywgJGFkZGVkLCAkaGFzaGRv d24sICRoYXNobW9kKTsNCgkJfSBlbHNlIHsNCgkJCSR2aWEgPSBnZXRfcHJlZignc21kX3By b2dub3N0aWNzX25vdGlmeV92aWEnLCAnJyk7DQoJCQkkZGV0ZWN0ID0gZ2V0X3ByZWYoJ3Nt ZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJycpOw0KCQkJJGxhc3RzID0gZXhwbG9kZSgn LCcsIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGFjdCcsIDApKTsNCgkJCSRmcmVx cyA9IGV4cGxvZGUoJywnLCBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEn LCA4NjQwMCkpOw0KCQkJaWYgKCFpc3NldCgkbGFzdHNbMV0pKSB7DQoJCQkJJGxhc3RzWzFd ID0gJGxhc3RzWzBdOw0KCQkJfQ0KCQkJaWYgKCFpc3NldCgkZnJlcXNbMV0pKSB7DQoJCQkJ JGZyZXFzWzFdID0gJGZyZXFzWzBdOw0KCQkJfQ0KDQoJCQkkbGFzdGFjdF90eHAgPSAoJG1v ZGUgPCAyICYmICgkbm93IC0gJGxhc3RzWzBdID4gJGZyZXFzWzBdKSkgPyB0cnVlIDogZmFs c2U7DQoJCQkkbGFzdGFjdF9tYWlsID0gKCRtb2RlIDwgMiAmJiAoJG5vdyAtICRsYXN0c1sx XSA+ICRmcmVxc1sxXSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJGxhc3Rtc2cgPSBnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2xhc3Rtc2cnLCAnJyk7DQoNCgkJCSRzdWJqZWN0ID0gc21k X3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19zdWJqZWN0Jyk7DQoJCQkkbXNn ID0gam9pbignfCcsIGFycmF5X21lcmdlKCRoYXNoZG93biwgJGhhc2htb2QsICRub2ssICRt aXNzLCAkYWRkZWQpKTsNCg0KCQkJaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJyAmJiBz dHJwb3MoJHZpYSwgJ3R4cCcpICE9PSBmYWxzZSkgew0KCQkJCWlmICgkbGFzdGFjdF90eHAg fHwgKCRsYXN0bXNnICE9IG1kNSgkbXNnKSkpIHsNCgkJCQkJJHR4cGRpciA9IGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfdHhwZGlyJywgaHUuc21kX3Byb2dub3N0aWNzX2d1ZXNzX2Fk bWluX2RpcigpKTsNCgkJCQkJJG91dCA9ICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicuJHNt ZF9wcm9nbm9zdGljc19zdHlsZVsnbXNnJ10uJzwvc3R5bGU+PGRpdiBjbGFzcz0ic21kX3By b2dfd2FybiI+PGRpdj4nLiRzdWJqZWN0Lic8L2Rpdj4nLg0KCQkJCQkJKCgkaGFzaGRvd24p ID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJs ZV9oYXNoZG93bicpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxpPicsJGhhc2hkb3du KS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRoYXNobW9kKSA/ICc8cD4nLnNtZF9w cm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfcHJlYW1ibGVfaGFzaG1vZCcpLic8 L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxpPicsJGhhc2htb2QpLic8L2xpPjwvdWw+JyA6 ICcnKS4NCgkJCQkJCSgoJG5vaykgPyAnPHA+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21k X3Byb2dub3N0aWNzX3ByZWFtYmxlX25vaycpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+ PGxpPicsJG5vaykuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJCQkJKCgkbWlzcykgPyAnPHA+ Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3ByZWFtYmxlX21pc3Mn KS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRtaXNzKS4nPC9saT48L3VsPicg OiAnJykuDQoJCQkJCQkoKCRhZGRlZCkgPyAnPHA+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c21kX3Byb2dub3N0aWNzX3ByZWFtYmxlX2FkZGVkJykuJzwvcD48dWw+PGxpPicuam9pbign PC9saT48bGk+JywkYWRkZWQpLic8L2xpPjwvdWw+JyA6ICcnKS4NCgkJCQkJCSc8cD48YSBo cmVmPSInLiR0eHBkaXIuJy9pbmRleC5waHA/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2 ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nfc3Vw cHJlc3M9MSI+Jy4NCgkJCQkJCXNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3NfcG9zdGFtYmxlJykuJzwvYT48L3A+PC9kaXY+JzsNCg0KCQkJCQlzZXRfcHJlZignc21k X3Byb2dub3N0aWNzX2xhc3RhY3QnLCAkbm93LicsJy4kbGFzdHNbMV0sICdzbWRfcHJvZ25v cycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCQllY2hvICRvdXQ7DQoJCQkJ fQ0KCQkJfQ0KDQoJCQlpZiAoc3RycG9zKCR2aWEsICdlbWFpbCcpICE9PSBmYWxzZSkgew0K CQkJCWlmICgkbGFzdGFjdF9tYWlsIHx8ICgkbGFzdG1zZyAhPSBtZDUoJG1zZykpKSB7DQoJ CQkJCSR0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJycpOw0KCQkJ CQlpZiAoJHRvKSB7DQoJCQkJCQkkaGRycyA9IHNtZF9wcm9nbm9zdGljc19oZWFkZXJfaW5m bygnc21kX3Byb2dub3N0aWNzJyk7DQoJCQkJCQkkYm9keSA9DQoJCQkJCQkJKCgkaGFzaGRv d24pID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3ByZWFtYmxl X2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRvd24pIDogJycpLg0KCQkJCQkJCSgoJGhh c2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3ByZWFt YmxlX2hhc2htb2QnKS5uLm4uam9pbihuLCRoYXNobW9kKSA6ICcnKS4NCgkJCQkJCQkoKCRu b2spID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3ByZWFtYmxl X25vaycpLm4ubi5qb2luKG4sJG5vaykgOiAnJykuDQoJCQkJCQkJKCgkbWlzcykgPyBuLm4u c21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJsZV9taXNzJyku bi5uLmpvaW4obiwkbWlzcykgOiAnJykuDQoJCQkJCQkJKCgkYWRkZWQpID8gbi5uLnNtZF9w cm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfcHJlYW1ibGVfYWRkZWQnKS5uLm4u am9pbihuLCRhZGRlZCkgOiAnJykuDQoJCQkJCQkJbi5uLic8YSBocmVmPSInLiRoZHJzWyd0 eHBkaXInXS4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyZz dGVwPXNtZF9wcm9nbm9zdGljc19hY2smc21kX3Byb2dub3N0aWNzX3N1cHByZXNzPTEiPicu c21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wb3N0YW1ibGUnKS4nPC9h Pic7DQoJCQkJCQltYWlsKCR0bywgJHN1YmplY3QsICRib2R5LCAkaGRyc1snaGVhZGVycydd KTsNCgkJCQkJfQ0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RhY3QnLCAk bGFzdHNbMF0uJywnLiRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9p bnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFz dG1zZycsIG1kNSgkbXNnKSwgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lu cHV0Jyk7DQoJCQlpZiAoJGxhc3Rtc2cgIT0gbWQ1KCRtc2cpKSB7DQoJCQkJaWYgKCRkZXRl Y3QgPT0gJycpIHsNCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0 JywgJG5vdywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJ CQkJfSBlbHNlIHsNCgkJCQkJJGRldGVjdCA9IGV4cGxvZGUoJywnLCRkZXRlY3QpOw0KCQkJ CQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RkZXRlY3QnLCAkZGV0ZWN0WzBdLics Jy4kbm93LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJ CQl9DQoJCQl9DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0gIENhdGNoIHVuZXhwZWN0 ZWQgcmVxdWVzdCBoZWFkZXJzDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfcmVxdWVzdF9o ZWFkZXJzKCRldnQsICRzdHApIHsNCgkkYmxvY2sgPSBleHBsb2RlKCd8JywgZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycycsICcnKSk7DQoJJGhkciA9IHNlcnZlclNl dCgnUkVRVUVTVF9NRVRIT0QnKTsNCg0KCWlmIChpbl9hcnJheSgkaGRyLCAkYmxvY2spKSB7 DQoJCSRzZW5kID0gKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVu c2ljcycpLCAnaGRyJykgIT09IGZhbHNlKTsNCg0KCQkvLyBTZW5kIHRoZSBmb3JlbnNpY3Mg b2ZmIGlmIG5lY2Vzc2FyeQ0KCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21h aWx0b19jc2knLCAnJyk7DQoJCWlmICgkdG8gJiYgJHNlbmQpIHsNCgkJCSRzdWJqZWN0ID0g c21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19zdWJqZWN0X2NzaScpOw0K CQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGlj cycpOw0KCQkJJGJvZHkgPSBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3NfcmVxX25vdF9hbGxvd2VkJywgYXJyYXkoJ3tyZXF9JyA9PiAkaGRyKSkubjsNCgkJCWZv cmVhY2ggKCRfU0VSVkVSICsgJF9SRVFVRVNUICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7 DQoJCQkJJGJvZHkgLj0gbi4ka2V5Lic6ICcuJHZhcjsNCgkJCX0NCgkNCgkJCW1haWwoJHRv LCAkc3ViamVjdCwgJGJvZHksICRoZHJzWydoZWFkZXJzJ10pOw0KCQl9DQoNCgkJLy9UT0RP OiBvZmZlciBhbHRlcm5hdGl2ZSBkaWUgbWVjaGFuaXNtcyBsaWtlIFNRTCBhdHRhY2tzPw0K CQlleGl0KDEpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLSAgU1FMIGluamVjdGlvbiBkZXRl Y3Rpb24NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0KCkgew0KCWdsb2Jh bCAkc21kX3Byb2dub3N0aWNzX3NxbHByb3QsICRwZXJtbGlua19tb2RlOw0KDQoJLy8gRGV0 ZXJtaW5lIGNvbW1lbnQgcHJldmlldyBzdGVwIGFuZCBpZ25vcmUgaWYgc28NCgkkaXNfcHJl dnUgPSBmYWxzZTsNCgkkY29tID0gcHNhKGFycmF5KA0KCQkncGFyZW50aWQnLA0KCQkncHJl dmlldycsDQoJCSdiYWNrcGFnZScsDQoJKSk7DQoJaWYgKCRjb21bJ3ByZXZpZXcnXSkgew0K CQkkdXJscGFydHMgPSBleHBsb2RlKCcvJywgJGNvbVsnYmFja3BhZ2UnXSk7DQoJCSRudW0g PSAoJHBlcm1saW5rX21vZGUgPT0gJ21lc3N5JykgPyAxIDogY291bnQoJHVybHBhcnRzKTsN CgkJJGFydGljID0gc2FmZV9maWVsZCgnaWQnLCd0ZXh0cGF0dGVybicsICJJRD0iLmRvU2xh c2goJGNvbVsncGFyZW50aWQnXSkuKCgkbnVtID4gMSkgPyAiIEFORCB1cmxfdGl0bGU9JyIu ZG9TbGFzaCgkdXJscGFydHNbJG51bS0xXSkuIiciIDogJycpKTsNCgkJJGlzX3ByZXZ1ID0g KCRhcnRpYykgPyB0cnVlIDogZmFsc2U7DQoJfQ0KCWlmKCEkaXNfcHJldnUgJiYgJHNtZF9w cm9nbm9zdGljc19zcWxwcm90LT5pc01hbGljaW91cygpKSB7DQoJCSRvcHRzID0gZG9fbGlz dChnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAnfCcpLCAnfCcpOw0K CQkkYmxvayA9IChzdHJwb3MoJG9wdHNbMF0sICdzbWRfYmxvY2snKSAhPT0gZmFsc2UpOw0K CQkkc2VuZCA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNp Y3MnKSwgJ3NxbCcpICE9PSBmYWxzZSk7DQoJCSR2ZXIgPSAoZGVmaW5lZCgndHhwX3ZlcnNp b24nKSkgPyB0eHBfdmVyc2lvbiA6IGdldF9wcmVmKCd2ZXJzaW9uJywgJycpOw0KDQoJCS8v IFNlbmQgdGhlIGZvcmVuc2ljcyBvZmYgaWYgbmVjZXNzYXJ5DQoJCSR0byA9IGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKTsNCgkJaWYgKCR0byAmJiAkc2Vu ZCkgew0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0 aWNzX3N1YmplY3RfY3NpJyk7DQoJCQkkaGRycyA9IHNtZF9wcm9nbm9zdGljc19oZWFkZXJf aW5mbygnc21kX2Zyb2dub3N0aWNzJyk7DQoJCQkkYm9keSA9IG4uc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJsZV9zcWxfaW5qZWN0JykubjsNCgkJCSRi b2R5IC49ICgoJHZlcikgPyAnVHhwOiAnIC4gJHZlciAubiA6ICcnKSAuICdQSFA6ICcgLiBw aHB2ZXJzaW9uKCkgLm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5u LiAoKGlzX2NhbGxhYmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4g YXBhY2hlX2dldF92ZXJzaW9uKCkubiA6ICcnKTsNCgkJCWZvcmVhY2ggKCRfU0VSVkVSICsg JF9SRVFVRVNUICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkJJGJvZHkgLj0gbi4k a2V5Lic6ICcuJHZhcjsNCgkJCX0NCg0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwg JGhkcnNbJ2hlYWRlcnMnXSk7DQoJCX0NCg0KCQlpZiAoaXNzZXQoJG9wdHNbMV0pICYmICFl bXB0eSgkb3B0c1sxXSkpIHsNCgkJCSRwYXJ0cyA9IGRvX2xpc3QoJG9wdHNbMV0sICc6Jyk7 DQoJCQlpZiAoJHBhcnRzWzBdID09ICd0eHBfZm9ybScpIHsNCgkJCQkkbXNnID0gcGFyc2Vf Zm9ybSgkcGFydHNbMV0pOw0KCQkJfSBlbHNlIHsNCgkJCQkkbXNnID0gJG9wdHNbMV07DQoJ CQl9DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gJyc7DQoJCX0NCg0KCQlpZiAoJGJsb2spIHsN CgkJCWVjaG8gJG1zZzsNCgkJCWV4aXQoMSk7DQoJCX0gZWxzZSB7DQoJCQl0eHBfZGllKCRt c2csICRvcHRzWzBdKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0NCi8v IEFkbWluLXNpZGUgcGFuZWxzDQovLyAtLS0tLS0tLS0tLS0tLS0tLQ0KLy8gLS0tLS0tLS0t LSAgQWxhcm0gYWNrbm93bGVkZ2VtZW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfYWNr KCRtc2c9JycpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9n bm9zdGljc19jaGVja3N1bXMsICRwcmVmczsNCg0KCSRzdWJtaXQgPSBncHMoJ3N1Ym1pdCcp Ow0KCSRpZ25vcmUgPSBncHMoJ2lnbm9yZScpOw0KCSRjc2kgPSBncHMoJ2NzaScpOw0KDQoJ JGFjayA9IGdwcygnc2VsZWN0ZWQnKTsNCgkkc21kX3Byb2dfYWNrID0gKGlzX2FycmF5KCRh Y2spKSA/ICRhY2sgOiAoKCRhY2spID8gYXJyYXkoJGFjaykgOiBhcnJheSgpKTsNCg0KCSRv dXQgPSBhcnJheSgpOw0KDQoJaWYgKCRzdWJtaXQgfHwgJGlnbm9yZSkgew0KCQlpZiAoJGNz ID0gQGZpbGUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQlmb3JlYWNoICgk Y3MgYXMgJGMpIHsNCgkJCQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTogXCgoLiopXCkkQCcs IHRyaW0oJGMpLCAkbSkpIHsNCgkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJ aWYgKCgka2V5ID0gYXJyYXlfc2VhcmNoKCRmaWxlLCAkc21kX3Byb2dfYWNrKSkgIT09IGZh bHNlKSB7DQoJCQkJCQlpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJGNvbnRl bnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkkb3V0W10g PSAkZmlsZS4nOiAoJy4oICgkaWdub3JlKSA/ICdOVUxMJyA6IG1kNSgkY29udGVudCkgKS4n KSc7DQoJCQkJCQl9DQoJCQkJCQkvLyBSZW1vdmUgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUg Y2hlY2tzdW1zIHNvIHdlJ3JlIGxlZnQgd2l0aCBhZGRpdGlvbnMNCgkJCQkJCXVuc2V0KCRz bWRfcHJvZ19hY2tbJGtleV0pOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG91dFtdID0gdHJp bSgkYyk7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIFRhY2sgb24gYW55IG5ldyBm aWxlcw0KCQkJZm9yZWFjaCAoJHNtZF9wcm9nX2FjayBhcyAkZmlsZSkgew0KCQkJCWlmICgg KCRmaWxlICE9ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSAmJiBmaWxlX2V4aXN0cygk ZmlsZSkgKSB7DQoJCQkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgk ZmlsZSk7DQoJCQkJCSRvdXRbXSA9ICRmaWxlLic6ICgnLiggKCRpZ25vcmUpID8gJ05VTEwn IDogbWQ1KCRjb250ZW50KSApLicpJzsNCgkJCQl9DQoJCQl9DQoJCQkkZmggPSBmb3Blbigk c21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgInciKTsNCgkJCWZ3cml0ZSgkZmgsIGpvaW4o biwgJG91dCkpOw0KCQkJZmNsb3NlKCRmaCk7DQoJCQlzbWRfcHJvZ25vc3RpY3Nfc2VsZl9o YXNoKCk7DQoJCQkkbXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGlj c19hY2tlZCcpOw0KCQl9DQoJfQ0KCWlmICgkY3NpICYmICRzbWRfcHJvZ19hY2spIHsNCgkJ ICRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2NzaV9zZW50 Jyk7DQoJfSBlbHNlIGlmICgkY3NpKSB7DQoJCSAkbXNnID0gc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljc19ub25lX3NlbGVjdGVkJyk7DQoJfQ0KDQoJcGFnZXRvcChz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cpOw0KCWV4dHJh Y3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCglsaXN0KCRub2ssICRtaXNzLCAk YWRkZWQsICRoYXNoZG93biwgJGhhc2htb2QpID0gc21kX2RvX3Byb2dub3N0aWNzKDEpOw0K CSRub2sgPSBpc19hcnJheSgkbm9rKSA/ICRub2sgOiBhcnJheSgpOw0KCSRtaXNzID0gaXNf YXJyYXkoJG1pc3MpID8gJG1pc3MgOiBhcnJheSgpOw0KCSRhZGRlZCA9IGlzX2FycmF5KCRh ZGRlZCkgPyAkYWRkZWQgOiBhcnJheSgpOw0KCSRoYXNobW9kID0gaXNfYXJyYXkoJGhhc2ht b2QpID8gJGhhc2htb2QgOiBhcnJheSgpOw0KCSRlcnJudW0gPSBjb3VudChhcnJheV9tZXJn ZSgkbm9rLCAkbWlzcywgJGFkZGVkLCAkaGFzaG1vZCkpOw0KCSRmb3JlbnNpY3MgPSBhcnJh eSgpOw0KCSRsZm9ybSA9ICdZLW0tZCBIOmk6cyc7DQoNCgllY2hvICRidG5DU1Muc3RhcnRU YWJsZSgnbGlzdCcpOw0KCWVjaG8gdHIodGRhKHN0cm9uZyhzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnc21kX3Byb2dub3N0aWNzX3R0bF9hY2snKSksICcgY29sc3Bhbj0iMyInKSAuIHRkYSgk YnRuU2V0dXAuJGJ0bkZpbGVzLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvICc8 Zm9ybSBuYW1lPSJsb25nZm9ybSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRz bWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJnNt ZF9wcm9nbm9zdGljc19zdXBwcmVzcz0xIj4nOw0KCWlmICgkZXJybnVtID4gMCkgew0KCQlm b3JlYWNoKCRoYXNobW9kIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5h dWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0 ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9n bm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfbGJsX2hhc2htb2QnKSkudGRhKCRuYXVn aHR5KSk7DQoJCX0NCgkJZm9yZWFjaCgkbm9rIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0g aW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVj a2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0Jyku dGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfbGJsX2NoYW5nZWQn KSkudGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJCSRmaSA9IHN0YXQoJG5h dWdodHkpOw0KCQkJCSRmb3JlbnNpY3NbJ25vayddW10gPSBzbWRfcHJvZ25vc3RpY3NfZm9y ZW5zaWNfb3V0cHV0KCRuYXVnaHR5LCAkZmkpOw0KCQkJCSRmb3JlbnNpY3NbJ2ZpbGVzJ11b JG5hdWdodHldID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50 cygkbmF1Z2h0eSkpKTsNCgkJCX0NCgkJfQ0KCQlmb3JlYWNoKCRtaXNzIGFzICRuYXVnaHR5 KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJ ZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycs ICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3NfbGJsX21pc3NpbmcnKSkudGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJ CSRmb3JlbnNpY3NbJ21pc3MnXVtdID0gJG5hdWdodHk7DQoJCQl9DQoJCX0NCgkJZm9yZWFj aCgkYWRkZWQgYXMgJG5hdWdodHkpIHsNCgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwg JHNtZF9wcm9nX2Fjayk7DQoJCQllY2hvIHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywg JG5hdWdodHksICRzZWwpLCAnJywgJ211bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NtZF9wcm9nbm9zdGljc19sYmxfYWRkZWQnKSkudGRhKCRuYXVnaHR5KSk7DQoJ CQlpZiAoJHNlbCkgew0KCQkJCSRmaSA9IHN0YXQoJG5hdWdodHkpOw0KCQkJCSRmb3JlbnNp Y3NbJ2FkZGVkJ11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJG5hdWdo dHksICRmaSk7DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVskbmF1Z2h0eV0gPSBjaHVua19z cGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRuYXVnaHR5KSkpOw0KCQkJ fQ0KCQl9DQoJCWlmICgkc21kX3Byb2dfYWNrICYmICRwcmVmc1snbG9nZ2luZyddICE9ICdu b25lJykgew0KCQkJJGRldGVjdCA9IGV4cGxvZGUoJywnLGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfbGFzdGRldGVjdCcsIHRpbWUoKSkpOw0KCQkJaWYgKCFpc3NldCgkZGV0ZWN0WzFd KSkgew0KCQkJCSRkZXRlY3RbMV0gPSAkZGV0ZWN0WzBdOw0KCQkJfQ0KCQkJJHJzID0gc2Fm ZV9yb3dzKCcqJywgJ3R4cF9sb2cnLCAidGltZSBCRVRXRUVOICciIC4gZGF0ZSgkbGZvcm0s ICgkZGV0ZWN0WzBdIC0gJHByZWZzWydzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcSddKSkg LiAiJyBBTkQgJyIgLiBkYXRlKCRsZm9ybSwgKCRkZXRlY3RbMV0gKyA1KSkgLiAiJyIpOw0K CQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkkZm9yZW5zaWNzWyd0eHBfbG9nJ11b XSA9IGpvaW4oJywnLCRyb3cpOw0KCQkJfQ0KCQl9DQoJCWVjaG8gdHIodGRhKA0KCQkJCXNl bGVjdF9idXR0b25zKCkNCgkJCSwnIGNsYXNzPSJtdWx0aS1lZGl0IiBjb2xzcGFuPSIzIiBz dHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogbm9uZTsiJykpOw0KCQllY2hvIHRy KHRkYSgkYnRuQWNrSXQuJGJ0bklnbm9yZS4oKGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bWFpbHRvX2NzaScsICcnKSkgPyAkYnRuQ1NJIDogJycpLCAkYnRuU3R5bGUpKTsNCgl9IGVs c2Ugew0KCQllY2hvIHRyKHRkKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3Nfbm9fYWxhcm1zJykpKTsNCgkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0 ZWN0JywgJycsICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0K CX0NCgllY2hvIHRJbnB1dCgpOw0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUo KTsNCg0KCWlmICgkY3NpICYmICRmb3JlbnNpY3MpIHsNCgkJLy8gU2VuZCB0aGUgZm9yZW5z aWNzIG9mZg0KCQkkdG8gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0b19jc2kn LCAnJyk7DQoJCWlmICgkdG8pIHsNCgkJCSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljc19zdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJv Z25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPQ0K CQkJCW4uJ1R4cDogJyAuIHR4cF92ZXJzaW9uIC5uLiAnUEhQOiAnIC4gcGhwdmVyc2lvbigp IC5uLiAnTXlTUUw6ICcgLiBteXNxbF9nZXRfc2VydmVyX2luZm8oKSAubi4gKChpc19jYWxs YWJsZSgnYXBhY2hlX2dldF92ZXJzaW9uJykpID8gJ0FwYWNoZTogJyAuIGFwYWNoZV9nZXRf dmVyc2lvbigpLm4gOiAnJykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWydub2snXSkpID8g bi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3ByZWFtYmxlX25vaycp Lm4uam9pbihuLCRmb3JlbnNpY3NbJ25vayddKSA6ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3Jl bnNpY3NbJ21pc3MnXSkpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25v c3RpY3NfcHJlYW1ibGVfbWlzcycpLm4uam9pbihuLCRmb3JlbnNpY3NbJ21pc3MnXSkgOiAn JykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWydhZGRlZCddKSkgPyBuLm4uc21kX3Byb2du b3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJsZV9hZGRlZCcpLm4uam9pbihu LCRmb3JlbnNpY3NbJ2FkZGVkJ10pIDogJycpLg0KCQkJCSgoaXNzZXQoJGZvcmVuc2ljc1sn dHhwX2xvZyddKSkgPyBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGlj c19wcmVhbWJsZV90eHBsb2cnKS5uLmpvaW4obiwkZm9yZW5zaWNzWyd0eHBfbG9nJ10pIDog bi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nfbm9fbG9nX2VudHJp ZXMnKSk7DQoJCQlpZiAoaXNzZXQoJGZvcmVuc2ljc1snZmlsZXMnXSkpIHsNCgkJCQkkYm9k eSAuPSBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJs ZV9maWxlcycpOw0KCQkJCWZvcmVhY2ggKCRmb3JlbnNpY3NbJ2ZpbGVzJ10gYXMgJGZuID0+ ICRjb250ZW50KSB7DQoJCQkJCSRib2R5IC49IG4ubi4kZm4ubi5uLiRjb250ZW50Lm47DQoJ CQkJfQ0KCQkJfQ0KDQoJCQltYWlsKCR0bywgJHN1YmplY3QsICRib2R5LCAkaGRyc1snaGVh ZGVycyddKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLSBGaWxlIG1hbmFnZW1lbnQN CmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19maWxlcygkbXNnPScnKSB7DQoJZ2xvYmFsICRz bWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJ ZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3N1Ym1pdCcpKSkpOw0KCSRzbWRfcHJvZ25v c3RpY3NfZmlsZXMgPSBncHMoJ3NtZF9wcm9nbm9zdGljc19maWxlcycpOw0KCWlmICghaXNf YXJyYXkoJHNtZF9wcm9nbm9zdGljc19maWxlcykpIHsNCgkJJHNtZF9wcm9nbm9zdGljc19m aWxlcyA9IGFycmF5KCk7DQoJfQ0KDQoJJGFkZHMgPSAoc3RycG9zKGdldF9wcmVmKCdzbWRf cHJvZ25vc3RpY3NfY2hlY2tfZm9yJyksICdhZGQnKSAhPT0gZmFsc2UpOw0KCSRmaWxlbGlz dCA9IHNtZF9wcm9nbm9zdGljc19yZWFkZmlsZXMoKTsNCgkkYWxsY291bnQgPSBjb3VudCgk ZmlsZWxpc3QpOw0KDQoJaWYgKCRzdWJtaXQpIHsNCgkJJG91dGZpbGUgPSBhcnJheSgpOw0K CQlmb3JlYWNoICgkc21kX3Byb2dub3N0aWNzX2ZpbGVzIGFzICRmaWxlKSB7DQoJCQkkY29u dGVudCA9IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJJG91dGZpbGVb XSA9ICRmaWxlLic6ICgnLm1kNSgkY29udGVudCkuJyknOw0KCQl9DQoNCgkJJGZoID0gZm9w ZW4oJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICJ3Iik7DQoJCWZ3cml0ZSgkZmgsIGpv aW4obiwgJG91dGZpbGUpKTsNCg0KCQlpZiAoJGFkZHMpIHsNCgkJCSRhZGRpdGlvbnMgPSBh cnJheV9kaWZmKCRmaWxlbGlzdCwgJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoJCQkkYWRk ZWQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCAoJGFkZGl0aW9ucyBhcyAkYWRkaXRpb24pIHsN CgkJCQkkYWRkZWRbXSA9ICRhZGRpdGlvbi4nOiAoTlVMTCknOw0KCQkJfQ0KCQkJZndyaXRl KCRmaCwgbi5qb2luKG4sICRhZGRlZCkpOw0KCQl9DQoJCWZjbG9zZSgkZmgpOw0KCQlzbWRf cHJvZ25vc3RpY3Nfc2VsZl9oYXNoKCk7DQoJCXNtZF9kb19wcm9nbm9zdGljcygyKTsgLy8g U2lsZW50bHkgYWNrbm93bGVkZ2UgYWxsIHRoZSBmaWxlcw0KCQlzZXRfcHJlZignc21kX3By b2dub3N0aWNzX2xhc3RkZXRlY3QnLCAnJywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4s ICd0ZXh0X2lucHV0Jyk7DQoJCSRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3By b2dub3N0aWNzX2ZpbGVzX3VwZGF0ZWQnKTsNCgl9DQoNCglwYWdldG9wKHNtZF9wcm9nbm9z dGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJv Z25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRzbWRfcHJvZ25vc3RpY3NfZmlsZXMgPSBhcnJh eSgpOw0KCWlmICgkY3MgPSBAZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsN CgkJZm9yZWFjaCAoJGNzIGFzICRjKSB7DQoJCQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTog XCgoLiopXCkkQCcsIHRyaW0oJGMpLCAkbSkpIHsNCgkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9 ICRtOw0KCQkJCWlmICgkbWQ1ICE9ICdOVUxMJykgew0KCQkJCQkkc21kX3Byb2dub3N0aWNz X2ZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkkbW9uY291bnQg PSBjb3VudCgkc21kX3Byb2dub3N0aWNzX2ZpbGVzKTsNCg0KCWlmICgkZmlsZWxpc3QpIHsN CgkJJGZpbGV6ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkZmlsZWxpc3QgYXMgJGtleSA9PiAk dmFsKSB7DQoJCQkkZmlsZXpbJHZhbF0gPSAkZmlsZWxpc3RbJGtleV07DQoJICAgfQ0KCQkk ZmlsZXNlbCA9IHNtZF9wcm9nbm9zdGljc19tdWx0aXNlbCgnc21kX3Byb2dub3N0aWNzX2Zp bGVzJywgJGZpbGV6LCAkc21kX3Byb2dub3N0aWNzX2ZpbGVzKTsNCgl9DQoJJHNob3dmaWxl cyA9IChpc3NldCgkZmlsZXNlbCkgJiYgJGZpbGVzZWwpOw0KDQoJZWNobyAkYnRuQ1NTLnN0 YXJ0VGFibGUoJ2xpc3QnKTsNCgllY2hvIHRyKHRkYShzdHJvbmcoc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NtZF9wcm9nbm9zdGljc190dGxfZmlsZXMnKSkpIC4gdGRhKCRidG5TZXR1cC4k YnRuQWNrLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvIHRyKHRkY3Moc21kX3By b2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19jdXJybW9uJywgYXJyYXkoJ3tjdXJy fScgPT4gJG1vbmNvdW50LCAne291dG9mfScgPT4gJGFsbGNvdW50KSkgLigoJHNob3dmaWxl cykgPyBici5ici4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19tb25m aWxlc19leHBsYWluJykgOiAnJyksIDEsIDQwMCkpOw0KCWVjaG8gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0 ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVzIj4nOw0KCWVjaG8gKCRzaG93ZmlsZXMpID8gdHIo dGRhKCRmaWxlc2VsKSkgOiB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9n bm9zdGljc19ub19maWxlcycpKSk7DQoJZWNobyB0cih0ZGEoZklucHV0KCdoaWRkZW4nLCAn c21kX3Byb2dub3N0aWNzX3N1cHByZXNzJywgMSkuJGJ0blNhdmUsICRidG5TdHlsZSkpOw0K CWVjaG8gdElucHV0KCk7DQoJZWNobyAnPC9mb3JtPic7DQoJZWNobyBlbmRUYWJsZSgpOw0K fQ0KDQovLyAtLS0tLS0tLS0tIFNldHVwIC8gcHJlZnMNCmZ1bmN0aW9uIHNtZF9wcm9nbm9z dGljc19zZXR1cCgkbXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQs ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zLCAkcHJlZnM7DQoNCgkkb3JpZ2xvYyA9IGdl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsIHJlYWxwYXRoKHR4cGF0aC5EUy4n Li4nLkRTKS5EUywgMSk7DQoJJG9yaWdleGMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2V4Y2x1ZGlyJywgJ2ltYWdlcywgZmlsZXMsIHRtcCcsIDEpOw0KCSRvcmlnZGlyID0gcnRy aW0oZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19kaXInLCByZWFscGF0aCh0eHBhdGgpLCAx KSwgRFMpOw0KCSRvcmlncGZ4ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgn LCAnJywgMSk7DQoNCgkkcHJlZmxpc3QgPSBhcnJheSgNCgkJJ3NtZF9wcm9nbm9zdGljc19j aGVja19mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19jaGVja19xdHknLA0KCQknc21kX3By b2dub3N0aWNzX2FsYXJtX2ZyZXEnLA0KCQknc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJl JywNCgkJJ3NtZF9wcm9nbm9zdGljc19tYWlsdG8nLA0KCQknc21kX3Byb2dub3N0aWNzX21h aWx0b19jc2knLA0KCQknc21kX3Byb2dub3N0aWNzX3VzZXJzJywNCgkJJ3NtZF9wcm9nbm9z dGljc19kaXInLA0KCQknc21kX3Byb2dub3N0aWNzX3ByZWZpeCcsDQoJCSdzbWRfcHJvZ25v c3RpY3NfbGlzdGxvYycsDQoJCSdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLA0KCQknc21k X3Byb2dub3N0aWNzX2lnbm9yZXMnLA0KCQknc21kX3Byb2dub3N0aWNzX2luamVjdF9zZW5z aXRpdml0eScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfeHNzJywNCgkJJ3NtZF9wcm9nbm9zdGlj c190eHBkaXInLA0KCSk7DQoJJHdhcm5sb2MgPSAnJzsNCgkkbm90aWZ5ID0gZ3BzKCdzbWRf cHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYScpOw0KCSRjaGZvciA9IGdwcygnc21kX3Byb2dub3N0 aWNzX2NoZWNrX2ZvcicpOw0KCSRyZXFzID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hl YWRlcnMnKTsNCgkkc3FsaW4gPSBncHMoJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0Jyk7 DQoJJHR3ZWVuID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbicpOw0KCSRy dGZvciA9IGdwcygnc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljcycpOw0KDQoJLy8gT25s eSBvbmUgb2YgdGhlc2UgdmFsaWQgc3RhdHVzIGNvZGVzIGlzIGFsbG93ZWQgdG8gYmUgdGhy b3duDQoJJHRocm93X2NvZGVzID0gYXJyYXkoDQoJCSdzbWRfbm8nID0+IGdUeHQoJ25vJyks DQoJCSdzbWRfYmxvY2snID0+IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3NfYmxvY2snKSwNCgkJJzIwMCcgPT4gJzIwMCBPSycsDQoJCSczMDEnID0+ICczMDEgTW92 ZWQgUGVybWFuZW50bHknLA0KCQknMzAyJyA9PiAnMzAyIEZvdW5kJywNCgkJJzMwNycgPT4g JzMwNyBUZW1wb3JhcnkgUmVkaXJlY3QnLA0KCQknNDAxJyA9PiAnNDAxIFVuYXV0aG9yaXpl ZCcsDQoJCSc0MDMnID0+ICc0MDMgRm9yYmlkZGVuJywNCgkJJzQwNCcgPT4gJzQwNCBOb3Qg Rm91bmQnLA0KCQknNDEwJyA9PiAnNDEwIEdvbmUnLA0KCQknNDE0JyA9PiAnNDE0IFJlcXVl c3QtVVJJIFRvbyBMb25nJywNCgkJJzUwMCcgPT4gJzUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJy b3InLA0KCQknNTAxJyA9PiAnNTAxIE5vdCBJbXBsZW1lbnRlZCcsDQoJKTsNCg0KCWlmICgh aXNfYXJyYXkoJHR3ZWVuKSkgew0KCQkkdHdlZW4gPSBhcnJheSgpOw0KCX0NCglmb3JlYWNo ICgkdHdlZW4gYXMgJGlkeCA9PiAkdmFsKSB7DQoJCWlmIChlbXB0eSgkdmFsKSkgew0KCQkJ JHR3ZWVuWyRpZHhdID0gKCRpZHg9PTApID8gJzAwOjAwJyA6ICcyMzo1OSc7DQoJCX0gZWxz ZSB7DQoJCQkkdGltZXBhcnRzID0gZG9fbGlzdCgkdmFsLCAnOicpOw0KCQkJZm9yZWFjaCAo JHRpbWVwYXJ0cyBhcyAkbnVtKSB7DQoJCQkJaWYgKCFpc19udW1lcmljKCRudW0pKSB7DQoJ CQkJCSR0d2VlblskaWR4XSA9ICgkaWR4PT0wKSA/ICcwMDowMCcgOiAnMjM6NTknOw0KCQkJ CQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkkc21kX3Byb2dub3N0aWNzX25v dGlmeV92aWEgPSBqb2luKCd8JywgKChpc19hcnJheSgkbm90aWZ5KSkgPyAkbm90aWZ5IDog YXJyYXkoJG5vdGlmeSkpKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciA9IGpvaW4o J3wnLCAoKGlzX2FycmF5KCRjaGZvcikpID8gJGNoZm9yIDogYXJyYXkoJGNoZm9yKSkpOw0K CSRzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMgPSBqb2luKCd8JywgKChpc19hcnJheSgk cmVxcykpID8gJHJlcXMgOiBhcnJheSgkcmVxcykpKTsNCgkkc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QgPSBqb2luKCd8JywgKChpc19hcnJheSgkc3FsaW4pKSA/ICRzcWxpbiA6IGFy cmF5KCRzcWxpbikpKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW4gPSBqb2lu KCd8JywgKChpc19hcnJheSgkdHdlZW4pKSA/ICR0d2VlbiA6IGFycmF5KCR0d2VlbikpKTsN Cgkkc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljcyA9IGpvaW4oJ3wnLCAoKGlzX2FycmF5 KCRydGZvcikpID8gJHJ0Zm9yIDogYXJyYXkoJHJ0Zm9yKSkpOw0KDQoJLy8gR3JhYiB0aGUg c2F2ZWQgcHJlZiB2YWx1ZXMgYW5kIHRhY2sgb24gdGhlIGFycmF5IGl0ZW0ocykNCglleHRy YWN0KGRvU2xhc2goZ3BzYShhcnJheV9tZXJnZShhcnJheSgnc3VibWl0JyksICRwcmVmbGlz dCkpKSk7DQoJJHByZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWEnOw0K CSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19jaGVja19mb3InOw0KCSRwcmVmbGlz dFtdID0gJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycyc7DQoJJHByZWZsaXN0W10gPSAn c21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9n bm9zdGljc19jaGVja19iZXR3ZWVuJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3Rp Y3NfcnRfZm9yZW5zaWNzJzsNCgkkc21kX3Byb2dub3N0aWNzX2RpciA9IHJ0cmltKCRzbWRf cHJvZ25vc3RpY3NfZGlyLCBEUyk7DQoNCglpZiAoJHN1Ym1pdCkgew0KCQlpZiAoKCRzbWRf cHJvZ25vc3RpY3NfZGlyICE9ICRvcmlnZGlyKSB8fCAoJHNtZF9wcm9nbm9zdGljc19wcmVm aXggIT0gJG9yaWdwZngpKSB7DQoJCQlpZiAoaXNfZGlyKCRzbWRfcHJvZ25vc3RpY3NfZGly KSAmJiBpc193cml0YWJsZSgkc21kX3Byb2dub3N0aWNzX2RpcikpIHsNCgkJCQkvLyBFdmVy eXRoaW5nIE9LIHNvIGRvIG5vdGhpbmcgZm9yIG5vdw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBJ Z25vcmUgbmV3IGRpciBhbmQgcmVzZXQgaXQgdG8gd2hhdCBpdCB3YXMgYmVmb3JlDQoJCQkJ JG1zZyA9IGFycmF5KHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nfbm90 X3dyaXRhYmxlJywgYXJyYXkoJ3tsb2NhdGlvbn0nID0+ICRzbWRfcHJvZ25vc3RpY3NfZGly KSksIEVfV0FSTklORyk7DQoJCQkJJHNtZF9wcm9nbm9zdGljc19kaXIgPSAkb3JpZ2RpcjsN CgkJCX0NCg0KCQkJLy8gUm9vbSBmb3IgbW9yZSBjb25maWcgZmlsZXMgYXMgYW5kIHdoZW4g dGhleSBhcmUgcmVxdWlyZWQNCgkJCSRmaWxlbGlzdFtdID0gJHNtZF9wcm9nbm9zdGljc19j aGVja3N1bXM7DQoNCgkJCWZvcmVhY2ggKCRmaWxlbGlzdCBhcyAkZmlsZSkgew0KCQkJCSRm aWxlbmFtZSA9ICRzbWRfcHJvZ25vc3RpY3NfcHJlZml4Lmx0cmltKGJhc2VuYW1lKCRmaWxl KSwgJG9yaWdwZngpOw0KCQkJCXJlbmFtZSgkZmlsZSwgcnRyaW0oJHNtZF9wcm9nbm9zdGlj c19kaXIsIERTKS5EUy4kZmlsZW5hbWUpOw0KCQkJfQ0KCQl9DQoNCgkJLy8gV3JpdGUgYWxs IHRoZSBwcmVmcw0KCQlmb3JlYWNoICgkcHJlZmxpc3QgYXMgJHByZWZ2YWwpIHsNCgkJCXNl dF9wcmVmKGRvU2xhc2goJHByZWZ2YWwpLCBkb1NsYXNoKCQkcHJlZnZhbCksICdzbWRfcHJv Z25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQl9DQoJCWlmICggKCRzbWRf cHJvZ25vc3RpY3NfbGlzdGxvYyAhPSAkb3JpZ2xvYykgfHwgKCRzbWRfcHJvZ25vc3RpY3Nf ZXhjbHVkaXIgIT0gJG9yaWdleGMpICkgew0KCQkJJG1zZyA9IGFycmF5KHNtZF9wcm9nbm9z dGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nfd2Fybl9sb2MnKSwgRV9XQVJOSU5HKTsNCgkJ fQ0KCQlpZiAoISRtc2cpIHsNCgkJCSRtc2cgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcp Ow0KCQl9DQoJfQ0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2du b3N0aWNzJyksICRtc2cpOw0KDQoJJHNtZF9wcm9nbm9zdGljc19kaXIgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCwgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19w cmVmaXggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3ByZWZpeCcsICcnLCAxKTsNCgkk c21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf Y2hlY2tfZm9yJywgJ2RlbGV0ZXxtb2RpZnknLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2No ZWNrX3doZXJlID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScsICdh ZG1pbicsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcSA9IGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcScsIDEwLCAxKTsNCgkkc21kX3Byb2dub3N0aWNz X2NoZWNrX2JldHdlZW4gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdl ZW4nLCAnMDA6MDB8MjM6NTknLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eSA9 IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywgJzMwJywgMSk7DQoJJHNt ZF9wcm9nbm9zdGljc19hbGFybV9mcmVxID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19h bGFybV9mcmVxJywgODY0MDAsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSA9 IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYScsICcnLCAxKTsNCgkkc21k X3Byb2dub3N0aWNzX21haWx0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRv JywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaSA9IGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNz X3VzZXJzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc191c2VycycsICcnLCAxKTsNCgkk c21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xp c3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUykuRFMsIDEpOw0KCSRzbWRfcHJv Z25vc3RpY3NfZXhjbHVkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGly JywgJ2ltYWdlcywgZmlsZXMsIHRtcCcsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfaWdub3Jl cyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3JlcycsICdlcnJvcl9sb2cnLCAx KTsNCgkkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzID0gZ2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc19yZXFfaGVhZGVycycsICdUUkFDRXxQVVR8REVMRVRFJywgMSk7DQoJJHNtZF9w cm9nbm9zdGljc19zcWxfaW5qZWN0ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zcWxf aW5qZWN0JywgJzB8JywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19pbmplY3Rfc2Vuc2l0aXZp dHkgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2luamVjdF9zZW5zaXRpdml0eScsIDEs IDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfeHNzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c194c3MnLCAwLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljcyA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzJywgJzF8MScsIDEpOw0KCSRzbWRf cHJvZ25vc3RpY3NfdHhwZGlyID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc190eHBkaXIn LCBodS5zbWRfcHJvZ25vc3RpY3NfZ3Vlc3NfYWRtaW5fZGlyKCksIDEpOw0KDQoJZXh0cmFj dChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRhZGRzID0gKHN0cnBvcygkc21k X3Byb2dub3N0aWNzX2NoZWNrX2ZvciwgJ2FkZCcpICE9PSBmYWxzZSk7DQoJJGRlbHMgPSAo c3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yLCAnZGVsZXRlJykgIT09IGZhbHNl KTsNCgkkbW9kcyA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19jaGVja19mb3IsICdtb2Rp ZnknKSAhPT0gZmFsc2UpOw0KCSRyaF90cmFjZSA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGlj c19yZXFfaGVhZGVycywgJ1RSQUNFJykgIT09IGZhbHNlKTsNCgkkcmhfcHV0ID0gKHN0cnBv cygkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzLCAnUFVUJykgIT09IGZhbHNlKTsNCgkk cmhfZGVsID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzLCAnREVMRVRF JykgIT09IGZhbHNlKTsNCgkkcnRfaGRyID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX3J0 X2ZvcmVuc2ljcywgJ2hkcicpICE9PSBmYWxzZSk7DQoJJHJ0X3NxbCA9IChzdHJwb3MoJHNt ZF9wcm9nbm9zdGljc19ydF9mb3JlbnNpY3MsICdzcWwnKSAhPT0gZmFsc2UpOw0KCSR0d2Vl bnMgPSBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbiwgJ3wnKTsNCgkk dGhyb3dzID0gZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QsICd8Jyk7DQoJ JGhlbHBMaW5rID0gIj9ldmVudD1wbHVnaW4mc3RlcD1wbHVnaW5faGVscCZuYW1lPSRzbWRf cHJvZ25vc3RpY3NfZXZlbnQjc21kX3NldHVwIjsNCg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRh YmxlKCdsaXN0JywgJycsICdzbWRfcHJvZ25vc3RpY3Nfc2V0dXAnKTsNCgllY2hvIHRyKHRk Y3Moc3Ryb25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfdHRsX3Nl dHVwJykpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfaGVscF9s aW5rJywgYXJyYXkoJ3tsaW5rfScgPT4gJGhlbHBMaW5rKSksIDIpIC4gdGRhKCRidG5GaWxl cy4kYnRuQWNrLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvICc8Zm9ybSBtZXRo b2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMz ODtzdGVwPXNtZF9wcm9nbm9zdGljc19zZXR1cCI+JzsNCgllY2hvIHRyKHRkY3MoaGVkKHNt ZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfdHRsX21vbm9wdHMnKSwgMykg LDIpKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9n bm9zdGljc19jaGVja193aGVyZScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShy YWRpb1NldCgNCgkJCWFycmF5KA0KCQkJCSdhZG1pbicgPT4gZ1R4dCgnbm8nKSwNCgkJCQkn YWRtaW58cHVibGljJyA9PiBnVHh0KCd5ZXMnKQ0KCQkJKSwgJ3NtZF9wcm9nbm9zdGljc19j aGVja193aGVyZScsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUpLCAnIGlkPSJzbWRf cHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUiJykNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnKSwgJyBjbGFz cz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGlj c19jaGVja19mcmVxJywgJHNtZF9wcm9nbm9zdGljc19jaGVja19mcmVxLCAnJywnJywnJywx NSkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19zZWNvbmRzJykp DQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9n bm9zdGljc19jaGVja19iZXR3ZWVuJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRh KA0KCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuW10n LCAkdHdlZW5zWzBdLCAnJywnJywnJywxNSkuDQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c21kX3Byb2dub3N0aWNzX2FuZCcpLg0KCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9z dGljc19jaGVja19iZXR3ZWVuW10nLCAkdHdlZW5zWzFdLCAnJywnJywnJywxNSkuc3Auc21k X3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19obXMnKQ0KCQkpDQoJKTsNCgll Y2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19j aGVja19xdHknKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0 JywgJ3NtZF9wcm9nbm9zdGljc19jaGVja19xdHknLCAkc21kX3Byb2dub3N0aWNzX2NoZWNr X3F0eSwgJycsJycsJycsMTUpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9z dGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScpLCAnIGNsYXNzPSJzbWRf bGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2FsYXJt X2ZyZXEnLCAkc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEsICcnLCcnLCcnLDE1KS5zcC5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3NlY29uZHMnKSkNCgkpOw0K CWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNz X25vdGlmeV92aWEnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQljaGVj a2JveCgnc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWFbXScsICd0eHAnLCBzdHJwb3MoJHNt ZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhLCAndHhwJykgIT09IGZhbHNlKSAuDQoJCQknPGxh YmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdHhw JykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3Zp YVtdJywgJ2VtYWlsJywgc3RycG9zKCRzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYSwgJ2Vt YWlsJykgIT09IGZhbHNlKS4NCgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c21kX3Byb2dub3N0aWNzX25vdGlmeV9lbWFpbCcpLic8L2xhYmVsPicNCgkJKQ0KCSk7DQoJ ZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nf bWFpbHRvJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcs ICdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJHNtZF9wcm9nbm9zdGljc19tYWlsdG8sICcn LCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2Nz dicpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRf cHJvZ25vc3RpY3NfbWFpbHRvX2NzaScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRk YShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX21haWx0b19jc2knLCAkc21kX3By b2dub3N0aWNzX21haWx0b19jc2ksICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnc21kX3Byb2dub3N0aWNzX2NzdicpKQ0KCSk7DQoJZWNobyB0cih0ZGNzKGhlZChz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3R0bF9yZWFsb3B0cycpLCAz KSwgMikpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3By b2dub3N0aWNzX3JlcV9oZWFkZXJzJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRh KA0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVyc1tdJywgJ1RSQUNF JywgJHJoX3RyYWNlKS4NCgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21k X3Byb2dub3N0aWNzX3JoX3RyYWNlJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRf cHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdQVVQnLCAkcmhfcHV0KS4NCgkJCSc8bGFi ZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3JoX3B1dCcpLic8 L2xhYmVsPicuDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzW10n LCAnREVMRVRFJywgJHJoX2RlbCkuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljc19yaF9kZWwnKS4nPC9sYWJlbD4nDQoJCSkNCgkpOw0KCWVj aG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQlzZWxlY3RJ bnB1dCgnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3RbXScsICR0aHJvd19jb2RlcywgJHRo cm93c1swXSwgMCkuDQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNz X3dpdGgnKS4NCgkJCWZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3Nfc3FsX2luamVj dFtdJywgJHRocm93c1sxXSwgJycsJycsJycsNjApLmJyLg0KCQkJc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NtZF9wcm9nbm9zdGljc19zZW5zaXRpdml0eScpLg0KCQkJZklucHV0KCd0ZXh0 JywgJ3NtZF9wcm9nbm9zdGljc19pbmplY3Rfc2Vuc2l0aXZpdHknLCAkc21kX3Byb2dub3N0 aWNzX2luamVjdF9zZW5zaXRpdml0eSwgJycsJycsJycsNSkuc3Auc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NtZF9wcm9nbm9zdGljc19zZW5zaXRpdml0eV9leHBsYWluJykuYnIuDQoJCQlz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3hzcycpLg0KCQkJeWVzbm9S YWRpbygnc21kX3Byb2dub3N0aWNzX3hzcycsICRzbWRfcHJvZ25vc3RpY3NfeHNzKS5zcC5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3hzc19leHBsYWluJykNCgkJ KQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJv Z25vc3RpY3Nfc2VuZF9mb3JlbnNpY3MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0 ZGEoDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljc1tdJywgJ2hk cicsICRydF9oZHIpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRf cHJvZ25vc3RpY3NfcnRfaGRyJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJv Z25vc3RpY3NfcnRfZm9yZW5zaWNzW10nLCAnc3FsJywgJHJ0X3NxbCkuDQoJCQknPGxhYmVs Picuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19ydF9zcWwnKS4nPC9s YWJlbD4nDQoJCSkNCgkpOw0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljc190dGxfZmlsZW9wdHMnKSwgMyksIDIpKTsNCgllY2hvIHRy KA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19jaGVja19m b3InKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21k X3Byb2dub3N0aWNzX2NoZWNrX2ZvcltdJywgJ2FkZCcsICRhZGRzKSAuDQoJCQknPGxhYmVs Picuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19jaF9hZGQnKS4nPC9s YWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGljc19jaGVja19mb3JbXScsICdk ZWxldGUnLCAkZGVscykuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Nt ZF9wcm9nbm9zdGljc19jaF9kZWwnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9w cm9nbm9zdGljc19jaGVja19mb3JbXScsICdtb2RpZnknLCAkbW9kcykuDQoJCQknPGxhYmVs Picuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19jaF9tb2QnKS4nPC9s YWJlbD4nDQoJCSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0K CQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19saXN0bG9jJywgJHNtZF9w cm9nbm9zdGljc19saXN0bG9jLCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dU eHQoJ3NtZF9wcm9nbm9zdGljc19jc3YnKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyJyksICcgY2xhc3M9 InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3Nf ZXhjbHVkaXInLCAkc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyLCAnJywnJywnJyw2MCkuc3Au c21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19jc3YnKSkNCgkpOw0KCWVj aG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2ln bm9yZXMnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0Jywg J3NtZF9wcm9nbm9zdGljc19pZ25vcmVzJywgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzLCAn JywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19j c3YnKSkNCgkpOw0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Nt ZF9wcm9nbm9zdGljc190dGxfcGx1Z29wdHMnKSwgMyksIDIpKTsNCgllY2hvIHRyKA0KCQl0 ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19hdXRoX3VzZXJzJyks ICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJv Z25vc3RpY3NfdXNlcnMnLCAkc21kX3Byb2dub3N0aWNzX3VzZXJzLCAnJywnJywnJyw2MCku c3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19jc3YnKS5zcC5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2NzZW5zZScpKQ0KCSk7DQoJZWNo byB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfdHhw ZGlyJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdz bWRfcHJvZ25vc3RpY3NfdHhwZGlyJywgJHNtZF9wcm9nbm9zdGljc190eHBkaXIsICcnLCcn LCcnLDYwKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn c21kX3Byb2dub3N0aWNzX3Byb2dsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0 ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19kaXInLCAkc21kX3Byb2dub3N0 aWNzX2RpciwgJycsJycsJycsNjApKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9n bm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfcHJvZ3BmeCcpLCAnIGNsYXNzPSJzbWRf bGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX3ByZWZp eCcsICRzbWRfcHJvZ25vc3RpY3NfcHJlZml4LCAnJywnJywnJyw2MCkpDQoJKTsNCgllY2hv IHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7DQoJZWNobyB0SW5wdXQoKTsNCgllY2hv ICc8L2Zvcm0+JzsNCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0gIFNl Y3VyaXR5IGFkdmljZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2FkdmljZSgkbXNnPScn KSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25vc3RpY3Nf c3R5bGUsICRwcmVmczsNCglyZXF1aXJlX29uY2UgdHhwYXRoLicvbGliL0lYUkNsYXNzLnBo cCc7DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Mn KSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCSRj aGVja3MgPSBhcnJheSgpOw0KDQoJLy8gUHJvZ25vc3RpY3MgZGlyIGluIGRvY3Jvb3Q/DQoJ aWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCksICRw cmVmc1sncGF0aF90b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10gPSBzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2RvY3Jvb3RfcHJvZ25vc3RpY3Mn KTsNCgl9DQoNCgkvLyBTZXR1cCBzdGlsbCBleGlzdHM/DQoJaWYgKEBpc19kaXIodHhwYXRo IC4gRFMuICdzZXR1cCcpKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0 KCdzbWRfcHJvZ25vc3RpY3Nfc2V0dXBfZXhpc3RzJyk7DQoJfQ0KDQoJLy8gUlBDIHN0aWxs IGV4aXN0cz8NCglpZiAoICgkcHJlZnNbJ2VuYWJsZV94bWxycGNfc2VydmVyJ10gPT0gMCkg JiYgKEBpc19kaXIocmVhbHBhdGgodHhwYXRoLkRTLicuLicuRFMuICdycGMnKSkpICkgew0K CQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3Jw Y19leGlzdHMnKTsNCgl9DQoNCgkvLyBOZXcgVHhwIHZlcnNpb24vYnJhbmNoIGF2YWlsYWJs ZT8gQWRhcHRlZCBmcm9tIHR4cGxpYl91cGRhdGUucGhwDQoJJGNsaWVudCA9IG5ldyBJWFJf Q2xpZW50KCdodHRwOi8vcnBjLnRleHRwYXR0ZXJuLmNvbScpOw0KCSR1aWQgPSBnZXRfcHJl ZignYmxvZ191aWQnLCBtZDUodW5pcWlkKG10X3JhbmQoKSx0cnVlKSkpOw0KCWlmICgkY2xp ZW50LT5xdWVyeSgndHVwcy5nZXRUWFBWZXJzaW9uJywkdWlkKSkgew0KCQkkcmVzcG9uc2Ug PSAkY2xpZW50LT5nZXRSZXNwb25zZSgpOw0KDQoJCWlmIChpc19hcnJheSgkcmVzcG9uc2Up KSB7DQoJCQlrc29ydCgkcmVzcG9uc2UpOw0KCQkJJHZlcnNpb24gPSBnZXRfcHJlZigndmVy c2lvbicsICcnKTsNCgkJCSRsdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCR2ZXJzaW9uKTsNCgkJ CSRicmFuY2ggPSBzdWJzdHIoJHZlcnNpb24sMCwzKTsNCg0KCQkJZm9yZWFjaCAoJHJlc3Bv bnNlIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRydmVyc2lvbiA9IGV4cGxvZGUoJy4nLCR2 YWwpOw0KCQkJCWlmICgka2V5ID09ICd0eHBfY3VycmVudF92ZXJzaW9uXycuJGJyYW5jaCkg ew0KCQkJCQlpZiAoaXNzZXQoJGx2ZXJzaW9uWzJdKSAmJiBpc3NldCgkcnZlcnNpb25bMl0p ICYmIChpbnR2YWwoJHJ2ZXJzaW9uWzJdKT5pbnR2YWwoJGx2ZXJzaW9uWzJdKSkpIHsNCgkJ CQkJCSRtb3N0X3JlY2VudCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3Rp Y3NfYXZhaWxfYnJhbmNoJykuJzogJy4kdmFsOw0KCQkJCQl9DQoJCQkJfSBlbHNlIHsNCgkJ CQkJaWYgKGludHZhbCgkcnZlcnNpb25bMF0pPmludHZhbCgkbHZlcnNpb25bMF0pIHx8IGlu dHZhbCgkcnZlcnNpb25bMV0pPmludHZhbCgkbHZlcnNpb25bMV0pKSB7DQoJCQkJCQkkbW9z dF9yZWNlbnQgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX2F2YWls X3R4cCcpLic6ICcuJHZhbDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmIChpc3NldCgk bW9zdF9yZWNlbnQpKSB7DQoJCQkJJGNoZWNrc1tdID0gJG1vc3RfcmVjZW50Ow0KCQkJfQ0K CQl9DQoJfQ0KDQoJLy8gRmlsZXMgZGlyIGluIGRvY3Jvb3Q/DQoJaWYgKHN0cnBvcygkcHJl ZnNbJ2ZpbGVfYmFzZV9wYXRoJ10sICRwcmVmc1sncGF0aF90b19zaXRlJ10pICE9PSBmYWxz ZSkgew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0 aWNzX2RvY3Jvb3RfZmlsZXMnKTsNCgl9DQoNCgkvLyBUbXAgZGlyIGluIGRvY3Jvb3Q/DQoJ aWYgKHN0cnBvcygkcHJlZnNbJ3RlbXBkaXInXSwgJHByZWZzWydwYXRoX3RvX3NpdGUnXSkg IT09IGZhbHNlKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRf cHJvZ25vc3RpY3NfZG9jcm9vdF90bXAnKTsNCgl9DQoNCi8qDQoJLy8gVE9ETzogY2hlY2sg d2hhdCBTSE9XIEdSQU5UUyByZXR1cm5zIGFuZCBkZXRlcm1pbmUgaWYgaXQgY291bGQgYmUg YSBzZWN1cml0eSByaXNrDQoJJHJlcyA9IHNhZmVfcXVlcnkoJ1NIT1cgR1JBTlRTJyk7DQoJ aWYgKG51bVJvd3MoJHJlcykgPiAwKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nfc2hvd19ncmFudHMnKTsNCgl9DQoqLw0KDQoJLy8g RG9lcyB0aGlzIE15U1FMIHVzZXIgaGF2ZSBGSUxFUyBwcml2cz8NCgkkcmFuZGZpbGUgPSAk cHJlZnNbJ3RlbXBkaXInXS5EUy5yYW5kKCkudGltZSgpLicuc3FsJzsNCgkkcmVzID0gQHNh ZmVfcXVlcnkoJ1NFTEVDVCBpZCBJTlRPIE9VVEZJTEUgIicuJHJhbmRmaWxlLiciIEZJRUxE UyBURVJNSU5BVEVEIEJZICJcdCIgTElORVMgVEVSTUlOQVRFRCBCWSAiXG4iIEZST00gdHhw X2ltYWdlIFdIRVJFIDEgTElNSVQgMScpOw0KCWlmIChteXNxbF9lcnJvcigpID09ICcnKSB7 DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nf c3FsX2ZpbGVfcHJpdnMnKTsNCgkJaWYgKGlzX2ZpbGUoJHJhbmRmaWxlKSkgew0KCQkJQHVu bGluaygkcmFuZGZpbGUpOw0KCQl9DQoJfQ0KDQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQv Y3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ2FkdmljZSddLiRzbWRfcHJvZ25vc3Rp Y3Nfc3R5bGVbJ3NldHVwJ10uJzwvc3R5bGU+Jy5zdGFydFRhYmxlKCdsaXN0JywgJycsICdz bWRfcHJvZ19hZHZpY2UnKTsNCgllY2hvIHRyKHRkYShzdHJvbmcoc21kX3Byb2dub3N0aWNz X2dUeHQoJ3NtZF9wcm9nbm9zdGljc190dGxfYWR2aWNlJykpKSAuIHRkYSgkYnRuU2V0dXAu JGJ0bkZpbGVzLiRidG5BY2ssICRidG5TdHlsZSkgKTsNCglpZiAoJGNoZWNrcykgew0KCQlm b3JlYWNoKCRjaGVja3MgYXMgJGNoZWNrKSB7DQoJCQllY2hvIHRyKHRkYSgkY2hlY2spKTsN CgkJfQ0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdz bWRfcHJvZ25vc3RpY3NfdGlnaHQnKSkpOw0KCX0NCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoN Ci8vIC0tLS0tLS0tLS0gSGFzaCB0aGUgaGFzaGZpbGUNCmZ1bmN0aW9uIHNtZF9wcm9nbm9z dGljc19zZWxmX2hhc2goKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1z Ow0KDQoJaWYgKGZpbGVfZXhpc3RzKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSkgew0K CQkkY29udGVudCA9IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJHNtZF9wcm9nbm9zdGlj c19jaGVja3N1bXMpOw0KCQkkaGFzaCA9IG1kNSgkY29udGVudCk7DQoJfSBlbHNlIHsNCgkJ JGhhc2ggPSBOVUxMOw0KCX0NCglzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3N1bWhhc2gn LCAkaGFzaCwgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQp9 DQoNCi8vIC0tLS0tLS0tLS0gQ29tcGlsZSBsaXN0IG9mIGZpbGVzIHRvIG1vbml0b3INCmZ1 bmN0aW9uIHNtZF9wcm9nbm9zdGljc19yZWFkZmlsZXMoKSB7DQoJJGZpbGVsaXN0ID0gYXJy YXkoKTsNCg0KCSRzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYyA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3NfbGlzdGxvYycsICcnKTsNCgkkZXhjbHVkZXMgPSBzbWRfcHJvZ25vc3RpY3Nf aWdub3JlX2xpc3QoKTsNCg0KCWlmICgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MpIHsNCgkJ Zm9yZWFjaCAoZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MpIGFzICRsb2MpIHsN CgkJCS8vIE5PVEU6IG5vdCB1c2luZyBHTE9CX0JSQUNFIHRvIGdyYWIgcmVndWxhciBhbmQg ZG90IGZpbGVzLCBzaW5jZSBpdCdzIG5vdCBhbHdheXMgYXZhaWxhYmxlIGNyb3NzLU9TDQoJ CQkkZmlsZWxpc3QgPSBhcnJheV9tZXJnZSgkZmlsZWxpc3QsIHNtZF9wcm9nbm9zdGljc19y Z2xvYigiKiIsIEdMT0JfTUFSSywgJGxvYywgJGV4Y2x1ZGVzKSwgc21kX3Byb2dub3N0aWNz X3JnbG9iKCIuKiIsIEdMT0JfTUFSSywgJGxvYywgJGV4Y2x1ZGVzKSk7DQoJCX0NCgl9DQoJ cmV0dXJuICRmaWxlbGlzdDsNCn0NCg0KLy8gLS0tLS0tLS0tLSBQcmVwYXJlIGZpbGUgY29u dGVudHMgZm9yIG1kNS4gQXNzdW1lcyBmaWxlIGV4aXN0cw0KLy8gQ2hlY2tzIHRvIHNlZSBp ZiBsYXJnZSBmaWxlcyBhcmUgYmluYXJ5IGJlZm9yZSB3YXN0aW5nIHRpbWUgc3RyaXBwaW5n IG5ld2xpbmVzIGFuZCBzdHVmZg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3ByZXBfZmls ZSgkZmlsZSkgew0KCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOw0KCSRz dGF0ID0gc3RhdCgkZmlsZSk7DQoJJGRvc3RyaXAgPSB0cnVlOw0KCS8vIFBlcmZvcm0gdGhl IHN0cmlwIHJlZ2FyZGxlc3Mgb24gZmlsZXMgPCAxS2IgYXMgaXQgaGFzIGxpdHRsZSBpbXBh Y3QNCglpZiAoJHN0YXRbJ3NpemUnXSA+IDEwMjQwMDApIHsNCgkJJHBhcnQgPSBzdWJzdHIo JGNvbnRlbnQsIDAsIDE1MzYwMDApOyAvLyBGaXJzdCAxLjVLQg0KCQlpZiAoc3RycG9zKCRw YXJ0LCAweDAwKSB8fCAoc3RycG9zKCRwYXJ0LCAweDBEKSAhPT0gZmFsc2UpIHx8IChzdHJw b3MoJHBhcnQsIDB4MEEpICE9PSBmYWxzZSkpIHsNCgkJCS8vIExpa2VseSBhIGJpbmFyeSBm aWxlOiBsZWF2ZSBpdCBiZQ0KCQkJJGRvc3RyaXAgPSBmYWxzZTsNCgkJfQ0KCX0NCglpZiAo JGRvc3RyaXApIHsNCgkJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgiXHJcbiIsICJc JEhlYWRVUkw6IGh0dHA6IiksIGFycmF5KCJcbiIsICJcJEhlYWRVUkw6IGh0dHBzOiIpLCAk Y29udGVudCk7DQoJfQ0KCXJldHVybiAkY29udGVudDsNCn0NCg0KLy8gLS0tLS0tLS0tLSBQ cmUtY29tcHV0ZSBleGNsdWRlZCBmaWxlcyBhbmQgZGlycywgZXhwYW5kaW5nIHdpbGRjYXJk cyBpbiB0aGUgcHJvY2Vzcw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2lnbm9yZV9saXN0 KCkgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0KCSRleGNsID0g ZG9fbGlzdChnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyJywgJycpKTsNCgkk aWduID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19pZ25vcmVzJywgJycpOw0KDQoJLy8g QWRkIGFueSBmaWxlcyB0byBwZXJtYW5lbnRseSBleGNsdWRlIGhlcmUgKE5PVCBkaXJzOiB0 aGV5J3JlIGlnbm9yZWQgYXV0b21hdGljYWxseSkNCgkkaWduYXJyID0gKCRpZ24pID8gZG9f bGlzdCgkaWduKSA6IGFycmF5KCk7DQoNCgkvLyBFeHBhbmQgYW55IHdpbGRjYXJkIGZpbGVu YW1lcw0KCSRyZWdhcnIgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRpZ25hcnIgYXMgJGlkeCA9 PiAkaXRlbSkgew0KCQlpZiAoIChzdHJwb3MoJGl0ZW0sICcqJykgIT09IGZhbHNlKSB8fCAo c3RycG9zKCRpdGVtLCAnPycpICE9PSBmYWxzZSkgKSB7DQoJCQkkcmVnYXJyW10gPSBzdHJf cmVwbGFjZSggYXJyYXkoIlwqIiwgIlw/IiksIGFycmF5KCIuKiIsICIuIiksIHByZWdfcXVv dGUoJGl0ZW0pICk7DQoJCQl1bnNldCgkaWduYXJyWyRpZHhdKTsgLy8gUmVtb3ZlIHRoZSB3 aWxkY2FyZCBmaWxlbmFtZSBmcm9tIHRoZSBpZ25vcmUgbGlzdA0KCQl9DQoJfQ0KCSRyZWdl eGNsdWRlID0gKCRyZWdhcnIpID8gJy9eKCcgLiBqb2luKCd8JywgJHJlZ2FycikgLiAnKSQv JyA6ICcnOw0KCSRwZXJtZXhjbHVkZSA9IGFycmF5X21lcmdlKGFycmF5KGJhc2VuYW1lKCRz bWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSksICRpZ25hcnIpOw0KDQoJcmV0dXJuIGFycmF5 KCRleGNsLCAkcmVnZXhjbHVkZSwgJHBlcm1leGNsdWRlKTsNCn0NCg0KLy8gRnJhbmtlbnN0 ZWluZWQgZnJvbSBodHRwOi8vc25pcHBsci5jb20vdmlldy8xNjIzMy9yZWN1cnNpdmUtZ2xv Yi8NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19yZ2xvYigkcGF0dGVybiwgJGZsYWdzPTAs ICRwYXRoPScnLCAkZXhjbHVkZXMgPSBhcnJheSgpLCAkZXhjbD1hcnJheSgpLCAkaWduPScn KSB7DQoJaWYgKCEkcGF0aCAmJiAoJGRpciA9IGRpcm5hbWUoJHBhdHRlcm4pKSAhPSAnLicp IHsNCgkJaWYgKCRkaXIgPT0gJ1xcJyB8fCAkZGlyID09IERTKSAkZGlyID0gJyc7DQoJCXJl dHVybiAoYXJyYXkpc21kX3Byb2dub3N0aWNzX3JnbG9iKGJhc2VuYW1lKCRwYXR0ZXJuKSwg JGZsYWdzLCAkZGlyIC4gRFMsICRleGNsdWRlcyk7DQoJfQ0KCSRwYXRocyA9IGdsb2IoJHBh dGggLiAnKicsIEdMT0JfT05MWURJUiB8IEdMT0JfTk9TT1JUKTsNCgkkZmlsZXMgPSBnbG9i KCRwYXRoIC4gJHBhdHRlcm4sICRmbGFncyk7DQoNCglpZiAoaXNfYXJyYXkoJHBhdGhzKSkg ew0KCQlmb3JlYWNoICgkcGF0aHMgYXMgJHApIHsNCgkJCSRwaW5mbyA9IGFycmF5X3BvcChl eHBsb2RlKERTLCAkcCkpOw0KCQkJaWYgKCFpbl9hcnJheSgkcGluZm8sICRleGNsdWRlc1sw XSkpIHsNCgkJCQkkZmlsZXMgPSBhcnJheV9tZXJnZSgoYXJyYXkpJGZpbGVzLCAoYXJyYXkp c21kX3Byb2dub3N0aWNzX3JnbG9iKCRwYXR0ZXJuLCAkZmxhZ3MsICRwIC4gRFMsICRleGNs dWRlcykpOw0KCQkJCWZvcmVhY2goJGZpbGVzIGFzICRpZHggPT4gJHRoZUZpbGUpIHsNCgkJ CQkJJGZleCA9IGFycmF5X3BvcChleHBsb2RlKERTLCAkdGhlRmlsZSkpOw0KCQkJCQkkcmV4 ID0gKCRleGNsdWRlc1sxXSkgPyBwcmVnX21hdGNoKCRleGNsdWRlc1sxXSwgJGZleCkgOiBm YWxzZTsNCgkJCQkJaWYoJGZleD09JycgfHwgaW5fYXJyYXkoJGZleCwgJGV4Y2x1ZGVzWzJd KSB8fCAkcmV4KSB7DQoJCQkJCQl1bnNldCgkZmlsZXNbJGlkeF0pOw0KCQkJCQl9DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiAkZmlsZXM7DQp9DQoNCi8vIEZvcm1hdCBmb3Jl bnNpYyBkYXRhIGZvciBhIGZpbGUNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19mb3JlbnNp Y19vdXRwdXQoJGZpbGUsICRmaSkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCgkkZGZvcm0gPSAk cHJlZnNbJ2RhdGVmb3JtYXQnXTsNCgkkc2VwID0gbjsNCgkkb3V0ID0gJyc7DQoNCgkkb3V0 IC49ICRzZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3N0YXRf bmFtZScpIC4gJGZpbGU7DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQo J3NtZF9wcm9nbm9zdGljc19zdGF0X3NpemUnKSAuICRmaVsnc2l6ZSddOw0KCSRvdXQgLj0g JHNlcCAuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Nfc3RhdF9tb2Qn KSAuIHN0cmZ0aW1lKCRkZm9ybSwgJGZpWydtdGltZSddKTsNCgkkb3V0IC49ICRzZXAgLiBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3N0YXRfdWlkJykgLiAkZmlb J3VpZCddOw0KCSRvdXQgLj0gJHNlcCAuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJv Z25vc3RpY3Nfc3RhdF9naWQnKSAuICRmaVsnZ2lkJ107DQoNCglyZXR1cm4gJG91dDsNCn0N Cg0KLy8gLS0tLS0tLS0tLSBEb2VzIHdoYXQgaXQgc2F5cyBvbiB0aGUgdGluDQovLyBBc3N1 bWVzICd0ZXh0cGF0dGVybicgaXMgdGhlIGFkbWluLXNpZGUgZGlyZWN0b3J5IGlmIHNlcnZl ciB2YXIgbm90IHNldC4gTXVzdCBmaXggaW4gY29yZSBvbmUgZGF5IHdpdGggdHJ1ZSBjb25z dGFudA0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2d1ZXNzX2FkbWluX2RpcigpIHsNCgkk YWRtaW5kaXIgPSB0cmltKGRpcm5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pLCAnL1xcJyk7 DQoJJGFkbWluZGlyID0gKGVtcHR5KCRhZG1pbmRpcikpID8gJ3RleHRwYXR0ZXJuJyA6ICRh ZG1pbmRpcjsNCglyZXR1cm4gJGFkbWluZGlyOw0KfQ0KDQovLyAtLS0tLS0tLS0tIEdldCBj b21tb24gc2VydmVyIGluZm8gZm9yIG1haWwgaGVhZGVycywgZXRjDQpmdW5jdGlvbiBzbWRf cHJvZ25vc3RpY3NfaGVhZGVyX2luZm8oJGZyb21uYW1lKSB7DQoJJGRvbWFpbnBhcnRzID0g ZG9fbGlzdChkb1N0cmlwKHNlcnZlclNldCgnU0VSVkVSX05BTUUnKSksICcuJyk7DQoJJG51 bXBhcnRzID0gY291bnQoJGRvbWFpbnBhcnRzKTsNCgkkZG9tYWluID0gJGRvbWFpbnBhcnRz WyRudW1wYXJ0cy0yXSAuICcuJyAuICRkb21haW5wYXJ0c1skbnVtcGFydHMtMV07DQoJJHJl cGx5X3RvID0gJ25vcmVwbHlAJy4kZG9tYWluOw0KCSR0eHBkaXIgPSBnZXRfcHJlZignc21k X3Byb2dub3N0aWNzX3R4cGRpcicsIGh1LnNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1pbl9k aXIoKSk7DQoJJHNlcCA9IGlzX3dpbmRvd3MoKSA/ICJcclxuIiA6ICJcbiI7DQoJJGhlYWRl cnMgPSAiRnJvbTogJGZyb21uYW1lIDwkcmVwbHlfdG8+Ii4NCgkJJHNlcC4nUmVwbHktVG86 ICcuJHJlcGx5X3RvLg0KCQkkc2VwLidYLU1haWxlcjogVGV4dHBhdHRlcm4nLg0KCQkkc2Vw LidDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0Jy4NCgkJJHNlcC4nQ29udGVudC1U eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCInLg0KCQkkc2VwOw0KDQoJJG91dCA9 IGFycmF5KA0KCQknZG9tYWluJyA9PiAkZG9tYWluLA0KCQkncmVwbHlfdG8nID0+ICRyZXBs eV90bywNCgkJJ3R4cGRpcicgPT4gJHR4cGRpciwNCgkJJ3NlcCcgPT4gJHNlcCwNCgkJJ2hl YWRlcnMnID0+ICRoZWFkZXJzLA0KCSk7DQoNCglyZXR1cm4gJG91dDsNCn0NCg0KLy8gQ29t bW9uIGJ1dHRvbnMNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19idXR0b25zKCkgew0KCWds b2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlOw0K DQoJJHJldCA9IGFycmF5ICgNCgkJJ2J0blNhdmUnID0+IGZJbnB1dCgnc3VibWl0JywgJ3N1 Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bkFjaycgPT4gJzxmb3Jt IG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50 LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2FjayYjMzg7c21kX3Byb2dub3N0aWNzX3N1 cHByZXNzPTEiPicuZklucHV0KCdzdWJtaXQnLCAnc3dpdGNoX2FsYXJtcycsIHNtZF9wcm9n bm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfcG5sX2FjaycpLCAnc21hbGxlcmJveCcp Lic8L2Zvcm0+JywNCgkJJ2J0bkFja0l0JyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQn LCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3BubF9hY2tpdCcpLCAn cHVibGlzaCcpLA0KCQknYnRuSWdub3JlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdpZ25vcmUn LCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzX3BubF9pZ25vcmUnKSwg J3B1Ymxpc2gnKSwNCgkJJ2J0bkNTSScgPT4gZklucHV0KCdzdWJtaXQnLCAnY3NpJywgc21k X3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wbmxfY3NpJyksICdwdWJsaXNo JyksDQoJCSdidG5BZHZpY2UnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2 ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGlj c19hZHZpY2UiPicuZklucHV0KCdzdWJtaXQnLCAnc3dpdGNoX2FkdmljZScsIHNtZF9wcm9n bm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfcG5sX2FkdmljZScpLCAnc21hbGxlcmJv eCcpLic8L2Zvcm0+JywNCgkJJ2J0bkZpbGVzJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBh Y3Rpb249Ij9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRf cHJvZ25vc3RpY3NfZmlsZXMiPicuZklucHV0KCdzdWJtaXQnLCAnc3dpdGNoX2ZpbGVzJywg c21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljc19wbmxfZmlsZXMnKSwgJ3Nt YWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TZXR1cCcgPT4gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0 ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N3aXRjaF9z ZXR1cCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3NfcG5sX3NldHVw JyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4nLA0KCQknYnRuU3R5bGUnID0+ICcgY2xhc3M9 InNtZF9wcm9nX2J0bnMiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweDsiJywNCgkJJ2J0 bkNTUycgPT4gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jy4kc21kX3Byb2dub3N0aWNzX3N0 eWxlWydzZXR1cCddLic8L3N0eWxlPicsDQoJKTsNCglyZXR1cm4gJHJldDsNCn0NCg0KLy8g TXVsdGktZmlsZSBkcm9wZG93biBzZWxlY3Rpb24NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGlj c19tdWx0aXNlbCgkc2VsbmFtZT0nJywgJHRyZWU9YXJyYXkoKSwgJHNlbD1hcnJheSgpKSB7 DQoJJG91dFtdID0gJzxzZWxlY3QgaWQ9IicuJHNlbG5hbWUuJyIgbmFtZT0iJy4kc2VsbmFt ZS4nW10iIGNsYXNzPSJsaXN0IiBzdHlsZT0iaGVpZ2h0OjQwMHB4OyIgbXVsdGlwbGU9Im11 bHRpcGxlIj4nOw0KCWZvcmVhY2ggKCR0cmVlIGFzICRsZWFmKSB7DQoJCSRzZWxlY3RlZD0n JzsNCgkJaWYgKGluX2FycmF5KCRsZWFmLCAkc2VsKSkgew0KCQkJJHNlbGVjdGVkID0gJyBz ZWxlY3RlZD0ic2VsZWN0ZWQiJzsNCgkJfQ0KDQoJCSRvdXRbXSA9IHQuJzxvcHRpb24nLiRz ZWxlY3RlZC4nPicuaHRtbHNwZWNpYWxjaGFycygkbGVhZikuJzwvb3B0aW9uPicubjsNCgl9 DQoJJG91dFtdID0gJzwvc2VsZWN0Pic7DQoJcmV0dXJuIGpvaW4oJycsJG91dCk7DQp9DQoN Ci8vIFBhc3N3b3JkIHN0cmVuZ3RoIG1ldGVyDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nf Y2hyb25vc3RyZW5ndGgoJGV2dCwgJHN0cCkgew0KCWdsb2JhbCAkZXZlbnQsICRzbWRfcHJv Z25vc3RpY3Nfc3R5bGU7DQoNCgllY2hvIDw8PEVPUw0KPHN0eWxlIHR5cGU9InRleHQvY3Nz Ij57JHNtZF9wcm9nbm9zdGljc19zdHlsZVsnbWV0ZXInXX08L3N0eWxlPg0KPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLy88IVtDREFUQVsNCi8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCioqDQoq KiAgIEZyYW5rZW5zdGVpbmVkIGZyb20gYW4gb3JpZ2luYWwgKEdQTCkgc2NyaXB0DQoqKiAg IGJ5IFNtYWxsIEhhZHJvbiBDb2xsaWRlciAtLSBUaGFua3MhDQoqKiAgIGh0dHA6Ly93d3cu c21hbGxoYWRyb25jb2xsaWRlci5jb20NCioqDQoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpmdW5jdGlvbiBzbWRf cHJvZ25vc3RpY3NfZ1R4dCh3aGF0KSB7DQoJdmFyIGxhbmcgPSBuZXcgQXJyYXkoKTsNCgls YW5nWydhYm91dCddID0gJ2Fib3V0ICc7DQoJbGFuZ1snZGlnaXRzZXAnXSA9ICcsJzsNCgls YW5nWydwbHVyYWwnXSA9ICdzJzsNCglsYW5nWydwd19jb21tb24nXSA9ICdvbmUgb2YgdGhl IDUwMCBtb3N0IGNvbW1vbiBwYXNzd29yZHMnOw0KCWxhbmdbJ3B3X3Bvc3RhbWJsZSddID0g J0l0IHdvdWxkIGJlIGNyYWNrZWQgYWxtb3N0IGluc3RhbnRseSc7DQoJbGFuZ1sncHdfcHJl YW1ibGUnXSA9ICdZb3VyIHBhc3N3b3JkIGlzJzsNCglsYW5nWydwd190YWtlJ10gPSAnSXQg d291bGQgdGFrZSc7DQoJbGFuZ1sncHdfY3JhY2snXSA9ICdmb3IgYSBkZXNrdG9wIFBDIHRv IGNyYWNrIHlvdXIgcGFzcyBieSBicnV0ZSBmb3JjZTxiciAvPih1bmxlc3MgeW91IDxhIGhy ZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9ibG9nL2Nob29zaW5nLWEtYnJpbGxpYW50LXBh c3N3b3JkLyI+YnJva2UgdGhlIHJ1bGVzPC9hPiwgaW4gd2hpY2ggY2FzZSBpdFwnZCBiZSBj cmFja2VkIGFsbW9zdCBpbnN0YW50bHkpJzsNCglsYW5nWydzZWNzJ10gPSAnIHNlY29uZHMn Ow0KCWxhbmdbJ3Rfc2VjJ10gPSAnc2Vjb25kJzsNCglsYW5nWyd0X21pbiddID0gJ21pbnV0 ZSc7DQoJbGFuZ1sndF9ociddID0gJ2hvdXInOw0KCWxhbmdbJ3RfZGF5J10gPSAnZGF5JzsN CglsYW5nWyd0X3lyJ10gPSAneWVhcic7DQoJbGFuZ1sndF90aG9feSddID0gJ3Rob3VzYW5k IHllYXJzJzsNCglsYW5nWyd0X21pbF95J10gPSAnbWlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sn dF9iaWxfeSddID0gJ2JpbGxpb24geWVhcnMnOw0KCWxhbmdbJ3RfdHJpX3knXSA9ICd0cmxs aW9uIHllYXJzJzsNCglsYW5nWyd0X3F1YV95J10gPSAncXVhZHJpbGxpb24geWVhcnMnOw0K CWxhbmdbJ3RfcXVpX3knXSA9ICdxdWludGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9zZXhf eSddID0gJ3NleHRpbGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfc2VwX3knXSA9ICdzZXB0aWxs aW9uIHllYXJzJzsNCglsYW5nWyd0X29jdF95J10gPSAnb2N0aWxsaW9uIHllYXJzJzsNCgls YW5nWyd0X25vbl95J10gPSAnbm9uaWxsaW9uIHllYXJzJzsNCglyZXR1cm4gbGFuZ1t3aGF0 XTsNCn0NCg0KZnVuY3Rpb24gc21kX3Byb2dfY2hyb25vU3RyZW5ndGgocHcpIHsNCgl2YXIg c2l6ZSA9IHB3Lmxlbmd0aDsNCgl2YXIgc21kX3Byb2dfY29tbW9uX3B3ID0gbmV3IEFycmF5 KCk7DQoJdmFyIHByZWNpc2lvbiA9IDc7DQoJc21kX3Byb2dfY29tbW9uX3B3WzNdID0gWydn b2QnLCdzZXgnXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNF0gPSBbJzEyMzQnLCdjb29sJywn MTMxMycsJ3N0YXInLCdnb2xmJywnYmVhcicsJ2RhdmUnLCdwYXNzJywnYWFhYScsJzY5Njkn LCdqYWtlJywnbWF0dCcsJzEyMTInLCdmaXNoJywnZnVjaycsJ3Bvcm4nLCc0MzIxJywnMjAw MCcsJzQxMjgnLCd0ZXN0Jywnc2hpdCcsJ2xvdmUnLCdiYWJ5JywnY3VudCcsJ21hcmsnLCcz MzMzJywnam9obicsJ3NleHknLCc1MTUwJywnNDQ0NCcsJzIxMTInLCdmcmVkJywnbWlrZScs JzExMTEnLCd0aXRzJywncGF1bCcsJ21pbmUnLCdraW5nJywnZmlyZScsJzU1NTUnLCdzbHV0 JywnZ2lybCcsJzIyMjInLCdhc2RmJywndGltZScsJzc3NzcnLCdyb2NrJywneHh4eCcsJ2Zv cmQnLCdkaWNrJywnYmlsbCcsJ3dvbGYnLCdibHVlJywnYWxleCcsJ2NvY2snLCdiZWVyJywn ZXJpYycsJzY2NjYnLCdqYWNrJ107DQoJc21kX3Byb2dfY29tbW9uX3B3WzVdID0gWydiZWFj aCcsJ2dyZWF0JywnYmxhY2snLCdwdXNzeScsJzEyMzQ1JywnZnJhbmsnLCd0aWdlcicsJ2ph cGFuJywnbW9uZXknLCduYWtlZCcsJzExMTExJywnYW5nZWwnLCdzdGFycycsJ2FwcGxlJywn cG9ybm8nLCdzdGV2ZScsJ3ZpcGVyJywnaG9ybnknLCdvdTgxMicsJ2tldmluJywnYnVkZHkn LCd0ZWVucycsJ3lvdW5nJywnamFzb24nLCdsdWNreScsJ2dpcmxzJywnbG92ZXInLCdicmlh bicsJ2tpdHR5JywnYnViYmEnLCdoYXBweScsJ2NyZWFtJywnamFtZXMnLCd4eHh4eCcsJ2Jv b3R5Jywna2VsbHknLCdib29icycsJ3BlbmlzJywnZWFnbGUnLCd3aGl0ZScsJ2VudGVyJywn Y2hldnknLCdzbWl0aCcsJ2NocmlzJywnZ3JlZW4nLCdzYW1teScsJ3N1cGVyJywnbWFnaWMn LCdwb3dlcicsJ2Vuam95Jywnc2NvdHQnLCdkYXZpZCcsJ3ZpZGVvJywncXdlcnQnLCdwYXJp cycsJ3dvbWVuJywnanVpY2UnLCdkaXJ0eScsJ211c2ljJywncGV0ZXInLCdiaXRjaCcsJ2hv dXNlJywnaGVsbG8nLCdiaWxseScsJ21vdmllJ107DQoJc21kX3Byb2dfY29tbW9uX3B3WzZd ID0gWycxMjM0NTYnLCdwcmluY2UnLCdndWl0YXInLCdidXR0ZXInLCdqYWd1YXInLCd1bml0 ZWQnLCd0dXJ0bGUnLCdtdWZmaW4nLCdjb29wZXInLCduYXNjYXInLCdyZWRzb3gnLCdkcmFn b24nLCd6eGN2Ym4nLCdxd2VydHknLCd0b21jYXQnLCc2OTY5NjknLCc2NTQzMjEnLCdtdXJw aHknLCc5ODc2NTQnLCdhbWFuZGEnLCdicmF6aWwnLCd3aXphcmQnLCdoYW5uYWgnLCdsYXVy ZW4nLCdtYXN0ZXInLCdkb2N0b3InLCdlYWdsZTEnLCdnYXRvcnMnLCdzcXVpcnQnLCdzaGFk b3cnLCdtaWNrZXknLCdtb3RoZXInLCdtb25rZXknLCdiYWlsZXknLCdqdW5pb3InLCduYXRo YW4nLCdhYmMxMjMnLCdrbmlnaHQnLCdhbGV4aXMnLCdpY2VtYW4nLCdmdWNrbWUnLCd0aWdl cnMnLCdiYWRib3knLCdib25uaWUnLCdwdXJwbGUnLCdkZWJiaWUnLCdhbmdlbGEnLCdqb3Jk YW4nLCdhbmRyZWEnLCdzcGlkZXInLCdoYXJsZXknLCdyYW5nZXInLCdkYWtvdGEnLCdib29n ZXInLCdpd2FudHUnLCdhYWFhYWEnLCdsb3ZlcnMnLCdwbGF5ZXInLCdmbHllcnMnLCdzdWNr aXQnLCdodW50ZXInLCdiZWF2ZXInLCdtb3JnYW4nLCdtYXRyaXgnLCdib29tZXInLCdydW5u ZXInLCdiYXRtYW4nLCdzY29vYnknLCdlZHdhcmQnLCd0aG9tYXMnLCd3YWx0ZXInLCdoZWxw bWUnLCdnb3Jkb24nLCd0aWdnZXInLCdqYWNraWUnLCdjYXNwZXInLCdyb2JlcnQnLCdib29i b28nLCdib3N0b24nLCdtb25pY2EnLCdzdHVwaWQnLCdhY2Nlc3MnLCdjb2ZmZWUnLCdicmF2 ZXMnLCd4eHh4eHgnLCd5YW5rZWUnLCdzYXR1cm4nLCdidXN0ZXInLCdnZW1pbmknLCdiYXJu ZXknLCdhcHBsZXMnLCdzb2NjZXInLCdyYWJiaXQnLCd2aWN0b3InLCdhdWd1c3QnLCdob2Nr ZXknLCdwZWFudXQnLCd0dWNrZXInLCdraWxsZXInLCdjYW5hZGEnLCdnZW9yZ2UnLCdqb2hu bnknLCdzaWVycmEnLCdibGF6ZXInLCdhbmRyZXcnLCdzcGFua3knLCdkb2dnaWUnLCcyMzIz MjMnLCd3aW50ZXInLCd6enp6enonLCdicmFuZHknLCdndW5uZXInLCdiZWF2aXMnLCdjb21w YXEnLCdob3JuZXknLCcxMTIyMzMnLCdjYXJsb3MnLCdhcnRodXInLCdkYWxsYXMnLCd0ZW5u aXMnLCdzb3BoaWUnLCdsYWRpZXMnLCdjYWx2aW4nLCdzaGF2ZWQnLCdwZXBwZXInLCdnaWFu dHMnLCdzdXJmZXInLCdmZW5kZXInLCdzYW1zb24nLCdhdXN0aW4nLCdtZW1iZXInLCdibG9u ZGUnLCdibG93bWUnLCdmdWNrZWQnLCdkYW5pZWwnLCdkb25hbGQnLCdnb2xkZW4nLCdnb2xm ZXInLCdjb29raWUnLCdzdW1tZXInLCdicm9uY28nLCdyYWNpbmcnLCdzYW5kcmEnLCdoYW1t ZXInLCdwb29raWUnLCdqb3NlcGgnLCdoZW50YWknLCdqb3NodWEnLCdkaWFibG8nLCdiaXJk aWUnLCdtYWdnaWUnLCdzZXhzZXgnLCdsaXR0bGUnLCdiaXRlbWUnLCc2NjY2NjYnLCd0b3Bn dW4nLCdhc2hsZXknLCd3aWxsaWUnLCdzdGlja3knLCdjb3dib3knLCdhbmltYWwnLCdzaWx2 ZXInLCd5YW1haGEnLCdxYXp3c3gnLCdmdWNrZXInLCdqdXN0aW4nLCdza2lwcHknLCdvcmFu Z2UnLCdiYW5hbmEnLCdsYWtlcnMnLCdtYXJ2aW4nLCdtZXJsaW4nLCdkcml2ZXInLCdyYWNo ZWwnLCdtYXJpbmUnLCdzbGF5ZXInLCdhbmdlbHMnLCdhc2RmZ2gnLCdiaWdkb2cnLCd2YWdp bmEnLCdhcG9sbG8nLCdjaGVlc2UnLCd0b3lvdGEnLCdwYXJrZXInLCdtYWRkb2cnLCd0cmF2 aXMnLCcxMjEyMTInLCdsb25kb24nLCdob3Rkb2cnLCd3aWxzb24nLCdzeWRuZXknLCdtYXJ0 aW4nLCdkZW5uaXMnLCd2b29kb28nLCdnaW5nZXInLCdtYWdudW0nLCdhY3Rpb24nLCduaWNv bGUnLCdjYXJ0ZXInLCdlcm90aWMnLCdzcGFya3knLCdqYXNwZXInLCc3Nzc3NzcnLCd5ZWxs b3cnLCdzbW9rZXknLCdkcmVhbXMnLCdjYW1hcm8nLCd4YXZpZXInLCd0ZXJlc2EnLCdmcmVk ZHknLCdzZWNyZXQnLCdzdGV2ZW4nLCdqZXJlbXknLCd2aWtpbmcnLCdmYWxjb24nLCdzbm9v cHknLCdydXNzaWEnLCd0YXlsb3InLCduaXBwbGUnLCcxMTExMTEnLCdlYWdsZXMnLCcxMzEz MTMnLCd3aW5uZXInLCd0ZXN0ZXInLCcxMjMxMjMnLCdtaWxsZXInLCdyb2NrZXQnLCdsZWdl bmQnLCdmbG93ZXInLCd0aGVtYW4nLCdwbGVhc2UnLCdvbGl2ZXInLCdhbGJlcnQnXTsNCglz bWRfcHJvZ19jb21tb25fcHdbN10gPSBbJ3BvcnNjaGUnLCdyb3NlYnVkJywnY2hlbHNlYScs J2FtYXRldXInLCc3Nzc3Nzc3JywnZGlhbW9uZCcsJ3RpZmZhbnknLCdqYWNrc29uJywnc2Nv cnBpbycsJ2NhbWVyb24nLCd0ZXN0aW5nJywnc2hhbm5vbicsJ21hZGlzb24nLCdtdXN0YW5n JywnYm9uZDAwNycsJ2xldG1laW4nLCdtaWNoYWVsJywnZ2F0ZXdheScsJ3Bob2VuaXgnLCd0 aHgxMTM4JywncmFpZGVycycsJ2ZvcmV2ZXInLCdwZWFjaGVzJywnamFzbWluZScsJ21lbGlz c2EnLCdncmVnb3J5JywnY293Ym95cycsJ2RvbHBoaW4nLCdjaGFybGVzJywnY3Vtc2hvdCcs J2NvbGxlZ2UnLCdidWxsZG9nJywnMTIzNDU2NycsJ25jYzE3MDEnLCdnYW5kYWxmJywnbGVh dGhlcicsJ2N1bW1pbmcnLCdodW50aW5nJywnY2hhcmxpZScsJ3JhaW5ib3cnLCdhc3Nob2xl JywnYmlnY29jaycsJ2Z1Y2t5b3UnLCdqZXNzaWNhJywncGFudGllcycsJ2pvaG5zb24nLCdu YXVnaHR5JywnYnJhbmRvbicsJ2FudGhvbnknLCd3aWxsaWFtJywnZmVycmFyaScsJ2NoaWNr ZW4nLCdoZWF0aGVyJywnY2hpY2FnbycsJ3ZveWFnZXInLCd5YW5rZWVzJywncmFuZ2Vycycs J3BhY2tlcnMnLCduZXd5b3JrJywndHJvdWJsZScsJ2JpZ3RpdHMnLCd3aW5zdG9uJywndGh1 bmRlcicsJ3dlbGNvbWUnLCdiaXRjaGVzJywnd2FycmlvcicsJ3BhbnRoZXInLCdicm9uY29z JywncmljaGFyZCcsJzg2NzUzMDknLCdwcml2YXRlJywnenhjdmJubScsJ25pcHBsZXMnLCdi bG9uZGVzJywnZmlzaGluZycsJ21hdHRoZXcnLCdob290ZXJzJywncGF0cmljaycsJ2ZyZWVk b20nLCdmdWNraW5nJywnZXh0cmVtZScsJ2Jsb3dqb2InLCdjYXB0YWluJywnYmlnZGljaycs J2FiZ3J0eXUnLCdjaGVzdGVyJywnbW9uc3RlcicsJ21heHdlbGwnLCdhcnNlbmFsJywnY3J5 c3RhbCcsJ3JlYmVjY2EnLCdwdXNzaWVzJywnZmxvcmlkYScsJ3BoYW50b20nLCdzY29vdGVy Jywnc3VjY2VzcyddOw0KCXNtZF9wcm9nX2NvbW1vbl9wd1s4XSA9IFsnZmlyZWJpcmQnLCdw YXNzd29yZCcsJzEyMzQ1Njc4Jywnc3RlZWxlcnMnLCdtb3VudGFpbicsJ2NvbXB1dGVyJywn YmFzZWJhbGwnLCd4eHh4eHh4eCcsJ2Zvb3RiYWxsJywncXdlcnR5dWknLCdqZW5uaWZlcics J2RhbmllbGxlJywnc3Vuc2hpbmUnLCdzdGFyd2FycycsJ3doYXRldmVyJywnbmljaG9sYXMn LCdzd2ltbWluZycsJ3RydXN0bm8xJywnbWlkbmlnaHQnLCdwcmluY2VzcycsJ3N0YXJ0cmVr JywnbWVyY2VkZXMnLCdzdXBlcm1hbicsJ2JpZ2RhZGR5JywnbWF2ZXJpY2snLCdlaW5zdGVp bicsJ2RvbHBoaW5zJywnaGFyZGNvcmUnLCdyZWR3aW5ncycsJ2NvY2Fjb2xhJywnbWljaGVs bGUnLCd2aWN0b3JpYScsJ2NvcnZldHRlJywnYnV0dGhlYWQnLCdtYXJsYm9ybycsJ3NyaW5p dmFzJywnaW50ZXJuZXQnLCdyZWRza2lucycsJzExMTExMTExJywnYWNjZXNzMTQnLCdydXNo MjExMicsJ3Njb3JwaW9uJywnaWxvdmV5b3UnLCdzYW1hbnRoYScsJ21pc3RyZXNzJ107DQoN CgkvLyBDaGVjayBwdyBhZ2FpbnN0IGNvbW1vbiBwYXNzd29yZHMgb2YgdGhhdCBsZW5ndGgg dG8gc2VlIGlmIGl0J3MgaW4gdG9wIDUwMA0KCWlmIChzaXplID4gMiAmJiBzaXplIDwgOSkg ew0KCQl2YXIgd2lkdGggPSBzbWRfcHJvZ19jb21tb25fcHdbc2l6ZV0ubGVuZ3RoOw0KCQlm b3IgKHZhciBpZHg9MDsgaWR4IDwgd2lkdGg7IGlkeCsrKSB7DQoJCQlpZiAocHcudG9Mb3dl ckNhc2UoKSA9PSBzbWRfcHJvZ19jb21tb25fcHdbc2l6ZV1baWR4XSkgew0KCQkJCXJldHVy biAtMTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIENhbGN1bGF0aW9ucyBwZXIgc2Vjb25kLiBU ZW4gbWlsbGlvbiBpcyByb3VnaGx5IHRoZSBudW1iZXIgYSBkZWNlbnQgUEMgY291bGQgbWFu YWdlIHVuaW5oaWJpdGVkIGluIDIwMTAuDQoJLy8gQXV0b21hdGljYWxseSBkb3VibGVkIGV2 ZXJ5IDE4IG1vbnRocyBhY2NvcmRpbmcgdG8gTW9vcmUncyBsYXcsIGFtb3J0aXNlZCBieSBt b250aA0KCXZhciBjYWxjc1BlclNlYyA9IDEwMDAwMDAwOw0KCXZhciBkdCA9IG5ldyBEYXRl KCk7DQoJdmFyIGJhc2VZZWFyID0gJzIwMTAnOw0KCXZhciB0aGlzWWVhciA9IGR0LmdldEZ1 bGxZZWFyKCk7DQoJdmFyIHRoaXNNb250aCA9IGR0LmdldE1vbnRoKCk7IC8vIDAtMTENCgl2 YXIgbW9udGhzU2luY2VCYXNlID0gKCh0aGlzWWVhciAtIGJhc2VZZWFyKSAqIDEyKSArIHRo aXNNb250aDsNCgl2YXIgbW9vcmVQZXJpb2RzID0gTWF0aC5mbG9vcihtb250aHNTaW5jZUJh c2UgLyAxOCkgKyAxOw0KCWNhbGNzUGVyU2VjICo9IG1vb3JlUGVyaW9kczsNCgl2YXIgaW5j cmVtZW50UGVyTW9udGggPSBjYWxjc1BlclNlYyAvIDE4OyAvLyBIb3cgbWFueSBjYWxjcyBp dCBnb2VzIHVwIGJ5IGluIHRoaXMgTW9vcmUgcGVyaW9kLCBwZXIgbW9udGgNCgljYWxjc1Bl clNlYyArPSAoaW5jcmVtZW50UGVyTW9udGggKiAobW9udGhzU2luY2VCYXNlJTE4KSk7DQoN CgkvLyBLZWVwIHRyYWNrIG9mIGhvdyBtYW55IGNoYXJhY3RlciBzZXRzIGFyZSB1c2VkDQoJ dmFyIHBvc3NDaGFycyA9IDA7DQoJLy8gTG93ZXJjYXNlDQoJaWYgKHB3Lm1hdGNoKC9bYS16 XS8pKSB7IHBvc3NDaGFycyArPSAyNjsgfQ0KCS8vIFVwcGVyY2FzZQ0KCWlmIChwdy5tYXRj aCgvW0EtWl0vKSkgeyBwb3NzQ2hhcnMgKz0gMjY7IH0NCgkvLyBOdW1iZXJzDQoJaWYgKHB3 Lm1hdGNoKC9cZCsvKSkgeyBwb3NzQ2hhcnMgKz0gMTA7IH0NCgkvLyBTeW1ib2xzDQoJaWYg KHB3Lm1hdGNoKC9bISxALCMswqMsJCzigqwswqUsJSxeLCYsKiwrLD0sPyxfLH4sXC0sKCwp LDwsPixcLCxcLixcWyxcXSxceyxcfSxcfCxcOixcOyxcJyxcIixcYCxcLyxcXFwsXMKsXS8p ICkge3Bvc3NDaGFycyArPSAzNn07DQoNCgkvLyBXb3JrIG91dCB0aGUgbnVtYmVyIG9mIHBv c3NpYmxlIGNvbWJpbmF0aW9uczogcG9zc2libGUgY2hhcmFjdGVycyB0byB0aGUgcG93ZXIg b2YgdGhlIHBhc3N3b3JkIGxlbmd0aA0KCXZhciBwb3NzQ29tYm9zID0gTWF0aC5wb3cocG9z c0NoYXJzLCBzaXplKTsNCg0KCS8vIERpdmlkZSB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGNv bWJpbmF0aW9ucyBieSB0aGUgY2FsY3VsYXRpb25zIGEgUEMgY2FuIGRvIHBlciBzZWNvbmQN Cgl2YXIgY3JhY2tUaW1lSW5TZWNzID0gcG9zc0NvbWJvcyAvIGNhbGNzUGVyU2VjOw0KDQoJ Ly8gU2V0IHVwIGFuIGFycmF5IG9mIHBlcmlvZHMgd2l0aCB0aGVpciBsZW5ndGhzIGluIHNl Y29uZHMNCgl2YXIgc21kX3BlcmlvZHMgPSBuZXcgQXJyYXkoKTsNCglzbWRfcGVyaW9kc1sn dF9taW4nXSA9IDYwOw0KCXNtZF9wZXJpb2RzWyd0X2hyJ10gPSBzbWRfcGVyaW9kc1sndF9t aW4nXSAqIDYwOw0KCXNtZF9wZXJpb2RzWyd0X2RheSddID0gc21kX3BlcmlvZHNbJ3RfaHIn XSAqIDI0Ow0KCXNtZF9wZXJpb2RzWyd0X3lyJ10gPSBzbWRfcGVyaW9kc1sndF9kYXknXSAq IDM2NS4yNTsNCglzbWRfcGVyaW9kc1sndF90aG9feSddID0gc21kX3BlcmlvZHNbJ3RfeXIn XSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfbWlsX3knXSA9IHNtZF9wZXJpb2RzWyd0X3Ro b195J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X2JpbF95J10gPSBzbWRfcGVyaW9kc1sn dF9taWxfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF90cmlfeSddID0gc21kX3Blcmlv ZHNbJ3RfYmlsX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfcXVhX3knXSA9IHNtZF9w ZXJpb2RzWyd0X3RyaV95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3F1aV95J10gPSBz bWRfcGVyaW9kc1sndF9xdWFfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9zZXhfeSdd ID0gc21kX3BlcmlvZHNbJ3RfcXVpX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfc2Vw X3knXSA9IHNtZF9wZXJpb2RzWyd0X3NleF95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0 X29jdF95J10gPSBzbWRfcGVyaW9kc1sndF9zZXBfeSddICogMTAwMDsNCglzbWRfcGVyaW9k c1sndF9ub25feSddID0gc21kX3BlcmlvZHNbJ3Rfb2N0X3knXSAqIDEwMDA7DQoNCgkvLyBQ ZXJpb2QgdHlwZSBpcyAnc2Vjb25kcycgYnkgZGVmYXVsdA0KCXZhciBwZXJpb2RUeXBlID0g J3Rfc2VjJzsNCgl2YXIgc3RyZW5ndGggPSAnJzsNCg0KCS8vIElmIGl0IHdpbGwgdGFrZSBs ZXNzIHRoYW4gYSBzZWNvbmQgdG8gY3JhY2sgdGhlIHBhc3N3b3JkLCBzaG93IGV4YWN0bHkg aG93IGxvbmcNCglpZiAoY3JhY2tUaW1lSW5TZWNzIDwgMSkgew0KCQlzdHJlbmd0aCA9IGNy YWNrVGltZUluU2Vjcy50b0ZpeGVkKHByZWNpc2lvbikgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4 dCgnc2VjcycpOw0KCX0gZWxzZSB7DQoJCS8vIE90aGVyd2lzZSBzaG93IGEgcm91bmRlZC1k b3duIG51bWJlcg0KCQkvLyBBZGRzIHRoZSBwbHVyYWwgb250byBhbnl0aGluZyBiZWZvcmUg YSB0aG91c2FuZCB5ZWFycw0KCQl2YXIgaW50b1Rob3VzYW5kcyA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdwbHVyYWwnKTsNCg0KCQkvLyBBZGRzIHRoZSAnQWJvdXQnIHRvIGFueXRoaW5n IGFmdGVyIHNlY29uZHMNCgkJdmFyIGludG9NaW51dGVzID0gJyc7DQoNCgkJLy8gUm91bmQg ZG93biB0aGUgdGltZQ0KCQl2YXIgbmV3VGltZSA9IE1hdGguZmxvb3IoY3JhY2tUaW1lSW5T ZWNzKTsNCg0KCQkvLyBHbyB0aHJvdWdoIGRpZmZlcmVudCBwZXJpb2QgbGVuZ3Rocw0KCQlm b3IgKHZhciBqZHggaW4gc21kX3BlcmlvZHMpIHsNCgkJCS8vIFN0b3Agd2hlbiB0aGUgcmln aHQgcGVyaW9kIGlzIHJlYWNoZWQNCgkJCWlmIChjcmFja1RpbWVJblNlY3MgPCBzbWRfcGVy aW9kc1tqZHhdKSB7IGJyZWFrOyB9DQoJCQllbHNlIHsNCgkJCQlpZiAoamR4ID09ICJ0X3Ro b195IikgeyBpbnRvVGhvdXNhbmRzID0gJyc7IH0NCgkJCQlpZiAoamR4ID09ICJ0X21pbiIp IHsgaW50b01pbnV0ZXMgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWJvdXQnKTsgfQ0KCQkJ CW5ld1RpbWUgPSBNYXRoLmZsb29yKGNyYWNrVGltZUluU2VjcyAvIHNtZF9wZXJpb2RzW2pk eF0pOw0KCQkJCXBlcmlvZFR5cGUgPSBqZHg7DQoJCQl9DQoJCX0NCg0KCQkvLyBJZiBzaW5n dWxhcg0KCQlpZiAobmV3VGltZSA9PSAxKSB7DQoJCQlzdHJlbmd0aCA9IHNtZF9wcm9nbm9z dGljc19nVHh0KCdhYm91dCcpICsgJzEgJyArIHNtZF9wcm9nbm9zdGljc19nVHh0KHBlcmlv ZFR5cGUpOw0KCQl9IGVsc2Ugew0KCQkJLy8gQ29udmVydCBuZXdUaW1lIHRvIHN0cmluZw0K CQkJbmV3VGltZSArPSAnJzsNCg0KCQkJLy8gU3BsaXQgd2l0aCBjb21tYXMgZXZlcnkgdGhy ZWUgZGlnaXRzDQoJCQl2YXIgcmVnZXggPSAvKFxkKykoXGR7M30pLzsNCg0KCQkJd2hpbGUg KHJlZ2V4LnRlc3QobmV3VGltZSkpIHsNCgkJCQluZXdUaW1lID0gbmV3VGltZS5yZXBsYWNl KHJlZ2V4LCAnJDEnICsgc21kX3Byb2dub3N0aWNzX2dUeHQoJ2RpZ2l0c2VwJykgKyAnJDIn KTsNCgkJCX0NCg0KCQkJLy8gQ29tYmluZSB3aXRoICdhYm91dCcgaWYgbmVlZGVkLCB0aGUg dGltZSBpdCB3aWxsIHRha2UsIHRoZSBwZXJpb2QgdHlwZSwgYW5kIHRoZSAncycgaWYgbmVl ZGVkDQoJCQlzdHJlbmd0aCA9IGludG9NaW51dGVzICsgbmV3VGltZSArICIgIiArIHNtZF9w cm9nbm9zdGljc19nVHh0KHBlcmlvZFR5cGUpICsgaW50b1Rob3VzYW5kczsNCgkJfQ0KCX0N Cg0KCXJldHVybiBzdHJlbmd0aDsNCn0NCg0KZnVuY3Rpb24gcGFzc3dvcmRDaGVjayh0aGF0 LCBlKSB7DQoJaWYgKGUua2V5Q29kZSA9PSAyNyB8fCBlLmNoYXJDb2RlID09IDI3KSB7DQoJ CWpRdWVyeSh0aGF0KS52YWwoIiIpOw0KCX0NCg0KCXZhciBwYXNzd29yZCA9IGpRdWVyeSh0 aGF0KS52YWwoKTsNCg0KCWlmIChwYXNzd29yZCAhPSAiIikgew0KCQl2YXIgc3RyZW5ndGgg PSBzbWRfcHJvZ19jaHJvbm9TdHJlbmd0aChwYXNzd29yZCk7DQoNCgkJaWYgKHN0cmVuZ3Ro ID09IC0xKSB7DQoJCQlqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmh0bWwoc21kX3Byb2du b3N0aWNzX2dUeHQoJ3B3X3ByZWFtYmxlJykgKyAnIDxkaXYgY2xhc3M9InNtZF9wcm9nX3Bh c3Nfc3RyZW5ndGgiPicgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfY29tbW9uJykgKyAn PC9kaXY+ICcrIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwd19wb3N0YW1ibGUnKSkuZmFkZUlu KDUwMCk7DQoJCX0gZWxzZSB7DQoJCQlqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmh0bWwo c21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X3Rha2UnKSArICcgPGRpdiBjbGFzcz0ic21kX3By b2dfcGFzc19zdHJlbmd0aCI+JyArIHN0cmVuZ3RoICsgJzwvZGl2PiAnICsgc21kX3Byb2du b3N0aWNzX2dUeHQoJ3B3X2NyYWNrJykpLmZhZGVJbig1MDApOw0KCQl9DQoJfSBlbHNlIHsN CgkJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5oaWRlKCk7DQoJfQ0KfQ0KalF1ZXJ5KGZ1 bmN0aW9uKCkgew0KCXZhciBzbWRfcHJvZ19tZXRlciA9ICc8ZGl2IGlkPSJzbWRfcHJvZ19t ZXRlciI+PC9kaXY+JzsNCglqUXVlcnkoIiNjaGFuZ2VfcGFzc3dvcmQiKS5hcHBlbmQoc21k X3Byb2dfbWV0ZXIpOw0KCWpRdWVyeSgiI3NtZF9wcm9nX21ldGVyIikuaGlkZSgpOw0KCWpR dWVyeSgiI25ld19wYXNzIikua2V5ZG93bihmdW5jdGlvbihlKSB7DQoJCWlmIChlLmtleUNv ZGUgPT0gMTMgfHwgZS5jaGFyQ29kZSA9PSAxMykgew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9 DQoJfSk7DQoJalF1ZXJ5KCIjbmV3X3Bhc3MiKS5rZXl1cChmdW5jdGlvbihlKXsNCgkJcGFz c3dvcmRDaGVjayh0aGlzLCBlKTsNCgl9KTsNCn0pOw0KLy9dXT4NCjwvc2NyaXB0Pg0KRU9T Ow0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCi8vIFdlYiBwYWdlCQkgOiBodHRwOi8vY29kZS5nb29n bGUuY29tL3AvcGhwcm90ZWN0b3INCi8vIEF1dG9yCQkJCTogSHVnbyBTb3VzYSAJCWFkYW1h c3RvcjY2NkBnbWFpbC5jb20NCi8vIERhdGUJCQkJIDogMjAxMC0wMy0yNQ0KLy8gVmVyc2lv bgkJCTogMC4zLjEuMQ0KLy8NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpjbGFzcyBzbWRfcHJvZ19QaFByb3Rl Y3RvciB7DQoJdmFyICRTSE9XX0VSUk9SUzsNCgl2YXIgJGRvX3hzczsNCg0KCXB1YmxpYyBm dW5jdGlvbiBzbWRfcHJvZ19QaFByb3RlY3Rvcigkc2hvd19lcnJvcnMpIHsNCgkJJHRoaXMt PlNIT1dfRVJST1JTPSRzaG93X2Vycm9yczsNCgkJaWYgKCR0aGlzLT5TSE9XX0VSUk9SUykg ew0KCQkJZXJyb3JfcmVwb3J0aW5nKEVfRVJST1IgfCBFX1dBUk5JTkcgfCBFX1BBUlNFKTsJ IC8vU2hvdyBlcnJvcnMNCgkJCWluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgIjEiKTsJLy9k aXNwbGF5IGVycm9ycw0KCQl9IGVsc2Ugew0KCQkJaW5pX3NldCgnZGlzcGxheV9lcnJvcnMn LCAiMCIpOyAvL2Rpc3BsYXkgZXJyb3JzDQoJCQlpbmlfc2V0KCdsb2dfZXJyb3JzJywgIjEi KTsJLy9sb2dfZXJyb3JzDQoJCX0NCgkJJHRoaXMtPmRvX3hzcyA9IGdldF9wcmVmKCdzbWRf cHJvZ25vc3RpY3NfeHNzJywgMCk7DQoJfQ0KDQoJLyoNCgkqIE1haW4gZnVuY3Rpb24gdG8g YmUgY2FsbGVkIGluIGEgaW5kZXggcGFnZSB0aGF0IHJlZGlyZWN0cyB0byBvdGhlciBwYWdl cw0KCSoNCgkqLw0KCXB1YmxpYyBmdW5jdGlvbiBpc01hbGljaW91cygpIHsNCgkJJHNxbGkg PSAwOw0KDQoJCSRzcWxpID0gY2FsbGJhY2tfZXZlbnQoJ3NtZF9mcm9nbm9zdGljcycsICdz cWxfaW5qZWN0aW9uJywgZmFsc2UpOw0KDQoJCWlmICghJHNxbGkpIHsNCgkJCSRudW1fYmFk X3dvcmRzMSA9ICR0aGlzLT5DaGVja0dldCgpOw0KCQkJJG51bV9iYWRfd29yZHMyID0gJHRo aXMtPkNoZWNrUG9zdCgpOw0KDQoJCQkkdGhyZXNoID0gZXhwbG9kZSgnLCcsIGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfaW5qZWN0X3NlbnNpdGl2aXR5JywgMSkpOw0KCQkJaWYgKCFp c3NldCgkdGhyZXNoWzFdKSkgew0KCQkJCSR0aHJlc2hbMV0gPSAkdGhyZXNoWzBdOw0KCQkJ fQ0KCQkJJHRocmVzaFswXSA9IGlzX251bWVyaWMoJHRocmVzaFswXSkgPyAkdGhyZXNoWzBd IDogMTsNCgkJCSR0aHJlc2hbMV0gPSBpc19udW1lcmljKCR0aHJlc2hbMV0pID8gJHRocmVz aFsxXSA6IDE7DQoNCgkJCWlmICgkbnVtX2JhZF93b3JkczEgPj0gJHRocmVzaFswXSkgew0K CQkJCSRzcWxpID0gdHJ1ZTsNCgkJCX0NCg0KCQkJaWYgKCRudW1fYmFkX3dvcmRzMiA+PSAk dGhyZXNoWzFdKSB7DQoJCQkJJHNxbGkgPSB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJu ICgoJHNxbGkgPD0gMCkgPyBmYWxzZSA6ICRzcWxpKTsNCgl9DQoNCgkvL2NoZWNrIGZvciBz cWwgaW5qZWN0aW9uIGFuZCBYU1MgaW4gUG9zdCB2YXJpYWJsZXMNCglwcml2YXRlIGZ1bmN0 aW9uIENoZWNrUG9zdCgpIHsNCgkJJG51bV9iYWRfd29yZHMgPSAwOw0KDQoJCWZvcmVhY2go JF9QT1NUIGFzICRjYW1wbyA9PiAkaW5wdXQpIHsNCgkJCS8vIFhTUyBQUk9URUNUSU9ODQoJ CQlpZiAoJHRoaXMtPmRvX3hzcykgew0KCQkJCWlmIChpc19hcnJheSgkX1BPU1RbJGNhbXBv XSkpIHsNCgkJCQkJJF9QT1NUWyRjYW1wb10gPSBhcnJheV9tYXAoJ2h0bWxlbnRpdGllcycs ICRfUE9TVFskY2FtcG9dLCBhcnJheV9maWxsKDAsIGNvdW50KCRfUE9TVFskY2FtcG9dKSwg RU5UX05PUVVPVEVTKSApOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRfUE9TVFskY2FtcG9dPSBo dG1sZW50aXRpZXMoJF9QT1NUWyRjYW1wb10sIEVOVF9OT1FVT1RFUyk7DQoJCQkJfQ0KCQkJ fQ0KCQkJJG51bV9iYWRfd29yZHMgPSAkbnVtX2JhZF93b3JkcyArICR0aGlzLT53b3JkRXhp c3RzKCRpbnB1dCk7IC8vU1FMIElOSkVDVElPTg0KCQl9DQoNCgkJcmV0dXJuICRudW1fYmFk X3dvcmRzOw0KCX0NCg0KCS8vY2hlY2sgZm9yIHNxbCBpbmplY3Rpb24gYW5kIFhTUyBpbiBH RVQgdmFyaWFibGVzDQoJcHJpdmF0ZSBmdW5jdGlvbiBDaGVja0dldCgpIHsNCgkJJG51bV9i YWRfd29yZHMgPSAwOw0KDQoJCWZvcmVhY2goJF9HRVQgYXMgJGNhbXBvID0+ICRpbnB1dCkg ew0KCQkJLy8gWFNTIFBST1RFQ1RJT04NCgkJCWlmICgkdGhpcy0+ZG9feHNzKSB7DQoJCQkJ aWYgKGlzX2FycmF5KCRfR0VUWyRjYW1wb10pKSB7DQoJCQkJCSRfR0VUWyRjYW1wb10gPSBh cnJheV9tYXAoJ2h0bWxlbnRpdGllcycsICRfR0VUWyRjYW1wb10sIGFycmF5X2ZpbGwoMCwg Y291bnQoJF9HRVRbJGNhbXBvXSksIEVOVF9OT1FVT1RFUykgKTsNCgkJCQl9IGVsc2Ugew0K CQkJCQkkX0dFVFskY2FtcG9dPSBodG1sZW50aXRpZXMoJF9HRVRbJGNhbXBvXSwgRU5UX05P UVVPVEVTKTsNCgkJCQl9DQoJCQl9DQoJCQlpZigkdGhpcy0+aXNJZEluamVjdGlvbigkY2Ft cG8sJGlucHV0KSl7IC8vU1FMIElEIElOSkVDVElPTg0KCQkJCSRudW1fYmFkX3dvcmRzID0J JG51bV9iYWRfd29yZHMgKyAwLjU7DQoJCQl9DQoNCgkJCSRudW1fYmFkX3dvcmRzID0gJG51 bV9iYWRfd29yZHMgKyAkdGhpcy0+d29yZEV4aXN0cygkaW5wdXQpOyAvL1NRTCBJTkpFQ1RJ T04NCgkJfQ0KDQoJCXJldHVybiAkbnVtX2JhZF93b3JkczsNCgl9DQoNCgkvKioNCgkqCXJl dHVybiB0cnVlIGlmIGluamVjdGlvbiBzcWwgd29yZCBpcyBmb3VuZC4NCgkqCVRoZSBpbnB1 dCBpcyB0ZXN0ZWQgaWYgaXMgZXF1YWwgdG8gYSBzcWwgaW5qZWN0aW9uIHBhdHRlcm4NCgkq CVxiW15hLXpdKj9kcm9wW15hLXpdKj9cYg0KCSoJIGh0dHA6Ly93d3cucGFnZWNvbHVtbi5j b20vdG9vbC9yZWd0ZXN0Lmh0bQ0KCSoqLy8qCQkgIi8qIiwiKyIJCQkJKi8NCglwcml2YXRl IGZ1bmN0aW9uIHdvcmRFeGlzdHMoJGlucHV0KSB7DQoJCSRudW1fYmFkX3dvcmRzID0gMDsN Cg0KCQkvKg0KCQkgV09SRCBBRlRFUg0KCQkqLw0KCQkkYmFkZGVsaW0xID0gIlteYS16XSoi OwkvL3RoZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIgdG8gImIiIGFueXRoaW5nIGVsc2Ug aXMgY29uc2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRiYWRkZWxpbTIgPSAiW15hLXpd KyI7DQoJCSRiYWR3b3Jkcz0gYXJyYXkoInVuaW9uIiwgInNlbGVjdCIsICJzaG93IiwgImlu c2VydCIsICJ1cGRhdGUiLCAiZGVsZXRlIiwgImRyb3AiLCAidHJ1bmNhdGUiLCAiY3JlYXRl IiwgImxvYWRfZmlsZSIsICJleGVjIiwgIiMiLCAiLS0iKTsNCgkJLy8iLyoiDQoJCWZvcmVh Y2goJGJhZHdvcmRzIGFzICRiYWR3b3JkKSB7DQoJCQkkZXhwcmVzc2lvbiA9ICIvIi4kYmFk ZGVsaW0xLnN0cnRvbG93ZXIoJGJhZHdvcmQpLiRiYWRkZWxpbTIuIi8iOw0KCQkJaWYgKHBy ZWdfbWF0Y2ggKCRleHByZXNzaW9uLCBzdHJ0b2xvd2VyKCRpbnB1dCkpKSB7DQovL2RtcCgn KldBKicsJGJhZHdvcmQsICRpbnB1dCk7DQoJCQkJLy9kaWUoInNxbCBpbmplY3Rpb24hIik7 DQoJCQkJJG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJfQ0KDQoJCS8qDQoJCUJFRk9SRSBX T1JEDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15hLXpdKyI7CS8vdGhlIGRlbGltIHNob3Vs ZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcgZWxzZSBpcyBjb25zaWRlcmVkIHNxbCBp bmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJbXmEtel0qIjsNCgkJJGJhZHdvcmRzPSBh cnJheSgiQEB2ZXJzaW9uIiwgIkBAZGF0YWRpciIsICJ1c2VyIiwgInZlcnNpb24iKTsNCg0K CQlmb3JlYWNoKCRiYWR3b3JkcyBhcyAkYmFkd29yZCkgew0KCQkJJGV4cHJlc3Npb24gPSAi LyIuJGJhZGRlbGltMS5zdHJ0b2xvd2VyKCRiYWR3b3JkKS4kYmFkZGVsaW0yLiIvIjsNCgkJ CWlmIChwcmVnX21hdGNoICgkZXhwcmVzc2lvbiwgc3RydG9sb3dlcigkaW5wdXQpKSkgew0K Ly9kbXAoJypCVyonLCRiYWR3b3JkLCAkaW5wdXQpOw0KCQkJCS8vZGllKCJzcWwgaW5qZWN0 aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJCQl9DQoJCX0NCg0KCQkvKg0KCQlC RUZPUkUgV09SRCBBRlRFUg0KCQkqLw0KCQkkYmFkZGVsaW0xID0gIlteYS16XSsiOwkvL3Ro ZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIgdG8gImIiIGFueXRoaW5nIGVsc2UgaXMgY29u c2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRiYWRkZWxpbTIgPSAiW15hLXpdKyI7DQoJ CSRiYWR3b3Jkcz0gYXJyYXkoImJlbmNobWFyayIsICItLSIsICJ2YXJjaGFyIiwgImNvbnZl cnQiLCAiY2hhciIsICJsaW1pdCIsICJpbmZvcm1hdGlvbl9zY2hlbWEiLCJ0YWJsZV9uYW1l IiwgImZyb20iLCAid2hlcmUiLCAib3JkZXIiKTsNCg0KCQlmb3JlYWNoKCRiYWR3b3JkcyBh cyAkYmFkd29yZCkgew0KCQkJJGV4cHJlc3Npb24gPSAiLyIuJGJhZGRlbGltMS5zdHJ0b2xv d2VyKCRiYWR3b3JkKS4kYmFkZGVsaW0yLiIvIjsNCgkJCWlmIChwcmVnX21hdGNoICgkZXhw cmVzc2lvbiwgc3RydG9sb3dlcigkaW5wdXQpKSkgew0KLy9kbXAoJypCLVctQSonLCRiYWR3 b3JkLCAkaW5wdXQpOw0KCQkJCS8vZGllKCJzcWwgaW5qZWN0aW9uISIpOw0KCQkJCSRudW1f YmFkX3dvcmRzKys7DQoJCQl9DQoJCX0NCi8vZG1wKCRudW1fYmFkX3dvcmRzKTsNCgkJcmV0 dXJuICRudW1fYmFkX3dvcmRzOw0KCX0NCg0KCS8qKg0KCSoJcmV0dXJuIHRydWUgaWYgYW4g SUQgaXMgbm90IHJlYWxseSBhbiBJRA0KCSoNCgkqKi8NCglwcml2YXRlIGZ1bmN0aW9uIGlz SURJbmplY3Rpb24oJGNhbXBvLCRpbnB1dCkgew0KCQkkcmVnPSIvXmlkLyI7DQoNCgkJaWYo cHJlZ19tYXRjaCgkcmVnLCAkY2FtcG8pKSB7DQoJCQlpZighJHRoaXMtPnN0cmluZ0lzTnVt YmVyTm90WmVybygkaW5wdXQpKSB7DQoJCQkJcmV0dXJuIHRydWU7CSAvLyBpZiBpcyBJRCBh bmQgTk9UIElOVEVHRVIgb3IgTlVMTCAtPiBTUUwgSU5KRUNUSU9OISENCgkJCX0NCgkJfQ0K DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkqCXJldHVybiB0cnVlIGlmIHRoZSBz dHJpbmcgaXMgYSBudW1iZXIgKGRpZmZlcmVudCBmcm9tIDAsIHRoZSBpZCBjb3VsZCBub3Qg YmUgemVybyEpDQoJKiAgVE9ETzogY2hlY2sgaWYgKmFsbCogY2hhcnMgYXJlIHplcm8gYW5k IGZhaWwsIGUuZy4gaWQ9MDAwMA0KCSoqLw0KCXByaXZhdGUgZnVuY3Rpb24gc3RyaW5nSXNO dW1iZXJOb3RaZXJvKCAkc3RyaW5nICkgew0KCQlpZiAoZW1wdHkoJHN0cmluZykpIHsNCgkJ CXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gY3R5cGVfZGlnaXQoJHN0cmluZyk7DQoJ fQ0KfSAvL2VuZCBjbGFzcw0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFBs dWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdzIC0gbG9jYWxpc2UgYXMgcmVxdWly ZWQNCi8vIFRPRE86IFRleHRwYWNrIHRoaXMNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19n VHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX3By b2dub3N0aWNzX2V2ZW50Ow0KDQoJJGxhbmcgPSBhcnJheSgNCgkJJ2VuLWdiJyA9PiBhcnJh eSgNCgkJCSdzbWRfcHJvZ25vc3RpY3MnID0+ICdQcm9nbm9zdGljcycsDQoJCQknc21kX3By b2dub3N0aWNzX2Fja2VkJyA9PiAnQWxhcm1zIGFja25vd2xlZGdlZC4nLA0KCQkJJ3NtZF9w cm9nbm9zdGljc19hbGFybV9mcmVxJyA9PiAnQWxhcm0gb24gZGV0ZWN0aW9uIGFuZCBldmVy eTogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfYW5kJyA9PiAnIGFuZCAnLA0KCQkJJ3NtZF9w cm9nbm9zdGljc19hdXRoX3VzZXJzJyA9PiAnUmVzdHJpY3QgcHJvZ25vc3RpYyBjb25maWcg dG86ICcsDQoJCQknc21kX3Byb2dub3N0aWNzX2F2YWlsX2JyYW5jaCcgPT4gJ0FuIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vZG93bmxvYWQiPnVwZGF0ZSB0byB0aGlzIFRl eHRwYXR0ZXJuIHNlcmllcyBpcyBhdmFpbGFibGU8L2E+JywNCgkJCSdzbWRfcHJvZ25vc3Rp Y3NfYXZhaWxfdHhwJyA9PiAnQSA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4uY29tL2Rv d25sb2FkIj5uZXcgdmVyc2lvbiBvZiBUZXh0cGF0dGVybiBpcyBhdmFpbGFibGU8L2E+JywN CgkJCSdzbWRfcHJvZ25vc3RpY3NfYmxvY2snID0+ICdCbG9jaycsDQoJCQknc21kX3Byb2du b3N0aWNzX2NoX2FkZCcgPT4gJ0FkZGl0aW9ucycsDQoJCQknc21kX3Byb2dub3N0aWNzX2No X2RlbCcgPT4gJ0RlbGV0aW9ucycsDQoJCQknc21kX3Byb2dub3N0aWNzX2NoX21vZCcgPT4g J01vZGlmaWNhdGlvbnMnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuJyA9 PiAnQ2hlY2sgZmlsZXMgYmV0d2VlbjogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tf Zm9yJyA9PiAnQ2hlY2sgZmlsZXMgZm9yOiAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19jaGVj a19mcmVxJyA9PiAnQ2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5OiAnLA0KCQkJJ3NtZF9w cm9nbm9zdGljc19jaGVja19xdHknID0+ICdDaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0 aW1lOiAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScgPT4gJ0NoZWNrIGZp bGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfY3Nl bnNlJyA9PiAnKGNhc2Utc2Vuc2l0aXZlKScsDQoJCQknc21kX3Byb2dub3N0aWNzX2NzaScg PT4gJ0dhdGhlciBmb3JlbnNpY3MgYW5kIHNlbmQgZm9yIGFuYWx5c2lzJywNCgkJCSdzbWRf cHJvZ25vc3RpY3NfY3NpX3NlbnQnID0+ICcgRm9yZW5zaWNzIGRhdGEgc2VudCcsDQoJCQkn c21kX3Byb2dub3N0aWNzX2NzdicgPT4gJyhjb21tYS1zZXBhcmF0ZWQpJywNCgkJCSdzbWRf cHJvZ25vc3RpY3NfY3Vycm1vbicgPT4gJ1lvdSBhcmUgY3VycmVudGx5IG1vbml0b3Jpbmcg e2N1cnJ9IG91dCBvZiB7b3V0b2Z9IGF2YWlsYWJsZSBmaWxlcy4nLA0KCQkJJ3NtZF9wcm9n bm9zdGljc19kb2Nyb290X2ZpbGVzJyA9PiAnQ29uc2lkZXIgbW92aW5nIHRoZSAiZmlsZXMi IGZvbGRlciBvdXRzaWRlIG9mIHlvdXIgc2l0ZSByb290IGZvbGRlci4gWW91IGNhbiBkbyB0 aGlzIHZpYSB0aGUgIkFkbWluID4gUHJlZnMgPiBBZHZhbmNlZCA+IEZpbGUgZGlyZWN0b3J5 IHBhdGgiIHNldHRpbmcuJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfZG9jcm9vdF9wcm9nbm9z dGljcycgPT4gJ1BsZWFzZSBjaGFuZ2UgdGhlICJQcm9nbm9zdGljcyBmb2xkZXIiIHNldHRp bmcgdG8gYSBkaXJlY3Rvcnkgb3V0c2lkZSB5b3VyIHNpdGUgcm9vdCBmb2xkZXIuJywNCgkJ CSdzbWRfcHJvZ25vc3RpY3NfZG9jcm9vdF90bXAnID0+ICdDb25zaWRlciBtb3ZpbmcgdGhl ICJ0bXAiIGZvbGRlciBvdXRzaWRlIG9mIHlvdXIgc2l0ZSByb290IGZvbGRlci4gWW91IGNh biBkbyB0aGlzIHZpYSB0aGUgIkFkbWluID4gUHJlZnMgPiBBZHZhbmNlZCA+IFRlbXBvcmFy eSBkaXJlY3RvcnkgcGF0aCIgc2V0dGluZy4nLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19leGNs dWRpcicgPT4gJ0V4Y2x1ZGUgZm9sZGVyczogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfZmls ZXNfdXBkYXRlZCcgPT4gJ0ZpbGUgbGlzdCB1cGRhdGVkJywNCgkJCSdzbWRfcHJvZ25vc3Rp Y3NfaGVscF9saW5rJyA9PiAnKDxhIGhyZWY9IntsaW5rfSI+SGVscDwvYT4pJywNCgkJCSdz bWRfcHJvZ25vc3RpY3NfaG1zJyA9PiAnKGhyczptaW5zOnNlY3MpJywNCgkJCSdzbWRfcHJv Z25vc3RpY3NfaWdub3JlcycgPT4gJ0lnbm9yZSBmaWxlczogJywNCgkJCSdzbWRfcHJvZ25v c3RpY3NfbGJsX2NoYW5nZWQnID0+ICdDaGFuZ2VkJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nf bGJsX2hhc2htb2QnID0+ICdDT01QUk9NSVNFRCcsDQoJCQknc21kX3Byb2dub3N0aWNzX2xi bF9taXNzaW5nJyA9PiAnTWlzc2luZycsDQoJCQknc21kX3Byb2dub3N0aWNzX2xibF9hZGRl ZCcgPT4gJ0FkZGVkIChub3QgbW9uaXRvcmVkKScsDQoJCQknc21kX3Byb2dub3N0aWNzX2xp c3Rsb2MnID0+ICdGaWxlIGxvY2F0aW9uczogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfbWFp bHRvJyA9PiAnU2VuZCBlLW1haWwgdG86ICcsDQoJCQknc21kX3Byb2dub3N0aWNzX21haWx0 b19jc2knID0+ICdTZW5kIGZvcmVuc2ljcyB0bzogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nf bW9uZmlsZXNfZXhwbGFpbicgPT4gJ1NlbGVjdCBhbGwgdGhlIGZpbGVzIHlvdSB3aXNoIHRv IG1vbml0b3IgYW5kIGNsaWNrIFNhdmUuIEFsdGVyaW5nIHRoaXMgbGlzdCB3aWxsIGF1dG9t YXRpY2FsbHkgYWNrbm93bGVkZ2UgYW55IG91dHN0YW5kaW5nIGFsYXJtcyBhZ2FpbnN0IHRo ZSBzZWxlY3RlZCBmaWxlcy4nLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19ub19hbGFybXMnID0+ ICdObyBhbGFybXMgdG8gYWNrbm93bGVkZ2UgYXQgcHJlc2VudC4nLA0KCQkJJ3NtZF9wcm9n bm9zdGljc19ub19maWxlcycgPT4gJ05vIGZpbGVzIHRvIGxpc3QuIENoZWNrIHRoZSBwbHVn aW4gc2V0dXAgKGFuZCBTYXZlIGl0KS4nLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19ub19sb2df ZW50cmllcycgPT4gJ05vIGxvZyBhY3Rpdml0eSBhcm91bmQgdGhlIHRpbWUgb2YgdGhlIGRp ZmZlcmVuY2VzLicsDQoJCQknc21kX3Byb2dub3N0aWNzX25vbmVfc2VsZWN0ZWQnID0+ICdO byBmaWxlcyBzZWxlY3RlZCcsDQoJCQknc21kX3Byb2dub3N0aWNzX25vdF93cml0YWJsZScg PT4gJ3tsb2NhdGlvbn0gaXMgbm90IGEgZGlyZWN0b3J5IG9yIGlzIG5vdCB3cml0YWJsZScs DQoJCQknc21kX3Byb2dub3N0aWNzX25vdGlmeV9lbWFpbCcgPT4gJ0UtbWFpbCcsDQoJCQkn c21kX3Byb2dub3N0aWNzX25vdGlmeV90eHAnID0+ICdUeHAgaW50ZXJmYWNlJywNCgkJCSdz bWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3ZpYScgPT4gJ05vdGlmeSB2aWE6ICcsDQoJCQknc21k X3Byb2dub3N0aWNzX3ByZWFtYmxlX2FkZGVkJyA9PiAnVGhlc2UgZmlsZXMgaGF2ZSBiZWVu IGFkZGVkOiAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJsZV9maWxlcycgPT4gJ0Zp bGUgY29udGVudHMgZm9sbG93czogJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfcHJlYW1ibGVf aGFzaGRvd24nID0+ICdXQVJOSU5HISBUaGUgY2hlY2tzdW1zIGZpbGUgaXMgbWlzc2luZy4n LA0KCQkJJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJsZV9oYXNobW9kJyA9PiAnV0FSTklORyEg VGhlIGNoZWNrc3VtcyBmaWxlIGhhcyBiZWVuIGFsdGVyZWQ6ICcsDQoJCQknc21kX3Byb2du b3N0aWNzX3ByZWFtYmxlX21pc3MnID0+ICdUaGVzZSBmaWxlcyBhcmUgbWlzc2luZzogJywN CgkJCSdzbWRfcHJvZ25vc3RpY3NfcHJlYW1ibGVfbm9rJyA9PiAnVGhlc2UgZmlsZXMgZGlm ZmVyIGZyb20gdGhlaXIgZXhwZWN0ZWQgY29udGVudDogJywNCgkJCSdzbWRfcHJvZ25vc3Rp Y3NfcHJlYW1ibGVfc3FsX2luamVjdCcgPT4gJ1Bvc3NpYmxlIFNRTCBpbmplY3Rpb24gZGV0 ZWN0ZWQnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19wcmVhbWJsZV90eHBsb2cnID0+ICdMb2cg ZW50cmllcyBwcmlvciB0byB0aGlzIGRldGVjdGlvbjogJywNCgkJCSdzbWRfcHJvZ25vc3Rp Y3NfcHJvZ2xvYycgPT4gJ1Byb2dub3N0aWNzIGZvbGRlcjogJywNCgkJCSdzbWRfcHJvZ25v c3RpY3NfcHJvZ3BmeCcgPT4gJ1VuaXF1ZSBwcmVmaXg6ICcsDQoJCQknc21kX3Byb2dub3N0 aWNzX3BubF9hY2snID0+ICdBbGFybXMnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19wbmxfYWNr aXQnID0+ICdBY2tub3dsZWRnZScsDQoJCQknc21kX3Byb2dub3N0aWNzX3BubF9hZHZpY2Un ID0+ICdBZHZpY2UnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19wbmxfY3NpJyA9PiAnU2VuZCBG b3JlbnNpY3MnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19wbmxfZmlsZXMnID0+ICdGaWxlcycs DQoJCQknc21kX3Byb2dub3N0aWNzX3BubF9pZ25vcmUnID0+ICdJZ25vcmUnLA0KCQkJJ3Nt ZF9wcm9nbm9zdGljc19wbmxfc2V0dXAnID0+ICdTZXR1cCcsDQoJCQknc21kX3Byb2dub3N0 aWNzX3Bvc3RhbWJsZScgPT4gJ0Fja25vd2xlZGdlIGFsYXJtcycsDQoJCQknc21kX3Byb2du b3N0aWNzX3JlcV9oZWFkZXJzJyA9PiAnQmxvY2sgcmVxdWVzdCBoZWFkZXJzOiAnLA0KCQkJ J3NtZF9wcm9nbm9zdGljc19yZXFfbm90X2FsbG93ZWQnID0+ICdSRVFVRVNUX01FVEhPRCBu b3QgYWxsb3dlZDoge3JlcX0nLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19yaF9kZWwnID0+ICdE RUxFVEUnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19yaF9wdXQnID0+ICdQVVQnLA0KCQkJJ3Nt ZF9wcm9nbm9zdGljc19yaF90cmFjZScgPT4gJ1RSQUNFJywNCgkJCSdzbWRfcHJvZ25vc3Rp Y3NfdHRsX2FjaycgPT4gJ1Byb2dub3N0aWMgYWxhcm0gYWNrbm93bGVkZ2VtZW50JywNCgkJ CSdzbWRfcHJvZ25vc3RpY3NfdHRsX2FkdmljZScgPT4gJ1Byb2dub3N0aWMgYWR2aWNlJywN CgkJCSdzbWRfcHJvZ25vc3RpY3NfdHRsX2ZpbGVzJyA9PiAnUHJvZ25vc3RpYyBmaWxlIG1v bml0b3JpbmcnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc190dGxfZmlsZW9wdHMnID0+ICdGaWxl c3lzdGVtIG9wdGlvbnMnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc190dGxfbW9ub3B0cycgPT4g J01vbml0b3Jpbmcgb3B0aW9ucycsDQoJCQknc21kX3Byb2dub3N0aWNzX3R0bF9wbHVnb3B0 cycgPT4gJ1BsdWdpbiBvcHRpb25zJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfdHRsX3JlYWxv cHRzJyA9PiAnUmVhbHRpbWUgb3B0aW9ucycsDQoJCQknc21kX3Byb2dub3N0aWNzX3R0bF9z ZXR1cCcgPT4gJ1Byb2dub3N0aWMgc2V0dXAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19ycGNf ZXhpc3RzJyA9PiAnVGhlIHJwYyBkaXJlY3RvcnkgaXMgbm90IGJlaW5nIHVzZWQuIENvbnNp ZGVyIHJlbW92aW5nIGl0LicsDQoJCQknc21kX3Byb2dub3N0aWNzX3J0X2hkcicgPT4gJ0hl YWRlciB2aW9sYXRpb25zJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfcnRfc3FsJyA9PiAnU1FM IGluamVjdGlvbnMnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19zZWNvbmRzJyA9PiAnKHNlY29u ZHMpJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nfc2VuZF9mb3JlbnNpY3MnID0+ICdTZW5kIGZv cmVuc2ljcyBmb3I6ICcsDQoJCQknc21kX3Byb2dub3N0aWNzX3NlbnNpdGl2aXR5JyA9PiAn U2Vuc2l0aXZpdHkgdGhyZXNob2xkOiAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19zZW5zaXRp dml0eV9leHBsYWluJyA9PiAnKDE9bW9zdCBzZW5zaXRpdmUpJywNCgkJCSdzbWRfcHJvZ25v c3RpY3Nfc2V0dXBfZXhpc3RzJyA9PiAnVGhlIHNldHVwIGRpcmVjdG9yeSBzdGlsbCBleGlz dHMuIFBsZWFzZSBkZWxldGUgaXQuJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nfc2hvd19ncmFu dHMnID0+ICdZb3VyIFR4cCB1c2VyIGNhbiBhY2Nlc3MgdGhlIE15U1FMIHByaXZpbGVnZXMg aW4gdGhlIERCLiBDb25zaWRlciBhY2Nlc3NpbmcgdGhlIERCIHVzaW5nIGEgbGVzcyBwcml2 aWxlZ2VkIHVzZXIuJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nfc3FsX2ZpbGVfcHJpdnMnID0+ ICdZb3VyIE15U1FMIHVzZXIgaGFzIEZJTEUgcHJpdmlsZWdlcy4gQ29uc2lkZXIgcmV2b2tp bmcgdGhpcyByaWdodCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkuJywNCgkJCSdzbWRf cHJvZ25vc3RpY3Nfc3FsX2luamVjdCcgPT4gJ1Byb3RlY3QgYWdhaW5zdCBTUUwgaW5qZWN0 aW9uOiAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19zdGF0X2dpZCcgPT4gJ0dyb3VwIElEOiAn LA0KCQkJJ3NtZF9wcm9nbm9zdGljc19zdGF0X21vZCcgPT4gJ01vZGlmaWVkOiAnLA0KCQkJ J3NtZF9wcm9nbm9zdGljc19zdGF0X25hbWUnID0+ICdGaWxlbmFtZTogJywNCgkJCSdzbWRf cHJvZ25vc3RpY3Nfc3RhdF9zaXplJyA9PiAnU2l6ZTogJywNCgkJCSdzbWRfcHJvZ25vc3Rp Y3Nfc3RhdF91aWQnID0+ICdVc2VyIElEOiAnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19zdWJq ZWN0JyA9PiAnUHJvZ25vc3RpY3MgKCcuJHByZWZzWydzaXRldXJsJ10uJyknLA0KCQkJJ3Nt ZF9wcm9nbm9zdGljc19zdWJqZWN0X2NzaScgPT4gJ1Byb2dub3N0aWNzICgnLiRwcmVmc1sn c2l0ZXVybCddLicpIGZvcmVuc2ljcycsDQoJCQknc21kX3Byb2dub3N0aWNzX3RpZ2h0JyA9 PiAnWW91IHJ1biBhIHByZXR0eSB0aWdodCBzaGlwLiBTdGF5IGZyb3N0eS4nLA0KCQkJJ3Nt ZF9wcm9nbm9zdGljc190eHBkaXInID0+ICdBZG1pbi1zaWRlIFVSTDogJywNCgkJCSdzbWRf cHJvZ25vc3RpY3Nfd2Fybl9sb2MnID0+ICdGaWxlIGxvY2F0aW9ucyBjaGFuZ2VkLiBVcGRh dGUgeW91ciA8YSBocmVmPSJpbmRleC5waHA/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2 ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVzIj5saXN0IG9mIGZpbGVzPC9h PiBub3cnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc193aXRoJyA9PiAnIHdpdGg6ICcsDQoJCQkn c21kX3Byb2dub3N0aWNzX3hzcycgPT4gJ1hTUyBzaGllbGQnLA0KCQkJJ3NtZF9wcm9nbm9z dGljc194c3NfZXhwbGFpbicgPT4gJyhtYXkgYnJlYWsgVGV4dGlsZWQgY29tbWVudHMpJywN CgkJKSwNCgkpOw0KCSR0aGlzbGFuZyA9IGdldF9wcmVmKCdsYW5ndWFnZScsICdlbi1nYicp Ow0KCSR0aGlzbGFuZyA9IChpc3NldCgkbGFuZ1skdGhpc2xhbmddWyR3aGF0XSkpID8gJHRo aXNsYW5nIDogJ2VuLWdiJzsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHRoaXNsYW5nXVskd2hh dF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6Im9yZGVyIjtzOjE6IjEi O3M6NToiZmxhZ3MiO3M6MToiMSI7czo0OiJoZWxwIjtzOjI4MzQ4OiI8ZGl2IGlkPSJzbWRf aGVscCI+CgoJPGgxPnNtZF9wcm9nbm9zdGljczwvaDE+CgoJPHA+VGhlIDxlbT5BZG1pbiAt Jmd0OyBEaWFnbm9zdGljczwvZW0+IHRhYiBpcyBncmVhdCBpZiB5b3UgcmVtZW1iZXIgdG8g bG9vayBhdCBpdCBmcm9tIHRpbWUgdG8gdGltZS4gQnV0IGlmIHlvdXIgc2VydmVyIGlzIGNv bXByb21pc2VkLCBob3cgd291bGQgeW91IGtub3cgYWJvdXQgYSBzbmVha3kgVHJvamFuIG9y IG1hbHdhcmUgdW50aWwgeW91ciB2aXNpdG9ycyBjb21wbGFpbiBvciB0aGUgc2VhcmNoIGVu Z2luZXMgYmxvY2sgeW91ciBzaXRlPzwvcD4KCgk8cD5UaGUgYW5zd2VyIGlzIHRvIHVzZSBz bWRfcHJvZ25vc3RpY3MgdG8gdGVsbCB5b3Ugd2hlbiB0aGluZ3MgaGF2ZSBjaGFuZ2VkIHNv IHlvdSBjYW4gdGFrZSBhY3Rpb24gaW1tZWRpYXRlbHkuPC9wPgoKCTxoMj5GZWF0dXJlczwv aDI+CgoJPHVsPgoJCTxsaT5Nb25pdG9yIGZpbGVzIGFuZCBhdHRhY2tzIGluIGFuZCBhcm91 bmQgeW91ciBUeHAgaW5zdGFsbGF0aW9uPC9saT4KCQk8bGk+QXV0b21hdGljYWxseSBkZXRl Y3QgYW55IGNoYW5nZXMgYW5kIGRpc3BsYXkvc2VuZCBub3RpZmljYXRpb24gdG8gZGVzaWdu YXRlZCB1c2VyKHMpPC9saT4KCQk8bGk+Q3VzdG9taXNlIHdoZXJlYWJvdXRzIGFuZCBob3cg b2Z0ZW4gdGhlIGNoZWNrcyBhcmUgcGVyZm9ybWVkPC9saT4KCQk8bGk+QWNrbm93bGVkZ2Ug a25vd24gYWx0ZXJhdGlvbnMgYW5kIGNvbmZpZ3VyZSByZXBlYXQgYWxhcm1zIGlmIHRoZSBz aXR1YXRpb24gcmVtYWlucyB1bmNoZWNrZWQ8L2xpPgoJCTxsaT5SdWRpbWVudGFyeSBwYXNz d29yZCBzdHJlbmd0aCBtZXRlciBpbmNsdWRlZDwvbGk+Cgk8L3VsPgoKCTxoMj5JbnN0YWxs YXRpb24gLyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+UmVx dWlyZXMgVHhwIDQuNC4xKyBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNTwv cD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6 Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMTk1L3NtZF9wcm9nbm9zdGljcyI+dGV4dHBh dHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9z dyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIFR4cCA8ZW0+ QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUg cGx1Z2luLiBOb3RlIHRoYXQgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgcGx1Z2luIHJ1 bnMgYXMgcHJpb3JpdHkgMSBzbyBpdCBjYW4gZGV0ZWN0IHRoaW5ncyBiZWZvcmUgb3RoZXIg cGx1Z2lucy48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBkZWxldGUgZnJvbSB0aGUgPGVtPkFk bWluIC0mZ3Q7IFBsdWdpbnM8L2VtPiBwYWdlLiBZb3UgbWF5IHVzZSBzbWRfcHJlZmFsaXpl ciB0byByZW1vdmUgYW55IDxjb2RlPnNtZF9wcm9nbm9zdGljc18qPC9jb2RlPiBwcmVmZXJl bmNlcyB0aGF0IHRoZSBwbHVnaW4gY3JlYXRlZC48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNDkz OCI+Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUg c3VjY2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPGgyPlF1aWNrIHN0 YXJ0OiB0aGUgdGhyZWUgc3RlcHMgdG8gZGV0ZWN0aW9uPC9oMj4KCgk8b2w+CgkJPGxpPlZp c2l0IDxlbT5FeHRlbnNpb25zIC0mZ3Q7IFByb2dub3N0aWNzPC9lbT4sIGFsdGVyIHRoZSBz ZXR1cCBpbmZvcm1hdGlvbiB0byB0YXN0ZSBhbmQgPHN0cm9uZz5tYWtlIHN1cmUgeW91IDxl bT5TYXZlPC9lbT4gaXQ8L3N0cm9uZz48L2xpPgoJCTxsaT5DbGljayB0aGUgUHJvZ25vc3Rp YyB0YWImIzgyMTc7cyA8ZW0+RmlsZXM8L2VtPiBidXR0b24gKGlnbm9yZSBhbnkgd2Fybmlu ZyBhYm91dCBtaXNzaW5nIGNoZWNrc3VtcyBmb3Igbm93OiB0aGV5JiM4MjE3O3ZlIG5vdCBi ZWVuIGNyZWF0ZWQgeWV0KSBhbmQgY2hvb3NlIHRoZSBmaWxlcyB5b3Ugd2lzaCB0byBtb25p dG9yLiA8c3Ryb25nPk1ha2Ugc3VyZSB5b3UgPGVtPlNhdmU8L2VtPiB0aGUgY2hhbmdlczwv c3Ryb25nPjwvbGk+CgkJPGxpPkdvIGFib3V0IHlvdXIgYnVzaW5lc3MuIElmIHRoZSBmaWxl c3lzdGVtIGNoYW5nZXMgeW91JiM4MjE3O2xsIGJlIHRvbGQgYWJvdXQgaXQuIFBsZWFzZSBj b25zaWRlciBoZWxwaW5nIHRvIDxhIGhyZWY9IiNzbWRfcHJvZ2hlbHBfYmV0dGVyIj5tYWtl IHRoZSBwbHVnaW4gYmV0dGVyPC9hPjwvbGk+Cgk8L29sPgoKCTxoMiBpZD0ic21kX3Byb2do ZWxwX3NldHVwIj5TZXR1cDwvaDI+CgoJPHA+VGhlIDxlbT5Qcm9nbm9zdGljIHNldHVwPC9l bT4gcGFnZSBob3VzZXMgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6PC9w PgoKCTxoMz5Nb25pdG9yaW5nIG9wdGlvbnM8L2gzPgoKCTxkbD4KCQk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPkNoZWNrIGZpbGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczwvc3Bhbj48L2R0 PgoJCTxkZD5DaGVja3MgYXJlIGFsd2F5cyBwZXJmb3JtZWQgd2hlbiBwZW9wbGUgdmlzaXQg YWRtaW4gc2lkZSB0YWJzLiBZb3UgbWF5IGFsc28gZWxlY3QgdG8gY2hlY2sgdGhlIGZpbGVz IHdoZW4gdmlzaXRvcnMvYm90cyBicm93c2UgeW91ciB3ZWIgc2l0ZSBpZiB5b3UgcHJlZmVy IChzZWUgPGEgaHJlZj0iI3NtZF9wcm9naGVscF9ob3dpdHdvcmtzIj5ob3cgaXQgd29ya3M8 L2E+IGZvciBkZXRhaWxzKS48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Q2hlY2sg ZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5PC9zcGFuPjwvZHQ+CgkJPGRkPlRoZSBwbHVnaW4gZG9l cyBub3QgY2hlY2sgdGhlIGZpbGVzIGV2ZXJ5IGNsaWNrIGJlY2F1c2UgdGhhdCB3b3VsZCBw bGFjZSB1bm5lY2Vzc2FyeSBzdHJhaW4gb24gdGhlIHNlcnZlci4gSW5zdGVhZCB5b3UgY2hv b3NlIGEgY29uZmlndXJhYmxlIHRpbWUgJiM4MjEyOyBpbiBzZWNvbmRzICYjODIxMjsgYWZ0 ZXIgd2hpY2ggdGhlIHZlcnkgbmV4dCBhZG1pbi0gb3IgcHVibGljLXNpZGUgY2xpY2sgd2ls bCB0cmlnZ2VyIHRoZSBjaGVjay48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Q2hl Y2sgZmlsZXMgYmV0d2Vlbjwvc3Bhbj48L2R0PgoJCTxkZD5Ud28gdGltZXMgb2YgZGF5IGJl dHdlZW4gd2hpY2ggdGhlIGZpbGVzIHdpbGwgYmUgY2hlY2tlZC4gWW91IGNvdWxkIHNldCB0 aGlzIHRvIG9mZi1wZWFrIGhvdXJzIGlmIHlvdSBwcmVmZXJyZWQgdG8gbWluaW1pc2UgdGhl IHBsdWdpbiYjODIxNztzIGltcGFjdCBvbiBkYXl0aW1lIHZpc2l0b3JzLiBEZWZhdWx0OiA8 Y29kZT4wMDowMCA9Jmd0OyAyMzo1OTwvY29kZT48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+Q2hlY2sgdGhpcyBtYW55IGZpbGVzIGVhY2ggdGltZTwvc3Bhbj48L2R0PgoJCTxk ZD5JbnN0ZWFkIG9mIHRlc3RpbmcgZXZlcnkgc2luZ2xlIGZpbGUgZWFjaCB0aW1lICYjODIx Mjsgd2hpY2ggd2lsbCBzbG93IGRvd24geW91ciBzaXRlIC8gYWRtaW4gc2lkZSAmIzgyMTI7 IGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gb25seSBjaGVjayBhIHN1YnNldCBvZiBmaWxlcyBl dmVyeSB0aW1lIHRoZSBwbHVnaW4gaXMgdHJpZ2dlcmVkLjwvZGQ+CgkJPGR0PjxzcGFuIGNs YXNzPSJhdG5tIj5BbGFybSBvbiBkZXRlY3Rpb24gYW5kIGV2ZXJ5PC9zcGFuPjwvZHQ+CgkJ PGRkPldoZW4gc29tZXRoaW5nIGhhcyBjaGFuZ2VkIGFuZCBpdCYjODIxNztzIGRldGVjdGVk LCBhbiBhbGFybSBhY3Rpb24gaXMgYWx3YXlzIHRha2VuLiBCdXQgaWYgdGhlIHBsdWdpbiBj b250aW51YWxseSBib21iYXJkZWQgeW91IHdpdGggaW5mb3JtYXRpb24gaXQgd291bGQgYmUg YW5ub3lpbmcgYW5kIG5vdCBhcyB1c2VmdWwuIFRoaXMgc2V0dGluZyBhbGxvd3MgeW91IHRv IGNvbmZpZ3VyZSB0aGUgaW50ZXJ2YWwgYmV0d2VlbiByZXBlYXQgbmFncyBvZiB0aGUgc2Ft ZSBtZXNzYWdlLiBPbmNlIGEgZGF5ICh0aGUgZGVmYXVsdCBvZiA4NjQwMCBzZWNvbmRzKSBi eSBlLW1haWwgaXMgdXN1YWxseSBlbm91Z2ggdW5sZXNzIHlvdSYjODIxNztyZSBhIG1hc29j aGlzdC4gTm90ZSB0aGF0IGlmIG1vcmUgZmlsZXMgYXJlIGNoYW5nZWQgJiM4MjEyOyBldmVu IHdoZW4gdGhlIHRpbWVvdXQgcGVyaW9kIGhhcyB5ZXQgdG8gZWxhcHNlICYjODIxMjsgeW91 IHdpbGwgcmVjZWl2ZSBhbm90aGVyIGFsZXJ0LjwvZGQ+CgkJPGRkPllvdSBtYXkgc3BlY2lm eSB0d28gdmFsdWVzIChjb21tYS1zZXBhcmF0ZWQpIGlmIHlvdSB3aXNoOiB0aGUgZmlyc3Qg aXMgdGhlIHRpbWUgYmV0d2VlbiBub3RpZmljYXRpb25zIHRvIHRoZSBUeHAgYWRtaW4gc2lk ZTsgdGhlIHNlY29uZCBpcyB0aGUgdGltZSBiZXR3ZWVuIGUtbWFpbHMuIElmIHlvdSB1c2Ug b25seSBvbmUgdmFsdWUgdGhlbiBpdCB3aWxsIGJlIGFwcGxpZWQgdG8gYm90aC48L2RkPgoJ CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Tm90aWZ5IHZpYTwvc3Bhbj48L2R0PgoJCTxkZD5D aG9vc2UgaG93IHlvdSB3aXNoIHRvIGJlIG5vdGlmaWVkOgoJPGRsPgoJCTxkZD5UeHAgSW50 ZXJmYWNlIHdpbGwgZGlzcGxheSBhIG1lc3NhZ2Ugb24gdGhlIFRleHRwYXR0ZXJuIGFkbWlu IHNpZGUgd2hlbiBhIGNoYW5nZSBpcyBkZXRlY3RlZC48L2RkPgoJCTxkZD5FLW1haWwgd2ls bCBzZW5kIG91dCBhbiBlLW1haWwgYWJvdXQgdGhlIGNoYW5nZXMuPC9kZD4KCTwvZGw+PC9k ZD4KCQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPlNlbmQgZS1tYWlsIHRvPC9zcGFuPjwvZHQ+ CgkJPGRkPkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGUtbWFpbCBhZGRyZXNzIHJlY2lwaWVu dHMuIElmIHRoaXMgaXMgZW1wdHkgbm8gZS1tYWlscyB3aWxsIGJlIHNlbnQgZXZlbiBpZiB5 b3UgY2hvb3NlIHRvIGJlIG5vdGlmaWVkIHZpYSBlLW1haWwuPC9kZD4KCQk8ZHQ+PHNwYW4g Y2xhc3M9ImF0bm0iPlNlbmQgZm9yZW5zaWNzIHRvPC9zcGFuPjwvZHQ+CgkJPGRkPkNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGUtbWFpbCBhZGRyZXNzIHJlY2lwaWVudHMgdG8gcmVjZWl2 ZSBmb3JlbnNpY3MgZGF0YSAodGhlIG5hdHRpbHktdGl0bGVkIDxlbT5mcm9nbm9zdGljczwv ZW0+KS4gWW91IGNhbiBjaG9vc2Ugbm9ib2R5IGlmIHlvdSB3aXNoIHRvIGRpc2FibGUgdGhp cyBmZWF0dXJlLCBvciBzZW5kIHRoZW0gdG8geW91cnNlbGYsIG9yIDxhIGhyZWY9IiNzbWRf cHJvZ2hlbHBfYmV0dGVyIj50byBtZSBmb3IgYW5hbGF5c2lzPC9hPi4gPHN0cm9uZz5QbGVh c2Ugbm90ZSB0aGF0IHNvbWUgZGF0YSBpcyBxdWl0ZSBzZW5zaXRpdmUgYW5kIG1heSBkaXZ1 bGdlIHBhdGhzIHRvIHlvdXIgZmlsZXMgb3Igc2l0ZTwvc3Ryb25nPi4gSWYgeW91IHByZWZl ciB0byBrZWVwIHN0dWZmIHByaXZhdGUgYnkgYWxsIG1lYW5zIHNhbml0aXplIHRoZSBmb3Jl bnNpY3MgYW5kIHNlbmQgdGhlIGVkaXRlZCBoaWdobGlnaHRzIHRvIG1lIGZvciBhbmFseXNp cyBpZiB5b3Ugd2lzaC48L2RkPgoJPC9kbD4KCgk8aDM+UmVhbHRpbWUgb3B0aW9uczwvaDM+ CgoJPGRsPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+QmxvY2sgcmVxdWVzdCBoZWFkZXJz PC9zcGFuPjwvZHQ+CgkJPGRkPklmIHlvdSBlbmFibGUgdGhpcyBmYWNpbGl0eSB5b3UgY2Fu IGVsZWN0IHRvIGJsb2NrIG9yIGFsbG93IGNlcnRhaW4gdHlwZXMgb2Ygc3BlaWNhbCA8c3Bh biBjbGFzcz0iY2FwcyI+SFRUUDwvc3Bhbj4gcmVxdWVzdC4gQW55IHJlcXVlc3Qgb2YgYSBj aGVja2VkIHR5cGUgd2lsbCBiZSBibG9ja2VkIGFuZCBhIG1lc3NhZ2Ugd2lsbCBiZSByZXR1 cm5lZCBpbnN0ZWFkIG9mIHRoZSBwYWdlLiBUaGUgY29yZSB0eXBlcyA8c3BhbiBjbGFzcz0i Y2FwcyI+R0VUPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPlBPU1Q8L3NwYW4+LCA8c3Bh biBjbGFzcz0iY2FwcyI+SEVBRDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5PUFRJ T05TPC9zcGFuPiBhcmUgYXV0b21hdGljYWxseSBhbGxvd2VkIGJlY2F1c2UgVHhwIHJlcXVp cmVzIHRoZW0uIFRoZSByZW1haW5pbmcgdGhyZWUgJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2Fw cyI+VFJBQ0U8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+UFVUPC9zcGFuPiBhbmQgPHNw YW4gY2xhc3M9ImNhcHMiPkRFTEVURTwvc3Bhbj4gJiM4MjEyOyBhcmUgc3BlY2lhbGlzdCBo ZWFkZXJzIHRoYXQgYXJlbiYjODIxNzt0IHVzZWQgYnkgdGhlIGNvcmUgYnV0IG1heSBiZSBy ZXF1aXJlZCBieSBzb21lIHBsdWdpbnMuIFBlcm1pdCB0aGVtIGlmIHlvdSB3aXNoIGJ5IGNs ZWFyaW5nIHRoZSByZWxldmFudCBjaGVjayBib3goZXMpLCBvdGhlcndpc2UgZm9yIG1heGlt dW0gcHJvdGVjdGlvbiBrZWVwIHRoaXMgZmVhdHVyZSBzd2l0Y2hlZCBvbiB3aXRoIGFsbCB0 aHJlZSB0eXBlcyBvZiBoZWFkZXIgY2hlY2tlZC48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+UHJvdGVjdCBhZ2FpbnN0IDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGlu amVjdGlvbjwvc3Bhbj48L2R0PgoJCTxkZD5Nb25pdG9yIGluY29taW5nIDxzcGFuIGNsYXNz PSJjYXBzIj5VUkw8L3NwYW4+cyBmb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4g aW5qZWN0aW9uIGF0dGFja3MgYW5kIGRlYWwgd2l0aCB0aGVtIGluIGEgdmFyaWV0eSBvZiB3 YXlzLiBXaGVuIGFuIGF0dGFjayBpcyBkZXRlY3RlZCB0aGUgcmVxdWVzdCBjYW4gYmUgPGNv ZGU+QmxvY2s8L2NvZGU+ZWQgb3IgeW91IGNhbiBzZW5kIGFuIDxzcGFuIGNsYXNzPSJjYXBz Ij5IVFRQPC9zcGFuPiBzdGF0dXMgaGVhZGVyIHNvIHlvdSBjYW4gZGVhbCB3aXRoIHRoZSBh dHRhY2sgb24geW91ciBlcnJvciBwYWdlcy4gSWYgeW91IHR5cGUgYW55dGhpbmcgaW4gdGhl IDxjb2RlPndpdGg8L2NvZGU+IGJveCwgdGhlIGdpdmVuIG1lc3NhZ2Ugd2lsbCBiZSBkaXNw bGF5ZWQgb24gdGhlIHBhZ2UuPC9kZD4KCQk8ZGQ+WW91IG1heSBzcGVjaWZ5IDxjb2RlPnR4 cF9mb3JtOm5hbWUtb2YtZm9ybTwvY29kZT4gaW4gdGhlIDxjb2RlPndpdGg8L2NvZGU+IGJv eCB0byBoYW5kIG9mZiBjb250cm9sIHRvIGEgY3VzdG9tIGZvcm0gZmlyc3QgYmVmb3JlIHRo ZSByZXN1bHQgaXMgdGhyb3duIHRvIHRoZSBwYWdlLiBZb3UgY291bGQgdXNlIHRoaXMsIGZv ciBleGFtcGxlLCB0byBtYWlsIG9mZiB5b3VyIG93biBkaWFnbm9zdGljcyBvciB0byBtYWtl IGEgZGVjaXNpb24gb24gd2hldGhlciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bh bj4gYXR0YWNrIHdhcyBsZWdpdGltYXRlIG9yIG5vdCBhbmQgZWl0aGVyIGJsb2NrIGl0IHlv dXJzZWxmIG9yIHN0cmlwIG91dCBhbnl0aGluZyBkb2RneSBhbmQgc2VuZCB0aGUgcmVxdWVz dCBvbi4gSWYgeW91IHdpc2ggdG8gZ28gZnVydGhlciwgdGhlcmUgaXMgYSA8YSBocmVmPSIj c21kX3Byb2doZWxwX2NhbGxiYWNrcyI+Y2FsbGJhY2sgYXZhaWxhYmxlPC9hPi48L2RkPgoJ CTxkZD5UaGUgc2Vuc2l0aXZpdHkgbWF5IGJlIGFsdGVyZWQgYnkgcmFpc2luZyB0aGUgbnVt YmVyOyAxIGlzIHRoZSBtb3N0IHNlbnNpdGl2ZSAoaS5lLiAxIG9mIHRoZSB0cmlnZ2VyIHdv cmRzIHdpbGwgdHJpcCB0aGUgc3dpdGNoKS4gWW91IGNhbiBjb250cm9sIDxzcGFuIGNsYXNz PSJjYXBzIj5HRVQ8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+UE9TVDwvc3Bhbj4g c2Vuc2l0aXZpdHkgaW5kZXBlbmRlbnRseSBieSBwdXR0aW5nIHR3byBjb21tYS1zZXBhcmF0 ZWQgdmFsdWVzIGluIHRoZSBib3guIElmIHlvdSBhY2NlcHQgY29tbWVudHMgb24geW91ciBz aXRlIGl0IG1heSBiZSBwcnVkZW50IHRvIHJhaXNlIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ UE9TVDwvc3Bhbj4gdmFsdWUsIGFzIGFueSBjb21tZW50IHRoYXQgY29udGFpbnMgd29yZHMg bGlrZSA8Y29kZT5zZWxlY3Q8L2NvZGU+IG9yIDxjb2RlPnVuaW9uPC9jb2RlPiBvciBldmVu IFRleHRpbGUmIzgyMTc7cyA8Y29kZT4tLTwvY29kZT4gd2lsbCB0cmlwIHRoZSBpbmplY3Rv ci4gQSBnb29kIHRyYWRlLW9mZiBiZXR3ZW4gc2VjdXJpdHkgYW5kIGZhbHNlIGFsYXJtcyBm b3IgYSBzaXRlIHdpdGggY29tbWVudHMgaXMgPGNvZGU+MSwgMzwvY29kZT4uIFJhaXNlIGZ1 cnRoZXIgaWYgeW91ciBjb21tZW50ZXJzIHJlZ3VsYXJseSBwb3N0IGNvZGUgZnJhZ21lbnRz IG9yIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IHN0YXRlbWVudHMuPC9kZD4KCQk8 ZGQ+VGhlcmUgaXMgYWxzbyB0aGUgb3B0aW9uIHRvIGVtcGxveSBhbiA8YWNyb255bSB0aXRs ZT0iQ3Jvc3MtU2l0ZSBTY3JpcHRpbmciPjxzcGFuIGNsYXNzPSJjYXBzIj5YU1M8L3NwYW4+ PC9hY3JvbnltPiBzaGllbGQgd2hpY2ggd2lsbCBlbmNvZGUgYWxsIHNwdXJpb3VzIGNoYXJh Y3RlcnMgdG8gaGVscCBwcmV2ZW50IGluamVjdGlvbiAvIGNvb2tpZSBhdHRhY2tzLiBOb3Rl IHRoYXQgYmVjYXVzZSB0aGUgY29tbWVudCBwcmV2aWV3IHN0ZXAgaXMgYWx3YXlzIHNraXBw ZWQgKHRvIGF2b2lkIHRyaWdnZXJpbmcgb24gcHJldmlldyBhbmQgYW5ub3lpbmcgZnJvZ25v c3RpYyByZWNpcGllbnRzKSwgdGhpcyBtYXkgY2F1c2UgcHVibGljbHkgc3VibWl0dGVkIGNv bW1lbnRzIHRvIG5vdCBhcHBlYXIgYXMgcHJldmlld2VkLiBFc3BlY2lhbGx5IGlmIGFuZ2xl IGJyYWNrZXRzIG9yIHRhZ3MgYXJlIHVzZWQgaW4gdGhlIGNvbW1lbnQgdGV4dC48L2RkPgoJ CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+U2VuZCBmb3JlbnNpY3MgZm9yPC9zcGFuPjwvZHQ+ CgkJPGRkPkUtbWFpbCBmcm9nbm9zdGljcyBpbmZvIHRvIHRoZSBkZXNpZ25hdGVkIGUtbWFp bCBhZGRyZXNzKGVzKSB3aGVuIGVpdGhlciBoZWFkZXIgdmlvbGF0aW9ucywgPHNwYW4gY2xh c3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5qZWN0aW9ucywgb3IgYm90aCBhcmUgZGV0ZWN0ZWQu PC9kZD4KCTwvZGw+CgoJPGgzPkZpbGVzeXN0ZW0gb3B0aW9uczwvaDM+CgoJPGRsPgoJCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+Q2hlY2sgZmlsZXMgZm9yPC9zcGFuPjwvZHQ+CgkJPGRk PkNob29zZSB3aGF0IHR5cGUgb2YgYWx0ZXJhdGlvbnMgeW91IHdpc2ggdG8gbW9uaXRvcjog bmV3IGZpbGVzIGFkZGVkLCBmaWxlcyBkZWxldGVkIG9yIGZpbGVzIG1vZGlmaWVkLiBCeSBk ZWZhdWx0LCBhZGRpdGlvbnMgYXJlIG5vdCBzZWxlY3RlZCBiZWNhdXNlIGl0IGluY3VycyBh ICh0aW55KSBleHRyYSBwcm9jZXNzaW5nIHBlbmFsdHkgdG8gdGhlIGNoZWNrcy4gVGhlcmVm b3JlIGlmIHlvdSB3YW50IHRvIG1vbml0b3IgZm9yIGFkZGl0aW9ucywgeW91IG5lZWQgdG8g b3B0LWluLjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5GaWxlIGxvY2F0aW9uczwv c3Bhbj48L2R0PgoJCTxkZD5Db21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyBm cm9tIHdoaWNoIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gc2VsZWN0IGZpbGVzIGZvciBtb25p dG9yaW5nLiBDaG9vc2Ugb25seSB0aGUgdG9wLWxldmVsIGZvbGRlcjsgZXZlcnl0aGluZyBi ZW5lYXRoIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZWxlY3RlZC4gSXQgZGVmYXVsdHMgdG8g eW91ciBzaXRlIHJvb3QuIElmIHVzaW5nIGEgbXVsdGktc2l0ZSBzZXR1cCB5b3UgbWF5IGhh dmUgdG8gYWx0ZXIgdGhpcy48L2RkPgoJCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+RXhjbHVk ZSBmb2xkZXJzPC9zcGFuPjwvZHQ+CgkJPGRkPlNpbmNlIHRoZSBsaXN0IG9mIGZpbGVzIHVu ZGVyIHlvdXIgVGV4dHBhdHRlcm4gaW5zdGFsbGF0aW9uIG1heSBwb3RlbnRpYWxseSBiZSBs YXJnZSB5b3UgY2FuIGRlc2lnbmF0ZSBzb21lIGZvbGRlcnMgdG8gYmUgYXV0b21hdGljYWxs eSBleGNsdWRlZCwgd2hpY2ggbWFrZXMgdGhlIGZpbGUgbGlzdCBzaG9ydGVyLjwvZGQ+CgkJ PGRkPkRlZmF1bHQ6IDxjb2RlPmltYWdlcywgZmlsZXMsIHRtcDwvY29kZT4uPC9kZD4KCQk8 ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPklnbm9yZSBmaWxlczwvc3Bhbj48L2R0PgoJCTxkZD5T b21lIGZpbGVzLCBzdWNoIGFzIHRoZSBlcnJvcl9sb2cgZmlsZSBvbiB0eXBpY2FsIExpbnV4 IGhvc3RzLCBwb3AgdXAgdW5hbm5vdW5jZWQgYW5kIHlvdSBtYXkgcGVyaW9kaWNhbGx5IGRl bGV0ZSB0aGVtLiBPbiBkZXZlbG9wbWVudCBzaXRlcyB0aGlzIGNhbiBjYXVzZSBleGNlc3Np dmUgYWxhcm1zIGR1cmluZyBkZWJ1Z2dpbmcuIFRvIG1pbmltaXNlIHRoaXMsIHlvdSBjYW4g bGlzdCBmaWxlcyBoZXJlIHRoYXQgeW91IGFsd2F5cyB3aXNoIHRvIGlnbm9yZS4gTm8gcGF0 aHMgYXJlIG5lY2Vzc2FyeToganVzdCBzdXBwbHkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBv ZiBmaWxlIG5hbWVzLiBXaWxkY2FyZHMgKCogYW5kID8pIGFyZSBwZXJtaXNzYWJsZS48L2Rk PgoJCTxkZD5Ob3RlIHRoYXQgdGhlIHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxlIGlzIGFs d2F5cyB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlIHNvIHRoZXJlJiM4MjE3O3Mgbm8gbmVl ZCB0byBsaXN0IGl0IGV4cGxpY2l0bHkuPC9kZD4KCTwvZGw+CgoJPGgzPlBsdWdpbiBvcHRp b25zPC9oMz4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5SZXN0cmljdCBwcm9n bm9zdGljIGNvbmZpZyB0bzwvc3Bhbj48L2R0PgoJCTxkZD5JZiB5b3UgaGF2ZSB0byBpc3N1 ZSBQdWJsaXNoZXIgLyBNYW5hZ2luZyBFZGl0b3IgcHJpdnMgdG8gc29tZW9uZSBlbHNlIGFz IHdlbGwgYXMgeW91cnNlbGYgYnV0IGRvbiYjODIxNzt0IHdhbnQgYW55b25lIG1lc3Npbmcg d2l0aCB0aGUgcGx1Z2luIHNldHRpbmdzLCBwdXQgYSBsaXN0IG9mIHBlcm1pdHRlZCB1c2Vy IG5hbWVzIGluIHRoaXMgYm94LiA8c3BhbiBjbGFzcz0iaW1wb3J0YW50Ij5CZSBjYXJlZnVs LiBUaGUgbmFtZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIGFuZCBpZiB5b3UgbWlzc3BlbGwgYSBu YW1lIHlvdSBjYW4gbG9jayB5b3Vyc2VsZiBvdXQgb2YgZWRpdGluZyB0aGUgc2V0dGluZ3Mh PC9zcGFuPjwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5BZG1pbi1zaWRlIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9zcGFuPjwvZHQ+CgkJPGRkPlRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBvZiB5b3VyICYjODIxNjt0ZXh0cGF0dGVybiYjODIx NzsgYWRtaW4gc2lkZS4gVGhpcyBpcyB1c3VhbGx5IDxjb2RlPmh0dHA6Ly9zaXRlLmNvbS90 ZXh0cGF0dGVybjwvY29kZT4gYnV0IGlmIHlvdSBhcmUgcnVubmluZyA8YSBocmVmPSIjc21k X3Byb2doZWxwX211bHRpc2l0ZSI+bXVsdGktc2l0ZTwvYT4gb3IgaGF2ZSBvdGhlcndpc2Ug YWx0ZXJlZCB0aGUgZGlyZWN0b3J5IHlvdSBjYW4gc3BlY2lmeSBpdCBoZXJlLjwvZGQ+CgkJ PGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5Qcm9nbm9zdGljcyBmb2xkZXI8L3NwYW4+PC9kdD4K CQk8ZGQ+VGhlIGZvbGRlciB3aGVyZSB0aGUgcHJvZ25vc3RpY3MgY2hlY2tzdW1zIGZpbGUg d2lsbCByZXNpZGUuIFRoZSBkaXJlY3RvcnkgbXVzdCBhbHJlYWR5IGV4aXN0IGFuZCBiZSB3 cml0YWJsZSBvciB5b3VyIGNob3NlbiBsb2NhdGlvbiB3aWxsIGJlIGlnbm9yZWQuPC9kZD4K CQk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPlVuaXF1ZSBwcmVmaXg8L3NwYW4+PC9kdD4KCQk8 ZGQ+UHJlZml4IHRoZSBjaGVja3N1bXMgZmlsZSB3aXRoIHRoaXMgc3RyaW5nLiBVc2VmdWwg dG8gYXZvaWQgZmlsZXMgY2xhc2hpbmcgaWYgeW91IGFyZSB1c2luZyB0aGUgc2FtZSAobm9u LWRvY3Jvb3QpIGZvbGRlciB0byBzdG9yZSB0aGUgY2hlY2tzdW1zIGZyb20gbW9yZSB0aGFu IG9uZSBzaXRlLjwvZGQ+Cgk8L2RsPgoKCTxoMiBpZD0ic21kX3Byb2doZWxwX2hvd2l0d29y a3MiPkhvdyBpdCB3b3JrczwvaDI+CgoJPHA+SWRlYWxseSwgdGhlIHBsdWdpbiB3b3VsZCBi ZSBhIHRpbWVkIHNjcmlwdCB0aGF0IHJ1bnMgZXZlcnkgTiBzZWNvbmRzLiBCdXQgdGhhdCBy ZXF1aXJlcyBhIHBhcnRpY3VsYXIgcGllY2Ugb2Ygc29mdHdhcmUgKGNyb24pIG9uIHlvdXIg aG9zdCBhbmQgdGhlcmUmIzgyMTc7cyBubyBndWFyYW50ZWUgaXQgZXhpc3RzLiBUaHVzIHRo ZSBvbmx5IHRoaW5nIHRoYXQgY2FuICYjODIxNjt0cmlnZ2VyJiM4MjE3OyB0aGUgcGx1Z2lu IGlzIFRleHRwYXR0ZXJuIGl0c2VsZi4gVGhlIHBsdWdpbiBydW5zIGV2ZXJ5IHRpbWUgeW91 IGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNpZGUsIGJ1dCBpZiBpdCBjaGVja2VkIGFsbCB0 aGUgZmlsZXMgYWdhaW5zdCBhbGwgdGhlIGNoZWNrc3VtcyB5b3UgaGF2ZSBjaG9zZW4gb24g ZXZlcnkgY2xpY2ssIHlvdXIgYWRtaW4gc2lkZSB3b3VsZCBzbG93IGRvd24gYSBsb3QuIFRo ZSBjb21wcm9taXNlIGlzIHRvIHNwZWNpZnkgYSB0aW1lb3V0IHZhbHVlIGFuZCBhIG51bWJl ciBvZiBmaWxlcyB0byBjaGVjay4gVGhpcyBpcyBob3cgaXQgd29ya3M6PC9wPgoKCTxvbD4K CQk8bGk+V2hlbiB5b3UgY2xpY2sgYSB0YWIgb3IgaW50ZXJhY3Qgd2l0aCB0aGUgYWRtaW4g c2lkZSwgdGhlIHBsdWdpbiBsb29rcyBhdCB3aGVuIHlvdSA8ZW0+bGFzdDwvZW0+IGNsaWNr ZWQgc29tZXRoaW5nIGFuZCBhc2tzICYjODIyMDtpcyBpdCBncmVhdGVyIHRoYW4gTiAoc2Vj b25kcyk/JiM4MjIxOyB3aGVyZSBOIGlzIHRoZSB2YWx1ZSBvZiA8Y29kZT5DaGVjayBmaWxl cyAoYXQgbW9zdCkgZXZlcnk8L2NvZGU+IG9uIHRoZSBTZXR1cCBwYW5lbC4gSXQgYWxzbyBj aGVja3MgaWYgdGhlIGN1cnJlbnQgdGltZSBvZiBkYXkgaXMgYmV0d2VlbiB0aGUgdmFsdWVz IHNwZWNpZmllZCBpbiA8Y29kZT5DaGVjayBmaWxlcyBiZXR3ZWVuPC9jb2RlPjwvbGk+CgkJ PGxpPklmIHNvLCBpdCBncmFicyBhcyBtYW55IGZpbGVzIGFzIHlvdSBoYXZlIHNwZWNpZmll ZCBpbiA8Y29kZT5DaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0aW1lPC9jb2RlPiwgdGVz dHMgdGhlbSBhbmQgcmVzZXRzIHRoZSB0aW1lci4gSXQga2VlcHMgYSBub3RlIG9mIGhvdyBm YXIgaXQgaGFzIHdvcmtlZCB0aHJvdWdoIHlvdXIgbGlzdCBvZiBmaWxlcyBhbmQgY29udGlu dWVzIHdoZXJlIGl0IGxlZnQgb2ZmIG5leHQgdGltZSBpdCBydW5zPC9saT4KCQk8bGk+SWYg dGhlIHZhbHVlIG9mIE4gaGFzIG5vdCB5ZXQgYmVlbiByZWFjaGVkLCBpdCBkb2VzIG5vdGhp bmcsIHRodXMgc2F2aW5nIHlvdSBwcmVjaW91cyBwcm9jZXNzb3IgY3ljbGVzPC9saT4KCTwv b2w+CgoJPHA+QWxsIHRoYXQgaXMgZ3JlYXQgaWYgeW91JiM4MjE3O3JlIGNvbnRpbnVhbGx5 IHVzaW5nIHRoZSBhZG1pbiBzaWRlIGFuZCBwcm9kdWNpbmcgY2xpY2tzIGZvciB0aGUgcGx1 Z2luIHRvIHJ1bi4gQnV0IG9uY2UgeW91IGhhbmQgb3ZlciB0aGUgc2l0ZSB0byB5b3VyIGNs aWVudCwgdGhleSBtYXkgbm90IHVzZSB0aGUgYWRtaW4gc2lkZSBhcyBvZnRlbiBhcyB5b3Ug JiM4MjEyOyBpZiBhdCBhbGwuIFRodXMgeW91ciBmaWxlcyB3b3VsZCByYXJlbHkvbmV2ZXIg YmUgY2hlY2tlZC4gVG8gY291bnRlcmFjdCB0aGlzLCB5b3UgY2FuIGFzayB0aGUgcGx1Z2lu IHRvIHJlc3BvbmQgdG8gcHVibGljIHNpZGUgY2xpY2tzIGFzIHdlbGwgc28gdGhhdCBhbnkg dGltZSBhIHZpc2l0b3IgKG9yIGJvdCkgY3Jhd2xzIHlvdXIgcGFnZXMgdGhlIHBsdWdpbiBy dW5zLCBjaGVja3MgaWYgdGhlIHRpbWVvdXQgaGFzIGJlZW4gZXhjZWVkZWQgYW5kLCBpZiBz bywgY2hlY2tzIHNvbWUgZmlsZXMgYW5kIHJlc2V0cyB0aGUgdGltZXIgKGV4YWN0bHkgYXMg aXQgd291bGQgZG8gb24gdGhlIGFkbWluIHNpZGUpLjwvcD4KCgk8cD5UaGlzIHdpbGwgcHVz aCB0aGUgcHJvY2Vzc2luZyBsb2FkIG9udG8geW91ciBwdWJsaWMgc2l0ZSwgYnV0IHNpbmNl IGl0JiM4MjE3O3Mgb25seSBydW4gYXQgbW9zdCBvbmNlIGV2ZXJ5IE4gc2Vjb25kcyBhbmQg eW91IHNwZWNpZnkgaG93IG1hbnkgZmlsZXMgdG8gcmVhZCBlYWNoIHRpbWUsIHlvdSBjYW4g Y29udHJvbCBob3cgbXVjaCBvZiBhbiBpbXBhY3QgaXQgaGFzIGJ5IG1hdGNoaW5nIHRoYXQg d2l0aCB5b3VyIGRlc2lyZSB0byBrbm93ICYjODIxNjtpbnN0YW50bHkmIzgyMTc7IHRoYXQg c29tZXRoaW5nIGhhcyBjaGFuZ2VkIHZlcnN1cyB0aGUgdm9sdW1lIG9mIHRyYWZmaWMgLyB2 aXNpdG9ycyB0byB0aGUgc2l0ZSBhbmQgaG93IG9mdGVuIHlvdSB3YW50IHRvIGRlbGF5IHRo ZWlyIGJyb3dzaW5nLjwvcD4KCgk8cD5UaGUgZ29vZCB0aGluZyBhYm91dCBiZWluZyBhYmxl IHRvIHNwZWNpZnkgYm90aCB0aGUgdGltZW91dCwgdGhlIHRpbWUgb2YgZGF5IGFuZCB0aGUg cXVhbnRpdHkgb2YgZmlsZXMgaXMgdGhhdCB5b3UgY2FuIGRldGVybWluZSBpZiB0aGUgcGx1 Z2luIHJ1bnMgJiM4MjE2O2xpdHRsZSBhbmQgb2Z0ZW4mIzgyMTc7IG9yIHRha2VzIG1vcmUg b2YgeW91ciByZXNvdXJjZXMgd2hlbiBpdCBydW5zIGxlc3MgZnJlcXVlbnRseSBvciBkdXJp bmcgb2ZmLXBlYWsgdGltZXMuIFRoZSByZWNvbW1lbmRhdGlvbiBpcyB0byBydW4gZmFpcmx5 IGZyZXF1ZW50bHkgJiM4MjEyOyBiZXR3ZWVuIDEwIGFuZCA2MCBzZWNvbmRzIGlzIGdvb2Qg JiM4MjEyOyBhbmQgb25seSBwcm9jZXNzaW5nIGEgc21hbGwgbnVtYmVyIG9mIGZpbGVzLCBz YXkgMjAgb3IgMzAgZWFjaCB0aW1lLjwvcD4KCgk8cD5BcyBhbiBleGFtcGxlLCBpZiB5b3Ug bW9uaXRvcmVkIGV2ZXJ5IGZpbGUgaW4gYSBzdG9jayBUeHAgaW5zdGFsbGF0aW9uIHdpdGgg YSB0ZW4tc2Vjb25kIHRpbWVvdXQgYW5kIGNoZWNrZWQgMzAgZmlsZXMgZWFjaCB0aW1lLCB0 aGVuICYjODIxMjsgYXNzdW1pbmcgeW91IGhhZCBhdCBsZWFzdCBmaXZlIGNsaWNrcyBwZXIg bWludXRlICYjODIxMjsgeW91IHdvdWxkIGN5Y2xlIHRocm91Z2ggdGhlbSBpbiB1bmRlciBh IG1pbnV0ZS4gQW5kIHlvdXIgdmlzaXRvcnMgcHJvYmFibHkgd29uJiM4MjE3O3Qgbm90aWNl IHRoZSBkZWxheS4gSWYgeW91IGhhdmUgZmV3ZXIgdGhhbiBmaXZlIGNsaWNrcyBwZXIgbWlu dXRlIHRoZW4gaXQgd2lsbCB0YWtlIGxvbmdlciB0byBjeWNsZSB0aHJvdWdoIHRoZSBmaWxl cyBhbmQgdGhlIGNoYW5jZSBvZiBjYXRjaGluZyBjaGFuZ2VzIGFzIHRoZXkgaGFwcGVuIHJl ZHVjZXMuIEJ1dCBpZiB5b3UgcnVuIHRvbyBvZnRlbiAoc2F5LCBldmVyeSBvbmUgb3IgdHdv IHNlY29uZHMpIHlvdSBhcmUgd2FzdGluZyB5b3VyIHZpc2l0b3JzJiM4MjE3OyB0aW1lLCB5 b3VyIHNlcnZlciYjODIxNztzIHJlc291cmNlcyBhbmQgaW5jcmVhc2luZyB0aGUgY2hhbmNl IG9mIHRoZSBwbHVnaW4gbWlzaW5mb3JtaW5nIHlvdSBvZiBhbHRlcmF0aW9ucyAoaXQgbWF5 IHN0aWxsIGJlIHBhcnR3YXkgdGhyb3VnaCB0aGUgcHJldmlvdXMgcnVuIHdoZW4gdGhlIG5l eHQgb2NjdXJzIGFuZCB0cmlnZ2VyIGEgd2FybmluZykuPC9wPgoKCTxwPlRoZSBwbHVnaW4g aXMgd3JpdHRlbiB0byBiZSBhcyBxdWljayBhbmQgZWZmaWNpZW50IGFzIGl0IHBvc3NpYmx5 IGNhbiB0byBhdm9pZCBhbnkgZGVsYXlzOyB0aGVyZSBtYXkgYmUgPGEgaHJlZj0iI3NtZF9w cm9naGVscF9iZXR0ZXIiPnJvb20gZm9yIGltcHJvdmVtZW50PC9hPiBvZiBjb3Vyc2UhIFBs ZWFzZSBiZSBhd2FyZSB0aGF0IG5vIGRldGVjdGlvbiBzeXN0ZW0gaXMgZm9vbHByb29mIGFu ZCB0aGVyZSBpcyBubyBzdWJzdGl0dXRlIGZvciB2aWdpbGFuY2UgYW5kIDxhIGhyZWY9IiNz bWRfcHJvZ2hlbHBfcHdzdHJlbmd0aCI+Z29vZCBwYXNzd29yZHM8L2E+IDotKTwvcD4KCgk8 aDIgaWQ9InNtZF9wcm9naGVscF9tb25maWxlcyI+TW9uaXRvcmluZyBmaWxlczwvaDI+CgoJ PHA+Q2xpY2tpbmcgdGhlIDxlbT5GaWxlczwvZW0+IGJ1dHRvbiB0YWtlcyB5b3UgdG8gYSBz Y3JlZW4gd2l0aCBhIHRleHRhcmVhIHRoYXQgYWxsb3dzIHlvdSB0byBjaG9vc2UgdGhlIGZp bGVzIHlvdSB3aXNoIHRvIG1vbml0b3IuIEEgY291bnQgb2YgdGhlIGN1cnJlbnQgbnVtYmVy IG9mIG1vbml0b3JlZCBmaWxlcyBpcyBzaG93biBhdCB0aGUgdG9wLCBhbG9uZyB3aXRoIHRo ZSBudW1iZXIgb2YgZmlsZXMgYXZhaWxhYmxlIGluIHlvdXIgY2hvc2VuIGZpbGUgbG9jYXRp b24ocykuIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBiZSBpbiB0aGUgbGlzdDo8L3A+CgoJ PG9sPgoJCTxsaT5hbGwgZmlsZXMgaW4gYWxsIHN1YmRpcmVjdG9yaWVzIGZyb20gYWxsIDxj b2RlPkZpbGUgbG9jYXRpb25zPC9jb2RlPiB5b3Ugc3BlY2lmaWVkIHRvIG1vbml0b3IgaW4g dGhlIFNldHVwIHNjcmVlbjwvbGk+CgkJPGxpPjxlbT5leGNlcHQ8L2VtPiBhbnkgZmlsZXMg YmVsb3cgdGhlIGRpcmVjdG9yaWVzIHlvdSBjaG9zZSB0byBleGNsdWRlPC9saT4KCQk8bGk+ PGVtPmV4Y2VwdDwvZW0+IGFueSBmaWxlIG5hbWVzIHlvdSBleHBsaWNpdGx5IGNob3NlIHRv IGlnbm9yZTwvbGk+CgkJPGxpPjxlbT5leGNlcHQ8L2VtPiB0aGUgcHJvZ25vc3RpY3MgY2hl Y2tzdW1zIGZpbGU8L2xpPgoJPC9vbD4KCgk8cD5BdCBmaXJzdCwgbm8gZmlsZXMgd2lsbCBi ZSBzZWxlY3RlZCBzbyB5b3Ugd2lsbCBiZSBtb25pdG9yaW5nIG5vdGhpbmcuIENob29zZSB3 aGljaCBmaWxlcyB5b3Ugd2lzaCB0byBtb25pdG9yIGFuZCBzYXZlIHRoZSBjaGFuZ2VzLiBU aGUgcGx1Z2luIHdpbGwga2VlcCB0YWJzIG9uIHRob3NlIGZpbGVzLjwvcD4KCgk8cD5JZiB5 b3UgaGF2ZSBlbGVjdGVkIHRvIHdhdGNoIGZvciBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgc3lz dGVtLCBhbnkgZmlsZXMgaW4gYW55IG9mIHlvdXIgY2hvc2VuIGxvY2F0aW9ucyB0aGF0IGFy ZSBub3QgY3VycmVudGx5IGluIHRoZSBsaXN0IGF0IHRoZSB0aW1lIHlvdSBoaXQgPGVtPlNh dmU8L2VtPiAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIHlvdSBhcmUgbW9uaXRvcmluZyB0aGVt IG9yIG5vdCkgd2lsbCB0cmlnZ2VyIGFuIGFsYXJtLiBHbyBhaGVhZCBhbmQgdHJ5IGl0OiBh ZGQgc29tZSBmaWxlcyB0byB5b3VyIHNlcnZlciBvciBpbnN0YWxsIGEgbmV3IHRoZW1lIG9y IHNvbWV0aGluZyBhbmQgdGhlIHBsdWdpbiB3aWxsIHRlbGwgeW91LjwvcD4KCgk8aDIgaWQ9 InNtZF9wcm9naGVscF9hY2siPkFja25vd2xlZGdpbmcgYWxhcm1zPC9oMj4KCgk8cD5JZiBv bmUgb3IgbW9yZSBmaWxlcyBhcmUgYWx0ZXJlZCwgZGVsZXRlZCwgb3IgbmV3IGZpbGVzIGhh dmUgYmVlbiBhZGRlZCAoZGVwZW5kaW5nIG9uIHdoaWNoIGFjdGlvbnMgeW91IGhhdmUgZWxl Y3RlZCB0byBtb25pdG9yKSB0aGUgcGx1Z2luIHdpbGwgZGV0ZWN0IHRoaXMgd2hlbiB0aGUg bmV4dCBhZG1pbi0gb3IgcHVibGljLXNpZGUgY2xpY2sgaXMgcmVjZWl2ZWQgYW5kIHRoZSB0 aW1lb3V0IGN5Y2xlIGlzIGV4Y2VlZGVkLiBJdCB3aWxsIHRoZW4gdGFrZSB0aGUgYWN0aW9u IHlvdSBjaG9zZS4gTm90ZSBvZiBjb3Vyc2UgdGhhdCB5b3Ugd29uJiM4MjE3O3Qgc2VlIHRo ZSBhZG1pbi1zaWRlIHdhcm5pbmcgaWYgbm90IGxvZ2dlZCBpbiE8L3A+CgoJPHA+VGhlIG1l c3NhZ2UgZGVsaXZlcmVkIHRvIHlvdSBjb250YWlucyBhIGxpbmsgdG8gdGhlIEFja25vd2xl ZGdlbWVudCBwYWdlICh3aGljaCBjYW4gYWxzbyBiZSByZWFjaGVkIGJ5IGNsaWNraW5nIHRo ZSA8ZW0+QWxhcm1zPC9lbT4gYnV0dG9uIGZyb20gdGhlIFByb2dub3N0aWNzIHRhYikuIFlv dSBhcmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXN5c3RlbSBhbHRl cmF0aW9ucy4gSWYgeW91IGtub3cgYWJvdXQgdGhlIGNoYW5nZXMgJiM4MjEyOyBlLmcuIHlv dSBpbml0aWF0ZWQgdGhlbSBieSB1cGxvYWRpbmcgc29tZSBuZXcgZmlsZSB2ZXJzaW9uKHMp ICYjODIxMjsgdGhlbiB5b3UgY2FuIGFja25vd2xlZ2RlIHRoaXMgYnkgcGxhY2luZyBhIGNo ZWNrIG1hcmsgbmV4dCB0byB0aGUgZmlsZXMgeW91IGtub3cgY29udGFpbiBsZWdpdGltYXRl IGFsdGVyYXRpb25zLiBXaGVuIHlvdSBjbGljayB0aGUgPGVtPkFja25vd2xlZGdlPC9lbT4g YnV0dG9uIHlvdSBzaWduaWZ5IHRvIHRoZSBwbHVnaW4gdGhhdCB5b3UgYWNjZXB0IHRoZSBj aGFuZ2VzLiBUaHVzIHRoZSBuZXcgZmlsZShzKSBiZWNvbWUgdGhlIGJhc2VsaW5lLjwvcD4K Cgk8cD5JZiB5b3UgYXJlIG1vbml0b3JpbmcgZmlsZSBzeXN0ZW0gYWRkaXRpb25zLCB0aGUg YWN0IG9mIGFja25vd2xlZGdpbmcgdGhlIGFsYXJtIGluZGljYXRlcyB0aGF0IHlvdSBhcmUg aGFwcHkgZm9yIHRoZSBuZXcgZmlsZShzKSB0byBiZSBtb25pdG9yZWQuIFRoZXkgd2lsbCBh dXRvbWF0aWNhbGx5IGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIEZpbGVzIHRvIG1vbml0b3Ig KHlvdSBjYW4gdmVyaWZ5IHRoaXMgYnkgdmlzaXRpbmcgdGhlIFByb2dub3N0aWMgdGFiJiM4 MjE3O3MgPGVtPkZpbGVzPC9lbT4gbGlzdCkuIElmIHlvdSBrbm93IGFib3V0IHNvbWUgb2Yg dGhlIGZpbGVzIChwZXJoYXBzIHRoZXkgYXJlIG5ldyBhZGRpdGlvbnMpIGFuZCB5b3UgZG9u JiM4MjE3O3Qgd2FudCB0byBtb25pdG9yIHRoZW0sIHNlbGVjdCB0aGUgZmlsZShzKSBhbmQg Y2xpY2sgPGVtPklnbm9yZTwvZW0+LiBUaGUgYWxhcm0gd2lsbCBiZSBhY2tub3dsZWRnZWQg YnV0IHlvdSB3aWxsIG5vdCBiZSBtb25pdG9yaW5nIHRoZSBmaWxlKHMpLjwvcD4KCgk8cD5J ZiB5b3UgY2hvb3NlIG5vdCB0byBhY2tub3dsZWRnZS9pZ25vcmUgc29tZSBvciBhbGwgb2Yg dGhlIGZpbGVzLCB5b3Ugd2lsbCBjb250aW51ZSB0byBiZSBuYWdnZWQgYXQgeW91ciBkZXNp Z25hdGVkIGFsYXJtIGZyZXF1ZW5jeSB1bnRpbCB5b3UgYWNrbm93bGVkZ2UgdGhlIHByb2Js ZW1zIG9yIGZpeCB0aGUgZmlsZXN5c3RlbSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuIERvIGJl YXIgaW4gbWluZCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBmcmVxdWVuY3kgdGhhdCBhbGVydGlu ZyB0b28gb2Z0ZW4gY2FuIGFsaWVuYXRlIHVzZXJzIGFuZCBtYWtlIGFuIGFsYXJtIHNpdHVh dGlvbiBsZXNzIGVmZmVjdGl2ZS48L3A+CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfY3NpIj5G b3JlbnNpY3M8L2gyPgoKCTxwPjxzdHJvbmc+QmVmb3JlPC9zdHJvbmc+IGFja25vd2xlZGdp bmcgYWxhcm1zLCB5b3UgbWF5IGNob29zZSB0byBzZW5kIG9mZiBmb3JlbnNpY3MgaW5mb3Jt YXRpb24gdG8gYSBkZXNpZ25hdGVkIGUtbWFpbCBhZGRyZXNzLiBUaGUgZm9sbG93aW5nIGlu Zm9ybWF0aW9uIGlzIHNlbnQ6PC9wPgoKCTx1bD4KCQk8bGk+RmlsZSBpbmZvcm1hdGlvbiBh Ym91dCBlYWNoIGNoYW5nZWQvYWRkZWQgZmlsZSwgc3VjaCBhcyBpdHMgc2l6ZSwgbW9kaWZp Y2F0aW9uIHRpbWUsIGFuZCB1c2VyIC8gZ3JvdXAgb3duZXJzaGlwPC9saT4KCQk8bGk+VGhl IGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0aGVtc2VsdmVzLCA8c3BhbiBjbGFzcz0iY2FwcyI+ QkFTRTwvc3Bhbj4tNjQgZW5jb2RlZCBpbiB0aGUgYm9keSBvZiB0aGUgZS1tYWlsPC9saT4K CQk8bGk+VGhlIG5hbWVzICZhbXA7IHBhdGhzIG9mIGFueSBkZWxldGVkIGZpbGVzPC9saT4K CQk8bGk+QW55IFR4cCBsb2cgZW50cmllcyB0aGF0IG9jY3VycmVkIGVpdGhlciBzaWRlIG9m IHRoZSBhbGFybSBjb25kaXRpb24gKGxvZ2dpbmcgbXVzdCBiZSBlbmFibGVkIGluIHlvdXIg PGVtPkFkbWluIC0mZ3Q7IFByZWZlcmVuY2VzPC9lbT4pPC9saT4KCTwvdWw+CgoJPHA+WW91 IGNhbiBzZWxlY3Qgd2hpY2ggZmlsZSBpbmZvcm1hdGlvbiB0byBzZW5kIG9mZiB2aWEgdGhl IGNoZWNrIGJveGVzLiBUaGUgb25lcyB5b3Ugc2VsZWN0ZWQgd2lsbCByZW1haW4gc2VsZWN0 ZWQgZm9yIGNvbnZlbmllbmNlIGFmdGVyIHRoZSBmb3JlbnNpY3MgaGF2ZSBiZWVuIHNlbnQs IHNvIHlvdSBtYXkgaW1tZWRpYXRlbHkgaGl0IDxlbT5BY2tub3dsZWRnZTwvZW0+IHRvIGFj a25vd2xlZGdlIHRoZSBvbmVzIHlvdSBub3RpZmllZC48L3A+CgoJPGgyIGlkPSJzbWRfcHJv Z2hlbHBfYWR2aWNlIj5BZHZpY2U8L2gyPgoKCTxwPkNsaWNraW5nIHRoZSA8ZW0+QWR2aWNl PC9lbT4gYnV0dG9uIHdpbGwgcnVuIHRocm91Z2ggYSBzZXJpZXMgb2YgY2hlY2tzIGFuZCBv ZmZlciBzdWdnZXN0aW9ucyBvbiBob3cgdG8gaGFyZGVuIHlvdXIgaW5zdGFsbGF0aW9uLiBU aGUgbW9zdCBpbXBvcnRhbnQgb25lIHRvIGZvbGxvdyBpcyBpZiB5b3UgYXJlIHdhcm5lZCBh Ym91dCB0aGUgcHJvZ25vc3RpY3MgY2hlY2tzdW1zIGZpbGUgYmVpbmcgaW4gZG9jcm9vdC4g SXQgaXMgPGVtPmhpZ2hseSByZWNvbW1lbmRlZDwvZW0+IHRvIG1vdmUgaXQgc29tZXdoZXJl IG5vbi13ZWIgYWNjZXNzaWJsZS48L3A+CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfcHdzdHJl bmd0aCI+UGFzc3dvcmQgc3RyZW5ndGg8L2gyPgoKCTxwPkFzIGFuIGFpZCB0byB5b3VyIHVz ZXJzLCBhIHBhc3N3b3JkIHN0cmVuZ3RoIG1ldGVyIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVk ZWQgb24gdGhlIDxlbT5BZG1pbi0mZ3Q7VXNlcnM8L2VtPiB0YWIuIFdoZW4geW91IHR5cGUg dG8gY2hhbmdlIHlvdXIgcGFzc3dvcmQsIGFuIGluZGljYXRpb24gb2YgdGhlIHRpbWUgYSBj dXJyZW50IGRlc2t0b3AgUEMgd291bGQgdGFrZSB0byBjcmFjayBpdCBpcyBnaXZlbi4gSXQm IzgyMTc7cyBhIHZlcnkgcm91Z2ggY2FsY3VsYXRpb24sIGFsdGhvdWdoIE1vb3JlJiM4MjE3 O3MgTGF3IGlzIGF1dG9tYXRpY2FsbHkgdGFrZW4gaW50byBhY2NvdW50ICh0aHVzIHlvdXIg cGFzc3dvcmQgd2lsbCBiZWNvbWUgd2Vha2VyIG92ZXIgdGltZSBpZiB5b3UgZG8gbm90IGNo YW5nZSBpdCkuPC9wPgoKCTxwPllvdSB3aWxsIGRvIHlvdXJzZWxmIGFuZCB5b3VyIHN5c3Rl bSBhIGh1Z2UgZmF2b3VyIHRvIGNob29zZSBhIHBhc3NwaHJhc2UgdGhhdCB0YWtlcyBpbiBl eGNlc3Mgb2YgYSBmZXcgdGhvdXNhbmQgeWVhcnMgdG8gY3JhY2suIFRoZSBsb25nZXIgdGhl IGJldHRlci4gUmVtZW1iZXIgdGhpcyBpcyBiYXNlZCBvbiBhIGJydXRlIGZvcmNlIGF0dGFj ayB1c2luZyBhIHNpbmdsZSBkZXNrdG9wIFBDICYjODIxMjsgbm90IGEgbWFpbmZyYW1lIG9y IGEgUEMgZmFybSAmIzgyMTI7IGFuZCBpdCBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBo b3cgZWFzeSB0aGUgcGFzc3dvcmQgaXMgdG8gZ3Vlc3MgaWYgeW91IHVzZSBkaWN0aW9uYXJ5 IHdvcmRzIG9yIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9ibG9nL2Nob29zaW5n LWEtYnJpbGxpYW50LXBhc3N3b3JkIj5zb21lIG90aGVyIGJhZCBwYXNzd29yZDwvYT4uIENo b29zZSBhIGdvb2Qgb25lIGFuZCB5b3UgPHN0cm9uZz5zaWduaWZpY2FudGx5PC9zdHJvbmc+ IHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgb2YgYSBzdWNjZXNzZnVsIGF0dGFjay48L3A+CgoJ PGgyIGlkPSJzbWRfcHJvZ2hlbHBfY2FsbGJhY2tzIj5DYWxsYmFja3M8L2gyPgoKCTxwPlRo ZSBwbHVnaW4gaGFzIGEgY2FsbGJhY2sgb2YgaXRzIG93biBhbGxvd2luZyB5b3UgdG8gcGVy Zm9ybSBjdXN0b20gPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5qZWN0aW9uIHRl c3RzLiBIb29rIHlvdXIgb3duIGNvZGUgaW50byBpdCBieSByYWlzaW5nIGEgY2FsbGJhY2sg b24gdGhlIGV2ZW50IDxjb2RlPnNtZF9mcm9nbm9zdGljczwvY29kZT4gYW5kIHN0ZXAgPGNv ZGU+c3FsX2luamVjdGlvbjwvY29kZT4uIFRoaXMgY2FsbGJhY2sgZmlyZXMgb24gZXZlcnkg cGFnZSBhY2Nlc3MgaWYgPGNvZGU+UHJvdGVjdCBhZ2FpbnN0IFNRTCBpbmplY3Rpb248L2Nv ZGU+IGlzIGVuYWJsZWQuPC9wPgoKCTxwPllvdXIgY29kZSBjYW4gcmV0dXJuOjwvcD4KCgk8 dWw+CgkJPGxpPi0xIHRvIGFzc2VydCAmIzgyMjA7bm8gaW5qZWN0aW9uIGRldGVjdGVkIGF0 IGFsbCBhbmQgZG8gbm90IHJ1biB0aGUgcGx1Z2luJiM4MjE3O3MgPHNwYW4gY2xhc3M9ImNh cHMiPlNRTDwvc3Bhbj4gY2hlY2tzJiM4MjIxOzwvbGk+CgkJPGxpPjAgdG8gYXNzZXJ0ICYj ODIyMDtubyBpbmplY3Rpb24gZGV0ZWN0ZWQgYnV0IHJ1biB0aGUgcGx1Z2luIGNoZWNrcyBh cyB3ZWxsJiM4MjIxOzwvbGk+CgkJPGxpPjEgdG8gYXNzZXJ0ICYjODIyMDtpbmplY3Rpb24g ZGV0ZWN0ZWQmIzgyMjE7IChwbHVnaW4gY2hlY2tzIGFyZSBieXBhc3NlZCk8L2xpPgoJPC91 bD4KCgk8cD5JbiBhbGwgY2FzZXMsIHRoZSBwbHVnaW4gd2lsbCBjb250aW51ZSB0byBwcm9j ZXNzIGZvcmVuc2ljcyBldmlkZW5jZSBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPkhUVFA8L3Nw YW4+IHJlZGlyZWN0aW9uIGlmIHRoZSBvcHRpb25zIGFyZSBlbmFibGVkLiBCYWlsIG91dCB3 aXRoIGFuIDxjb2RlPmV4aXQoKTwvY29kZT4gb3IgPGNvZGU+dHhwX2RpZSgpPC9jb2RlPiBp ZiB5b3Ugd2lzaCB0aGUgcGx1Z2luIHRvIHRlcm1pbmF0ZSBpbnN0ZWFkLjwvcD4KCgk8aDIg aWQ9InNtZF9wcm9naGVscF9tdWx0aXNpdGUiPk11bHRpLXNpdGUgc2V0dXA8L2gyPgoKCTxw PklmIHlvdSBhcmUgdXNpbmcgVHhwJiM4MjE3O3MgbXVsdGktc2l0ZSBmZWF0dXJlIHRoZXJl IGFyZSBzb21lIGFkZGl0aW9uYWwgdGhpbmdzIHRvIG5vdGU6PC9wPgoKCTxvbD4KCQk8bGk+ WW91IHNob3VsZCBzZXQgc21kX3Byb2dub3N0aWNzIHVwIG9uIDxlbT5lYWNoPC9lbT4gZG9t YWluIHlvdSB3aXNoIHRvIHByb3RlY3QgdG8gYXZvaWQgb3ZlcmxvYWRpbmcgb25lIGRvbWFp biB3aXRoIGNoZWNraW5nIHRoZW0gYWxsPC9saT4KCQk8bGk+Q2hvb3NlIGp1c3Qgb25lIG9m IHlvdXIgZG9tYWlucyBhcyB0aGUgJiM4MjE2O21hc3RlciYjODIxNzsgd2hpY2ggd2lsbCBt b25pdG9yIHRoZSBUZXh0cGF0dGVybiBjb3JlIGZpbGVzPC9saT4KCQk8bGk+Q29uc2lkZXIg bW92aW5nIGFsbCB0aGUgZG9tYWlucyBpbiB0aGUgPGNvZGU+L3NpdGVzPC9jb2RlPiBmb2xk ZXIgb3V0c2lkZSBkb2Nyb290PC9saT4KCQk8bGk+RW5zdXJlIHlvdSBlbXBsb3kgYSA8Y29k ZT5VbmlxdWUgcHJlZml4PC9jb2RlPiBvciB5b3VyIGNoZWNrc3VtcyBmaWxlcyB3aWxsIGNs YXNoLCBjYXVzaW5nIG9kZCBiZWhhdmlvdXIuIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgaXMg dG8gdXNlIHRoZSA8Y29kZT5Qcm9nbm9zdGljcyBmb2xkZXI8L2NvZGU+IHNldHRpbmcgdG8g bW92ZSBhbGwgY2hlY2tzdW0gZmlsZXMgdG8gYSBjZW50cmFsIGxvY2F0aW9uICYjODIxMjsg b3V0c2lkZSBkb2Nyb290ICYjODIxMjsgYW5kIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgZm9y IGFsbCBkb21haW5zLiBUaGUgPGNvZGU+VW5pcXVlIHByZWZpeDwvY29kZT4gd2lsbCB0aGVu IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbTwvbGk+CgkJPGxpPlRoZSA8Y29kZT5BZG1pbi1z aWRlIFVSTDwvY29kZT4gbWF5IHdlbGwgYmUgd3Jvbmc6IHlvdSBzaG91bGQgcHJvYmFibHkg Y2hhbmdlIHRoaXMgb24gZWFjaCBkb21haW48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9InNtZF9w cm9naGVscF9iZXR0ZXIiPkhlbHAgbWFrZSB0aGUgcGx1Z2luIGJldHRlcjwvaDI+CgoJPHA+ SWYgc21kX3Byb2dub3N0aWNzIGRvZXMgZGV0ZWN0IHNvbWUgcm9ndWUgZWxlbWVudHMgaW4g eW91ciBmaWxlc3lzdGVtLCBwbGVhc2UgY29uc2lkZXIgc2VuZGluZyB0aGUgZm9yZW5zaWNz IHRvIHByb2dub3N0aWNzIFthdF0gc3RlZmRhd3NvbiBbZG90XSBjb20gd2l0aCBhcyBtdWNo IGluZm9ybWF0aW9uIGFzIHlvdSBwb3NzaWJseSBjYW4uIFlvdSBjYW4gZWl0aGVyIGRvIHRo aXMgYXV0b21hdGljYWxseSBmcm9tIHdpdGhpbiB0aGUgcGx1Z2luIChzZWUgdGhlIHNldHVw IHBhZ2UsIHRob3VnaCBub3RlIHRoZSBzZW5zaXRpdml0eSBvZiBzb21lIG9mIHRoZSBkYXRh IHNlbnQpIG9yIGNvcHkgYW5kIHBhc3RlIHJlbGV2YW50IGluZm9ybWF0aW9uIGludG8gYW4g ZS1tYWlsLiBUaGUgc29ydCBvZiBzdHVmZiB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBpczo8L3A+ CgoJPHVsPgoJCTxsaT5UeHAgKGFuZC9vciBzZXJ2ZXIpIGxvZ3MgZm9yIHRoZSB0aW1lIG9m IHRoZSBhdHRhY2s8L2xpPgoJCTxsaT5UaGUgbGluZXMgb2YgdGhlIGZpbGUocykgdGhhdCB3 ZXJlIGFmZmVjdGVkIChvciB0aGUgZmlsZXMgaW4gdGhlaXIgZW50aXJldHkpPC9saT4KCQk8 bGk+VGhlIGNvbnRlbnQgb2YgYW55IGFkZGl0aW9uYWwgbGluZXMgYWRkZWQgb3IgYWx0ZXJl ZCBpbiB0aGUgZmlsZXM8L2xpPgoJCTxsaT5Zb3VyIFR4cCwgPHNwYW4gY2xhc3M9ImNhcHMi PlBIUDwvc3Bhbj4sIE15U1FMIGFuZCBBcGFjaGUgdmVyc2lvbnM8L2xpPgoJCTxsaT5Zb3Vy IGhvc3RlciBjb21wYW55IG5hbWU8L2xpPgoJPC91bD4KCgk8cD5hbmQgc28gb24uIEFueSBh bmQgYWxsIGluZm9ybWF0aW9uIHdpbGwgYmUgdHJlYXRlZCBpbiB0aGUgc3RyaWN0ZXN0IGNv bmZpZGVuY2Ugb2YgY291cnNlLiBBbmFseXNpbmcgdGhpcyBkYXRhIG1heSBhbGxvdyBtZSB0 byBpbXByb3ZlIHRoZSBwbHVnaW4gYW5kIHBlcmhhcHMgY2xvc2UgYW55IHNlY3VyaXR5IGhv bGVzIGluIFR4cCBpdHNlbGYsIG9yIGV2ZW4gaGVscCBtYWtlIHRoZSBwbHVnaW4gbW9yZSBw cm8tYWN0aXZlIGJ5IGRldGVjdGluZyB0aGUgdmFyaW91cyBraW5kcyBvZiBhdHRhY2sgaW4g cHJvZ3Jlc3MgYW5kIG1pbmltaXNpbmcgZGFtYWdlIHRvIHlvdXIgZmlsZSBzeXN0ZW0uIFRo YW5rcyBpbiBhZHZhbmNlIGZvciB5b3UgaGVscC48L3A+CgoJPGgyPkF1dGhvciAvIGNyZWRp dHM8L2gyPgoKCTxwPldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gTWFueSB0aGFua3MgdG8gS2V2aW4gUG90dHMg YW5kIFN0ZXZlIERpY2tpbnNvbiBmb3IgYmV0YSB0ZXN0aW5nIGFuZCBmZWF0dXJlIGVuaGFu Y2VtZW50cy4gQWxzbyBrdWRvcyB0byBzbWFsbGhhZHJvbmNvbGxpZGVyIGZvciB0aGUgYmFz aXMgb2YgdGhlIHBhc3N3b3JkIHN0cmVuZ3RoIGNhbGN1bGF0b3IgYW5kIEh1Z28gU291c2Eg Zm9yIHRoZSBwaFByb3RlY3RvciBjbGFzcy48L3A+CgoJPGgyIGlkPSJjaGFuZ2Vsb2ciPkNo YW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xMSBOb3YgMjAxMCB8IDAuMTAgfCBJbml0aWFs IHJlbGVhc2U8L2xpPgoJCTxsaT4xMSBOb3YgMjAxMCB8IDAuMTEgfCBBZGRlZCBJZ25vcmUg YnV0dG9uPC9saT4KCQk8bGk+MTIgTm92IDIwMTAgfCAwLjEyIHwgRml4ZWQgd2hpdGUgc2Ny ZWVuIG9mIGRlYXRoIG9uIEZpbGVzIDxlbT5TYXZlPC9lbT4gKGJpbmFyeSBmaWxlcyBhcmUg bm93IGxlZnQgdW5wcm9jZXNzZWQpIDsgaW1wcm92ZWQgcGVyZm9ybWFuY2UgOyBhZGRlZCBm aWxlIHF1YW50aXR5IGNoZWNrPC9saT4KCQk8bGk+MTUgTm92IDIwMTAgfCAwLjEzIHwgQWxh cm1zIHBhbmVsIG5vdyBhbHdheXMgZGlzcGxheXMgYWxsIGFsZXJ0cyBhbmQgZG9lc24mIzgy MTc7dCBpbnRlcmZlcmUgd2l0aCBmaWxlIGNoZWNraW5nIHJvdGF0aW9uIDsgZml4ZWQgaW5j b3JyZWN0IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGluIGFja25vd2xlZGdlIG1l c3NhZ2VzICh0aGFua3MgdGhlYm9tYnNpdGUpIHRob3VnaCBtdWx0aS1zaXRlIGluc3RhbGxh dGlvbnMgbWF5IHN0aWxsIGJlIHdyb25nIDsgcmVtb3ZlZCBkdW1iIGFkbWluLXNpZGUgPHNw YW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5qZWN0aW9uLCBhZGRlZCA8Y29kZT5DaGVj ayBmaWxlcyBiZXR3ZWVuPC9jb2RlPiBhbmQgVHhwIHZlcnNpb24gYWR2aWNlIChhbGwgdGhh bmtzIHJ1dWQpIDsgdHdlYWtlZCBpbmplY3Rpb24gZGV0ZWN0b3IgOyByZWZhY3RvcmVkIGUt bWFpbCBoZWFkZXIgY29kZTwvbGk+CgkJPGxpPjE2IE5vdiAyMDEwIHwgMC4xNCB8IEFkZGVk IGZvcmVuc2ljIG9wdGlvbnMgZm9yIGhlYWRlciBzcG9vZmluZy9TUUwgaW5qZWN0aW9ucyA7 IGNhbiBub3cgdGhyb3cgPHNwYW4gY2xhc3M9ImNhcHMiPkhUVFA8L3NwYW4+IHJlc3BvbnNl IGNvZGUgb3IgY3VzdG9tIG1lc3NhZ2UvZm9ybSBpbnN0ZWFkIG9mICYjODIxNjtuaWNlIHRy eSYjODIxNzsgOyB3aWxkY2FyZCBhYmlsaXR5IGZvciBpZ25vcmVkIGZpbGVzIDsgYWRkZWQg dXNlciBjaGVjayBhbmQgVHhwIGRpciBvcHRpb24gKHRoYW5rcyBtYXZlcmljayk8L2xpPgoJ CTxsaT4wOSBEZWMgMjAxMCB8IDAuMTUgfCBJbXByb3ZlZCB3YXJuaW5nIGRpc3BsYXkgd2hl biBzYXZpbmcgcHJlZmVyZW5jZXMgKHRoYW5rcyBtYW5pcXVpKSA7IHNraXBwZWQgY29tbWVu dCBwcmV2aWV3IHN0ZXAgZm9yIHNxbCBpbmplY3Rpb25zIDsgZml4ZWQgdmVyc2lvbiBudW1i ZXIgaW4gZnJvZ25vc3RpY3MgOyBmaXhlZCBkaXNwbGF5IGVycm9yIG9uIEFkdmljZSBwYW5l bCA7IGFkZGVkIDxjb2RlPnNxbF9pbmplY3Rpb248L2NvZGU+IGNhbGxiYWNrIDsgYWRkZWQg cnBjIGFkdmljZSBjaGVjazwvbGk+CgkJPGxpPjA5IERlYyAyMDEwIHwgMC4xNiB8IE5ldmVy IGFzc3VtZSBFbmdsaXNoIGJ1dHRvbiBuYW1lcyAodGhhbmtzIHJvZWxvZik8L2xpPgoJCTxs aT4zMCBEZWMgMjAxMCB8IDAuMTcgfCBBZGRlZCBpbmplY3Rpb24gc2Vuc2l0aXZpdHkgdG8g dHJ5IGFuZCBtaW5pbWlzZSBmYWxzZSBwb3NpdGl2ZXMgb24gc2l0ZXMgdGhhdCBhY2NlcHQg Y29tbWVudHMgOyBmaXhlZCBsb3NzIG9mIHNldHRpbmdzIG9uIHN3aXRjaGluZyBwcm9nbm9z dGljcyBzdWJ0YWI8L2xpPgoJCTxsaT4yNiBKYW4gMjAxMiB8IDAuMjAgfCBQZXJmb3JtYW5j ZSBib29zdCA7IGFkZGVkIHNlcGFyYXRlIDxzcGFuIGNsYXNzPSJjYXBzIj5YU1M8L3NwYW4+ IHNoaWVsZCBwcmVmIDsgYWx0ZXJlZCBjYWxsYmFjayBzaWduYXR1cmU6IGV2ZW50PSYjODIy MDtzbWRfZnJvZ25vc3RpY3MmIzgyMjE7IHRvIGF2b2lkIGNsYXNoZXMgd2l0aCB0aGUgYWRt aW4gc2lkZSA7IGZpeGVkIGEgZmV3IHdhcm5pbmdzIDsgcGFzc3dvcmQgc3RyZW5ndGggbWV0 ZXIgaW50ZWdyYXRlZCB3aXRoIHNtZF91c2VyX21hbmFnZXIgOyBmaXhlZCBhcnJheV9tZXJn ZSgpLXJlcXVpcmVzLWFycmF5LWFyZ3VtZW50IHNuYWZ1IDsgYWRkZWQgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUkY8L3NwYW4+IHRva2VucyA7IGZpeGVkIHJvZ3VlIHN0YXR1cyBtc2cgd2hl biB2aWV3aW5nIGFsYXJtcyBwYW5lbDwvbGk+Cgk8L3VsPgoKPC9kaXY+CjwhLS0gKioqIEJF R0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojc21kX2hl bHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI3NtZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpi b2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNl OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBjb2xvcjojMzMzOyB9CiNzbWRfaGVscCBj b2RlLmJsb2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5 OyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsg fQojc21kX2hlbHAgaDEgeyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdp bjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7IGJvcmRlci1ib3R0 b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgZm9udDogMTdweCBHZW9y Z2lhLCBzYW5zLXNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTJweCBBcmlh bCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMDt0 ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30K I3NtZF9oZWxwIGg0IHsgZm9udDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0 ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBw ZXJjYXNlOyB9CiNzbWRfaGVscCAuYXRubSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KI3NtZF9o ZWxwIC5tYW5kIHsgYmFja2dyb3VuZDojZWVlOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyB9 CiNzbWRfaGVscCB0YWJsZSB7IHdpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBhZGRp bmctYm90dG9tOjFlbTsgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOyB9CiNzbWRfaGVscCB0 ZCwgI3NtZF9oZWxwIHRoIHsgYm9yZGVyOjFweCBzb2xpZCAjOTk5OyBwYWRkaW5nOi41ZW07 IH0KI3NtZF9oZWxwIHVsIHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAg LmltcG9ydGFudCB7IGNvbG9yOnJlZDsgfQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIw cHggNXB4IDMwcHg7IH0KI3NtZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwv c3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czoz MjoiZjQ0MzZlZTQ1ZWM3MTEyNDBkMWVkMzYxMTYzMDYwZWYiO30=