# Name: smd_prognostics v0.17 # 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 YXdzb24uY29tLyI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMTciO3M6MTE6ImRlc2NyaXB0aW9u IjtzOjY1OiJQcm8tYWN0aXZlIGRpYWdub3N0aWNzIHRoYXQgYWxhcm0gd2hlbiB0aGluZ3Mg aGF2ZSBjaGFuZ2VkIGluIFRYUCI7czo0OiJjb2RlIjtzOjY2MjgzOiIvLyBUT0RPOiBjaGVj ayBudW1iZXIgb2YgZmlsZSBhZGRpdGlvbnMgcGVyIGRpciAoaGFzaCB0aGUgZW50aXJlIGRp ciBpbiBvbmUgb3BlcmF0aW9uPykgYW5kIG9ubHkgcmVhZCB0aGUgZmlsZXMgaWYgdGhlcmUn cyBhIGRpZmZlcmVuY2UNCmdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3By b2dub3N0aWNzX2NoZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zcWxwcm90Ow0KJHNtZF9w cm9nbm9zdGljc19ldmVudCA9ICdzbWRfcHJvZ25vc3RpY3MnOw0KJHNtZF9wcm9nbm9zdGlj c19jaGVja3N1bXMgPSBydHJpbShnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4 cGF0aCwgMSksIERTKSAuIERTIC4gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgn LCAnJykuJ3NtZF9wcm9nbm9zdGljc19jaGVja3N1bXMudHh0JzsNCiRoZHJvbiA9IGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnJyk7DQokc21kX3Byb2dub3N0 aWNzX3NxbHByb3QgPSBuZXcgc21kX3Byb2dfUGhQcm90ZWN0b3IoZmFsc2UpOw0KDQppZiAo QHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3Nf c3R5bGUsICR0eHBfdXNlciwgJGV2ZW50Ow0KDQoJJHNtZF9wcm9nbm9zdGljc19wcml2cyA9 ICcxLDInOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MgPSBncHMoJ3NtZF9wcm9nbm9z dGljc19zdXBwcmVzcycpOw0KCSRzbWRfcHJvZ25vc3RpY3Nfc3R5bGUgPSBhcnJheSgNCgkJ J21zZycgPT4NCiAgICAgICAgICcuc21kX3Byb2dfd2FybiB7IG1hcmdpbjowIGF1dG8gMTBw eDsgd2lkdGg6NTAwcHg7IGJhY2tncm91bmQ6I2ZmYzsgYm9yZGVyOjJweCBkYXNoZWQgcmVk OyBwYWRkaW5nOjEwcHg7IGNvbG9yOiM0NDQ7IH0NCiAgICAgICAgICAuc21kX3Byb2dfd2Fy biBhIHsgZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6Izk2MzsgfQ0KICAgICAgICAgIC5zbWRf cHJvZ193YXJuIHNwYW4geyBmb250LXdlaWdodDpib2xkOyB9DQogICAgICAgICAgLnNtZF9w cm9nX3dhcm4gZGl2IHsgZm9udC13ZWlnaHQ6Ym9sZDsgcGFkZGluZy1ib3R0b206MTBweDsg fScsDQoJCSdzZXR1cCcgPT4NCiAgICAgICAgICcuc21kX2xhYmVsIHsgdGV4dC1hbGlnbjpy aWdodCFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRsZTsgfQ0KICAgICAgICAgIC5z bWRfcHJvZ19idG5zIGZvcm0geyBkaXNwbGF5OmlubGluZTsgfQ0KICAgICAgICAgIC5zbWRf cHJvZ25vc3RpY3Nfc2V0dXAgaDMgeyBtYXJnaW46MjVweCAwIDA7IH0nLA0KCQknbWV0ZXIn ID0+DQogICAgICAgICAnI3NtZF9wcm9nX21ldGVyIHsgbWFyZ2luOjAgYXV0bzsgYm9yZGVy OjFweCBzb2xpZCAjY2NjOyB3aWR0aDozNjBweDsgcGFkZGluZzo1cHg7IGZvbnQtc2l6ZTox MjAlOyB9DQogICAgICAgICAgLnNtZF9wcm9nX3Bhc3Nfc3RyZW5ndGggeyBjb2xvcjpncmVl bjsgZm9udC13ZWlnaHQ6Ym9sZDsgfScsDQoJCSdhZHZpY2UnID0+DQogICAgICAgICAnLnNt ZF9wcm9nX2FkdmljZSB7IHdpZHRoOjc1MHB4OyB9DQogICAgICAgICAgI2xpc3Quc21kX3By b2dfYWR2aWNlIHRkIHsgcGFkZGluZzo1cHg7IH0NCiAgICAgICAgICAuc21kX3Byb2dfYnRu cyB7IHdpZHRoOjE0MHB4OyB9JywNCgkpOw0KDQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJp dnMiLCAidHhwX3VzZXJzIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCR0eHBfdXNlcikuIiciKTsN CgkkdXNlcnMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3VzZXJzJywgJycpOw0KCSRh bGxvdyA9ICgkdXNlcnMpID8gaW5fYXJyYXkoJHR4cF91c2VyLCBkb19saXN0KCR1c2Vycykp IDogdHJ1ZTsNCglpZiAoJGFsbG93KSB7DQoJCWFkZF9wcml2cygkc21kX3Byb2dub3N0aWNz X2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZzKTsNCgkJYWRkX3ByaXZzKCdwbHVnaW5f cHJlZnMuJy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX3ByaXZz KTsNCgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJHNtZF9wcm9nbm9zdGljc19ldmVu dCwgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NtZF9wcm9nbm9zdGljcycpKTsNCgkJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljc19zZXR1cCcsICdwbHVnaW5fcHJlZnMuJy4k c21kX3Byb2dub3N0aWNzX2V2ZW50KTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9n bm9zdGljc19kaXNwYXRjaGVyJywgJHNtZF9wcm9nbm9zdGljc19ldmVudCk7DQoJfQ0KDQoJ Ly8gUGFzc3dvcmQgY2hlY2tlciBnb2VzIG9uIHRoZSBBZG1pbi0+VXNlcnMgdGFiIGZvciBh bGwgdXNlcnMNCglpZiAoJGV2ZW50ID09ICdhZG1pbicpIHsNCgkJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF9wcm9nbm9zdGljc19jaHJvbm9zdHJlbmd0aCcsICdhZG1pbl9zaWRlJywgJ2hl YWRfZW5kJyk7DQoJfQ0KDQoJaWYgKCRoZHJvbikgew0KCQlyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVhZGVycycsICdhZG1pbl9zaWRlJywgJ2hlYWRf ZW5kJyk7DQoJfQ0KDQoJLy8gQWRtaW4gc2lkZSBjYWxsYmFjayBmb3IgY2hlY2tpbmcgZmls ZXMNCglpZiAoISRzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3MgJiYgaW5fYXJyYXkoJHByaXZz LCBkb19saXN0KCRzbWRfcHJvZ25vc3RpY3NfcHJpdnMpKSkgew0KCQlyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3Byb2dub3N0aWNzJywgJ2FkbWluX3NpZGUnLCAncGFnZXRvcF9lbmQnKTsN Cgl9DQp9DQoNCi8vIFB1YmxpYyBzaWRlIGNhbGxiYWNrcw0KaWYgKHN0cnBvcyhnZXRfcHJl Zignc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlJywgJycpLCAncHVibGljJykgIT09IGZh bHNlKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9zdGljcycsICdwcmV0ZXh0 Jyk7DQp9DQppZiAoJGhkcm9uKSB7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9wcm9nbm9z dGljc19yZXF1ZXN0X2hlYWRlcnMnLCAncHJldGV4dCcpOw0KfQ0KaWYgKHN0cnBvcyhnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3QnLCAnc21kX25vJyksICdzbWRfbm8n KSA9PT0gZmFsc2UpIHsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QnLCAncHJldGV4dCcpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19kaXNwYXRjaGVyKCRldnQsICRzdHApIHsN CglpZighJHN0cCBvciAhaW5fYXJyYXkoJHN0cCwgYXJyYXkoDQoJCQknc21kX3Byb2dub3N0 aWNzX2ZpbGVzJywNCgkJCSdzbWRfcHJvZ25vc3RpY3Nfc2V0dXAnLA0KCQkJJ3NtZF9wcm9n bm9zdGljc19hZHZpY2UnLA0KCQkJJ3NtZF9wcm9nbm9zdGljc19hY2snLA0KCQkpKSkgew0K CQlzbWRfcHJvZ25vc3RpY3Nfc2V0dXAoJycpOw0KCX0gZWxzZSAkc3RwKCk7DQp9DQoNCi8v IFN0dWIgdG8gY2FsbCB0aGUgdmVyaWZpY2F0aW9uIGNvZGUgZnJvbSB0aGUgVVJMDQpmdW5j dGlvbiBzbWRfcHJvZ25vc3RpY3MoJGV2dCwgJHN0cCkgew0KCXJldHVybiBzbWRfZG9fcHJv Z25vc3RpY3MoKTsNCn0NCg0KLy8gVmVyaWZ5IHRoZSBmaWxlIGNoZWNrc3Vtcw0KLy8gJG1v ZGUgPSAwOiBub3JtYWwgLyAxOiBubyB1cGRhdGUgKHJldHVybiBhcnJheXMgb25seSkgLyAy OiBzaWxlbnQgdXBkYXRlDQpmdW5jdGlvbiBzbWRfZG9fcHJvZ25vc3RpY3MoJG1vZGU9MCkg ew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3Byb2dub3N0aWNzX2No ZWNrc3VtcywgJHNtZF9wcm9nbm9zdGljc19zdHlsZTsNCg0KCSRub3cgPSB0aW1lKCk7DQoJ JG5vayA9ICRtaXNzID0gJGFkZGVkID0gJGFsbGZpbGVzID0gJGhhc2hkb3duID0gJGhhc2ht b2QgPSBhcnJheSgpOw0KCSR0aW1lbm93ID0gZGF0ZSgnSDppOnMnLCAkbm93KTsNCglsaXN0 KCRiZWcsICRlbmQpID0gZG9fbGlzdChnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNr X2JldHdlZW4nLCAnfCcpLCAnfCcpOyAvLyBEZWZhdWx0IGlzIHBpcGUgc28gd2UgY2FuIGd1 YXJhbnRlZSB0d28gcmV0dXJuIHZhbHMNCgkkdGRpZmYgPSAoJG1vZGU9PTEgfHwgKCRub3cg LSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3RjaGVjaycsIDApID4gZ2V0X3ByZWYo J3NtZF9wcm9nbm9zdGljc19jaGVja19mcmVxJywgMzYwMCkpICYmICgkdGltZW5vdz4kYmVn KSAmJiAoJHRpbWVub3c8JGVuZCkgKSA/IHRydWUgOiBmYWxzZTsNCg0KCS8vIFBhcnRzIHNo YW1lbGVzc2x5IHBsYWdpYXJpc2VkIGZyb20gdHhwX2RpYWcNCglpZiAoJHRkaWZmKSB7DQoJ CSRzdW1oYXNoID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1oYXNoJywgTlVMTCwg KCRtb2RlPT0xID8gMSA6IDApKTsNCgkJJGxvb2thdCA9IGdldF9wcmVmKCdzbWRfcHJvZ25v c3RpY3NfY2hlY2tfZm9yJywgJycpOw0KCQkkYWRkcyA9IChzdHJwb3MoJGxvb2thdCwgJ2Fk ZCcpICE9PSBmYWxzZSk7DQoJCSRkZWxzID0gKHN0cnBvcygkbG9va2F0LCAnZGVsZXRlJykg IT09IGZhbHNlKTsNCgkJJG1vZHMgPSAoc3RycG9zKCRsb29rYXQsICdtb2RpZnknKSAhPT0g ZmFsc2UpOw0KDQoJCWlmICgkY3MgPSBAZmlsZSgkc21kX3Byb2dub3N0aWNzX2NoZWNrc3Vt cykpIHsNCgkJCSRoYXNoID0gbWQ1KHNtZF9wcm9nbm9zdGljc19wcmVwX2ZpbGUoJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXMpKTsNCgkJCWlmICgkaGFzaCAhPSAkc3VtaGFzaCkgew0K CQkJCSRoYXNobW9kW10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCgkJCX0gZWxz ZSB7DQoJCQkJJGN0ciA9IDA7DQoJCQkJJHF0eV9wZXIgPSAoKCRxdHkgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eScsICcnKSkgPT0gJycpID8gY291bnQoJGNzKSA6 ICRxdHk7DQoJCQkJJHNvX2ZhciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcXR5X3Nv X2ZhcicsIDApOw0KCQkJCSR1bnRpbCA9ICRzb19mYXIgKyAkcXR5X3BlcjsNCgkJCQlmb3Jl YWNoICgkY3MgYXMgJGMpIHsNCgkJCQkJaWYgKHByZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4q KVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJCQlsaXN0KCwkZmlsZSwkbWQ1KSA9ICRt Ow0KCQkJCQkJaWYgKCRkZWxzICYmICFmaWxlX2V4aXN0cygkZmlsZSkpIHsNCgkJCQkJCQkk bWlzc1tdID0gJGZpbGU7DQoJCQkJCQl9IGVsc2UgaWYgKCRtb2RzICYmICRtZDUgIT0gJ05V TEwnKSB7DQoJCQkJCQkJaWYgKCBmaWxlX2V4aXN0cygkZmlsZSkgJiYgKCAoKCRjdHIgPj0g JHNvX2ZhcikgJiYgKCRjdHIgPCAkdW50aWwpIHx8ICRtb2RlID09IDEpICkgKSB7DQoJCQkJ CQkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJCQkJ CQkJCWlmICgobWQ1KCRjb250ZW50KSAhPSAkbWQ1KSAmJiAoJGZpbGUgIT0gJHNtZF9wcm9n bm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQkJCQkJCQkkbm9rW10gPSAkZmlsZTsNCgkJCQkJ CQkJfQ0KCQkJCQkJCX0NCgkJCQkJCQkkY3RyKys7DQoJCQkJCQl9DQoJCQkJCQkkYWxsZmls ZXNbXSA9ICRmaWxlOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJLy8gU3Rhc2ggdGhlIHN0b3J5 IHNvIGZhciByZWFkeSBmb3IgbmV4dCB0aW1lIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQNCgkJ CQlpZiAoJG1vZGUgIT0gMSkgew0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3F0 eV9zb19mYXInLCAoKCR1bnRpbCA8ICRjdHIpID8gJHVudGlsIDogMCksICdzbWRfcHJvZ25v cycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJCX0NCgkJCQlpZiAoJGFkZHMp IHsNCgkJCQkJJGZpbGVsaXN0ID0gc21kX3Byb2dub3N0aWNzX3JlYWRmaWxlcygpOw0KCQkJ CQkkYWRkZWQgPSBhcnJheV9kaWZmKCRmaWxlbGlzdCwgJGFsbGZpbGVzKTsNCgkJCQl9DQoN CgkJCQlpZiAoJG1vZGUgIT0gMSkgew0KCQkJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNz X2xhc3RjaGVjaycsICRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9p bnB1dCcpOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsNCgkJCS8vIEZpbGUgZG9lc24ndCBl eGlzdA0KCQkJJGhhc2hkb3duW10gPSAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCgkJ fQ0KCX0NCg0KCS8vIEFzc2VtYmxlIG1lc3NhZ2UNCglpZiAoJG5vayB8fCAkbWlzcyB8fCAk YWRkZWQgfHwgJGhhc2hkb3duIHx8ICRoYXNobW9kKSB7DQoJCWlmICgkbW9kZT09MSkgew0K CQkJcmV0dXJuIGFycmF5KCRub2ssICRtaXNzLCAkYWRkZWQsICRoYXNoZG93biwgJGhhc2ht b2QpOw0KCQl9IGVsc2Ugew0KCQkJJHZpYSA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nf bm90aWZ5X3ZpYScsICcnKTsNCgkJCSRkZXRlY3QgPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX2xhc3RkZXRlY3QnLCAnJyk7DQoJCQkkbGFzdHMgPSBleHBsb2RlKCcsJywgZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgMCkpOw0KCQkJJGZyZXFzID0gZXhwbG9k ZSgnLCcsIGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsIDg2NDAwKSk7 DQoJCQlpZiAoIWlzc2V0KCRsYXN0c1sxXSkpIHsNCgkJCQkkbGFzdHNbMV0gPSAkbGFzdHNb MF07DQoJCQl9DQoJCQlpZiAoIWlzc2V0KCRmcmVxc1sxXSkpIHsNCgkJCQkkZnJlcXNbMV0g PSAkZnJlcXNbMF07DQoJCQl9DQoNCgkJCSRsYXN0YWN0X3R4cCA9ICgkbW9kZSA8IDIgJiYg KCRub3cgLSAkbGFzdHNbMF0gPiAkZnJlcXNbMF0pKSA/IHRydWUgOiBmYWxzZTsNCgkJCSRs YXN0YWN0X21haWwgPSAoJG1vZGUgPCAyICYmICgkbm93IC0gJGxhc3RzWzFdID4gJGZyZXFz WzFdKSkgPyB0cnVlIDogZmFsc2U7DQoJCQkkbGFzdG1zZyA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3NfbGFzdG1zZycsICcnKTsNCg0KCQkJJHN1YmplY3QgPSBzbWRfcHJvZ25vc3Rp Y3NfZ1R4dCgnc3ViamVjdCcpOw0KCQkJJG1zZyA9IGpvaW4oJ3wnLCBhcnJheV9tZXJnZSgk aGFzaGRvd24sICRoYXNobW9kLCAkbm9rLCAkbWlzcywgJGFkZGVkKSk7DQoNCgkJCWlmIChA dHhwaW50ZXJmYWNlID09ICdhZG1pbicgJiYgc3RycG9zKCR2aWEsICd0eHAnKSAhPT0gZmFs c2UpIHsNCgkJCQlpZiAoJGxhc3RhY3RfdHhwIHx8ICgkbGFzdG1zZyAhPSBtZDUoJG1zZykp KSB7DQoJCQkJCSR0eHBkaXIgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3R4cGRpcics IGh1LnNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1pbl9kaXIoKSk7DQoJCQkJCSRvdXQgPSAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ21zZydd Lic8L3N0eWxlPjxkaXYgY2xhc3M9InNtZF9wcm9nX3dhcm4iPjxkaXY+Jy4kc3ViamVjdC4n PC9kaXY+Jy4NCgkJCQkJCSgoJGhhc2hkb3duKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19n VHh0KCdwcmVhbWJsZV9oYXNoZG93bicpLic8L3A+PHVsPjxsaT4nLmpvaW4oJzwvbGk+PGxp PicsJGhhc2hkb3duKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRoYXNobW9kKSA/ ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9oYXNobW9kJykuJzwvcD48 dWw+PGxpPicuam9pbignPC9saT48bGk+JywkaGFzaG1vZCkuJzwvbGk+PC91bD4nIDogJycp Lg0KCQkJCQkJKCgkbm9rKSA/ICc8cD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9ub2snKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRub2spLic8L2xpPjwv dWw+JyA6ICcnKS4NCgkJCQkJCSgoJG1pc3MpID8gJzxwPicuc21kX3Byb2dub3N0aWNzX2dU eHQoJ3ByZWFtYmxlX21pc3MnKS4nPC9wPjx1bD48bGk+Jy5qb2luKCc8L2xpPjxsaT4nLCRt aXNzKS4nPC9saT48L3VsPicgOiAnJykuDQoJCQkJCQkoKCRhZGRlZCkgPyAnPHA+Jy5zbWRf cHJvZ25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfYWRkZWQnKS4nPC9wPjx1bD48bGk+Jy5qb2lu KCc8L2xpPjxsaT4nLCRhZGRlZCkuJzwvbGk+PC91bD4nIDogJycpLg0KCQkJCQkJJzxwPjxh IGhyZWY9IicuJHR4cGRpci4nL2luZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3Nf ZXZlbnQuJyYjMzg7c3RlcD1zbWRfcHJvZ25vc3RpY3NfYWNrJnNtZF9wcm9nbm9zdGljc19z dXBwcmVzcz0xIj4nLg0KCQkJCQkJc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bvc3RhbWJsZScp Lic8L2E+PC9wPjwvZGl2Pic7DQoNCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19s YXN0YWN0JywgJG5vdy4nLCcuJGxhc3RzWzFdLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERF TiwgJ3RleHRfaW5wdXQnKTsNCgkJCQkJZWNobyAkb3V0Ow0KCQkJCX0NCgkJCX0NCg0KCQkJ aWYgKHN0cnBvcygkdmlhLCAnZW1haWwnKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJGxhc3Rh Y3RfbWFpbCB8fCAoJGxhc3Rtc2cgIT0gbWQ1KCRtc2cpKSkgew0KCQkJCQkkdG8gPSBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX21haWx0bycsICcnKTsNCgkJCQkJaWYgKCR0bykgew0K CQkJCQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9wcm9nbm9z dGljcycpOw0KCQkJCQkJJGJvZHkgPQ0KCQkJCQkJCSgoJGhhc2hkb3duKSA/IG4uc21kX3By b2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2hhc2hkb3duJykubi5uLmpvaW4obiwkaGFzaGRv d24pIDogJycpLg0KCQkJCQkJCSgoJGhhc2htb2QpID8gbi5zbWRfcHJvZ25vc3RpY3NfZ1R4 dCgncHJlYW1ibGVfaGFzaG1vZCcpLm4ubi5qb2luKG4sJGhhc2htb2QpIDogJycpLg0KCQkJ CQkJCSgoJG5vaykgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJsZV9ub2snKS5u Lm4uam9pbihuLCRub2spIDogJycpLg0KCQkJCQkJCSgoJG1pc3MpID8gbi5uLnNtZF9wcm9n bm9zdGljc19nVHh0KCdwcmVhbWJsZV9taXNzJykubi5uLmpvaW4obiwkbWlzcykgOiAnJyku DQoJCQkJCQkJKCgkYWRkZWQpID8gbi5uLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9hZGRlZCcpLm4ubi5qb2luKG4sJGFkZGVkKSA6ICcnKS4NCgkJCQkJCQluLm4uJzxhIGhy ZWY9IicuJGhkcnNbJ3R4cGRpciddLicvaW5kZXgucGhwP2V2ZW50PScuJHNtZF9wcm9nbm9z dGljc19ldmVudC4nJnN0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nf c3VwcHJlc3M9MSI+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncG9zdGFtYmxlJykuJzwvYT4n Ow0KCQkJCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMnXSk7 DQoJCQkJCX0NCgkJCQkJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0YWN0JywgJGxh c3RzWzBdLicsJy4kbm93LCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5w dXQnKTsNCgkJCQl9DQoJCQl9DQoJCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rt c2cnLCBtZDUoJG1zZyksICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1 dCcpOw0KCQkJaWYgKCRsYXN0bXNnICE9IG1kNSgkbXNnKSkgew0KCQkJCWlmICgkZGV0ZWN0 ID09ICcnKSB7DQoJCQkJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcs ICRub3csICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQkJ CX0gZWxzZSB7DQoJCQkJCSRkZXRlY3QgPSBleHBsb2RlKCcsJywkZGV0ZWN0KTsNCgkJCQkJ c2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19sYXN0ZGV0ZWN0JywgJGRldGVjdFswXS4nLCcu JG5vdywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJ fQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tICBDYXRjaCB1bmV4cGVjdGVk IHJlcXVlc3QgaGVhZGVycw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3JlcXVlc3RfaGVh ZGVycygkZXZ0LCAkc3RwKSB7DQoJJGJsb2NrID0gZXhwbG9kZSgnfCcsIGdldF9wcmVmKCdz bWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMnLCAnJykpOw0KCSRoZHIgPSBzZXJ2ZXJTZXQo J1JFUVVFU1RfTUVUSE9EJyk7DQoNCglpZiAoaW5fYXJyYXkoJGhkciwgJGJsb2NrKSkgew0K CQkkc2VuZCA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNp Y3MnKSwgJ2hkcicpICE9PSBmYWxzZSk7DQoNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9m ZiBpZiBuZWNlc3NhcnkNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWls dG9fY3NpJywgJycpOw0KCQlpZiAoJHRvICYmICRzZW5kKSB7DQoJCQkkc3ViamVjdCA9IHNt ZF9wcm9nbm9zdGljc19nVHh0KCdzdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJv Z25vc3RpY3NfaGVhZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPSBu LnNtZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfbm90X2FsbG93ZWQnLCBhcnJheSgne3JlcX0n ID0+ICRoZHIpKS5uOw0KCQkJZm9yZWFjaCAoJF9TRVJWRVIgKyAkX1JFUVVFU1QgKyAkX0VO ViBhcyAka2V5ID0+ICR2YXIpIHsNCgkJCQkkYm9keSAuPSBuLiRrZXkuJzogJy4kdmFyOw0K CQkJfQ0KCQ0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRlcnMn XSk7DQoJCX0NCg0KCQkvL1RPRE86IG9mZmVyIGFsdGVybmF0aXZlIGRpZSBtZWNoYW5pc21z IGxpa2UgU1FMIGF0dGFja3M/DQoJCWV4aXQoMSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0t ICBTUUwgaW5qZWN0aW9uIGRldGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3Nx bF9pbmplY3QoKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3Nfc3FscHJvdCwgJHBlcm1s aW5rX21vZGU7DQoNCgkvLyBEZXRlcm1pbmUgY29tbWVudCBwcmV2aWV3IHN0ZXAgYW5kIGln bm9yZSBpZiBzbw0KCSRpc19wcmV2dSA9IGZhbHNlOw0KCSRjb20gPSBwc2EoYXJyYXkoDQoJ CSdwYXJlbnRpZCcsDQoJCSdwcmV2aWV3JywNCgkJJ2JhY2twYWdlJywNCgkpKTsNCglpZiAo JGNvbVsncHJldmlldyddKSB7DQoJCSR1cmxwYXJ0cyA9IGV4cGxvZGUoJy8nLCAkY29tWydi YWNrcGFnZSddKTsNCgkJJG51bSA9ICgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knKSA/IDEg OiBjb3VudCgkdXJscGFydHMpOw0KCQkkYXJ0aWMgPSBzYWZlX2ZpZWxkKCdpZCcsJ3RleHRw YXR0ZXJuJywgIklEPSIuZG9TbGFzaCgkY29tWydwYXJlbnRpZCddKS4oKCRudW0gPiAxKSA/ ICIgQU5EIHVybF90aXRsZT0nIi5kb1NsYXNoKCR1cmxwYXJ0c1skbnVtLTFdKS4iJyIgOiAn JykpOw0KCQkkaXNfcHJldnUgPSAoJGFydGljKSA/IHRydWUgOiBmYWxzZTsNCgl9DQoJaWYo ISRpc19wcmV2dSAmJiAkc21kX3Byb2dub3N0aWNzX3NxbHByb3QtPmlzTWFsaWNpb3VzKCkp IHsNCgkJJG9wdHMgPSBkb19saXN0KGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3Nfc3FsX2lu amVjdCcsICd8JyksICd8Jyk7DQoJCSRibG9rID0gKHN0cnBvcygkb3B0c1swXSwgJ3NtZF9i bG9jaycpICE9PSBmYWxzZSk7DQoJCSRzZW5kID0gKHN0cnBvcyhnZXRfcHJlZignc21kX3By b2dub3N0aWNzX3J0X2ZvcmVuc2ljcycpLCAnc3FsJykgIT09IGZhbHNlKTsNCgkJJHZlciA9 IChkZWZpbmVkKCd0eHBfdmVyc2lvbicpKSA/IHR4cF92ZXJzaW9uIDogZ2V0X3ByZWYoJ3Zl cnNpb24nLCAnJyk7DQoNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9mZiBpZiBuZWNlc3Nh cnkNCgkJJHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpJywgJycp Ow0KCQlpZiAoJHRvICYmICRzZW5kKSB7DQoJCQkkc3ViamVjdCA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdzdWJqZWN0X2NzaScpOw0KCQkJJGhkcnMgPSBzbWRfcHJvZ25vc3RpY3NfaGVh ZGVyX2luZm8oJ3NtZF9mcm9nbm9zdGljcycpOw0KCQkJJGJvZHkgPSBuLnNtZF9wcm9nbm9z dGljc19nVHh0KCdwcmVhbWJsZV9zcWxfaW5qZWN0JykubjsNCgkJCSRib2R5IC49ICgoJHZl cikgPyAnVFhQOiAnIC4gJHZlciAubiA6ICcnKSAuICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkg Lm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxh YmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAnQXBhY2hlOiAnIC4gYXBhY2hlX2dldF92 ZXJzaW9uKCkubiA6ICcnKTsNCgkJCWZvcmVhY2ggKCRfU0VSVkVSICsgJF9SRVFVRVNUICsg JF9FTlYgYXMgJGtleSA9PiAkdmFyKSB7DQoJCQkJJGJvZHkgLj0gbi4ka2V5Lic6ICcuJHZh cjsNCgkJCX0NCg0KCQkJbWFpbCgkdG8sICRzdWJqZWN0LCAkYm9keSwgJGhkcnNbJ2hlYWRl cnMnXSk7DQoJCX0NCg0KCQlpZiAoaXNzZXQoJG9wdHNbMV0pICYmICFlbXB0eSgkb3B0c1sx XSkpIHsNCgkJCSRwYXJ0cyA9IGRvX2xpc3QoJG9wdHNbMV0sICc6Jyk7DQoJCQlpZiAoJHBh cnRzWzBdID09ICd0eHBfZm9ybScpIHsNCgkJCQkkbXNnID0gcGFyc2VfZm9ybSgkcGFydHNb MV0pOw0KCQkJfSBlbHNlIHsNCgkJCQkkbXNnID0gJG9wdHNbMV07DQoJCQl9DQoJCX0gZWxz ZSB7DQoJCQkkbXNnID0gJyc7DQoJCX0NCg0KCQlpZiAoJGJsb2spIHsNCgkJCWVjaG8gJG1z ZzsNCgkJCWV4aXQoMSk7DQoJCX0gZWxzZSB7DQoJCQl0eHBfZGllKCRtc2csICRvcHRzWzBd KTsNCgkJfQ0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEFkbWluLXNpZGUg cGFuZWxzDQovLyAtLS0tLS0tLS0tLS0tLS0tLQ0KLy8gLS0tLS0tLS0tLSAgQWxhcm0gYWNr bm93bGVkZ2VtZW50DQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfYWNrKCRtc2c9JycpIHsN CglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9zdGljc19jaGVj a3N1bXMsICRwcmVmczsNCg0KCSRzdWJtaXQgPSBncHMoJ3N1Ym1pdCcpOw0KCSRpZ25vcmUg PSBncHMoJ2lnbm9yZScpOw0KCSRjc2kgPSBncHMoJ2NzaScpOw0KDQoJJGFjayA9IGdwcygn c2VsZWN0ZWQnKTsNCgkkc21kX3Byb2dfYWNrID0gKGlzX2FycmF5KCRhY2spKSA/ICRhY2sg OiAoKCRhY2spID8gYXJyYXkoJGFjaykgOiBhcnJheSgpKTsNCg0KCSRvdXQgPSBhcnJheSgp Ow0KDQoJaWYgKCRzdWJtaXQgfHwgJGlnbm9yZSkgew0KCQlpZiAoJGNzID0gQGZpbGUoJHNt ZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSB7DQoJCQlmb3JlYWNoICgkY3MgYXMgJGMpIHsN CgkJCQlpZiAocHJlZ19tYXRjaCgnQF4oXFMrKTogXCgoLiopXCkkQCcsIHRyaW0oJGMpLCAk bSkpIHsNCgkJCQkJbGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQkJaWYgKCgka2V5ID0g YXJyYXlfc2VhcmNoKCRmaWxlLCAkc21kX3Byb2dfYWNrKSkgIT09IGZhbHNlKSB7DQoJCQkJ CQlpZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7DQoJCQkJCQkJJGNvbnRlbnQgPSBzbWRfcHJv Z25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJCQkkb3V0W10gPSAkZmlsZS4nOiAo Jy4oICgkaWdub3JlKSA/ICdOVUxMJyA6IG1kNSgkY29udGVudCkgKS4nKSc7DQoJCQkJCQl9 DQoJCQkJCQkvLyBSZW1vdmUgZmlsZXMgdGhhdCBhbHJlYWR5IGhhdmUgY2hlY2tzdW1zIHNv IHdlJ3JlIGxlZnQgd2l0aCBhZGRpdGlvbnMNCgkJCQkJCXVuc2V0KCRzbWRfcHJvZ19hY2tb JGtleV0pOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJG91dFtdID0gdHJpbSgkYyk7DQoJCQkJ CX0NCgkJCQl9DQoJCQl9DQoNCgkJCS8vIFRhY2sgb24gYW55IG5ldyBmaWxlcw0KCQkJZm9y ZWFjaCAoJHNtZF9wcm9nX2FjayBhcyAkZmlsZSkgew0KCQkJCWlmIChmaWxlX2V4aXN0cygk ZmlsZSkgJiYgJGZpbGUgIT0gJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpIHsNCgkJCQkJ JGNvbnRlbnQgPSBzbWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRmaWxlKTsNCgkJCQkJJG91 dFtdID0gJGZpbGUuJzogKCcuKCAoJGlnbm9yZSkgPyAnTlVMTCcgOiBtZDUoJGNvbnRlbnQp ICkuJyknOw0KCQkJCX0NCgkJCX0NCgkJCSRmaCA9IGZvcGVuKCRzbWRfcHJvZ25vc3RpY3Nf Y2hlY2tzdW1zLCAidyIpOw0KCQkJZndyaXRlKCRmaCwgam9pbihuLCAkb3V0KSk7DQoJCQlm Y2xvc2UoJGZoKTsNCgkJCXNtZF9wcm9nbm9zdGljc19zZWxmX2hhc2goKTsNCgkJCSRtc2cg PSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYWNrZWQnKTsNCgkJfQ0KCX0NCglpZiAoJGNzaSAm JiAkc21kX3Byb2dfYWNrKSB7DQoJCSAkbXNnID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ2Nz aV9zZW50Jyk7DQoJfSBlbHNlIGlmICgkY3NpKSB7DQoJCSAkbXNnID0gc21kX3Byb2dub3N0 aWNzX2dUeHQoJ25vbmVfc2VsZWN0ZWQnKTsNCgl9DQoNCglwYWdldG9wKHNtZF9wcm9nbm9z dGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3MnKSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJv Z25vc3RpY3NfYnV0dG9ucygpKTsNCg0KCWxpc3QoJG5vaywgJG1pc3MsICRhZGRlZCwgJGhh c2hkb3duLCAkaGFzaG1vZCkgPSBzbWRfZG9fcHJvZ25vc3RpY3MoMSk7DQoJJG5vayA9IGlz X2FycmF5KCRub2spID8gJG5vayA6IGFycmF5KCk7DQoJJG1pc3MgPSBpc19hcnJheSgkbWlz cykgPyAkbWlzcyA6IGFycmF5KCk7DQoJJGFkZGVkID0gaXNfYXJyYXkoJGFkZGVkKSA/ICRh ZGRlZCA6IGFycmF5KCk7DQoJJGhhc2htb2QgPSBpc19hcnJheSgkaGFzaG1vZCkgPyAkaGFz aG1vZCA6IGFycmF5KCk7DQoJJGVycm51bSA9IGNvdW50KGFycmF5X21lcmdlKCRub2ssICRt aXNzLCAkYWRkZWQsICRoYXNobW9kKSk7DQoJJGZvcmVuc2ljcyA9IGFycmF5KCk7DQoJJGxm b3JtID0gJ1ktbS1kIEg6aTpzJzsNCg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRhYmxlKCdsaXN0 Jyk7DQoJZWNobyB0cih0ZGEoc3Ryb25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfYWNr JykpLCAnIGNvbHNwYW49IjMiJykgLiB0ZGEoJGJ0blNldHVwLiRidG5GaWxlcy4kYnRuQWR2 aWNlLCAkYnRuU3R5bGUpICk7DQoJZWNobyAnPGZvcm0gbmFtZT0ibG9uZ2Zvcm0iIG1ldGhv ZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4 O3N0ZXA9c21kX3Byb2dub3N0aWNzX2FjayZzbWRfcHJvZ25vc3RpY3Nfc3VwcHJlc3M9MSI+ JzsNCglpZiAoJGVycm51bSA+IDApIHsNCgkJZm9yZWFjaCgkaGFzaG1vZCBhcyAkbmF1Z2h0 eSkgew0KCQkJJHNlbCA9IGluX2FycmF5KCRuYXVnaHR5LCAkc21kX3Byb2dfYWNrKTsNCgkJ CWVjaG8gdHIodGQoY2hlY2tib3goJ3NlbGVjdGVkW10nLCAkbmF1Z2h0eSwgJHNlbCksICcn LCAnbXVsdGktZWRpdCcpLnRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbGJsX2hhc2htb2Qn KSkudGRhKCRuYXVnaHR5KSk7DQoJCX0NCgkJZm9yZWFjaCgkbm9rIGFzICRuYXVnaHR5KSB7 DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJZWNo byB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycsICdt dWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdsYmxfY2hhbmdlZCcpKS50 ZGEoJG5hdWdodHkpKTsNCgkJCWlmICgkc2VsKSB7DQoJCQkJJGZpID0gc3RhdCgkbmF1Z2h0 eSk7DQoJCQkJJGZvcmVuc2ljc1snbm9rJ11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3JlbnNp Y19vdXRwdXQoJG5hdWdodHksICRmaSk7DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVskbmF1 Z2h0eV0gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRu YXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJCWZvcmVhY2goJG1pc3MgYXMgJG5hdWdodHkpIHsN CgkJCSRzZWwgPSBpbl9hcnJheSgkbmF1Z2h0eSwgJHNtZF9wcm9nX2Fjayk7DQoJCQllY2hv IHRyKHRkKGNoZWNrYm94KCdzZWxlY3RlZFtdJywgJG5hdWdodHksICRzZWwpLCAnJywgJ211 bHRpLWVkaXQnKS50ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2xibF9taXNzaW5nJykpLnRk YSgkbmF1Z2h0eSkpOw0KCQkJaWYgKCRzZWwpIHsNCgkJCQkkZm9yZW5zaWNzWydtaXNzJ11b XSA9ICRuYXVnaHR5Ow0KCQkJfQ0KCQl9DQoJCWZvcmVhY2goJGFkZGVkIGFzICRuYXVnaHR5 KSB7DQoJCQkkc2VsID0gaW5fYXJyYXkoJG5hdWdodHksICRzbWRfcHJvZ19hY2spOw0KCQkJ ZWNobyB0cih0ZChjaGVja2JveCgnc2VsZWN0ZWRbXScsICRuYXVnaHR5LCAkc2VsKSwgJycs ICdtdWx0aS1lZGl0JykudGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdsYmxfYWRkZWQnKSku dGRhKCRuYXVnaHR5KSk7DQoJCQlpZiAoJHNlbCkgew0KCQkJCSRmaSA9IHN0YXQoJG5hdWdo dHkpOw0KCQkJCSRmb3JlbnNpY3NbJ2FkZGVkJ11bXSA9IHNtZF9wcm9nbm9zdGljc19mb3Jl bnNpY19vdXRwdXQoJG5hdWdodHksICRmaSk7DQoJCQkJJGZvcmVuc2ljc1snZmlsZXMnXVsk bmF1Z2h0eV0gPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRz KCRuYXVnaHR5KSkpOw0KCQkJfQ0KCQl9DQoJCWlmICgkc21kX3Byb2dfYWNrICYmICRwcmVm c1snbG9nZ2luZyddICE9ICdub25lJykgew0KCQkJJGRldGVjdCA9IGV4cGxvZGUoJywnLGdl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVjdCcsIHRpbWUoKSkpOw0KCQkJaWYg KCFpc3NldCgkZGV0ZWN0WzFdKSkgew0KCQkJCSRkZXRlY3RbMV0gPSAkZGV0ZWN0WzBdOw0K CQkJfQ0KCQkJJHJzID0gc2FmZV9yb3dzKCcqJywgJ3R4cF9sb2cnLCAidGltZSBCRVRXRUVO ICciIC4gZGF0ZSgkbGZvcm0sICgkZGV0ZWN0WzBdIC0gJHByZWZzWydzbWRfcHJvZ25vc3Rp Y3NfY2hlY2tfZnJlcSddKSkgLiAiJyBBTkQgJyIgLiBkYXRlKCRsZm9ybSwgKCRkZXRlY3Rb MV0gKyA1KSkgLiAiJyIpOw0KCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsNCgkJCQkkZm9y ZW5zaWNzWyd0eHBfbG9nJ11bXSA9IGpvaW4oJywnLCRyb3cpOw0KCQkJfQ0KCQl9DQoJCWVj aG8gdHIodGRhKA0KCQkJCXNlbGVjdF9idXR0b25zKCkNCgkJCSwnIGNsYXNzPSJtdWx0aS1l ZGl0IiBjb2xzcGFuPSIzIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogbm9u ZTsiJykpOw0KCQllY2hvIHRyKHRkYSgkYnRuQWNrSXQuJGJ0bklnbm9yZS4oKGdldF9wcmVm KCdzbWRfcHJvZ25vc3RpY3NfbWFpbHRvX2NzaScsICcnKSkgPyAkYnRuQ1NJIDogJycpLCAk YnRuU3R5bGUpKTsNCgl9IGVsc2Ugew0KCQllY2hvIHRyKHRkKHNtZF9wcm9nbm9zdGljc19n VHh0KCdub19hbGFybXMnKSkpOw0KCQlzZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xhc3Rk ZXRlY3QnLCAnJywgJ3NtZF9wcm9nbm9zJywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0Jyk7 DQoJfQ0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUoKTsNCg0KCWlmICgkY3Np ICYmICRmb3JlbnNpY3MpIHsNCgkJLy8gU2VuZCB0aGUgZm9yZW5zaWNzIG9mZg0KCQkkdG8g PSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX21haWx0b19jc2knLCAnJyk7DQoJCWlmICgk dG8pIHsNCgkJCSRzdWJqZWN0ID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3N1YmplY3RfY3Np Jyk7DQoJCQkkaGRycyA9IHNtZF9wcm9nbm9zdGljc19oZWFkZXJfaW5mbygnc21kX2Zyb2du b3N0aWNzJyk7DQoJCQkkYm9keSA9DQoJCQkJbi4nVFhQOiAnIC4gdHhwX3ZlcnNpb24gLm4u ICdQSFA6ICcgLiBwaHB2ZXJzaW9uKCkgLm4uICdNeVNRTDogJyAuIG15c3FsX2dldF9zZXJ2 ZXJfaW5mbygpIC5uLiAoKGlzX2NhbGxhYmxlKCdhcGFjaGVfZ2V0X3ZlcnNpb24nKSkgPyAn QXBhY2hlOiAnIC4gYXBhY2hlX2dldF92ZXJzaW9uKCkubiA6ICcnKS4NCgkJCQkoKGlzc2V0 KCRmb3JlbnNpY3NbJ25vayddKSkgPyBuLnNtZF9wcm9nbm9zdGljc19nVHh0KCdwcmVhbWJs ZV9ub2snKS5uLmpvaW4obiwkZm9yZW5zaWNzWydub2snXSkgOiAnJykuDQoJCQkJKChpc3Nl dCgkZm9yZW5zaWNzWydtaXNzJ10pKSA/IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHJl YW1ibGVfbWlzcycpLm4uam9pbihuLCRmb3JlbnNpY3NbJ21pc3MnXSkgOiAnJykuDQoJCQkJ KChpc3NldCgkZm9yZW5zaWNzWydhZGRlZCddKSkgPyBuLm4uc21kX3Byb2dub3N0aWNzX2dU eHQoJ3ByZWFtYmxlX2FkZGVkJykubi5qb2luKG4sJGZvcmVuc2ljc1snYWRkZWQnXSkgOiAn JykuDQoJCQkJKChpc3NldCgkZm9yZW5zaWNzWyd0eHBfbG9nJ10pKSA/IG4ubi5zbWRfcHJv Z25vc3RpY3NfZ1R4dCgncHJlYW1ibGVfdHhwbG9nJykubi5qb2luKG4sJGZvcmVuc2ljc1sn dHhwX2xvZyddKSA6IG4ubi5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbm9fbG9nX2VudHJpZXMn KSk7DQoJCQlpZiAoaXNzZXQoJGZvcmVuc2ljc1snZmlsZXMnXSkpIHsNCgkJCQkkYm9keSAu PSBuLm4uc21kX3Byb2dub3N0aWNzX2dUeHQoJ3ByZWFtYmxlX2ZpbGVzJyk7DQoJCQkJZm9y ZWFjaCAoJGZvcmVuc2ljc1snZmlsZXMnXSBhcyAkZm4gPT4gJGNvbnRlbnQpIHsNCgkJCQkJ JGJvZHkgLj0gbi5uLiRmbi5uLm4uJGNvbnRlbnQubjsNCgkJCQl9DQoJCQl9DQoNCgkJCW1h aWwoJHRvLCAkc3ViamVjdCwgJGJvZHksICRoZHJzWydoZWFkZXJzJ10pOw0KCQl9DQoJfQ0K fQ0KDQovLyAtLS0tLS0tLS0tIEZpbGUgbWFuYWdlbWVudA0KZnVuY3Rpb24gc21kX3Byb2du b3N0aWNzX2ZpbGVzKCRtc2c9JycpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVu dCwgJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgnc3VibWl0JykpKSk7DQoJJHNtZF9wcm9nbm9zdGljc19maWxlcyA9IGdwcygn c21kX3Byb2dub3N0aWNzX2ZpbGVzJyk7DQoJaWYgKCFpc19hcnJheSgkc21kX3Byb2dub3N0 aWNzX2ZpbGVzKSkgew0KCQkkc21kX3Byb2dub3N0aWNzX2ZpbGVzID0gYXJyYXkoKTsNCgl9 DQoNCgkkYWRkcyA9IChzdHJwb3MoZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19m b3InKSwgJ2FkZCcpICE9PSBmYWxzZSk7DQoJJGZpbGVsaXN0ID0gc21kX3Byb2dub3N0aWNz X3JlYWRmaWxlcygpOw0KCSRhbGxjb3VudCA9IGNvdW50KCRmaWxlbGlzdCk7DQoNCglpZiAo JHN1Ym1pdCkgew0KCQkkb3V0ZmlsZSA9IGFycmF5KCk7DQoJCWZvcmVhY2ggKCRzbWRfcHJv Z25vc3RpY3NfZmlsZXMgYXMgJGZpbGUpIHsNCgkJCSRjb250ZW50ID0gc21kX3Byb2dub3N0 aWNzX3ByZXBfZmlsZSgkZmlsZSk7DQoJCQkkb3V0ZmlsZVtdID0gJGZpbGUuJzogKCcubWQ1 KCRjb250ZW50KS4nKSc7DQoJCX0NCg0KCQkkZmggPSBmb3Blbigkc21kX3Byb2dub3N0aWNz X2NoZWNrc3VtcywgInciKTsNCgkJZndyaXRlKCRmaCwgam9pbihuLCAkb3V0ZmlsZSkpOw0K DQoJCWlmICgkYWRkcykgew0KCQkJJGFkZGl0aW9ucyA9IGFycmF5X2RpZmYoJGZpbGVsaXN0 LCAkc21kX3Byb2dub3N0aWNzX2ZpbGVzKTsNCgkJCSRhZGRlZCA9IGFycmF5KCk7DQoJCQlm b3JlYWNoICgkYWRkaXRpb25zIGFzICRhZGRpdGlvbikgew0KCQkJCSRhZGRlZFtdID0gJGFk ZGl0aW9uLic6IChOVUxMKSc7DQoJCQl9DQoJCQlmd3JpdGUoJGZoLCBuLmpvaW4obiwgJGFk ZGVkKSk7DQoJCX0NCgkJZmNsb3NlKCRmaCk7DQoJCXNtZF9wcm9nbm9zdGljc19zZWxmX2hh c2goKTsNCgkJc21kX2RvX3Byb2dub3N0aWNzKDIpOyAvLyBTaWxlbnRseSBhY2tub3dsZWRn ZSBhbGwgdGhlIGZpbGVzDQoJCXNldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGFzdGRldGVj dCcsICcnLCAnc21kX3Byb2dub3MnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJ JG1zZyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdmaWxlc191cGRhdGVkJyk7DQoJfQ0KDQoJ cGFnZXRvcChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc21kX3Byb2dub3N0aWNzJyksICRtc2cp Ow0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNzX2J1dHRvbnMoKSk7DQoNCgkkc21kX3Byb2du b3N0aWNzX2ZpbGVzID0gYXJyYXkoKTsNCglpZiAoJGNzID0gQGZpbGUoJHNtZF9wcm9nbm9z dGljc19jaGVja3N1bXMpKSB7DQoJCWZvcmVhY2ggKCRjcyBhcyAkYykgew0KCQkJaWYgKHBy ZWdfbWF0Y2goJ0BeKFxTKyk6IFwoKC4qKVwpJEAnLCB0cmltKCRjKSwgJG0pKSB7DQoJCQkJ bGlzdCgsJGZpbGUsJG1kNSkgPSAkbTsNCgkJCQlpZiAoJG1kNSAhPSAnTlVMTCcpIHsNCgkJ CQkJJHNtZF9wcm9nbm9zdGljc19maWxlc1tdID0gJGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9 DQoJfQ0KDQoJJG1vbmNvdW50ID0gY291bnQoJHNtZF9wcm9nbm9zdGljc19maWxlcyk7DQoN CglpZiAoJGZpbGVsaXN0KSB7DQoJCSRmaWxleiA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGZp bGVsaXN0IGFzICRrZXkgPT4gJHZhbCkgew0KCQkJJGZpbGV6WyR2YWxdID0gJGZpbGVsaXN0 WyRrZXldOw0KCSAgIH0NCgkJJGZpbGVzZWwgPSBzbWRfcHJvZ25vc3RpY3NfbXVsdGlzZWwo J3NtZF9wcm9nbm9zdGljc19maWxlcycsICRmaWxleiwgJHNtZF9wcm9nbm9zdGljc19maWxl cyk7DQoJfQ0KCSRzaG93ZmlsZXMgPSAoaXNzZXQoJGZpbGVzZWwpICYmICRmaWxlc2VsKTsN Cg0KCWVjaG8gJGJ0bkNTUy5zdGFydFRhYmxlKCdsaXN0Jyk7DQoJZWNobyB0cih0ZGEoc3Ry b25nKHNtZF9wcm9nbm9zdGljc19nVHh0KCd0dGxfZmlsZXMnKSkpIC4gdGRhKCRidG5TZXR1 cC4kYnRuQWNrLiRidG5BZHZpY2UsICRidG5TdHlsZSkgKTsNCgllY2hvIHRyKHRkY3Moc21k X3Byb2dub3N0aWNzX2dUeHQoJ2N1cnJtb24nLCBhcnJheSgne2N1cnJ9JyA9PiAkbW9uY291 bnQsICd7b3V0b2Z9JyA9PiAkYWxsY291bnQpKSAuKCgkc2hvd2ZpbGVzKSA/IGJyLmJyLiBz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnbW9uZmlsZXNfZXhwbGFpbicpIDogJycpLCAxLCA0MDAp KTsNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9w cm9nbm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19maWxlcyI+JzsN CgllY2hvICgkc2hvd2ZpbGVzKSA/IHRyKHRkYSgkZmlsZXNlbCkpIDogdHIodGRhKHNtZF9w cm9nbm9zdGljc19nVHh0KCdub19maWxlcycpKSk7DQoJZWNobyB0cih0ZGEoZklucHV0KCdo aWRkZW4nLCAnc21kX3Byb2dub3N0aWNzX3N1cHByZXNzJywgMSkuJGJ0blNhdmUsICRidG5T dHlsZSkpOw0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8g LS0tLS0tLS0tLSBTZXR1cCAvIHByZWZzDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2V0 dXAoJG1zZz0nJykgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2V2ZW50LCAkc21kX3By b2dub3N0aWNzX2NoZWNrc3VtcywgJHByZWZzOw0KDQoJJG9yaWdsb2MgPSBnZXRfcHJlZign c21kX3Byb2dub3N0aWNzX2xpc3Rsb2MnLCByZWFscGF0aCh0eHBhdGguRFMuJy4uJy5EUyku RFMsIDEpOw0KCSRvcmlnZXhjID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19leGNsdWRp cicsICdpbWFnZXMsIGZpbGVzLCB0bXAnLCAxKTsNCgkkb3JpZ2RpciA9IHJ0cmltKGdldF9w cmVmKCdzbWRfcHJvZ25vc3RpY3NfZGlyJywgcmVhbHBhdGgodHhwYXRoKSwgMSksIERTKTsN Cgkkb3JpZ3BmeCA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJycsIDEp Ow0KDQoJJHByZWZsaXN0ID0gYXJyYXkoDQoJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZnJl cScsDQoJCSdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5JywNCgkJJ3NtZF9wcm9nbm9zdGlj c19hbGFybV9mcmVxJywNCgkJJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScsDQoJCSdz bWRfcHJvZ25vc3RpY3NfbWFpbHRvJywNCgkJJ3NtZF9wcm9nbm9zdGljc19tYWlsdG9fY3Np JywNCgkJJ3NtZF9wcm9nbm9zdGljc191c2VycycsDQoJCSdzbWRfcHJvZ25vc3RpY3NfZGly JywNCgkJJ3NtZF9wcm9nbm9zdGljc19wcmVmaXgnLA0KCQknc21kX3Byb2dub3N0aWNzX2xp c3Rsb2MnLA0KCQknc21kX3Byb2dub3N0aWNzX2V4Y2x1ZGlyJywNCgkJJ3NtZF9wcm9nbm9z dGljc19pZ25vcmVzJywNCgkJJ3NtZF9wcm9nbm9zdGljc19pbmplY3Rfc2Vuc2l0aXZpdHkn LA0KCQknc21kX3Byb2dub3N0aWNzX3R4cGRpcicsDQoJKTsNCgkkd2FybmxvYyA9ICcnOw0K CSRub3RpZnkgPSBncHMoJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhJyk7DQoJJGNoZm9y ID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yJyk7DQoJJHJlcXMgPSBncHMoJ3Nt ZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycycpOw0KCSRzcWxpbiA9IGdwcygnc21kX3Byb2du b3N0aWNzX3NxbF9pbmplY3QnKTsNCgkkdHdlZW4gPSBncHMoJ3NtZF9wcm9nbm9zdGljc19j aGVja19iZXR3ZWVuJyk7DQoJJHJ0Zm9yID0gZ3BzKCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9y ZW5zaWNzJyk7DQoNCgkvLyBPbmx5IG9uZSBvZiB0aGVzZSB2YWxpZCBzdGF0dXMgY29kZXMg aXMgYWxsb3dlZCB0byBiZSB0aHJvd24NCgkkdGhyb3dfY29kZXMgPSBhcnJheSgNCgkJJ3Nt ZF9ubycgPT4gZ1R4dCgnbm8nKSwNCgkJJ3NtZF9ibG9jaycgPT4gc21kX3Byb2dub3N0aWNz X2dUeHQoJ2Jsb2NrJyksDQoJCScyMDAnID0+ICcyMDAgT0snLA0KCQknMzAxJyA9PiAnMzAx IE1vdmVkIFBlcm1hbmVudGx5JywNCgkJJzMwMicgPT4gJzMwMiBGb3VuZCcsDQoJCSczMDcn ID0+ICczMDcgVGVtcG9yYXJ5IFJlZGlyZWN0JywNCgkJJzQwMScgPT4gJzQwMSBVbmF1dGhv cml6ZWQnLA0KCQknNDAzJyA9PiAnNDAzIEZvcmJpZGRlbicsDQoJCSc0MDQnID0+ICc0MDQg Tm90IEZvdW5kJywNCgkJJzQxMCcgPT4gJzQxMCBHb25lJywNCgkJJzQxNCcgPT4gJzQxNCBS ZXF1ZXN0LVVSSSBUb28gTG9uZycsDQoJCSc1MDAnID0+ICc1MDAgSW50ZXJuYWwgU2VydmVy IEVycm9yJywNCgkJJzUwMScgPT4gJzUwMSBOb3QgSW1wbGVtZW50ZWQnLA0KCSk7DQoNCglp ZiAoIWluX2FycmF5KCR0aHJvd1swXSwgJHRocm93X2NvZGVzKSApIHsNCgkJJHRocm93WzBd ID0gJzQwMCc7DQoJfQ0KDQoJZm9yZWFjaCAoJHR3ZWVuIGFzICRpZHggPT4gJHZhbCkgew0K CQlpZiAoZW1wdHkoJHZhbCkpIHsNCgkJCSR0d2VlblskaWR4XSA9ICgkaWR4PT0wKSA/ICcw MDowMCcgOiAnMjM6NTknOw0KCQl9IGVsc2Ugew0KCQkJJHRpbWVwYXJ0cyA9IGRvX2xpc3Qo JHZhbCwgJzonKTsNCgkJCWZvcmVhY2ggKCR0aW1lcGFydHMgYXMgJG51bSkgew0KCQkJCWlm ICghaXNfbnVtZXJpYygkbnVtKSkgew0KCQkJCQkkdHdlZW5bJGlkeF0gPSAoJGlkeD09MCkg PyAnMDA6MDAnIDogJzIzOjU5JzsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJ fQ0KDQoJJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhID0gam9pbignfCcsICgoaXNfYXJy YXkoJG5vdGlmeSkpID8gJG5vdGlmeSA6IGFycmF5KCRub3RpZnkpKSk7DQoJJHNtZF9wcm9n bm9zdGljc19jaGVja19mb3IgPSBqb2luKCd8JywgKChpc19hcnJheSgkY2hmb3IpKSA/ICRj aGZvciA6IGFycmF5KCRjaGZvcikpKTsNCgkkc21kX3Byb2dub3N0aWNzX3JlcV9oZWFkZXJz ID0gam9pbignfCcsICgoaXNfYXJyYXkoJHJlcXMpKSA/ICRyZXFzIDogYXJyYXkoJHJlcXMp KSk7DQoJJHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0ID0gam9pbignfCcsICgoaXNfYXJy YXkoJHNxbGluKSkgPyAkc3FsaW4gOiBhcnJheSgkc3FsaW4pKSk7DQoJJHNtZF9wcm9nbm9z dGljc19jaGVja19iZXR3ZWVuID0gam9pbignfCcsICgoaXNfYXJyYXkoJHR3ZWVuKSkgPyAk dHdlZW4gOiBhcnJheSgkdHdlZW4pKSk7DQoJJHNtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNp Y3MgPSBqb2luKCd8JywgKChpc19hcnJheSgkcnRmb3IpKSA/ICRydGZvciA6IGFycmF5KCRy dGZvcikpKTsNCg0KCS8vIEdyYWIgdGhlIHNhdmVkIHByZWYgdmFsdWVzIGFuZCB0YWNrIG9u IHRoZSBhcnJheSBpdGVtKHMpDQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXlfbWVyZ2Uo YXJyYXkoJ3N1Ym1pdCcpLCAkcHJlZmxpc3QpKSkpOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9w cm9nbm9zdGljc19ub3RpZnlfdmlhJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3Rp Y3NfY2hlY2tfZm9yJzsNCgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfcmVxX2hl YWRlcnMnOw0KCSRwcmVmbGlzdFtdID0gJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0JzsN CgkkcHJlZmxpc3RbXSA9ICdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2Vlbic7DQoJJHBy ZWZsaXN0W10gPSAnc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVuc2ljcyc7DQoJJHNtZF9wcm9n bm9zdGljc19kaXIgPSBydHJpbSgkc21kX3Byb2dub3N0aWNzX2RpciwgRFMpOw0KDQoJaWYg KCRzdWJtaXQpIHsNCgkJaWYgKCgkc21kX3Byb2dub3N0aWNzX2RpciAhPSAkb3JpZ2Rpcikg fHwgKCRzbWRfcHJvZ25vc3RpY3NfcHJlZml4ICE9ICRvcmlncGZ4KSkgew0KCQkJaWYgKGlz X2Rpcigkc21kX3Byb2dub3N0aWNzX2RpcikgJiYgaXNfd3JpdGFibGUoJHNtZF9wcm9nbm9z dGljc19kaXIpKSB7DQoJCQkJLy8gRXZlcnl0aGluZyBPSyBzbyBkbyBub3RoaW5nIGZvciBu b3cNCgkJCX0gZWxzZSB7DQoJCQkJLy8gSWdub3JlIG5ldyBkaXIgYW5kIHJlc2V0IGl0IHRv IHdoYXQgaXQgd2FzIGJlZm9yZQ0KCQkJCSRtc2cgPSBhcnJheShzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnbm90X3dyaXRhYmxlJywgYXJyYXkoJ3tsb2NhdGlvbn0nID0+ICRzbWRfcHJvZ25v c3RpY3NfZGlyKSksIEVfV0FSTklORyk7DQoJCQkJJHNtZF9wcm9nbm9zdGljc19kaXIgPSAk b3JpZ2RpcjsNCgkJCX0NCg0KCQkJLy8gUm9vbSBmb3IgbW9yZSBjb25maWcgZmlsZXMgYXMg YW5kIHdoZW4gdGhleSBhcmUgcmVxdWlyZWQNCgkJCSRmaWxlbGlzdFtdID0gJHNtZF9wcm9n bm9zdGljc19jaGVja3N1bXM7DQoNCgkJCWZvcmVhY2ggKCRmaWxlbGlzdCBhcyAkZmlsZSkg ew0KCQkJCSRmaWxlbmFtZSA9ICRzbWRfcHJvZ25vc3RpY3NfcHJlZml4Lmx0cmltKGJhc2Vu YW1lKCRmaWxlKSwgJG9yaWdwZngpOw0KCQkJCXJlbmFtZSgkZmlsZSwgcnRyaW0oJHNtZF9w cm9nbm9zdGljc19kaXIsIERTKS5EUy4kZmlsZW5hbWUpOw0KCQkJfQ0KCQl9DQoNCgkJLy8g V3JpdGUgYWxsIHRoZSBwcmVmcw0KCQlmb3JlYWNoICgkcHJlZmxpc3QgYXMgJHByZWZ2YWwp IHsNCgkJCXNldF9wcmVmKGRvU2xhc2goJHByZWZ2YWwpLCBkb1NsYXNoKCQkcHJlZnZhbCks ICdzbWRfcHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KCQl9DQoJCWlm ICggKCRzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYyAhPSAkb3JpZ2xvYykgfHwgKCRzbWRfcHJv Z25vc3RpY3NfZXhjbHVkaXIgIT0gJG9yaWdleGMpICkgew0KCQkJJG1zZyA9IGFycmF5KHNt ZF9wcm9nbm9zdGljc19nVHh0KCd3YXJuX2xvYycpLCBFX1dBUk5JTkcpOw0KCQl9DQoJCWlm ICghJG1zZykgew0KCQkJJG1zZyA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7DQoJCX0N Cgl9DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25vc3RpY3Mn KSwgJG1zZyk7DQoNCgkkc21kX3Byb2dub3N0aWNzX2RpciA9IGdldF9wcmVmKCdzbWRfcHJv Z25vc3RpY3NfZGlyJywgdHhwYXRoLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3ByZWZpeCA9 IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJycsIDEpOw0KCSRzbWRfcHJv Z25vc3RpY3NfY2hlY2tfZm9yID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19m b3InLCAnZGVsZXRlfG1vZGlmeScsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hl cmUgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2NoZWNrX3doZXJlJywgJ2FkbWluJywg MSk7DQoJJHNtZF9wcm9nbm9zdGljc19jaGVja19mcmVxID0gZ2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc19jaGVja19mcmVxJywgMTAsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tf YmV0d2VlbiA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfY2hlY2tfYmV0d2VlbicsICcw MDowMHwyMzo1OScsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfcXR5ID0gZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19jaGVja19xdHknLCAnMzAnLCAxKTsNCgkkc21kX3Byb2du b3N0aWNzX2FsYXJtX2ZyZXEgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2FsYXJtX2Zy ZXEnLCA4NjQwMCwgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhID0gZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhJywgJycsIDEpOw0KCSRzbWRfcHJvZ25v c3RpY3NfbWFpbHRvID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19tYWlsdG8nLCAnJywg MSk7DQoJJHNtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpID0gZ2V0X3ByZWYoJ3NtZF9wcm9n bm9zdGljc19tYWlsdG9fY3NpJywgJycsIDEpOw0KCSRzbWRfcHJvZ25vc3RpY3NfdXNlcnMg PSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3VzZXJzJywgJycsIDEpOw0KCSRzbWRfcHJv Z25vc3RpY3NfbGlzdGxvYyA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfbGlzdGxvYycs IHJlYWxwYXRoKHR4cGF0aC5EUy4nLi4nLkRTKS5EUywgMSk7DQoJJHNtZF9wcm9nbm9zdGlj c19leGNsdWRpciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfZXhjbHVkaXInLCAnaW1h Z2VzLCBmaWxlcywgdG1wJywgMSk7DQoJJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzID0gZ2V0 X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19pZ25vcmVzJywgJ2Vycm9yX2xvZycsIDEpOw0KCSRz bWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNz X3JlcV9oZWFkZXJzJywgJ1RSQUNFfFBVVHxERUxFVEUnLCAxKTsNCgkkc21kX3Byb2dub3N0 aWNzX3NxbF9pbmplY3QgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3Qn LCAnMHwnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX2luamVjdF9zZW5zaXRpdml0eSA9IGdl dF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfaW5qZWN0X3NlbnNpdGl2aXR5JywgMSwgMSk7DQoJ JHNtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNpY3MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0 aWNzX3J0X2ZvcmVuc2ljcycsICcxfDEnLCAxKTsNCgkkc21kX3Byb2dub3N0aWNzX3R4cGRp ciA9IGdldF9wcmVmKCdzbWRfcHJvZ25vc3RpY3NfdHhwZGlyJywgaHUuc21kX3Byb2dub3N0 aWNzX2d1ZXNzX2FkbWluX2RpcigpLCAxKTsNCg0KCWV4dHJhY3Qoc21kX3Byb2dub3N0aWNz X2J1dHRvbnMoKSk7DQoNCgkkYWRkcyA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19jaGVj a19mb3IsICdhZGQnKSAhPT0gZmFsc2UpOw0KCSRkZWxzID0gKHN0cnBvcygkc21kX3Byb2du b3N0aWNzX2NoZWNrX2ZvciwgJ2RlbGV0ZScpICE9PSBmYWxzZSk7DQoJJG1vZHMgPSAoc3Ry cG9zKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tfZm9yLCAnbW9kaWZ5JykgIT09IGZhbHNlKTsN CgkkcmhfdHJhY2UgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnMsICdU UkFDRScpICE9PSBmYWxzZSk7DQoJJHJoX3B1dCA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGlj c19yZXFfaGVhZGVycywgJ1BVVCcpICE9PSBmYWxzZSk7DQoJJHJoX2RlbCA9IChzdHJwb3Mo JHNtZF9wcm9nbm9zdGljc19yZXFfaGVhZGVycywgJ0RFTEVURScpICE9PSBmYWxzZSk7DQoJ JHJ0X2hkciA9IChzdHJwb3MoJHNtZF9wcm9nbm9zdGljc19ydF9mb3JlbnNpY3MsICdoZHIn KSAhPT0gZmFsc2UpOw0KCSRydF9zcWwgPSAoc3RycG9zKCRzbWRfcHJvZ25vc3RpY3NfcnRf Zm9yZW5zaWNzLCAnc3FsJykgIT09IGZhbHNlKTsNCgkkdHdlZW5zID0gZG9fbGlzdCgkc21k X3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW4sICd8Jyk7DQoJJHRocm93cyA9IGRvX2xpc3Qo JHNtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0LCAnfCcpOw0KCSRoZWxwTGluayA9ICI/ZXZl bnQ9cGx1Z2luJnN0ZXA9cGx1Z2luX2hlbHAmbmFtZT0kc21kX3Byb2dub3N0aWNzX2V2ZW50 I3NtZF9zZXR1cCI7DQoNCgllY2hvICRidG5DU1Muc3RhcnRUYWJsZSgnbGlzdCcsICcnLCAn c21kX3Byb2dub3N0aWNzX3NldHVwJyk7DQoJZWNobyB0cih0ZGNzKHN0cm9uZyhzbWRfcHJv Z25vc3RpY3NfZ1R4dCgndHRsX3NldHVwJykpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdo ZWxwX2xpbmsnLCBhcnJheSgne2xpbmt9JyA9PiAkaGVscExpbmspKSwgMikgLiB0ZGEoJGJ0 bkZpbGVzLiRidG5BY2suJGJ0bkFkdmljZSwgJGJ0blN0eWxlKSApOw0KCWVjaG8gJzxmb3Jt IG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50 LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nOw0KCWVjaG8gdHIodGRjcyho ZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9tb25vcHRzJyksIDMpICwyKSk7DQoJZWNo byB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja193aGVyZScpLCAnIGNs YXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShyYWRpb1NldCgNCgkJCWFycmF5KA0KCQkJCSdh ZG1pbicgPT4gZ1R4dCgnbm8nKSwNCgkJCQknYWRtaW58cHVibGljJyA9PiBnVHh0KCd5ZXMn KQ0KCQkJKSwgJ3NtZF9wcm9nbm9zdGljc19jaGVja193aGVyZScsICRzbWRfcHJvZ25vc3Rp Y3NfY2hlY2tfd2hlcmUpLCAnIGlkPSJzbWRfcHJvZ25vc3RpY3NfY2hlY2tfd2hlcmUiJykN CgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZnJl cScpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21k X3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEnLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZyZXEs ICcnLCcnLCcnLDE1KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc2Vjb25kcycpKQ0KCSk7 DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19iZXR3ZWVu JyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJZklucHV0KCd0ZXh0Jywg J3NtZF9wcm9nbm9zdGljc19jaGVja19iZXR3ZWVuW10nLCAkdHdlZW5zWzBdLCAnJywnJywn JywxNSkuDQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnYW5kJykuDQoJCQlmSW5wdXQoJ3Rl eHQnLCAnc21kX3Byb2dub3N0aWNzX2NoZWNrX2JldHdlZW5bXScsICR0d2VlbnNbMV0sICcn LCcnLCcnLDE1KS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnaG1zJykNCgkJKQ0KCSk7DQoJ ZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdjaGVja19xdHknKSwgJyBj bGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9z dGljc19jaGVja19xdHknLCAkc21kX3Byb2dub3N0aWNzX2NoZWNrX3F0eSwgJycsJycsJycs MTUpKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdhbGFy bV9mcmVxJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcs ICdzbWRfcHJvZ25vc3RpY3NfYWxhcm1fZnJlcScsICRzbWRfcHJvZ25vc3RpY3NfYWxhcm1f ZnJlcSwgJycsJycsJycsMTUpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzZWNvbmRzJykp DQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV92 aWEnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoDQoJCQljaGVja2JveCgnc21k X3Byb2dub3N0aWNzX25vdGlmeV92aWFbXScsICd0eHAnLCBzdHJwb3MoJHNtZF9wcm9nbm9z dGljc19ub3RpZnlfdmlhLCAndHhwJykgIT09IGZhbHNlKSAuDQoJCQknPGxhYmVsPicuc21k X3Byb2dub3N0aWNzX2dUeHQoJ25vdGlmeV90eHAnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2ti b3goJ3NtZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhW10nLCAnZW1haWwnLCBzdHJwb3MoJHNt ZF9wcm9nbm9zdGljc19ub3RpZnlfdmlhLCAnZW1haWwnKSAhPT0gZmFsc2UpLg0KCQkJJzxs YWJlbD4nLnNtZF9wcm9nbm9zdGljc19nVHh0KCdub3RpZnlfZW1haWwnKS4nPC9sYWJlbD4n DQoJCSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnbWFp bHRvJyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcsICdz bWRfcHJvZ25vc3RpY3NfbWFpbHRvJywgJHNtZF9wcm9nbm9zdGljc19tYWlsdG8sICcnLCcn LCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY3N2JykpDQoJKTsNCgllY2hvIHRy KA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ21haWx0b19jc2knKSwgJyBjbGFzcz0i c21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19t YWlsdG9fY3NpJywgJHNtZF9wcm9nbm9zdGljc19tYWlsdG9fY3NpLCAnJywnJywnJyw2MCku c3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNobyB0cih0ZGNzKGhl ZChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgndHRsX3JlYWxvcHRzJyksIDMpLCAyKSk7DQoJZWNo byB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdyZXFfaGVhZGVycycpLCAnIGNs YXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYSgNCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3Rp Y3NfcmVxX2hlYWRlcnNbXScsICdUUkFDRScsICRyaF90cmFjZSkuDQoJCQknPGxhYmVsPicu c21kX3Byb2dub3N0aWNzX2dUeHQoJ3JoX3RyYWNlJykuJzwvbGFiZWw+Jy4NCgkJCWNoZWNr Ym94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdQVVQnLCAkcmhfcHV0KS4N CgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhfcHV0JykuJzwvbGFiZWw+ Jy4NCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcmVxX2hlYWRlcnNbXScsICdERUxF VEUnLCAkcmhfZGVsKS4NCgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgncmhf ZGVsJykuJzwvbGFiZWw+Jw0KCQkpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2du b3N0aWNzX2dUeHQoJ3NxbF9pbmplY3QnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0 ZGEoDQoJCQlzZWxlY3RJbnB1dCgnc21kX3Byb2dub3N0aWNzX3NxbF9pbmplY3RbXScsICR0 aHJvd19jb2RlcywgJHRocm93c1swXSwgMCkuDQoJCQlzbWRfcHJvZ25vc3RpY3NfZ1R4dCgn d2l0aCcpLg0KCQkJZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc19zcWxfaW5qZWN0 W10nLCAkdGhyb3dzWzFdLCAnJywnJywnJyw2MCkuYnIuDQoJCQlzbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnc2Vuc2l0aXZpdHknKS4NCgkJCWZJbnB1dCgndGV4dCcsICdzbWRfcHJvZ25vc3Rp Y3NfaW5qZWN0X3NlbnNpdGl2aXR5JywgJHNtZF9wcm9nbm9zdGljc19pbmplY3Rfc2Vuc2l0 aXZpdHksICcnLCcnLCcnLDUpLnNwLnNtZF9wcm9nbm9zdGljc19nVHh0KCdzZW5zaXRpdml0 eV9leHBsYWluJykNCgkJKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGlj c19nVHh0KCdzZW5kX2ZvcmVuc2ljcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRk YSgNCgkJCWNoZWNrYm94KCdzbWRfcHJvZ25vc3RpY3NfcnRfZm9yZW5zaWNzW10nLCAnaGRy JywgJHJ0X2hkcikuDQoJCQknPGxhYmVsPicuc21kX3Byb2dub3N0aWNzX2dUeHQoJ3J0X2hk cicpLic8L2xhYmVsPicuDQoJCQljaGVja2JveCgnc21kX3Byb2dub3N0aWNzX3J0X2ZvcmVu c2ljc1tdJywgJ3NxbCcsICRydF9zcWwpLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9nbm9zdGlj c19nVHh0KCdydF9zcWwnKS4nPC9sYWJlbD4nDQoJCSkNCgkpOw0KCWVjaG8gdHIodGRjcyho ZWQoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9maWxlb3B0cycpLCAzKSwgMikpOw0KCWVj aG8gdHIoDQoJCXRkYShzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hlY2tfZm9yJyksICcgY2xh c3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKA0KCQkJY2hlY2tib3goJ3NtZF9wcm9nbm9zdGlj c19jaGVja19mb3JbXScsICdhZGQnLCAkYWRkcykgLg0KCQkJJzxsYWJlbD4nLnNtZF9wcm9n bm9zdGljc19nVHh0KCdjaF9hZGQnKS4nPC9sYWJlbD4nLg0KCQkJY2hlY2tib3goJ3NtZF9w cm9nbm9zdGljc19jaGVja19mb3JbXScsICdkZWxldGUnLCAkZGVscykuDQoJCQknPGxhYmVs Picuc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NoX2RlbCcpLic8L2xhYmVsPicuDQoJCQljaGVj a2JveCgnc21kX3Byb2dub3N0aWNzX2NoZWNrX2ZvcltdJywgJ21vZGlmeScsICRtb2RzKS4N CgkJCSc8bGFiZWw+Jy5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgnY2hfbW9kJykuJzwvbGFiZWw+ Jw0KCQkpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ2xp c3Rsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0Jywg J3NtZF9wcm9nbm9zdGljc19saXN0bG9jJywgJHNtZF9wcm9nbm9zdGljc19saXN0bG9jLCAn JywnJywnJyw2MCkuc3Auc21kX3Byb2dub3N0aWNzX2dUeHQoJ2NzdicpKQ0KCSk7DQoJZWNo byB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdleGNsdWRpcicpLCAnIGNsYXNz PSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNz X2V4Y2x1ZGlyJywgJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwgJycsJycsJycsNjApLnNw LnNtZF9wcm9nbm9zdGljc19nVHh0KCdjc3YnKSkNCgkpOw0KCWVjaG8gdHIoDQoJCXRkYShz bWRfcHJvZ25vc3RpY3NfZ1R4dCgnaWdub3JlcycpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJyku DQoJCXRkYShmSW5wdXQoJ3RleHQnLCAnc21kX3Byb2dub3N0aWNzX2lnbm9yZXMnLCAkc21k X3Byb2dub3N0aWNzX2lnbm9yZXMsICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3Nf Z1R4dCgnY3N2JykpDQoJKTsNCgllY2hvIHRyKHRkY3MoaGVkKHNtZF9wcm9nbm9zdGljc19n VHh0KCd0dGxfcGx1Z29wdHMnKSwgMyksIDIpKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3By b2dub3N0aWNzX2dUeHQoJ2F1dGhfdXNlcnMnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0K CQl0ZGEoZklucHV0KCd0ZXh0JywgJ3NtZF9wcm9nbm9zdGljc191c2VycycsICRzbWRfcHJv Z25vc3RpY3NfdXNlcnMsICcnLCcnLCcnLDYwKS5zcC5zbWRfcHJvZ25vc3RpY3NfZ1R4dCgn Y3N2JykpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R4 cGRpcicpLCAnIGNsYXNzPSJzbWRfbGFiZWwiJykuDQoJCXRkYShmSW5wdXQoJ3RleHQnLCAn c21kX3Byb2dub3N0aWNzX3R4cGRpcicsICRzbWRfcHJvZ25vc3RpY3NfdHhwZGlyLCAnJywn JywnJyw2MCkpDQoJKTsNCgllY2hvIHRyKA0KCQl0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQo J3Byb2dsb2MnKSwgJyBjbGFzcz0ic21kX2xhYmVsIicpLg0KCQl0ZGEoZklucHV0KCd0ZXh0 JywgJ3NtZF9wcm9nbm9zdGljc19kaXInLCAkc21kX3Byb2dub3N0aWNzX2RpciwgJycsJycs JycsNjApKQ0KCSk7DQoJZWNobyB0cigNCgkJdGRhKHNtZF9wcm9nbm9zdGljc19nVHh0KCdw cm9ncGZ4JyksICcgY2xhc3M9InNtZF9sYWJlbCInKS4NCgkJdGRhKGZJbnB1dCgndGV4dCcs ICdzbWRfcHJvZ25vc3RpY3NfcHJlZml4JywgJHNtZF9wcm9nbm9zdGljc19wcmVmaXgsICcn LCcnLCcnLDYwKSkNCgkpOw0KCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsN CgllY2hvICc8L2Zvcm0+JzsNCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0t LS0gIFNlY3VyaXR5IGFkdmljZQ0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2FkdmljZSgk bXNnPScnKSB7DQoJZ2xvYmFsICRzbWRfcHJvZ25vc3RpY3NfZXZlbnQsICRzbWRfcHJvZ25v c3RpY3Nfc3R5bGUsICRwcmVmczsNCglyZXF1aXJlX29uY2UgdHhwYXRoLicvbGliL0lYUkNs YXNzLnBocCc7DQoNCglwYWdldG9wKHNtZF9wcm9nbm9zdGljc19nVHh0KCdzbWRfcHJvZ25v c3RpY3MnKSwgJG1zZyk7DQoJZXh0cmFjdChzbWRfcHJvZ25vc3RpY3NfYnV0dG9ucygpKTsN Cg0KCSRjaGVja3MgPSBhcnJheSgpOw0KDQoJLy8gUHJvZ25vc3RpY3MgZGlyIGluIGRvY3Jv b3Q/DQoJaWYgKHN0cnBvcyhnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2RpcicsIHR4cGF0 aCksICRwcmVmc1sncGF0aF90b19zaXRlJ10pICE9PSBmYWxzZSkgew0KCQkkY2hlY2tzW10g PSBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnZG9jcm9vdF9wcm9nbm9zdGljcycpOw0KCX0NCg0K CS8vIFNldHVwIHN0aWxsIGV4aXN0cz8NCglpZiAoQGlzX2Rpcih0eHBhdGggLiBEUy4gJ3Nl dHVwJykpIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dUeHQoJ3NldHVwX2V4 aXN0cycpOw0KCX0NCg0KCS8vIFJQQyBzdGlsbCBleGlzdHM/DQoJaWYgKEBpc19kaXIocmVh bHBhdGgodHhwYXRoLkRTLicuLicuRFMuICdycGMnKSkgJiYgJHByZWZzWydlbmFibGVfeG1s cnBjX3NlcnZlciddID09IDApIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dU eHQoJ3JwY19leGlzdHMnKTsNCgl9DQoNCgkvLyBOZXcgVFhQIHZlcnNpb24vYnJhbmNoIGF2 YWlsYWJsZT8gQWRhcHRlZCBmcm9tIHR4cGxpYl91cGRhdGUucGhwDQoJJGNsaWVudCA9IG5l dyBJWFJfQ2xpZW50KCdodHRwOi8vcnBjLnRleHRwYXR0ZXJuLmNvbScpOw0KCSR1aWQgPSBn ZXRfcHJlZignYmxvZ191aWQnLCBtZDUodW5pcWlkKG10X3JhbmQoKSx0cnVlKSkpOw0KCWlm ICgkY2xpZW50LT5xdWVyeSgndHVwcy5nZXRUWFBWZXJzaW9uJywkdWlkKSkgew0KCQkkcmVz cG9uc2UgPSAkY2xpZW50LT5nZXRSZXNwb25zZSgpOw0KDQoJCWlmIChpc19hcnJheSgkcmVz cG9uc2UpKSB7DQoJCQlrc29ydCgkcmVzcG9uc2UpOw0KCQkJJHZlcnNpb24gPSBnZXRfcHJl ZigndmVyc2lvbicsICcnKTsNCgkJCSRsdmVyc2lvbiA9IGV4cGxvZGUoJy4nLCR2ZXJzaW9u KTsNCgkJCSRicmFuY2ggPSBzdWJzdHIoJHZlcnNpb24sMCwzKTsNCg0KCQkJZm9yZWFjaCAo JHJlc3BvbnNlIGFzICRrZXkgPT4gJHZhbCkgew0KCQkJCSRydmVyc2lvbiA9IGV4cGxvZGUo Jy4nLCR2YWwpOw0KCQkJCWlmICgka2V5ID09ICd0eHBfY3VycmVudF92ZXJzaW9uXycuJGJy YW5jaCkgew0KCQkJCQlpZiAoaXNzZXQoJGx2ZXJzaW9uWzJdKSAmJiBpc3NldCgkcnZlcnNp b25bMl0pICYmIChpbnR2YWwoJHJ2ZXJzaW9uWzJdKT5pbnR2YWwoJGx2ZXJzaW9uWzJdKSkp IHsNCgkJCQkJCSRtb3N0X3JlY2VudCA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhdmFpbF9i cmFuY2gnKS4nOiAnLiR2YWw7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQlpZiAoaW50 dmFsKCRydmVyc2lvblswXSk+aW50dmFsKCRsdmVyc2lvblswXSkgfHwgaW50dmFsKCRydmVy c2lvblsxXSk+aW50dmFsKCRsdmVyc2lvblsxXSkpIHsNCgkJCQkJCSRtb3N0X3JlY2VudCA9 IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhdmFpbF90eHAnKS4nOiAnLiR2YWw7DQoJCQkJCX0N CgkJCQl9DQoJCQl9DQoJCQlpZiAoaXNzZXQoJG1vc3RfcmVjZW50KSkgew0KCQkJCSRjaGVj a3NbXSA9ICRtb3N0X3JlY2VudDsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIEZpbGVzIGRpciBp biBkb2Nyb290Pw0KCWlmIChzdHJwb3MoJHByZWZzWydmaWxlX2Jhc2VfcGF0aCddLCAkcHJl ZnNbJ3BhdGhfdG9fc2l0ZSddKSAhPT0gZmFsc2UpIHsNCgkJJGNoZWNrc1tdID0gc21kX3By b2dub3N0aWNzX2dUeHQoJ2RvY3Jvb3RfZmlsZXMnKTsNCgl9DQoNCgkvLyBUbXAgZGlyIGlu IGRvY3Jvb3Q/DQoJaWYgKHN0cnBvcygkcHJlZnNbJ3RlbXBkaXInXSwgJHByZWZzWydwYXRo X3RvX3NpdGUnXSkgIT09IGZhbHNlKSB7DQoJCSRjaGVja3NbXSA9IHNtZF9wcm9nbm9zdGlj c19nVHh0KCdkb2Nyb290X3RtcCcpOw0KCX0NCg0KLyoNCgkvLyBUT0RPOiBjaGVjayB3aGF0 IFNIT1cgR1JBTlRTIHJldHVybnMgYW5kIGRldGVybWluZSBpZiBpdCBjb3VsZCBiZSBhIHNl Y3VyaXR5IHJpc2sNCgkkcmVzID0gc2FmZV9xdWVyeSgnU0hPVyBHUkFOVFMnKTsNCglpZiAo bnVtUm93cygkcmVzKSA+IDApIHsNCgkJJGNoZWNrc1tdID0gc21kX3Byb2dub3N0aWNzX2dU eHQoJ3Nob3dfZ3JhbnRzJyk7DQoJfQ0KKi8NCg0KCS8vIERvZXMgdGhpcyBNeVNRTCB1c2Vy IGhhdmUgRklMRVMgcHJpdnM/DQoJJHJhbmRmaWxlID0gJHByZWZzWyd0ZW1wZGlyJ10uRFMu cmFuZCgpLnRpbWUoKS4nLnNxbCc7DQoJJHJlcyA9IEBzYWZlX3F1ZXJ5KCdTRUxFQ1QgaWQg SU5UTyBPVVRGSUxFICInLiRyYW5kZmlsZS4nIiBGSUVMRFMgVEVSTUlOQVRFRCBCWSAiXHQi IExJTkVTIFRFUk1JTkFURUQgQlkgIlxuIiBGUk9NIHR4cF9pbWFnZSBXSEVSRSAxIExJTUlU IDEnKTsNCglpZiAobXlzcWxfZXJyb3IoKSA9PSAnJykgew0KCQkkY2hlY2tzW10gPSBzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc3FsX2ZpbGVfcHJpdnMnKTsNCgkJaWYgKGlzX2ZpbGUoJHJh bmRmaWxlKSkgew0KCQkJQHVubGluaygkcmFuZGZpbGUpOw0KCQl9DQoJfQ0KDQoJZWNobyAn PHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ2Fkdmlj ZSddLiRzbWRfcHJvZ25vc3RpY3Nfc3R5bGVbJ3NldHVwJ10uJzwvc3R5bGU+Jy5zdGFydFRh YmxlKCdsaXN0JywgJycsICdzbWRfcHJvZ19hZHZpY2UnKTsNCgllY2hvIHRyKHRkYShzdHJv bmcoc21kX3Byb2dub3N0aWNzX2dUeHQoJ3R0bF9hZHZpY2UnKSkpIC4gdGRhKCRidG5TZXR1 cC4kYnRuRmlsZXMuJGJ0bkFjaywgJGJ0blN0eWxlKSApOw0KCWlmICgkY2hlY2tzKSB7DQoJ CWZvcmVhY2goJGNoZWNrcyBhcyAkY2hlY2spIHsNCgkJCWVjaG8gdHIodGRhKCRjaGVjaykp Ow0KCQl9DQoJfSBlbHNlIHsNCgkJZWNobyB0cih0ZGEoc21kX3Byb2dub3N0aWNzX2dUeHQo J3RpZ2h0JykpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0t IEhhc2ggdGhlIGhhc2hmaWxlDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3Nfc2VsZl9oYXNo KCkgew0KCWdsb2JhbCAkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtczsNCg0KCWlmIChmaWxl X2V4aXN0cygkc21kX3Byb2dub3N0aWNzX2NoZWNrc3VtcykpIHsNCgkJJGNvbnRlbnQgPSBz bWRfcHJvZ25vc3RpY3NfcHJlcF9maWxlKCRzbWRfcHJvZ25vc3RpY3NfY2hlY2tzdW1zKTsN CgkJJGhhc2ggPSBtZDUoJGNvbnRlbnQpOw0KCX0gZWxzZSB7DQoJCSRoYXNoID0gTlVMTDsN Cgl9DQoJc2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19zdW1oYXNoJywgJGhhc2gsICdzbWRf cHJvZ25vcycsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcpOw0KfQ0KDQovLyAtLS0tLS0t LS0tIENvbXBpbGUgbGlzdCBvZiBmaWxlcyB0byBtb25pdG9yDQpmdW5jdGlvbiBzbWRfcHJv Z25vc3RpY3NfcmVhZGZpbGVzKCkgew0KCSRmaWxlbGlzdCA9IGFycmF5KCk7DQoNCgkkc21k X3Byb2dub3N0aWNzX2xpc3Rsb2MgPSBnZXRfcHJlZignc21kX3Byb2dub3N0aWNzX2xpc3Rs b2MnLCAnJyk7DQoJJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciA9IGRvX2xpc3QoZ2V0X3By ZWYoJ3NtZF9wcm9nbm9zdGljc19leGNsdWRpcicsICcnKSk7DQoJJHNtZF9wcm9nbm9zdGlj c19pZ25vcmVzID0gZ2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc19pZ25vcmVzJywgJycpOw0K CWlmICgkc21kX3Byb2dub3N0aWNzX2xpc3Rsb2MpIHsNCgkJZm9yZWFjaCAoZG9fbGlzdCgk c21kX3Byb2dub3N0aWNzX2xpc3Rsb2MpIGFzICRsb2MpIHsNCgkJCS8vIE5PVEU6IG5vdCB1 c2luZyBHTE9CX0JSQUNFIHRvIGdyYWIgcmVndWxhciBhbmQgZG90IGZpbGVzLCBzaW5jZSBp dCdzIG5vdCBhbHdheXMgYXZhaWxhYmxlIGNyb3NzLU9TDQoJCQkkZmlsZWxpc3QgPSBhcnJh eV9tZXJnZSgkZmlsZWxpc3QsIHNtZF9wcm9nbm9zdGljc19yZ2xvYigiKiIsIEdMT0JfTUFS SywgJGxvYywgJHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwgJHNtZF9wcm9nbm9zdGljc19p Z25vcmVzKSwgc21kX3Byb2dub3N0aWNzX3JnbG9iKCIuKiIsIEdMT0JfTUFSSywgJGxvYywg JHNtZF9wcm9nbm9zdGljc19leGNsdWRpciwgJHNtZF9wcm9nbm9zdGljc19pZ25vcmVzKSk7 DQoJCX0NCgl9DQoJcmV0dXJuICRmaWxlbGlzdDsNCn0NCg0KLy8gLS0tLS0tLS0tLSBQcmVw YXJlIGZpbGUgY29udGVudHMgZm9yIG1kNS4gQXNzdW1lcyBmaWxlIGV4aXN0cw0KLy8gQ2hl Y2tzIHRvIHNlZSBpZiBsYXJnZSBmaWxlcyBhcmUgYmluYXJ5IGJlZm9yZSB3YXN0aW5nIHRp bWUgc3RyaXBwaW5nIG5ld2xpbmVzIGFuZCBzdHVmZg0KZnVuY3Rpb24gc21kX3Byb2dub3N0 aWNzX3ByZXBfZmlsZSgkZmlsZSkgew0KCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMo JGZpbGUpOw0KCSRzdGF0ID0gc3RhdCgkZmlsZSk7DQoJJGRvc3RyaXAgPSB0cnVlOw0KCS8v IFBlcmZvcm0gdGhlIHN0cmlwIHJlZ2FyZGxlc3Mgb24gZmlsZXMgPCAxS2IgYXMgaXQgaGFz IGxpdHRsZSBpbXBhY3QNCglpZiAoJHN0YXRbJ3NpemUnXSA+IDEwMjQwMDApIHsNCgkJJHBh cnQgPSBzdWJzdHIoJGNvbnRlbnQsIDAsIDE1MzYwMDApOyAvLyBGaXJzdCAxLjVLQg0KCQlp ZiAoc3RycG9zKCRwYXJ0LCAweDAwKSB8fCAoc3RycG9zKCRwYXJ0LCAweDBEKSAhPT0gZmFs c2UpIHx8IChzdHJwb3MoJHBhcnQsIDB4MEEpICE9PSBmYWxzZSkpIHsNCgkJCS8vIExpa2Vs eSBhIGJpbmFyeSBmaWxlOiBsZWF2ZSBpdCBiZQ0KCQkJJGRvc3RyaXAgPSBmYWxzZTsNCgkJ fQ0KCX0NCglpZiAoJGRvc3RyaXApIHsNCgkJJGNvbnRlbnQgPSBzdHJ0ciggJGNvbnRlbnQs IGFycmF5KCJcclxuIiA9PiAiXG4iLCAiXCRIZWFkVVJMOiBodHRwOiIgPT4gIlwkSGVhZFVS TDogaHR0cHM6IikgKTsNCgl9DQoJcmV0dXJuICRjb250ZW50Ow0KfQ0KDQovLyBGcmFua2Vu c3RlaW5lZCBmcm9tIGh0dHA6Ly9zbmlwcGxyLmNvbS92aWV3LzE2MjMzL3JlY3Vyc2l2ZS1n bG9iLw0KZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX3JnbG9iKCRwYXR0ZXJuLCAkZmxhZ3M9 MCwgJHBhdGg9JycsICRleGNsPWFycmF5KCksICRpZ249JycpIHsNCglnbG9iYWwgJHNtZF9w cm9nbm9zdGljc19jaGVja3N1bXM7DQoNCgkvLyBBZGQgYW55IGZpbGVzIHRvIHBlcm1hbmVu dGx5IGV4Y2x1ZGUgaGVyZSAoTk9UIGRpcnM6IHRoZXkncmUgaWdub3JlZCBhdXRvbWF0aWNh bGx5KQ0KCSRpZ25hcnIgPSAoJGlnbikgPyBkb19saXN0KCRpZ24pIDogYXJyYXkoKTsNCg0K CS8vIEV4cGFuZCBhbnkgd2lsZGNhcmQgZmlsZW5hbWVzDQoJJHJlZ2FyciA9IGFycmF5KCk7 DQoJZm9yZWFjaCAoJGlnbmFyciBhcyAkaWR4ID0+ICRpdGVtKSB7DQoJCWlmICggKHN0cnBv cygkaXRlbSwgJyonKSAhPT0gZmFsc2UpIHx8IChzdHJwb3MoJGl0ZW0sICc/JykgIT09IGZh bHNlKSApIHsNCgkJCSRyZWdhcnJbXSA9IHN0cnRyKCBwcmVnX3F1b3RlKCRpdGVtKSwgYXJy YXkoIlwqIiA9PiAiLioiLCAiXD8iID0+ICIuIikgKTsNCgkJCXVuc2V0KCRpZ25hcnJbJGlk eF0pOyAvLyBSZW1vdmUgdGhlIHdpbGRjYXJkIGZpbGVuYW1lIGZyb20gdGhlIGlnbm9yZSBs aXN0DQoJCX0NCgl9DQoJJHJlZ2V4Y2x1ZGUgPSAoJHJlZ2FycikgPyAnL14oJyAuIGpvaW4o J3wnLCAkcmVnYXJyKSAuICcpJC8nIDogJyc7DQoJJHBlcm1leGNsdWRlID0gYXJyYXlfbWVy Z2UoYXJyYXkoYmFzZW5hbWUoJHNtZF9wcm9nbm9zdGljc19jaGVja3N1bXMpKSwgJGlnbmFy cik7DQoNCglpZiAoISRwYXRoICYmICgkZGlyID0gZGlybmFtZSgkcGF0dGVybikpICE9ICcu Jykgew0KCQlpZiAoJGRpciA9PSAnXFwnIHx8ICRkaXIgPT0gRFMpICRkaXIgPSAnJzsNCgkJ cmV0dXJuIHNtZF9wcm9nbm9zdGljc19yZ2xvYihiYXNlbmFtZSgkcGF0dGVybiksICRmbGFn cywgJGRpciAuIERTLCAkZXhjbCwgJGlnbik7DQoJfQ0KCSRwYXRocyA9IGdsb2IoJHBhdGgg LiAnKicsIEdMT0JfT05MWURJUiB8IEdMT0JfTk9TT1JUKTsNCgkkZmlsZXMgPSBnbG9iKCRw YXRoIC4gJHBhdHRlcm4sICRmbGFncyk7DQoJZm9yZWFjaCAoJHBhdGhzIGFzICRwKSB7DQoJ CSRwaW5mbyA9IGFycmF5X3BvcChleHBsb2RlKERTLCAkcCkpOw0KCQlpZiAoIWluX2FycmF5 KCRwaW5mbywgJGV4Y2wpKSB7DQoJCQkkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsIHNt ZF9wcm9nbm9zdGljc19yZ2xvYigkcGF0dGVybiwgJGZsYWdzLCAkcCAuIERTLCAkZXhjbCwg JGlnbikpOw0KCQkJZm9yZWFjaCgkZmlsZXMgYXMgJGlkeCA9PiAkdGhlRmlsZSkgew0KCQkJ CSRmZXggPSBhcnJheV9wb3AoZXhwbG9kZShEUywgJHRoZUZpbGUpKTsNCgkJCQkkcmV4ID0g KCRyZWdleGNsdWRlKSA/IHByZWdfbWF0Y2goJHJlZ2V4Y2x1ZGUsICRmZXgpIDogZmFsc2U7 DQoJCQkJaWYoJGZleD09JycgfHwgaW5fYXJyYXkoJGZleCwgJHBlcm1leGNsdWRlKSB8fCAk cmV4KSB7DQoJCQkJCXVuc2V0KCRmaWxlc1skaWR4XSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJ fQ0KCXJldHVybiAkZmlsZXM7DQp9DQoNCi8vIEZvcm1hdCBmb3JlbnNpYyBkYXRhIGZvciBh IGZpbGUNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19mb3JlbnNpY19vdXRwdXQoJGZpbGUs ICRmaSkgew0KCWdsb2JhbCAkcHJlZnM7DQoNCgkkZGZvcm0gPSAkcHJlZnNbJ2RhdGVmb3Jt YXQnXTsNCgkkc2VwID0gbjsNCgkkb3V0ID0gJyc7DQoNCgkkb3V0IC49ICRzZXAgLiBzbWRf cHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF9uYW1lJykgLiAkZmlsZTsNCgkkb3V0IC49ICRzZXAg LiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF9zaXplJykgLiAkZmlbJ3NpemUnXTsNCgkk b3V0IC49ICRzZXAgLiBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnc3RhdF9tb2QnKSAuIHN0cmZ0 aW1lKCRkZm9ybSwgJGZpWydtdGltZSddKTsNCgkkb3V0IC49ICRzZXAgLiBzbWRfcHJvZ25v c3RpY3NfZ1R4dCgnc3RhdF91aWQnKSAuICRmaVsndWlkJ107DQoJJG91dCAuPSAkc2VwIC4g c21kX3Byb2dub3N0aWNzX2dUeHQoJ3N0YXRfZ2lkJykgLiAkZmlbJ2dpZCddOw0KDQoJcmV0 dXJuICRvdXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0gRG9lcyB3aGF0IGl0IHNheXMgb24gdGhl IHRpbg0KLy8gQXNzdW1lcyAndGV4dHBhdHRlcm4nIGlzIHRoZSBhZG1pbi1zaWRlIGRpcmVj dG9yeSBpZiBzZXJ2ZXIgdmFyIG5vdCBzZXQuIE11c3QgZml4IGluIGNvcmUgb25lIGRheSB3 aXRoIHRydWUgY29uc3RhbnQNCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGljc19ndWVzc19hZG1p bl9kaXIoKSB7DQoJJGFkbWluZGlyID0gdHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VM RiddKSwgJy9cXCcpOw0KCSRhZG1pbmRpciA9IChlbXB0eSgkYWRtaW5kaXIpKSA/ICd0ZXh0 cGF0dGVybicgOiAkYWRtaW5kaXI7DQoJcmV0dXJuICRhZG1pbmRpcjsNCn0NCg0KLy8gLS0t LS0tLS0tLSBHZXQgY29tbW9uIHNlcnZlciBpbmZvIGZvciBtYWlsIGhlYWRlcnMsIGV0Yw0K ZnVuY3Rpb24gc21kX3Byb2dub3N0aWNzX2hlYWRlcl9pbmZvKCRmcm9tbmFtZSkgew0KCSRk b21haW5wYXJ0cyA9IGRvX2xpc3QoZG9TdHJpcChzZXJ2ZXJTZXQoJ1NFUlZFUl9OQU1FJykp LCAnLicpOw0KCSRudW1wYXJ0cyA9IGNvdW50KCRkb21haW5wYXJ0cyk7DQoJJGRvbWFpbiA9 ICRkb21haW5wYXJ0c1skbnVtcGFydHMtMl0gLiAnLicgLiAkZG9tYWlucGFydHNbJG51bXBh cnRzLTFdOw0KCSRyZXBseV90byA9ICdub3JlcGx5QCcuJGRvbWFpbjsNCgkkdHhwZGlyID0g Z2V0X3ByZWYoJ3NtZF9wcm9nbm9zdGljc190eHBkaXInLCBodS5zbWRfcHJvZ25vc3RpY3Nf Z3Vlc3NfYWRtaW5fZGlyKCkpOw0KCSRzZXAgPSBpc193aW5kb3dzKCkgPyAiXHJcbiIgOiAi XG4iOw0KCSRoZWFkZXJzID0gIkZyb206ICRmcm9tbmFtZSA8JHJlcGx5X3RvPiIuDQoJCSRz ZXAuJ1JlcGx5LVRvOiAnLiRyZXBseV90by4NCgkJJHNlcC4nWC1NYWlsZXI6IFRleHRwYXR0 ZXJuJy4NCgkJJHNlcC4nQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCcuDQoJCSRz ZXAuJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iVVRGLTgiJy4NCgkJJHNl cDsNCg0KCSRvdXQgPSBhcnJheSgNCgkJJ2RvbWFpbicgPT4gJGRvbWFpbiwNCgkJJ3JlcGx5 X3RvJyA9PiAkcmVwbHlfdG8sDQoJCSd0eHBkaXInID0+ICR0eHBkaXIsDQoJCSdzZXAnID0+ ICRzZXAsDQoJCSdoZWFkZXJzJyA9PiAkaGVhZGVycywNCgkpOw0KDQoJcmV0dXJuICRvdXQ7 DQp9DQoNCi8vIENvbW1vbiBidXR0b25zDQpmdW5jdGlvbiBzbWRfcHJvZ25vc3RpY3NfYnV0 dG9ucygpIHsNCglnbG9iYWwgJHNtZF9wcm9nbm9zdGljc19ldmVudCwgJHNtZF9wcm9nbm9z dGljc19zdHlsZTsNCg0KCSRyZXQgPSBhcnJheSAoDQoJCSdidG5TYXZlJyA9PiBmSW5wdXQo J3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyksDQoJCSdidG5B Y2snID0+ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9wcm9n bm9zdGljc19ldmVudC4nJiMzODtzdGVwPXNtZF9wcm9nbm9zdGljc19hY2smIzM4O3NtZF9w cm9nbm9zdGljc19zdXBwcmVzcz0xIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNt ZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfYWNrJyksICdzbWFsbGVyYm94JykuJzwvZm9ybT4n LA0KCQknYnRuQWNrSXQnID0+IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9wcm9n bm9zdGljc19nVHh0KCdwbmxfYWNraXQnKSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bklnbm9yZScg PT4gZklucHV0KCdzdWJtaXQnLCAnaWdub3JlJywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3Bu bF9pZ25vcmUnKSwgJ3B1Ymxpc2gnKSwNCgkJJ2J0bkNTSScgPT4gZklucHV0KCdzdWJtaXQn LCAnY3NpJywgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3BubF9jc2knKSwgJ3B1Ymxpc2gnKSwN CgkJJ2J0bkFkdmljZScgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9 Jy4kc21kX3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2Fk dmljZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzd2l0Y2hfYWR2aWNlJywgc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3BubF9hZHZpY2UnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdi dG5GaWxlcycgPT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21k X3Byb2dub3N0aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX2ZpbGVzIj4n LmZJbnB1dCgnc3VibWl0JywgJ3N3aXRjaF9maWxlcycsIHNtZF9wcm9nbm9zdGljc19nVHh0 KCdwbmxfZmlsZXMnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TZXR1cCcg PT4gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3Byb2dub3N0 aWNzX2V2ZW50LicmIzM4O3N0ZXA9c21kX3Byb2dub3N0aWNzX3NldHVwIj4nLmZJbnB1dCgn c3VibWl0JywgJ3N3aXRjaF9zZXR1cCcsIHNtZF9wcm9nbm9zdGljc19nVHh0KCdwbmxfc2V0 dXAnKSwgJ3NtYWxsZXJib3gnKS4nPC9mb3JtPicsDQoJCSdidG5TdHlsZScgPT4gJyBjbGFz cz0ic21kX3Byb2dfYnRucyIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4OyInLA0KCQkn YnRuQ1NTJyA9PiAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nLiRzbWRfcHJvZ25vc3RpY3Nf c3R5bGVbJ3NldHVwJ10uJzwvc3R5bGU+JywNCgkpOw0KCXJldHVybiAkcmV0Ow0KfQ0KDQov LyBNdWx0aS1maWxlIGRyb3Bkb3duIHNlbGVjdGlvbg0KZnVuY3Rpb24gc21kX3Byb2dub3N0 aWNzX211bHRpc2VsKCRzZWxuYW1lPScnLCAkdHJlZT1hcnJheSgpLCAkc2VsPWFycmF5KCkp IHsNCgkkb3V0W10gPSAnPHNlbGVjdCBpZD0iJy4kc2VsbmFtZS4nIiBuYW1lPSInLiRzZWxu YW1lLidbXSIgY2xhc3M9Imxpc3QiIHN0eWxlPSJoZWlnaHQ6NDAwcHg7IiBtdWx0aXBsZT0i bXVsdGlwbGUiPic7DQoJZm9yZWFjaCAoJHRyZWUgYXMgJGxlYWYpIHsNCgkJJHNlbGVjdGVk PScnOw0KCQlpZiAoaW5fYXJyYXkoJGxlYWYsICRzZWwpKSB7DQoJCQkkc2VsZWN0ZWQgPSAn IHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KCQl9DQoNCgkJJG91dFtdID0gdC4nPG9wdGlvbicu JHNlbGVjdGVkLic+Jy5odG1sc3BlY2lhbGNoYXJzKCRsZWFmKS4nPC9vcHRpb24+Jy5uOw0K CX0NCgkkb3V0W10gPSAnPC9zZWxlY3Q+JzsNCglyZXR1cm4gam9pbignJywkb3V0KTsNCn0N Cg0KLy8gUGFzc3dvcmQgc3RyZW5ndGggbWV0ZXINCmZ1bmN0aW9uIHNtZF9wcm9nbm9zdGlj c19jaHJvbm9zdHJlbmd0aCgkZXZ0LCAkc3RwKSB7DQoJZ2xvYmFsICRldmVudCwgJHNtZF9w cm9nbm9zdGljc19zdHlsZTsNCg0KCWVjaG8gPDw8RU9TDQo8c3R5bGUgdHlwZT0idGV4dC9j c3MiPnskc21kX3Byb2dub3N0aWNzX3N0eWxlWydtZXRlciddfTwvc3R5bGU+DQo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQovLzwhW0NEQVRBWw0KLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKioN CioqICAgRnJhbmtlbnN0ZWluZWQgZnJvbSBhbiBvcmlnaW5hbCAoR1BMKSBzY3JpcHQNCioq ICAgYnkgU21hbGwgSGFkcm9uIENvbGxpZGVyIC0tIFRoYW5rcyENCioqICAgaHR0cDovL3d3 dy5zbWFsbGhhZHJvbmNvbGxpZGVyLmNvbQ0KKioNCioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmZ1bmN0aW9uIHNt ZF9wcm9nbm9zdGljc19nVHh0KHdoYXQpIHsNCgl2YXIgbGFuZyA9IG5ldyBBcnJheSgpOw0K CWxhbmdbJ2Fib3V0J10gPSAnYWJvdXQgJzsNCglsYW5nWydkaWdpdHNlcCddID0gJywnOw0K CWxhbmdbJ3BsdXJhbCddID0gJ3MnOw0KCWxhbmdbJ3B3X2NvbW1vbiddID0gJ29uZSBvZiB0 aGUgNTAwIG1vc3QgY29tbW9uIHBhc3N3b3Jkcyc7DQoJbGFuZ1sncHdfcG9zdGFtYmxlJ10g PSAnSXQgd291bGQgYmUgY3JhY2tlZCBhbG1vc3QgaW5zdGFudGx5JzsNCglsYW5nWydwd19w cmVhbWJsZSddID0gJ1lvdXIgcGFzc3dvcmQgaXMnOw0KCWxhbmdbJ3B3X3Rha2UnXSA9ICdJ dCB3b3VsZCB0YWtlJzsNCglsYW5nWydwd19jcmFjayddID0gJ2ZvciBhIGRlc2t0b3AgUEMg dG8gY3JhY2sgeW91ciBwYXNzIGJ5IGJydXRlIGZvcmNlPGJyIC8+KHVubGVzcyB5b3UgPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Jsb2cvY2hvb3NpbmctYS1icmlsbGlhbnQt cGFzc3dvcmQvIj5icm9rZSB0aGUgcnVsZXM8L2E+LCBpbiB3aGljaCBjYXNlIGl0XCdkIGJl IGNyYWNrZWQgYWxtb3N0IGluc3RhbnRseSknOw0KCWxhbmdbJ3NlY3MnXSA9ICcgc2Vjb25k cyc7DQoJbGFuZ1sndF9zZWMnXSA9ICdzZWNvbmQnOw0KCWxhbmdbJ3RfbWluJ10gPSAnbWlu dXRlJzsNCglsYW5nWyd0X2hyJ10gPSAnaG91cic7DQoJbGFuZ1sndF9kYXknXSA9ICdkYXkn Ow0KCWxhbmdbJ3RfeXInXSA9ICd5ZWFyJzsNCglsYW5nWyd0X3Rob195J10gPSAndGhvdXNh bmQgeWVhcnMnOw0KCWxhbmdbJ3RfbWlsX3knXSA9ICdtaWxsaW9uIHllYXJzJzsNCglsYW5n Wyd0X2JpbF95J10gPSAnYmlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF90cmlfeSddID0gJ3Ry bGxpb24geWVhcnMnOw0KCWxhbmdbJ3RfcXVhX3knXSA9ICdxdWFkcmlsbGlvbiB5ZWFycyc7 DQoJbGFuZ1sndF9xdWlfeSddID0gJ3F1aW50aWxsaW9uIHllYXJzJzsNCglsYW5nWyd0X3Nl eF95J10gPSAnc2V4dGlsbGlvbiB5ZWFycyc7DQoJbGFuZ1sndF9zZXBfeSddID0gJ3NlcHRp bGxpb24geWVhcnMnOw0KCWxhbmdbJ3Rfb2N0X3knXSA9ICdvY3RpbGxpb24geWVhcnMnOw0K CWxhbmdbJ3Rfbm9uX3knXSA9ICdub25pbGxpb24geWVhcnMnOw0KCXJldHVybiBsYW5nW3do YXRdOw0KfQ0KDQpmdW5jdGlvbiBzbWRfcHJvZ19jaHJvbm9TdHJlbmd0aChwdykgew0KCXZh ciBzaXplID0gcHcubGVuZ3RoOw0KCXZhciBzbWRfcHJvZ19jb21tb25fcHcgPSBuZXcgQXJy YXkoKTsNCgl2YXIgcHJlY2lzaW9uID0gNzsNCglzbWRfcHJvZ19jb21tb25fcHdbM10gPSBb J2dvZCcsJ3NleCddOw0KCXNtZF9wcm9nX2NvbW1vbl9wd1s0XSA9IFsnMTIzNCcsJ2Nvb2wn LCcxMzEzJywnc3RhcicsJ2dvbGYnLCdiZWFyJywnZGF2ZScsJ3Bhc3MnLCdhYWFhJywnNjk2 OScsJ2pha2UnLCdtYXR0JywnMTIxMicsJ2Zpc2gnLCdmdWNrJywncG9ybicsJzQzMjEnLCcy MDAwJywnNDEyOCcsJ3Rlc3QnLCdzaGl0JywnbG92ZScsJ2JhYnknLCdjdW50JywnbWFyaycs JzMzMzMnLCdqb2huJywnc2V4eScsJzUxNTAnLCc0NDQ0JywnMjExMicsJ2ZyZWQnLCdtaWtl JywnMTExMScsJ3RpdHMnLCdwYXVsJywnbWluZScsJ2tpbmcnLCdmaXJlJywnNTU1NScsJ3Ns dXQnLCdnaXJsJywnMjIyMicsJ2FzZGYnLCd0aW1lJywnNzc3NycsJ3JvY2snLCd4eHh4Jywn Zm9yZCcsJ2RpY2snLCdiaWxsJywnd29sZicsJ2JsdWUnLCdhbGV4JywnY29jaycsJ2JlZXIn LCdlcmljJywnNjY2NicsJ2phY2snXTsNCglzbWRfcHJvZ19jb21tb25fcHdbNV0gPSBbJ2Jl YWNoJywnZ3JlYXQnLCdibGFjaycsJ3B1c3N5JywnMTIzNDUnLCdmcmFuaycsJ3RpZ2VyJywn amFwYW4nLCdtb25leScsJ25ha2VkJywnMTExMTEnLCdhbmdlbCcsJ3N0YXJzJywnYXBwbGUn LCdwb3JubycsJ3N0ZXZlJywndmlwZXInLCdob3JueScsJ291ODEyJywna2V2aW4nLCdidWRk eScsJ3RlZW5zJywneW91bmcnLCdqYXNvbicsJ2x1Y2t5JywnZ2lybHMnLCdsb3ZlcicsJ2Jy aWFuJywna2l0dHknLCdidWJiYScsJ2hhcHB5JywnY3JlYW0nLCdqYW1lcycsJ3h4eHh4Jywn Ym9vdHknLCdrZWxseScsJ2Jvb2JzJywncGVuaXMnLCdlYWdsZScsJ3doaXRlJywnZW50ZXIn LCdjaGV2eScsJ3NtaXRoJywnY2hyaXMnLCdncmVlbicsJ3NhbW15Jywnc3VwZXInLCdtYWdp YycsJ3Bvd2VyJywnZW5qb3knLCdzY290dCcsJ2RhdmlkJywndmlkZW8nLCdxd2VydCcsJ3Bh cmlzJywnd29tZW4nLCdqdWljZScsJ2RpcnR5JywnbXVzaWMnLCdwZXRlcicsJ2JpdGNoJywn aG91c2UnLCdoZWxsbycsJ2JpbGx5JywnbW92aWUnXTsNCglzbWRfcHJvZ19jb21tb25fcHdb Nl0gPSBbJzEyMzQ1NicsJ3ByaW5jZScsJ2d1aXRhcicsJ2J1dHRlcicsJ2phZ3VhcicsJ3Vu aXRlZCcsJ3R1cnRsZScsJ211ZmZpbicsJ2Nvb3BlcicsJ25hc2NhcicsJ3JlZHNveCcsJ2Ry YWdvbicsJ3p4Y3ZibicsJ3F3ZXJ0eScsJ3RvbWNhdCcsJzY5Njk2OScsJzY1NDMyMScsJ211 cnBoeScsJzk4NzY1NCcsJ2FtYW5kYScsJ2JyYXppbCcsJ3dpemFyZCcsJ2hhbm5haCcsJ2xh dXJlbicsJ21hc3RlcicsJ2RvY3RvcicsJ2VhZ2xlMScsJ2dhdG9ycycsJ3NxdWlydCcsJ3No YWRvdycsJ21pY2tleScsJ21vdGhlcicsJ21vbmtleScsJ2JhaWxleScsJ2p1bmlvcicsJ25h dGhhbicsJ2FiYzEyMycsJ2tuaWdodCcsJ2FsZXhpcycsJ2ljZW1hbicsJ2Z1Y2ttZScsJ3Rp Z2VycycsJ2JhZGJveScsJ2Jvbm5pZScsJ3B1cnBsZScsJ2RlYmJpZScsJ2FuZ2VsYScsJ2pv cmRhbicsJ2FuZHJlYScsJ3NwaWRlcicsJ2hhcmxleScsJ3JhbmdlcicsJ2Rha290YScsJ2Jv b2dlcicsJ2l3YW50dScsJ2FhYWFhYScsJ2xvdmVycycsJ3BsYXllcicsJ2ZseWVycycsJ3N1 Y2tpdCcsJ2h1bnRlcicsJ2JlYXZlcicsJ21vcmdhbicsJ21hdHJpeCcsJ2Jvb21lcicsJ3J1 bm5lcicsJ2JhdG1hbicsJ3Njb29ieScsJ2Vkd2FyZCcsJ3Rob21hcycsJ3dhbHRlcicsJ2hl bHBtZScsJ2dvcmRvbicsJ3RpZ2dlcicsJ2phY2tpZScsJ2Nhc3BlcicsJ3JvYmVydCcsJ2Jv b2JvbycsJ2Jvc3RvbicsJ21vbmljYScsJ3N0dXBpZCcsJ2FjY2VzcycsJ2NvZmZlZScsJ2Jy YXZlcycsJ3h4eHh4eCcsJ3lhbmtlZScsJ3NhdHVybicsJ2J1c3RlcicsJ2dlbWluaScsJ2Jh cm5leScsJ2FwcGxlcycsJ3NvY2NlcicsJ3JhYmJpdCcsJ3ZpY3RvcicsJ2F1Z3VzdCcsJ2hv Y2tleScsJ3BlYW51dCcsJ3R1Y2tlcicsJ2tpbGxlcicsJ2NhbmFkYScsJ2dlb3JnZScsJ2pv aG5ueScsJ3NpZXJyYScsJ2JsYXplcicsJ2FuZHJldycsJ3NwYW5reScsJ2RvZ2dpZScsJzIz MjMyMycsJ3dpbnRlcicsJ3p6enp6eicsJ2JyYW5keScsJ2d1bm5lcicsJ2JlYXZpcycsJ2Nv bXBhcScsJ2hvcm5leScsJzExMjIzMycsJ2NhcmxvcycsJ2FydGh1cicsJ2RhbGxhcycsJ3Rl bm5pcycsJ3NvcGhpZScsJ2xhZGllcycsJ2NhbHZpbicsJ3NoYXZlZCcsJ3BlcHBlcicsJ2dp YW50cycsJ3N1cmZlcicsJ2ZlbmRlcicsJ3NhbXNvbicsJ2F1c3RpbicsJ21lbWJlcicsJ2Js b25kZScsJ2Jsb3dtZScsJ2Z1Y2tlZCcsJ2RhbmllbCcsJ2RvbmFsZCcsJ2dvbGRlbicsJ2dv bGZlcicsJ2Nvb2tpZScsJ3N1bW1lcicsJ2Jyb25jbycsJ3JhY2luZycsJ3NhbmRyYScsJ2hh bW1lcicsJ3Bvb2tpZScsJ2pvc2VwaCcsJ2hlbnRhaScsJ2pvc2h1YScsJ2RpYWJsbycsJ2Jp cmRpZScsJ21hZ2dpZScsJ3NleHNleCcsJ2xpdHRsZScsJ2JpdGVtZScsJzY2NjY2NicsJ3Rv cGd1bicsJ2FzaGxleScsJ3dpbGxpZScsJ3N0aWNreScsJ2Nvd2JveScsJ2FuaW1hbCcsJ3Np bHZlcicsJ3lhbWFoYScsJ3FhendzeCcsJ2Z1Y2tlcicsJ2p1c3RpbicsJ3NraXBweScsJ29y YW5nZScsJ2JhbmFuYScsJ2xha2VycycsJ21hcnZpbicsJ21lcmxpbicsJ2RyaXZlcicsJ3Jh Y2hlbCcsJ21hcmluZScsJ3NsYXllcicsJ2FuZ2VscycsJ2FzZGZnaCcsJ2JpZ2RvZycsJ3Zh Z2luYScsJ2Fwb2xsbycsJ2NoZWVzZScsJ3RveW90YScsJ3BhcmtlcicsJ21hZGRvZycsJ3Ry YXZpcycsJzEyMTIxMicsJ2xvbmRvbicsJ2hvdGRvZycsJ3dpbHNvbicsJ3N5ZG5leScsJ21h cnRpbicsJ2Rlbm5pcycsJ3Zvb2RvbycsJ2dpbmdlcicsJ21hZ251bScsJ2FjdGlvbicsJ25p Y29sZScsJ2NhcnRlcicsJ2Vyb3RpYycsJ3NwYXJreScsJ2phc3BlcicsJzc3Nzc3NycsJ3ll bGxvdycsJ3Ntb2tleScsJ2RyZWFtcycsJ2NhbWFybycsJ3hhdmllcicsJ3RlcmVzYScsJ2Zy ZWRkeScsJ3NlY3JldCcsJ3N0ZXZlbicsJ2plcmVteScsJ3Zpa2luZycsJ2ZhbGNvbicsJ3Nu b29weScsJ3J1c3NpYScsJ3RheWxvcicsJ25pcHBsZScsJzExMTExMScsJ2VhZ2xlcycsJzEz MTMxMycsJ3dpbm5lcicsJ3Rlc3RlcicsJzEyMzEyMycsJ21pbGxlcicsJ3JvY2tldCcsJ2xl Z2VuZCcsJ2Zsb3dlcicsJ3RoZW1hbicsJ3BsZWFzZScsJ29saXZlcicsJ2FsYmVydCddOw0K CXNtZF9wcm9nX2NvbW1vbl9wd1s3XSA9IFsncG9yc2NoZScsJ3Jvc2VidWQnLCdjaGVsc2Vh JywnYW1hdGV1cicsJzc3Nzc3NzcnLCdkaWFtb25kJywndGlmZmFueScsJ2phY2tzb24nLCdz Y29ycGlvJywnY2FtZXJvbicsJ3Rlc3RpbmcnLCdzaGFubm9uJywnbWFkaXNvbicsJ211c3Rh bmcnLCdib25kMDA3JywnbGV0bWVpbicsJ21pY2hhZWwnLCdnYXRld2F5JywncGhvZW5peCcs J3RoeDExMzgnLCdyYWlkZXJzJywnZm9yZXZlcicsJ3BlYWNoZXMnLCdqYXNtaW5lJywnbWVs aXNzYScsJ2dyZWdvcnknLCdjb3dib3lzJywnZG9scGhpbicsJ2NoYXJsZXMnLCdjdW1zaG90 JywnY29sbGVnZScsJ2J1bGxkb2cnLCcxMjM0NTY3JywnbmNjMTcwMScsJ2dhbmRhbGYnLCds ZWF0aGVyJywnY3VtbWluZycsJ2h1bnRpbmcnLCdjaGFybGllJywncmFpbmJvdycsJ2Fzc2hv bGUnLCdiaWdjb2NrJywnZnVja3lvdScsJ2plc3NpY2EnLCdwYW50aWVzJywnam9obnNvbics J25hdWdodHknLCdicmFuZG9uJywnYW50aG9ueScsJ3dpbGxpYW0nLCdmZXJyYXJpJywnY2hp Y2tlbicsJ2hlYXRoZXInLCdjaGljYWdvJywndm95YWdlcicsJ3lhbmtlZXMnLCdyYW5nZXJz JywncGFja2VycycsJ25ld3lvcmsnLCd0cm91YmxlJywnYmlndGl0cycsJ3dpbnN0b24nLCd0 aHVuZGVyJywnd2VsY29tZScsJ2JpdGNoZXMnLCd3YXJyaW9yJywncGFudGhlcicsJ2Jyb25j b3MnLCdyaWNoYXJkJywnODY3NTMwOScsJ3ByaXZhdGUnLCd6eGN2Ym5tJywnbmlwcGxlcycs J2Jsb25kZXMnLCdmaXNoaW5nJywnbWF0dGhldycsJ2hvb3RlcnMnLCdwYXRyaWNrJywnZnJl ZWRvbScsJ2Z1Y2tpbmcnLCdleHRyZW1lJywnYmxvd2pvYicsJ2NhcHRhaW4nLCdiaWdkaWNr JywnYWJncnR5dScsJ2NoZXN0ZXInLCdtb25zdGVyJywnbWF4d2VsbCcsJ2Fyc2VuYWwnLCdj cnlzdGFsJywncmViZWNjYScsJ3B1c3NpZXMnLCdmbG9yaWRhJywncGhhbnRvbScsJ3Njb290 ZXInLCdzdWNjZXNzJ107DQoJc21kX3Byb2dfY29tbW9uX3B3WzhdID0gWydmaXJlYmlyZCcs J3Bhc3N3b3JkJywnMTIzNDU2NzgnLCdzdGVlbGVycycsJ21vdW50YWluJywnY29tcHV0ZXIn LCdiYXNlYmFsbCcsJ3h4eHh4eHh4JywnZm9vdGJhbGwnLCdxd2VydHl1aScsJ2plbm5pZmVy JywnZGFuaWVsbGUnLCdzdW5zaGluZScsJ3N0YXJ3YXJzJywnd2hhdGV2ZXInLCduaWNob2xh cycsJ3N3aW1taW5nJywndHJ1c3RubzEnLCdtaWRuaWdodCcsJ3ByaW5jZXNzJywnc3RhcnRy ZWsnLCdtZXJjZWRlcycsJ3N1cGVybWFuJywnYmlnZGFkZHknLCdtYXZlcmljaycsJ2VpbnN0 ZWluJywnZG9scGhpbnMnLCdoYXJkY29yZScsJ3JlZHdpbmdzJywnY29jYWNvbGEnLCdtaWNo ZWxsZScsJ3ZpY3RvcmlhJywnY29ydmV0dGUnLCdidXR0aGVhZCcsJ21hcmxib3JvJywnc3Jp bml2YXMnLCdpbnRlcm5ldCcsJ3JlZHNraW5zJywnMTExMTExMTEnLCdhY2Nlc3MxNCcsJ3J1 c2gyMTEyJywnc2NvcnBpb24nLCdpbG92ZXlvdScsJ3NhbWFudGhhJywnbWlzdHJlc3MnXTsN Cg0KCS8vIENoZWNrIHB3IGFnYWluc3QgY29tbW9uIHBhc3N3b3JkcyBvZiB0aGF0IGxlbmd0 aCB0byBzZWUgaWYgaXQncyBpbiB0b3AgNTAwDQoJaWYgKHNpemUgPiAyICYmIHNpemUgPCA5 KSB7DQoJCXZhciB3aWR0aCA9IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXS5sZW5ndGg7DQoJ CWZvciAodmFyIGlkeD0wOyBpZHggPCB3aWR0aDsgaWR4KyspIHsNCgkJCWlmIChwdy50b0xv d2VyQ2FzZSgpID09IHNtZF9wcm9nX2NvbW1vbl9wd1tzaXplXVtpZHhdKSB7DQoJCQkJcmV0 dXJuIC0xOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gQ2FsY3VsYXRpb25zIHBlciBzZWNvbmQu IFRlbiBtaWxsaW9uIGlzIHJvdWdobHkgdGhlIG51bWJlciBhIGRlY2VudCBQQyBjb3VsZCBt YW5hZ2UgdW5pbmhpYml0ZWQgaW4gMjAxMC4NCgkvLyBBdXRvbWF0aWNhbGx5IGRvdWJsZWQg ZXZlcnkgMTggbW9udGhzIGFjY29yZGluZyB0byBNb29yZSdzIGxhdywgYW1vcnRpc2VkIGJ5 IG1vbnRoDQoJdmFyIGNhbGNzUGVyU2VjID0gMTAwMDAwMDA7DQoJdmFyIGR0ID0gbmV3IERh dGUoKTsNCgl2YXIgYmFzZVllYXIgPSAnMjAxMCc7DQoJdmFyIHRoaXNZZWFyID0gZHQuZ2V0 RnVsbFllYXIoKTsNCgl2YXIgdGhpc01vbnRoID0gZHQuZ2V0TW9udGgoKTsgLy8gMC0xMQ0K CXZhciBtb250aHNTaW5jZUJhc2UgPSAoKHRoaXNZZWFyIC0gYmFzZVllYXIpICogMTIpICsg dGhpc01vbnRoOw0KCXZhciBtb29yZVBlcmlvZHMgPSBNYXRoLmZsb29yKG1vbnRoc1NpbmNl QmFzZSAvIDE4KSArIDE7DQoJY2FsY3NQZXJTZWMgKj0gbW9vcmVQZXJpb2RzOw0KCXZhciBp bmNyZW1lbnRQZXJNb250aCA9IGNhbGNzUGVyU2VjIC8gMTg7IC8vIEhvdyBtYW55IGNhbGNz IGl0IGdvZXMgdXAgYnkgaW4gdGhpcyBNb29yZSBwZXJpb2QsIHBlciBtb250aA0KCWNhbGNz UGVyU2VjICs9IChpbmNyZW1lbnRQZXJNb250aCAqIChtb250aHNTaW5jZUJhc2UlMTgpKTsN Cg0KCS8vIEtlZXAgdHJhY2sgb2YgaG93IG1hbnkgY2hhcmFjdGVyIHNldHMgYXJlIHVzZWQN Cgl2YXIgcG9zc0NoYXJzID0gMDsNCgkvLyBMb3dlcmNhc2UNCglpZiAocHcubWF0Y2goL1th LXpdLykpIHsgcG9zc0NoYXJzICs9IDI2OyB9DQoJLy8gVXBwZXJjYXNlDQoJaWYgKHB3Lm1h dGNoKC9bQS1aXS8pKSB7IHBvc3NDaGFycyArPSAyNjsgfQ0KCS8vIE51bWJlcnMNCglpZiAo cHcubWF0Y2goL1xkKy8pKSB7IHBvc3NDaGFycyArPSAxMDsgfQ0KCS8vIFN5bWJvbHMNCglp ZiAocHcubWF0Y2goL1shLEAsIyzCoywkLOKCrCzCpSwlLF4sJiwqLCssPSw/LF8sfixcLSwo LCksPCw+LFwsLFwuLFxbLFxdLFx7LFx9LFx8LFw6LFw7LFwnLFwiLFxgLFwvLFxcXCxcwqxd LykgKSB7cG9zc0NoYXJzICs9IDM2fTsNCg0KCS8vIFdvcmsgb3V0IHRoZSBudW1iZXIgb2Yg cG9zc2libGUgY29tYmluYXRpb25zOiBwb3NzaWJsZSBjaGFyYWN0ZXJzIHRvIHRoZSBwb3dl ciBvZiB0aGUgcGFzc3dvcmQgbGVuZ3RoDQoJdmFyIHBvc3NDb21ib3MgPSBNYXRoLnBvdyhw b3NzQ2hhcnMsIHNpemUpOw0KDQoJLy8gRGl2aWRlIHRoZSBudW1iZXIgb2YgcG9zc2libGUg Y29tYmluYXRpb25zIGJ5IHRoZSBjYWxjdWxhdGlvbnMgYSBQQyBjYW4gZG8gcGVyIHNlY29u ZA0KCXZhciBjcmFja1RpbWVJblNlY3MgPSBwb3NzQ29tYm9zIC8gY2FsY3NQZXJTZWM7DQoN CgkvLyBTZXQgdXAgYW4gYXJyYXkgb2YgcGVyaW9kcyB3aXRoIHRoZWlyIGxlbmd0aHMgaW4g c2Vjb25kcw0KCXZhciBzbWRfcGVyaW9kcyA9IG5ldyBBcnJheSgpOw0KCXNtZF9wZXJpb2Rz Wyd0X21pbiddID0gNjA7DQoJc21kX3BlcmlvZHNbJ3RfaHInXSA9IHNtZF9wZXJpb2RzWyd0 X21pbiddICogNjA7DQoJc21kX3BlcmlvZHNbJ3RfZGF5J10gPSBzbWRfcGVyaW9kc1sndF9o ciddICogMjQ7DQoJc21kX3BlcmlvZHNbJ3RfeXInXSA9IHNtZF9wZXJpb2RzWyd0X2RheSdd ICogMzY1LjI1Ow0KCXNtZF9wZXJpb2RzWyd0X3Rob195J10gPSBzbWRfcGVyaW9kc1sndF95 ciddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9taWxfeSddID0gc21kX3BlcmlvZHNbJ3Rf dGhvX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfYmlsX3knXSA9IHNtZF9wZXJpb2Rz Wyd0X21pbF95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3RyaV95J10gPSBzbWRfcGVy aW9kc1sndF9iaWxfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9xdWFfeSddID0gc21k X3BlcmlvZHNbJ3RfdHJpX3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNbJ3RfcXVpX3knXSA9 IHNtZF9wZXJpb2RzWyd0X3F1YV95J10gKiAxMDAwOw0KCXNtZF9wZXJpb2RzWyd0X3NleF95 J10gPSBzbWRfcGVyaW9kc1sndF9xdWlfeSddICogMTAwMDsNCglzbWRfcGVyaW9kc1sndF9z ZXBfeSddID0gc21kX3BlcmlvZHNbJ3Rfc2V4X3knXSAqIDEwMDA7DQoJc21kX3BlcmlvZHNb J3Rfb2N0X3knXSA9IHNtZF9wZXJpb2RzWyd0X3NlcF95J10gKiAxMDAwOw0KCXNtZF9wZXJp b2RzWyd0X25vbl95J10gPSBzbWRfcGVyaW9kc1sndF9vY3RfeSddICogMTAwMDsNCg0KCS8v IFBlcmlvZCB0eXBlIGlzICdzZWNvbmRzJyBieSBkZWZhdWx0DQoJdmFyIHBlcmlvZFR5cGUg PSAndF9zZWMnOw0KCXZhciBzdHJlbmd0aCA9ICcnOw0KDQoJLy8gSWYgaXQgd2lsbCB0YWtl IGxlc3MgdGhhbiBhIHNlY29uZCB0byBjcmFjayB0aGUgcGFzc3dvcmQsIHNob3cgZXhhY3Rs eSBob3cgbG9uZw0KCWlmIChjcmFja1RpbWVJblNlY3MgPCAxKSB7DQoJCXN0cmVuZ3RoID0g Y3JhY2tUaW1lSW5TZWNzLnRvRml4ZWQocHJlY2lzaW9uKSArIHNtZF9wcm9nbm9zdGljc19n VHh0KCdzZWNzJyk7DQoJfSBlbHNlIHsNCgkJLy8gT3RoZXJ3aXNlIHNob3cgYSByb3VuZGVk LWRvd24gbnVtYmVyDQoJCS8vIEFkZHMgdGhlIHBsdXJhbCBvbnRvIGFueXRoaW5nIGJlZm9y ZSBhIHRob3VzYW5kIHllYXJzDQoJCXZhciBpbnRvVGhvdXNhbmRzID0gc21kX3Byb2dub3N0 aWNzX2dUeHQoJ3BsdXJhbCcpOw0KDQoJCS8vIEFkZHMgdGhlICdBYm91dCcgdG8gYW55dGhp bmcgYWZ0ZXIgc2Vjb25kcw0KCQl2YXIgaW50b01pbnV0ZXMgPSAnJzsNCg0KCQkvLyBSb3Vu ZCBkb3duIHRoZSB0aW1lDQoJCXZhciBuZXdUaW1lID0gTWF0aC5mbG9vcihjcmFja1RpbWVJ blNlY3MpOw0KDQoJCS8vIEdvIHRocm91Z2ggZGlmZmVyZW50IHBlcmlvZCBsZW5ndGhzDQoJ CWZvciAodmFyIGpkeCBpbiBzbWRfcGVyaW9kcykgew0KCQkJLy8gU3RvcCB3aGVuIHRoZSBy aWdodCBwZXJpb2QgaXMgcmVhY2hlZA0KCQkJaWYgKGNyYWNrVGltZUluU2VjcyA8IHNtZF9w ZXJpb2RzW2pkeF0pIHsgYnJlYWs7IH0NCgkJCWVsc2Ugew0KCQkJCWlmIChqZHggPT0gInRf dGhvX3kiKSB7IGludG9UaG91c2FuZHMgPSAnJzsgfQ0KCQkJCWlmIChqZHggPT0gInRfbWlu IikgeyBpbnRvTWludXRlcyA9IHNtZF9wcm9nbm9zdGljc19nVHh0KCdhYm91dCcpOyB9DQoJ CQkJbmV3VGltZSA9IE1hdGguZmxvb3IoY3JhY2tUaW1lSW5TZWNzIC8gc21kX3BlcmlvZHNb amR4XSk7DQoJCQkJcGVyaW9kVHlwZSA9IGpkeDsNCgkJCX0NCgkJfQ0KDQoJCS8vIElmIHNp bmd1bGFyDQoJCWlmIChuZXdUaW1lID09IDEpIHsNCgkJCXN0cmVuZ3RoID0gc21kX3Byb2du b3N0aWNzX2dUeHQoJ2Fib3V0JykgKyAnMSAnICsgc21kX3Byb2dub3N0aWNzX2dUeHQocGVy aW9kVHlwZSk7DQoJCX0gZWxzZSB7DQoJCQkvLyBDb252ZXJ0IG5ld1RpbWUgdG8gc3RyaW5n DQoJCQluZXdUaW1lICs9ICcnOw0KDQoJCQkvLyBTcGxpdCB3aXRoIGNvbW1hcyBldmVyeSB0 aHJlZSBkaWdpdHMNCgkJCXZhciByZWdleCA9IC8oXGQrKShcZHszfSkvOw0KDQoJCQl3aGls ZSAocmVnZXgudGVzdChuZXdUaW1lKSkgew0KCQkJCW5ld1RpbWUgPSBuZXdUaW1lLnJlcGxh Y2UocmVnZXgsICckMScgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgnZGlnaXRzZXAnKSArICck MicpOw0KCQkJfQ0KDQoJCQkvLyBDb21iaW5lIHdpdGggJ2Fib3V0JyBpZiBuZWVkZWQsIHRo ZSB0aW1lIGl0IHdpbGwgdGFrZSwgdGhlIHBlcmlvZCB0eXBlLCBhbmQgdGhlICdzJyBpZiBu ZWVkZWQNCgkJCXN0cmVuZ3RoID0gaW50b01pbnV0ZXMgKyBuZXdUaW1lICsgIiAiICsgc21k X3Byb2dub3N0aWNzX2dUeHQocGVyaW9kVHlwZSkgKyBpbnRvVGhvdXNhbmRzOw0KCQl9DQoJ fQ0KDQoJcmV0dXJuIHN0cmVuZ3RoOw0KfQ0KDQpmdW5jdGlvbiBwYXNzd29yZENoZWNrKHRo YXQsIGUpIHsNCglpZiAoZS5rZXlDb2RlID09IDI3IHx8IGUuY2hhckNvZGUgPT0gMjcpIHsN CgkJalF1ZXJ5KHRoYXQpLnZhbCgiIik7DQoJfQ0KDQoJdmFyIHBhc3N3b3JkID0galF1ZXJ5 KHRoYXQpLnZhbCgpOw0KDQoJaWYgKHBhc3N3b3JkICE9ICIiKSB7DQoJCXZhciBzdHJlbmd0 aCA9IHNtZF9wcm9nX2Nocm9ub1N0cmVuZ3RoKHBhc3N3b3JkKTsNCg0KCQkvL1RPRE86IGdU eHQoKQ0KCQlpZiAoc3RyZW5ndGggPT0gLTEpIHsNCgkJCWpRdWVyeSgiI3NtZF9wcm9nX21l dGVyIikuaHRtbChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfcHJlYW1ibGUnKSArICcgPGRp diBjbGFzcz0ic21kX3Byb2dfcGFzc19zdHJlbmd0aCI+JyArIHNtZF9wcm9nbm9zdGljc19n VHh0KCdwd19jb21tb24nKSArICc8L2Rpdj4gJysgc21kX3Byb2dub3N0aWNzX2dUeHQoJ3B3 X3Bvc3RhbWJsZScpKS5mYWRlSW4oNTAwKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiI3Nt ZF9wcm9nX21ldGVyIikuaHRtbChzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfdGFrZScpICsg JyA8ZGl2IGNsYXNzPSJzbWRfcHJvZ19wYXNzX3N0cmVuZ3RoIj4nICsgc3RyZW5ndGggKyAn PC9kaXY+ICcgKyBzbWRfcHJvZ25vc3RpY3NfZ1R4dCgncHdfY3JhY2snKSkuZmFkZUluKDUw MCk7DQoJCX0NCgl9IGVsc2Ugew0KCQlqUXVlcnkoIiNzbWRfcHJvZ19tZXRlciIpLmhpZGUo KTsNCgl9DQp9DQpqUXVlcnkoZnVuY3Rpb24oKSB7DQoJdmFyIHNtZF9wcm9nX21ldGVyID0g JzxkaXYgaWQ9InNtZF9wcm9nX21ldGVyIj48L2Rpdj4nOw0KCWpRdWVyeSgiI2NoYW5nZV9w YXNzd29yZCIpLmFwcGVuZChzbWRfcHJvZ19tZXRlcik7DQoJalF1ZXJ5KCIjc21kX3Byb2df bWV0ZXIiKS5oaWRlKCk7DQoJalF1ZXJ5KCIjbmV3X3Bhc3MiKS5rZXlkb3duKGZ1bmN0aW9u KGUpIHsNCgkJaWYgKGUua2V5Q29kZSA9PSAxMyB8fCBlLmNoYXJDb2RlID09IDEzKSB7DQoJ CQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9KTsNCglqUXVlcnkoIiNuZXdfcGFzcyIpLmtleXVw KGZ1bmN0aW9uKGUpew0KCQlwYXNzd29yZENoZWNrKHRoaXMsIGUpOw0KCX0pOw0KfSk7DQov L11dPg0KPC9zY3JpcHQ+DQpFT1M7DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy8gV2ViIHBhZ2UJ CSA6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHByb3RlY3Rvcg0KLy8gQXV0b3IJCQkJ OiBIdWdvIFNvdXNhIAkJYWRhbWFzdG9yNjY2QGdtYWlsLmNvbQ0KLy8gRGF0ZQkJCQkgOiAy MDEwLTAzLTI1DQovLyBWZXJzaW9uCQkJOiAwLjMuMS4xDQovLw0KLy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmNs YXNzIHNtZF9wcm9nX1BoUHJvdGVjdG9yIHsNCgl2YXIgJFNIT1dfRVJST1JTOw0KDQoJcHVi bGljIGZ1bmN0aW9uIHNtZF9wcm9nX1BoUHJvdGVjdG9yKCRzaG93X2Vycm9ycykgew0KCQkk dGhpcy0+U0hPV19FUlJPUlM9JHNob3dfZXJyb3JzOw0KCQlpZiAoJHRoaXMtPlNIT1dfRVJS T1JTKSB7DQoJCQllcnJvcl9yZXBvcnRpbmcoRV9FUlJPUiB8IEVfV0FSTklORyB8IEVfUEFS U0UpOwkgLy9TaG93IGVycm9ycw0KCQkJaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAiMSIp OwkvL2Rpc3BsYXkgZXJyb3JzDQoJCX0gZWxzZSB7DQoJCQlpbmlfc2V0KCdkaXNwbGF5X2Vy cm9ycycsICIwIik7IC8vZGlzcGxheSBlcnJvcnMNCgkJCWluaV9zZXQoJ2xvZ19lcnJvcnMn LCAiMSIpOwkvL2xvZ19lcnJvcnMNCgkJfQ0KCX0NCg0KCS8qDQoJKiBNYWluIGZ1bmN0aW9u IHRvIGJlIGNhbGxlZCBpbiBhIGluZGV4IHBhZ2UgdGhhdCByZWRpcmVjdHMgdG8gb3RoZXIg cGFnZXMNCgkqDQoJKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNNYWxpY2lvdXMoKSB7DQoJCSRz cWxpID0gMDsNCg0KCQkkc3FsaSA9IGNhbGxiYWNrX2V2ZW50KCdzbWRfcHJvZ25vc3RpY3Mn LCAnc3FsX2luamVjdGlvbicsIGZhbHNlKTsNCg0KCQlpZiAoISRzcWxpKSB7DQoJCQkkbnVt X2JhZF93b3JkczEgPSAkdGhpcy0+Q2hlY2tHZXQoKTsNCgkJCSRudW1fYmFkX3dvcmRzMiA9 ICR0aGlzLT5DaGVja1Bvc3QoKTsNCg0KCQkJJHRocmVzaCA9IGV4cGxvZGUoJywnLCBnZXRf cHJlZignc21kX3Byb2dub3N0aWNzX2luamVjdF9zZW5zaXRpdml0eScsIDEpKTsNCgkJCWlm ICghaXNzZXQoJHRocmVzaFsxXSkpIHsNCgkJCQkkdGhyZXNoWzFdID0gJHRocmVzaFswXTsN CgkJCX0NCgkJCSR0aHJlc2hbMF0gPSBpc19udW1lcmljKCR0aHJlc2hbMF0pID8gJHRocmVz aFswXSA6IDE7DQoJCQkkdGhyZXNoWzFdID0gaXNfbnVtZXJpYygkdGhyZXNoWzFdKSA/ICR0 aHJlc2hbMV0gOiAxOw0KDQoJCQlpZiAoJG51bV9iYWRfd29yZHMxID49ICR0aHJlc2hbMF0p IHsNCgkJCQkkc3FsaSA9IHRydWU7DQoJCQl9DQoNCgkJCWlmICgkbnVtX2JhZF93b3JkczIg Pj0gJHRocmVzaFsxXSkgew0KCQkJCSRzcWxpID0gdHJ1ZTsNCgkJCX0NCgkJfQ0KDQoJCXJl dHVybiAoKCRzcWxpIDw9IDApID8gZmFsc2UgOiAkc3FsaSk7DQoJfQ0KDQoJLy9jaGVjayBm b3Igc3FsIGluamVjdGlvbiBhbmQgWFNTIGluIFBvc3QgdmFyaWFibGVzDQoJcHJpdmF0ZSBm dW5jdGlvbiBDaGVja1Bvc3QoKSB7DQoJCSRudW1fYmFkX3dvcmRzID0gMDsNCg0KCQlmb3Jl YWNoKCRfUE9TVCBhcyAkY2FtcG8gPT4gJGlucHV0KSB7DQoJCQkkX1BPU1RbJGNhbXBvXT0g ZG9BcnJheSgkX1BPU1RbJGNhbXBvXSwgJ2h0bWxlbnRpdGllcycpOyAvLyBYU1MgUFJPVEVD VElPTg0KCQkJJG51bV9iYWRfd29yZHMgPSAkbnVtX2JhZF93b3JkcyArICR0aGlzLT53b3Jk RXhpc3RzKCRpbnB1dCk7IC8vU1FMIElOSkVDVElPTg0KCQl9DQoNCgkJcmV0dXJuICRudW1f YmFkX3dvcmRzOw0KCX0NCg0KCS8vY2hlY2sgZm9yIHNxbCBpbmplY3Rpb24gYW5kIFhTUyBp biBHRVQgdmFyaWFibGVzDQoJcHJpdmF0ZSBmdW5jdGlvbiBDaGVja0dldCgpIHsNCgkJJG51 bV9iYWRfd29yZHMgPSAwOw0KDQoJCWZvcmVhY2goJF9HRVQgYXMgJGNhbXBvID0+ICRpbnB1 dCl7DQoJCQkkX0dFVFskY2FtcG9dPSBkb0FycmF5KCRfR0VUWyRjYW1wb10sICdodG1sZW50 aXRpZXMnKTsgLy8gWFNTIFBST1RFQ1RJT04NCg0KCQkJaWYoJHRoaXMtPmlzSWRJbmplY3Rp b24oJGNhbXBvLCRpbnB1dCkpeyAvL1NRTCBJRCBJTkpFQ1RJT04NCgkJCQkkbnVtX2JhZF93 b3JkcyA9CSRudW1fYmFkX3dvcmRzICsgMC41Ow0KCQkJfQ0KDQoJCQkkbnVtX2JhZF93b3Jk cyA9ICRudW1fYmFkX3dvcmRzICsgJHRoaXMtPndvcmRFeGlzdHMoJGlucHV0KTsgLy9TUUwg SU5KRUNUSU9ODQoJCX0NCg0KCQlyZXR1cm4gJG51bV9iYWRfd29yZHM7DQoJfQ0KDQoJLyoq DQoJKglyZXR1cm4gdHJ1ZSBpZiBpbmplY3Rpb24gc3FsIHdvcmQgaXMgZm91bmQuDQoJKglU aGUgaW5wdXQgaXMgdGVzdGVkIGlmIGlzIGVxdWFsIHRvIGEgc3FsIGluamVjdGlvbiBwYXR0 ZXJuDQoJKglcYlteYS16XSo/ZHJvcFteYS16XSo/XGINCgkqCSBodHRwOi8vd3d3LnBhZ2Vj b2x1bW4uY29tL3Rvb2wvcmVndGVzdC5odG0NCgkqKi8vKgkJICIvKiIsIisiCQkJCSovDQoJ cHJpdmF0ZSBmdW5jdGlvbiB3b3JkRXhpc3RzKCRpbnB1dCkgew0KCQkkbnVtX2JhZF93b3Jk cyA9IDA7DQoNCgkJLyoNCgkJIFdPUkQgQUZURVINCgkJKi8NCgkJJGJhZGRlbGltMSA9ICJb XmEtel0qIjsJLy90aGUgZGVsaW0gc2hvdWxkIGJlIGZyb20gImEiIHRvICJiIiBhbnl0aGlu ZyBlbHNlIGlzIGNvbnNpZGVyZWQgc3FsIGluamVjdGlvbiA6KQ0KCQkkYmFkZGVsaW0yID0g IlteYS16XSsiOw0KCQkkYmFkd29yZHM9IGFycmF5KCJ1bmlvbiIsICJzZWxlY3QiLCAic2hv dyIsICJpbnNlcnQiLCAidXBkYXRlIiwgImRlbGV0ZSIsICJkcm9wIiwgInRydW5jYXRlIiwg ImNyZWF0ZSIsICJsb2FkX2ZpbGUiLCAiZXhlYyIsICIjIiwgIi0tIik7DQoJCS8vIi8qIg0K CQlmb3JlYWNoKCRiYWR3b3JkcyBhcyAkYmFkd29yZCkgew0KCQkJJGV4cHJlc3Npb24gPSAi LyIuJGJhZGRlbGltMS5zdHJ0b2xvd2VyKCRiYWR3b3JkKS4kYmFkZGVsaW0yLiIvIjsNCgkJ CWlmIChwcmVnX21hdGNoICgkZXhwcmVzc2lvbiwgc3RydG9sb3dlcigkaW5wdXQpKSkgew0K Ly9kbXAoJypXQSonLCRiYWR3b3JkLCAkaW5wdXQpOw0KCQkJCS8vZGllKCJzcWwgaW5qZWN0 aW9uISIpOw0KCQkJCSRudW1fYmFkX3dvcmRzKys7DQoJCQl9DQoJCX0NCg0KCQkvKg0KCQlC RUZPUkUgV09SRA0KCQkqLw0KCQkkYmFkZGVsaW0xID0gIlteYS16XSsiOwkvL3RoZSBkZWxp bSBzaG91bGQgYmUgZnJvbSAiYSIgdG8gImIiIGFueXRoaW5nIGVsc2UgaXMgY29uc2lkZXJl ZCBzcWwgaW5qZWN0aW9uIDopDQoJCSRiYWRkZWxpbTIgPSAiW15hLXpdKiI7DQoJCSRiYWR3 b3Jkcz0gYXJyYXkoIkBAdmVyc2lvbiIsICJAQGRhdGFkaXIiLCAidXNlciIsICJ2ZXJzaW9u Iik7DQoNCgkJZm9yZWFjaCgkYmFkd29yZHMgYXMgJGJhZHdvcmQpIHsNCgkJCSRleHByZXNz aW9uID0gIi8iLiRiYWRkZWxpbTEuc3RydG9sb3dlcigkYmFkd29yZCkuJGJhZGRlbGltMi4i LyI7DQoJCQlpZiAocHJlZ19tYXRjaCAoJGV4cHJlc3Npb24sIHN0cnRvbG93ZXIoJGlucHV0 KSkpIHsNCi8vZG1wKCcqQlcqJywkYmFkd29yZCwgJGlucHV0KTsNCgkJCQkvL2RpZSgic3Fs IGluamVjdGlvbiEiKTsNCgkJCQkkbnVtX2JhZF93b3JkcysrOw0KCQkJfQ0KCQl9DQoNCgkJ LyoNCgkJQkVGT1JFIFdPUkQgQUZURVINCgkJKi8NCgkJJGJhZGRlbGltMSA9ICJbXmEtel0r IjsJLy90aGUgZGVsaW0gc2hvdWxkIGJlIGZyb20gImEiIHRvICJiIiBhbnl0aGluZyBlbHNl IGlzIGNvbnNpZGVyZWQgc3FsIGluamVjdGlvbiA6KQ0KCQkkYmFkZGVsaW0yID0gIlteYS16 XSsiOw0KCQkkYmFkd29yZHM9IGFycmF5KCJiZW5jaG1hcmsiLCAiLS0iLCAidmFyY2hhciIs ICJjb252ZXJ0IiwgImNoYXIiLCAibGltaXQiLCAiaW5mb3JtYXRpb25fc2NoZW1hIiwidGFi bGVfbmFtZSIsICJmcm9tIiwgIndoZXJlIiwgIm9yZGVyIik7DQoNCgkJZm9yZWFjaCgkYmFk d29yZHMgYXMgJGJhZHdvcmQpIHsNCgkJCSRleHByZXNzaW9uID0gIi8iLiRiYWRkZWxpbTEu c3RydG9sb3dlcigkYmFkd29yZCkuJGJhZGRlbGltMi4iLyI7DQoJCQlpZiAocHJlZ19tYXRj aCAoJGV4cHJlc3Npb24sIHN0cnRvbG93ZXIoJGlucHV0KSkpIHsNCi8vZG1wKCcqQi1XLUEq JywkYmFkd29yZCwgJGlucHV0KTsNCgkJCQkvL2RpZSgic3FsIGluamVjdGlvbiEiKTsNCgkJ CQkkbnVtX2JhZF93b3JkcysrOw0KCQkJfQ0KCQl9DQovL2RtcCgkbnVtX2JhZF93b3Jkcyk7 DQoJCXJldHVybiAkbnVtX2JhZF93b3JkczsNCgl9DQoNCgkvKioNCgkqCXJldHVybiB0cnVl IGlmIGFuIElEIGlzIG5vdCByZWFsbHkgYW4gSUQNCgkqDQoJKiovDQoJcHJpdmF0ZSBmdW5j dGlvbiBpc0lESW5qZWN0aW9uKCRjYW1wbywkaW5wdXQpIHsNCgkJJHJlZz0iL15pZC8iOw0K DQoJCWlmKHByZWdfbWF0Y2goJHJlZywgJGNhbXBvKSkgew0KCQkJaWYoISR0aGlzLT5zdHJp bmdJc051bWJlck5vdFplcm8oJGlucHV0KSkgew0KCQkJCXJldHVybiB0cnVlOwkgLy8gaWYg aXMgSUQgYW5kIE5PVCBJTlRFR0VSIG9yIE5VTEwgLT4gU1FMIElOSkVDVElPTiEhDQoJCQl9 DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJKglyZXR1cm4gdHJ1ZSBp ZiB0aGUgc3RyaW5nIGlzIGEgbnVtYmVyIChkaWZmZXJlbnQgZnJvbSAwLCB0aGUgaWQgY291 bGQgbm90IGJlIHplcm8hKQ0KCSogIFRPRE86IGNoZWNrIGlmICphbGwqIGNoYXJzIGFyZSB6 ZXJvIGFuZCBmYWlsLCBlLmcuIGlkPTAwMDANCgkqKi8NCglwcml2YXRlIGZ1bmN0aW9uIHN0 cmluZ0lzTnVtYmVyTm90WmVybyggJHN0cmluZyApIHsNCgkJaWYgKGVtcHR5KCRzdHJpbmcp KSB7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJcmV0dXJuIGN0eXBlX2RpZ2l0KCRzdHJp bmcpOw0KCX0NCn0gLy9lbmQgY2xhc3MNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFz IHJlcXVpcmVkDQovLyBUT0RPOiBUZXh0cGFjayB0aGlzDQpmdW5jdGlvbiBzbWRfcHJvZ25v c3RpY3NfZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7DQoJZ2xvYmFsICRwcmVmcywg JHNtZF9wcm9nbm9zdGljc19ldmVudDsNCgkkbGFuZyA9IGFycmF5KA0KCQknYWNrZWQnID0+ ICdBbGFybXMgYWNrbm93bGVkZ2VkLicsDQoJCSdhbGFybV9mcmVxJyA9PiAnQWxhcm0gb24g ZGV0ZWN0aW9uIGFuZCBldmVyeTogJywNCgkJJ2FuZCcgPT4gJyBhbmQgJywNCgkJJ2F1dGhf dXNlcnMnID0+ICdSZXN0cmljdCBwcm9nbm9zdGljIGNvbmZpZyB0bzogJywNCgkJJ2F2YWls X2JyYW5jaCcgPT4gJ0FuIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vZG93bmxv YWQiPnVwZGF0ZSB0byB0aGlzIFRleHRwYXR0ZXJuIHNlcmllcyBpcyBhdmFpbGFibGU8L2E+ JywNCgkJJ2F2YWlsX3R4cCcgPT4gJ0EgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLmNv bS9kb3dubG9hZCI+bmV3IHZlcnNpb24gb2YgVGV4dHBhdHRlcm4gaXMgYXZhaWxhYmxlPC9h PicsDQoJCSdibG9jaycgPT4gJ0Jsb2NrJywNCgkJJ2NoX2FkZCcgPT4gJ0FkZGl0aW9ucycs DQoJCSdjaF9kZWwnID0+ICdEZWxldGlvbnMnLA0KCQknY2hfbW9kJyA9PiAnTW9kaWZpY2F0 aW9ucycsDQoJCSdjaGVja19iZXR3ZWVuJyA9PiAnQ2hlY2sgZmlsZXMgYmV0d2VlbjogJywN CgkJJ2NoZWNrX2ZvcicgPT4gJ0NoZWNrIGZpbGVzIGZvcjogJywNCgkJJ2NoZWNrX2ZyZXEn ID0+ICdDaGVjayBmaWxlcyAoYXQgbW9zdCkgZXZlcnk6ICcsDQoJCSdjaGVja19xdHknID0+ ICdDaGVjayB0aGlzIG1hbnkgZmlsZXMgZWFjaCB0aW1lOiAnLA0KCQknY2hlY2tfd2hlcmUn ID0+ICdDaGVjayBmaWxlcyBvbiBwdWJsaWMgc2lkZSBjbGlja3M6ICcsDQoJCSdjc2knID0+ ICdHYXRoZXIgZm9yZW5zaWNzIGFuZCBzZW5kIGZvciBhbmFseXNpcycsDQoJCSdjc2lfc2Vu dCcgPT4gJyBGb3JlbnNpY3MgZGF0YSBzZW50JywNCgkJJ2NzdicgPT4gJyhjb21tYS1zZXBh cmF0ZWQpJywNCgkJJ2N1cnJtb24nID0+ICdZb3UgYXJlIGN1cnJlbnRseSBtb25pdG9yaW5n IHtjdXJyfSBvdXQgb2Yge291dG9mfSBhdmFpbGFibGUgZmlsZXMuJywNCgkJJ2RvY3Jvb3Rf ZmlsZXMnID0+ICdDb25zaWRlciBtb3ZpbmcgdGhlICJmaWxlcyIgZm9sZGVyIG91dHNpZGUg b2YgeW91ciBzaXRlIHJvb3QgZm9sZGVyLiBZb3UgY2FuIGRvIHRoaXMgdmlhIHRoZSAiQWRt aW4gPiBQcmVmcyA+IEFkdmFuY2VkID4gRmlsZSBkaXJlY3RvcnkgcGF0aCIgc2V0dGluZy4n LA0KCQknZG9jcm9vdF9wcm9nbm9zdGljcycgPT4gJ1BsZWFzZSBjaGFuZ2UgdGhlICJQcm9n bm9zdGljcyBmb2xkZXIiIHNldHRpbmcgdG8gYSBkaXJlY3Rvcnkgb3V0c2lkZSB5b3VyIHNp dGUgcm9vdCBmb2xkZXIuJywNCgkJJ2RvY3Jvb3RfdG1wJyA9PiAnQ29uc2lkZXIgbW92aW5n IHRoZSAidG1wIiBmb2xkZXIgb3V0c2lkZSBvZiB5b3VyIHNpdGUgcm9vdCBmb2xkZXIuIFlv dSBjYW4gZG8gdGhpcyB2aWEgdGhlICJBZG1pbiA+IFByZWZzID4gQWR2YW5jZWQgPiBUZW1w b3JhcnkgZGlyZWN0b3J5IHBhdGgiIHNldHRpbmcuJywNCgkJJ2V4Y2x1ZGlyJyA9PiAnRXhj bHVkZSBmb2xkZXJzOiAnLA0KCQknZmlsZXNfdXBkYXRlZCcgPT4gJ0ZpbGUgbGlzdCB1cGRh dGVkJywNCgkJJ2hlbHBfbGluaycgPT4gJyg8YSBocmVmPSJ7bGlua30iPkhlbHA8L2E+KScs DQoJCSdobXMnID0+ICcoaHJzOm1pbnM6c2VjcyknLA0KCQknaWdub3JlcycgPT4gJ0lnbm9y ZSBmaWxlczogJywNCgkJJ2xibF9jaGFuZ2VkJyA9PiAnQ2hhbmdlZCcsDQoJCSdsYmxfaGFz aG1vZCcgPT4gJ0NPTVBST01JU0VEJywNCgkJJ2xibF9taXNzaW5nJyA9PiAnTWlzc2luZycs DQoJCSdsYmxfYWRkZWQnID0+ICdBZGRlZCAobm90IG1vbml0b3JlZCknLA0KCQknbGlzdGxv YycgPT4gJ0ZpbGUgbG9jYXRpb25zOiAnLA0KCQknbWFpbHRvJyA9PiAnU2VuZCBlLW1haWwg dG86ICcsDQoJCSdtYWlsdG9fY3NpJyA9PiAnU2VuZCBmb3JlbnNpY3MgdG86ICcsDQoJCSdt b25maWxlc19leHBsYWluJyA9PiAnU2VsZWN0IGFsbCB0aGUgZmlsZXMgeW91IHdpc2ggdG8g bW9uaXRvciBhbmQgY2xpY2sgU2F2ZS4gQWx0ZXJpbmcgdGhpcyBsaXN0IHdpbGwgYXV0b21h dGljYWxseSBhY2tub3dsZWRnZSBhbnkgb3V0c3RhbmRpbmcgYWxhcm1zIGFnYWluc3QgdGhl IHNlbGVjdGVkIGZpbGVzLicsDQoJCSdub19hbGFybXMnID0+ICdObyBhbGFybXMgdG8gYWNr bm93bGVkZ2UgYXQgcHJlc2VudC4nLA0KCQknbm9fZmlsZXMnID0+ICdObyBmaWxlcyB0byBs aXN0LiBDaGVjayB0aGUgcGx1Z2luIHNldHVwIChhbmQgU2F2ZSBpdCkuJywNCgkJJ25vX2xv Z19lbnRyaWVzJyA9PiAnTm8gbG9nIGFjdGl2aXR5IGFyb3VuZCB0aGUgdGltZSBvZiB0aGUg ZGlmZmVyZW5jZXMuJywNCgkJJ25vbmVfc2VsZWN0ZWQnID0+ICdObyBmaWxlcyBzZWxlY3Rl ZCcsDQoJCSdub3Rfd3JpdGFibGUnID0+ICd7bG9jYXRpb259IGlzIG5vdCBhIGRpcmVjdG9y eSBvciBpcyBub3Qgd3JpdGFibGUnLA0KCQknbm90aWZ5X2VtYWlsJyA9PiAnRS1tYWlsJywN CgkJJ25vdGlmeV90eHAnID0+ICdUWFAgaW50ZXJmYWNlJywNCgkJJ25vdGlmeV92aWEnID0+ ICdOb3RpZnkgdmlhOiAnLA0KCQkncHJlYW1ibGVfYWRkZWQnID0+ICdUaGVzZSBmaWxlcyBo YXZlIGJlZW4gYWRkZWQ6ICcsDQoJCSdwcmVhbWJsZV9maWxlcycgPT4gJ0ZpbGUgY29udGVu dHMgZm9sbG93czogJywNCgkJJ3ByZWFtYmxlX2hhc2hkb3duJyA9PiAnV0FSTklORyEgVGhl IGNoZWNrc3VtcyBmaWxlIGlzIG1pc3NpbmcuJywNCgkJJ3ByZWFtYmxlX2hhc2htb2QnID0+ ICdXQVJOSU5HISBUaGUgY2hlY2tzdW1zIGZpbGUgaGFzIGJlZW4gYWx0ZXJlZDogJywNCgkJ J3ByZWFtYmxlX21pc3MnID0+ICdUaGVzZSBmaWxlcyBhcmUgbWlzc2luZzogJywNCgkJJ3By ZWFtYmxlX25vaycgPT4gJ1RoZXNlIGZpbGVzIGRpZmZlciBmcm9tIHRoZWlyIGV4cGVjdGVk IGNvbnRlbnQ6ICcsDQoJCSdwcmVhbWJsZV9zcWxfaW5qZWN0JyA9PiAnUG9zc2libGUgU1FM IGluamVjdGlvbiBkZXRlY3RlZCcsDQoJCSdwcmVhbWJsZV90eHBsb2cnID0+ICdMb2cgZW50 cmllcyBwcmlvciB0byB0aGlzIGRldGVjdGlvbjogJywNCgkJJ3Byb2dsb2MnID0+ICdQcm9n bm9zdGljcyBmb2xkZXI6ICcsDQoJCSdwcm9ncGZ4JyA9PiAnVW5pcXVlIHByZWZpeDogJywN CgkJJ3BubF9hY2snID0+ICdBbGFybXMnLA0KCQkncG5sX2Fja2l0JyA9PiAnQWNrbm93bGVk Z2UnLA0KCQkncG5sX2FkdmljZScgPT4gJ0FkdmljZScsDQoJCSdwbmxfY3NpJyA9PiAnU2Vu ZCBGb3JlbnNpY3MnLA0KCQkncG5sX2ZpbGVzJyA9PiAnRmlsZXMnLA0KCQkncG5sX2lnbm9y ZScgPT4gJ0lnbm9yZScsDQoJCSdwbmxfc2V0dXAnID0+ICdTZXR1cCcsDQoJCSdwb3N0YW1i bGUnID0+ICdBY2tub3dsZWRnZSBhbGFybXMnLA0KCQkncmVxX2hlYWRlcnMnID0+ICdCbG9j ayByZXF1ZXN0IGhlYWRlcnM6ICcsDQoJCSdyZXFfbm90X2FsbG93ZWQnID0+ICdSRVFVRVNU X01FVEhPRCBub3QgYWxsb3dlZDoge3JlcX0nLA0KCQkncmhfZGVsJyA9PiAnREVMRVRFJywN CgkJJ3JoX3B1dCcgPT4gJ1BVVCcsDQoJCSdyaF90cmFjZScgPT4gJ1RSQUNFJywNCgkJJ3R0 bF9hY2snID0+ICdQcm9nbm9zdGljIGFsYXJtIGFja25vd2xlZGdlbWVudCcsDQoJCSd0dGxf YWR2aWNlJyA9PiAnUHJvZ25vc3RpYyBhZHZpY2UnLA0KCQkndHRsX2ZpbGVzJyA9PiAnUHJv Z25vc3RpYyBmaWxlIG1vbml0b3JpbmcnLA0KCQkndHRsX2ZpbGVvcHRzJyA9PiAnRmlsZXN5 c3RlbSBvcHRpb25zJywNCgkJJ3R0bF9tb25vcHRzJyA9PiAnTW9uaXRvcmluZyBvcHRpb25z JywNCgkJJ3R0bF9wbHVnb3B0cycgPT4gJ1BsdWdpbiBvcHRpb25zJywNCgkJJ3R0bF9yZWFs b3B0cycgPT4gJ1JlYWx0aW1lIG9wdGlvbnMnLA0KCQkndHRsX3NldHVwJyA9PiAnUHJvZ25v c3RpYyBzZXR1cCcsDQoJCSdycGNfZXhpc3RzJyA9PiAnVGhlIHJwYyBkaXJlY3RvcnkgaXMg bm90IGJlaW5nIHVzZWQuIENvbnNpZGVyIHJlbW92aW5nIGl0LicsDQoJCSdydF9oZHInID0+ ICdIZWFkZXIgdmlvbGF0aW9ucycsDQoJCSdydF9zcWwnID0+ICdTUUwgaW5qZWN0aW9ucycs DQoJCSdzZWNvbmRzJyA9PiAnKHNlY29uZHMpJywNCgkJJ3NlbmRfZm9yZW5zaWNzJyA9PiAn U2VuZCBmb3JlbnNpY3MgZm9yOiAnLA0KCQknc2Vuc2l0aXZpdHknID0+ICdTZW5zaXRpdml0 eSB0aHJlc2hvbGQ6ICcsDQoJCSdzZW5zaXRpdml0eV9leHBsYWluJyA9PiAnKDE9bW9zdCBz ZW5zaXRpdmUpJywNCgkJJ3NldHVwX2V4aXN0cycgPT4gJ1RoZSBzZXR1cCBkaXJlY3Rvcnkg c3RpbGwgZXhpc3RzLiBQbGVhc2UgZGVsZXRlIGl0LicsDQoJCSdzbWRfcHJvZ25vc3RpY3Mn ID0+ICdQcm9nbm9zdGljcycsDQoJCSdzaG93X2dyYW50cycgPT4gJ1lvdXIgVFhQIHVzZXIg Y2FuIGFjY2VzcyB0aGUgTXlTUUwgcHJpdmlsZWdlcyBpbiB0aGUgREIuIENvbnNpZGVyIGFj Y2Vzc2luZyB0aGUgREIgdXNpbmcgYSBsZXNzIHByaXZpbGVnZWQgdXNlci4nLA0KCQknc3Fs X2ZpbGVfcHJpdnMnID0+ICdZb3VyIE15U1FMIHVzZXIgaGFzIEZJTEUgcHJpdmlsZWdlcy4g Q29uc2lkZXIgcmV2b2tpbmcgdGhpcyByaWdodCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3Nh cnkuJywNCgkJJ3NxbF9pbmplY3QnID0+ICdQcm90ZWN0IGFnYWluc3QgU1FMIGluamVjdGlv bjogJywNCgkJJ3N0YXRfZ2lkJyA9PiAnR3JvdXAgSUQ6ICcsDQoJCSdzdGF0X21vZCcgPT4g J01vZGlmaWVkOiAnLA0KCQknc3RhdF9uYW1lJyA9PiAnRmlsZW5hbWU6ICcsDQoJCSdzdGF0 X3NpemUnID0+ICdTaXplOiAnLA0KCQknc3RhdF91aWQnID0+ICdVc2VyIElEOiAnLA0KCQkn c3ViamVjdCcgPT4gJ1Byb2dub3N0aWNzICgnLiRwcmVmc1snc2l0ZXVybCddLicpJywNCgkJ J3N1YmplY3RfY3NpJyA9PiAnUHJvZ25vc3RpY3MgKCcuJHByZWZzWydzaXRldXJsJ10uJykg Zm9yZW5zaWNzJywNCgkJJ3RpZ2h0JyA9PiAnWW91IHJ1biBhIHByZXR0eSB0aWdodCBzaGlw LiBTdGF5IGZyb3N0eS4nLA0KCQkndHhwZGlyJyA9PiAnQWRtaW4tc2lkZSBVUkw6ICcsDQoJ CSd3YXJuX2xvYycgPT4gJ0ZpbGUgbG9jYXRpb25zIGNoYW5nZWQuIFVwZGF0ZSB5b3VyIDxh IGhyZWY9ImluZGV4LnBocD9ldmVudD0nLiRzbWRfcHJvZ25vc3RpY3NfZXZlbnQuJyYjMzg7 c3RlcD1zbWRfcHJvZ25vc3RpY3NfZmlsZXMiPmxpc3Qgb2YgZmlsZXM8L2E+IG5vdycsDQoJ CSd3aXRoJyA9PiAnIHdpdGg6ICcsDQoJKTsNCglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRd LCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiIxIjtz OjU6ImZsYWdzIjtzOjE6IjEiO3M6NDoiaGVscCI7czoyNzY4ODoiPGRpdiBpZD0ic21kX2hl bHAiPgoKCTxoMT5zbWRfcHJvZ25vc3RpY3M8L2gxPgoKCTxwPlRoZSA8ZW0+QWRtaW4gLSZn dDsgRGlhZ25vc3RpY3M8L2VtPiB0YWIgaXMgZ3JlYXQgaWYgeW91IHJlbWVtYmVyIHRvIGxv b2sgYXQgaXQgZnJvbSB0aW1lIHRvIHRpbWUuIEJ1dCBpZiB5b3VyIHNlcnZlciBpcyBjb21w cm9taXNlZCwgaG93IHdvdWxkIHlvdSBrbm93IGFib3V0IGEgc25lYWt5IFRyb2phbiBvciBt YWx3YXJlIHVudGlsIHlvdXIgdmlzaXRvcnMgY29tcGxhaW4gb3IgdGhlIHNlYXJjaCBlbmdp bmVzIGJsb2NrIHlvdXIgc2l0ZT88L3A+CgoJPHA+VGhlIGFuc3dlciBpcyB0byB1c2Ugc21k X3Byb2dub3N0aWNzIHRvIHRlbGwgeW91IHdoZW4gdGhpbmdzIGhhdmUgY2hhbmdlZCBzbyB5 b3UgY2FuIHRha2UgYWN0aW9uIGltbWVkaWF0ZWx5LjwvcD4KCgk8aDI+RmVhdHVyZXM8L2gy PgoKCTx1bD4KCQk8bGk+TW9uaXRvciBmaWxlcyBhbmQgYXR0YWNrcyBpbiBhbmQgYXJvdW5k IHlvdXIgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW5zdGFsbGF0aW9uPC9saT4K CQk8bGk+QXV0b21hdGljYWxseSBkZXRlY3QgYW55IGNoYW5nZXMgYW5kIGRpc3BsYXkvc2Vu ZCBub3RpZmljYXRpb24gdG8gZGVzaWduYXRlZCB1c2VyKHMpPC9saT4KCQk8bGk+Q3VzdG9t aXNlIHdoZXJlYWJvdXRzIGFuZCBob3cgb2Z0ZW4gdGhlIGNoZWNrcyBhcmUgcGVyZm9ybWVk PC9saT4KCQk8bGk+QWNrbm93bGVkZ2Uga25vd24gYWx0ZXJhdGlvbnMgYW5kIGNvbmZpZ3Vy ZSByZXBlYXQgYWxhcm1zIGlmIHRoZSBzaXR1YXRpb24gcmVtYWlucyB1bmNoZWNrZWQ8L2xp PgoJCTxsaT5SdWRpbWVudGFyeSBwYXNzd29yZCBzdHJlbmd0aCBtZXRlciBpbmNsdWRlZDwv bGk+Cgk8L3VsPgoKCTxoMj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCgk8cD5Xcml0dGVuIGJ5 IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb250YWN0Ij5TdGVmIERhd3Nvbjwv YT4uIE1hbnkgdGhhbmtzIHRvIEtldmluIFBvdHRzIGFuZCBTdGV2ZSBEaWNraW5zb24gZm9y IGJldGEgdGVzdGluZyBhbmQgZmVhdHVyZSBlbmhhbmNlbWVudHMuIEFsc28ga3Vkb3MgdG8g c21hbGxoYWRyb25jb2xsaWRlciBmb3IgdGhlIGJhc2lzIG9mIHRoZSBwYXNzd29yZCBzdHJl bmd0aCBjYWxjdWxhdG9yIGFuZCBIdWdvIFNvdXNhIGZvciB0aGUgcGhQcm90ZWN0b3IgY2xh c3MuPC9wPgoKCTxoMj5JbnN0YWxsYXRpb24gLyB1bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAg Y2xhc3M9ImltcG9ydGFudCI+UmVxdWlyZXMgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gNC4zLjArIGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1PC9wPgoKCTxw PkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRw YXR0ZXJuLm9yZy9wbHVnaW5zLzExOTUvc21kX3Byb2dub3N0aWNzIj50ZXh0cGF0dGVybi5v cmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0 d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFuZCBl bmFibGUgdGhlIHBsdWdpbi4gTm90ZSB0aGF0IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhl IHBsdWdpbiBydW5zIGFzIHByaW9yaXR5IDEgc28gaXQgY2FuIGRldGVjdCB0aGluZ3MgYmVm b3JlIG90aGVyIHBsdWdpbnMuPC9wPgoKCTxwPlRvIHVuaW5zdGFsbCwgZGVsZXRlIGZyb20g dGhlIDxlbT5BZG1pbiAtJmd0OyBQbHVnaW5zPC9lbT4gcGFnZS4gWW91IG1heSB1c2Ugc21k X3ByZWZhbGl6ZXIgdG8gcmVtb3ZlIGFueSA8Y29kZT5zbWRfcHJvZ25vc3RpY3NfKjwvY29k ZT4gcHJlZmVyZW5jZXMgdGhhdCB0aGUgcGx1Z2luIGNyZWF0ZWQuPC9wPgoKCTxwPlZpc2l0 IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5w aHA/aWQ9MzQ5MzgiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBv cnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxo Mj5RdWljayBzdGFydDogdGhlIHRocmVlIHN0ZXBzIHRvIGRldGVjdGlvbjwvaDI+CgoJPG9s PgoJCTxsaT5WaXNpdCA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBQcm9nbm9zdGljczwvZW0+LCBh bHRlciB0aGUgc2V0dXAgaW5mb3JtYXRpb24gdG8gdGFzdGUgYW5kIDxzdHJvbmc+bWFrZSBz dXJlIHlvdSA8ZW0+U2F2ZTwvZW0+IGl0PC9zdHJvbmc+PC9saT4KCQk8bGk+Q2xpY2sgdGhl IFByb2dub3N0aWMgdGFiJiM4MjE3O3MgPGVtPkZpbGVzPC9lbT4gYnV0dG9uIChpZ25vcmUg YW55IHdhcm5pbmcgYWJvdXQgbWlzc2luZyBjaGVja3N1bXMgZm9yIG5vdzogdGhleSYjODIx Nzt2ZSBub3QgYmVlbiBjcmVhdGVkIHlldCkgYW5kIGNob29zZSB0aGUgZmlsZXMgeW91IHdp c2ggdG8gbW9uaXRvci4gPHN0cm9uZz5NYWtlIHN1cmUgeW91IDxlbT5TYXZlPC9lbT4gdGhl IGNoYW5nZXM8L3N0cm9uZz48L2xpPgoJCTxsaT5HbyBhYm91dCB5b3VyIGJ1c2luZXNzLiBJ ZiB0aGUgZmlsZXN5c3RlbSBjaGFuZ2VzIHlvdSYjODIxNztsbCBiZSB0b2xkIGFib3V0IGl0 LiBQbGVhc2UgY29uc2lkZXIgaGVscGluZyB0byA8YSBocmVmPSIjc21kX3Byb2doZWxwX2Jl dHRlciI+bWFrZSB0aGUgcGx1Z2luIGJldHRlcjwvYT48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9 InNtZF9wcm9naGVscF9zZXR1cCI+U2V0dXA8L2gyPgoKCTxwPlRoZSA8ZW0+UHJvZ25vc3Rp YyBzZXR1cDwvZW0+IHBhZ2UgaG91c2VzIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBv cHRpb25zOjwvcD4KCgk8aDM+TW9uaXRvcmluZyBvcHRpb25zPC9oMz4KCgk8dWw+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5DaGVjayBmaWxlcyBvbiBwdWJsaWMgc2lkZSBjbGlja3M8 L3NwYW4+IDogY2hlY2tzIGFyZSBhbHdheXMgcGVyZm9ybWVkIHdoZW4gcGVvcGxlIHZpc2l0 IGFkbWluIHNpZGUgdGFicy4gWW91IG1heSBhbHNvIGVsZWN0IHRvIGNoZWNrIHRoZSBmaWxl cyB3aGVuIHZpc2l0b3JzL2JvdHMgYnJvd3NlIHlvdXIgd2ViIHNpdGUgaWYgeW91IHByZWZl ciAoc2VlIDxhIGhyZWY9IiNzbWRfcHJvZ2hlbHBfaG93aXR3b3JrcyI+aG93IGl0IHdvcmtz PC9hPiBmb3IgZGV0YWlscykuPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNr IGZpbGVzIChhdCBtb3N0KSBldmVyeTwvc3Bhbj4gOiB0aGUgcGx1Z2luIGRvZXMgbm90IGNo ZWNrIHRoZSBmaWxlcyBldmVyeSBjbGljayBiZWNhdXNlIHRoYXQgd291bGQgcGxhY2UgdW5u ZWNlc3Nhcnkgc3RyYWluIG9uIHRoZSBzZXJ2ZXIuIEluc3RlYWQgeW91IGNob29zZSBhIGNv bmZpZ3VyYWJsZSB0aW1lICYjODIxMjsgaW4gc2Vjb25kcyAmIzgyMTI7IGFmdGVyIHdoaWNo IHRoZSB2ZXJ5IG5leHQgYWRtaW4tIG9yIHB1YmxpYy1zaWRlIGNsaWNrIHdpbGwgdHJpZ2dl ciB0aGUgY2hlY2suPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNrIGZpbGVz IGJldHdlZW48L3NwYW4+IDogdHdvIHRpbWVzIG9mIGRheSBiZXR3ZWVuIHdoaWNoIHRoZSBm aWxlcyB3aWxsIGJlIGNoZWNrZWQuIFlvdSBjb3VsZCBzZXQgdGhpcyB0byBvZmYtcGVhayBo b3VycyBpZiB5b3UgcHJlZmVycmVkIHRvIG1pbmltaXNlIHRoZSBwbHVnaW4mIzgyMTc7cyBp bXBhY3Qgb24gZGF5dGltZSB2aXNpdG9ycy4gRGVmYXVsdDogPGNvZGU+MDA6MDAgPSZndDsg MjM6NTk8L2NvZGU+PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkNoZWNrIHRoaXMg bWFueSBmaWxlcyBlYWNoIHRpbWU8L3NwYW4+IDogaW5zdGVhZCBvZiB0ZXN0aW5nIGV2ZXJ5 IHNpbmdsZSBmaWxlIGVhY2ggdGltZSAmIzgyMTI7IHdoaWNoIHdpbGwgc2xvdyBkb3duIHlv dXIgc2l0ZSAvIGFkbWluIHNpZGUgJiM4MjEyOyBpdCBpcyBnb29kIHByYWN0aWNlIHRvIG9u bHkgY2hlY2sgYSBzdWJzZXQgb2YgZmlsZXMgZXZlcnkgdGltZSB0aGUgcGx1Z2luIGlzIHRy aWdnZXJlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWxhcm0gb24gZGV0ZWN0 aW9uIGFuZCBldmVyeTwvc3Bhbj4gOiB3aGVuIHNvbWV0aGluZyBoYXMgY2hhbmdlZCBhbmQg aXQmIzgyMTc7cyBkZXRlY3RlZCwgYW4gYWxhcm0gYWN0aW9uIGlzIGFsd2F5cyB0YWtlbi4g QnV0IGlmIHRoZSBwbHVnaW4gY29udGludWFsbHkgYm9tYmFyZGVkIHlvdSB3aXRoIGluZm9y bWF0aW9uIGl0IHdvdWxkIGJlIGFubm95aW5nIGFuZCBub3QgYXMgdXNlZnVsLiBUaGlzIHNl dHRpbmcgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlIGludGVydmFsIGJldHdlZW4gcmVw ZWF0IG5hZ3Mgb2YgdGhlIHNhbWUgbWVzc2FnZS4gT25jZSBhIGRheSAodGhlIGRlZmF1bHQg b2YgODY0MDAgc2Vjb25kcykgYnkgZS1tYWlsIGlzIHVzdWFsbHkgZW5vdWdoIHVubGVzcyB5 b3UmIzgyMTc7cmUgYSBtYXNvY2hpc3QuIE5vdGUgdGhhdCBpZiBtb3JlIGZpbGVzIGFyZSBj aGFuZ2VkICYjODIxMjsgZXZlbiB3aGVuIHRoZSB0aW1lb3V0IHBlcmlvZCBoYXMgeWV0IHRv IGVsYXBzZSAmIzgyMTI7IHlvdSB3aWxsIHJlY2VpdmUgYW5vdGhlciBhbGVydC48ZGl2IGNs YXNzPSJzbWRfYnJlYWsiPllvdSBtYXkgc3BlY2lmeSB0d28gdmFsdWVzIChjb21tYS1zZXBh cmF0ZWQpIGlmIHlvdSB3aXNoOiB0aGUgZmlyc3QgaXMgdGhlIHRpbWUgYmV0d2VlbiBub3Rp ZmljYXRpb25zIHRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhZG1pbiBz aWRlOyB0aGUgc2Vjb25kIGlzIHRoZSB0aW1lIGJldHdlZW4gZS1tYWlscy4gSWYgeW91IHVz ZSBvbmx5IG9uZSB2YWx1ZSB0aGVuIGl0IHdpbGwgYmUgYXBwbGllZCB0byBib3RoLjwvZGl2 PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5Ob3RpZnkgdmlhPC9zcGFuPiA6IGNo b29zZSBob3cgeW91IHdpc2ggdG8gYmUgbm90aWZpZWQ6Cgk8dWw+CgkJPGxpPjxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IEludGVyZmFjZSB3aWxsIGRpc3BsYXkgYSBtZXNzYWdl IG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBhZG1pbiBzaWRlIHdoZW4g YSBjaGFuZ2UgaXMgZGV0ZWN0ZWQuPC9saT4KCQk8bGk+RS1tYWlsIHdpbGwgc2VuZCBvdXQg YW4gZS1tYWlsIGFib3V0IHRoZSBjaGFuZ2VzLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5TZW5kIGUtbWFpbCB0bzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0 ZWQgbGlzdCBvZiBlLW1haWwgYWRkcmVzcyByZWNpcGllbnRzLiBJZiB0aGlzIGlzIGVtcHR5 IG5vIGUtbWFpbHMgd2lsbCBiZSBzZW50IGV2ZW4gaWYgeW91IGNob29zZSB0byBiZSBub3Rp ZmllZCB2aWEgZS1tYWlsLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5TZW5kIGZv cmVuc2ljcyB0bzwvc3Bhbj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBlLW1haWwgYWRk cmVzcyByZWNpcGllbnRzIHRvIHJlY2VpdmUgZm9yZW5zaWNzIGRhdGEgKHRoZSBuYXR0aWx5 LXRpdGxlZCA8ZW0+ZnJvZ25vc3RpY3M8L2VtPikuIFlvdSBjYW4gY2hvb3NlIG5vYm9keSBp ZiB5b3Ugd2lzaCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgb3Igc2VuZCB0aGVtIHRvIHlv dXJzZWxmLCBvciA8YSBocmVmPSIjc21kX3Byb2doZWxwX2JldHRlciI+dG8gbWUgZm9yIGFu YWxheXNpczwvYT4uIDxzdHJvbmc+UGxlYXNlIG5vdGUgdGhhdCBzb21lIGRhdGEgaXMgcXVp dGUgc2Vuc2l0aXZlIGFuZCBtYXkgZGl2dWxnZSBwYXRocyB0byB5b3VyIGZpbGVzIG9yIHNp dGU8L3N0cm9uZz4uIElmIHlvdSBwcmVmZXIgdG8ga2VlcCBzdHVmZiBwcml2YXRlIGJ5IGFs bCBtZWFucyBzYW5pdGl6ZSB0aGUgZm9yZW5zaWNzIGFuZCBzZW5kIHRoZSBlZGl0ZWQgaGln aGxpZ2h0cyB0byBtZSBmb3IgYW5hbHlzaXMgaWYgeW91IHdpc2guPC9saT4KCTwvdWw+CgoJ PGgzPlJlYWx0aW1lIG9wdGlvbnM8L2gzPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPkJsb2NrIHJlcXVlc3QgaGVhZGVyczwvc3Bhbj4gOiBpZiB5b3UgZW5hYmxlIHRoaXMg ZmFjaWxpdHkgeW91IGNhbiBlbGVjdCB0byBibG9jayBvciBhbGxvdyBjZXJ0YWluIHR5cGVz IG9mIHNwZWljYWwgPHNwYW4gY2xhc3M9ImNhcHMiPkhUVFA8L3NwYW4+IHJlcXVlc3QuIEFu eSByZXF1ZXN0IG9mIGEgY2hlY2tlZCB0eXBlIHdpbGwgYmUgYmxvY2tlZCBhbmQgYSBtZXNz YWdlIHdpbGwgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgcGFnZS4gVGhlIGNvcmUgdHlw ZXMgPHNwYW4gY2xhc3M9ImNhcHMiPkdFVDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5Q T1NUPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImNhcHMiPkhFQUQ8L3NwYW4+IGFuZCA8c3BhbiBj bGFzcz0iY2FwcyI+T1BUSU9OUzwvc3Bhbj4gYXJlIGF1dG9tYXRpY2FsbHkgYWxsb3dlZCBi ZWNhdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHJlcXVpcmVzIHRoZW0uIFRo ZSByZW1haW5pbmcgdGhyZWUgJiM4MjEyOyA8c3BhbiBjbGFzcz0iY2FwcyI+VFJBQ0U8L3Nw YW4+LCA8c3BhbiBjbGFzcz0iY2FwcyI+UFVUPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImNh cHMiPkRFTEVURTwvc3Bhbj4gJiM4MjEyOyBhcmUgc3BlY2lhbGlzdCBoZWFkZXJzIHRoYXQg YXJlbiYjODIxNzt0IHVzZWQgYnkgdGhlIGNvcmUgYnV0IG1heSBiZSByZXF1aXJlZCBieSBz b21lIHBsdWdpbnMuIFBlcm1pdCB0aGVtIGlmIHlvdSB3aXNoIGJ5IGNsZWFyaW5nIHRoZSBy ZWxldmFudCBjaGVjayBib3goZXMpLCBvdGhlcndpc2UgZm9yIG1heGltdW0gcHJvdGVjdGlv biBrZWVwIHRoaXMgZmVhdHVyZSBzd2l0Y2hlZCBvbiB3aXRoIGFsbCB0aHJlZSB0eXBlcyBv ZiBoZWFkZXIgY2hlY2tlZC48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UHJvdGVj dCBhZ2FpbnN0IDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbjwvc3Bh bj4gOiBtb25pdG9yIGluY29taW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBm b3IgPHNwYW4gY2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gaW5qZWN0aW9uIGF0dGFja3MgYW5k IGRlYWwgd2l0aCB0aGVtIGluIGEgdmFyaWV0eSBvZiB3YXlzLiBXaGVuIGFuIGF0dGFjayBp cyBkZXRlY3RlZCB0aGUgcmVxdWVzdCBjYW4gYmUgPGNvZGU+QmxvY2s8L2NvZGU+ZWQgb3Ig eW91IGNhbiBzZW5kIGFuIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFuPiBzdGF0dXMg aGVhZGVyIHNvIHlvdSBjYW4gZGVhbCB3aXRoIHRoZSBhdHRhY2sgb24geW91ciBlcnJvciBw YWdlcy4gSWYgeW91IHR5cGUgYW55dGhpbmcgaW4gdGhlIDxjb2RlPndpdGg8L2NvZGU+IGJv eCwgdGhlIGdpdmVuIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgb24gdGhlIHBhZ2UuPGRp diBjbGFzcz0iYnJlYWsiPllvdSBtYXkgc3BlY2lmeSA8Y29kZT50eHBfZm9ybTpuYW1lLW9m LWZvcm08L2NvZGU+IGluIHRoZSA8Y29kZT53aXRoPC9jb2RlPiBib3ggdG8gaGFuZCBvZmYg Y29udHJvbCB0byBhIGN1c3RvbSBmb3JtIGZpcnN0IGJlZm9yZSB0aGUgcmVzdWx0IGlzIHRo cm93biB0byB0aGUgcGFnZS4gWW91IGNvdWxkIHVzZSB0aGlzLCBmb3IgZXhhbXBsZSwgdG8g bWFpbCBvZmYgeW91ciBvd24gZGlhZ25vc3RpY3Mgb3IgdG8gbWFrZSBhIGRlY2lzaW9uIG9u IHdoZXRoZXIgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGF0dGFjayB3YXMg bGVnaXRpbWF0ZSBvciBub3QgYW5kIGVpdGhlciBibG9jayBpdCB5b3Vyc2VsZiBvciBzdHJp cCBvdXQgYW55dGhpbmcgZG9kZ3kgYW5kIHNlbmQgdGhlIHJlcXVlc3Qgb24uIElmIHlvdSB3 aXNoIHRvIGdvIGZ1cnRoZXIsIHRoZXJlIGlzIGEgPGEgaHJlZj0iI3NtZF9wcm9naGVscF9j YWxsYmFja3MiPmNhbGxiYWNrIGF2YWlsYWJsZTwvYT4uIDwvZGl2PjxkaXYgY2xhc3M9ImJy ZWFrIj5Zb3UgbWF5IGFsdGVyIHRoZSBzZW5zaXRpdml0eSBvZiB0aGUgaW5qZWN0aW9uIGJ5 IHJhaXNpbmcgdGhlIG51bWJlcjsgMSBpcyB0aGUgbW9zdCBzZW5zaXRpdmUgKGkuZS4gMSBv ZiB0aGUgdHJpZ2dlciB3b3JkcyB3aWxsIHRyaXAgdGhlIHN3aXRjaCkuIFlvdSBjYW4gY29u dHJvbCA8c3BhbiBjbGFzcz0iY2FwcyI+R0VUPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImNh cHMiPlBPU1Q8L3NwYW4+IHNlbnNpdGl2aXR5IGluZGVwZW5kZW50bHkgYnkgcHV0dGluZyB0 d28gY29tbWEtc2VwYXJhdGVkIHZhbHVlcyBpbiB0aGUgYm94LiBJZiB5b3UgYWNjZXB0IGNv bW1lbnRzIG9uIHlvdXIgc2l0ZSBpdCBtYXkgYmUgcHJ1ZGVudCB0byByYWlzZSB0aGUgPHNw YW4gY2xhc3M9ImNhcHMiPlBPU1Q8L3NwYW4+IHZhbHVlLCBhcyBhbnkgY29tbWVudCB0aGF0 IGNvbnRhaW5zIHdvcmRzIGxpa2UgPGNvZGU+c2VsZWN0PC9jb2RlPiBvciA8Y29kZT51bmlv bjwvY29kZT4gb3IgZXZlbiBUZXh0aWxlJiM4MjE3O3MgPGNvZGU+LS08L2NvZGU+IHdpbGwg dHJpcCB0aGUgaW5qZWN0b3IuIEEgZ29vZCB0cmFkZS1vZmYgYmV0d2VuIHNlY3VyaXR5IGFu ZCBmYWxzZSBhbGFybXMgZm9yIGEgc2l0ZSB3aXRoIGNvbW1lbnRzIGlzIDxjb2RlPjEsIDM8 L2NvZGU+LiBSYWlzZSBmdXJ0aGVyIGlmIHlvdXIgY29tbWVudGVycyByZWd1bGFybHkgcG9z dCBjb2RlIGZyYWdtZW50cyBvciA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBzdGF0 ZW1lbnRzLjwvZGl2PjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5TZW5kIGZvcmVu c2ljcyBmb3I8L3NwYW4+IDogZS1tYWlsIGZyb2dub3N0aWNzIGluZm8gdG8gdGhlIGRlc2ln bmF0ZWQgZS1tYWlsIGFkZHJlc3MoZXMpIHdoZW4gZWl0aGVyIGhlYWRlciB2aW9sYXRpb25z LCA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBpbmplY3Rpb25zLCBvciBib3RoIGFy ZSBkZXRlY3RlZC48L2xpPgoJPC91bD4KCgk8aDM+RmlsZXN5c3RlbSBvcHRpb25zPC9oMz4K Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5DaGVjayBmaWxlcyBmb3I8L3NwYW4+ IDogY2hvb3NlIHdoYXQgdHlwZSBvZiBhbHRlcmF0aW9ucyB5b3Ugd2lzaCB0byBtb25pdG9y OiBuZXcgZmlsZXMgYWRkZWQsIGZpbGVzIGRlbGV0ZWQgb3IgZmlsZXMgbW9kaWZpZWQuIEJ5 IGRlZmF1bHQsIGFkZGl0aW9ucyBhcmUgbm90IHNlbGVjdGVkIGJlY2F1c2UgaXQgaW5jdXJz IGEgKHRpbnkpIGV4dHJhIHByb2Nlc3NpbmcgcGVuYWx0eSB0byB0aGUgY2hlY2tzLiBUaGVy ZWZvcmUgaWYgeW91IHdhbnQgdG8gbW9uaXRvciBmb3IgYWRkaXRpb25zLCB5b3UgbmVlZCB0 byBvcHQtaW4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkZpbGUgbG9jYXRpb25z PC9zcGFuPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIGZyb20gd2hp Y2ggeW91IHdpc2ggdG8gYmUgYWJsZSB0byBzZWxlY3QgZmlsZXMgZm9yIG1vbml0b3Jpbmcu IENob29zZSBvbmx5IHRoZSB0b3AtbGV2ZWwgZm9sZGVyOyBldmVyeXRoaW5nIGJlbmVhdGgg d2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNlbGVjdGVkLiBJdCBkZWZhdWx0cyB0byB5b3VyIHNp dGUgcm9vdC4gSWYgdXNpbmcgYSBtdWx0aS1zaXRlIHNldHVwIHlvdSBtYXkgaGF2ZSB0byBh bHRlciB0aGlzLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FeGNsdWRlIGZvbGRl cnM8L3NwYW4+IDogc2luY2UgdGhlIGxpc3Qgb2YgZmlsZXMgdW5kZXIgeW91ciBUZXh0cGF0 dGVybiBpbnN0YWxsYXRpb24gbWF5IHBvdGVudGlhbGx5IGJlIGxhcmdlIHlvdSBjYW4gZGVz aWduYXRlIHNvbWUgZm9sZGVycyB0byBiZSBhdXRvbWF0aWNhbGx5IGV4Y2x1ZGVkLCB3aGlj aCBtYWtlcyB0aGUgZmlsZSBsaXN0IHNob3J0ZXIuIERlZmF1bHQ6IDxjb2RlPmltYWdlcywg ZmlsZXMsIHRtcDwvY29kZT4uPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPklnbm9y ZSBmaWxlczwvc3Bhbj4gOiBzb21lIGZpbGVzLCBzdWNoIGFzIHRoZSBlcnJvcl9sb2cgZmls ZSBvbiB0eXBpY2FsIExpbnV4IGhvc3RzLCBwb3AgdXAgdW5hbm5vdW5jZWQgYW5kIHlvdSBt YXkgcGVyaW9kaWNhbGx5IGRlbGV0ZSB0aGVtLiBPbiBkZXZlbG9wbWVudCBzaXRlcyB0aGlz IGNhbiBjYXVzZSBleGNlc3NpdmUgYWxhcm1zIGR1cmluZyBkZWJ1Z2dpbmcuIFRvIG1pbmlt aXNlIHRoaXMsIHlvdSBjYW4gbGlzdCBmaWxlcyBoZXJlIHRoYXQgeW91IGFsd2F5cyB3aXNo IHRvIGlnbm9yZS4gTm8gcGF0aHMgYXJlIG5lY2Vzc2FyeToganVzdCBzdXBwbHkgYSBjb21t YS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIG5hbWVzLiBXaWxkY2FyZHMgKCogYW5kID8pIGFy ZSBwZXJtaXNzYWJsZS4gTm90ZSB0aGF0IHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmls ZSBpcyBhbHdheXMgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZSBzbyB0aGVyZSYjODIxNztz IG5vIG5lZWQgdG8gbGlzdCBpdCBleHBsaWNpdGx5LjwvbGk+Cgk8L3VsPgoKCTxoMz5QbHVn aW4gb3B0aW9uczwvaDM+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UmVzdHJp Y3QgcHJvZ25vc3RpYyBjb25maWcgdG88L3NwYW4+IDogaWYgeW91IGhhdmUgdG8gaXNzdWUg UHVibGlzaGVyIC8gTWFuYWdpbmcgRWRpdG9yIHByaXZzIHRvIHNvbWVvbmUgZWxzZSBhcyB3 ZWxsIGFzIHlvdXJzZWxmIGJ1dCBkb24mIzgyMTc7dCB3YW50IGFueW9uZSBtZXNzaW5nIHdp dGggdGhlIHBsdWdpbiBzZXR0aW5ncywgcHV0IGEgbGlzdCBvZiBwZXJtaXR0ZWQgdXNlciBu YW1lcyBpbiB0aGlzIGJveC4gPHNwYW4gY2xhc3M9ImltcG9ydGFudCI+QmUgY2FyZWZ1bC4g VGhlIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBhbmQgaWYgeW91IG1pc3NwZWxsIGEgbmFt ZSB5b3UgY2FuIGxvY2sgeW91cnNlbGYgb3V0IG9mIGVkaXRpbmcgdGhlIHNldHRpbmdzITwv c3Bhbj48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWRtaW4tc2lkZSA8c3BhbiBj bGFzcz0iY2FwcyI+VVJMPC9zcGFuPjwvc3Bhbj4gOiBUaGUgPHNwYW4gY2xhc3M9ImNhcHMi PlVSTDwvc3Bhbj4gb2YgeW91ciAmIzgyMTY7dGV4dHBhdHRlcm4mIzgyMTc7IGFkbWluIHNp ZGUuIFRoaXMgaXMgdXN1YWxseSA8Y29kZT5odHRwOi8vc2l0ZS5jb20vdGV4dHBhdHRlcm48 L2NvZGU+IGJ1dCBpZiB5b3UgYXJlIHJ1bm5pbmcgPGEgaHJlZj0iI3NtZF9wcm9naGVscF9t dWx0aXNpdGUiPm11bHRpLXNpdGU8L2E+IG9yIGhhdmUgb3RoZXJ3aXNlIGFsdGVyZWQgdGhl IGRpcmVjdG9yeSB5b3UgY2FuIHNwZWNpZnkgaXQgaGVyZS48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+UHJvZ25vc3RpY3MgZm9sZGVyPC9zcGFuPiA6IFRoZSBmb2xkZXIgd2hl cmUgdGhlIHByb2dub3N0aWNzIGNoZWNrc3VtcyBmaWxlIHdpbGwgcmVzaWRlLiBUaGUgZGly ZWN0b3J5IG11c3QgYWxyZWFkeSBleGlzdCBhbmQgYmUgd3JpdGFibGUgb3IgeW91ciBjaG9z ZW4gbG9jYXRpb24gd2lsbCBiZSBpZ25vcmVkLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5VbmlxdWUgcHJlZml4PC9zcGFuPiA6IHByZWZpeCB0aGUgY2hlY2tzdW1zIGZpbGUg d2l0aCB0aGlzIHN0cmluZy4gVXNlZnVsIHRvIGF2b2lkIGZpbGVzIGNsYXNoaW5nIGlmIHlv dSBhcmUgdXNpbmcgdGhlIHNhbWUgKG5vbi1kb2Nyb290KSBmb2xkZXIgdG8gc3RvcmUgdGhl IGNoZWNrc3VtcyBmcm9tIG1vcmUgdGhhbiBvbmUgc2l0ZS48L2xpPgoJPC91bD4KCgk8aDIg aWQ9InNtZF9wcm9naGVscF9ob3dpdHdvcmtzIj5Ib3cgaXQgd29ya3M8L2gyPgoKCTxwPklk ZWFsbHksIHRoZSBwbHVnaW4gd291bGQgYmUgYSB0aW1lZCBzY3JpcHQgdGhhdCBydW5zIGV2 ZXJ5IE4gc2Vjb25kcy4gQnV0IHRoYXQgcmVxdWlyZXMgYSBwYXJ0aWN1bGFyIHBpZWNlIG9m IHNvZnR3YXJlIChjcm9uKSBvbiB5b3VyIGhvc3QgYW5kIHRoZXJlJiM4MjE3O3Mgbm8gZ3Vh cmFudGVlIGl0IGV4aXN0cy4gVGh1cyB0aGUgb25seSB0aGluZyB0aGF0IGNhbiAmIzgyMTY7 dHJpZ2dlciYjODIxNzsgdGhlIHBsdWdpbiBpcyBUZXh0cGF0dGVybiBpdHNlbGYuIFRoZSBw bHVnaW4gcnVucyBldmVyeSB0aW1lIHlvdSBpbnRlcmFjdCB3aXRoIHRoZSBhZG1pbiBzaWRl LCBidXQgaWYgaXQgY2hlY2tlZCBhbGwgdGhlIGZpbGVzIGFnYWluc3QgYWxsIHRoZSBjaGVj a3N1bXMgeW91IGhhdmUgY2hvc2VuIG9uIGV2ZXJ5IGNsaWNrLCB5b3VyIGFkbWluIHNpZGUg d291bGQgc2xvdyBkb3duIGEgbG90LiBUaGUgY29tcHJvbWlzZSBpcyB0byBzcGVjaWZ5IGEg dGltZW91dCB2YWx1ZSBhbmQgYSBudW1iZXIgb2YgZmlsZXMgdG8gY2hlY2suIFRoaXMgaXMg aG93IGl0IHdvcmtzOjwvcD4KCgk8b2w+CgkJPGxpPldoZW4geW91IGNsaWNrIGEgdGFiIG9y IGludGVyYWN0IHdpdGggdGhlIGFkbWluIHNpZGUsIHRoZSBwbHVnaW4gbG9va3MgYXQgd2hl biB5b3UgPGVtPmxhc3Q8L2VtPiBjbGlja2VkIHNvbWV0aGluZyBhbmQgYXNrcyAmIzgyMjA7 aXMgaXQgZ3JlYXRlciB0aGFuIE4gKHNlY29uZHMpPyYjODIyMTsgd2hlcmUgTiBpcyB0aGUg dmFsdWUgb2YgPGNvZGU+Q2hlY2sgZmlsZXMgKGF0IG1vc3QpIGV2ZXJ5PC9jb2RlPiBvbiB0 aGUgU2V0dXAgcGFuZWwuIEl0IGFsc28gY2hlY2tzIGlmIHRoZSBjdXJyZW50IHRpbWUgb2Yg ZGF5IGlzIGJldHdlZW4gdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4gPGNvZGU+Q2hlY2sgZmls ZXMgYmV0d2VlbjwvY29kZT48L2xpPgoJCTxsaT5JZiBzbywgaXQgZ3JhYnMgYXMgbWFueSBm aWxlcyBhcyB5b3UgaGF2ZSBzcGVjaWZpZWQgaW4gPGNvZGU+Q2hlY2sgdGhpcyBtYW55IGZp bGVzIGVhY2ggdGltZTwvY29kZT4sIHRlc3RzIHRoZW0gYW5kIHJlc2V0cyB0aGUgdGltZXIu IEl0IGtlZXBzIGEgbm90ZSBvZiBob3cgZmFyIGl0IGhhcyB3b3JrZWQgdGhyb3VnaCB5b3Vy IGxpc3Qgb2YgZmlsZXMgYW5kIGNvbnRpbnVlcyB3aGVyZSBpdCBsZWZ0IG9mZiBuZXh0IHRp bWUgaXQgcnVuczwvbGk+CgkJPGxpPklmIHRoZSB2YWx1ZSBvZiBOIGhhcyBub3QgeWV0IGJl ZW4gcmVhY2hlZCwgaXQgZG9lcyBub3RoaW5nLCB0aHVzIHNhdmluZyB5b3UgcHJlY2lvdXMg cHJvY2Vzc29yIGN5Y2xlczwvbGk+Cgk8L29sPgoKCTxwPkFsbCB0aGF0IGlzIGdyZWF0IGlm IHlvdSYjODIxNztyZSBjb250aW51YWxseSB1c2luZyB0aGUgYWRtaW4gc2lkZSBhbmQgcHJv ZHVjaW5nIGNsaWNrcyBmb3IgdGhlIHBsdWdpbiB0byBydW4uIEJ1dCBvbmNlIHlvdSBoYW5k IG92ZXIgdGhlIHNpdGUgdG8geW91ciBjbGllbnQsIHRoZXkgbWF5IG5vdCB1c2UgdGhlIGFk bWluIHNpZGUgYXMgb2Z0ZW4gYXMgeW91ICYjODIxMjsgaWYgYXQgYWxsLiBUaHVzIHlvdXIg ZmlsZXMgd291bGQgcmFyZWx5L25ldmVyIGJlIGNoZWNrZWQuIFRvIGNvdW50ZXJhY3QgdGhp cywgeW91IGNhbiBhc2sgdGhlIHBsdWdpbiB0byByZXNwb25kIHRvIHB1YmxpYyBzaWRlIGNs aWNrcyBhcyB3ZWxsIHNvIHRoYXQgYW55IHRpbWUgYSB2aXNpdG9yIChvciBib3QpIGNyYXds cyB5b3VyIHBhZ2VzIHRoZSBwbHVnaW4gcnVucywgY2hlY2tzIGlmIHRoZSB0aW1lb3V0IGhh cyBiZWVuIGV4Y2VlZGVkIGFuZCwgaWYgc28sIGNoZWNrcyBzb21lIGZpbGVzIGFuZCByZXNl dHMgdGhlIHRpbWVyIChleGFjdGx5IGFzIGl0IHdvdWxkIGRvIG9uIHRoZSBhZG1pbiBzaWRl KS48L3A+CgoJPHA+VGhpcyB3aWxsIHB1c2ggdGhlIHByb2Nlc3NpbmcgbG9hZCBvbnRvIHlv dXIgcHVibGljIHNpdGUsIGJ1dCBzaW5jZSBpdCYjODIxNztzIG9ubHkgcnVuIGF0IG1vc3Qg b25jZSBldmVyeSBOIHNlY29uZHMgYW5kIHlvdSBzcGVjaWZ5IGhvdyBtYW55IGZpbGVzIHRv IHJlYWQgZWFjaCB0aW1lLCB5b3UgY2FuIGNvbnRyb2wgaG93IG11Y2ggb2YgYW4gaW1wYWN0 IGl0IGhhcyBieSBtYXRjaGluZyB0aGF0IHdpdGggeW91ciBkZXNpcmUgdG8ga25vdyAmIzgy MTY7aW5zdGFudGx5JiM4MjE3OyB0aGF0IHNvbWV0aGluZyBoYXMgY2hhbmdlZCB2ZXJzdXMg dGhlIHZvbHVtZSBvZiB0cmFmZmljIC8gdmlzaXRvcnMgdG8gdGhlIHNpdGUgYW5kIGhvdyBv ZnRlbiB5b3Ugd2FudCB0byBkZWxheSB0aGVpciBicm93c2luZy48L3A+CgoJPHA+VGhlIGdv b2QgdGhpbmcgYWJvdXQgYmVpbmcgYWJsZSB0byBzcGVjaWZ5IGJvdGggdGhlIHRpbWVvdXQs IHRoZSB0aW1lIG9mIGRheSBhbmQgdGhlIHF1YW50aXR5IG9mIGZpbGVzIGlzIHRoYXQgeW91 IGNhbiBkZXRlcm1pbmUgaWYgdGhlIHBsdWdpbiBydW5zICYjODIxNjtsaXR0bGUgYW5kIG9m dGVuJiM4MjE3OyBvciB0YWtlcyBtb3JlIG9mIHlvdXIgcmVzb3VyY2VzIHdoZW4gaXQgcnVu cyBsZXNzIGZyZXF1ZW50bHkgb3IgZHVyaW5nIG9mZi1wZWFrIHRpbWVzLiBUaGUgcmVjb21t ZW5kYXRpb24gaXMgdG8gcnVuIGZhaXJseSBmcmVxdWVudGx5ICYjODIxMjsgYmV0d2VlbiAx MCBhbmQgNjAgc2Vjb25kcyBpcyBnb29kICYjODIxMjsgYW5kIG9ubHkgcHJvY2Vzc2luZyBh IHNtYWxsIG51bWJlciBvZiBmaWxlcywgc2F5IDIwIG9yIDMwIGVhY2ggdGltZS48L3A+CgoJ PHA+QXMgYW4gZXhhbXBsZSwgaWYgeW91IG1vbml0b3JlZCBldmVyeSBmaWxlIGluIGEgc3Rv Y2sgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW5zdGFsbGF0aW9uIHdpdGggYSB0 ZW4tc2Vjb25kIHRpbWVvdXQgYW5kIGNoZWNrZWQgMzAgZmlsZXMgZWFjaCB0aW1lLCB0aGVu ICYjODIxMjsgYXNzdW1pbmcgeW91IGhhZCBhdCBsZWFzdCBmaXZlIGNsaWNrcyBwZXIgbWlu dXRlICYjODIxMjsgeW91IHdvdWxkIGN5Y2xlIHRocm91Z2ggdGhlbSBpbiB1bmRlciBhIG1p bnV0ZS4gQW5kIHlvdXIgdmlzaXRvcnMgcHJvYmFibHkgd29uJiM4MjE3O3Qgbm90aWNlIHRo ZSBkZWxheS4gSWYgeW91IGhhdmUgZmV3ZXIgdGhhbiBmaXZlIGNsaWNrcyBwZXIgbWludXRl IHRoZW4gaXQgd2lsbCB0YWtlIGxvbmdlciB0byBjeWNsZSB0aHJvdWdoIHRoZSBmaWxlcyBh bmQgdGhlIGNoYW5jZSBvZiBjYXRjaGluZyBjaGFuZ2VzIGFzIHRoZXkgaGFwcGVuIHJlZHVj ZXMuIEJ1dCBpZiB5b3UgcnVuIHRvbyBvZnRlbiAoc2F5LCBldmVyeSBvbmUgb3IgdHdvIHNl Y29uZHMpIHlvdSBhcmUgd2FzdGluZyB5b3VyIHZpc2l0b3JzJiM4MjE3OyB0aW1lLCB5b3Vy IHNlcnZlciYjODIxNztzIHJlc291cmNlcyBhbmQgaW5jcmVhc2luZyB0aGUgY2hhbmNlIG9m IHRoZSBwbHVnaW4gbWlzaW5mb3JtaW5nIHlvdSBvZiBhbHRlcmF0aW9ucyAoaXQgbWF5IHN0 aWxsIGJlIHBhcnR3YXkgdGhyb3VnaCB0aGUgcHJldmlvdXMgcnVuIHdoZW4gdGhlIG5leHQg b2NjdXJzIGFuZCB0cmlnZ2VyIGEgd2FybmluZykuPC9wPgoKCTxwPlRoZSBwbHVnaW4gaXMg d3JpdHRlbiB0byBiZSBhcyBxdWljayBhbmQgZWZmaWNpZW50IGFzIGl0IHBvc3NpYmx5IGNh biB0byBhdm9pZCBhbnkgZGVsYXlzOyB0aGVyZSBtYXkgYmUgPGEgaHJlZj0iI3NtZF9wcm9n aGVscF9iZXR0ZXIiPnJvb20gZm9yIGltcHJvdmVtZW50PC9hPiBvZiBjb3Vyc2UhIFBsZWFz ZSBiZSBhd2FyZSB0aGF0IG5vIGRldGVjdGlvbiBzeXN0ZW0gaXMgZm9vbHByb29mIGFuZCB0 aGVyZSBpcyBubyBzdWJzdGl0dXRlIGZvciB2aWdpbGFuY2UgYW5kIDxhIGhyZWY9IiNzbWRf cHJvZ2hlbHBfcHdzdHJlbmd0aCI+Z29vZCBwYXNzd29yZHM8L2E+IDotKTwvcD4KCgk8aDIg aWQ9InNtZF9wcm9naGVscF9tb25maWxlcyI+TW9uaXRvcmluZyBmaWxlczwvaDI+CgoJPHA+ Q2xpY2tpbmcgdGhlIDxlbT5GaWxlczwvZW0+IGJ1dHRvbiB0YWtlcyB5b3UgdG8gYSBzY3Jl ZW4gd2l0aCBhIHRleHRhcmVhIGluIGl0IHRoYXQgYWxsb3dzIHlvdSB0byBjaG9vc2UgdGhl IGZpbGVzIHlvdSB3aXNoIHRvIG1vbml0b3IuIEEgY291bnQgb2YgdGhlIGN1cnJlbnQgbnVt YmVyIG9mIG1vbml0b3JlZCBmaWxlcyBpcyBzaG93biBhdCB0aGUgdG9wLCBhbG9uZyB3aXRo IHRoZSBudW1iZXIgb2YgZmlsZXMgYXZhaWxhYmxlIGluIHlvdXIgY2hvc2VuIGZpbGUgbG9j YXRpb24ocykuIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBiZSBpbiB0aGUgbGlzdDo8L3A+ CgoJPG9sPgoJCTxsaT5hbGwgZmlsZXMgaW4gYWxsIHN1YmRpcmVjdG9yaWVzIGZyb20gYWxs IDxjb2RlPkZpbGUgbG9jYXRpb25zPC9jb2RlPiB5b3Ugc3BlY2lmaWVkIHRvIG1vbml0b3Ig aW4gdGhlIFNldHVwIHNjcmVlbjwvbGk+CgkJPGxpPjxlbT5leGNlcHQ8L2VtPiBhbnkgZmls ZXMgYmVsb3cgdGhlIGRpcmVjdG9yaWVzIHlvdSBjaG9zZSB0byBleGNsdWRlPC9saT4KCQk8 bGk+PGVtPmV4Y2VwdDwvZW0+IGFueSBmaWxlIG5hbWVzIHlvdSBleHBsaWNpdGx5IGNob3Nl IHRvIGlnbm9yZTwvbGk+CgkJPGxpPjxlbT5leGNlcHQ8L2VtPiB0aGUgcHJvZ25vc3RpY3Mg Y2hlY2tzdW1zIGZpbGU8L2xpPgoJPC9vbD4KCgk8cD5BdCBmaXJzdCwgbm8gZmlsZXMgd2ls bCBiZSBzZWxlY3RlZCBzbyB5b3Ugd2lsbCBiZSBtb25pdG9yaW5nIG5vdGhpbmcuIENob29z ZSB3aGljaCBmaWxlcyB5b3Ugd2lzaCB0byBtb25pdG9yIGFuZCBzYXZlIHRoZSBjaGFuZ2Vz LiBUaGUgcGx1Z2luIHdpbGwga2VlcCB0YWJzIG9uIHRob3NlIGZpbGVzLjwvcD4KCgk8cD5J ZiB5b3UgaGF2ZSBlbGVjdGVkIHRvIHdhdGNoIGZvciBhZGRpdGlvbnMgdG8gdGhlIGZpbGUg c3lzdGVtLCBhbnkgZmlsZXMgaW4gYW55IG9mIHlvdXIgY2hvc2VuIGxvY2F0aW9ucyB0aGF0 IGFyZSBub3QgY3VycmVudGx5IGluIHRoZSBsaXN0IGF0IHRoZSB0aW1lIHlvdSBoaXQgPGVt PlNhdmU8L2VtPiAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIHlvdSBhcmUgbW9uaXRvcmluZyB0 aGVtIG9yIG5vdCkgd2lsbCB0cmlnZ2VyIGFuIGFsYXJtLiBHbyBhaGVhZCBhbmQgdHJ5IGl0 OiBhZGQgc29tZSBmaWxlcyB0byB5b3VyIHNlcnZlciBvciBpbnN0YWxsIGEgbmV3IHRoZW1l IG9yIHNvbWV0aGluZyBhbmQgdGhlIHBsdWdpbiB3aWxsIHRlbGwgeW91LjwvcD4KCgk8aDIg aWQ9InNtZF9wcm9naGVscF9hY2siPkFja25vd2xlZGdpbmcgYWxhcm1zPC9oMj4KCgk8cD5J ZiBvbmUgb3IgbW9yZSBmaWxlcyBhcmUgYWx0ZXJlZCwgZGVsZXRlZCwgb3IgbmV3IGZpbGVz IGhhdmUgYmVlbiBhZGRlZCAoZGVwZW5kaW5nIG9uIHdoaWNoIGFjdGlvbnMgeW91IGhhdmUg ZWxlY3RlZCB0byBtb25pdG9yKSB0aGUgcGx1Z2luIHdpbGwgZGV0ZWN0IHRoaXMgd2hlbiB0 aGUgbmV4dCBhZG1pbi0gb3IgcHVibGljLXNpZGUgY2xpY2sgaXMgcmVjZWl2ZWQgYW5kIHRo ZSB0aW1lb3V0IGN5Y2xlIGlzIGV4Y2VlZGVkLiBJdCB3aWxsIHRoZW4gdGFrZSB0aGUgYWN0 aW9uIHlvdSBjaG9zZS4gTm90ZSBvZiBjb3Vyc2UgdGhhdCB5b3Ugd29uJiM4MjE3O3Qgc2Vl IHRoZSBhZG1pbi1zaWRlIHdhcm5pbmcgaWYgbm90IGxvZ2dlZCBpbiE8L3A+CgoJPHA+VGhl IG1lc3NhZ2UgZGVsaXZlcmVkIHRvIHlvdSBjb250YWlucyBhIGxpbmsgdG8gdGhlIEFja25v d2xlZGdlbWVudCBwYWdlICh3aGljaCBjYW4gYWxzbyBiZSByZWFjaGVkIGJ5IGNsaWNraW5n IHRoZSA8ZW0+QWxhcm1zPC9lbT4gYnV0dG9uIGZyb20gdGhlIFByb2dub3N0aWNzIHRhYiku IFlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBsaXN0IG9mIGFsbCB0aGUgZmlsZXN5c3RlbSBh bHRlcmF0aW9ucy4gSWYgeW91IGtub3cgYWJvdXQgdGhlIGNoYW5nZXMgJiM4MjEyOyBlLmcu IHlvdSBpbml0aWF0ZWQgdGhlbSBieSB1cGxvYWRpbmcgc29tZSBuZXcgZmlsZSB2ZXJzaW9u KHMpICYjODIxMjsgdGhlbiB5b3UgY2FuIGFja25vd2xlZ2RlIHRoaXMgYnkgcGxhY2luZyBh IGNoZWNrIG1hcmsgbmV4dCB0byB0aGUgZmlsZXMgeW91IGtub3cgY29udGFpbiBsZWdpdGlt YXRlIGFsdGVyYXRpb25zLiBXaGVuIHlvdSBjbGljayB0aGUgPGVtPkFja25vd2xlZGdlPC9l bT4gYnV0dG9uIHlvdSBzaWduaWZ5IHRvIHRoZSBwbHVnaW4gdGhhdCB5b3UgYWNjZXB0IHRo ZSBjaGFuZ2VzLiBUaHVzIHRoZSBuZXcgZmlsZShzKSBiZWNvbWUgdGhlIGJhc2VsaW5lLjwv cD4KCgk8cD5JZiB5b3UgYXJlIG1vbml0b3JpbmcgZmlsZSBzeXN0ZW0gYWRkaXRpb25zLCB0 aGUgYWN0IG9mIGFja25vd2xlZGdpbmcgdGhlIGFsYXJtIGluZGljYXRlcyB0aGF0IHlvdSBh cmUgaGFwcHkgZm9yIHRoZSBuZXcgZmlsZShzKSB0byBiZSBtb25pdG9yZWQuIFRoZXkgd2ls bCBhdXRvbWF0aWNhbGx5IGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIEZpbGVzIHRvIG1vbml0 b3IgKHlvdSBjYW4gdmVyaWZ5IHRoaXMgYnkgdmlzaXRpbmcgdGhlIFByb2dub3N0aWMgdGFi JiM4MjE3O3MgPGVtPkZpbGVzPC9lbT4gbGlzdCkuIElmIHlvdSBrbm93IGFib3V0IHNvbWUg b2YgdGhlIGZpbGVzIChwZXJoYXBzIHRoZXkgYXJlIG5ldyBhZGRpdGlvbnMpIGFuZCB5b3Ug ZG9uJiM4MjE3O3Qgd2FudCB0byBtb25pdG9yIHRoZW0sIHNlbGVjdCB0aGUgZmlsZShzKSBh bmQgY2xpY2sgPGVtPklnbm9yZTwvZW0+LiBUaGUgYWxhcm0gd2lsbCBiZSBhY2tub3dsZWRn ZWQgYnV0IHlvdSB3aWxsIG5vdCBiZSBtb25pdG9yaW5nIHRoZSBmaWxlKHMpLjwvcD4KCgk8 cD5JZiB5b3UgY2hvb3NlIG5vdCB0byBhY2tub3dsZWRnZS9pZ25vcmUgc29tZSBvciBhbGwg b2YgdGhlIGZpbGVzLCB5b3Ugd2lsbCBjb250aW51ZSB0byBiZSBuYWdnZWQgYXQgeW91ciBk ZXNpZ25hdGVkIGFsYXJtIGZyZXF1ZW5jeSB1bnRpbCB5b3UgYWNrbm93bGVkZ2UgdGhlIHBy b2JsZW1zIG9yIGZpeCB0aGUgZmlsZXN5c3RlbSB0byBpdHMgb3JpZ2luYWwgc3RhdGUuIERv IGJlYXIgaW4gbWluZCB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBmcmVxdWVuY3kgdGhhdCBhbGVy dGluZyB0b28gb2Z0ZW4gY2FuIGFsaWVuYXRlIHVzZXJzIGFuZCBtYWtlIGFuIGFsYXJtIHNp dHVhdGlvbiBsZXNzIGVmZmVjdGl2ZS48L3A+CgoJPGgyIGlkPSJzbWRfcHJvZ2hlbHBfY3Np Ij5Gb3JlbnNpY3M8L2gyPgoKCTxwPjxzdHJvbmc+QmVmb3JlPC9zdHJvbmc+IGFja25vd2xl ZGdpbmcgYWxhcm1zLCB5b3UgbWF5IGNob29zZSB0byBzZW5kIG9mZiBmb3JlbnNpY3MgaW5m b3JtYXRpb24gdG8gYSBkZXNpZ25hdGVkIGUtbWFpbCBhZGRyZXNzLiBUaGUgZm9sbG93aW5n IGluZm9ybWF0aW9uIGlzIHNlbnQ6PC9wPgoKCTx1bD4KCQk8bGk+RmlsZSBpbmZvcm1hdGlv biBhYm91dCBlYWNoIGNoYW5nZWQvYWRkZWQgZmlsZSwgc3VjaCBhcyBpdHMgc2l6ZSwgbW9k aWZpY2F0aW9uIHRpbWUsIGFuZCB1c2VyIC8gZ3JvdXAgb3duZXJzaGlwPC9saT4KCQk8bGk+ VGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyB0aGVtc2VsdmVzLCA8c3BhbiBjbGFzcz0iY2Fw cyI+QkFTRTwvc3Bhbj4tNjQgZW5jb2RlZCBpbiB0aGUgYm9keSBvZiB0aGUgZS1tYWlsPC9s aT4KCQk8bGk+VGhlIG5hbWVzICZhbXA7IHBhdGhzIG9mIGFueSBkZWxldGVkIGZpbGVzPC9s aT4KCQk8bGk+QW55IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGxvZyBlbnRyaWVz IHRoYXQgb2NjdXJyZWQgZWl0aGVyIHNpZGUgb2YgdGhlIGFsYXJtIGNvbmRpdGlvbiAoPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gbG9nZ2luZyBtdXN0IGJlIGVuYWJsZWQgaW4g eW91ciA8ZW0+QWRtaW4gLSZndDsgUHJlZmVyZW5jZXM8L2VtPik8L2xpPgoJPC91bD4KCgk8 cD5Zb3UgY2FuIHNlbGVjdCB3aGljaCBmaWxlIGluZm9ybWF0aW9uIHRvIHNlbmQgb2ZmIHZp YSB0aGUgY2hlY2sgYm94ZXMuIFRoZSBvbmVzIHlvdSBzZWxlY3RlZCB3aWxsIHJlbWFpbiBz ZWxlY3RlZCBmb3IgY29udmVuaWVuY2UgYWZ0ZXIgdGhlIGZvcmVuc2ljcyBoYXZlIGJlZW4g c2VudCwgc28geW91IG1heSBpbW1lZGlhdGVseSBoaXQgPGVtPkFja25vd2xlZGdlPC9lbT4g dG8gYWNrbm93bGVkZ2UgdGhlIG9uZXMgeW91IG5vdGlmaWVkLjwvcD4KCgk8aDIgaWQ9InNt ZF9wcm9naGVscF9hZHZpY2UiPkFkdmljZTwvaDI+CgoJPHA+Q2xpY2tpbmcgdGhlIDxlbT5B ZHZpY2U8L2VtPiBidXR0b24gd2lsbCBydW4gdGhyb3VnaCBhIHNlcmllcyBvZiBjaGVja3Mg YW5kIG9mZmVyIHN1Z2dlc3Rpb25zIG9uIGhvdyB0byBoYXJkZW4geW91ciBpbnN0YWxsYXRp b24uIFRoZSBtb3N0IGltcG9ydGFudCBvbmUgdG8gZm9sbG93IGlzIGlmIHlvdSBhcmUgd2Fy bmVkIGFib3V0IHRoZSBwcm9nbm9zdGljcyBjaGVja3N1bXMgZmlsZSBiZWluZyBpbiBkb2Ny b290LiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gbW92ZSBpdCBzb21ld2hlcmUgbm9u LXdlYiBhY2Nlc3NpYmxlLjwvcD4KCgk8aDIgaWQ9InNtZF9wcm9naGVscF9wd3N0cmVuZ3Ro Ij5QYXNzd29yZCBzdHJlbmd0aDwvaDI+CgoJPHA+QXMgYW4gYWlkIHRvIHlvdXIgdXNlcnMs IGEgcGFzc3dvcmQgc3RyZW5ndGggbWV0ZXIgaXMgYXV0b21hdGljYWxseSBpbmNsdWRlZCBv biB0aGUgPGVtPkFkbWluIC0mZ3Q7IFVzZXJzPC9lbT4gdGFiLiBXaGVuIHlvdSB0eXBlIHRv IGNoYW5nZSB5b3VyIHBhc3N3b3JkLCBhbiBpbmRpY2F0aW9uIG9mIHRoZSB0aW1lIGEgY3Vy cmVudCBkZXNrdG9wIFBDIHdvdWxkIHRha2UgdG8gY3JhY2sgaXQgaXMgZ2l2ZW4uIEl0JiM4 MjE3O3MgYSB2ZXJ5IHJvdWdoIGNhbGN1bGF0aW9uLCBhbHRob3VnaCBNb29yZSYjODIxNztz IExhdyBpcyBhdXRvbWF0aWNhbGx5IHRha2VuIGludG8gYWNjb3VudCAodGh1cyB5b3VyIHBh c3N3b3JkIHdpbGwgYmVjb21lIHdlYWtlciBvdmVyIHRpbWUgaWYgeW91IGRvIG5vdCBjaGFu Z2UgaXQpLjwvcD4KCgk8cD5Zb3Ugd2lsbCBkbyB5b3Vyc2VsZiBhbmQgeW91ciBzeXN0ZW0g YSBodWdlIGZhdm91ciB0byBjaG9vc2UgYSBwYXNzcGhyYXNlIHRoYXQgdGFrZXMgaW4gZXhj ZXNzIG9mIGEgZmV3IHRob3VzYW5kIHllYXJzIHRvIGNyYWNrLiBUaGUgbG9uZ2VyIHRoZSBi ZXR0ZXIuIFJlbWVtYmVyIHRoaXMgaXMgYmFzZWQgb24gYSBicnV0ZSBmb3JjZSBhdHRhY2sg dXNpbmcgYSBzaW5nbGUgZGVza3RvcCBQQyAmIzgyMTI7IG5vdCBhIG1haW5mcmFtZSBvciBh IFBDIGZhcm0gJiM4MjEyOyBhbmQgaXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgaG93 IGVhc3kgdGhlIHBhc3N3b3JkIGlzIHRvIGd1ZXNzIGlmIHlvdSB1c2UgZGljdGlvbmFyeSB3 b3JkcyBvciA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vYmxvZy9jaG9vc2luZy1h LWJyaWxsaWFudC1wYXNzd29yZCI+c29tZSBvdGhlciBiYWQgcGFzc3dvcmQ8L2E+LiBDaG9v c2UgYSBnb29kIG9uZSBhbmQgeW91IDxzdHJvbmc+c2lnbmlmaWNhbnRseTwvc3Ryb25nPiBy ZWR1Y2UgdGhlIHByb2JhYmlsaXR5IG9mIGEgc3VjY2Vzc2Z1bCBhdHRhY2suPC9wPgoKCTxo MiBpZD0ic21kX3Byb2doZWxwX2NhbGxiYWNrcyI+Q2FsbGJhY2tzPC9oMj4KCgk8cD5UaGUg cGx1Z2luIGhhcyBhIGNhbGxiYWNrIG9mIGl0cyBvd24gYWxsb3dpbmcgeW91IHRvIHBlcmZv cm0gY3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbiB0ZXN0 cy4gSG9vayB5b3VyIG93biBjb2RlIGludG8gaXQgYnkgcmFpc2luZyBhIGNhbGxiYWNrIG9u IHRoZSBldmVudCA8Y29kZT5zbWRfcHJvZ25vc3RpY3M8L2NvZGU+IGFuZCBzdGVwIDxjb2Rl PnNxbF9pbmplY3Rpb248L2NvZGU+LiBUaGlzIGNhbGxiYWNrIGZpcmVzIG9uIGV2ZXJ5IHBh Z2UgYWNjZXNzIGlmIDxjb2RlPlByb3RlY3QgYWdhaW5zdCBTUUwgaW5qZWN0aW9uPC9jb2Rl PiBpcyBlbmFibGVkLjwvcD4KCgk8cD5Zb3VyIGNvZGUgY2FuIHJldHVybjo8L3A+CgoJPHVs PgoJCTxsaT4tMSB0byBhc3NlcnQgJiM4MjIwO25vIGluamVjdGlvbiBkZXRlY3RlZCBhdCBh bGwgYW5kIGRvIG5vdCBydW4gdGhlIHBsdWdpbiYjODIxNztzIDxzcGFuIGNsYXNzPSJjYXBz Ij5TUUw8L3NwYW4+IGNoZWNrcyYjODIyMTs8L2xpPgoJCTxsaT4wIHRvIGFzc2VydCAmIzgy MjA7bm8gaW5qZWN0aW9uIGRldGVjdGVkIGJ1dCBydW4gdGhlIHBsdWdpbiBjaGVja3MgYXMg d2VsbCYjODIyMTs8L2xpPgoJCTxsaT4xIHRvIGFzc2VydCAmIzgyMjA7aW5qZWN0aW9uIGRl dGVjdGVkJiM4MjIxOyAocGx1Z2luIGNoZWNrcyBhcmUgYnlwYXNzZWQpPC9saT4KCTwvdWw+ CgoJPHA+SW4gYWxsIGNhc2VzLCB0aGUgcGx1Z2luIHdpbGwgY29udGludWUgdG8gcHJvY2Vz cyBmb3JlbnNpY3MgZXZpZGVuY2UgYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5IVFRQPC9zcGFu PiByZWRpcmVjdGlvbiBpZiB0aGUgb3B0aW9ucyBhcmUgZW5hYmxlZC4gQmFpbCBvdXQgd2l0 aCBhbiA8Y29kZT5leGl0KCk8L2NvZGU+IG9yIDxjb2RlPnR4cF9kaWUoKTwvY29kZT4gaWYg eW91IHdpc2ggdGhlIHBsdWdpbiB0byB0ZXJtaW5hdGUgaW5zdGVhZC48L3A+CgoJPGgyIGlk PSJzbWRfcHJvZ2hlbHBfbXVsdGlzaXRlIj5NdWx0aS1zaXRlIHNldHVwPC9oMj4KCgk8cD5J ZiB5b3UgYXJlIHVzaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3O3Mg bXVsdGktc2l0ZSBmZWF0dXJlIHRoZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgdGhpbmdzIHRv IG5vdGU6PC9wPgoKCTxvbD4KCQk8bGk+WW91IHNob3VsZCBzZXQgc21kX3Byb2dub3N0aWNz IHVwIG9uIDxlbT5lYWNoPC9lbT4gZG9tYWluIHlvdSB3aXNoIHRvIHByb3RlY3QgdG8gYXZv aWQgb3ZlcmxvYWRpbmcgb25lIGRvbWFpbiB3aXRoIGNoZWNraW5nIHRoZW0gYWxsPC9saT4K CQk8bGk+Q2hvb3NlIGp1c3Qgb25lIG9mIHlvdXIgZG9tYWlucyBhcyB0aGUgJiM4MjE2O21h c3RlciYjODIxNzsgd2hpY2ggd2lsbCBtb25pdG9yIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiBjb3JlIGZpbGVzPC9saT4KCQk8bGk+Q29uc2lkZXIgbW92aW5nIGFsbCB0 aGUgZG9tYWlucyBpbiB0aGUgPGNvZGU+L3NpdGVzPC9jb2RlPiBmb2xkZXIgb3V0c2lkZSBk b2Nyb290PC9saT4KCQk8bGk+RW5zdXJlIHlvdSBlbXBsb3kgYSA8Y29kZT5VbmlxdWUgcHJl Zml4PC9jb2RlPiBvciB5b3VyIGNoZWNrc3VtcyBmaWxlcyB3aWxsIGNsYXNoLCBjYXVzaW5n IG9kZCBiZWhhdmlvdXIuIFRoZSByZWNvbW1lbmRlZCBtZXRob2QgaXMgdG8gdXNlIHRoZSA8 Y29kZT5Qcm9nbm9zdGljcyBmb2xkZXI8L2NvZGU+IHNldHRpbmcgdG8gbW92ZSBhbGwgY2hl Y2tzdW0gZmlsZXMgdG8gYSBjZW50cmFsIGxvY2F0aW9uICYjODIxMjsgb3V0c2lkZSBkb2Ny b290ICYjODIxMjsgYW5kIHVzZSB0aGUgc2FtZSBkaXJlY3RvcnkgZm9yIGFsbCBkb21haW5z LiBUaGUgPGNvZGU+VW5pcXVlIHByZWZpeDwvY29kZT4gd2lsbCB0aGVuIGRpc3Rpbmd1aXNo IGJldHdlZW4gdGhlbTwvbGk+CgkJPGxpPlRoZSA8Y29kZT5BZG1pbi1zaWRlIFVSTDwvY29k ZT4gbWF5IHdlbGwgYmUgd3Jvbmc6IHlvdSBzaG91bGQgcHJvYmFibHkgY2hhbmdlIHRoaXMg b24gZWFjaCBkb21haW48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9InNtZF9wcm9naGVscF9iZXR0 ZXIiPkhlbHAgbWFrZSB0aGUgcGx1Z2luIGJldHRlcjwvaDI+CgoJPHA+SWYgc21kX3Byb2du b3N0aWNzIGRvZXMgZGV0ZWN0IHNvbWUgcm9ndWUgZWxlbWVudHMgaW4geW91ciBmaWxlc3lz dGVtLCBwbGVhc2UgY29uc2lkZXIgc2VuZGluZyB0aGUgZm9yZW5zaWNzIHRvIHByb2dub3N0 aWNzIFthdF0gc3RlZmRhd3NvbiBbZG90XSBjb20gd2l0aCBhcyBtdWNoIGluZm9ybWF0aW9u IGFzIHlvdSBwb3NzaWJseSBjYW4uIFlvdSBjYW4gZWl0aGVyIGRvIHRoaXMgYXV0b21hdGlj YWxseSBmcm9tIHdpdGhpbiB0aGUgcGx1Z2luIChzZWUgdGhlIHNldHVwIHBhZ2UsIHRob3Vn aCBub3RlIHRoZSBzZW5zaXRpdml0eSBvZiBzb21lIG9mIHRoZSBkYXRhIHNlbnQpIG9yIGNv cHkgYW5kIHBhc3RlIHJlbGV2YW50IGluZm9ybWF0aW9uIGludG8gYW4gZS1tYWlsLiBUaGUg c29ydCBvZiBzdHVmZiB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCBpczo8L3A+CgoJPHVsPgoJCTxs aT48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiAoYW5kL29yIHNlcnZlcikgbG9ncyBm b3IgdGhlIHRpbWUgb2YgdGhlIGF0dGFjazwvbGk+CgkJPGxpPlRoZSBsaW5lcyBvZiB0aGUg ZmlsZShzKSB0aGF0IHdlcmUgYWZmZWN0ZWQgKG9yIHRoZSBmaWxlcyBpbiB0aGVpciBlbnRp cmV0eSk8L2xpPgoJCTxsaT5UaGUgY29udGVudCBvZiBhbnkgYWRkaXRpb25hbCBsaW5lcyBh ZGRlZCBvciBhbHRlcmVkIGluIHRoZSBmaWxlczwvbGk+CgkJPGxpPllvdXIgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+LCBN eVNRTCBhbmQgQXBhY2hlIHZlcnNpb25zPC9saT4KCQk8bGk+WW91ciBob3N0ZXIgY29tcGFu eSBuYW1lPC9saT4KCTwvdWw+CgoJPHA+YW5kIHNvIG9uLiBBbnkgYW5kIGFsbCBpbmZvcm1h dGlvbiB3aWxsIGJlIHRyZWF0ZWQgaW4gdGhlIHN0cmljdGVzdCBjb25maWRlbmNlIG9mIGNv dXJzZS4gQW5hbHlzaW5nIHRoaXMgZGF0YSBtYXkgYWxsb3cgbWUgdG8gaW1wcm92ZSB0aGUg cGx1Z2luIGFuZCBwZXJoYXBzIGNsb3NlIGFueSBzZWN1cml0eSBob2xlcyBpbiA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBpdHNlbGYsIG9yIGV2ZW4gaGVscCBtYWtlIHRoZSBw bHVnaW4gbW9yZSBwcm8tYWN0aXZlIGJ5IGRldGVjdGluZyB0aGUgdmFyaW91cyBraW5kcyBv ZiBhdHRhY2sgaW4gcHJvZ3Jlc3MgYW5kIG1pbmltaXNpbmcgZGFtYWdlIHRvIHlvdXIgZmls ZSBzeXN0ZW0uIFRoYW5rcyBpbiBhZHZhbmNlIGZvciB5b3UgaGVscC48L3A+CgoJPGgyIGlk PSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xMSBOb3YgMTAgfCAw LjEwIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MTEgTm92IDEwIHwgMC4xMSB8IEFk ZGVkIElnbm9yZSBidXR0b248L2xpPgoJCTxsaT4xMiBOb3YgMTAgfCAwLjEyIHwgRml4ZWQg d2hpdGUgc2NyZWVuIG9mIGRlYXRoIG9uIEZpbGVzIDxlbT5TYXZlPC9lbT4gKGJpbmFyeSBm aWxlcyBhcmUgbm93IGxlZnQgdW5wcm9jZXNzZWQpIDsgaW1wcm92ZWQgcGVyZm9ybWFuY2Ug OyBhZGRlZCBmaWxlIHF1YW50aXR5IGNoZWNrPC9saT4KCQk8bGk+MTUgTm92IDEwIHwgMC4x MyB8IEFsYXJtcyBwYW5lbCBub3cgYWx3YXlzIGRpc3BsYXlzIGFsbCBhbGVydHMgYW5kIGRv ZXNuJiM4MjE3O3QgaW50ZXJmZXJlIHdpdGggZmlsZSBjaGVja2luZyByb3RhdGlvbiA7IGZp eGVkIGluY29ycmVjdCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBpbiBhY2tub3ds ZWRnZSBtZXNzYWdlcyAodGhhbmtzIHRoZWJvbWJzaXRlKSB0aG91Z2ggbXVsdGktc2l0ZSBp bnN0YWxsYXRpb25zIG1heSBzdGlsbCBiZSB3cm9uZyA7IHJlbW92ZWQgZHVtYiBhZG1pbi1z aWRlIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+IGluamVjdGlvbiwgYWRkZWQgPGNv ZGU+Q2hlY2sgZmlsZXMgYmV0d2VlbjwvY29kZT4gYW5kIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IHZlcnNpb24gYWR2aWNlIChhbGwgdGhhbmtzIHJ1dWQpIDsgdHdlYWtlZCBp bmplY3Rpb24gZGV0ZWN0b3IgOyByZWZhY3RvcmVkIGUtbWFpbCBoZWFkZXIgY29kZTwvbGk+ CgkJPGxpPjE2IE5vdiAxMCB8IDAuMTQgfCBBZGRlZCBmb3JlbnNpYyBvcHRpb25zIGZvciBo ZWFkZXIgc3Bvb2ZpbmcvU1FMIGluamVjdGlvbnMgOyBjYW4gbm93IHRocm93IDxzcGFuIGNs YXNzPSJjYXBzIj5IVFRQPC9zcGFuPiByZXNwb25zZSBjb2RlIG9yIGN1c3RvbSBtZXNzYWdl L2Zvcm0gaW5zdGVhZCBvZiAmIzgyMTY7bmljZSB0cnkmIzgyMTc7IDsgd2lsZGNhcmQgYWJp bGl0eSBmb3IgaWdub3JlZCBmaWxlcyA7IGFkZGVkIHVzZXIgY2hlY2sgYW5kIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRpciBvcHRpb24gKHRoYW5rcyBtYXZlcmljayk8L2xp PgoJCTxsaT4wOSBEZWMgMTAgfCAwLjE1IHwgSW1wcm92ZWQgd2FybmluZyBkaXNwbGF5IHdo ZW4gc2F2aW5nIHByZWZlcmVuY2VzICh0aGFua3MgbWFuaXF1aSkgOyBza2lwcGVkIGNvbW1l bnQgcHJldmlldyBzdGVwIGZvciBzcWwgaW5qZWN0aW9ucyA7IGZpeGVkIHZlcnNpb24gbnVt YmVyIGluIGZyb2dub3N0aWNzIDsgZml4ZWQgZGlzcGxheSBlcnJvciBvbiBBZHZpY2UgcGFu ZWwgOyBhZGRlZCA8Y29kZT5zcWxfaW5qZWN0aW9uPC9jb2RlPiBjYWxsYmFjayA7IGFkZGVk IHJwYyBhZHZpY2UgY2hlY2s8L2xpPgoJCTxsaT4wOSBEZWMgMTAgfCAwLjE2IHwgTmV2ZXIg YXNzdW1lIEVuZ2xpc2ggYnV0dG9uIG5hbWVzICh0aGFua3Mgcm9lbG9mKTwvbGk+CgkJPGxp PjMwIERlYyAxMCB8IDAuMTcgfCBBZGRlZCBpbmplY3Rpb24gc2Vuc2l0aXZpdHkgdG8gdHJ5 IGFuZCBtaW5pbWlzZSBmYWxzZSBwb3NpdGl2ZXMgb24gc2l0ZXMgdGhhdCBhY2NlcHQgY29t bWVudHMgOyBmaXhlZCBsb3NzIG9mIHNldHRpbmdzIG9uIHN3aXRjaGluZyBwcm9nbm9zdGlj cyBzdWJ0YWI8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NT ICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWln aHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1 JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9j azsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgx IHsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxp Z246IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQg YmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJp ZjsgfQojc21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7 IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06 IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7 IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFw eDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21k X2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJh Y2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFi bGUgeyB3aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07 IGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsgfQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0 aCB7IGJvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtOyB9CiNzbWRfaGVscCB1 bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0KI3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBj b2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFyZ2luOjVweCAyMHB4IDVweCAzMHB4OyB9 CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9wOjVweDsgfQo8L3N0eWxlPgo8IS0tICoq KiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czozOiJtZDUiO3M6MzI6ImI0NTc3M2FiMTgy MjRhY2E2OGI3MWQyNmEwMWE4NTljIjt9