# Name: smd_prognostics v0.14 # 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 YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTQiO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjY0MjI2OiJnbG9iYWwgJHNtZF9w cm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICRzbWRfcHJv Z25vc3RpY3Nfc3FscHJvdDsNCiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQgPSAnc21kX3Byb2du b3N0aWNzJzsNCiRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zID0gcnRyaW0oZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19kaXInLCB0eHBhdGgsIDEpLCBEUykgLiBEUyAuIGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJycpLidzbWRfcHJvZ25vc3RpY3NfY2hlY2tz dW1zLnR4dCc7DQokaGRyb24gPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3JlcV9oZWFk ZXJzJywgJycpOw0KJHNtZF9wcm9nbm9zdGljc19zcWxwcm90ID0gbmV3IHNtZF9wcm9nX1Bo UHJvdGVjdG9yKGZhbHNlKTsNCg0KaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0K CWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX3N0eWxlLCAkdHhwX3VzZXIsICRldmVudDsNCg0K CSRzbWRfcHJvZ25vc3RpY3NfcHJpdnMgPSAnMSwyJzsNCgkkc21kX3Byb2dub3N0aWNzX3N1 cHByZXNzID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MnKTsNCgkkc21kX3Byb2du b3N0aWNzX3N0eWxlID0gYXJyYXkoDQoJCSdtc2cnID0+DQogICAgICAgICAnLnNtZF9wcm9n X3dhcm4geyBtYXJnaW46MCBhdXRvIDEwcHg7IHdpZHRoOjUwMHB4OyBiYWNrZ3JvdW5kOiNm ZmM7IGJvcmRlcjoycHggZGFzaGVkIHJlZDsgcGFkZGluZzoxMHB4OyBjb2xvcjojNDQ0OyB9 DQogICAgICAgICAgLnNtZF9wcm9nX3dhcm4gYSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9y OiM5NjM7IH0NCiAgICAgICAgICAuc21kX3Byb2dfd2FybiBzcGFuIHsgZm9udC13ZWlnaHQ6 Ym9sZDsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ193YXJuIGRpdiB7IGZvbnQtd2VpZ2h0OmJv bGQ7IHBhZGRpbmctYm90dG9tOjEwcHg7IH0nLA0KCQknc2V0dXAnID0+DQogICAgICAgICAn LnNtZF9sYWJlbCB7IHRleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGln bjptaWRkbGU7IH0NCiAgICAgICAgICAuc21kX3Byb2dfYnRucyBmb3JtIHsgZGlzcGxheTpp bmxpbmU7IH0NCiAgICAgICAgICAuc21kX3Byb2dub3N0aWNzX3NldHVwIGgzIHsgbWFyZ2lu OjI1cHggMCAwOyB9JywNCgkJJ21ldGVyJyA9Pg0KICAgICAgICAgJyNzbWRfcHJvZ19tZXRl ciB7IG1hcmdpbjowIGF1dG87IGJvcmRlcjoxcHggc29saWQgI2NjYzsgd2lkdGg6MzYwcHg7 IHBhZGRpbmc6NXB4OyBmb250LXNpemU6MTIwJTsgfQ0KICAgICAgICAgIC5zbWRfcHJvZ19w YXNzX3N0cmVuZ3RoIHsgY29sb3I6Z3JlZW47IGZvbnQtd2VpZ2h0OmJvbGQ7IH0nLA0KCQkn YWR2aWNlJyA9Pg0KICAgICAgICAgJy5zbWRfcHJvZ19hZHZpY2UgeyB3aWR0aDo3NTBweDsg fQ0KICAgICAgICAgICNsaXN0LnNtZF9wcm9nX2FkdmljZSB0ZCB7IHBhZGRpbmc6NXB4OyB9 DQogICAgICAgICAgLnNtZF9wcm9nX2J0bnMgeyB3aWR0aDoxNDBweDsgfScsDQoJKTsNCg0K CSRwcml2cyA9IHNhZmVfZmllbGQoInByaXZzIiwgInR4cF91c2VycyIsICJuYW1lID0gJyIu ZG9TbGFzaCgkdHhwX3VzZXIpLiInIik7DQoJJHVzZXJzID0gZ2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc191c2VycycsICcnKTsNCgkkYWxsb3cgPSAoJHVzZXJzKSA/IGluX2FycmF5KCR0 eHBfdXNlciwgZG9fbGlzdCgkdXNlcnMpKSA6IHRydWU7DQoJaWYgKCRhbGxvdykgew0KCQlh ZGRfcHJpdnMoJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19wcml2 cyk7DQoJCWFkZF9wcml2cygncGx1Z2luX3ByZWZzLicuJHNtZF9wcm9nbm9zdGljc19ldmVu dCwgJHNtZF9wcm9nbm9zdGljc19wcml2cyk7DQoJCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9u cycsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRf cHJvZ25vc3RpY3MnKSk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3Nf c2V0dXAnLCAncGx1Z2luX3ByZWZzLicuJHNtZF9wcm9nbm9zdGljc19ldmVudCk7DQoJCXJl Z2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfZGlzcGF0Y2hlcicsICRzbWRfcHJv Z25vc3RpY3NfZXZlbnQpOw0KCX0NCg0KCS8vIFBhc3N3b3JkIGNoZWNrZXIgZ29lcyBvbiB0 aGUgQWRtaW4tPlVzZXJzIHRhYiBmb3IgYWxsIHVzZXJzDQoJaWYgKCRldmVudCA9PSAnYWRt aW4nKSB7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfY2hyb25vc3Ry ZW5ndGgnLCAnYWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KCX0NCg0KCWlmICgkaGRyb24p IHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRl cnMnLCAnYWRtaW5fc2lkZScsICdoZWFkX2VuZCcpOw0KCX0NCg0KCS8vIEFkbWluIHNpZGUg Y2FsbGJhY2sgZm9yIGNoZWNraW5nIGZpbGVzDQoJaWYgKCEkc21kX3Byb2dub3N0aWNzX3N1 cHByZXNzICYmIGluX2FycmF5KCRwcml2cywgZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX3By aXZzKSkpIHsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljcycsICdhZG1p bl9zaWRlJywgJ3BhZ2V0b3BfZW5kJyk7DQoJfQ0KfQ0KDQovLyBQdWJsaWMgc2lkZSBjYWxs YmFja3MNCmlmIChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVy ZScsICcnKSwgJ3B1YmxpYycpICE9PSBmYWxzZSkgew0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfcHJvZ25vc3RpY3MnLCAncHJldGV4dCcpOw0KfQ0KaWYgKCRoZHJvbikgew0KCXJlZ2lz dGVyX2NhbGxiYWNrKCdzbWRfcHJvZ25vc3RpY3NfcmVxdWVzdF9oZWFkZXJzJywgJ3ByZXRl eHQnKTsNCn0NCmlmIChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5q ZWN0JywgJ3NtZF9ubycpLCAnc21kX25vJykgPT09IGZhbHNlKSB7DQoJcmVnaXN0ZXJfY2Fs bGJhY2soJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0JywgJ3ByZXRleHQnKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nf ZGlzcGF0Y2hlcigkZXZ0LCAkc3RwKSB7DQoJaWYoISRzdHAgb3IgIWluX2FycmF5KCRzdHAs IGFycmF5KA0KCQkJJ3NtZF9wcm9nbm9zdGljc19maWxlcycsDQoJCQknc21kX3Byb2dub3N0 aWNzX3NldHVwJywNCgkJCSdzbWRfcHJvZ25vc3RpY3NfYWR2aWNlJywNCgkJCSdzbWRfcHJv Z25vc3RpY3NfYWNrJywNCgkJKSkpIHsNCgkJc21kX3Byb2dub3N0aWNzX3NldHVwKCcnKTsN Cgl9IGVsc2UgJHN0cCgpOw0KfQ0KDQovLyBTdHViIHRvIGNhbGwgdGhlIHZlcmlmaWNhdGlv biBjb2RlIGZyb20gdGhlIFVSTA0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzKCRldnQsICRz dHApIHsNCglyZXR1cm4gc21kX2RvX3Byb2dub3N0aWNzKCk7DQp9DQoNCi8vIFZlcmlmeSB0 aGUgZmlsZSBjaGVja3N1bXMNCi8vICRtb2RlID0gMDogbm9ybWFsIC8gMTogbm8gdXBkYXRl IChyZXR1cm4gYXJyYXlzIG9ubHkpIC8gMjogc2lsZW50IHVwZGF0ZQ0KZnVuY3Rpb24gc21k X2RvX3Byb2dub3N0aWNzKCRtb2RlPTApIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19l dmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICRzbWRfcHJvZ25vc3RpY3Nfc3R5 bGU7DQoNCgkkbm93ID0gdGltZSgpOw0KCSRub2sgPSAkbWlzcyA9ICRhZGRlZCA9ICRhbGxm aWxlcyA9ICRoYXNoZG93biA9ICRoYXNobW9kID0gYXJyYXkoKTsNCgkkdGltZW5vdyA9IGRh dGUoJ0g6aTpzJywgJG5vdyk7DQoJbGlzdCgkYmVnLCAkZW5kKSA9IGRvX2xpc3QoZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuJywgJ3wnKSwgJ3wnKTsgLy8gRGVm YXVsdCBpcyBwaXBlIHNvIHdlIGNhbiBndWFyYW50ZWUgdHdvIHJldHVybiB2YWxzDQoJJHRk aWZmID0gKCRtb2RlPT0xIHx8ICgkbm93IC0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19s YXN0Y2hlY2snLCAwKSA+IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcScs IDM2MDApKSAmJiAoJHRpbWVub3c+JGJlZykgJiYgKCR0aW1lbm93PCRlbmQpICkgPyB0cnVl IDogZmFsc2U7DQoNCgkvLyBQYXJ0cyBzaGFtZWxlc3NseSBwbGFnaWFyaXNlZCBmcm9tIHR4 cF9kaWFnDQoJaWYgKCR0ZGlmZikgew0KCQkkc3VtaGFzaCA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3Nfc3VtaGFzaCcsIE5VTEwsICgkbW9kZT09MSA/IDEgOiAwKSk7DQoJCSRsb29r YXQgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicsICcnKTsNCgkJJGFk ZHMgPSAoc3RycG9zKCRsb29rYXQsICdhZGQnKSAhPT0gZmFsc2UpOw0KCQkkZGVscyA9IChz dHJwb3MoJGxvb2thdCwgJ2RlbGV0ZScpICE9PSBmYWxzZSk7DQoJCSRtb2RzID0gKHN0cnBv cygkbG9va2F0LCAnbW9kaWZ5JykgIT09IGZhbHNlKTsNCg0KCQlpZiAoJGNzID0gQGZpbGUo JHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQkkaGFzaCA9IG1kNShzbWRfcHJv Z25vc3RpY3NfcHJlcF9maWxlKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSk7DQoJCQlp ZiAoJGhhc2ggIT0gJHN1bWhhc2gpIHsNCgkJCQkkaGFzaG1vZFtdID0gJHNtZF9wcm9nbm9z dGljc19jaGVja3N1bXM7DQoJCQl9IGVsc2Ugew0KCQkJCSRjdHIgPSAwOw0KCQkJCSRxdHlf cGVyID0gKCgkcXR5ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19xdHknLCAn JykpID09ICcnKSA/IGNvdW50KCRjcykgOiAkcXR5Ow0KCQkJCSRzb19mYXIgPSBnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX3F0eV9zb19mYXInLCAwKTsNCgkJCQkkdW50aWwgPSAkc29f ZmFyICsgJHF0eV9wZXI7DQoJCQkJZm9yZWFjaCAoJGNzIGFzICRjKSB7DQoJCQkJCWlmIChw cmVnX21hdGNoKCdAXihcUyspOiBcKCguKilcKSRAJywgdHJpbSgkYyksICRtKSkgew0KCQkJ CQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJCWlmICgkZGVscyAmJiAhZmlsZV9l eGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJG1pc3NbXSA9ICRmaWxlOw0KCQkJCQkJfSBlbHNl IGlmICgkbW9kcyAmJiAkbWQ1ICE9ICdOVUxMJykgew0KCQkJCQkJCWlmICggZmlsZV9leGlz dHMoJGZpbGUpICYmICggKCgkY3RyID49ICRzb19mYXIpICYmICgkY3RyIDwgJHVudGlsKSB8 fCAkbW9kZSA9PSAxKSApICkgew0KCQkJCQkJCQkkY29udGVudCA9IHNtZF9wcm9nbm9zdGlj c19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJCQkJCQlpZiAoKG1kNSgkY29udGVudCkgIT0gJG1k NSkgJiYgKCRmaWxlICE9ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSkgew0KCQkJCQkJ CQkJJG5va1tdID0gJGZpbGU7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJJGN0cisr Ow0KCQkJCQkJfQ0KCQkJCQkJJGFsbGZpbGVzW10gPSAkZmlsZTsNCgkJCQkJfQ0KCQkJCX0N Cg0KCQkJCS8vIFN0YXNoIHRoZSBzdG9yeSBzbyBmYXIgcmVhZHkgZm9yIG5leHQgdGltZSB0 aGUgZnVuY3Rpb24gaXMgY2FsbGVkDQoJCQkJaWYgKCRtb2RlICE9IDEpIHsNCgkJCQkJc2V0 X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19xdHlfc29fZmFyJywgKCgkdW50aWwgPCAkY3RyKSA/ ICR1bnRpbCA6IDApLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQn KTsNCgkJCQl9DQoJCQkJaWYgKCRhZGRzKSB7DQoJCQkJCSRmaWxlbGlzdCA9IHNtZF9wcm9n bm9zdGljc19yZWFkZmlsZXMoKTsNCgkJCQkJJGFkZGVkID0gYXJyYXlfZGlmZigkZmlsZWxp c3QsICRhbGxmaWxlcyk7DQoJCQkJfQ0KDQoJCQkJaWYgKCRtb2RlICE9IDEpIHsNCgkJCQkJ c2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0Y2hlY2snLCAkbm93LCAnc21kX3Byb2du b3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9DQoJCQl9DQoJCX0gZWxz ZSB7DQoJCQkvLyBGaWxlIGRvZXNuJ3QgZXhpc3QNCgkJCSRoYXNoZG93bltdID0gJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXM7DQoJCX0NCgl9DQoNCgkvLyBBc3NlbWJsZSBtZXNzYWdl DQoJaWYgKCRub2sgfHwgJG1pc3MgfHwgJGFkZGVkIHx8ICRoYXNoZG93biB8fCAkaGFzaG1v ZCkgew0KCQlpZiAoJG1vZGU9PTEpIHsNCgkJCXJldHVybiBhcnJheSgkbm9rLCAkbWlzcywg JGFkZGVkLCAkaGFzaGRvd24sICRoYXNobW9kKTsNCgkJfSBlbHNlIHsNCgkJCSR2aWEgPSBn ZXRfcHJlZignc21kX3Byb2dub3N0aWNzX25vdGlmeV92aWEnLCAnJyk7DQoJCQkkZGV0ZWN0 ID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJycpOw0KCQkJJGxh c3RzID0gZXhwbG9kZSgnLCcsIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGFjdCcs IDApKTsNCgkJCSRmcmVxcyA9IGV4cGxvZGUoJywnLCBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2FsYXJtX2ZyZXEnLCA4NjQwMCkpOw0KCQkJaWYgKCFpc3NldCgkbGFzdHNbMV0pKSB7 DQoJCQkJJGxhc3RzWzFdID0gJGxhc3RzWzBdOw0KCQkJfQ0KCQkJaWYgKCFpc3NldCgkZnJl cXNbMV0pKSB7DQoJCQkJJGZyZXFzWzFdID0gJGZyZXFzWzBdOw0KCQkJfQ0KDQoJCQkkbGFz dGFjdF90eHAgPSAoJG1vZGUgPCAyICYmICgkbm93IC0gJGxhc3RzWzBdID4gJGZyZXFzWzBd KSkgPyB0cnVlIDogZmFsc2U7DQoJCQkkbGFzdGFjdF9tYWlsID0gKCRtb2RlIDwgMiAmJiAo JG5vdyAtICRsYXN0c1sxXSA+ICRmcmVxc1sxXSkpID8gdHJ1ZSA6IGZhbHNlOw0KCQkJJGxh c3Rtc2cgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rtc2cnLCAnJyk7DQoNCgkJ CSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N1YmplY3QnKTsNCgkJCSRtc2cg PSBqb2luKCd8JywgYXJyYXlfbWVyZ2UoJGhhc2hkb3duLCAkaGFzaG1vZCwgJG5vaywgJG1p c3MsICRhZGRlZCkpOw0KDQoJCQlpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nICYmIHN0 cnBvcygkdmlhLCAndHhwJykgIT09IGZhbHNlKSB7DQoJCQkJaWYgKCRsYXN0YWN0X3R4cCB8 fCAoJGxhc3Rtc2cgIT0gbWQ1KCRtc2cpKSkgew0KCQkJCQkkdHhwZGlyID0gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc190eHBkaXInLCBodS5zbWRfcHJvZ25vc3RpY3NfZ3Vlc3NfYWRt aW5fZGlyKCkpOw0KCQkJCQkkb3V0ID0gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jy4kc21k X3Byb2dub3N0aWNzX3N0eWxlWydtc2cnXS4nPC9zdHlsZT48ZGl2IGNsYXNzPSJzbWRfcHJv Z193YXJuIj48ZGl2PicuJHN1YmplY3QuJzwvZGl2PicuDQoJCQkJCQkoKCRoYXNoZG93bikg PyAnPHA+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfaGFzaGRvd24nKS4nPC9w Pjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRoYXNoZG93bikuJzwvbGk+PC91bD4nIDog JycpLg0KCQkJCQkJKCgkaGFzaG1vZCkgPyAnPHA+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgn cHJlYW1ibGVfaGFzaG1vZCcpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxpPicsJGhh c2htb2QpLic8L2xpPjwvdWw+JyA6ICcnKS4NCgkJCQkJCSgoJG5vaykgPyAnPHA+Jy5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbm9rJykuJzwvcD48dWw+PGxpPicuam9pbign PC9saT48bGk+Jywkbm9rKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRtaXNzKSA/ ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9taXNzJykuJzwvcD48dWw+ PGxpPicuam9pbignPC9saT48bGk+JywkbWlzcykuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJ CQkJKCgkYWRkZWQpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2Fk ZGVkJykuJzwvcD48dWw+PGxpPicuam9pbignPC9saT48bGk+JywkYWRkZWQpLic8L2xpPjwv dWw+JyA6ICcnKS4NCgkJCQkJCSc8cD48YSBocmVmPSInLiR0eHBkaXIuJy9pbmRleC5waHA/ ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0 aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+Jy4NCgkJCQkJCXNtZF9wcm9n bm9zdGljc19nVHh0KCdwb3N0YW1ibGUnKS4nPC9hPjwvcD48L2Rpdj4nOw0KDQoJCQkJCXNl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGFjdCcsICRub3cuJywnLiRsYXN0c1sxXSwg J3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJCWVjaG8g JG91dDsNCgkJCQl9DQoJCQl9DQoNCgkJCWlmIChzdHJwb3MoJHZpYSwgJ2VtYWlsJykgIT09 IGZhbHNlKSB7DQoJCQkJaWYgKCRsYXN0YWN0X21haWwgfHwgKCRsYXN0bXNnICE9IG1kNSgk bXNnKSkpIHsNCgkJCQkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG8n LCAnJyk7DQoJCQkJCWlmICgkdG8pIHsNCgkJCQkJCSRoZHJzID0gc21kX3Byb2dub3N0aWNz X2hlYWRlcl9pbmZvKCdzbWRfcHJvZ25vc3RpY3MnKTsNCgkJCQkJCSRib2R5ID0NCgkJCQkJ CQkoKCRoYXNoZG93bikgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9oYXNo ZG93bicpLm4ubi5qb2luKG4sJGhhc2hkb3duKSA6ICcnKS4NCgkJCQkJCQkoKCRoYXNobW9k KSA/IG4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2hhc2htb2QnKS5uLm4uam9p bihuLCRoYXNobW9kKSA6ICcnKS4NCgkJCQkJCQkoKCRub2spID8gbi5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgncHJlYW1ibGVfbm9rJykubi5uLmpvaW4obiwkbm9rKSA6ICcnKS4NCgkJCQkJ CQkoKCRtaXNzKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfbWlzcycp Lm4ubi5qb2luKG4sJG1pc3MpIDogJycpLg0KCQkJCQkJCSgoJGFkZGVkKSA/IG4ubi5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfYWRkZWQnKS5uLm4uam9pbihuLCRhZGRlZCkg OiAnJykuDQoJCQkJCQkJbi5uLic8YSBocmVmPSInLiRoZHJzWyd0eHBkaXInXS4nL2luZGV4 LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyZzdGVwPXNtZF9wcm9nbm9z dGljc19hY2smc21kX3Byb2dub3N0aWNzX3N1cHByZXNzPTEiPicuc21kX3Byb2dub3N0aWNz X2dUeHQoJ3Bvc3RhbWJsZScpLic8L2E+JzsNCgkJCQkJCW1haWwoJHRvLCAkc3ViamVjdCwg JGJvZHksICRoZHJzWydoZWFkZXJzJ10pOw0KCQkJCQl9DQoJCQkJCXNldF9wcmVmKCdzbWRf cHJvZ25vc3RpY3NfbGFzdGFjdCcsICRsYXN0c1swXS4nLCcuJG5vdywgJ3NtZF9wcm9nbm9z JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJfQ0KCQkJfQ0KCQkJc2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0bXNnJywgbWQ1KCRtc2cpLCAnc21kX3Byb2dub3Mn LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCWlmICgkbGFzdG1zZyAhPSBtZDUo JG1zZykpIHsNCgkJCQlpZiAoJGRldGVjdCA9PSAnJykgew0KCQkJCQlzZXRfcHJlZignc21k X3Byb2dub3N0aWNzX2xhc3RkZXRlY3QnLCAkbm93LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJ RERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZGV0ZWN0ID0gZXhw bG9kZSgnLCcsJGRldGVjdCk7DQoJCQkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFz dGRldGVjdCcsICRkZXRlY3RbMF0uJywnLiRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElE REVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLSAgQ2F0Y2ggdW5leHBlY3RlZCByZXF1ZXN0IGhlYWRlcnMNCmZ1bmN0aW9uIHNt ZF9wcm9nbm9zdGljc19yZXF1ZXN0X2hlYWRlcnMoJGV2dCwgJHN0cCkgew0KCSRibG9jayA9 IGV4cGxvZGUoJ3wnLCBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzJywg JycpKTsNCgkkaGRyID0gc2VydmVyU2V0KCdSRVFVRVNUX01FVEhPRCcpOw0KDQoJaWYgKGlu X2FycmF5KCRoZHIsICRibG9jaykpIHsNCgkJJHNlbmQgPSAoc3RycG9zKGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzJyksICdoZHInKSAhPT0gZmFsc2UpOw0KDQoJ CS8vIFNlbmQgdGhlIGZvcmVuc2ljcyBvZmYgaWYgbmVjZXNzYXJ5DQoJCSR0byA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKTsNCgkJaWYgKCR0byAmJiAk c2VuZCkgew0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3ViamVjdF9j c2knKTsNCgkJCSRoZHJzID0gc21kX3Byb2dub3N0aWNzX2hlYWRlcl9pbmZvKCdzbWRfZnJv Z25vc3RpY3MnKTsNCgkJCSRib2R5ID0gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmVxX25v dF9hbGxvd2VkJywgYXJyYXkoJ3tyZXF9JyA9PiAkaGRyKSkubjsNCgkJCWZvcmVhY2ggKCRf U0VSVkVSICsgJF9SRVFVRVNUICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkJJGJv ZHkgLj0gbi4ka2V5Lic6ICcuJHZhcjsNCgkJCX0NCgkNCgkJCW1haWwoJHRvLCAkc3ViamVj dCwgJGJvZHksICRoZHJzWydoZWFkZXJzJ10pOw0KCQl9DQoNCgkJLy9UT0RPOiBvZmZlciBh bHRlcm5hdGl2ZSBtZWNoYW5pc21zIGxpa2UgU1FMIGF0dGFja3M/DQoJCWV4aXQoMSk7DQoJ fQ0KfQ0KDQovLyAtLS0tLS0tLS0tICBTUUwgaW5qZWN0aW9uIGRldGVjdGlvbg0KZnVuY3Rp b24gc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QoKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25v c3RpY3Nfc3FscHJvdDsNCg0KCWlmKCRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdC0+aXNNYWxp Y2lvdXMoKSkgew0KCQkkb3B0cyA9IGRvX2xpc3QoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19zcWxfaW5qZWN0JywgJ3wnKSwgJ3wnKTsNCgkJJGJsb2sgPSAoc3RycG9zKCRvcHRzWzBd LCAnc21kX2Jsb2NrJykgIT09IGZhbHNlKTsNCgkJJHNlbmQgPSAoc3RycG9zKGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzJyksICdzcWwnKSAhPT0gZmFsc2UpOw0K DQoJCS8vIFNlbmQgdGhlIGZvcmVuc2ljcyBvZmYgaWYgbmVjZXNzYXJ5DQoJCSR0byA9IGdl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKTsNCgkJaWYgKCR0byAm JiAkc2VuZCkgew0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3ViamVj dF9jc2knKTsNCgkJCSRoZHJzID0gc21kX3Byb2dub3N0aWNzX2hlYWRlcl9pbmZvKCdzbWRf ZnJvZ25vc3RpY3MnKTsNCgkJCSRib2R5ID0gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJl YW1ibGVfc3FsX2luamVjdCcpLm47DQoJCQkkYm9keSAuPSAnVFhQOiAnIC4gdHhwX3ZlcnNp b24gLm4uICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkgLm4uICdNeVNRTDogJyAuIG15c3FsX2dl dF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxhYmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24n KSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dldF92ZXJzaW9uKCkubiA6ICcnKTsNCgkJCWZv cmVhY2ggKCRfU0VSVkVSICsgJF9SRVFVRVNUICsgJF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7 DQoJCQkJJGJvZHkgLj0gbi4ka2V5Lic6ICcuJHZhcjsNCgkJCX0NCg0KCQkJbWFpbCgkdG8s ICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMnXSk7DQoJCX0NCg0KCQlpZiAoaXNz ZXQoJG9wdHNbMV0pICYmICFlbXB0eSgkb3B0c1sxXSkpIHsNCgkJCSRwYXJ0cyA9IGRvX2xp c3QoJG9wdHNbMV0sICc6Jyk7DQoJCQlpZiAoJHBhcnRzWzBdID09ICd0eHBfZm9ybScpIHsN CgkJCQkkbXNnID0gcGFyc2VfZm9ybSgkcGFydHNbMV0pOw0KCQkJfSBlbHNlIHsNCgkJCQkk bXNnID0gJG9wdHNbMV07DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkkbXNnID0gJyc7DQoJCX0N Cg0KCQlpZiAoJGJsb2spIHsNCgkJCWVjaG8gJG1zZzsNCgkJCWV4aXQoMSk7DQoJCX0gZWxz ZSB7DQoJCQl0eHBfZGllKCRtc2csICRvcHRzWzBdKTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0NCi8vIEFkbWluLXNpZGUgcGFuZWxzDQovLyAtLS0tLS0tLS0tLS0t LS0tLQ0KLy8gLS0tLS0tLS0tLSAgQWxhcm0gYWNrbm93bGVkZ2VtZW50DQpmdW5jdGlvbiBz bWRfcHJvZ25vc3RpY3NfYWNrKCRtc2c9JycpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGlj c19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICRwcmVmczsNCg0KCSRzdWJt aXQgPSBncHMoJ3N1Ym1pdCcpOw0KCSRpZ25vcmUgPSBncHMoJ2lnbm9yZScpOw0KCSRjc2kg PSBncHMoJ2NzaScpOw0KDQoJJGFjayA9IGdwcygnc2VsZWN0ZWQnKTsNCgkkc21kX3Byb2df YWNrID0gKGlzX2FycmF5KCRhY2spKSA/ICRhY2sgOiAoKCRhY2spID8gYXJyYXkoJGFjaykg OiBhcnJheSgpKTsNCg0KCSRvdXQgPSBhcnJheSgpOw0KDQoJaWYgKCRzdWJtaXQgPT0gJ0Fj a25vd2xlZGdlJyB8fCAkaWdub3JlID09ICdJZ25vcmUnKSB7DQoJCWlmICgkY3MgPSBAZmls ZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJCWZvcmVhY2ggKCRjcyBhcyAk Yykgew0KCQkJCWlmIChwcmVnX21hdGNoKCdAXihcUyspOiBcKCguKilcKSRAJywgdHJpbSgk YyksICRtKSkgew0KCQkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9ICRtOw0KCQkJCQlpZiAoKCRr ZXkgPSBhcnJheV9zZWFyY2goJGZpbGUsICRzbWRfcHJvZ19hY2spKSAhPT0gZmFsc2UpIHsN CgkJCQkJCWlmIChmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkkY29udGVudCA9IHNt ZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpOw0KCQkJCQkJCSRvdXRbXSA9ICRmaWxl Lic6ICgnLiggKCRpZ25vcmUgPT0gJ0lnbm9yZScpID8gJ05VTEwnIDogbWQ1KCRjb250ZW50 KSApLicpJzsNCgkJCQkJCX0NCgkJCQkJCS8vIFJlbW92ZSBmaWxlcyB0aGF0IGFscmVhZHkg aGF2ZSBjaGVja3N1bXMgc28gd2UncmUgbGVmdCB3aXRoIGFkZGl0aW9ucw0KCQkJCQkJdW5z ZXQoJHNtZF9wcm9nX2Fja1ska2V5XSk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkb3V0W10g PSB0cmltKCRjKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gVGFjayBvbiBhbnkg bmV3IGZpbGVzDQoJCQlmb3JlYWNoICgkc21kX3Byb2dfYWNrIGFzICRmaWxlKSB7DQoJCQkJ aWYgKGZpbGVfZXhpc3RzKCRmaWxlKSAmJiAkZmlsZSAhPSAkc21kX3Byb2dub3N0aWNzX2No ZWNrc3Vtcykgew0KCQkJCQkkY29udGVudCA9IHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUo JGZpbGUpOw0KCQkJCQkkb3V0W10gPSAkZmlsZS4nOiAoJy4oICgkaWdub3JlID09ICdJZ25v cmUnKSA/ICdOVUxMJyA6IG1kNSgkY29udGVudCkgKS4nKSc7DQoJCQkJfQ0KCQkJfQ0KCQkJ JGZoID0gZm9wZW4oJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMsICJ3Iik7DQoJCQlmd3Jp dGUoJGZoLCBqb2luKG4sICRvdXQpKTsNCgkJCWZjbG9zZSgkZmgpOw0KCQkJc21kX3Byb2du b3N0aWNzX3NlbGZfaGFzaCgpOw0KCQkJJG1zZyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdh Y2tlZCcpOw0KCQl9DQoJfQ0KCWlmICgkY3NpICYmICRzbWRfcHJvZ19hY2spIHsNCgkJICRt c2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3NpX3NlbnQnKTsNCgl9IGVsc2UgaWYgKCRj c2kpIHsNCgkJICRtc2cgPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm9uZV9zZWxlY3RlZCcp Ow0KCX0NCg0KCXBhZ2V0b3Aoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGlj cycpLCAkbXNnKTsNCglleHRyYWN0KHNtZF9wcm9nbm9zdGljc19idXR0b25zKCkpOw0KDQoJ bGlzdCgkbm9rLCAkbWlzcywgJGFkZGVkLCAkaGFzaGRvd24sICRoYXNobW9kKSA9IHNtZF9k b19wcm9nbm9zdGljcygxKTsNCgkkbm9rID0gaXNfYXJyYXkoJG5vaykgPyAkbm9rIDogYXJy YXkoKTsNCgkkbWlzcyA9IGlzX2FycmF5KCRtaXNzKSA/ICRtaXNzIDogYXJyYXkoKTsNCgkk YWRkZWQgPSBpc19hcnJheSgkYWRkZWQpID8gJGFkZGVkIDogYXJyYXkoKTsNCgkkaGFzaG1v ZCA9IGlzX2FycmF5KCRoYXNobW9kKSA/ICRoYXNobW9kIDogYXJyYXkoKTsNCgkkZXJybnVt ID0gY291bnQoYXJyYXlfbWVyZ2UoJG5vaywgJG1pc3MsICRhZGRlZCwgJGhhc2htb2QpKTsN CgkkZm9yZW5zaWNzID0gYXJyYXkoKTsNCgkkbGZvcm0gPSAnWS1tLWQgSDppOnMnOw0KDQoJ ZWNobyAkYnRuQ1NTLnN0YXJ0VGFibGUoJ2xpc3QnKTsNCgllY2hvIHRyKHRkYShzdHJvbmco c21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9hY2snKSksICcgY29sc3Bhbj0iMyInKSAuIHRk YSgkYnRuU2V0dXAuJGJ0bkZpbGVzLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hv ICc8Zm9ybSBuYW1lPSJsb25nZm9ybSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0n LiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNr JnNtZF9wcm9nbm9zdGljc19zdXBwcmVzcz0xIj4nOw0KCWlmICgkZXJybnVtID4gMCkgew0K CQlmb3JlYWNoKCRoYXNobW9kIGFzICRuYXVnaHR5KSB7DQoJCQkkc2VsID0gaW5fYXJyYXko JG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNobyB0cih0ZChjaGVja2JveCgnc2Vs ZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdtdWx0aS1lZGl0JykudGRhKHNtZF9w cm9nbm9zdGljc19nVHh0KCdsYmxfaGFzaG1vZCcpKS50ZGEoJG5hdWdodHkpKTsNCgkJfQ0K CQlmb3JlYWNoKCRub2sgYXMgJG5hdWdodHkpIHsNCgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1 Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQllY2hvIHRyKHRkKGNoZWNrYm94KCdzZWxlY3Rl ZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywgJ211bHRpLWVkaXQnKS50ZGEoc21kX3Byb2du b3N0aWNzX2dUeHQoJ2xibF9jaGFuZ2VkJykpLnRkYSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRz ZWwpIHsNCgkJCQkkZmkgPSBzdGF0KCRuYXVnaHR5KTsNCgkJCQkkZm9yZW5zaWNzWydub2sn XVtdID0gc21kX3Byb2dub3N0aWNzX2ZvcmVuc2ljX291dHB1dCgkbmF1Z2h0eSwgJGZpKTsN CgkJCQkkZm9yZW5zaWNzWydmaWxlcyddWyRuYXVnaHR5XSA9IGNodW5rX3NwbGl0KGJhc2U2 NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJG5hdWdodHkpKSk7DQoJCQl9DQoJCX0NCgkJ Zm9yZWFjaCgkbWlzcyBhcyAkbmF1Z2h0eSkgew0KCQkJJHNlbCA9IGluX2FycmF5KCRuYXVn aHR5LCAkc21kX3Byb2dfYWNrKTsNCgkJCWVjaG8gdHIodGQoY2hlY2tib3goJ3NlbGVjdGVk W10nLCAkbmF1Z2h0eSwgJHNlbCksICcnLCAnbXVsdGktZWRpdCcpLnRkYShzbWRfcHJvZ25v c3RpY3NfZ1R4dCgnbGJsX21pc3NpbmcnKSkudGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNl bCkgew0KCQkJCSRmb3JlbnNpY3NbJ21pc3MnXVtdID0gJG5hdWdodHk7DQoJCQl9DQoJCX0N CgkJZm9yZWFjaCgkYWRkZWQgYXMgJG5hdWdodHkpIHsNCgkJCSRzZWwgPSBpbl9hcnJheSgk bmF1Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQllY2hvIHRyKHRkKGNoZWNrYm94KCdzZWxl Y3RlZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywgJ211bHRpLWVkaXQnKS50ZGEoc21kX3By b2dub3N0aWNzX2dUeHQoJ2xibF9hZGRlZCcpKS50ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgk c2VsKSB7DQoJCQkJJGZpID0gc3RhdCgkbmF1Z2h0eSk7DQoJCQkJJGZvcmVuc2ljc1snYWRk ZWQnXVtdID0gc21kX3Byb2dub3N0aWNzX2ZvcmVuc2ljX291dHB1dCgkbmF1Z2h0eSwgJGZp KTsNCgkJCQkkZm9yZW5zaWNzWydmaWxlcyddWyRuYXVnaHR5XSA9IGNodW5rX3NwbGl0KGJh c2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJG5hdWdodHkpKSk7DQoJCQl9DQoJCX0N CgkJaWYgKCRzbWRfcHJvZ19hY2sgJiYgJHByZWZzWydsb2dnaW5nJ10gIT0gJ25vbmUnKSB7 DQoJCQkkZGV0ZWN0ID0gZXhwbG9kZSgnLCcsZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19s YXN0ZGV0ZWN0JywgdGltZSgpKSk7DQoJCQlpZiAoIWlzc2V0KCRkZXRlY3RbMV0pKSB7DQoJ CQkJJGRldGVjdFsxXSA9ICRkZXRlY3RbMF07DQoJCQl9DQoJCQkkcnMgPSBzYWZlX3Jvd3Mo JyonLCAndHhwX2xvZycsICJ0aW1lIEJFVFdFRU4gJyIgLiBkYXRlKCRsZm9ybSwgKCRkZXRl Y3RbMF0gLSAkcHJlZnNbJ3NtZF9wcm9nbm9zdGljc19jaGVja19mcmVxJ10pKSAuICInIEFO RCAnIiAuIGRhdGUoJGxmb3JtLCAoJGRldGVjdFsxXSArIDUpKSAuICInIik7DQoJCQlmb3Jl YWNoICgkcnMgYXMgJHJvdykgew0KCQkJCSRmb3JlbnNpY3NbJ3R4cF9sb2cnXVtdID0gam9p bignLCcsJHJvdyk7DQoJCQl9DQoJCX0NCgkJZWNobyB0cih0ZGEoDQoJCQkJc2VsZWN0X2J1 dHRvbnMoKQ0KCQkJLCcgY2xhc3M9Im11bHRpLWVkaXQiIGNvbHNwYW49IjMiIHN0eWxlPSJ0 ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiBub25lOyInKSk7DQoJCWVjaG8gdHIodGRhKCRi dG5BY2tJdC4kYnRuSWdub3JlLigoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9f Y3NpJywgJycpKSA/ICRidG5DU0kgOiAnJyksICRidG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJ CWVjaG8gdHIodGQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vX2FsYXJtcycpKSk7DQoJCXNl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsICcnLCAnc21kX3Byb2dub3Mn LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgl9DQoJZWNobyAnPC9mb3JtPic7DQoJ ZWNobyBlbmRUYWJsZSgpOw0KDQoJaWYgKCRjc2kgJiYgJGZvcmVuc2ljcykgew0KCQkvLyBT ZW5kIHRoZSBmb3JlbnNpY3Mgb2ZmDQoJCSR0byA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3Rp Y3NfbWFpbHRvX2NzaScsICcnKTsNCgkJaWYgKCR0bykgew0KCQkJJHN1YmplY3QgPSBzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc3ViamVjdF9jc2knKTsNCgkJCSRoZHJzID0gc21kX3Byb2du b3N0aWNzX2hlYWRlcl9pbmZvKCdzbWRfZnJvZ25vc3RpY3MnKTsNCgkJCSRib2R5ID0NCgkJ CQluLidUWFA6ICcgLiB0eHBfdmVyc2lvbiAubi4gJ1BIUDogJyAuIHBocHZlcnNpb24oKSAu bi4gJ015U1FMOiAnIC4gbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCkgLm4uICgoaXNfY2FsbGFi bGUoJ2FwYWNoZV9nZXRfdmVyc2lvbicpKSA/ICdBcGFjaGU6ICcgLiBhcGFjaGVfZ2V0X3Zl cnNpb24oKS5uIDogJycpLg0KCQkJCSgoaXNzZXQoJGZvcmVuc2ljc1snbm9rJ10pKSA/IG4u c21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX25vaycpLm4uam9pbihuLCRmb3JlbnNp Y3NbJ25vayddKSA6ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ21pc3MnXSkpID8g bi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9taXNzJykubi5qb2luKG4sJGZv cmVuc2ljc1snbWlzcyddKSA6ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNpY3NbJ2FkZGVk J10pKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfYWRkZWQnKS5uLmpv aW4obiwkZm9yZW5zaWNzWydhZGRlZCddKSA6ICcnKS4NCgkJCQkoKGlzc2V0KCRmb3JlbnNp Y3NbJ3R4cF9sb2cnXSkpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV90 eHBsb2cnKS5uLmpvaW4obiwkZm9yZW5zaWNzWyd0eHBfbG9nJ10pIDogbi5uLnNtZF9wcm9n bm9zdGljc19nVHh0KCdub19sb2dfZW50cmllcycpKTsNCgkJCWlmIChpc3NldCgkZm9yZW5z aWNzWydmaWxlcyddKSkgew0KCQkJCSRib2R5IC49IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4 dCgncHJlYW1ibGVfZmlsZXMnKTsNCgkJCQlmb3JlYWNoICgkZm9yZW5zaWNzWydmaWxlcydd IGFzICRmbiA9PiAkY29udGVudCkgew0KCQkJCQkkYm9keSAuPSBuLm4uJGZuLm4ubi4kY29u dGVudC5uOw0KCQkJCX0NCgkJCX0NCg0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwg JGhkcnNbJ2hlYWRlcnMnXSk7DQoJCX0NCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0gRmlsZSBt YW5hZ2VtZW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfZmlsZXMoJG1zZz0nJykgew0K CWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2NoZWNr c3VtczsNCg0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzdWJtaXQnKSkpKTsNCgkk c21kX3Byb2dub3N0aWNzX2ZpbGVzID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfZmlsZXMnKTsN CglpZiAoIWlzX2FycmF5KCRzbWRfcHJvZ25vc3RpY3NfZmlsZXMpKSB7DQoJCSRzbWRfcHJv Z25vc3RpY3NfZmlsZXMgPSBhcnJheSgpOw0KCX0NCg0KCSRhZGRzID0gKHN0cnBvcyhnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcicpLCAnYWRkJykgIT09IGZhbHNlKTsN CgkkZmlsZWxpc3QgPSBzbWRfcHJvZ25vc3RpY3NfcmVhZGZpbGVzKCk7DQoJJGFsbGNvdW50 ID0gY291bnQoJGZpbGVsaXN0KTsNCg0KCWlmICgkc3VibWl0ID09ICdTYXZlJykgew0KCQkk b3V0ZmlsZSA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfcHJvZ25vc3RpY3NfZmlsZXMg YXMgJGZpbGUpIHsNCgkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgk ZmlsZSk7DQoJCQkkb3V0ZmlsZVtdID0gJGZpbGUuJzogKCcubWQ1KCRjb250ZW50KS4nKSc7 DQoJCX0NCg0KCQkkZmggPSBmb3Blbigkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcywgInci KTsNCgkJZndyaXRlKCRmaCwgam9pbihuLCAkb3V0ZmlsZSkpOw0KDQoJCWlmICgkYWRkcykg ew0KCQkJJGFkZGl0aW9ucyA9IGFycmF5X2RpZmYoJGZpbGVsaXN0LCAkc21kX3Byb2dub3N0 aWNzX2ZpbGVzKTsNCgkJCSRhZGRlZCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoICgkYWRkaXRp b25zIGFzICRhZGRpdGlvbikgew0KCQkJCSRhZGRlZFtdID0gJGFkZGl0aW9uLic6IChOVUxM KSc7DQoJCQl9DQoJCQlmd3JpdGUoJGZoLCBuLmpvaW4obiwgJGFkZGVkKSk7DQoJCX0NCgkJ ZmNsb3NlKCRmaCk7DQoJCXNtZF9wcm9nbm9zdGljc19zZWxmX2hhc2goKTsNCgkJc21kX2Rv X3Byb2dub3N0aWNzKDIpOyAvLyBTaWxlbnRseSBhY2tub3dsZWRnZSBhbGwgdGhlIGZpbGVz DQoJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsICcnLCAnc21kX3By b2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJJG1zZyA9IHNtZF9wcm9n bm9zdGljc19nVHh0KCdmaWxlc191cGRhdGVkJyk7DQoJfQ0KDQoJcGFnZXRvcChzbWRfcHJv Z25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cpOw0KCWV4dHJhY3Qoc21k X3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCgkkc21kX3Byb2dub3N0aWNzX2ZpbGVzID0g YXJyYXkoKTsNCglpZiAoJGNzID0gQGZpbGUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMp KSB7DQoJCWZvcmVhY2ggKCRjcyBhcyAkYykgew0KCQkJaWYgKHByZWdfbWF0Y2goJ0BeKFxT Kyk6IFwoKC4qKVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJbGlzdCgsJGZpbGUsJG1k NSkgPSAkbTsNCgkJCQlpZiAoJG1kNSAhPSAnTlVMTCcpIHsNCgkJCQkJJHNtZF9wcm9nbm9z dGljc19maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJJG1vbmNv dW50ID0gY291bnQoJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoNCglpZiAoJGZpbGVsaXN0 KSB7DQoJCSRmaWxleiA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGZpbGVsaXN0IGFzICRrZXkg PT4gJHZhbCkgew0KCQkJJGZpbGV6WyR2YWxdID0gJGZpbGVsaXN0WyRrZXldOw0KCSAgIH0N CgkJJGZpbGVzZWwgPSBzbWRfcHJvZ25vc3RpY3NfbXVsdGlzZWwoJ3NtZF9wcm9nbm9zdGlj c19maWxlcycsICRmaWxleiwgJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoJfQ0KCSRzaG93 ZmlsZXMgPSAoaXNzZXQoJGZpbGVzZWwpICYmICRmaWxlc2VsKTsNCg0KCWVjaG8gJGJ0bkNT Uy5zdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9z dGljc19nVHh0KCd0dGxfZmlsZXMnKSkpIC4gdGRhKCRidG5TZXR1cC4kYnRuQWNrLiRidG5B ZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvIHRyKHRkY3Moc21kX3Byb2dub3N0aWNzX2dU eHQoJ2N1cnJtb24nLCBhcnJheSgne2N1cnJ9JyA9PiAkbW9uY291bnQsICd7b3V0b2Z9JyA9 PiAkYWxsY291bnQpKSAuKCgkc2hvd2ZpbGVzKSA/IGJyLmJyLiBzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnbW9uZmlsZXNfZXhwbGFpbicpIDogJycpLCAxLCA0MDApKTsNCgllY2hvICc8Zm9y bSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVu dC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19maWxlcyI+JzsNCgllY2hvICgkc2hvd2Zp bGVzKSA/IHRyKHRkYSgkZmlsZXNlbCkpIDogdHIodGRhKHNtZF9wcm9nbm9zdGljc19nVHh0 KCdub19maWxlcycpKSk7DQoJZWNobyB0cih0ZGEoZklucHV0KCdoaWRkZW4nLCAnc21kX3By b2dub3N0aWNzX3N1cHByZXNzJywgMSkuJGJ0blNhdmUsICRidG5TdHlsZSkpOw0KCWVjaG8g JzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLSBTZXR1 cCAvIHByZWZzDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJG1zZz0nJykgew0K CWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2NoZWNr c3VtcywgJHByZWZzOw0KDQoJcGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3By b2dub3N0aWNzJyksICRtc2cpOw0KDQoJJG9yaWdsb2MgPSBnZXRfcHJlZignc21kX3Byb2du b3N0aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUykuRFMsIDEpOw0K CSRvcmlnZGlyID0gcnRyaW0oZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19kaXInLCByZWFs cGF0aCh0eHBhdGgpLCAxKSwgRFMpOw0KCSRvcmlncGZ4ID0gZ2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc19wcmVmaXgnLCAnJywgMSk7DQoNCgkkcHJlZmxpc3QgPSBhcnJheSgNCgkJJ3Nt ZF9wcm9nbm9zdGljc19jaGVja19mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19jaGVja19x dHknLA0KCQknc21kX3Byb2dub3N0aWNzX2FsYXJtX2ZyZXEnLA0KCQknc21kX3Byb2dub3N0 aWNzX2NoZWNrX3doZXJlJywNCgkJJ3NtZF9wcm9nbm9zdGljc19tYWlsdG8nLA0KCQknc21k X3Byb2dub3N0aWNzX21haWx0b19jc2knLA0KCQknc21kX3Byb2dub3N0aWNzX3VzZXJzJywN CgkJJ3NtZF9wcm9nbm9zdGljc19kaXInLA0KCQknc21kX3Byb2dub3N0aWNzX3ByZWZpeCcs DQoJCSdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycsDQoJCSdzbWRfcHJvZ25vc3RpY3NfZXhj bHVkaXInLA0KCQknc21kX3Byb2dub3N0aWNzX2lnbm9yZXMnLA0KCQknc21kX3Byb2dub3N0 aWNzX3R4cGRpcicsDQoJKTsNCgkkd2FybmxvYyA9ICcnOw0KCSRub3RpZnkgPSBncHMoJ3Nt ZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhJyk7DQoJJGNoZm9yID0gZ3BzKCdzbWRfcHJvZ25v c3RpY3NfY2hlY2tfZm9yJyk7DQoJJHJlcXMgPSBncHMoJ3NtZF9wcm9nbm9zdGljc19yZXFf aGVhZGVycycpOw0KCSRzcWxpbiA9IGdwcygnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3Qn KTsNCgkkdHdlZW4gPSBncHMoJ3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuJyk7DQoJ JHJ0Zm9yID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzJyk7DQoNCgkvLyBP bmx5IG9uZSBvZiB0aGVzZSB2YWxpZCBzdGF0dXMgY29kZXMgaXMgYWxsb3dlZCB0byBiZSB0 aHJvd24NCgkkdGhyb3dfY29kZXMgPSBhcnJheSgNCgkJJ3NtZF9ubycgPT4gZ1R4dCgnbm8n KSwNCgkJJ3NtZF9ibG9jaycgPT4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Jsb2NrJyksDQoJ CScyMDAnID0+ICcyMDAgT0snLA0KCQknMzAxJyA9PiAnMzAxIE1vdmVkIFBlcm1hbmVudGx5 JywNCgkJJzMwMicgPT4gJzMwMiBGb3VuZCcsDQoJCSczMDcnID0+ICczMDcgVGVtcG9yYXJ5 IFJlZGlyZWN0JywNCgkJJzQwMScgPT4gJzQwMSBVbmF1dGhvcml6ZWQnLA0KCQknNDAzJyA9 PiAnNDAzIEZvcmJpZGRlbicsDQoJCSc0MDQnID0+ICc0MDQgTm90IEZvdW5kJywNCgkJJzQx MCcgPT4gJzQxMCBHb25lJywNCgkJJzQxNCcgPT4gJzQxNCBSZXF1ZXN0LVVSSSBUb28gTG9u ZycsDQoJCSc1MDAnID0+ICc1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yJywNCgkJJzUwMScg PT4gJzUwMSBOb3QgSW1wbGVtZW50ZWQnLA0KCSk7DQoNCglpZiAoIWluX2FycmF5KCR0aHJv d1swXSwgJHRocm93X2NvZGVzKSApIHsNCgkJJHRocm93WzBdID0gJzQwMCc7DQoJfQ0KDQoJ Zm9yZWFjaCAoJHR3ZWVuIGFzICRpZHggPT4gJHZhbCkgew0KCQlpZiAoZW1wdHkoJHZhbCkp IHsNCgkJCSR0d2VlblskaWR4XSA9ICgkaWR4PT0wKSA/ICcwMDowMCcgOiAnMjM6NTknOw0K CQl9IGVsc2Ugew0KCQkJJHRpbWVwYXJ0cyA9IGRvX2xpc3QoJHZhbCwgJzonKTsNCgkJCWZv cmVhY2ggKCR0aW1lcGFydHMgYXMgJG51bSkgew0KCQkJCWlmICghaXNfbnVtZXJpYygkbnVt KSkgew0KCQkJCQkkdHdlZW5bJGlkeF0gPSAoJGlkeD09MCkgPyAnMDA6MDAnIDogJzIzOjU5 JzsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KDQoJJHNtZF9wcm9nbm9z dGljc19ub3RpZnlfdmlhID0gam9pbignfCcsICgoaXNfYXJyYXkoJG5vdGlmeSkpID8gJG5v dGlmeSA6IGFycmF5KCRub3RpZnkpKSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19mb3Ig PSBqb2luKCd8JywgKChpc19hcnJheSgkY2hmb3IpKSA/ICRjaGZvciA6IGFycmF5KCRjaGZv cikpKTsNCgkkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzID0gam9pbignfCcsICgoaXNf YXJyYXkoJHJlcXMpKSA/ICRyZXFzIDogYXJyYXkoJHJlcXMpKSk7DQoJJHNtZF9wcm9nbm9z dGljc19zcWxfaW5qZWN0ID0gam9pbignfCcsICgoaXNfYXJyYXkoJHNxbGluKSkgPyAkc3Fs aW4gOiBhcnJheSgkc3FsaW4pKSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVu ID0gam9pbignfCcsICgoaXNfYXJyYXkoJHR3ZWVuKSkgPyAkdHdlZW4gOiBhcnJheSgkdHdl ZW4pKSk7DQoJJHNtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNpY3MgPSBqb2luKCd8JywgKChp c19hcnJheSgkcnRmb3IpKSA/ICRydGZvciA6IGFycmF5KCRydGZvcikpKTsNCg0KCS8vIEdy YWIgdGhlIHNhdmVkIHByZWYgdmFsdWVzIGFuZCB0YWNrIG9uIHRoZSBhcnJheSBpdGVtKHMp DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXlfbWVyZ2UoYXJyYXkoJ3N1Ym1pdCcpLCAk cHJlZmxpc3QpKSkpOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlf dmlhJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yJzsNCgkk cHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnOw0KCSRwcmVmbGlz dFtdID0gJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0JzsNCgkkcHJlZmxpc3RbXSA9ICdz bWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2Vlbic7DQoJJHByZWZsaXN0W10gPSAnc21kX3By b2dub3N0aWNzX3J0X2ZvcmVuc2ljcyc7DQoJJHNtZF9wcm9nbm9zdGljc19kaXIgPSBydHJp bSgkc21kX3Byb2dub3N0aWNzX2RpciwgRFMpOw0KDQoJaWYgKCRzdWJtaXQgPT0gJ1NhdmUn KSB7DQoJCWlmICgoJHNtZF9wcm9nbm9zdGljc19kaXIgIT0gJG9yaWdkaXIpIHx8ICgkc21k X3Byb2dub3N0aWNzX3ByZWZpeCAhPSAkb3JpZ3BmeCkpIHsNCgkJCWlmIChpc19kaXIoJHNt ZF9wcm9nbm9zdGljc19kaXIpICYmIGlzX3dyaXRhYmxlKCRzbWRfcHJvZ25vc3RpY3NfZGly KSkgew0KCQkJCS8vIEV2ZXJ5dGhpbmcgT0sgc28gZG8gbm90aGluZyBmb3Igbm93DQoJCQl9 IGVsc2Ugew0KCQkJCS8vIElnbm9yZSBuZXcgZGlyIGFuZCByZXNldCBpdCB0byB3aGF0IGl0 IHdhcyBiZWZvcmUNCgkJCQkkc21kX3Byb2dub3N0aWNzX2RpciA9ICRvcmlnZGlyOw0KCQkJ fQ0KDQoJCQkvLyBSb29tIGZvciBtb3JlIGNvbmZpZyBmaWxlcyBhcyBhbmQgd2hlbiB0aGV5 IGFyZSByZXF1aXJlZA0KCQkJJGZpbGVsaXN0W10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNr c3VtczsNCg0KCQkJZm9yZWFjaCAoJGZpbGVsaXN0IGFzICRmaWxlKSB7DQoJCQkJJGZpbGVu YW1lID0gJHNtZF9wcm9nbm9zdGljc19wcmVmaXgubHRyaW0oYmFzZW5hbWUoJGZpbGUpLCAk b3JpZ3BmeCk7DQoJCQkJcmVuYW1lKCRmaWxlLCBydHJpbSgkc21kX3Byb2dub3N0aWNzX2Rp ciwgRFMpLkRTLiRmaWxlbmFtZSk7DQoJCQl9DQoJCX0NCg0KCQkvLyBXcml0ZSBhbGwgdGhl IHByZWZzDQoJCWZvcmVhY2ggKCRwcmVmbGlzdCBhcyAkcHJlZnZhbCkgew0KCQkJc2V0X3By ZWYoZG9TbGFzaCgkcHJlZnZhbCksIGRvU2xhc2goJCRwcmVmdmFsKSwgJ3NtZF9wcm9nbm9z JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCX0NCgkJaWYgKCRzbWRfcHJvZ25v c3RpY3NfbGlzdGxvYyAhPSAkb3JpZ2xvYykgew0KCQkJJHdhcm5sb2MgPSBzbWRfcHJvZ25v c3RpY3NfZ1R4dCgnd2Fybl9sb2MnKTsNCgkJfQ0KDQoJfQ0KDQoJJHNtZF9wcm9nbm9zdGlj c19kaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0aCwgMSk7DQoJ JHNtZF9wcm9nbm9zdGljc19wcmVmaXggPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3By ZWZpeCcsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvciA9IGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yJywgJ2RlbGV0ZXxtb2RpZnknLCAxKTsNCgkk c21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19jaGVja193aGVyZScsICdhZG1pbicsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tf ZnJlcSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJlcScsIDEwLCAxKTsN Cgkkc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW4gPSBnZXRfcHJlZignc21kX3Byb2du b3N0aWNzX2NoZWNrX2JldHdlZW4nLCAnMDA6MDB8MjM6NTknLCAxKTsNCgkkc21kX3Byb2du b3N0aWNzX2NoZWNrX3F0eSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5 JywgJzMwJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxID0gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19hbGFybV9mcmVxJywgODY0MDAsIDEpOw0KCSRzbWRfcHJvZ25v c3RpY3Nfbm90aWZ5X3ZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfbm90aWZ5X3Zp YScsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX21haWx0byA9IGdldF9wcmVmKCdzbWRf cHJvZ25vc3RpY3NfbWFpbHRvJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfbWFpbHRv X2NzaSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnLCAxKTsN Cgkkc21kX3Byb2dub3N0aWNzX3VzZXJzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc191 c2VycycsICcnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUyku RFMsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIgPSBnZXRfcHJlZignc21kX3By b2dub3N0aWNzX2V4Y2x1ZGlyJywgJ2ltYWdlcywgZmlsZXMsIHRtcCcsIDEpOw0KCSRzbWRf cHJvZ25vc3RpY3NfaWdub3JlcyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3Jl cycsICdlcnJvcl9sb2cnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJzID0g Z2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycycsICdUUkFDRXxQVVR8REVM RVRFJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0ID0gZ2V0X3ByZWYoJ3Nt ZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0JywgJzB8JywgMSk7DQoJJHNtZF9wcm9nbm9zdGlj c19ydF9mb3JlbnNpY3MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2lj cycsICcxfDEnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3R4cGRpciA9IGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfdHhwZGlyJywgaHUuc21kX3Byb2dub3N0aWNzX2d1ZXNzX2FkbWlu X2RpcigpLCAxKTsNCg0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoN CgkkYWRkcyA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19jaGVja19mb3IsICdhZGQnKSAh PT0gZmFsc2UpOw0KCSRkZWxzID0gKHN0cnBvcygkc21kX3Byb2dub3N0aWNzX2NoZWNrX2Zv ciwgJ2RlbGV0ZScpICE9PSBmYWxzZSk7DQoJJG1vZHMgPSAoc3RycG9zKCRzbWRfcHJvZ25v c3RpY3NfY2hlY2tfZm9yLCAnbW9kaWZ5JykgIT09IGZhbHNlKTsNCgkkcmhfdHJhY2UgPSAo c3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMsICdUUkFDRScpICE9PSBmYWxz ZSk7DQoJJHJoX3B1dCA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycywg J1BVVCcpICE9PSBmYWxzZSk7DQoJJHJoX2RlbCA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGlj c19yZXFfaGVhZGVycywgJ0RFTEVURScpICE9PSBmYWxzZSk7DQoJJHJ0X2hkciA9IChzdHJw b3MoJHNtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNpY3MsICdoZHInKSAhPT0gZmFsc2UpOw0K CSRydF9zcWwgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzLCAnc3Fs JykgIT09IGZhbHNlKTsNCgkkdHdlZW5zID0gZG9fbGlzdCgkc21kX3Byb2dub3N0aWNzX2No ZWNrX2JldHdlZW4sICd8Jyk7DQoJJHRocm93cyA9IGRvX2xpc3QoJHNtZF9wcm9nbm9zdGlj c19zcWxfaW5qZWN0LCAnfCcpOw0KCSRoZWxwTGluayA9ICI/ZXZlbnQ9cGx1Z2luJnN0ZXA9 cGx1Z2luX2hlbHAmbmFtZT0kc21kX3Byb2dub3N0aWNzX2V2ZW50I3NtZF9zZXR1cCI7DQoN CgllY2hvICRidG5DU1Muc3RhcnRUYWJsZSgnbGlzdCcsICcnLCAnc21kX3Byb2dub3N0aWNz X3NldHVwJyk7DQoJZWNobyB0cih0ZGNzKHN0cm9uZyhzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn dHRsX3NldHVwJykpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdoZWxwX2xpbmsnLCBhcnJh eSgne2xpbmt9JyA9PiAkaGVscExpbmspKSwgMikgLiB0ZGEoJGJ0bkZpbGVzLiRidG5BY2su JGJ0bkFkdmljZSwgJGJ0blN0eWxlKSApOw0KCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIg YWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21k X3Byb2dub3N0aWNzX3NldHVwIj4nOw0KCWVjaG8gdHIodGRjcyhoZWQoc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3R0bF9tb25vcHRzJyksIDMpICwyKSk7DQoJZWNobyB0cigNCgkJdGRhKHNt ZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja193aGVyZScpLCAnIGNsYXNzPSJzbWRfbGFiZWwi JykuDQoJCXRkYShyYWRpb1NldCgNCgkJCWFycmF5KA0KCQkJCSdhZG1pbicgPT4gZ1R4dCgn bm8nKSwNCgkJCQknYWRtaW58cHVibGljJyA9PiBnVHh0KCd5ZXMnKQ0KCQkJKSwgJ3NtZF9w cm9nbm9zdGljc19jaGVja193aGVyZScsICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUp LCAnIGlkPSJzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUiJykNCgkpOw0KCWVjaG8gdHIo DQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZnJlcScpLCAnIGNsYXNzPSJz bWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2No ZWNrX2ZyZXEnLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEsICcnLCcnLCcnLDE1KS5z cC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2Vjb25kcycpKQ0KCSk7DQoJZWNobyB0cigNCgkJ dGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19iZXR3ZWVuJyksICcgY2xhc3M9InNt ZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGlj c19jaGVja19iZXR3ZWVuW10nLCAkdHdlZW5zWzBdLCAnJywnJywnJywxNSkuDQoJCQlzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnYW5kJykuDQoJCQlmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2du b3N0aWNzX2NoZWNrX2JldHdlZW5bXScsICR0d2VlbnNbMV0sICcnLCcnLCcnLDE1KS5zcC5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgnaG1zJykNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRh KHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19xdHknKSwgJyBjbGFzcz0ic21kX2xhYmVs IicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19jaGVja19xdHkn LCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eSwgJycsJycsJycsMTUpKQ0KCSk7DQoJZWNo byB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdhbGFybV9mcmVxJyksICcgY2xh c3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3Rp Y3NfYWxhcm1fZnJlcScsICRzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcSwgJycsJycsJycs MTUpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNvbmRzJykpDQoJKTsNCgllY2hvIHRy KA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV92aWEnKSwgJyBjbGFzcz0i c21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX25v dGlmeV92aWFbXScsICd0eHAnLCBzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlh LCAndHhwJykgIT09IGZhbHNlKSAuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dU eHQoJ25vdGlmeV90eHAnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9z dGljc19ub3RpZnlfdmlhW10nLCAnZW1haWwnLCBzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19u b3RpZnlfdmlhLCAnZW1haWwnKSAhPT0gZmFsc2UpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9n bm9zdGljc19nVHh0KCdub3RpZnlfZW1haWwnKS4nPC9sYWJlbD4nDQoJCSkNCgkpOw0KCWVj aG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbWFpbHRvJyksICcgY2xhc3M9 InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3Nf bWFpbHRvJywgJHNtZF9wcm9nbm9zdGljc19tYWlsdG8sICcnLCcnLCcnLDYwKS5zcC5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3By b2dub3N0aWNzX2dUeHQoJ21haWx0b19jc2knKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0K CQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJHNt ZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpLCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0 aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cih0ZGNzKGhlZChzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgndHRsX3JlYWxvcHRzJyksIDMpLCAyKSk7DQoJZWNobyB0cigNCgkJdGRhKHNt ZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfaGVhZGVycycpLCAnIGNsYXNzPSJzbWRfbGFiZWwi JykuDQoJCXRkYSgNCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNb XScsICdUUkFDRScsICRyaF90cmFjZSkuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNz X2dUeHQoJ3JoX3RyYWNlJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25v c3RpY3NfcmVxX2hlYWRlcnNbXScsICdQVVQnLCAkcmhfcHV0KS4NCgkJCSc8bGFiZWw+Jy5z bWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfcHV0JykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNrYm94 KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdERUxFVEUnLCAkcmhfZGVsKS4N CgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfZGVsJykuJzwvbGFiZWw+ Jw0KCQkpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Nx bF9pbmplY3QnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQlzZWxlY3RJ bnB1dCgnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3RbXScsICR0aHJvd19jb2RlcywgJHRo cm93c1swXSwgMCkuDQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnd2l0aCcpLg0KCQkJZklu cHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0W10nLCAkdGhyb3dzWzFd LCAnJywnJywnJyw2MCkNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9z dGljc19nVHh0KCdzZW5kX2ZvcmVuc2ljcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJ CXRkYSgNCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzW10nLCAn aGRyJywgJHJ0X2hkcikuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3J0 X2hkcicpLic8L2xhYmVsPicuDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3J0X2Zv cmVuc2ljc1tdJywgJ3NxbCcsICRydF9zcWwpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9z dGljc19nVHh0KCdydF9zcWwnKS4nPC9sYWJlbD4nDQoJCSkNCgkpOw0KCWVjaG8gdHIodGRj cyhoZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9maWxlb3B0cycpLCAzKSwgMikpOw0K CWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZm9yJyksICcg Y2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9z dGljc19jaGVja19mb3JbXScsICdhZGQnLCAkYWRkcykgLg0KCQkJJzxsYWJlbD4nLnNtZF9w cm9nbm9zdGljc19nVHh0KCdjaF9hZGQnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3Nt ZF9wcm9nbm9zdGljc19jaGVja19mb3JbXScsICdkZWxldGUnLCAkZGVscykuDQoJCQknPGxh YmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoX2RlbCcpLic8L2xhYmVsPicuDQoJCQlj aGVja2JveCgnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcltdJywgJ21vZGlmeScsICRtb2Rz KS4NCgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hfbW9kJykuJzwvbGFi ZWw+Jw0KCQkpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQo J2xpc3Rsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0 JywgJ3NtZF9wcm9nbm9zdGljc19saXN0bG9jJywgJHNtZF9wcm9nbm9zdGljc19saXN0bG9j LCAnJywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJ ZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdleGNsdWRpcicpLCAnIGNs YXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0 aWNzX2V4Y2x1ZGlyJywgJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwgJycsJycsJycsNjAp LnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdjc3YnKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRk YShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnaWdub3JlcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwi JykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2lnbm9yZXMnLCAk c21kX3Byb2dub3N0aWNzX2lnbm9yZXMsICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnY3N2JykpDQoJKTsNCgllY2hvICgkd2FybmxvYykgPyB0cih0ZCgnJm5ic3A7 JykudGRhKCc8c3Ryb25nPicuJHdhcm5sb2MuJzwvc3Ryb25nPicpKSA6ICcnOw0KDQoJZWNo byB0cih0ZGNzKGhlZChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRsX3BsdWdvcHRzJyksIDMp LCAyKSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdhdXRoX3Vz ZXJzJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdz bWRfcHJvZ25vc3RpY3NfdXNlcnMnLCAkc21kX3Byb2dub3N0aWNzX3VzZXJzLCAnJywnJywn Jyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cigN CgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0eHBkaXInKSwgJyBjbGFzcz0ic21kX2xh YmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc190eHBkaXIn LCAkc21kX3Byb2dub3N0aWNzX3R4cGRpciwgJycsJycsJycsNjApKQ0KCSk7DQoJZWNobyB0 cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdwcm9nbG9jJyksICcgY2xhc3M9InNt ZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3RpY3NfZGly JywgJHNtZF9wcm9nbm9zdGljc19kaXIsICcnLCcnLCcnLDYwKSkNCgkpOw0KCWVjaG8gdHIo DQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJvZ3BmeCcpLCAnIGNsYXNzPSJzbWRf bGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX3ByZWZp eCcsICRzbWRfcHJvZ25vc3RpY3NfcHJlZml4LCAnJywnJywnJyw2MCkpDQoJKTsNCgllY2hv IHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7DQoJZWNobyAnPC9mb3JtPic7DQoJZWNo byBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tICBTZWN1cml0eSBhZHZpY2UNCmZ1 bmN0aW9uIHNtZF9wcm9nbm9zdGljc19hZHZpY2UoJG1zZz0nJykgew0KCWdsb2JhbCAkc21k X3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3N0eWxlLCAkcHJlZnM7DQoJ cmVxdWlyZV9vbmNlIHR4cGF0aC4nL2xpYi9JWFJDbGFzcy5waHAnOw0KDQoJcGFnZXRvcChz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cpOw0KCWV4dHJh Y3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCgkkY2hlY2tzID0gYXJyYXkoKTsN Cg0KCS8vIFByb2dub3N0aWNzIGRpciBpbiBkb2Nyb290Pw0KCWlmIChzdHJwb3MoZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19kaXInLCB0eHBhdGgpLCAkcHJlZnNbJ3BhdGhfdG9fc2l0 ZSddKSAhPT0gZmFsc2UpIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQo J2RvY3Jvb3RfcHJvZ25vc3RpY3MnKTsNCgl9DQoNCgkvLyBTZXR1cCBzdGlsbCBleGlzdHM/ DQoJaWYgKEBpc19kaXIodHhwYXRoIC4gRFMuICdzZXR1cCcpKSB7DQoJCSRjaGVja3NbXSA9 IHNtZF9wcm9nbm9zdGljc19nVHh0KCdzZXR1cF9leGlzdHMnKTsNCgl9DQoNCgkvLyBOZXcg VFhQIHZlcnNpb24vYnJhbmNoIGF2YWlsYWJsZT8gQWRhcHRlZCBmcm9tIHR4cGxpYl91cGRh dGUucGhwDQoJJGNsaWVudCA9IG5ldyBJWFJfQ2xpZW50KCdodHRwOi8vcnBjLnRleHRwYXR0 ZXJuLmNvbScpOw0KCSR1aWQgPSBnZXRfcHJlZignYmxvZ191aWQnLCBtZDUodW5pcWlkKG10 X3JhbmQoKSx0cnVlKSkpOw0KCWlmICgkY2xpZW50LT5xdWVyeSgndHVwcy5nZXRUWFBWZXJz aW9uJywkdWlkKSkgew0KCQkkcmVzcG9uc2UgPSAkY2xpZW50LT5nZXRSZXNwb25zZSgpOw0K DQoJCWlmIChpc19hcnJheSgkcmVzcG9uc2UpKSB7DQoJCQlrc29ydCgkcmVzcG9uc2UpOw0K CQkJJHZlcnNpb24gPSBnZXRfcHJlZigndmVyc2lvbicsICcnKTsNCgkJCSRsdmVyc2lvbiA9 IGV4cGxvZGUoJy4nLCR2ZXJzaW9uKTsNCgkJCSRicmFuY2ggPSBzdWJzdHIoJHZlcnNpb24s MCwzKTsNCg0KCQkJZm9yZWFjaCAoJHJlc3BvbnNlIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJ CSRydmVyc2lvbiA9IGV4cGxvZGUoJy4nLCR2YWwpOw0KCQkJCWlmICgka2V5ID09ICd0eHBf Y3VycmVudF92ZXJzaW9uXycuJGJyYW5jaCkgew0KCQkJCQlpZiAoaXNzZXQoJGx2ZXJzaW9u WzJdKSAmJiBpc3NldCgkcnZlcnNpb25bMl0pICYmIChpbnR2YWwoJHJ2ZXJzaW9uWzJdKT5p bnR2YWwoJGx2ZXJzaW9uWzJdKSkpIHsNCgkJCQkJCSRtb3N0X3JlY2VudCA9IHNtZF9wcm9n bm9zdGljc19nVHh0KCdhdmFpbF9icmFuY2gnKS4nOiAnLiR2YWw7DQoJCQkJCX0NCgkJCQl9 IGVsc2Ugew0KCQkJCQlpZiAoaW50dmFsKCRydmVyc2lvblswXSk+aW50dmFsKCRsdmVyc2lv blswXSkgfHwgaW50dmFsKCRydmVyc2lvblsxXSk+aW50dmFsKCRsdmVyc2lvblsxXSkpIHsN CgkJCQkJCSRtb3N0X3JlY2VudCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhdmFpbF90eHAn KS4nOiAnLiR2YWw7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQlpZiAoaXNzZXQoJG1vc3Rf cmVjZW50KSkgew0KCQkJCSRjaGVja3NbXSA9ICRtb3N0X3JlY2VudDsNCgkJCX0NCgkJfQ0K CX0NCg0KCS8vIEZpbGVzIGRpciBpbiBkb2Nyb290Pw0KCWlmIChzdHJwb3MoJHByZWZzWydm aWxlX2Jhc2VfcGF0aCddLCAkcHJlZnNbJ3BhdGhfdG9fc2l0ZSddKSAhPT0gZmFsc2UpIHsN CgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2RvY3Jvb3RfZmlsZXMnKTsN Cgl9DQoNCgkvLyBUbXAgZGlyIGluIGRvY3Jvb3Q/DQoJaWYgKHN0cnBvcygkcHJlZnNbJ3Rl bXBkaXInXSwgJHByZWZzWydwYXRoX3RvX3NpdGUnXSkgIT09IGZhbHNlKSB7DQoJCSRjaGVj a3NbXSA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdkb2Nyb290X3RtcCcpOw0KCX0NCg0KLyoN CgkvLyBUT0RPOiBjaGVjayB3aGF0IFNIT1cgR1JBTlRTIHJldHVybnMgYW5kIGRldGVybWlu ZSBpZiBpdCBjb3VsZCBiZSBhIHNlY3VyaXR5IHJpc2sNCgkkcmVzID0gc2FmZV9xdWVyeSgn U0hPVyBHUkFOVFMnKTsNCglpZiAobnVtUm93cygkcmVzKSA+IDApIHsNCgkJJGNoZWNrc1td ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Nob3dfZ3JhbnRzJyk7DQoJfQ0KKi8NCg0KCS8v IERvZXMgdGhpcyBNeVNRTCB1c2VyIGhhdmUgRklMRVMgcHJpdnM/DQoJJHJhbmRmaWxlID0g JHByZWZzWyd0ZW1wZGlyJ10uRFMucmFuZCgpLnRpbWUoKS4nLnNxbCc7DQoJJHJlcyA9IEBz YWZlX3F1ZXJ5KCdTRUxFQ1QgaWQgSU5UTyBPVVRGSUxFICInLiRyYW5kZmlsZS4nIiBGSUVM RFMgVEVSTUlOQVRFRCBCWSAiXHQiIExJTkVTIFRFUk1JTkFURUQgQlkgIlxuIiBGUk9NIHR4 cF9pbWFnZSBXSEVSRSAxIExJTUlUIDEnKTsNCglpZiAobXlzcWxfZXJyb3IoKSA9PSAnJykg ew0KCQkkY2hlY2tzW10gPSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3FsX2ZpbGVfcHJpdnMn KTsNCgkJaWYgKGlzX2ZpbGUoJHJhbmRmaWxlKSkgew0KCQkJQHVubGluaygkcmFuZGZpbGUp Ow0KCQl9DQoJfQ0KDQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJv Z25vc3RpY3Nfc3R5bGVbJ2FkdmljZSddLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVw J10uJzwvc3R5bGU+Jy5zdGFydFRhYmxlKCdsaXN0JywgJycsICdzbWRfcHJvZ19hZHZpY2Un KTsNCgllY2hvIHRyKHRkYShzdHJvbmcoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9hZHZp Y2UnKSkpIC4gdGRhKCRidG5TZXR1cC4kYnRuRmlsZXMuJGJ0bkFjaywgJGJ0blN0eWxlKSAp Ow0KCWlmICgkY2hlY2tzKSB7DQoJCWZvcmVhY2goJGNoZWNrcyBhcyAkY2hlY2spIHsNCgkJ CWVjaG8gdHIodGRhKCRjaGVjaykpOw0KCQl9DQoJfSBlbHNlIHsNCgkJc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3RpZ2h0Jyk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0t LS0tLS0tLSBIYXNoIHRoZSBoYXNoZmlsZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3Nl bGZfaGFzaCgpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoNCglp ZiAoZmlsZV9leGlzdHMoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCSRjb250 ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNr c3Vtcyk7DQoJCSRoYXNoID0gbWQ1KCRjb250ZW50KTsNCgl9IGVsc2Ugew0KCQkkaGFzaCA9 IE5VTEw7DQoJfQ0KCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3VtaGFzaCcsICRoYXNo LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCn0NCg0KLy8g LS0tLS0tLS0tLSBDb21waWxlIGxpc3Qgb2YgZmlsZXMgdG8gbW9uaXRvcg0KZnVuY3Rpb24g c21kX3Byb2dub3N0aWNzX3JlYWRmaWxlcygpIHsNCgkkZmlsZWxpc3QgPSBhcnJheSgpOw0K DQoJJHNtZF9wcm9nbm9zdGljc19saXN0bG9jID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGlj c19saXN0bG9jJywgJycpOw0KCSRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIgPSBkb19saXN0 KGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLCAnJykpOw0KCSRzbWRfcHJv Z25vc3RpY3NfaWdub3JlcyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaWdub3Jlcycs ICcnKTsNCglpZiAoJHNtZF9wcm9nbm9zdGljc19saXN0bG9jKSB7DQoJCWZvcmVhY2ggKGRv X2xpc3QoJHNtZF9wcm9nbm9zdGljc19saXN0bG9jKSBhcyAkbG9jKSB7DQoJCQkvLyBOT1RF OiBub3QgdXNpbmcgR0xPQl9CUkFDRSB0byBncmFiIHJlZ3VsYXIgYW5kIGRvdCBmaWxlcywg c2luY2UgaXQncyBub3QgYWx3YXlzIGF2YWlsYWJsZSBjcm9zcy1PUw0KCQkJJGZpbGVsaXN0 ID0gYXJyYXlfbWVyZ2UoJGZpbGVsaXN0LCBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoIioiLCBH TE9CX01BUkssICRsb2MsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICRzbWRfcHJvZ25v c3RpY3NfaWdub3JlcyksIHNtZF9wcm9nbm9zdGljc19yZ2xvYigiLioiLCBHTE9CX01BUkss ICRsb2MsICRzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXIsICRzbWRfcHJvZ25vc3RpY3NfaWdu b3JlcykpOw0KCQl9DQoJfQ0KCXJldHVybiAkZmlsZWxpc3Q7DQp9DQoNCi8vIC0tLS0tLS0t LS0gUHJlcGFyZSBmaWxlIGNvbnRlbnRzIGZvciBtZDUuIEFzc3VtZXMgZmlsZSBleGlzdHMN Ci8vIENoZWNrcyB0byBzZWUgaWYgbGFyZ2UgZmlsZXMgYXJlIGJpbmFyeSBiZWZvcmUgd2Fz dGluZyB0aW1lIHN0cmlwcGluZyBuZXdsaW5lcyBhbmQgc3R1ZmYNCmZ1bmN0aW9uIHNtZF9w cm9nbm9zdGljc19wcmVwX2ZpbGUoJGZpbGUpIHsNCgkkY29udGVudCA9IGZpbGVfZ2V0X2Nv bnRlbnRzKCRmaWxlKTsNCgkkc3RhdCA9IHN0YXQoJGZpbGUpOw0KCSRkb3N0cmlwID0gdHJ1 ZTsNCgkvLyBQZXJmb3JtIHRoZSBzdHJpcCByZWdhcmRsZXNzIG9uIGZpbGVzIDwgMUtiIGFz IGl0IGhhcyBsaXR0bGUgaW1wYWN0DQoJaWYgKCRzdGF0WydzaXplJ10gPiAxMDI0MDAwKSB7 DQoJCSRwYXJ0ID0gc3Vic3RyKCRjb250ZW50LCAwLCAxNTM2MDAwKTsgLy8gRmlyc3QgMS41 S0INCgkJaWYgKHN0cnBvcygkcGFydCwgMHgwMCkgfHwgKHN0cnBvcygkcGFydCwgMHgwRCkg IT09IGZhbHNlKSB8fCAoc3RycG9zKCRwYXJ0LCAweDBBKSAhPT0gZmFsc2UpKSB7DQoJCQkv LyBMaWtlbHkgYSBiaW5hcnkgZmlsZTogbGVhdmUgaXQgYmUNCgkJCSRkb3N0cmlwID0gZmFs c2U7DQoJCX0NCgl9DQoJaWYgKCRkb3N0cmlwKSB7DQoJCSRjb250ZW50ID0gc3RydHIoICRj b250ZW50LCBhcnJheSgiXHJcbiIgPT4gIlxuIiwgIlwkSGVhZFVSTDogaHR0cDoiID0+ICJc JEhlYWRVUkw6IGh0dHBzOiIpICk7DQoJfQ0KCXJldHVybiAkY29udGVudDsNCn0NCg0KLy8g RnJhbmtlbnN0ZWluZWQgZnJvbSBodHRwOi8vc25pcHBsci5jb20vdmlldy8xNjIzMy9yZWN1 cnNpdmUtZ2xvYi8NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19yZ2xvYigkcGF0dGVybiwg JGZsYWdzPTAsICRwYXRoPScnLCAkZXhjbD1hcnJheSgpLCAkaWduPScnKSB7DQoJZ2xvYmFs ICRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zOw0KDQoJLy8gQWRkIGFueSBmaWxlcyB0byBw ZXJtYW5lbnRseSBleGNsdWRlIGhlcmUgKE5PVCBkaXJzOiB0aGV5J3JlIGlnbm9yZWQgYXV0 b21hdGljYWxseSkNCgkkaWduYXJyID0gKCRpZ24pID8gZG9fbGlzdCgkaWduKSA6IGFycmF5 KCk7DQoNCgkvLyBFeHBhbmQgYW55IHdpbGRjYXJkIGZpbGVuYW1lcw0KCSRyZWdhcnIgPSBh cnJheSgpOw0KCWZvcmVhY2ggKCRpZ25hcnIgYXMgJGlkeCA9PiAkaXRlbSkgew0KCQlpZiAo IChzdHJwb3MoJGl0ZW0sICcqJykgIT09IGZhbHNlKSB8fCAoc3RycG9zKCRpdGVtLCAnPycp ICE9PSBmYWxzZSkgKSB7DQoJCQkkcmVnYXJyW10gPSBzdHJ0ciggcHJlZ19xdW90ZSgkaXRl bSksIGFycmF5KCJcKiIgPT4gIi4qIiwgIlw/IiA9PiAiLiIpICk7DQoJCQl1bnNldCgkaWdu YXJyWyRpZHhdKTsgLy8gUmVtb3ZlIHRoZSB3aWxkY2FyZCBmaWxlbmFtZSBmcm9tIHRoZSBp Z25vcmUgbGlzdA0KCQl9DQoJfQ0KCSRyZWdleGNsdWRlID0gKCRyZWdhcnIpID8gJy9eKCcg LiBqb2luKCd8JywgJHJlZ2FycikgLiAnKSQvJyA6ICcnOw0KCSRwZXJtZXhjbHVkZSA9IGFy cmF5X21lcmdlKGFycmF5KGJhc2VuYW1lKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKSks ICRpZ25hcnIpOw0KDQoJaWYgKCEkcGF0aCAmJiAoJGRpciA9IGRpcm5hbWUoJHBhdHRlcm4p KSAhPSAnLicpIHsNCgkJaWYgKCRkaXIgPT0gJ1xcJyB8fCAkZGlyID09IERTKSAkZGlyID0g Jyc7DQoJCXJldHVybiBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoYmFzZW5hbWUoJHBhdHRlcm4p LCAkZmxhZ3MsICRkaXIgLiBEUywgJGV4Y2wsICRpZ24pOw0KCX0NCgkkcGF0aHMgPSBnbG9i KCRwYXRoIC4gJyonLCBHTE9CX09OTFlESVIgfCBHTE9CX05PU09SVCk7DQoJJGZpbGVzID0g Z2xvYigkcGF0aCAuICRwYXR0ZXJuLCAkZmxhZ3MpOw0KCWZvcmVhY2ggKCRwYXRocyBhcyAk cCkgew0KCQkkcGluZm8gPSBhcnJheV9wb3AoZXhwbG9kZShEUywgJHApKTsNCgkJaWYgKCFp bl9hcnJheSgkcGluZm8sICRleGNsKSkgew0KCQkJJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZp bGVzLCBzbWRfcHJvZ25vc3RpY3Nfcmdsb2IoJHBhdHRlcm4sICRmbGFncywgJHAgLiBEUywg JGV4Y2wsICRpZ24pKTsNCgkJCWZvcmVhY2goJGZpbGVzIGFzICRpZHggPT4gJHRoZUZpbGUp IHsNCgkJCQkkZmV4ID0gYXJyYXlfcG9wKGV4cGxvZGUoRFMsICR0aGVGaWxlKSk7DQoJCQkJ JHJleCA9ICgkcmVnZXhjbHVkZSkgPyBwcmVnX21hdGNoKCRyZWdleGNsdWRlLCAkZmV4KSA6 IGZhbHNlOw0KCQkJCWlmKCRmZXg9PScnIHx8IGluX2FycmF5KCRmZXgsICRwZXJtZXhjbHVk ZSkgfHwgJHJleCkgew0KCQkJCQl1bnNldCgkZmlsZXNbJGlkeF0pOw0KCQkJCX0NCgkJCX0N CgkJfQ0KCX0NCglyZXR1cm4gJGZpbGVzOw0KfQ0KDQovLyBGb3JtYXQgZm9yZW5zaWMgZGF0 YSBmb3IgYSBmaWxlDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfZm9yZW5zaWNfb3V0cHV0 KCRmaWxlLCAkZmkpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJGRmb3JtID0gJHByZWZzWydk YXRlZm9ybWF0J107DQoJJHNlcCA9IG47DQoJJG91dCA9ICcnOw0KDQoJJG91dCAuPSAkc2Vw IC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfbmFtZScpIC4gJGZpbGU7DQoJJG91dCAu PSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfc2l6ZScpIC4gJGZpWydzaXpl J107DQoJJG91dCAuPSAkc2VwIC4gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfbW9kJykg LiBzdHJmdGltZSgkZGZvcm0sICRmaVsnbXRpbWUnXSk7DQoJJG91dCAuPSAkc2VwIC4gc21k X3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfdWlkJykgLiAkZmlbJ3VpZCddOw0KCSRvdXQgLj0g JHNlcCAuIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzdGF0X2dpZCcpIC4gJGZpWydnaWQnXTsN Cg0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tIERvZXMgd2hhdCBpdCBzYXlz IG9uIHRoZSB0aW4NCi8vIEFzc3VtZXMgJ3RleHRwYXR0ZXJuJyBpcyB0aGUgYWRtaW4tc2lk ZSBkaXJlY3RvcnkgaWYgc2VydmVyIHZhciBub3Qgc2V0LiBNdXN0IGZpeCBpbiBjb3JlIG9u ZSBkYXkgd2l0aCB0cnVlIGNvbnN0YW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfZ3Vl c3NfYWRtaW5fZGlyKCkgew0KCSRhZG1pbmRpciA9IHRyaW0oZGlybmFtZSgkX1NFUlZFUlsn UEhQX1NFTEYnXSksICcvXFwnKTsNCgkkYWRtaW5kaXIgPSAoZW1wdHkoJGFkbWluZGlyKSkg PyAndGV4dHBhdHRlcm4nIDogJGFkbWluZGlyOw0KCXJldHVybiAkYWRtaW5kaXI7DQp9DQoN Ci8vIC0tLS0tLS0tLS0gR2V0IGNvbW1vbiBzZXJ2ZXIgaW5mbyBmb3IgbWFpbCBoZWFkZXJz LCBldGMNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19oZWFkZXJfaW5mbygkZnJvbW5hbWUp IHsNCgkkZG9tYWlucGFydHMgPSBkb19saXN0KGRvU3RyaXAoc2VydmVyU2V0KCdTRVJWRVJf TkFNRScpKSwgJy4nKTsNCgkkbnVtcGFydHMgPSBjb3VudCgkZG9tYWlucGFydHMpOw0KCSRk b21haW4gPSAkZG9tYWlucGFydHNbJG51bXBhcnRzLTJdIC4gJy4nIC4gJGRvbWFpbnBhcnRz WyRudW1wYXJ0cy0xXTsNCgkkcmVwbHlfdG8gPSAnbm9yZXBseUAnLiRkb21haW47DQoJJHR4 cGRpciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfdHhwZGlyJywgaHUuc21kX3Byb2du b3N0aWNzX2d1ZXNzX2FkbWluX2RpcigpKTsNCgkkc2VwID0gaXNfd2luZG93cygpID8gIlxy XG4iIDogIlxuIjsNCgkkaGVhZGVycyA9ICJGcm9tOiAkZnJvbW5hbWUgPCRyZXBseV90bz4i Lg0KCQkkc2VwLidSZXBseS1UbzogJy4kcmVwbHlfdG8uDQoJCSRzZXAuJ1gtTWFpbGVyOiBU ZXh0cGF0dGVybicuDQoJCSRzZXAuJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQn Lg0KCQkkc2VwLidDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9IlVURi04Iicu DQoJCSRzZXA7DQoNCgkkb3V0ID0gYXJyYXkoDQoJCSdkb21haW4nID0+ICRkb21haW4sDQoJ CSdyZXBseV90bycgPT4gJHJlcGx5X3RvLA0KCQkndHhwZGlyJyA9PiAkdHhwZGlyLA0KCQkn c2VwJyA9PiAkc2VwLA0KCQknaGVhZGVycycgPT4gJGhlYWRlcnMsDQoJKTsNCg0KCXJldHVy biAkb3V0Ow0KfQ0KDQovLyBDb21tb24gYnV0dG9ucw0KZnVuY3Rpb24gc21kX3Byb2dub3N0 aWNzX2J1dHRvbnMoKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRf cHJvZ25vc3RpY3Nfc3R5bGU7DQoNCgkkcmV0ID0gYXJyYXkgKA0KCQknYnRuU2F2ZScgPT4g ZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpLA0K CQknYnRuQWNrJyA9PiAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRz bWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJiMz ODtzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJt aXQnLCBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX2FjaycpLCAnc21hbGxlcmJveCcpLic8 L2Zvcm0+JywNCgkJJ2J0bkFja0l0JyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgncG5sX2Fja2l0JyksICdwdWJsaXNoJyksDQoJCSdidG5J Z25vcmUnID0+IGZJbnB1dCgnc3VibWl0JywgJ2lnbm9yZScsIHNtZF9wcm9nbm9zdGljc19n VHh0KCdwbmxfaWdub3JlJyksICdwdWJsaXNoJyksDQoJCSdidG5DU0knID0+IGZJbnB1dCgn c3VibWl0JywgJ2NzaScsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfY3NpJyksICdwdWJs aXNoJyksDQoJCSdidG5BZHZpY2UnID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i P2V2ZW50PScuJHNtZF9wcm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9z dGljc19hZHZpY2UiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3BubF9hZHZpY2UnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdi dG5GaWxlcycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21k X3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVzIj4n LmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxf ZmlsZXMnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TZXR1cCcgPT4gJzxm b3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2 ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nLmZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfc2V0dXAnKSwgJ3NtYWxs ZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TdHlsZScgPT4gJyBjbGFzcz0ic21kX3Byb2df YnRucyIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4OyInLA0KCQknYnRuQ1NTJyA9PiAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVw J10uJzwvc3R5bGU+JywNCgkpOw0KCXJldHVybiAkcmV0Ow0KfQ0KDQovLyBNdWx0aS1maWxl IGRyb3Bkb3duIHNlbGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX211bHRpc2Vs KCRzZWxuYW1lPScnLCAkdHJlZT1hcnJheSgpLCAkc2VsPWFycmF5KCkpIHsNCgkkb3V0W10g PSAnPHNlbGVjdCBpZD0iJy4kc2VsbmFtZS4nIiBuYW1lPSInLiRzZWxuYW1lLidbXSIgY2xh c3M9Imxpc3QiIHN0eWxlPSJoZWlnaHQ6NDAwcHg7IiBtdWx0aXBsZT0ibXVsdGlwbGUiPic7 DQoJZm9yZWFjaCAoJHRyZWUgYXMgJGxlYWYpIHsNCgkJJHNlbGVjdGVkPScnOw0KCQlpZiAo aW5fYXJyYXkoJGxlYWYsICRzZWwpKSB7DQoJCQkkc2VsZWN0ZWQgPSAnIHNlbGVjdGVkPSJz ZWxlY3RlZCInOw0KCQl9DQoNCgkJJG91dFtdID0gdC4nPG9wdGlvbicuJHNlbGVjdGVkLic+ Jy5odG1sc3BlY2lhbGNoYXJzKCRsZWFmKS4nPC9vcHRpb24+Jy5uOw0KCX0NCgkkb3V0W10g PSAnPC9zZWxlY3Q+JzsNCglyZXR1cm4gam9pbignJywkb3V0KTsNCn0NCg0KLy8gUGFzc3dv cmQgc3RyZW5ndGggbWV0ZXINCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJl bmd0aCgkZXZ0LCAkc3RwKSB7DQoJZ2xvYmFsICRldmVudCwgJHNtZF9wcm9nbm9zdGljc19z dHlsZTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnskc21kX3By b2dub3N0aWNzX3N0eWxlWydtZXRlciddfTwvc3R5bGU+DQo8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCI+DQovLzwhW0NEQVRBWw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKioNCioqICAgRnJhbmtl bnN0ZWluZWQgZnJvbSBhbiBvcmlnaW5hbCAoR1BMKSBzY3JpcHQNCioqICAgYnkgU21hbGwg SGFkcm9uIENvbGxpZGVyIC0tIFRoYW5rcyENCioqICAgaHR0cDovL3d3dy5zbWFsbGhhZHJv bmNvbGxpZGVyLmNvbQ0KKioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGlj c19nVHh0KHdoYXQpIHsNCgl2YXIgbGFuZyA9IG5ldyBBcnJheSgpOw0KCWxhbmdbJ2Fib3V0 J10gPSAnYWJvdXQgJzsNCglsYW5nWydkaWdpdHNlcCddID0gJywnOw0KCWxhbmdbJ3BsdXJh bCddID0gJ3MnOw0KCWxhbmdbJ3B3X2NvbW1vbiddID0gJ29uZSBvZiB0aGUgNTAwIG1vc3Qg Y29tbW9uIHBhc3N3b3Jkcyc7DQoJbGFuZ1sncHdfcG9zdGFtYmxlJ10gPSAnSXQgd291bGQg YmUgY3JhY2tlZCBhbG1vc3QgaW5zdGFudGx5JzsNCglsYW5nWydwd19wcmVhbWJsZSddID0g J1lvdXIgcGFzc3dvcmQgaXMnOw0KCWxhbmdbJ3B3X3Rha2UnXSA9ICdJdCB3b3VsZCB0YWtl JzsNCglsYW5nWydwd19jcmFjayddID0gJ2ZvciBhIGRlc2t0b3AgUEMgdG8gY3JhY2sgeW91 ciBwYXNzIGJ5IGJydXRlIGZvcmNlPGJyIC8+KHVubGVzcyB5b3UgPGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL2Jsb2cvY2hvb3NpbmctYS1icmlsbGlhbnQtcGFzc3dvcmQvIj5i cm9rZSB0aGUgcnVsZXM8L2E+LCBpbiB3aGljaCBjYXNlIGl0XCdkIGJlIGNyYWNrZWQgYWxt b3N0IGluc3RhbnRseSknOw0KCWxhbmdbJ3NlY3MnXSA9ICcgc2Vjb25kcyc7DQoJbGFuZ1sn dF9zZWMnXSA9ICdzZWNvbmQnOw0KCWxhbmdbJ3RfbWluJ10gPSAnbWludXRlJzsNCglsYW5n Wyd0X2hyJ10gPSAnaG91cic7DQoJbGFuZ1sndF9kYXknXSA9ICdkYXknOw0KCWxhbmdbJ3Rf eXInXSA9ICd5ZWFyJzsNCglsYW5nWyd0X3Rob195J10gPSAndGhvdXNhbmQgeWVhcnMnOw0K CWxhbmdbJ3RfbWlsX3knXSA9ICdtaWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X2JpbF95J10g PSAnYmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF90cmlfeSddID0gJ3RybGxpb24geWVhcnMn Ow0KCWxhbmdbJ3RfcXVhX3knXSA9ICdxdWFkcmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9x dWlfeSddID0gJ3F1aW50aWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3NleF95J10gPSAnc2V4 dGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9zZXBfeSddID0gJ3NlcHRpbGxpb24geWVhcnMn Ow0KCWxhbmdbJ3Rfb2N0X3knXSA9ICdvY3RpbGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfbm9u X3knXSA9ICdub25pbGxpb24geWVhcnMnOw0KCXJldHVybiBsYW5nW3doYXRdOw0KfQ0KDQpm dW5jdGlvbiBzbWRfcHJvZ19jaHJvbm9TdHJlbmd0aChwdykgew0KCXZhciBzaXplID0gcHcu bGVuZ3RoOw0KCXZhciBzbWRfcHJvZ19jb21tb25fcHcgPSBuZXcgQXJyYXkoKTsNCgl2YXIg cHJlY2lzaW9uID0gNzsNCglzbWRfcHJvZ19jb21tb25fcHdbM10gPSBbJ2dvZCcsJ3NleCdd Ow0KCXNtZF9wcm9nX2NvbW1vbl9wd1s0XSA9IFsnMTIzNCcsJ2Nvb2wnLCcxMzEzJywnc3Rh cicsJ2dvbGYnLCdiZWFyJywnZGF2ZScsJ3Bhc3MnLCdhYWFhJywnNjk2OScsJ2pha2UnLCdt YXR0JywnMTIxMicsJ2Zpc2gnLCdmdWNrJywncG9ybicsJzQzMjEnLCcyMDAwJywnNDEyOCcs J3Rlc3QnLCdzaGl0JywnbG92ZScsJ2JhYnknLCdjdW50JywnbWFyaycsJzMzMzMnLCdqb2hu Jywnc2V4eScsJzUxNTAnLCc0NDQ0JywnMjExMicsJ2ZyZWQnLCdtaWtlJywnMTExMScsJ3Rp dHMnLCdwYXVsJywnbWluZScsJ2tpbmcnLCdmaXJlJywnNTU1NScsJ3NsdXQnLCdnaXJsJywn MjIyMicsJ2FzZGYnLCd0aW1lJywnNzc3NycsJ3JvY2snLCd4eHh4JywnZm9yZCcsJ2RpY2sn LCdiaWxsJywnd29sZicsJ2JsdWUnLCdhbGV4JywnY29jaycsJ2JlZXInLCdlcmljJywnNjY2 NicsJ2phY2snXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNV0gPSBbJ2JlYWNoJywnZ3JlYXQn LCdibGFjaycsJ3B1c3N5JywnMTIzNDUnLCdmcmFuaycsJ3RpZ2VyJywnamFwYW4nLCdtb25l eScsJ25ha2VkJywnMTExMTEnLCdhbmdlbCcsJ3N0YXJzJywnYXBwbGUnLCdwb3JubycsJ3N0 ZXZlJywndmlwZXInLCdob3JueScsJ291ODEyJywna2V2aW4nLCdidWRkeScsJ3RlZW5zJywn eW91bmcnLCdqYXNvbicsJ2x1Y2t5JywnZ2lybHMnLCdsb3ZlcicsJ2JyaWFuJywna2l0dHkn LCdidWJiYScsJ2hhcHB5JywnY3JlYW0nLCdqYW1lcycsJ3h4eHh4JywnYm9vdHknLCdrZWxs eScsJ2Jvb2JzJywncGVuaXMnLCdlYWdsZScsJ3doaXRlJywnZW50ZXInLCdjaGV2eScsJ3Nt aXRoJywnY2hyaXMnLCdncmVlbicsJ3NhbW15Jywnc3VwZXInLCdtYWdpYycsJ3Bvd2VyJywn ZW5qb3knLCdzY290dCcsJ2RhdmlkJywndmlkZW8nLCdxd2VydCcsJ3BhcmlzJywnd29tZW4n LCdqdWljZScsJ2RpcnR5JywnbXVzaWMnLCdwZXRlcicsJ2JpdGNoJywnaG91c2UnLCdoZWxs bycsJ2JpbGx5JywnbW92aWUnXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNl0gPSBbJzEyMzQ1 NicsJ3ByaW5jZScsJ2d1aXRhcicsJ2J1dHRlcicsJ2phZ3VhcicsJ3VuaXRlZCcsJ3R1cnRs ZScsJ211ZmZpbicsJ2Nvb3BlcicsJ25hc2NhcicsJ3JlZHNveCcsJ2RyYWdvbicsJ3p4Y3Zi bicsJ3F3ZXJ0eScsJ3RvbWNhdCcsJzY5Njk2OScsJzY1NDMyMScsJ211cnBoeScsJzk4NzY1 NCcsJ2FtYW5kYScsJ2JyYXppbCcsJ3dpemFyZCcsJ2hhbm5haCcsJ2xhdXJlbicsJ21hc3Rl cicsJ2RvY3RvcicsJ2VhZ2xlMScsJ2dhdG9ycycsJ3NxdWlydCcsJ3NoYWRvdycsJ21pY2tl eScsJ21vdGhlcicsJ21vbmtleScsJ2JhaWxleScsJ2p1bmlvcicsJ25hdGhhbicsJ2FiYzEy MycsJ2tuaWdodCcsJ2FsZXhpcycsJ2ljZW1hbicsJ2Z1Y2ttZScsJ3RpZ2VycycsJ2JhZGJv eScsJ2Jvbm5pZScsJ3B1cnBsZScsJ2RlYmJpZScsJ2FuZ2VsYScsJ2pvcmRhbicsJ2FuZHJl YScsJ3NwaWRlcicsJ2hhcmxleScsJ3JhbmdlcicsJ2Rha290YScsJ2Jvb2dlcicsJ2l3YW50 dScsJ2FhYWFhYScsJ2xvdmVycycsJ3BsYXllcicsJ2ZseWVycycsJ3N1Y2tpdCcsJ2h1bnRl cicsJ2JlYXZlcicsJ21vcmdhbicsJ21hdHJpeCcsJ2Jvb21lcicsJ3J1bm5lcicsJ2JhdG1h bicsJ3Njb29ieScsJ2Vkd2FyZCcsJ3Rob21hcycsJ3dhbHRlcicsJ2hlbHBtZScsJ2dvcmRv bicsJ3RpZ2dlcicsJ2phY2tpZScsJ2Nhc3BlcicsJ3JvYmVydCcsJ2Jvb2JvbycsJ2Jvc3Rv bicsJ21vbmljYScsJ3N0dXBpZCcsJ2FjY2VzcycsJ2NvZmZlZScsJ2JyYXZlcycsJ3h4eHh4 eCcsJ3lhbmtlZScsJ3NhdHVybicsJ2J1c3RlcicsJ2dlbWluaScsJ2Jhcm5leScsJ2FwcGxl cycsJ3NvY2NlcicsJ3JhYmJpdCcsJ3ZpY3RvcicsJ2F1Z3VzdCcsJ2hvY2tleScsJ3BlYW51 dCcsJ3R1Y2tlcicsJ2tpbGxlcicsJ2NhbmFkYScsJ2dlb3JnZScsJ2pvaG5ueScsJ3NpZXJy YScsJ2JsYXplcicsJ2FuZHJldycsJ3NwYW5reScsJ2RvZ2dpZScsJzIzMjMyMycsJ3dpbnRl cicsJ3p6enp6eicsJ2JyYW5keScsJ2d1bm5lcicsJ2JlYXZpcycsJ2NvbXBhcScsJ2hvcm5l eScsJzExMjIzMycsJ2NhcmxvcycsJ2FydGh1cicsJ2RhbGxhcycsJ3Rlbm5pcycsJ3NvcGhp ZScsJ2xhZGllcycsJ2NhbHZpbicsJ3NoYXZlZCcsJ3BlcHBlcicsJ2dpYW50cycsJ3N1cmZl cicsJ2ZlbmRlcicsJ3NhbXNvbicsJ2F1c3RpbicsJ21lbWJlcicsJ2Jsb25kZScsJ2Jsb3dt ZScsJ2Z1Y2tlZCcsJ2RhbmllbCcsJ2RvbmFsZCcsJ2dvbGRlbicsJ2dvbGZlcicsJ2Nvb2tp ZScsJ3N1bW1lcicsJ2Jyb25jbycsJ3JhY2luZycsJ3NhbmRyYScsJ2hhbW1lcicsJ3Bvb2tp ZScsJ2pvc2VwaCcsJ2hlbnRhaScsJ2pvc2h1YScsJ2RpYWJsbycsJ2JpcmRpZScsJ21hZ2dp ZScsJ3NleHNleCcsJ2xpdHRsZScsJ2JpdGVtZScsJzY2NjY2NicsJ3RvcGd1bicsJ2FzaGxl eScsJ3dpbGxpZScsJ3N0aWNreScsJ2Nvd2JveScsJ2FuaW1hbCcsJ3NpbHZlcicsJ3lhbWFo YScsJ3FhendzeCcsJ2Z1Y2tlcicsJ2p1c3RpbicsJ3NraXBweScsJ29yYW5nZScsJ2JhbmFu YScsJ2xha2VycycsJ21hcnZpbicsJ21lcmxpbicsJ2RyaXZlcicsJ3JhY2hlbCcsJ21hcmlu ZScsJ3NsYXllcicsJ2FuZ2VscycsJ2FzZGZnaCcsJ2JpZ2RvZycsJ3ZhZ2luYScsJ2Fwb2xs bycsJ2NoZWVzZScsJ3RveW90YScsJ3BhcmtlcicsJ21hZGRvZycsJ3RyYXZpcycsJzEyMTIx MicsJ2xvbmRvbicsJ2hvdGRvZycsJ3dpbHNvbicsJ3N5ZG5leScsJ21hcnRpbicsJ2Rlbm5p cycsJ3Zvb2RvbycsJ2dpbmdlcicsJ21hZ251bScsJ2FjdGlvbicsJ25pY29sZScsJ2NhcnRl cicsJ2Vyb3RpYycsJ3NwYXJreScsJ2phc3BlcicsJzc3Nzc3NycsJ3llbGxvdycsJ3Ntb2tl eScsJ2RyZWFtcycsJ2NhbWFybycsJ3hhdmllcicsJ3RlcmVzYScsJ2ZyZWRkeScsJ3NlY3Jl dCcsJ3N0ZXZlbicsJ2plcmVteScsJ3Zpa2luZycsJ2ZhbGNvbicsJ3Nub29weScsJ3J1c3Np YScsJ3RheWxvcicsJ25pcHBsZScsJzExMTExMScsJ2VhZ2xlcycsJzEzMTMxMycsJ3dpbm5l cicsJ3Rlc3RlcicsJzEyMzEyMycsJ21pbGxlcicsJ3JvY2tldCcsJ2xlZ2VuZCcsJ2Zsb3dl cicsJ3RoZW1hbicsJ3BsZWFzZScsJ29saXZlcicsJ2FsYmVydCddOw0KCXNtZF9wcm9nX2Nv bW1vbl9wd1s3XSA9IFsncG9yc2NoZScsJ3Jvc2VidWQnLCdjaGVsc2VhJywnYW1hdGV1cics Jzc3Nzc3NzcnLCdkaWFtb25kJywndGlmZmFueScsJ2phY2tzb24nLCdzY29ycGlvJywnY2Ft ZXJvbicsJ3Rlc3RpbmcnLCdzaGFubm9uJywnbWFkaXNvbicsJ211c3RhbmcnLCdib25kMDA3 JywnbGV0bWVpbicsJ21pY2hhZWwnLCdnYXRld2F5JywncGhvZW5peCcsJ3RoeDExMzgnLCdy YWlkZXJzJywnZm9yZXZlcicsJ3BlYWNoZXMnLCdqYXNtaW5lJywnbWVsaXNzYScsJ2dyZWdv cnknLCdjb3dib3lzJywnZG9scGhpbicsJ2NoYXJsZXMnLCdjdW1zaG90JywnY29sbGVnZScs J2J1bGxkb2cnLCcxMjM0NTY3JywnbmNjMTcwMScsJ2dhbmRhbGYnLCdsZWF0aGVyJywnY3Vt bWluZycsJ2h1bnRpbmcnLCdjaGFybGllJywncmFpbmJvdycsJ2Fzc2hvbGUnLCdiaWdjb2Nr JywnZnVja3lvdScsJ2plc3NpY2EnLCdwYW50aWVzJywnam9obnNvbicsJ25hdWdodHknLCdi cmFuZG9uJywnYW50aG9ueScsJ3dpbGxpYW0nLCdmZXJyYXJpJywnY2hpY2tlbicsJ2hlYXRo ZXInLCdjaGljYWdvJywndm95YWdlcicsJ3lhbmtlZXMnLCdyYW5nZXJzJywncGFja2Vycycs J25ld3lvcmsnLCd0cm91YmxlJywnYmlndGl0cycsJ3dpbnN0b24nLCd0aHVuZGVyJywnd2Vs Y29tZScsJ2JpdGNoZXMnLCd3YXJyaW9yJywncGFudGhlcicsJ2Jyb25jb3MnLCdyaWNoYXJk JywnODY3NTMwOScsJ3ByaXZhdGUnLCd6eGN2Ym5tJywnbmlwcGxlcycsJ2Jsb25kZXMnLCdm aXNoaW5nJywnbWF0dGhldycsJ2hvb3RlcnMnLCdwYXRyaWNrJywnZnJlZWRvbScsJ2Z1Y2tp bmcnLCdleHRyZW1lJywnYmxvd2pvYicsJ2NhcHRhaW4nLCdiaWdkaWNrJywnYWJncnR5dScs J2NoZXN0ZXInLCdtb25zdGVyJywnbWF4d2VsbCcsJ2Fyc2VuYWwnLCdjcnlzdGFsJywncmVi ZWNjYScsJ3B1c3NpZXMnLCdmbG9yaWRhJywncGhhbnRvbScsJ3Njb290ZXInLCdzdWNjZXNz J107DQoJc21kX3Byb2dfY29tbW9uX3B3WzhdID0gWydmaXJlYmlyZCcsJ3Bhc3N3b3JkJywn MTIzNDU2NzgnLCdzdGVlbGVycycsJ21vdW50YWluJywnY29tcHV0ZXInLCdiYXNlYmFsbCcs J3h4eHh4eHh4JywnZm9vdGJhbGwnLCdxd2VydHl1aScsJ2plbm5pZmVyJywnZGFuaWVsbGUn LCdzdW5zaGluZScsJ3N0YXJ3YXJzJywnd2hhdGV2ZXInLCduaWNob2xhcycsJ3N3aW1taW5n JywndHJ1c3RubzEnLCdtaWRuaWdodCcsJ3ByaW5jZXNzJywnc3RhcnRyZWsnLCdtZXJjZWRl cycsJ3N1cGVybWFuJywnYmlnZGFkZHknLCdtYXZlcmljaycsJ2VpbnN0ZWluJywnZG9scGhp bnMnLCdoYXJkY29yZScsJ3JlZHdpbmdzJywnY29jYWNvbGEnLCdtaWNoZWxsZScsJ3ZpY3Rv cmlhJywnY29ydmV0dGUnLCdidXR0aGVhZCcsJ21hcmxib3JvJywnc3Jpbml2YXMnLCdpbnRl cm5ldCcsJ3JlZHNraW5zJywnMTExMTExMTEnLCdhY2Nlc3MxNCcsJ3J1c2gyMTEyJywnc2Nv cnBpb24nLCdpbG92ZXlvdScsJ3NhbWFudGhhJywnbWlzdHJlc3MnXTsNCg0KCS8vIENoZWNr IHB3IGFnYWluc3QgY29tbW9uIHBhc3N3b3JkcyBvZiB0aGF0IGxlbmd0aCB0byBzZWUgaWYg aXQncyBpbiB0b3AgNTAwDQoJaWYgKHNpemUgPiAyICYmIHNpemUgPCA5KSB7DQoJCXZhciB3 aWR0aCA9IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXS5sZW5ndGg7DQoJCWZvciAodmFyIGlk eD0wOyBpZHggPCB3aWR0aDsgaWR4KyspIHsNCgkJCWlmIChwdy50b0xvd2VyQ2FzZSgpID09 IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXVtpZHhdKSB7DQoJCQkJcmV0dXJuIC0xOw0KCQkJ fQ0KCQl9DQoJfQ0KDQoJLy8gQ2FsY3VsYXRpb25zIHBlciBzZWNvbmQuIFRlbiBtaWxsaW9u IGlzIHJvdWdobHkgdGhlIG51bWJlciBhIGRlY2VudCBQQyBjb3VsZCBtYW5hZ2UgdW5pbmhp Yml0ZWQgaW4gMjAxMC4NCgkvLyBBdXRvbWF0aWNhbGx5IGRvdWJsZWQgZXZlcnkgMTggbW9u dGhzIGFjY29yZGluZyB0byBNb29yZSdzIGxhdywgYW1vcnRpc2VkIGJ5IG1vbnRoDQoJdmFy IGNhbGNzUGVyU2VjID0gMTAwMDAwMDA7DQoJdmFyIGR0ID0gbmV3IERhdGUoKTsNCgl2YXIg YmFzZVllYXIgPSAnMjAxMCc7DQoJdmFyIHRoaXNZZWFyID0gZHQuZ2V0RnVsbFllYXIoKTsN Cgl2YXIgdGhpc01vbnRoID0gZHQuZ2V0TW9udGgoKTsgLy8gMC0xMQ0KCXZhciBtb250aHNT aW5jZUJhc2UgPSAoKHRoaXNZZWFyIC0gYmFzZVllYXIpICogMTIpICsgdGhpc01vbnRoOw0K CXZhciBtb29yZVBlcmlvZHMgPSBNYXRoLmZsb29yKG1vbnRoc1NpbmNlQmFzZSAvIDE4KSAr IDE7DQoJY2FsY3NQZXJTZWMgKj0gbW9vcmVQZXJpb2RzOw0KCXZhciBpbmNyZW1lbnRQZXJN b250aCA9IGNhbGNzUGVyU2VjIC8gMTg7IC8vIEhvdyBtYW55IGNhbGNzIGl0IGdvZXMgdXAg YnkgaW4gdGhpcyBNb29yZSBwZXJpb2QsIHBlciBtb250aA0KCWNhbGNzUGVyU2VjICs9IChp bmNyZW1lbnRQZXJNb250aCAqIChtb250aHNTaW5jZUJhc2UlMTgpKTsNCg0KCS8vIEtlZXAg dHJhY2sgb2YgaG93IG1hbnkgY2hhcmFjdGVyIHNldHMgYXJlIHVzZWQNCgl2YXIgcG9zc0No YXJzID0gMDsNCgkvLyBMb3dlcmNhc2UNCglpZiAocHcubWF0Y2goL1thLXpdLykpIHsgcG9z c0NoYXJzICs9IDI2OyB9DQoJLy8gVXBwZXJjYXNlDQoJaWYgKHB3Lm1hdGNoKC9bQS1aXS8p KSB7IHBvc3NDaGFycyArPSAyNjsgfQ0KCS8vIE51bWJlcnMNCglpZiAocHcubWF0Y2goL1xk Ky8pKSB7IHBvc3NDaGFycyArPSAxMDsgfQ0KCS8vIFN5bWJvbHMNCglpZiAocHcubWF0Y2go L1shLEAsIyzCoywkLOKCrCzCpSwlLF4sJiwqLCssPSw/LF8sfixcLSwoLCksPCw+LFwsLFwu LFxbLFxdLFx7LFx9LFx8LFw6LFw7LFwnLFwiLFxgLFwvLFxcXCxcwqxdLykgKSB7cG9zc0No YXJzICs9IDM2fTsNCg0KCS8vIFdvcmsgb3V0IHRoZSBudW1iZXIgb2YgcG9zc2libGUgY29t YmluYXRpb25zOiBwb3NzaWJsZSBjaGFyYWN0ZXJzIHRvIHRoZSBwb3dlciBvZiB0aGUgcGFz c3dvcmQgbGVuZ3RoDQoJdmFyIHBvc3NDb21ib3MgPSBNYXRoLnBvdyhwb3NzQ2hhcnMsIHNp emUpOw0KDQoJLy8gRGl2aWRlIHRoZSBudW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25z IGJ5IHRoZSBjYWxjdWxhdGlvbnMgYSBQQyBjYW4gZG8gcGVyIHNlY29uZA0KCXZhciBjcmFj a1RpbWVJblNlY3MgPSBwb3NzQ29tYm9zIC8gY2FsY3NQZXJTZWM7DQoNCgkvLyBTZXQgdXAg YW4gYXJyYXkgb2YgcGVyaW9kcyB3aXRoIHRoZWlyIGxlbmd0aHMgaW4gc2Vjb25kcw0KCXZh ciBzbWRfcGVyaW9kcyA9IG5ldyBBcnJheSgpOw0KCXNtZF9wZXJpb2RzWyd0X21pbiddID0g NjA7DQoJc21kX3BlcmlvZHNbJ3RfaHInXSA9IHNtZF9wZXJpb2RzWyd0X21pbiddICogNjA7 DQoJc21kX3BlcmlvZHNbJ3RfZGF5J10gPSBzbWRfcGVyaW9kc1sndF9ociddICogMjQ7DQoJ c21kX3BlcmlvZHNbJ3RfeXInXSA9IHNtZF9wZXJpb2RzWyd0X2RheSddICogMzY1LjI1Ow0K CXNtZF9wZXJpb2RzWyd0X3Rob195J10gPSBzbWRfcGVyaW9kc1sndF95ciddICogMTAwMDsN CglzbWRfcGVyaW9kc1sndF9taWxfeSddID0gc21kX3BlcmlvZHNbJ3RfdGhvX3knXSAqIDEw MDA7DQoJc21kX3BlcmlvZHNbJ3RfYmlsX3knXSA9IHNtZF9wZXJpb2RzWyd0X21pbF95J10g KiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3RyaV95J10gPSBzbWRfcGVyaW9kc1sndF9iaWxf eSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9xdWFfeSddID0gc21kX3BlcmlvZHNbJ3Rf dHJpX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfcXVpX3knXSA9IHNtZF9wZXJpb2Rz Wyd0X3F1YV95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NleF95J10gPSBzbWRfcGVy aW9kc1sndF9xdWlfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9zZXBfeSddID0gc21k X3BlcmlvZHNbJ3Rfc2V4X3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3Rfb2N0X3knXSA9 IHNtZF9wZXJpb2RzWyd0X3NlcF95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X25vbl95 J10gPSBzbWRfcGVyaW9kc1sndF9vY3RfeSddICogMTAwMDsNCg0KCS8vIFBlcmlvZCB0eXBl IGlzICdzZWNvbmRzJyBieSBkZWZhdWx0DQoJdmFyIHBlcmlvZFR5cGUgPSAndF9zZWMnOw0K CXZhciBzdHJlbmd0aCA9ICcnOw0KDQoJLy8gSWYgaXQgd2lsbCB0YWtlIGxlc3MgdGhhbiBh IHNlY29uZCB0byBjcmFjayB0aGUgcGFzc3dvcmQsIHNob3cgZXhhY3RseSBob3cgbG9uZw0K CWlmIChjcmFja1RpbWVJblNlY3MgPCAxKSB7DQoJCXN0cmVuZ3RoID0gY3JhY2tUaW1lSW5T ZWNzLnRvRml4ZWQocHJlY2lzaW9uKSArIHNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNzJyk7 DQoJfSBlbHNlIHsNCgkJLy8gT3RoZXJ3aXNlIHNob3cgYSByb3VuZGVkLWRvd24gbnVtYmVy DQoJCS8vIEFkZHMgdGhlIHBsdXJhbCBvbnRvIGFueXRoaW5nIGJlZm9yZSBhIHRob3VzYW5k IHllYXJzDQoJCXZhciBpbnRvVGhvdXNhbmRzID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bs dXJhbCcpOw0KDQoJCS8vIEFkZHMgdGhlICdBYm91dCcgdG8gYW55dGhpbmcgYWZ0ZXIgc2Vj b25kcw0KCQl2YXIgaW50b01pbnV0ZXMgPSAnJzsNCg0KCQkvLyBSb3VuZCBkb3duIHRoZSB0 aW1lDQoJCXZhciBuZXdUaW1lID0gTWF0aC5mbG9vcihjcmFja1RpbWVJblNlY3MpOw0KDQoJ CS8vIEdvIHRocm91Z2ggZGlmZmVyZW50IHBlcmlvZCBsZW5ndGhzDQoJCWZvciAodmFyIGpk eCBpbiBzbWRfcGVyaW9kcykgew0KCQkJLy8gU3RvcCB3aGVuIHRoZSByaWdodCBwZXJpb2Qg aXMgcmVhY2hlZA0KCQkJaWYgKGNyYWNrVGltZUluU2VjcyA8IHNtZF9wZXJpb2RzW2pkeF0p IHsgYnJlYWs7IH0NCgkJCWVsc2Ugew0KCQkJCWlmIChqZHggPT0gInRfdGhvX3kiKSB7IGlu dG9UaG91c2FuZHMgPSAnJzsgfQ0KCQkJCWlmIChqZHggPT0gInRfbWluIikgeyBpbnRvTWlu dXRlcyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhYm91dCcpOyB9DQoJCQkJbmV3VGltZSA9 IE1hdGguZmxvb3IoY3JhY2tUaW1lSW5TZWNzIC8gc21kX3BlcmlvZHNbamR4XSk7DQoJCQkJ cGVyaW9kVHlwZSA9IGpkeDsNCgkJCX0NCgkJfQ0KDQoJCS8vIElmIHNpbmd1bGFyDQoJCWlm IChuZXdUaW1lID09IDEpIHsNCgkJCXN0cmVuZ3RoID0gc21kX3Byb2dub3N0aWNzX2dUeHQo J2Fib3V0JykgKyAnMSAnICsgc21kX3Byb2dub3N0aWNzX2dUeHQocGVyaW9kVHlwZSk7DQoJ CX0gZWxzZSB7DQoJCQkvLyBDb252ZXJ0IG5ld1RpbWUgdG8gc3RyaW5nDQoJCQluZXdUaW1l ICs9ICcnOw0KDQoJCQkvLyBTcGxpdCB3aXRoIGNvbW1hcyBldmVyeSB0aHJlZSBkaWdpdHMN CgkJCXZhciByZWdleCA9IC8oXGQrKShcZHszfSkvOw0KDQoJCQl3aGlsZSAocmVnZXgudGVz dChuZXdUaW1lKSkgew0KCQkJCW5ld1RpbWUgPSBuZXdUaW1lLnJlcGxhY2UocmVnZXgsICck MScgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnZGlnaXRzZXAnKSArICckMicpOw0KCQkJfQ0K DQoJCQkvLyBDb21iaW5lIHdpdGggJ2Fib3V0JyBpZiBuZWVkZWQsIHRoZSB0aW1lIGl0IHdp bGwgdGFrZSwgdGhlIHBlcmlvZCB0eXBlLCBhbmQgdGhlICdzJyBpZiBuZWVkZWQNCgkJCXN0 cmVuZ3RoID0gaW50b01pbnV0ZXMgKyBuZXdUaW1lICsgIiAiICsgc21kX3Byb2dub3N0aWNz X2dUeHQocGVyaW9kVHlwZSkgKyBpbnRvVGhvdXNhbmRzOw0KCQl9DQoJfQ0KDQoJcmV0dXJu IHN0cmVuZ3RoOw0KfQ0KDQpmdW5jdGlvbiBwYXNzd29yZENoZWNrKHRoYXQsIGUpIHsNCglp ZiAoZS5rZXlDb2RlID09IDI3IHx8IGUuY2hhckNvZGUgPT0gMjcpIHsNCgkJalF1ZXJ5KHRo YXQpLnZhbCgiIik7DQoJfQ0KDQoJdmFyIHBhc3N3b3JkID0galF1ZXJ5KHRoYXQpLnZhbCgp Ow0KDQoJaWYgKHBhc3N3b3JkICE9ICIiKSB7DQoJCXZhciBzdHJlbmd0aCA9IHNtZF9wcm9n X2Nocm9ub1N0cmVuZ3RoKHBhc3N3b3JkKTsNCg0KCQkvL1RPRE86IGdUeHQoKQ0KCQlpZiAo c3RyZW5ndGggPT0gLTEpIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21ldGVyIikuaHRtbChz bWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfcHJlYW1ibGUnKSArICcgPGRpdiBjbGFzcz0ic21k X3Byb2dfcGFzc19zdHJlbmd0aCI+JyArIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwd19jb21t b24nKSArICc8L2Rpdj4gJysgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3X3Bvc3RhbWJsZScp KS5mYWRlSW4oNTAwKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21ldGVy IikuaHRtbChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfdGFrZScpICsgJyA8ZGl2IGNsYXNz PSJzbWRfcHJvZ19wYXNzX3N0cmVuZ3RoIj4nICsgc3RyZW5ndGggKyAnPC9kaXY+ICcgKyBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfY3JhY2snKSkuZmFkZUluKDUwMCk7DQoJCX0NCgl9 IGVsc2Ugew0KCQlqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUoKTsNCgl9DQp9DQpq UXVlcnkoZnVuY3Rpb24oKSB7DQoJdmFyIHNtZF9wcm9nX21ldGVyID0gJzxkaXYgaWQ9InNt ZF9wcm9nX21ldGVyIj48L2Rpdj4nOw0KCWpRdWVyeSgiI2NoYW5nZV9wYXNzd29yZCIpLmFw cGVuZChzbWRfcHJvZ19tZXRlcik7DQoJalF1ZXJ5KCIjc21kX3Byb2dfbWV0ZXIiKS5oaWRl KCk7DQoJalF1ZXJ5KCIjbmV3X3Bhc3MiKS5rZXlkb3duKGZ1bmN0aW9uKGUpIHsNCgkJaWYg KGUua2V5Q29kZSA9PSAxMyB8fCBlLmNoYXJDb2RlID09IDEzKSB7DQoJCQlyZXR1cm4gZmFs c2U7DQoJCX0NCgl9KTsNCglqUXVlcnkoIiNuZXdfcGFzcyIpLmtleXVwKGZ1bmN0aW9uKGUp ew0KCQlwYXNzd29yZENoZWNrKHRoaXMsIGUpOw0KCX0pOw0KfSk7DQovL11dPg0KPC9zY3Jp cHQ+DQpFT1M7DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy8gV2ViIHBhZ2UJCSA6IGh0dHA6Ly9j b2RlLmdvb2dsZS5jb20vcC9waHByb3RlY3Rvcg0KLy8gQXV0b3IJCQkJOiBIdWdvIFNvdXNh IAkJYWRhbWFzdG9yNjY2QGdtYWlsLmNvbQ0KLy8gRGF0ZQkJCQkgOiAyMDEwLTAzLTI1DQov LyBWZXJzaW9uCQkJOiAwLjMuMS4xDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmNsYXNzIHNtZF9wcm9n X1BoUHJvdGVjdG9yIHsNCgl2YXIgJFNIT1dfRVJST1JTOw0KDQoJcHVibGljIGZ1bmN0aW9u IHNtZF9wcm9nX1BoUHJvdGVjdG9yKCRzaG93X2Vycm9ycykgew0KCQkkdGhpcy0+U0hPV19F UlJPUlM9JHNob3dfZXJyb3JzOw0KCQlpZiAoJHRoaXMtPlNIT1dfRVJST1JTKSB7DQoJCQll cnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFSU0UpOwkgLy9TaG93 IGVycm9ycw0KCQkJaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAiMSIpOwkvL2Rpc3BsYXkg ZXJyb3JzDQoJCX0gZWxzZSB7DQoJCQlpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICIwIik7 IC8vZGlzcGxheSBlcnJvcnMNCgkJCWluaV9zZXQoJ2xvZ19lcnJvcnMnLCAiMSIpOwkvL2xv Z19lcnJvcnMNCgkJfQ0KCX0NCg0KCS8qDQoJKiBNYWluIGZ1bmN0aW9uIHRvIGJlIGNhbGxl ZCBpbiBhIGluZGV4IHBhZ2UgdGhhdCByZWRpcmVjdHMgdG8gb3RoZXIgcGFnZXMNCgkqDQoJ Ki8NCglwdWJsaWMgZnVuY3Rpb24gaXNNYWxpY2lvdXMoKSB7DQoJCSRzcWxpID0gZmFsc2U7 DQoNCgkJJG51bV9iYWRfd29yZHMxID0gJHRoaXMtPkNoZWNrR2V0KCk7DQoJCSRudW1fYmFk X3dvcmRzMiA9ICR0aGlzLT5DaGVja1Bvc3QoKTsNCg0KCQlpZiAoJG51bV9iYWRfd29yZHMx ID4gMCkgew0KCQkJJHNxbGkgPSB0cnVlOw0KCQl9DQoNCgkJaWYgKCRudW1fYmFkX3dvcmRz MiA+IDApIHsNCgkJCSRzcWxpID0gdHJ1ZTsNCgkJfQ0KDQoJCXJldHVybiAkc3FsaTsNCgl9 DQoNCgkvL2NoZWNrIGZvciBzcWwgaW5qZWN0aW9uIGFuZCBYU1MgaW4gUG9zdCB2YXJpYWJs ZXMNCglwcml2YXRlIGZ1bmN0aW9uIENoZWNrUG9zdCgpIHsNCgkJJG51bV9iYWRfd29yZHMg PSAwOw0KDQoJCWZvcmVhY2goJF9QT1NUIGFzICRjYW1wbyA9PiAkaW5wdXQpIHsNCgkJCSRf UE9TVFskY2FtcG9dPSBkb0FycmF5KCRfUE9TVFskY2FtcG9dLCAnaHRtbGVudGl0aWVzJyk7 IC8vIFhTUyBQUk9URUNUSU9ODQoJCQkkbnVtX2JhZF93b3JkcyA9ICRudW1fYmFkX3dvcmRz ICsgJHRoaXMtPndvcmRFeGlzdHMoJGlucHV0KTsgLy9TUUwgSU5KRUNUSU9ODQoJCX0NCg0K CQlyZXR1cm4gJG51bV9iYWRfd29yZHM7DQoJfQ0KDQoJLy9jaGVjayBmb3Igc3FsIGluamVj dGlvbiBhbmQgWFNTIGluIEdFVCB2YXJpYWJsZXMNCglwcml2YXRlIGZ1bmN0aW9uIENoZWNr R2V0KCkgew0KCQkkbnVtX2JhZF93b3JkcyA9IDA7DQoNCgkJZm9yZWFjaCgkX0dFVCBhcyAk Y2FtcG8gPT4gJGlucHV0KXsNCgkJCSRfR0VUWyRjYW1wb109IGRvQXJyYXkoJF9HRVRbJGNh bXBvXSwgJ2h0bWxlbnRpdGllcycpOyAvLyBYU1MgUFJPVEVDVElPTg0KDQoJCQlpZigkdGhp cy0+aXNJZEluamVjdGlvbigkY2FtcG8sJGlucHV0KSl7IC8vU1FMIElEIElOSkVDVElPTg0K CQkJCSRudW1fYmFkX3dvcmRzID0JJG51bV9iYWRfd29yZHMgKyAwLjU7DQoJCQl9DQoNCgkJ CSRudW1fYmFkX3dvcmRzID0gJG51bV9iYWRfd29yZHMgKyAkdGhpcy0+d29yZEV4aXN0cygk aW5wdXQpOyAvL1NRTCBJTkpFQ1RJT04NCgkJfQ0KDQoJCXJldHVybiAkbnVtX2JhZF93b3Jk czsNCgl9DQoNCgkvKioNCgkqCXJldHVybiB0cnVlIGlmIGluamVjdGlvbiBzcWwgd29yZCBp cyBmb3VuZC4NCgkqCVRoZSBpbnB1dCBpcyB0ZXN0ZWQgaWYgaXMgZXF1YWwgdG8gYSBzcWwg aW5qZWN0aW9uIHBhdHRlcm4NCgkqCVxiW15hLXpdKj9kcm9wW15hLXpdKj9cYg0KCSoJIGh0 dHA6Ly93d3cucGFnZWNvbHVtbi5jb20vdG9vbC9yZWd0ZXN0Lmh0bQ0KCSoqLy8qCQkgIi8q IiwiKyIJCQkJKi8NCglwcml2YXRlIGZ1bmN0aW9uIHdvcmRFeGlzdHMoJGlucHV0KSB7DQoJ CSRudW1fYmFkX3dvcmRzID0gMDsNCg0KCQkvKg0KCQkgV09SRCBBRlRFUg0KCQkqLw0KCQkk YmFkZGVsaW0xID0gIlteYS16XSoiOwkvL3RoZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIg dG8gImIiIGFueXRoaW5nIGVsc2UgaXMgY29uc2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJ CSRiYWRkZWxpbTIgPSAiW15hLXpdKyI7DQoJCSRiYWR3b3Jkcz0gYXJyYXkoInVuaW9uIiwg InNlbGVjdCIsICJzaG93IiwgImluc2VydCIsICJ1cGRhdGUiLCAiZGVsZXRlIiwgImRyb3Ai LCAidHJ1bmNhdGUiLCAiY3JlYXRlIiwgImxvYWRfZmlsZSIsICJleGVjIiwgIiMiLCAiLS0i KTsNCgkJLy8iLyoiDQoJCWZvcmVhY2goJGJhZHdvcmRzIGFzICRiYWR3b3JkKSB7DQoJCQkk ZXhwcmVzc2lvbiA9ICIvIi4kYmFkZGVsaW0xLnN0cnRvbG93ZXIoJGJhZHdvcmQpLiRiYWRk ZWxpbTIuIi8iOw0KCQkJaWYgKHByZWdfbWF0Y2ggKCRleHByZXNzaW9uLCBzdHJ0b2xvd2Vy KCRpbnB1dCkpKSB7DQovL2RtcCgnKldBKicsJGJhZHdvcmQsICRpbnB1dCk7DQoJCQkJLy9k aWUoInNxbCBpbmplY3Rpb24hIik7DQoJCQkJJG51bV9iYWRfd29yZHMrKzsNCgkJCX0NCgkJ fQ0KDQoJCS8qDQoJCUJFRk9SRSBXT1JEDQoJCSovDQoJCSRiYWRkZWxpbTEgPSAiW15hLXpd KyI7CS8vdGhlIGRlbGltIHNob3VsZCBiZSBmcm9tICJhIiB0byAiYiIgYW55dGhpbmcgZWxz ZSBpcyBjb25zaWRlcmVkIHNxbCBpbmplY3Rpb24gOikNCgkJJGJhZGRlbGltMiA9ICJbXmEt el0qIjsNCgkJJGJhZHdvcmRzPSBhcnJheSgiQEB2ZXJzaW9uIiwgIkBAZGF0YWRpciIsICJ1 c2VyIiwgInZlcnNpb24iKTsNCg0KCQlmb3JlYWNoKCRiYWR3b3JkcyBhcyAkYmFkd29yZCkg ew0KCQkJJGV4cHJlc3Npb24gPSAiLyIuJGJhZGRlbGltMS5zdHJ0b2xvd2VyKCRiYWR3b3Jk KS4kYmFkZGVsaW0yLiIvIjsNCgkJCWlmIChwcmVnX21hdGNoICgkZXhwcmVzc2lvbiwgc3Ry dG9sb3dlcigkaW5wdXQpKSkgew0KLy9kbXAoJypCVyonLCRiYWR3b3JkLCAkaW5wdXQpOw0K CQkJCS8vZGllKCJzcWwgaW5qZWN0aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJ CQl9DQoJCX0NCg0KCQkvKg0KCQlCRUZPUkUgV09SRCBBRlRFUg0KCQkqLw0KCQkkYmFkZGVs aW0xID0gIlteYS16XSsiOwkvL3RoZSBkZWxpbSBzaG91bGQgYmUgZnJvbSAiYSIgdG8gImIi IGFueXRoaW5nIGVsc2UgaXMgY29uc2lkZXJlZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRiYWRk ZWxpbTIgPSAiW15hLXpdKyI7DQoJCSRiYWR3b3Jkcz0gYXJyYXkoImJlbmNobWFyayIsICIt LSIsICJ2YXJjaGFyIiwgImNvbnZlcnQiLCAiY2hhciIsICJsaW1pdCIsICJpbmZvcm1hdGlv bl9zY2hlbWEiLCJ0YWJsZV9uYW1lIiwgImZyb20iLCAid2hlcmUiLCAib3JkZXIiKTsNCg0K CQlmb3JlYWNoKCRiYWR3b3JkcyBhcyAkYmFkd29yZCkgew0KCQkJJGV4cHJlc3Npb24gPSAi LyIuJGJhZGRlbGltMS5zdHJ0b2xvd2VyKCRiYWR3b3JkKS4kYmFkZGVsaW0yLiIvIjsNCgkJ CWlmIChwcmVnX21hdGNoICgkZXhwcmVzc2lvbiwgc3RydG9sb3dlcigkaW5wdXQpKSkgew0K Ly9kbXAoJypCLVctQSonLCRiYWR3b3JkLCAkaW5wdXQpOw0KCQkJCS8vZGllKCJzcWwgaW5q ZWN0aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJCQl9DQoJCX0NCi8vZG1wKCRu dW1fYmFkX3dvcmRzKTsNCgkJcmV0dXJuICRudW1fYmFkX3dvcmRzOw0KCX0NCg0KCS8qKg0K CSoJcmV0dXJuIHRydWUgaWYgYW4gSUQgaXMgbm90IHJlYWxseSBhbiBJRA0KCSoNCgkqKi8N Cglwcml2YXRlIGZ1bmN0aW9uIGlzSURJbmplY3Rpb24oJGNhbXBvLCRpbnB1dCkgew0KCQkk cmVnPSIvXmlkLyI7DQoNCgkJaWYocHJlZ19tYXRjaCgkcmVnLCAkY2FtcG8pKSB7DQoJCQlp ZighJHRoaXMtPnN0cmluZ0lzTnVtYmVyTm90WmVybygkaW5wdXQpKSB7DQoJCQkJcmV0dXJu IHRydWU7CSAvLyBpZiBpcyBJRCBhbmQgTk9UIElOVEVHRVIgb3IgTlVMTCAtPiBTUUwgSU5K RUNUSU9OISENCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkq CXJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSBudW1iZXIgKGRpZmZlcmVudCBmcm9t IDAsIHRoZSBpZCBjb3VsZCBub3QgYmUgemVybyEpDQoJKiAgVE9ETzogY2hlY2sgaWYgKmFs bCogY2hhcnMgYXJlIHplcm8gYW5kIGZhaWwsIGUuZy4gaWQ9MDAwMA0KCSoqLw0KCXByaXZh dGUgZnVuY3Rpb24gc3RyaW5nSXNOdW1iZXJOb3RaZXJvKCAkc3RyaW5nICkgew0KCQlpZiAo ZW1wdHkoJHN0cmluZykpIHsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQlyZXR1cm4gY3R5 cGVfZGlnaXQoJHN0cmluZyk7DQoJfQ0KfSAvL2VuZCBjbGFzcw0KDQovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCi8vIFBsdWdpbi1zcGVjaWZpYyByZXBsYWNlbWVudCBzdHJpbmdz IC0gbG9jYWxpc2UgYXMgcmVxdWlyZWQNCi8vIFRPRE86IFRleHRwYWNrIHRoaXMNCmZ1bmN0 aW9uIHNtZF9wcm9nbm9zdGljc19nVHh0KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsNCgln bG9iYWwgJHByZWZzLCAkc21kX3Byb2dub3N0aWNzX2V2ZW50Ow0KCSRsYW5nID0gYXJyYXko DQoJCSdhY2tlZCcgPT4gJ0FsYXJtcyBhY2tub3dsZWRnZWQuJywNCgkJJ2FsYXJtX2ZyZXEn ID0+ICdBbGFybSBvbiBkZXRlY3Rpb24gYW5kIGV2ZXJ5OiAnLA0KCQknYW5kJyA9PiAnIGFu ZCAnLA0KCQknYXV0aF91c2VycycgPT4gJ1Jlc3RyaWN0IHByb2dub3N0aWMgY29uZmlnIHRv OiAnLA0KCQknYXZhaWxfYnJhbmNoJyA9PiAnQW4gPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0 ZXJuLmNvbS9kb3dubG9hZCI+dXBkYXRlIHRvIHRoaXMgVGV4dHBhdHRlcm4gc2VyaWVzIGlz IGF2YWlsYWJsZTwvYT4nLA0KCQknYXZhaWxfdHhwJyA9PiAnQSA8YSBocmVmPSJodHRwOi8v dGV4dHBhdHRlcm4uY29tL2Rvd25sb2FkIj5uZXcgdmVyc2lvbiBvZiBUZXh0cGF0dGVybiBp cyBhdmFpbGFibGU8L2E+JywNCgkJJ2Jsb2NrJyA9PiAnQmxvY2snLA0KCQknY2hfYWRkJyA9 PiAnQWRkaXRpb25zJywNCgkJJ2NoX2RlbCcgPT4gJ0RlbGV0aW9ucycsDQoJCSdjaF9tb2Qn ID0+ICdNb2RpZmljYXRpb25zJywNCgkJJ2NoZWNrX2JldHdlZW4nID0+ICdDaGVjayBmaWxl cyBiZXR3ZWVuOiAnLA0KCQknY2hlY2tfZm9yJyA9PiAnQ2hlY2sgZmlsZXMgZm9yOiAnLA0K CQknY2hlY2tfZnJlcScgPT4gJ0NoZWNrIGZpbGVzIChhdCBtb3N0KSBldmVyeTogJywNCgkJ J2NoZWNrX3F0eScgPT4gJ0NoZWNrIHRoaXMgbWFueSBmaWxlcyBlYWNoIHRpbWU6ICcsDQoJ CSdjaGVja193aGVyZScgPT4gJ0NoZWNrIGZpbGVzIG9uIHB1YmxpYyBzaWRlIGNsaWNrczog JywNCgkJJ2NzaScgPT4gJ0dhdGhlciBmb3JlbnNpY3MgYW5kIHNlbmQgZm9yIGFuYWx5c2lz JywNCgkJJ2NzaV9zZW50JyA9PiAnIEZvcmVuc2ljcyBkYXRhIHNlbnQnLA0KCQknY3N2JyA9 PiAnKGNvbW1hLXNlcGFyYXRlZCknLA0KCQknY3Vycm1vbicgPT4gJ1lvdSBhcmUgY3VycmVu dGx5IG1vbml0b3Jpbmcge2N1cnJ9IG91dCBvZiB7b3V0b2Z9IGF2YWlsYWJsZSBmaWxlcy4n LA0KCQknZG9jcm9vdF9maWxlcycgPT4gJ0NvbnNpZGVyIG1vdmluZyB0aGUgImZpbGVzIiBm b2xkZXIgb3V0c2lkZSBvZiB5b3VyIHNpdGUgcm9vdCBmb2xkZXIuIFlvdSBjYW4gZG8gdGhp cyB2aWEgdGhlICJBZG1pbiA+IFByZWZzID4gQWR2YW5jZWQgPiBGaWxlIGRpcmVjdG9yeSBw YXRoIiBzZXR0aW5nLicsDQoJCSdkb2Nyb290X3Byb2dub3N0aWNzJyA9PiAnUGxlYXNlIGNo YW5nZSB0aGUgIlByb2dub3N0aWNzIGZvbGRlciIgc2V0dGluZyB0byBhIGRpcmVjdG9yeSBv dXRzaWRlIHlvdXIgc2l0ZSByb290IGZvbGRlci4nLA0KCQknZG9jcm9vdF90bXAnID0+ICdD b25zaWRlciBtb3ZpbmcgdGhlICJ0bXAiIGZvbGRlciBvdXRzaWRlIG9mIHlvdXIgc2l0ZSBy b290IGZvbGRlci4gWW91IGNhbiBkbyB0aGlzIHZpYSB0aGUgIkFkbWluID4gUHJlZnMgPiBB ZHZhbmNlZCA+IFRlbXBvcmFyeSBkaXJlY3RvcnkgcGF0aCIgc2V0dGluZy4nLA0KCQknZXhj bHVkaXInID0+ICdFeGNsdWRlIGZvbGRlcnM6ICcsDQoJCSdmaWxlc191cGRhdGVkJyA9PiAn RmlsZSBsaXN0IHVwZGF0ZWQnLA0KCQknaGVscF9saW5rJyA9PiAnKDxhIGhyZWY9IntsaW5r fSI+SGVscDwvYT4pJywNCgkJJ2htcycgPT4gJyhocnM6bWluczpzZWNzKScsDQoJCSdpZ25v cmVzJyA9PiAnSWdub3JlIGZpbGVzOiAnLA0KCQknbGJsX2NoYW5nZWQnID0+ICdDaGFuZ2Vk JywNCgkJJ2xibF9oYXNobW9kJyA9PiAnQ09NUFJPTUlTRUQnLA0KCQknbGJsX21pc3Npbmcn ID0+ICdNaXNzaW5nJywNCgkJJ2xibF9hZGRlZCcgPT4gJ0FkZGVkIChub3QgbW9uaXRvcmVk KScsDQoJCSdsaXN0bG9jJyA9PiAnRmlsZSBsb2NhdGlvbnM6ICcsDQoJCSdtYWlsdG8nID0+ ICdTZW5kIGUtbWFpbCB0bzogJywNCgkJJ21haWx0b19jc2knID0+ICdTZW5kIGZvcmVuc2lj cyB0bzogJywNCgkJJ21vbmZpbGVzX2V4cGxhaW4nID0+ICdTZWxlY3QgYWxsIHRoZSBmaWxl cyB5b3Ugd2lzaCB0byBtb25pdG9yIGFuZCBjbGljayBTYXZlLiBBbHRlcmluZyB0aGlzIGxp c3Qgd2lsbCBhdXRvbWF0aWNhbGx5IGFja25vd2xlZGdlIGFueSBvdXRzdGFuZGluZyBhbGFy bXMgYWdhaW5zdCB0aGUgc2VsZWN0ZWQgZmlsZXMuJywNCgkJJ25vX2FsYXJtcycgPT4gJ05v IGFsYXJtcyB0byBhY2tub3dsZWRnZSBhdCBwcmVzZW50LicsDQoJCSdub19maWxlcycgPT4g J05vIGZpbGVzIHRvIGxpc3QuIENoZWNrIHRoZSBwbHVnaW4gc2V0dXAgKGFuZCBTYXZlIGl0 KS4nLA0KCQknbm9fbG9nX2VudHJpZXMnID0+ICdObyBsb2cgYWN0aXZpdHkgYXJvdW5kIHRo ZSB0aW1lIG9mIHRoZSBkaWZmZXJlbmNlcy4nLA0KCQknbm9uZV9zZWxlY3RlZCcgPT4gJ05v IGZpbGVzIHNlbGVjdGVkJywNCgkJJ25vdGlmeV9lbWFpbCcgPT4gJ0UtbWFpbCcsDQoJCSdu b3RpZnlfdHhwJyA9PiAnVFhQIGludGVyZmFjZScsDQoJCSdub3RpZnlfdmlhJyA9PiAnTm90 aWZ5IHZpYTogJywNCgkJJ3ByZWFtYmxlX2FkZGVkJyA9PiAnVGhlc2UgZmlsZXMgaGF2ZSBi ZWVuIGFkZGVkOiAnLA0KCQkncHJlYW1ibGVfZmlsZXMnID0+ICdGaWxlIGNvbnRlbnRzIGZv bGxvd3M6ICcsDQoJCSdwcmVhbWJsZV9oYXNoZG93bicgPT4gJ1dBUk5JTkchIFRoZSBjaGVj a3N1bXMgZmlsZSBpcyBtaXNzaW5nLicsDQoJCSdwcmVhbWJsZV9oYXNobW9kJyA9PiAnV0FS TklORyEgVGhlIGNoZWNrc3VtcyBmaWxlIGhhcyBiZWVuIGFsdGVyZWQ6ICcsDQoJCSdwcmVh bWJsZV9taXNzJyA9PiAnVGhlc2UgZmlsZXMgYXJlIG1pc3Npbmc6ICcsDQoJCSdwcmVhbWJs ZV9ub2snID0+ICdUaGVzZSBmaWxlcyBkaWZmZXIgZnJvbSB0aGVpciBleHBlY3RlZCBjb250 ZW50OiAnLA0KCQkncHJlYW1ibGVfc3FsX2luamVjdCcgPT4gJ1Bvc3NpYmxlIFNRTCBpbmpl Y3Rpb24gZGV0ZWN0ZWQnLA0KCQkncHJlYW1ibGVfdHhwbG9nJyA9PiAnTG9nIGVudHJpZXMg cHJpb3IgdG8gdGhpcyBkZXRlY3Rpb246ICcsDQoJCSdwcm9nbG9jJyA9PiAnUHJvZ25vc3Rp Y3MgZm9sZGVyOiAnLA0KCQkncHJvZ3BmeCcgPT4gJ1VuaXF1ZSBwcmVmaXg6ICcsDQoJCSdw bmxfYWNrJyA9PiAnQWxhcm1zJywNCgkJJ3BubF9hY2tpdCcgPT4gJ0Fja25vd2xlZGdlJywN CgkJJ3BubF9hZHZpY2UnID0+ICdBZHZpY2UnLA0KCQkncG5sX2NzaScgPT4gJ1NlbmQgRm9y ZW5zaWNzJywNCgkJJ3BubF9maWxlcycgPT4gJ0ZpbGVzJywNCgkJJ3BubF9pZ25vcmUnID0+ ICdJZ25vcmUnLA0KCQkncG5sX3NldHVwJyA9PiAnU2V0dXAnLA0KCQkncG9zdGFtYmxlJyA9 PiAnQWNrbm93bGVkZ2UgYWxhcm1zJywNCgkJJ3JlcV9oZWFkZXJzJyA9PiAnQmxvY2sgcmVx dWVzdCBoZWFkZXJzOiAnLA0KCQkncmVxX25vdF9hbGxvd2VkJyA9PiAnUkVRVUVTVF9NRVRI T0Qgbm90IGFsbG93ZWQ6IHtyZXF9JywNCgkJJ3JoX2RlbCcgPT4gJ0RFTEVURScsDQoJCSdy aF9wdXQnID0+ICdQVVQnLA0KCQkncmhfdHJhY2UnID0+ICdUUkFDRScsDQoJCSd0dGxfYWNr JyA9PiAnUHJvZ25vc3RpYyBhbGFybSBhY2tub3dsZWRnZW1lbnQnLA0KCQkndHRsX2Fkdmlj ZScgPT4gJ1Byb2dub3N0aWMgYWR2aWNlJywNCgkJJ3R0bF9maWxlcycgPT4gJ1Byb2dub3N0 aWMgZmlsZSBtb25pdG9yaW5nJywNCgkJJ3R0bF9maWxlb3B0cycgPT4gJ0ZpbGVzeXN0ZW0g b3B0aW9ucycsDQoJCSd0dGxfbW9ub3B0cycgPT4gJ01vbml0b3Jpbmcgb3B0aW9ucycsDQoJ CSd0dGxfcGx1Z29wdHMnID0+ICdQbHVnaW4gb3B0aW9ucycsDQoJCSd0dGxfcmVhbG9wdHMn ID0+ICdSZWFsdGltZSBvcHRpb25zJywNCgkJJ3R0bF9zZXR1cCcgPT4gJ1Byb2dub3N0aWMg c2V0dXAnLA0KCQknc21kX3Byb2dub3N0aWNzJyA9PiAnUHJvZ25vc3RpY3MnLA0KCQkncnRf aGRyJyA9PiAnSGVhZGVyIHZpb2xhdGlvbnMnLA0KCQkncnRfc3FsJyA9PiAnU1FMIGluamVj dGlvbnMnLA0KCQknc2Vjb25kcycgPT4gJyhzZWNvbmRzKScsDQoJCSdzZW5kX2ZvcmVuc2lj cycgPT4gJ1NlbmQgZm9yZW5zaWNzIGZvcjogJywNCgkJJ3NldHVwX2V4aXN0cycgPT4gJ1Ro ZSBzZXR1cCBkaXJlY3Rvcnkgc3RpbGwgZXhpc3RzLiBQbGVhc2UgZGVsZXRlIGl0LicsDQoJ CSdzaG93X2dyYW50cycgPT4gJ1lvdXIgVFhQIHVzZXIgY2FuIGFjY2VzcyB0aGUgTXlTUUwg cHJpdmlsZWdlcyBpbiB0aGUgREIuIENvbnNpZGVyIGFjY2Vzc2luZyB0aGUgREIgdXNpbmcg YSBsZXNzIHByaXZpbGVnZWQgdXNlci4nLA0KCQknc3FsX2ZpbGVfcHJpdnMnID0+ICdZb3Vy IE15U1FMIHVzZXIgaGFzIEZJTEUgcHJpdmlsZWdlcy4gQ29uc2lkZXIgcmV2b2tpbmcgdGhp cyByaWdodCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkuJywNCgkJJ3NxbF9pbmplY3Qn ID0+ICdQcm90ZWN0IGFnYWluc3QgU1FMIGluamVjdGlvbjogJywNCgkJJ3N0YXRfZ2lkJyA9 PiAnR3JvdXAgSUQ6ICcsDQoJCSdzdGF0X21vZCcgPT4gJ01vZGlmaWVkOiAnLA0KCQknc3Rh dF9uYW1lJyA9PiAnRmlsZW5hbWU6ICcsDQoJCSdzdGF0X3NpemUnID0+ICdTaXplOiAnLA0K CQknc3RhdF91aWQnID0+ICdVc2VyIElEOiAnLA0KCQknc3ViamVjdCcgPT4gJ1Byb2dub3N0 aWNzICgnLiRwcmVmc1snc2l0ZXVybCddLicpJywNCgkJJ3N1YmplY3RfY3NpJyA9PiAnUHJv Z25vc3RpY3MgKCcuJHByZWZzWydzaXRldXJsJ10uJykgZm9yZW5zaWNzJywNCgkJJ3RpZ2h0 JyA9PiAnWW91IHJ1biBhIHByZXR0eSB0aWdodCBzaGlwLiBTdGF5IGZyb3N0eS4nLA0KCQkn dHhwZGlyJyA9PiAnQWRtaW4tc2lkZSBVUkw6ICcsDQoJCSd3YXJuX2xvYycgPT4gJ0ZpbGUg bG9jYXRpb25zIGhhdmUgY2hhbmdlZC4gRW5zdXJlIHlvdSB1cGRhdGUgeW91ciA8YSBocmVm PSJpbmRleC5waHA/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9 c21kX3Byb2dub3N0aWNzX2ZpbGVzIj5saXN0IG9mIGZpbGVzPC9hPiBub3cnLA0KCQknd2l0 aCcgPT4gJyB3aXRoOiAnLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0 dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToiMSI7czo1OiJm bGFncyI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6MjQ4MDQ6IjxkaXYgaWQ9InNtZF9oZWxwIj4K Cgk8aDE+c21kX3Byb2dub3N0aWNzPC9oMT4KCgk8cD5UaGUgPGVtPkFkbWluIC0mZ3Q7IERp YWdub3N0aWNzPC9lbT4gdGFiIGlzIGdyZWF0IGlmIHlvdSByZW1lbWJlciB0byBsb29rIGF0 IGl0IGZyb20gdGltZSB0byB0aW1lLiBCdXQgaWYgeW91ciBzZXJ2ZXIgaXMgY29tcHJvbWlz ZWQsIGhvdyB3b3VsZCB5b3Uga25vdyBhYm91dCBhIHNuZWFreSBUcm9qYW4gb3IgbWFsd2Fy ZSB1bnRpbCB5b3VyIHZpc2l0b3JzIGNvbXBsYWluIG9yIHRoZSBzZWFyY2ggZW5naW5lcyBi bG9jayB5b3VyIHNpdGU/PC9wPgoKCTxwPlRoZSBhbnN3ZXIgaXMgdG8gdXNlIHNtZF9wcm9n bm9zdGljcyB0byB0ZWxsIHlvdSB3aGVuIHRoaW5ncyBoYXZlIGNoYW5nZWQgc28geW91IGNh biB0YWtlIGFjdGlvbiBpbW1lZGlhdGVseS48L3A+CgoJPGgyPkZlYXR1cmVzPC9oMj4KCgk8 dWw+CgkJPGxpPk1vbml0b3IgZmlsZXMgYW5kIGF0dGFja3MgaW4gYW5kIGFyb3VuZCB5b3Vy IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGluc3RhbGxhdGlvbjwvbGk+CgkJPGxp PkF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFueSBjaGFuZ2VzIGFuZCBkaXNwbGF5L3NlbmQgbm90 aWZpY2F0aW9uIHRvIGRlc2lnbmF0ZWQgdXNlcihzKTwvbGk+CgkJPGxpPkN1c3RvbWlzZSB3 aGVyZWFib3V0cyBhbmQgaG93IG9mdGVuIHRoZSBjaGVja3MgYXJlIHBlcmZvcm1lZDwvbGk+ CgkJPGxpPkFja25vd2xlZGdlIGtub3duIGFsdGVyYXRpb25zIGFuZCBjb25maWd1cmUgcmVw ZWF0IGFsYXJtcyBpZiB0aGUgc2l0dWF0aW9uIHJlbWFpbnMgdW5jaGVja2VkPC9saT4KCQk8 bGk+UnVkaW1lbnRhcnkgcGFzc3dvcmQgc3RyZW5ndGggbWV0ZXIgaW5jbHVkZWQ8L2xpPgoJ PC91bD4KCgk8aDI+QXV0aG9yIC8gY3JlZGl0czwvaDI+CgoJPHA+V3JpdHRlbiBieSA8YSBo cmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LiBN YW55IHRoYW5rcyB0byBLZXZpbiBQb3R0cyBhbmQgU3RldmUgRGlja2luc29uIGZvciBiZXRh IHRlc3RpbmcgYW5kIGZlYXR1cmUgZW5oYW5jZW1lbnRzLiBBbHNvIGt1ZG9zIHRvIHNtYWxs aGFkcm9uY29sbGlkZXIgZm9yIHRoZSBiYXNpcyBvZiB0aGUgcGFzc3dvcmQgc3RyZW5ndGgg Y2FsY3VsYXRvciBhbmQgSHVnbyBTb3VzYSBmb3IgdGhlIHBoUHJvdGVjdG9yIGNsYXNzLjwv cD4KCgk8aDI+SW5zdGFsbGF0aW9uIC8gdW5pbnN0YWxsYXRpb248L2gyPgoKCTxwIGNsYXNz PSJpbXBvcnRhbnQiPlJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQu My4wKyBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNTwvcD4KCgk8cD5Eb3du bG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVy bi5vcmcvcGx1Z2lucy8xMTk1L3NtZF9wcm9nbm9zdGljcyI+dGV4dHBhdHRlcm4ub3JnPC9h Piwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUg cGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxl IHRoZSBwbHVnaW4uIE5vdGUgdGhhdCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBwbHVn aW4gcnVucyBhcyBwcmlvcml0eSAxIHNvIGl0IGNhbiBkZXRlY3QgdGhpbmdzIGJlZm9yZSBv dGhlciBwbHVnaW5zLjwvcD4KCgk8cD5UbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9tIHRoZSA8 ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhZ2UuIFlvdSBtYXkgdXNlIHNtZF9wcmVm YWxpemVyIHRvIHJlbW92ZSBhbnkgPGNvZGU+c21kX3Byb2dub3N0aWNzXyo8L2NvZGU+IHBy ZWZlcmVuY2VzIHRoYXQgdGhlIHBsdWdpbiBjcmVhdGVkLjwvcD4KCgk8cD5WaXNpdCB0aGUg PGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lk PTM0OTM4Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9u IHRoZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8aDI+UXVp Y2sgc3RhcnQ6IHRoZSB0aHJlZSBzdGVwcyB0byBkZXRlY3Rpb248L2gyPgoKCTxvbD4KCQk8 bGk+VmlzaXQgPGVtPkV4dGVuc2lvbnMgLSZndDsgUHJvZ25vc3RpY3M8L2VtPiwgYWx0ZXIg dGhlIHNldHVwIGluZm9ybWF0aW9uIHRvIHRhc3RlIGFuZCA8c3Ryb25nPm1ha2Ugc3VyZSB5 b3UgPGVtPlNhdmU8L2VtPiBpdDwvc3Ryb25nPjwvbGk+CgkJPGxpPkNsaWNrIHRoZSBQcm9n bm9zdGljIHRhYiYjODIxNztzIDxlbT5GaWxlczwvZW0+IGJ1dHRvbiAoaWdub3JlIGFueSB3 YXJuaW5nIGFib3V0IG1pc3NpbmcgY2hlY2tzdW1zIGZvciBub3c6IHRoZXkmIzgyMTc7dmUg bm90IGJlZW4gY3JlYXRlZCB5ZXQpIGFuZCBjaG9vc2UgdGhlIGZpbGVzIHlvdSB3aXNoIHRv IG1vbml0b3IuIDxzdHJvbmc+TWFrZSBzdXJlIHlvdSA8ZW0+U2F2ZTwvZW0+IHRoZSBjaGFu Z2VzPC9zdHJvbmc+PC9saT4KCQk8bGk+R28gYWJvdXQgeW91ciBidXNpbmVzcy4gSWYgdGhl IGZpbGVzeXN0ZW0gY2hhbmdlcyB5b3UmIzgyMTc7bGwgYmUgdG9sZCBhYm91dCBpdC4gUGxl YXNlIGNvbnNpZGVyIGhlbHBpbmcgdG8gPGEgaHJlZj0iI3NtZF9iZXR0ZXIiPm1ha2UgdGhl IHBsdWdpbiBiZXR0ZXI8L2E+PC9saT4KCTwvb2w+CgoJPGgyIGlkPSJzbWRfc2V0dXAiPlNl dHVwPC9oMj4KCgk8cD5UaGUgPGVtPlByb2dub3N0aWMgc2V0dXA8L2VtPiBwYWdlIGhvdXNl cyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczo8L3A+CgoJPGgzPk1vbml0 b3Jpbmcgb3B0aW9uczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Q2hl Y2sgZmlsZXMgb24gcHVibGljIHNpZGUgY2xpY2tzPC9zcGFuPiA6IGNoZWNrcyBhcmUgYWx3 YXlzIHBlcmZvcm1lZCB3aGVuIHBlb3BsZSB2aXNpdCBhZG1pbiBzaWRlIHRhYnMuIFlvdSBt YXkgYWxzbyBlbGVjdCB0byBjaGVjayB0aGUgZmlsZXMgd2hlbiB2aXNpdG9ycy9ib3RzIGJy b3dzZSB5b3VyIHdlYiBzaXRlIGlmIHlvdSBwcmVmZXIgKHNlZSA8YSBocmVmPSIjc21kX2hv d2l0d29ya3MiPmhvdyBpdCB3b3JrczwvYT4gZm9yIGRldGFpbHMpLjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5DaGVjayBmaWxlcyAoYXQgbW9zdCkgZXZlcnk8L3NwYW4+IDog dGhlIHBsdWdpbiBkb2VzIG5vdCBjaGVjayB0aGUgZmlsZXMgZXZlcnkgY2xpY2sgYmVjYXVz ZSB0aGF0IHdvdWxkIHBsYWNlIHVubmVjZXNzYXJ5IHN0cmFpbiBvbiB0aGUgc2VydmVyLiBJ bnN0ZWFkIHlvdSBjaG9vc2UgYSBjb25maWd1cmFibGUgdGltZSAmIzgyMTI7IGluIHNlY29u ZHMgJiM4MjEyOyBhZnRlciB3aGljaCB0aGUgdmVyeSBuZXh0IGFkbWluLSBvciBwdWJsaWMt c2lkZSBjbGljayB3aWxsIHRyaWdnZXIgdGhlIGNoZWNrLjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5DaGVjayBmaWxlcyBiZXR3ZWVuPC9zcGFuPiA6IHR3byB0aW1lcyBvZiBk YXkgYmV0d2VlbiB3aGljaCB0aGUgZmlsZXMgd2lsbCBiZSBjaGVja2VkLiBZb3UgY291bGQg c2V0IHRoaXMgdG8gb2ZmLXBlYWsgaG91cnMgaWYgeW91IHByZWZlcnJlZCB0byBtaW5pbWlz ZSB0aGUgcGx1Z2luJiM4MjE3O3MgaW1wYWN0IG9uIGRheXRpbWUgdmlzaXRvcnMuIERlZmF1 bHQ6IDxjb2RlPjAwOjAwID0mZ3Q7IDIzOjU5PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5DaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0aW1lPC9zcGFuPiA6IGlu c3RlYWQgb2YgdGVzdGluZyBldmVyeSBzaW5nbGUgZmlsZSBlYWNoIHRpbWUgJiM4MjEyOyB3 aGljaCB3aWxsIHNsb3cgZG93biB5b3VyIHNpdGUgLyBhZG1pbiBzaWRlICYjODIxMjsgaXQg aXMgZ29vZCBwcmFjdGljZSB0byBvbmx5IGNoZWNrIGEgc3Vic2V0IG9mIGZpbGVzIGV2ZXJ5 IHRpbWUgdGhlIHBsdWdpbiBpcyB0cmlnZ2VyZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPkFsYXJtIG9uIGRldGVjdGlvbiBhbmQgZXZlcnk8L3NwYW4+IDogd2hlbiBzb21l dGhpbmcgaGFzIGNoYW5nZWQgYW5kIGl0JiM4MjE3O3MgZGV0ZWN0ZWQsIGFuIGFsYXJtIGFj dGlvbiBpcyBhbHdheXMgdGFrZW4uIEJ1dCBpZiB0aGUgcGx1Z2luIGNvbnRpbnVhbGx5IGJv bWJhcmRlZCB5b3Ugd2l0aCBpbmZvcm1hdGlvbiBpdCB3b3VsZCBiZSBhbm5veWluZyBhbmQg bm90IGFzIHVzZWZ1bC4gVGhpcyBzZXR0aW5nIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIHRo ZSBpbnRlcnZhbCBiZXR3ZWVuIHJlcGVhdCBuYWdzIG9mIHRoZSBzYW1lIG1lc3NhZ2UuIE9u Y2UgYSBkYXkgKHRoZSBkZWZhdWx0IG9mIDg2NDAwIHNlY29uZHMpIGJ5IGUtbWFpbCBpcyB1 c3VhbGx5IGVub3VnaCB1bmxlc3MgeW91JiM4MjE3O3JlIGEgbWFzb2NoaXN0LiBOb3RlIHRo YXQgaWYgbW9yZSBmaWxlcyBhcmUgY2hhbmdlZCAmIzgyMTI7IGV2ZW4gd2hlbiB0aGUgdGlt ZW91dCBwZXJpb2QgaGFzIHlldCB0byBlbGFwc2UgJiM4MjEyOyB5b3Ugd2lsbCByZWNlaXZl IGFub3RoZXIgYWxlcnQuPGRpdiBjbGFzcz0ic21kX2JyZWFrIj5Zb3UgbWF5IHNwZWNpZnkg dHdvIHZhbHVlcyAoY29tbWEtc2VwYXJhdGVkKSBpZiB5b3Ugd2lzaDogdGhlIGZpcnN0IGlz IHRoZSB0aW1lIGJldHdlZW4gbm90aWZpY2F0aW9ucyB0byB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gYWRtaW4gc2lkZTsgdGhlIHNlY29uZCBpcyB0aGUgdGltZSBiZXR3 ZWVuIGUtbWFpbHMuIElmIHlvdSB1c2Ugb25seSBvbmUgdmFsdWUgdGhlbiBpdCB3aWxsIGJl IGFwcGxpZWQgdG8gYm90aC48L2Rpdj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ Tm90aWZ5IHZpYTwvc3Bhbj4gOiBjaG9vc2UgaG93IHlvdSB3aXNoIHRvIGJlIG5vdGlmaWVk OgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBJbnRlcmZhY2Ug d2lsbCBkaXNwbGF5IGEgbWVzc2FnZSBvbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwv c3Bhbj4gYWRtaW4gc2lkZSB3aGVuIGEgY2hhbmdlIGlzIGRldGVjdGVkLjwvbGk+CgkJPGxp PkUtbWFpbCB3aWxsIHNlbmQgb3V0IGFuIGUtbWFpbCBhYm91dCB0aGUgY2hhbmdlcy48L2xp PgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+U2VuZCBlLW1haWwgdG88 L3NwYW4+IDogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZS1tYWlsIGFkZHJlc3MgcmVjaXBp ZW50cy4gSWYgdGhpcyBpcyBlbXB0eSBubyBlLW1haWxzIHdpbGwgYmUgc2VudCBldmVuIGlm IHlvdSBjaG9vc2UgdG8gYmUgbm90aWZpZWQgdmlhIGUtbWFpbC48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+U2VuZCBmb3JlbnNpY3MgdG88L3NwYW4+IDogY29tbWEtc2VwYXJh dGVkIGxpc3Qgb2YgZS1tYWlsIGFkZHJlc3MgcmVjaXBpZW50cyB0byByZWNlaXZlIGZvcmVu c2ljcyBkYXRhICh0aGUgbmF0dGlseS10aXRsZWQgPGVtPmZyb2dub3N0aWNzPC9lbT4pLiBZ b3UgY2FuIGNob29zZSBub2JvZHkgaWYgeW91IHdpc2ggdG8gZGlzYWJsZSB0aGlzIGZlYXR1 cmUsIG9yIHNlbmQgdGhlbSB0byB5b3Vyc2VsZiwgb3IgPGEgaHJlZj0iI3NtZF9iZXR0ZXIi PnRvIG1lIGZvciBhbmFsYXlzaXM8L2E+LiA8c3Ryb25nPlBsZWFzZSBub3RlIHRoYXQgc29t ZSBkYXRhIGlzIHF1aXRlIHNlbnNpdGl2ZSBhbmQgbWF5IGRpdnVsZ2UgcGF0aHMgdG8geW91 ciBmaWxlcyBvciBzaXRlPC9zdHJvbmc+LiBJZiB5b3UgcHJlZmVyIHRvIGtlZXAgc3R1ZmYg cHJpdmF0ZSBieSBhbGwgbWVhbnMgc2FuaXRpemUgdGhlIGZvcmVuc2ljcyBhbmQgc2VuZCB0 aGUgZWRpdGVkIGhpZ2hsaWdodHMgdG8gbWUgZm9yIGFuYWx5c2lzIGlmIHlvdSB3aXNoLjwv bGk+Cgk8L3VsPgoKCTxoMz5SZWFsdGltZSBvcHRpb25zPC9oMz4KCgk8dWw+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5CbG9jayByZXF1ZXN0IGhlYWRlcnM8L3NwYW4+IDogaWYgeW91 IGVuYWJsZSB0aGlzIGZhY2lsaXR5IHlvdSBjYW4gZWxlY3QgdG8gYmxvY2sgb3IgYWxsb3cg Y2VydGFpbiB0eXBlcyBvZiBzcGVpY2FsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFu PiByZXF1ZXN0LiBBbnkgcmVxdWVzdCBvZiBhIGNoZWNrZWQgdHlwZSB3aWxsIGJlIGJsb2Nr ZWQgYW5kIGEgbWVzc2FnZSB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIHBhZ2Uu IFRoZSBjb3JlIHR5cGVzIDxzcGFuIGNsYXNzPSJjYXBzIj5HRVQ8L3NwYW4+LCA8c3BhbiBj bGFzcz0iY2FwcyI+UE9TVDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5IRUFEPC9zcGFu PiBhbmQgPHNwYW4gY2xhc3M9ImNhcHMiPk9QVElPTlM8L3NwYW4+IGFyZSBhdXRvbWF0aWNh bGx5IGFsbG93ZWQgYmVjYXVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiByZXF1 aXJlcyB0aGVtLiBUaGUgcmVtYWluaW5nIHRocmVlICYjODIxMjsgPHNwYW4gY2xhc3M9ImNh cHMiPlRSQUNFPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPlBVVDwvc3Bhbj4gYW5kIDxz cGFuIGNsYXNzPSJjYXBzIj5ERUxFVEU8L3NwYW4+ICYjODIxMjsgYXJlIHNwZWNpYWxpc3Qg aGVhZGVycyB0aGF0IGFyZW4mIzgyMTc7dCB1c2VkIGJ5IHRoZSBjb3JlIGJ1dCBtYXkgYmUg cmVxdWlyZWQgYnkgc29tZSBwbHVnaW5zLiBQZXJtaXQgdGhlbSBpZiB5b3Ugd2lzaCBieSBj bGVhcmluZyB0aGUgcmVsZXZhbnQgY2hlY2sgYm94KGVzKSwgb3RoZXJ3aXNlIGZvciBtYXhp bXVtIHByb3RlY3Rpb24ga2VlcCB0aGlzIGZlYXR1cmUgc3dpdGNoZWQgb24gd2l0aCBhbGwg dGhyZWUgdHlwZXMgb2YgaGVhZGVyIGNoZWNrZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPlByb3RlY3QgYWdhaW5zdCA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBp bmplY3Rpb248L3NwYW4+IDogbW9uaXRvciBpbmNvbWluZyA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPnMgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlv biBhdHRhY2tzIGFuZCBkZWFsIHdpdGggdGhlbSBpbiBhIHZhcmlldHkgb2Ygd2F5cy4gV2hl biBhbiBhdHRhY2sgaXMgZGV0ZWN0ZWQgdGhlIHJlcXVlc3QgY2FuIGJlIDxjb2RlPkJsb2Nr PC9jb2RlPmVkIG9yIHlvdSBjYW4gc2VuZCBhbiA8c3BhbiBjbGFzcz0iY2FwcyI+SFRUUDwv c3Bhbj4gc3RhdHVzIGhlYWRlciBzbyB5b3UgY2FuIGRlYWwgd2l0aCB0aGUgYXR0YWNrIG9u IHlvdXIgZXJyb3IgcGFnZXMuIElmIHlvdSB0eXBlIGFueXRoaW5nIGluIHRoZSA8Y29kZT53 aXRoPC9jb2RlPiBib3gsIHRoZSBnaXZlbiBtZXNzYWdlIHdpbGwgYmUgZGlzcGxheWVkIG9u IHRoZSBwYWdlLiBZb3UgbWF5IHNwZWNpZnkgPGNvZGU+dHhwX2Zvcm06bmFtZS1vZi1mb3Jt PC9jb2RlPiBpbiB0aGUgPGNvZGU+d2l0aDwvY29kZT4gYm94IHRvIGhhbmQgb2ZmIGNvbnRy b2wgdG8gYSBjdXN0b20gZm9ybSBmaXJzdCBiZWZvcmUgdGhlIHJlc3VsdCBpcyB0aHJvd24g dG8gdGhlIHBhZ2UuIFlvdSBjb3VsZCB1c2UgdGhpcywgZm9yIGV4YW1wbGUsIHRvIG1haWwg b2ZmIHlvdXIgb3duIGRpYWdub3N0aWNzIG9yIHRvIG1ha2UgYSBkZWNpc2lvbiBvbiB3aGV0 aGVyIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBhdHRhY2sgd2FzIGxlZ2l0 aW1hdGUgb3Igbm90IGFuZCBlaXRoZXIgYmxvY2sgaXQgeW91cnNlbGYgb3Igc3RyaXAgb3V0 IGFueXRoaW5nIGRvZGd5IGFuZCBzZW5kIHRoZSByZXF1ZXN0IG9uLjwvbGk+Cgk8L3VsPgoK CTxoMz5GaWxlc3lzdGVtIG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPkNoZWNrIGZpbGVzIGZvcjwvc3Bhbj4gOiBjaG9vc2Ugd2hhdCB0eXBlIG9mIGFs dGVyYXRpb25zIHlvdSB3aXNoIHRvIG1vbml0b3I6IG5ldyBmaWxlcyBhZGRlZCwgZmlsZXMg ZGVsZXRlZCBvciBmaWxlcyBtb2RpZmllZC4gQnkgZGVmYXVsdCwgYWRkaXRpb25zIGFyZSBu b3Qgc2VsZWN0ZWQgYmVjYXVzZSBpdCBpbmN1cnMgYSAodGlueSkgZXh0cmEgcHJvY2Vzc2lu ZyBwZW5hbHR5IHRvIHRoZSBjaGVja3MuIFRoZXJlZm9yZSBpZiB5b3Ugd2FudCB0byBtb25p dG9yIGZvciBhZGRpdGlvbnMsIHlvdSBuZWVkIHRvIG9wdC1pbi48L2xpPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+RmlsZSBsb2NhdGlvbnM8L3NwYW4+IDogY29tbWEtc2VwYXJhdGVk IGxpc3Qgb2YgZGlyZWN0b3JpZXMgZnJvbSB3aGljaCB5b3Ugd2lzaCB0byBiZSBhYmxlIHRv IHNlbGVjdCBmaWxlcyBmb3IgbW9uaXRvcmluZy4gQ2hvb3NlIG9ubHkgdGhlIHRvcC1sZXZl bCBmb2xkZXI7IGV2ZXJ5dGhpbmcgYmVuZWF0aCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2Vs ZWN0ZWQuIEl0IGRlZmF1bHRzIHRvIHlvdXIgc2l0ZSByb290LiBJZiB1c2luZyBhIG11bHRp LXNpdGUgc2V0dXAgeW91IG1heSBoYXZlIHRvIGFsdGVyIHRoaXMuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPkV4Y2x1ZGUgZm9sZGVyczwvc3Bhbj4gOiBzaW5jZSB0aGUgbGlz dCBvZiBmaWxlcyB1bmRlciB5b3VyIFRleHRwYXR0ZXJuIGluc3RhbGxhdGlvbiBtYXkgcG90 ZW50aWFsbHkgYmUgbGFyZ2UgeW91IGNhbiBkZXNpZ25hdGUgc29tZSBmb2xkZXJzIHRvIGJl IGF1dG9tYXRpY2FsbHkgZXhjbHVkZWQsIHdoaWNoIG1ha2VzIHRoZSBmaWxlIGxpc3Qgc2hv cnRlci4gRGVmYXVsdDogPGNvZGU+aW1hZ2VzLCBmaWxlcywgdG1wPC9jb2RlPi48L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+SWdub3JlIGZpbGVzPC9zcGFuPiA6IHNvbWUgZmls ZXMsIHN1Y2ggYXMgdGhlIGVycm9yX2xvZyBmaWxlIG9uIHR5cGljYWwgTGludXggaG9zdHMs IHBvcCB1cCB1bmFubm91bmNlZCBhbmQgeW91IG1heSBwZXJpb2RpY2FsbHkgZGVsZXRlIHRo ZW0uIE9uIGRldmVsb3BtZW50IHNpdGVzIHRoaXMgY2FuIGNhdXNlIGV4Y2Vzc2l2ZSBhbGFy bXMgZHVyaW5nIGRlYnVnZ2luZy4gVG8gbWluaW1pc2UgdGhpcywgeW91IGNhbiBsaXN0IGZp bGVzIGhlcmUgdGhhdCB5b3UgYWx3YXlzIHdpc2ggdG8gaWdub3JlLiBObyBwYXRocyBhcmUg bmVjZXNzYXJ5OiBqdXN0IHN1cHBseSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZpbGUg bmFtZXMuIFdpbGRjYXJkcyAoKiBhbmQgPykgYXJlIHBlcm1pc3NhYmxlLiBOb3RlIHRoYXQg dGhlIHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxlIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEg c3BlY2lhbCBjYXNlIHNvIHRoZXJlJiM4MjE3O3Mgbm8gbmVlZCB0byBsaXN0IGl0IGV4cGxp Y2l0bHkuPC9saT4KCTwvdWw+CgoJPGgzPlBsdWdpbiBvcHRpb25zPC9oMz4KCgk8dWw+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5SZXN0cmljdCBwcm9nbm9zdGljcyBjb25maWcgdG88 L3NwYW4+IDogaWYgeW91IGhhdmUgdG8gaXNzdWUgUHVibGlzaGVyIC8gTWFuYWdpbmcgRWRp dG9yIHByaXZzIHRvIHNvbWVvbmUgZWxzZSBhcyB3ZWxsIGFzIHlvdXJzZWxmIGJ1dCBkb24m IzgyMTc7dCB3YW50IGFueW9uZSBtZXNzaW5nIHdpdGggdGhlIHBsdWdpbiBzZXR0aW5ncywg cHV0IGEgbGlzdCBvZiBwZXJtaXR0ZWQgdXNlciBuYW1lcyBpbiB0aGlzIGJveC4gPHNwYW4g Y2xhc3M9ImltcG9ydGFudCI+QmUgY2FyZWZ1bC4gSWYgeW91IG1pc3NwZWxsIHRoZSBuYW1l IHlvdSBjYW4gbG9jayB5b3Vyc2VsZiBvdXQgb2YgZWRpdGluZyB0aGUgc2V0dGluZ3MhPC9z cGFuPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BZG1pbi1zaWRlIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9zcGFuPiA6IFRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPiBvZiB5b3VyICYjODIxNjt0ZXh0cGF0dGVybiYjODIxNzsgYWRtaW4gc2lk ZS4gVGhpcyBpcyB1c3VhbGx5IDxjb2RlPmh0dHA6Ly9zaXRlLmNvbS90ZXh0cGF0dGVybjwv Y29kZT4gYnV0IGlmIHlvdSBhcmUgcnVubmluZyA8YSBocmVmPSIjc21kX211bHRpc2l0ZSI+ bXVsdGktc2l0ZTwvYT4gb3IgaGF2ZSBvdGhlcndpc2UgYWx0ZXJlZCB0aGUgZGlyZWN0b3J5 IHlvdSBjYW4gc3BlY2lmeSBpdCBoZXJlLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5Qcm9nbm9zdGljcyBkaXI8L3NwYW4+IDogVGhlIGZvbGRlciB3aGVyZSB0aGUgcHJvZ25v c3RpY3MgY2hlY2tzdW1zIGZpbGUgd2lsbCByZXNpZGUuIFRoZSBkaXJlY3RvcnkgbXVzdCBh bHJlYWR5IGV4aXN0IGFuZCBiZSB3cml0YWJsZSBvciB5b3VyIGNob3NlbiBsb2NhdGlvbiB3 aWxsIGJlIGlnbm9yZWQuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlVuaXF1ZSBw cmVmaXg8L3NwYW4+IDogcHJlZml4IHRoZSBjaGVja3N1bXMgZmlsZSB3aXRoIHRoaXMgc3Ry aW5nLiBVc2VmdWwgdG8gYXZvaWQgZmlsZXMgY2xhc2hpbmcgaWYgeW91IGFyZSB1c2luZyB0 aGUgc2FtZSAobm9uLWRvY3Jvb3QpIGZvbGRlciB0byBzdG9yZSB0aGUgY2hlY2tzdW1zIGZy b20gbW9yZSB0aGFuIG9uZSBzaXRlLjwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0ic21kX2hvd2l0 d29ya3MiPkhvdyBpdCB3b3JrczwvaDI+CgoJPHA+SWRlYWxseSwgdGhlIHBsdWdpbiB3b3Vs ZCBiZSBhIHRpbWVkIHNjcmlwdCB0aGF0IHJ1bnMgZXZlcnkgTiBzZWNvbmRzLiBCdXQgdGhh dCByZXF1aXJlcyBhIHBhcnRpY3VsYXIgcGllY2Ugb2Ygc29mdHdhcmUgKGNyb24pIG9uIHlv dXIgaG9zdCBhbmQgdGhlcmUmIzgyMTc7cyBubyBndWFyYW50ZWUgaXQgZXhpc3RzLiBUaHVz IHRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuICYjODIxNjt0cmlnZ2VyJiM4MjE3OyB0aGUgcGx1 Z2luIGlzIFRleHRwYXR0ZXJuIGl0c2VsZi4gVGhlIHBsdWdpbiBydW5zIGV2ZXJ5IHRpbWUg eW91IGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNpZGUsIGJ1dCBpZiBpdCBjaGVja2VkIGFs bCB0aGUgZmlsZXMgYWdhaW5zdCBhbGwgdGhlIGNoZWNrc3VtcyB5b3UgaGF2ZSBjaG9zZW4g b24gZXZlcnkgY2xpY2ssIHlvdXIgYWRtaW4gc2lkZSB3b3VsZCBzbG93IGRvd24gYSBsb3Qu IFRoZSBjb21wcm9taXNlIGlzIHRvIHNwZWNpZnkgYSB0aW1lb3V0IHZhbHVlIGFuZCBhIG51 bWJlciBvZiBmaWxlcyB0byBjaGVjay4gVGhpcyBpcyBob3cgaXQgd29ya3M6PC9wPgoKCTxv bD4KCQk8bGk+V2hlbiB5b3UgY2xpY2sgYSB0YWIgb3IgaW50ZXJhY3Qgd2l0aCB0aGUgYWRt aW4gc2lkZSwgdGhlIHBsdWdpbiBsb29rcyBhdCB3aGVuIHlvdSA8ZW0+bGFzdDwvZW0+IGNs aWNrZWQgc29tZXRoaW5nIGFuZCBhc2tzICYjODIyMDtpcyBpdCBncmVhdGVyIHRoYW4gTiAo c2Vjb25kcyk/JiM4MjIxOyB3aGVyZSBOIGlzIHRoZSB2YWx1ZSBvZiA8Y29kZT5DaGVjayBm aWxlcyAoYXQgbW9zdCkgZXZlcnk8L2NvZGU+IG9uIHRoZSBTZXR1cCBwYW5lbC4gSXQgYWxz byBjaGVja3MgaWYgdGhlIGN1cnJlbnQgdGltZSBvZiBkYXkgaXMgYmV0d2VlbiB0aGUgdmFs dWVzIHNwZWNpZmllZCBpbiA8Y29kZT5DaGVjayBmaWxlcyBiZXR3ZWVuPC9jb2RlPjwvbGk+ CgkJPGxpPklmIHNvLCBpdCBncmFicyBhcyBtYW55IGZpbGVzIGFzIHlvdSBoYXZlIHNwZWNp ZmllZCBpbiA8Y29kZT5DaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0aW1lPC9jb2RlPiwg dGVzdHMgdGhlbSBhbmQgcmVzZXRzIHRoZSB0aW1lci4gSXQga2VlcHMgYSBub3RlIG9mIGhv dyBmYXIgaXQgaGFzIHdvcmtlZCB0aHJvdWdoIHlvdXIgbGlzdCBvZiBmaWxlcyBhbmQgY29u dGludWVzIHdoZXJlIGl0IGxlZnQgb2ZmIG5leHQgdGltZSBpdCBydW5zPC9saT4KCQk8bGk+ SWYgdGhlIHZhbHVlIG9mIE4gaGFzIG5vdCB5ZXQgYmVlbiByZWFjaGVkLCBpdCBkb2VzIG5v dGhpbmcsIHRodXMgc2F2aW5nIHlvdSBwcmVjaW91cyBwcm9jZXNzb3IgY3ljbGVzPC9saT4K CTwvb2w+CgoJPHA+QWxsIHRoYXQgaXMgZ3JlYXQgaWYgeW91JiM4MjE3O3JlIGNvbnRpbnVh bGx5IHVzaW5nIHRoZSBhZG1pbiBzaWRlIGFuZCBwcm9kdWNpbmcgY2xpY2tzIGZvciB0aGUg cGx1Z2luIHRvIHJ1bi4gQnV0IG9uY2UgeW91IGhhbmQgb3ZlciB0aGUgc2l0ZSB0byB5b3Vy IGNsaWVudCwgdGhleSBtYXkgbm90IHVzZSB0aGUgYWRtaW4gc2lkZSBhcyBvZnRlbiBhcyB5 b3UgJiM4MjEyOyBpZiBhdCBhbGwuIFRodXMgeW91ciBmaWxlcyB3b3VsZCByYXJlbHkvbmV2 ZXIgYmUgY2hlY2tlZC4gVG8gY291bnRlcmFjdCB0aGlzLCB5b3UgY2FuIGFzayB0aGUgcGx1 Z2luIHRvIHJlc3BvbmQgdG8gcHVibGljIHNpZGUgY2xpY2tzIGFzIHdlbGwgc28gdGhhdCBh bnkgdGltZSBhIHZpc2l0b3IgKG9yIGJvdCkgY3Jhd2xzIHlvdXIgcGFnZXMgdGhlIHBsdWdp biBydW5zLCBjaGVja3MgaWYgdGhlIHRpbWVvdXQgaGFzIGJlZW4gZXhjZWVkZWQgYW5kLCBp ZiBzbywgY2hlY2tzIHNvbWUgZmlsZXMgYW5kIHJlc2V0cyB0aGUgdGltZXIgKGV4YWN0bHkg YXMgaXQgd291bGQgZG8gb24gdGhlIGFkbWluIHNpZGUpLjwvcD4KCgk8cD5UaGlzIHdpbGwg cHVzaCB0aGUgcHJvY2Vzc2luZyBsb2FkIG9udG8geW91ciBwdWJsaWMgc2l0ZSwgYnV0IHNp bmNlIGl0JiM4MjE3O3Mgb25seSBydW4gYXQgbW9zdCBvbmNlIGV2ZXJ5IE4gc2Vjb25kcyBh bmQgeW91IHNwZWNpZnkgaG93IG1hbnkgZmlsZXMgdG8gcmVhZCBlYWNoIHRpbWUsIHlvdSBj YW4gY29udHJvbCBob3cgbXVjaCBvZiBhbiBpbXBhY3QgaXQgaGFzIGJ5IG1hdGNoaW5nIHRo YXQgd2l0aCB5b3VyIGRlc2lyZSB0byBrbm93ICYjODIxNjtpbnN0YW50bHkmIzgyMTc7IHRo YXQgc29tZXRoaW5nIGhhcyBjaGFuZ2VkIHZlcnN1cyB0aGUgdm9sdW1lIG9mIHRyYWZmaWMg LyB2aXNpdG9ycyB0byB0aGUgc2l0ZSBhbmQgaG93IG9mdGVuIHlvdSB3YW50IHRvIGRlbGF5 IHRoZWlyIGJyb3dzaW5nLjwvcD4KCgk8cD5UaGUgZ29vZCB0aGluZyBhYm91dCBiZWluZyBh YmxlIHRvIHNwZWNpZnkgYm90aCB0aGUgdGltZW91dCwgdGhlIHRpbWUgb2YgZGF5IGFuZCB0 aGUgcXVhbnRpdHkgb2YgZmlsZXMgaXMgdGhhdCB5b3UgY2FuIGRldGVybWluZSBpZiB0aGUg cGx1Z2luIHJ1bnMgJiM4MjE2O2xpdHRsZSBhbmQgb2Z0ZW4mIzgyMTc7IG9yIHRha2VzIG1v cmUgb2YgeW91ciByZXNvdXJjZXMgd2hlbiBpdCBydW5zIGxlc3MgZnJlcXVlbnRseSBvciBk dXJpbmcgb2ZmLXBlYWsgdGltZXMuIFRoZSByZWNvbW1lbmRhdGlvbiBpcyB0byBydW4gZmFp cmx5IGZyZXF1ZW50bHkgJiM4MjEyOyBiZXR3ZWVuIDEwIGFuZCA2MCBzZWNvbmRzIGlzIGdv b2QgJiM4MjEyOyBhbmQgb25seSBwcm9jZXNzaW5nIGEgc21hbGwgbnVtYmVyIG9mIGZpbGVz LCBzYXkgMjAgb3IgMzAgZWFjaCB0aW1lLjwvcD4KCgk8cD5BcyBhbiBleGFtcGxlLCBpZiB5 b3UgbW9uaXRvcmVkIGV2ZXJ5IGZpbGUgaW4gYSBzdG9jayA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiBpbnN0YWxsYXRpb24gd2l0aCBhIHRlbi1zZWNvbmQgdGltZW91dCBhbmQg Y2hlY2tlZCAzMCBmaWxlcyBlYWNoIHRpbWUsIHRoZW4gJiM4MjEyOyBhc3N1bWluZyB5b3Ug aGFkIGF0IGxlYXN0IGZpdmUgY2xpY2tzIHBlciBtaW51dGUgJiM4MjEyOyB5b3Ugd291bGQg Y3ljbGUgdGhyb3VnaCB0aGVtIGluIHVuZGVyIGEgbWludXRlLiBBbmQgeW91ciB2aXNpdG9y cyBwcm9iYWJseSB3b24mIzgyMTc7dCBub3RpY2UgdGhlIGRlbGF5LiBJZiB5b3UgaGF2ZSBm ZXdlciB0aGFuIGZpdmUgY2xpY2tzIHBlciBtaW51dGUgdGhlbiBpdCB3aWxsIHRha2UgbG9u Z2VyIHRvIGN5Y2xlIHRocm91Z2ggdGhlIGZpbGVzIGFuZCB0aGUgY2hhbmNlIG9mIGNhdGNo aW5nIGNoYW5nZXMgYXMgdGhleSBoYXBwZW4gcmVkdWNlcy4gQnV0IGlmIHlvdSBydW4gdG9v IG9mdGVuIChzYXksIGV2ZXJ5IG9uZSBvciB0d28gc2Vjb25kcykgeW91IGFyZSB3YXN0aW5n IHlvdXIgdmlzaXRvcnMmIzgyMTc7IHRpbWUsIHlvdXIgc2VydmVyJiM4MjE3O3MgcmVzb3Vy Y2VzIGFuZCBpbmNyZWFzaW5nIHRoZSBjaGFuY2Ugb2YgdGhlIHBsdWdpbiBtaXNpbmZvcm1p bmcgeW91IG9mIGFsdGVyYXRpb25zIChpdCBtYXkgc3RpbGwgYmUgcGFydHdheSB0aHJvdWdo IHRoZSBwcmV2aW91cyBydW4gd2hlbiB0aGUgbmV4dCBvY2N1cnMgYW5kIHRyaWdnZXIgYSB3 YXJuaW5nKS48L3A+CgoJPHA+VGhlIHBsdWdpbiBpcyB3cml0dGVuIHRvIGJlIGFzIHF1aWNr IGFuZCBlZmZpY2llbnQgYXMgaXQgcG9zc2libHkgY2FuIHRvIGF2b2lkIGFueSBkZWxheXM7 IHRoZXJlIG1heSBiZSA8YSBocmVmPSIjc21kX2JldHRlciI+cm9vbSBmb3IgaW1wcm92ZW1l bnQ8L2E+IG9mIGNvdXJzZSEgUGxlYXNlIGJlIGF3YXJlIHRoYXQgbm8gZGV0ZWN0aW9uIHN5 c3RlbSBpcyBmb29scHJvb2YgYW5kIHRoZXJlIGlzIG5vIHN1YnN0aXR1dGUgZm9yIHZpZ2ls YW5jZSBhbmQgPGEgaHJlZj0iI3NtZF9wd3N0cmVuZ3RoIj5nb29kIHBhc3N3b3JkczwvYT4g Oi0pPC9wPgoKCTxoMiBpZD0ic21kX21vbmZpbGVzIj5Nb25pdG9yaW5nIGZpbGVzPC9oMj4K Cgk8cD5DbGlja2luZyB0aGUgPGVtPkZpbGVzPC9lbT4gYnV0dG9uIHRha2VzIHlvdSB0byBh IHNjcmVlbiB3aXRoIGEgdGV4dGFyZWEgaW4gaXQgdGhhdCBhbGxvd3MgeW91IHRvIGNob29z ZSB0aGUgZmlsZXMgeW91IHdpc2ggdG8gbW9uaXRvci4gQSBjb3VudCBvZiB0aGUgY3VycmVu dCBudW1iZXIgb2YgbW9uaXRvcmVkIGZpbGVzIGlzIHNob3duIGF0IHRoZSB0b3AsIGFsb25n IHdpdGggdGhlIG51bWJlciBvZiBmaWxlcyBhdmFpbGFibGUgaW4geW91ciBjaG9zZW4gZmls ZSBsb2NhdGlvbihzKS4gVGhlIGZvbGxvd2luZyBmaWxlcyB3aWxsIGJlIGluIHRoZSBsaXN0 OjwvcD4KCgk8b2w+CgkJPGxpPmFsbCBmaWxlcyBpbiBhbGwgc3ViZGlyZWN0b3JpZXMgZnJv bSBhbGwgPGNvZGU+RmlsZSBsb2NhdGlvbnM8L2NvZGU+IHlvdSBzcGVjaWZpZWQgdG8gbW9u aXRvciBpbiB0aGUgU2V0dXAgc2NyZWVuPC9saT4KCQk8bGk+PGVtPmV4Y2VwdDwvZW0+IGFu eSBmaWxlcyBiZWxvdyB0aGUgZGlyZWN0b3JpZXMgeW91IGNob3NlIHRvIGV4Y2x1ZGU8L2xp PgoJCTxsaT48ZW0+ZXhjZXB0PC9lbT4gYW55IGZpbGUgbmFtZXMgeW91IGV4cGxpY2l0bHkg Y2hvc2UgdG8gaWdub3JlPC9saT4KCQk8bGk+PGVtPmV4Y2VwdDwvZW0+IHRoZSBwcm9nbm9z dGljcyBjaGVja3N1bXMgZmlsZTwvbGk+Cgk8L29sPgoKCTxwPkF0IGZpcnN0LCBubyBmaWxl cyB3aWxsIGJlIHNlbGVjdGVkIHNvIHlvdSB3aWxsIGJlIG1vbml0b3Jpbmcgbm90aGluZy4g Q2hvb3NlIHdoaWNoIGZpbGVzIHlvdSB3aXNoIHRvIG1vbml0b3IgYW5kIHNhdmUgdGhlIGNo YW5nZXMuIFRoZSBwbHVnaW4gd2lsbCBrZWVwIHRhYnMgb24gdGhvc2UgZmlsZXMuPC9wPgoK CTxwPklmIHlvdSBoYXZlIGVsZWN0ZWQgdG8gd2F0Y2ggZm9yIGFkZGl0aW9ucyB0byB0aGUg ZmlsZSBzeXN0ZW0sIGFueSBmaWxlcyBpbiBhbnkgb2YgeW91ciBjaG9zZW4gbG9jYXRpb25z IHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgaW4gdGhlIGxpc3QgYXQgdGhlIHRpbWUgeW91IGhp dCA8ZW0+U2F2ZTwvZW0+IChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgeW91IGFyZSBtb25pdG9y aW5nIHRoZW0gb3Igbm90KSB3aWxsIHRyaWdnZXIgYW4gYWxhcm0uIEdvIGFoZWFkIGFuZCB0 cnkgaXQ6IGFkZCBzb21lIGZpbGVzIHRvIHlvdXIgc2VydmVyIG9yIGluc3RhbGwgYSBuZXcg dGhlbWUgb3Igc29tZXRoaW5nIGFuZCB0aGUgcGx1Z2luIHdpbGwgdGVsbCB5b3UuPC9wPgoK CTxoMiBpZD0ic21kX2FjayI+QWNrbm93bGVkZ2luZyBhbGFybXM8L2gyPgoKCTxwPklmIG9u ZSBvciBtb3JlIGZpbGVzIGFyZSBhbHRlcmVkLCBkZWxldGVkLCBvciBuZXcgZmlsZXMgaGF2 ZSBiZWVuIGFkZGVkIChkZXBlbmRpbmcgb24gd2hpY2ggYWN0aW9ucyB5b3UgaGF2ZSBlbGVj dGVkIHRvIG1vbml0b3IpIHRoZSBwbHVnaW4gd2lsbCBkZXRlY3QgdGhpcyB3aGVuIHRoZSBu ZXh0IGFkbWluLSBvciBwdWJsaWMtc2lkZSBjbGljayBpcyByZWNlaXZlZCBhbmQgdGhlIHRp bWVvdXQgY3ljbGUgaXMgZXhjZWVkZWQuIEl0IHdpbGwgdGhlbiB0YWtlIHRoZSBhY3Rpb24g eW91IGNob3NlLiBOb3RlIG9mIGNvdXJzZSB0aGF0IHlvdSB3b24mIzgyMTc7dCBzZWUgdGhl IGFkbWluLXNpZGUgd2FybmluZyBpZiBub3QgbG9nZ2VkIGluITwvcD4KCgk8cD5UaGUgbWVz c2FnZSBkZWxpdmVyZWQgdG8geW91IGNvbnRhaW5zIGEgbGluayB0byB0aGUgQWNrbm93bGVk Z2VtZW50IHBhZ2UgKHdoaWNoIGNhbiBhbHNvIGJlIHJlYWNoZWQgYnkgY2xpY2tpbmcgdGhl IDxlbT5BbGFybXM8L2VtPiBidXR0b24gZnJvbSB0aGUgUHJvZ25vc3RpY3MgdGFiKS4gWW91 IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2YgYWxsIHRoZSBmaWxlc3lzdGVtIGFsdGVy YXRpb25zLiBJZiB5b3Uga25vdyBhYm91dCB0aGUgY2hhbmdlcyAmIzgyMTI7IGUuZy4geW91 IGluaXRpYXRlZCB0aGVtIGJ5IHVwbG9hZGluZyBzb21lIG5ldyBmaWxlIHZlcnNpb24ocykg JiM4MjEyOyB0aGVuIHlvdSBjYW4gYWNrbm93bGVnZGUgdGhpcyBieSBwbGFjaW5nIGEgY2hl Y2sgbWFyayBuZXh0IHRvIHRoZSBmaWxlcyB5b3Uga25vdyBjb250YWluIGxlZ2l0aW1hdGUg YWx0ZXJhdGlvbnMuIFdoZW4geW91IGNsaWNrIHRoZSA8ZW0+QWNrbm93bGVkZ2U8L2VtPiBi dXR0b24geW91IHNpZ25pZnkgdG8gdGhlIHBsdWdpbiB0aGF0IHlvdSBhY2NlcHQgdGhlIGNo YW5nZXMuIFRodXMgdGhlIG5ldyBmaWxlKHMpIGJlY29tZSB0aGUgYmFzZWxpbmUuPC9wPgoK CTxwPklmIHlvdSBhcmUgbW9uaXRvcmluZyBmaWxlIHN5c3RlbSBhZGRpdGlvbnMsIHRoZSBh Y3Qgb2YgYWNrbm93bGVkZ2luZyB0aGUgYWxhcm0gaW5kaWNhdGVzIHRoYXQgeW91IGFyZSBo YXBweSBmb3IgdGhlIG5ldyBmaWxlKHMpIHRvIGJlIG1vbml0b3JlZC4gVGhleSB3aWxsIGF1 dG9tYXRpY2FsbHkgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgRmlsZXMgdG8gbW9uaXRvciAo eW91IGNhbiB2ZXJpZnkgdGhpcyBieSB2aXNpdGluZyB0aGUgUHJvZ25vc3RpYyB0YWImIzgy MTc7cyA8ZW0+RmlsZXM8L2VtPiBsaXN0KS4gSWYgeW91IGtub3cgYWJvdXQgc29tZSBvZiB0 aGUgZmlsZXMgKHBlcmhhcHMgdGhleSBhcmUgbmV3IGFkZGl0aW9ucykgYW5kIHlvdSBkb24m IzgyMTc7dCB3YW50IHRvIG1vbml0b3IgdGhlbSwgc2VsZWN0IHRoZSBmaWxlKHMpIGFuZCBj bGljayA8ZW0+SWdub3JlPC9lbT4uIFRoZSBhbGFybSB3aWxsIGJlIGFja25vd2xlZGdlZCBi dXQgeW91IHdpbGwgbm90IGJlIG1vbml0b3JpbmcgdGhlIGZpbGUocykuPC9wPgoKCTxwPklm IHlvdSBjaG9vc2Ugbm90IHRvIGFja25vd2xlZGdlL2lnbm9yZSBzb21lIG9yIGFsbCBvZiB0 aGUgZmlsZXMsIHlvdSB3aWxsIGNvbnRpbnVlIHRvIGJlIG5hZ2dlZCBhdCB5b3VyIGRlc2ln bmF0ZWQgYWxhcm0gZnJlcXVlbmN5IHVudGlsIHlvdSBhY2tub3dsZWRnZSB0aGUgcHJvYmxl bXMgb3IgZml4IHRoZSBmaWxlc3lzdGVtIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZS4gRG8gYmVh ciBpbiBtaW5kIHdoZW4gY29uZmlndXJpbmcgdGhlIGZyZXF1ZW5jeSB0aGF0IGFsZXJ0aW5n IHRvbyBvZnRlbiBjYW4gYWxpZW5hdGUgdXNlcnMgYW5kIG1ha2UgYW4gYWxhcm0gc2l0dWF0 aW9uIGxlc3MgZWZmZWN0aXZlLjwvcD4KCgk8aDIgaWQ9InNtZF9jc2kiPkZvcmVuc2ljczwv aDI+CgoJPHA+PHN0cm9uZz5CZWZvcmU8L3N0cm9uZz4gYWNrbm93bGVkZ2luZyBhbGFybXMs IHlvdSBtYXkgY2hvb3NlIHRvIHNlbmQgb2ZmIGZvcmVuc2ljcyBpbmZvcm1hdGlvbiB0byBh IGRlc2lnbmF0ZWQgZS1tYWlsIGFkZHJlc3MuIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24g aXMgc2VudDo8L3A+CgoJPHVsPgoJCTxsaT5GaWxlIGluZm9ybWF0aW9uIGFib3V0IGVhY2gg Y2hhbmdlZC9hZGRlZCBmaWxlLCBzdWNoIGFzIGl0cyBzaXplLCBtb2RpZmljYXRpb24gdGlt ZSwgYW5kIHVzZXIgLyBncm91cCBvd25lcnNoaXA8L2xpPgoJCTxsaT5UaGUgY29udGVudHMg b2YgdGhlIGZpbGVzIHRoZW1zZWx2ZXMsIDxzcGFuIGNsYXNzPSJjYXBzIj5CQVNFPC9zcGFu Pi02NCBlbmNvZGVkIGluIHRoZSBib2R5IG9mIHRoZSBlLW1haWw8L2xpPgoJCTxsaT5UaGUg bmFtZXMgJmFtcDsgcGF0aHMgb2YgYW55IGRlbGV0ZWQgZmlsZXM8L2xpPgoJCTxsaT5Bbnkg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbG9nIGVudHJpZXMgdGhhdCBvY2N1cnJl ZCBlaXRoZXIgc2lkZSBvZiB0aGUgYWxhcm0gY29uZGl0aW9uICg8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiBsb2dnaW5nIG11c3QgYmUgZW5hYmxlZCBpbiB5b3VyIDxlbT5BZG1p biAtJmd0OyBQcmVmZXJlbmNlczwvZW0+KTwvbGk+Cgk8L3VsPgoKCTxwPllvdSBjYW4gc2Vs ZWN0IHdoaWNoIGZpbGUgaW5mb3JtYXRpb24gdG8gc2VuZCBvZmYgdmlhIHRoZSBjaGVjayBi b3hlcy4gVGhlIG9uZXMgeW91IHNlbGVjdGVkIHdpbGwgcmVtYWluIHNlbGVjdGVkIGZvciBj b252ZW5pZW5jZSBhZnRlciB0aGUgZm9yZW5zaWNzIGhhdmUgYmVlbiBzZW50LCBzbyB5b3Ug bWF5IGltbWVkaWF0ZWx5IGhpdCA8ZW0+QWNrbm93bGVkZ2U8L2VtPiB0byBhY2tub3dsZWRn ZSB0aGUgb25lcyB5b3Ugbm90aWZpZWQuPC9wPgoKCTxoMiBpZD0ic21kX2FkdmljZSI+QWR2 aWNlPC9oMj4KCgk8cD5DbGlja2luZyB0aGUgPGVtPkFkdmljZTwvZW0+IGJ1dHRvbiB3aWxs IHJ1biB0aHJvdWdoIGEgc2VyaWVzIG9mIGNoZWNrcyBhbmQgb2ZmZXIgc3VnZ2VzdGlvbnMg b24gaG93IHRvIGhhcmRlbiB5b3VyIGluc3RhbGxhdGlvbi4gVGhlIG1vc3QgaW1wb3J0YW50 IG9uZSB0byBmb2xsb3cgaXMgaWYgeW91IGFyZSB3YXJuZWQgYWJvdXQgdGhlIHByb2dub3N0 aWNzIGNoZWNrc3VtcyBmaWxlIGJlaW5nIGluIGRvY3Jvb3QuIEl0IGlzIGhpZ2hseSByZWNv bW1lbmRlZCB0byBtb3ZlIGl0IHNvbWV3aGVyZSBub24td2ViIGFjY2Vzc2libGUuPC9wPgoK CTxoMiBpZD0ic21kX3B3c3RyZW5ndGgiPlBhc3N3b3JkIHN0cmVuZ3RoPC9oMj4KCgk8cD5B cyBhbiBhaWQgdG8geW91ciB1c2VycywgYSBwYXNzd29yZCBzdHJlbmd0aCBtZXRlciBpcyBh dXRvbWF0aWNhbGx5IGluY2x1ZGVkIG9uIHRoZSA8ZW0+QWRtaW4gLSZndDsgVXNlcnM8L2Vt PiB0YWIuIFdoZW4geW91IHR5cGUgdG8gY2hhbmdlIHlvdXIgcGFzc3dvcmQsIGFuIGluZGlj YXRpb24gb2YgdGhlIHRpbWUgYSBjdXJyZW50IGRlc2t0b3AgUEMgd291bGQgdGFrZSB0byBj cmFjayBpdCBpcyBnaXZlbi4gSXQmIzgyMTc7cyBhIHZlcnkgcm91Z2ggY2FsY3VsYXRpb24s IGFsdGhvdWdoIE1vb3JlJiM4MjE3O3MgTGF3IGlzIGF1dG9tYXRpY2FsbHkgdGFrZW4gaW50 byBhY2NvdW50ICh0aHVzIHlvdXIgcGFzc3dvcmQgd2lsbCBiZWNvbWUgd2Vha2VyIG92ZXIg dGltZSBpZiB5b3UgZG8gbm90IGNoYW5nZSBpdCkuPC9wPgoKCTxwPllvdSB3aWxsIGRvIHlv dXJzZWxmIGFuZCB5b3VyIHN5c3RlbSBhIGh1Z2UgZmF2b3VyIHRvIGNob29zZSBhIHBhc3Nw aHJhc2UgdGhhdCB0YWtlcyBpbiBleGNlc3Mgb2YgYSBmZXcgdGhvdXNhbmQgeWVhcnMgdG8g Y3JhY2suIFRoZSBsb25nZXIgdGhlIGJldHRlci4gUmVtZW1iZXIgdGhpcyBpcyBiYXNlZCBv biBhIGJydXRlIGZvcmNlIGF0dGFjayB1c2luZyBhIHNpbmdsZSBkZXNrdG9wIFBDICYjODIx Mjsgbm90IGEgbWFpbmZyYW1lIG9yIGEgUEMgZmFybSAmIzgyMTI7IGFuZCBpdCBkb2VzIG5v dCB0YWtlIGludG8gYWNjb3VudCBob3cgZWFzeSB0aGUgcGFzc3dvcmQgaXMgdG8gZ3Vlc3Mg aWYgeW91IHVzZSBkaWN0aW9uYXJ5IHdvcmRzIG9yIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9ibG9nL2Nob29zaW5nLWEtYnJpbGxpYW50LXBhc3N3b3JkIj5zb21lIG90aGVy IGJhZCBwYXNzd29yZDwvYT4uIENob29zZSBhIGdvb2Qgb25lIGFuZCB5b3UgPHN0cm9uZz5z aWduaWZpY2FudGx5PC9zdHJvbmc+IHJlZHVjZSB0aGUgcHJvYmFiaWxpdHkgb2YgYSBzdWNj ZXNzZnVsIGF0dGFjay48L3A+CgoJPGgyIGlkPSJzbWRfbXVsdGlzaXRlIj5NdWx0aS1zaXRl IHNldHVwPC9oMj4KCgk8cD5JZiB5b3UgYXJlIHVzaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+JiM4MjE3O3MgbXVsdGktc2l0ZSBmZWF0dXJlIHRoZXJlIGFyZSBzb21lIGFk ZGl0aW9uYWwgdGhpbmdzIHRvIG5vdGU6PC9wPgoKCTxvbD4KCQk8bGk+WW91IHNob3VsZCBz ZXQgc21kX3Byb2dub3N0aWNzIHVwIG9uIDxlbT5lYWNoPC9lbT4gZG9tYWluIHlvdSB3aXNo IHRvIHByb3RlY3QgdG8gYXZvaWQgb3ZlcmxvYWRpbmcgb25lIGRvbWFpbiB3aXRoIGNoZWNr aW5nIHRoZW0gYWxsPC9saT4KCQk8bGk+Q2hvb3NlIGp1c3Qgb25lIG9mIHlvdXIgZG9tYWlu cyBhcyB0aGUgJiM4MjE2O21hc3RlciYjODIxNzsgd2hpY2ggd2lsbCBtb25pdG9yIHRoZSA8 c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBjb3JlIGZpbGVzPC9saT4KCQk8bGk+Q29u c2lkZXIgbW92aW5nIGFsbCB0aGUgZG9tYWlucyBpbiB0aGUgPGNvZGU+L3NpdGVzPC9jb2Rl PiBmb2xkZXIgb3V0c2lkZSBkb2Nyb290PC9saT4KCQk8bGk+RW5zdXJlIHlvdSBlbXBsb3kg YSA8Y29kZT5VbmlxdWUgcHJlZml4PC9jb2RlPiBvciB5b3VyIGNoZWNrc3VtcyBmaWxlcyB3 aWxsIGNsYXNoLCBjYXVzaW5nIG9kZCBiZWhhdmlvdXIuIFRoZSByZWNvbW1lbmRlZCBtZXRo b2QgaXMgdG8gdXNlIHRoZSA8Y29kZT5Qcm9nbm9zdGljcyBmb2xkZXI8L2NvZGU+IHNldHRp bmcgdG8gbW92ZSBhbGwgY2hlY2tzdW0gZmlsZXMgdG8gYSBjZW50cmFsIGxvY2F0aW9uICYj ODIxMjsgb3V0c2lkZSBkb2Nyb290ICYjODIxMjsgYW5kIHVzZSB0aGUgc2FtZSBkaXJlY3Rv cnkgZm9yIGFsbCBkb21haW5zLiBUaGUgPGNvZGU+VW5pcXVlIHByZWZpeDwvY29kZT4gd2ls bCB0aGVuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbTwvbGk+CgkJPGxpPlRoZSA8Y29kZT5B ZG1pbi1zaWRlIFVSTDwvY29kZT4gbWF5IHdlbGwgYmUgd3Jvbmc6IHlvdSBzaG91bGQgcHJv YmFibHkgY2hhbmdlIHRoaXMgb24gZWFjaCBkb21haW48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9 InNtZF9iZXR0ZXIiPkhlbHAgbWFrZSB0aGUgcGx1Z2luIGJldHRlcjwvaDI+CgoJPHA+SWYg c21kX3Byb2dub3N0aWNzIGRvZXMgZGV0ZWN0IHNvbWUgcm9ndWUgZWxlbWVudHMgaW4geW91 ciBmaWxlc3lzdGVtLCBwbGVhc2UgY29uc2lkZXIgc2VuZGluZyB0aGUgZm9yZW5zaWNzIHRv IHByb2dub3N0aWNzIFthdF0gc3RlZmRhd3NvbiBbZG90XSBjb20gd2l0aCBhcyBtdWNoIGlu Zm9ybWF0aW9uIGFzIHlvdSBwb3NzaWJseSBjYW4uIFlvdSBjYW4gZWl0aGVyIGRvIHRoaXMg YXV0b21hdGljYWxseSBmcm9tIHdpdGhpbiB0aGUgcGx1Z2luIChzZWUgdGhlIHNldHVwIHBh Z2UsIHRob3VnaCBub3RlIHRoZSBzZW5zaXRpdml0eSBvZiBzb21lIG9mIHRoZSBkYXRhIHNl bnQpIG9yIGNvcHkgYW5kIHBhc3RlIHJlbGV2YW50IGluZm9ybWF0aW9uIGludG8gYW4gZS1t YWlsLiBUaGUgc29ydCBvZiBzdHVmZiB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBpczo8L3A+CgoJ PHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiAoYW5kL29yIHNlcnZl cikgbG9ncyBmb3IgdGhlIHRpbWUgb2YgdGhlIGF0dGFjazwvbGk+CgkJPGxpPlRoZSBsaW5l cyBvZiB0aGUgZmlsZShzKSB0aGF0IHdlcmUgYWZmZWN0ZWQgKG9yIHRoZSBmaWxlcyBpbiB0 aGVpciBlbnRpcmV0eSk8L2xpPgoJCTxsaT5UaGUgY29udGVudCBvZiBhbnkgYWRkaXRpb25h bCBsaW5lcyBhZGRlZCBvciBhbHRlcmVkIGluIHRoZSBmaWxlczwvbGk+CgkJPGxpPllvdXIg PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8 L3NwYW4+LCBNeVNRTCBhbmQgQXBhY2hlIHZlcnNpb25zPC9saT4KCQk8bGk+WW91ciBob3N0 ZXIgY29tcGFueSBuYW1lPC9saT4KCTwvdWw+CgoJPHA+YW5kIHNvIG9uLiBBbnkgYW5kIGFs bCBpbmZvcm1hdGlvbiB3aWxsIGJlIHRyZWF0ZWQgaW4gdGhlIHN0cmljdGVzdCBjb25maWRl bmNlIG9mIGNvdXJzZS4gQW5hbHlzaW5nIHRoaXMgZGF0YSBtYXkgYWxsb3cgbWUgdG8gaW1w cm92ZSB0aGUgcGx1Z2luIGFuZCBwZXJoYXBzIGNsb3NlIGFueSBzZWN1cml0eSBob2xlcyBp biA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpdHNlbGYsIG9yIGV2ZW4gaGVscCBt YWtlIHRoZSBwbHVnaW4gbW9yZSBwcm8tYWN0aXZlIGJ5IGRldGVjdGluZyB0aGUgdmFyaW91 cyBraW5kcyBvZiBhdHRhY2sgaW4gcHJvZ3Jlc3MgYW5kIG1pbmltaXNpbmcgZGFtYWdlIHRv IHlvdXIgZmlsZSBzeXN0ZW0uIFRoYW5rcyBpbiBhZHZhbmNlIGZvciB5b3UgaGVscC48L3A+ CgoJPGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xMSBO b3YgMTAgfCAwLjEwIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MTEgTm92IDEwIHwg MC4xMSB8IEFkZGVkIElnbm9yZSBidXR0b248L2xpPgoJCTxsaT4xMiBOb3YgMTAgfCAwLjEy IHwgRml4ZWQgd2hpdGUgc2NyZWVuIG9mIGRlYXRoIG9uIEZpbGVzIDxlbT5TYXZlPC9lbT4g KGJpbmFyeSBmaWxlcyBhcmUgbm93IGxlZnQgdW5wcm9jZXNzZWQpIDsgaW1wcm92ZWQgcGVy Zm9ybWFuY2UgOyBhZGRlZCBmaWxlIHF1YW50aXR5IGNoZWNrPC9saT4KCQk8bGk+MTUgTm92 IDEwIHwgMC4xMyB8IEFsYXJtcyBwYW5lbCBub3cgYWx3YXlzIGRpc3BsYXlzIGFsbCBhbGVy dHMgYW5kIGRvZXNuJiM4MjE3O3QgaW50ZXJmZXJlIHdpdGggZmlsZSBjaGVja2luZyByb3Rh dGlvbiA7IGZpeGVkIGluY29ycmVjdCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBp biBhY2tub3dsZWRnZSBtZXNzYWdlcyAodGhhbmtzIHRoZWJvbWJzaXRlKSB0aG91Z2ggbXVs dGktc2l0ZSBpbnN0YWxsYXRpb25zIG1heSBzdGlsbCBiZSB3cm9uZyA7IHJlbW92ZWQgZHVt YiBhZG1pbi1zaWRlIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbiwg YWRkZWQgPGNvZGU+Q2hlY2sgZmlsZXMgYmV0d2VlbjwvY29kZT4gYW5kIDxzcGFuIGNsYXNz PSJjYXBzIj5UWFA8L3NwYW4+IHZlcnNpb24gYWR2aWNlIChhbGwgdGhhbmtzIHJ1dWQpIDsg dHdlYWtlZCBpbmplY3Rpb24gZGV0ZWN0b3IgOyByZWZhY3RvcmVkIGUtbWFpbCBoZWFkZXIg Y29kZTwvbGk+CgkJPGxpPjE2IE5vdiAxMCB8IDAuMTQgfCBBZGRlZCBmb3JlbnNpYyBvcHRp b25zIGZvciBoZWFkZXIgc3Bvb2ZpbmcvU1FMIGluamVjdGlvbnMgOyBjYW4gbm93IHRocm93 IDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiByZXNwb25zZSBjb2RlIG9yIGN1c3Rv bSBtZXNzYWdlL2Zvcm0gaW5zdGVhZCBvZiAmIzgyMTY7bmljZSB0cnkmIzgyMTc7IDsgd2ls ZGNhcmQgYWJpbGl0eSBmb3IgaWdub3JlZCBmaWxlcyA7IGFkZGVkIHVzZXIgY2hlY2sgYW5k IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRpciBvcHRpb24gKHRoYW5rcyBtYXZl cmljayk8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoq KiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6 MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8x MzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xv cjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQt d2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsg bWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsg Zm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246 IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxh Y2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg fQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxl dHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVw cGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZv bnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsg bWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hl bHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tn cm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUg eyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IH0K I3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBh ZGRpbmc6LjVlbSAwOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7 IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxpIHsg bWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4t dG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7 czozOiJtZDUiO3M6MzI6IjA3MzQxM2NjYTYxNWY1ZGNlODJjOTA3NmQzNDlmMGU2Ijt9