# Name: ied_plugin_composer v0.91 # Type: Admin side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuOTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJXcml0ZSBhbmQg cHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo0OiJjb2RlIjtzOjU3Mzc3OiJpZihAdHhwaW50 ZXJmYWNlID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ2llZF9wbHVnaW5fY29tcG9zZXIn LCcxLDInKTsNCglhZGRfcHJpdnMoJ3BsdWdpbl9wcmVmcy5pZWRfcGx1Z2luX2NvbXBvc2Vy JywnMSwyJyk7DQoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ2llZF9wbHVnaW5fY29t cG9zZXInLCBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY29tcG9zZXInKSk7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fY29tcG9zZXInLCAnaWVkX3BsdWdpbl9jb21w b3NlcicpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdpZWRfcGx1Z2luX3NldHVwJywgJ3BsdWdp bl9wcmVmcy5pZWRfcGx1Z2luX2NvbXBvc2VyJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2ll ZF9wbHVnaW5fd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLmllZF9wbHVnaW5fY29tcG9z ZXInKTsNCg0KCWdsb2JhbCAkaWVkX3BsdWdpbl9jb21wb3NlciwgJGllZF9wbHVnaW5fcHJl ZnMsICRpZWRfcGx1Z2luX2dsb2JhbHMsICRwcmVmczsNCgkkaWVkX3BsdWdpbl9nbG9iYWxz ID0gYXJyYXkoDQoJCSdjc3Nfc3RhcnQnID0+ICc8IS0tJywNCgkJJ2Nzc19lbmQnID0+ICct LT4nLA0KCQknZGxtX3N0YXJ0JyA9PiAnIycsDQoJCSdkbG1fZW5kJyA9PiAnJywNCgkJJ3N0 YXJ0JyA9PiAnIC0tLSBCRUdJTiBQTFVHSU4gU0VDVElPTiAtLS0nLA0KCQknZW5kJyA9PiAn IC0tLSBFTkQgUExVR0lOIFNFQ1RJT04gLS0tJywNCgkJJ3NpemVfaGVscCcgPT4gJzYzNTM1 JywNCgkJJ3NpemVfY3NzJyA9PiAnMjAwMCcsDQoJCSdzaXplX2NvZGUnID0+ICcxNjc3NzIx NScsDQoJKTsNCgkvLyBEb3VibGUgYXJyYXk6IDFzdCBpcyBhIGxpc3Qgb2YgY3VycmVudCBw cmVmcyBhbmQgdGhlaXIgZGVmYXVsdHMsDQoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kg cHJlZnMgdGhhdCBtYXkgbmVlZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBz ZXQgZW1wdHkpDQoJJGllZF9wbHVnaW5fcHJlZnMgPSBhcnJheSgNCgkJYXJyYXkoDQoJCQkn aWVkX3BsdWdpbl9lZGl0b3InID0+ICdub25lJywNCgkJCSdpZWRfcGx1Z2luX2VkaXRvcl9w YXRoJyA9PiBodS4nanMnLkRTLA0KCQkJJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJyA9PiAn MTEwJywNCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yJyA9PiAndGV4dGlsZScsDQoJCQkn aWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLA0KCQkJJ2llZF9w bHVnaW5fb3V0cHV0X29yZGVyJyA9PiAnMCcsDQoJCQknaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGUnID0+ICd7bmFtZX1fdnt2ZXJzaW9ufS50eHQnLA0KCQkJJ2llZF9wbHVnaW5fb3V0cHV0 X3NmaWxlYycgPT4gJ3tuYW1lfV92e3ZlcnNpb259X3ppcC50eHQnLA0KCQkJJ2llZF9wbHVn aW5fb3V0cHV0X3NmaWxlcCcgPT4gJ3tuYW1lfV92e3ZlcnNpb259LnBocCcsDQoJCQknaWVk X3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnID0+ICRwcmVmc1sndGVtcGRpciddLA0KCQkpLA0K CQlhcnJheSgNCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2FueV9tb3JlX3BsYWNlaG9sZGVy JyA9PiAnJywNCgkJKQ0KCSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVn aW5fY29tcG9zZXIoJGV2ZW50LCAkc3RlcCkgew0KCWlmKCEkc3RlcCBvciAhaW5fYXJyYXko JHN0ZXAsIGFycmF5KA0KCQkJJ2llZF9wbHVnaW5fZGVsZXRlJywNCgkJCSdpZWRfcGx1Z2lu X2VkaXQnLA0KCQkJJ2llZF9wbHVnaW5faGVscCcsDQoJCQknaWVkX3BsdWdpbl9saXN0JywN CgkJCSdpZWRfcGx1Z2luX2luc3RhbGwnLA0KCQkJJ2llZF9wbHVnaW5fc2F2ZScsDQoJCQkn aWVkX3BsdWdpbl9yZXN0b3JlJywNCgkJCSdpZWRfc3dpdGNoX3N0YXR1cycsDQoJCQknaWVk X3NldF9vcmRlcicsDQoJCQknaWVkX3BsdWdpbl9zZXR1cCcsDQoJCQknaWVkX3BsdWdpbl9w cmVmc19pbnN0YWxsJywNCgkJCSdpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZScsDQoJCQknaWVk X3BsdWdpbl9wcmVmc191cGRhdGUnLA0KCQkJJ2llZF9wbHVnaW5fY3JlYXRlX25ldycsDQoJ CQknaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUnLA0KCQkJJ2llZF9wbHVnaW5fc2F2ZV9hc19w aHBfZmlsZScsDQoJCQknaWVkX3BsdWdpbl91cGxvYWQnLA0KCQkJJ2llZF9wbHVnaW5faGVs cF92aWV3ZXInLA0KCQkpKSkgew0KCQlpZWRfcGx1Z2luX2xpc3QoKTsNCgl9IGVsc2UgJHN0 ZXAoKTsNCn0NCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fd2VsY29tZSgkZXZl bnQsICRzdGVwKSB7DQoJJG1zZyA9ICcnOw0KCXN3aXRjaCAoJHN0ZXApIHsNCgkJY2FzZSAn aW5zdGFsbGVkJzoNCgkJCWllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCgwKTsNCgkJCSRtc2cg PSAnVGhhbmtzIGZvciBpbnN0YWxsaW5nIHRoZSBwbHVnaW4gY29tcG9zZXIuIFBsZWFzZSBy ZWFkIHRoZSBkb2NzIDotKSc7DQoJCQlicmVhazsNCgkJY2FzZSAnZGVsZXRlZCc6DQoJCQlp ZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSgwKTsNCgkJCWJyZWFrOw0KCX0NCglyZXR1cm4gJG1z ZzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUmV1cm5zIGFuIGFycmF5IG9mIGZpbGVuYW1lczsg MXN0IGlzIHRoZSBzdGFuZGFyZCBwbHVnaW4sIDJuZCBpcyB0aGUgY29tcHJlc3NlZCBwbHVn aW4sIDNyZCBpcyB0aGUgUEhQIHRlbXBsYXRlDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2dldF9u YW1lKCRuYW1lLCAkdmVyc2lvbikgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmcywgJHBy ZWZzOw0KDQoJJG91dCA9IGFycmF5KA0KCQkoKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfc2ZpbGUnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGUnXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZSddIDogJGllZF9wbHVn aW5fcHJlZnNbMF1bJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJ10pLA0KCQkoKGlzc2V0KCRw cmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10pICYmICFlbXB0eSgkcHJlZnNbJ2ll ZF9wbHVnaW5fb3V0cHV0X3NmaWxlYyddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X3NmaWxlYyddIDogJGllZF9wbHVnaW5fcHJlZnNbMF1bJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlYyddKSwNCgkJKChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCdd KSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSkpID8gJHBy ZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBd WydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSksDQoJKTsNCg0KCSRyZXAgPSBhcnJheSgN CgkJIntuYW1lfSIgPT4gJG5hbWUsDQoJCSJ7dmVyc2lvbn0iID0+ICR2ZXJzaW9uLA0KCSk7 DQoNCglmb3JlYWNoICgkb3V0IGFzICRmaWR4ID0+ICRmbmFtZSkgew0KCQkkZm5hbWUgPSBz dHJ0cigkZm5hbWUsICRyZXApOw0KCQkkb3V0WyRmaWR4XSA9IHNhbml0aXplRm9yRmlsZSgk Zm5hbWUpOw0KCX0NCg0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJ cGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7DQoJZWNobyBzdGFydFRh YmxlKCdsaXN0JykuDQp0cih0ZGEoDQpmb3JtKA0KZklucHV0KCd0ZXh0JywnbmFtZScsJycs JycsJycsJycsJzMwJywnMCcpDQouIGZJbnB1dCgnc3VibWl0Jywnc3VibWl0JyxpZWRfcGx1 Z2luX2dUeHQoJ2NyZWF0ZV9uZXcnKSwnc21hbGxlcmJveCcpDQouIHNJbnB1dCgnaWVkX3Bs dWdpbl9jcmVhdGVfbmV3JykNCi4gZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykNCikN CiwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweCInKQ0KLnRkYShm b3JtKGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGllZF9wbHVnaW5fZ1R4dCgnc2V0dXAn KSwgJ3B1Ymxpc2gnKS5zSW5wdXQoJ2llZF9wbHVnaW5fc2V0dXAnKS5lSW5wdXQoJ2llZF9w bHVnaW5fY29tcG9zZXInKSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0 OjUwcHgiJykpLg0KYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJyxnVHh0KCd2ZXJzaW9uJyku JyAoJy5nVHh0KCdwbHVnaW5fbW9kaWZpZWQnKS4nKScsJ2Rlc2NyaXB0aW9uJywncHVibGlz aCcsJ29yZGVyJywnYWN0aXZlJywnJyk7DQoNCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoIioi LCJ0eHBfcGx1Z2luIiwgIjE9MSBvcmRlciBieSBuYW1lIik7DQoNCgl3aGlsZSAoJGEgPSBu ZXh0Um93KCRycykpIHsNCgkJZXh0cmFjdCgkYSk7DQoJCSRlbmFtZSA9ICc8YSBocmVmPSI/ ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2VkaXQmIzM4 O25hbWU9Jy4kbmFtZS4nIj4nLiRuYW1lLic8L2E+JzsNCgkJJGhsaW5rID0gKCRoZWxwKSA/ ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX2hlbHBfdmlld2VyJiMzODtuYW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdoZWxwJykuJzwv YT4nIDogJ05vbmUnOw0KCQkkb0xpbmsgPSBpZWRfcGx1Z2luX29yZGVyX2Zvcm0oJG5hbWUs ICRsb2FkX29yZGVyKTsNCgkJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUs ICR2ZXJzaW9uKTsNCgkJJHB1YnRhZyA9IHRhZyhnVHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJl Zj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4 dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzBdLiAnIicpOw0KCQkkcHVienRhZyA9IHRhZyhp ZWRfcGx1Z2luX2dUeHQoJ2NvbXByZXNzJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVn aW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9 Jy4kbmFtZS4nJiMzODt6aXA9dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4 cG9ydCcpIC4nICcuJGZuYW1lc1sxXS4gJyInKTsNCgkJJG1vZGlmaWVkID0gKHN0cnRvbG93 ZXIoJGNvZGUpICE9IChzdHJ0b2xvd2VyKCRjb2RlX3Jlc3RvcmUpKSk7DQoJCSRwbHVncHJl ZiA9ICgoJGZsYWdzICYgUExVR0lOX0hBU19QUkVGUykgJiYgJHN0YXR1cykgPyAnICcudGFn KCAnWycuZ1R4dCgncGx1Z2luX3ByZWZzJykuJ10nICwgJ2EnLCAnIGhyZWY9Ij9ldmVudD1w bHVnaW5fcHJlZnMuJy51cmxlbmNvZGUoJG5hbWUpLiciJykgOiAnJzsNCg0KCQllY2hvIHRy KHRkKCRlbmFtZS4kcGx1Z3ByZWYpDQoudGQoKCAoJGF1dGhvcl91cmkpID8gJzxhIGhyZWY9 IicuJGF1dGhvcl91cmkuJyI+Jy4kYXV0aG9yLic8L2E+JyA6ICRhdXRob3IpLDE2MCkNCi50 ZCgoKCRtb2RpZmllZCkgPyAnPGEgaHJlZj0iaW5kZXgucGhwP2V2ZW50PWllZF9wbHVnaW5f Y29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9yZXN0b3JlJiMzODtuYW1lPScuJG5hbWUu JyIgdGl0bGU9IicuaWVkX3BsdWdpbl9nVHh0KCdyZXN0b3JlX2hlbHAnKS4nIiBvbmNsaWNr PSJyZXR1cm4gdmVyaWZ5KFwnJy5pZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVfdmVyaWZ5Jywg YXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKS4nXCcpOyI+Jy4kdmVyc2lvbi4nPC9hPicgOiAk dmVyc2lvbikgLiAoKCRtb2RpZmllZCkgPyAnJm5ic3A7KCcuZ1R4dCgneWVzJykuJyknIDog JycpLDEwKQ0KLnRkKCRkZXNjcmlwdGlvbiwyNjApDQoudGQoJHB1YnRhZyAuJyB8ICcuICRw dWJ6dGFnIC4nIHwgJy4gJGhsaW5rKQ0KLnRkKCRvTGluaywgNDApDQoudGQoaWVkX3N0YXR1 c19saW5rKCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMpKSwzMCkNCg0KLnRkKGRMaW5r KCdpZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCduYW1lJywkbmFt ZSksMzApDQopOw0KCQl1bnNldCgkbmFtZSwkcGFnZSwkZGVsZXRlbGluayk7DQoJfQ0KDQoJ aWYgKCFlbXB0eSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXSkgJiYgZmlsZV9leGlzdHMo JHByZWZzWydwbHVnaW5fY2FjaGVfZGlyJ10pKSB7DQoJCSRmaWxlbmFtZXMgPSBhcnJheSgp Ow0KCQkkZGlyID0gZGlyKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddKTsNCgkJd2hpbGUg KCRmaWxlID0gJGRpci0+cmVhZCgpKSB7DQoJCQlpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUg IT0gIi4uIikgew0KCQkJCSRmaWxlYWRkciA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2Rpcidd LkRTLiRmaWxlOw0KCQkJCWlmICghaXNfZGlyKCRmaWxlYWRkcikpIHsNCgkJCQkJJGZpbGVu YW1lc1tdPSRmaWxlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkkZGlyLT5jbG9zZSgpOw0KCQko JGZpbGVuYW1lcyk/bmF0Y2FzZXNvcnQoJGZpbGVuYW1lcyk6Jyc7DQoJCWVjaG8gdHIoDQoJ CXRkYSgNCgkJdGFnKGllZF9wbHVnaW5fZ1R4dCgncnVuX2Zyb20nKS4nICcudGFnKCdwbHVn aW5fY2FjaGVfZGlyJywnYWNyb255bScsJyB0aXRsZT0iJy4kcHJlZnNbJ3BsdWdpbl9jYWNo ZV9kaXInXS4nIiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIGJsYWNrIicpLic6 JywnaDEnKQ0KCQksJyBjb2xzcGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7 dGV4dC1hbGlnbjpsZWZ0IicpDQoNCgkJKTsNCg0KCQllY2hvIGFzc0hlYWQoJ3BsdWdpbics J2F1dGhvcicsJ3ZlcnNpb24nLCdkZXNjcmlwdGlvbicsJ3B1Ymxpc2gnLCcnLCcnKTsNCgkJ Zm9yZWFjaCgkZmlsZW5hbWVzIGFzICRmaWxlbmFtZSkgew0KCQkJJGZpbGVleHQ9IGFycmF5 X3BvcChleHBsb2RlICgnLicsJGZpbGVuYW1lKSk7DQoJCQlpZiAoJGZpbGVleHQ9PSdwaHAn KSB7DQoJCQkJJGJhc2VuYW1lPWJhc2VuYW1lKCRmaWxlbmFtZSk7DQoJCQkJJHBsdWdpbiA9 IGllZF9wbHVnaW5fcmVhZF9maWxlKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTLiRm aWxlbmFtZSk7DQoJCQkJJGhsaW5rID0gKCRwbHVnaW5bJ2hlbHAnXSkgPyAnPGEgaHJlZj0i P2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3Zp ZXdlciYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy5nVHh0KCdoZWxwJykuJzwvYT4n IDogJ05vbmUnOw0KCQkJCSRlZmlsZSA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9j b21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2VkaXQmIzM4O2ZpbGVuYW1lPScuJGZpbGVu YW1lLiciPicuJHBsdWdpblsnbmFtZSddLic8L2E+JzsNCgkJCQkkZm5hbWVzID0gaWVkX3Bs dWdpbl9nZXRfbmFtZSgkcGx1Z2luWyduYW1lJ10sICRwbHVnaW5bJ3ZlcnNpb24nXSk7DQoJ CQkJJHBsdWdwcmVmID0gKCgkcGx1Z2luWydmbGFncyddICYgUExVR0lOX0hBU19QUkVGUykp ID8gJyAnLnRhZyggJ1snLmdUeHQoJ3BsdWdpbl9wcmVmcycpLiddJyAsICdhJywgJyBocmVm PSI/ZXZlbnQ9cGx1Z2luX3ByZWZzLicudXJsZW5jb2RlKCRwbHVnaW5bJ25hbWUnXSkuJyIn KSA6ICcnOw0KDQoJCQkJZWNobyB0cigNCgkJCQl0ZCgNCgkJCQl0YWcoJGZpbGVuYW1lLCdk aXYnLCcgc3R5bGU9ImNvbG9yOmdyYXk7Ym9yZGVyOjA7cGFkZGluZzoxcHggMnB4IDJweCAx cHg7IicpDQoJCQkJLihpc3NldCgkcGx1Z2luWyduYW1lJ10pPyRlZmlsZS4kcGx1Z3ByZWYu JzxiciAvPic6JycpLicgJw0KCQkJCSkNCgkJCQkudGQoDQoJCQkJKCBpc3NldCgkcGx1Z2lu WydhdXRob3JfdXJpJ10pPyc8YSBocmVmPSInLiRwbHVnaW5bJ2F1dGhvcl91cmknXS4nIj4n OicnICkgLg0KCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yJ10pPyRwbHVnaW5bJ2F1dGhv ciddOicmbmJzcDsnICkuDQoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10pPyc8 L2E+JzonJyApLCAxNjANCgkJCQkpDQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyd2ZXJzaW9u J10pPyRwbHVnaW5bJ3ZlcnNpb24nXTonJm5ic3A7JyksMTApDQoJCQkJLnRkKChpc3NldCgk cGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlvbiddOicmbmJzcDsn KSwyNjApDQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPw0KCQkJCXRhZyhnVHh0 KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4 O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1l LiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiRmbmFtZXNb MF0uICciJykNCgkJCQkJCS4nIHwgJy50YWcoaWVkX3BsdWdpbl9nVHh0KCdjb21wcmVzcycp LCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9w bHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMzODt6aXA9 dHJ1ZSIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZuYW1l c1sxXS4gJyInKToNCgkJCQl0YWcoJyZuYnNwOycsJ3NwYW4nLCcgc3R5bGU9ImNvbG9yOmdy YXkiJykNCgkJCQkpLicgfCAnLiRobGluaykNCgkJCQkudGQoJycpDQoJCQkJLnRkKCcnKQ0K CQkJCSk7DQoJCQl9DQoJCX0NCgl9DQoNCgllY2hvIHRyKA0KdGRhKA0KJzxmb3JtIGVuY3R5 cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBv c3QiPicuDQpzdGFydFRhYmxlKCdlZGl0JywnbGVmdCcpLg0KdHIodGRhKCBoSW5wdXQoJ01B WF9GSUxFX1NJWkUnLDEwMDAwMDApLg0KZ3JhZihpZWRfcGx1Z2luX2dUeHQoJ3VwbG9hZF9w aHAnKS4nOiAnLg0KZklucHV0KCdmaWxlJywndGhlZmlsZScsJycsJ2VkaXQnKS4NCmZJbnB1 dCgnc3VibWl0Jywnc3VibWl0JyxnVHh0KCd1cGxvYWQnKSwnc21hbGxlcmJveCcpKS4NCmVJ bnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpLg0Kc0lucHV0KCdpZWRfcGx1Z2luX3VwbG9h ZCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5IicgKS4NCnRkYSggdGFnKGll ZF9wbHVnaW5fZ1R4dCgnbmFtZScpLCAnYWNyb255bScsJyB0aXRsZT0iJy5pZWRfcGx1Z2lu X2dUeHQoJ25hbWVfdG9vbHRpcCcpLiciIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNo ZWQgYmxhY2siJykuJzogJy4gZklucHV0KCd0ZXh0JywnbmFtZScsJ3h4eF94eHh4eHgnLCcn LCcnLCcnLCczMCcsJzAnKSAsICcgc3R5bGU9ImJvcmRlcjowcHggc29saWQgZ3JheTt2ZXJ0 aWNhbC1hbGlnbjptaWRkbGU7IicgKSkuDQplbmRUYWJsZSgpLg0KJzwvZm9ybT4nDQosJyBj b2xzcGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjpsZWZ0 IicpDQopOw0KCWVjaG8gZW5kVGFibGUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g aWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUsJGxpbmt0ZXh0KSB7DQoJJG91dCA9ICc8 YSBocmVmPSJpbmRleC5waHA/JzsNCgkkb3V0IC49ICdldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9zd2l0Y2hfc3RhdHVzJiMzODtzdGF0dXM9Jy4NCgkkc3RhdHVz LicmIzM4O25hbWU9Jy51cmxlbmNvZGUoJG5hbWUpLiciJzsNCgkkb3V0IC49ICc+Jy4kbGlu a3RleHQuJzwvYT4nOw0KCXJldHVybiAkb3V0Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBpZWRfc3dpdGNoX3N0YXR1cygpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn bmFtZScsJ3N0YXR1cycpKSkpOw0KCSRjaGFuZ2UgPSAoJHN0YXR1cykgPyAwIDogMTsNCglz YWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsICJzdGF0dXM9JGNoYW5nZSIsICJuYW1lPSckbmFt ZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9zZXRf b3JkZXIoKSB7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCAnbG9hZF9v cmRlcicpKSkpOw0KCSRvcmRlciA9IG1pbihtYXgoIGludHZhbCgkbG9hZF9vcmRlciksIDEp LCA5KTsNCglzYWZlX3VwZGF0ZSgndHhwX3BsdWdpbicsICJsb2FkX29yZGVyID0gJGxvYWRf b3JkZXIiLCAibmFtZSA9ICckbmFtZSciKTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1 Z2luX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fb3JkZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3JkZXIp IHsNCglmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0gPSAkaTsNCgly ZXR1cm4gZm9ybSgNCgkJZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykubi4NCgkJc0lu cHV0KCdpZWRfc2V0X29yZGVyJykubi4NCgkJaElucHV0KCduYW1lJywgJG5hbWUpLm4uDQoJ CXNlbGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRfb3JkZXIsIDAsIDEp DQoJCSwnZGlzcGxheTppbmxpbmUnDQoJKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g aWVkX3BsdWdpbl9kZWxldGUoKSB7DQoJJG5hbWUgPSBkb1NsYXNoKHBzKCduYW1lJykpOw0K CXNhZmVfZGVsZXRlKCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5hbWUnIik7DQoJaWVkX3BsdWdp bl9saXN0KGdUeHQoJ3BsdWdpbl9kZWxldGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUp KSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVzdG9yZSgpIHsN CgkkbmFtZSA9IGRvU2xhc2goZ3BzKCduYW1lJykpOw0KCXNhZmVfdXBkYXRlKCJ0eHBfcGx1 Z2luIiwiY29kZSA9IGNvZGVfcmVzdG9yZSIsIm5hbWU9JyRuYW1lJyIpOw0KCWllZF9wbHVn aW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVkJywgYXJyYXkoJ3tuYW1lfScgPT4g JG5hbWUpKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRpdCgk bWVzc2FnZT0nJywkbmV3ZmlsZT0nJykgew0KCSRzaXRlX2RpciA9IGh1Ow0KCSRuZXduYW1l ID0gdHJpbShncHMoJ25ld25hbWUnKSk7DQoJJG5hbWUgPSBlbXB0eSgkbmV3bmFtZSkgPyBn cHMoJ25hbWUnKSA6ICRuZXduYW1lOw0KCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyks JG1lc3NhZ2UpOw0KCWVjaG8gaWVkX2luc2VydF9lZGl0b3JzKCk7DQoJJHRoZUZpbGUgPSAo JG5ld2ZpbGUpID8gJG5ld2ZpbGUgOiAoKGdwcygnZmlsZW5hbWUnKSkgPyBncHMoJ2ZpbGVu YW1lJykgOiAkbmFtZSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkdGhlRmlsZSwg Z3BzKCdmaWxlbmFtZScpPyAxOiAwKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVk X3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVkaXRmaWxlPTApIHsNCglnbG9iYWwgJHBy ZWZzLCAkaWVkX3BsdWdpbl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsNCglpZiAoISRl ZGl0ZmlsZSkgew0KCQkkcnMgPSBzYWZlX3JvdygiYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJz aW9uLCBkZXNjcmlwdGlvbiwgY29kZSwgaGVscCwgc3RhdHVzLCB0eXBlLCBsb2FkX29yZGVy LCBmbGFncyIsICJ0eHBfcGx1Z2luIiwgIm5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRy cyk7DQoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0 X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxw KTsNCgl9IGVsc2Ugew0KCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJHByZWZz WydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJG5hbWUpOw0KCQkkZmlsZW5hbWUgPSAkbmFtZTsN CgkJJGZpbGVleHQgPSBhcnJheV9wb3AoJG5hbWU9ZXhwbG9kZSAoJy4nLCRuYW1lKSk7DQoJ CSRuYW1lID0gaW1wbG9kZSgkbmFtZSk7DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJCSRzdGF0 dXMgPSAoJGZpbGVleHQ9PSdwaHAnKT8gMTogMDsNCgl9DQoJJGVkd2lkdGggPSAoaXNzZXQo JHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSAmJiBpc19udW1lcmljKCRwcmVm c1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX2Vk aXRvcl93aWR0aCddIDogJGllZF9wbHVnaW5fcHJlZnNbMF1bJ2llZF9wbHVnaW5fZWRpdG9y X3dpZHRoJ107DQoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9t YWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAk aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCSRwbHVnaW5bJ25hbWUnXSA9ICRu YW1lOw0KCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsNCgkkcGx1Z2luWydhdXRob3Jf dXJpJ10gPSAkYXV0aG9yX3VyaTsNCgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lvbjsN CgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOw0KCSRwbHVnaW5bJ2hl bHAnXSA9IGllZF9wbHVnaW5fdGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3MsICRzdGFydF9j c3MsICRlbmRfY3NzKTsNCgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsNCgkkcGx1Z2luWyd0 eXBlJ10gPSAkdHlwZTsNCgkkcGx1Z2luWydvcmRlciddID0gJGxvYWRfb3JkZXI7DQoJJHBs dWdpblsnZmxhZ3MnXSA9ICRmbGFnczsNCgkkcGx1Z2luWydtZDUnXSA9IG1kNSggJHBsdWdp blsnY29kZSddICk7DQoJZm9yICgkaSA9IDE7ICRpIDw9IDk7ICRpKyspICRvcmRlcnNbJGld ID0gJGk7DQoNCgkkZGlzdHJpYnV0aW9uPSc8dGV4dGFyZWEgbmFtZT0iZGlzdHJpYnV0aW9u IiByb3dzPSIxIiBjb2xzPSInLiRlZHdpZHRoLiciIG9uY2xpY2s9InRoaXMuc2VsZWN0KCki PicuYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdpbikpLic8L3RleHRhcmVhPic7DQoN CgkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgkcGx1Z2luWyduYW1lJ10sICRwbHVn aW5bJ3ZlcnNpb24nXSk7DQoJJG5hbWVkTGluayA9IChpc3NldCgkZmlsZW5hbWUpKSA/ICdm aWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5hbWU7DQoNCgkkc2xpbmsgPSAnPGEg aHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9z YXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC5pZWRfcGx1Z2luX2dUeHQoJ2V4 cG9ydCcpIC4nICcuICRmbmFtZXNbMF0uICc8L2E+JzsNCgkkc3ppcGxpbmsgPSAnPGEgaHJl Zj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nJiMzODt6aXA9dHJ1ZSI+JyAuIGllZF9wbHVn aW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZuYW1lc1sxXS4gJyAoY29tcHJlc3NlZCk8L2E+ JzsNCgkkc3BocGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJiMzODsnLiRuYW1lZExpbmsu JyI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnc2F2ZV9hcycpIC4nICcuICRmbmFtZXNbMl0uICc8 L2E+JzsNCgkkdmhlbHBsaW5rZnVsbCA9ICgkaGVscCkgPyAnPGEgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7 Jy4kbmFtZWRMaW5rLiciPlsgJy5zdHJvbmcoZ1R4dCgndmlldycpLicgJy5nVHh0KCdoZWxw JykpLicgXTwvYT4nIDogJyc7DQoNCgkkbmV3bmFtZSA9IGZJbnB1dCgndGV4dCcsJ25ld25h bWUnLCRuYW1lLCdlZGl0JywnJywnJywkZWR3aWR0aCAtIChpbnQpKCRlZHdpZHRoKjAuMyks JzInKTsNCgkkYXV0aG9yID0gZklucHV0KCd0ZXh0JywnYXV0aG9yJywkYXV0aG9yLCdlZGl0 JywnJywnJywkZWR3aWR0aCwnMicpOw0KCSRhdXRob3JfdXJpID0gZklucHV0KCd0ZXh0Jywn YXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCcnLCcnLCRlZHdpZHRoLCcyJyk7DQoJ JHZlcnNpb24gPSBmSW5wdXQoJ3RleHQnLCd2ZXJzaW9uJywkdmVyc2lvbiwnZWRpdCcsJycs JycsJGVkd2lkdGggLSAoaW50KSgkZWR3aWR0aCowLjMpLCcyJykgLiAnJiMxNjA7JiMxNjA7 Jy4gKCgkZWRpdGZpbGUpID8gY2hlY2tib3goJ3JlbmFtZV9maWxlJywgJzEnLCAwLCAnJywn cmVuYW1lX2ZpbGUnKSAuICcgPGxhYmVsIGZvcj0icmVuYW1lX2ZpbGUiPicuaWVkX3BsdWdp bl9nVHh0KCdyZW5hbWVfZmlsZScpLic8L2xhYmVsPicgOiBjaGVja2JveCgncmVzdG9yZV9w b2ludCcsICcxJywgMCwgJycsJ3Jlc3RvcmVfcG9pbnQnKSAuICcgPGxhYmVsIGZvcj0icmVz dG9yZV9wb2ludCI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVfcG9pbnQnKS4nPC9sYWJl bD4nKTsNCgkkZGVzY3JpcHRpb24gPWZJbnB1dCgndGV4dCcsJ2Rlc2NyaXB0aW9uJywkZGVz Y3JpcHRpb24sJ2VkaXQnLCcnLCcnLCRlZHdpZHRoLCcyJyk7DQoJJGNvZGUgPSAnPHRleHRh cmVhIG5hbWU9ImNvZGUiIGlkPSJwbHVnaW5fZWRpdG9yIiByb3dzPSIzMCIgY29scz0iJy4k ZWR3aWR0aC4nIiBjbGFzcz0iY29kZSBjb2RlcHJlc3MgcGhwIiBtYXhsZW5ndGg9IicuJGll ZF9wbHVnaW5fZ2xvYmFsc1snc2l6ZV9jb2RlJ10uJyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRj b2RlKS4nPC90ZXh0YXJlYT48ZGl2IGNsYXNzPSJqdW1wVG9MaW5lIj4nLmllZF9wbHVnaW5f Z1R4dCgnanVtcF90b19saW5lJykuJyA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImllZF9qdW1w VG9MaW5lIiBzaXplPSI1IiBtYXhsZW5ndGg9IjYiIC8+PC9kaXY+PGRpdiBjbGFzcz0iY2hh cnNSZW1haW4iPjwvZGl2Pic7DQoJJGhlbHAgPSAnPHRleHRhcmVhIG5hbWU9ImhlbHAiIHJv d3M9IjMwIiBjb2xzPSInLiRlZHdpZHRoLiciIGNsYXNzPSJtY2VFZGl0b3IiIG1heGxlbmd0 aD0iJy4kaWVkX3BsdWdpbl9nbG9iYWxzWydzaXplX2hlbHAnXS4nIj4nLmh0bWxzcGVjaWFs Y2hhcnMoJGhlbHApLic8L3RleHRhcmVhPjxkaXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rp dj4nOw0KCSRjc3MgPSAnPHRleHRhcmVhIG5hbWU9ImNzcyIgcm93cz0iMTUiIGNvbHM9Iicu JGVkd2lkdGguJyIgY2xhc3M9ImNvZGUiIG1heGxlbmd0aD0iJy4kaWVkX3BsdWdpbl9nbG9i YWxzWydzaXplX2NzcyddLiciPicuaHRtbHNwZWNpYWxjaGFycygkY3NzKS4nPC90ZXh0YXJl YT48ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkcGx1Z3N0YXR1cyA9ICgh JGVkaXRmaWxlKSA/ICcmIzE2MDsmIzE2MDsnLmNoZWNrYm94KCdzdGF0dXMnLDEsJHN0YXR1 cywgJycsJ3N0YXR1cycpLiAnIDxsYWJlbCBmb3I9InN0YXR1cyI+Jy5pZWRfcGx1Z2luX2dU eHQoJ2VuYWJsZScpLic8L2xhYmVsPicgOiAnJzsNCgkkcGx1Z3R5cGUgPSByYWRpbygndHlw ZScsMCwoKCR0eXBlPT0wKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5cGVfMCcpLiIgIg0K CQkuIHJhZGlvKCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgn dHlwZV8xJykuIiAiDQoJCS4gcmFkaW8oJ3R5cGUnLDIsKCgkdHlwZT09Mik/MTowKSkuaWVk X3BsdWdpbl9nVHh0KCd0eXBlXzInKS4iICINCgkJLiByYWRpbygndHlwZScsMywoKCR0eXBl PT0zKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5cGVfMycpOw0KCSRwbHVnb3JkZXIgPSBz ZWxlY3RJbnB1dCgnbG9hZF9vcmRlcicsICRvcmRlcnMsICRsb2FkX29yZGVyLCAwLCAwKTsN CgkkZmxhZ2xpc3QgPSBjaGVja2JveCgnZmxhZ3NbXScsUExVR0lOX0hBU19QUkVGUywoKCRm bGFncyAmIFBMVUdJTl9IQVNfUFJFRlMpPzE6MCkpIC4gJzxsYWJlbD4nLmllZF9wbHVnaW5f Z1R4dCgnZmxhZ19oYXNfcHJlZnMnKS4nPC9sYWJlbD4mbmJzcDsmbmJzcDsnDQoJCS5jaGVj a2JveCgnZmxhZ3NbXScsUExVR0lOX0xJRkVDWUNMRV9OT1RJRlksKCgkZmxhZ3MgJiBQTFVH SU5fTElGRUNZQ0xFX05PVElGWSk/MTowKSkgLiAnPGxhYmVsPicuaWVkX3BsdWdpbl9nVHh0 KCdmbGFnX2xpZmVjeWNsZV9ub3RpZnknKS4nPC9sYWJlbD4mbmJzcDsmbmJzcDsnOw0KLy8J CS5jaGVja2JveCgnZmxhZ3NbXScsMHgwMDA0LCgoJGZsYWdzICYgMHgwMDA0KT8xOjApKSAu ICc8bGFiZWw+U3VtbWF0IGVsc2U8L2xhYmVsPiZuYnNwOyZuYnNwOyc7DQoNCgkkc3ViID0g ZklucHV0KCdzdWJtaXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcsJycsJycsJycsJycs ICdpZWRfZWRpdFNhdmUnKTsNCglyZXR1cm4gZm9ybShzdGFydFRhYmxlKCdlZGl0JykNCgku IHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzdWIgLiAkdmhlbHBsaW5rZnVsbCkp DQoJLiB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRuZXduYW1lIC4gJHBsdWdz dGF0dXMgLiAoIChpc3NldCgkZmlsZW5hbWUpKSA/IHRhZygnJiMxNjA7JiMxNjA7KCcuJGZp bGVuYW1lLicpJywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheTsiJykuaElucHV0KCdmaWxl bmFtZScsJGZpbGVuYW1lKSA6ICcnICkgKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1 Z2luX2dUeHQoJ3BsdWdpbl9jb2RlJykgKSAuIHRkKCRjb2RlKSkNCgkuIHRyKCBmTGFiZWxD ZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ3R5cGUnKSApIC4gdGQoJHBsdWd0eXBlKSkNCgkuIHRy KCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2ZsYWdzJykgKSAuIHRkKCRmbGFnbGlz dCkpDQoJLiB0ciggZkxhYmVsQ2VsbCggaWVkX3BsdWdpbl9nVHh0KCdsb2FkX29yZGVyJykg KSAuIHRkKCRwbHVnb3JkZXIuJyYjMTYwOyYjMTYwOycuaWVkX3BsdWdpbl9nVHh0KCdsb2Fk X29yZGVyX2hlbHAnKSkpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ3ZlcnNpb24nICkgLiB0ZCgk dmVyc2lvbikpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ2F1dGhvcicgKSAuIHRkKCRhdXRob3Ip KQ0KCS4gdHIoIGZMYWJlbENlbGwoICd3ZWJzaXRlJyApIC4gdGQoJGF1dGhvcl91cmkpKQ0K CS4gdHIoIGZMYWJlbENlbGwoICdkZXNjcmlwdGlvbicgKSAuIHRkKCRkZXNjcmlwdGlvbikp DQoJLiB0ciggdGRhKGdUeHQoJ3BsdWdpbl9oZWxwJyksICcgY2xhc3M9Im5vbGluZSIgc3R5 bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyInKSAuIHRk KCRoZWxwKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAnY3NzJyApIC4gdGQoJGNzcykpDQoJLiB0 ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViKSkNCg0KCS4gdHIoIHRkY3MoJzxo cj4nLDIpKQ0KCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoaWVkX3BsdWdpbl9n VHh0KCd1dGlsaXRpZXMnKS4nOicpKQ0KDQoJLiB0ciggZkxhYmVsQ2VsbCggaWVkX3BsdWdp bl9nVHh0KCdjb2RlX2Rpc3QnKSApIC4gdGQoJGRpc3RyaWJ1dGlvbikpDQoJLiB0ciggZkxh YmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc2xpbmspKQ0KCS4gdHIoIGZMYWJlbENlbGwoJyZu YnNwOycpIC4gdGQoJHN6aXBsaW5rKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAu IHRkKCRzcGhwbGluaykpDQoJLiBlbmRUYWJsZSgpDQoJLiBzSW5wdXQoJ2llZF9wbHVnaW5f c2F2ZScpDQoJLiBlSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQ0KCS4gaElucHV0KCdu YW1lJywkbmFtZSksICcnLCAnJywgJ3Bvc3QnLCAnaWVkX2VkaXRGb3JtJykJLiA8PDxFT0YN CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmpRdWVyeS5mbi5yZXNpemVoYW5k bGUgPSBmdW5jdGlvbihjdXJoKSB7DQoJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsN CgkJdmFyIG1lID0galF1ZXJ5KHRoaXMpOw0KCQltZS5hbmltYXRlKHtoZWlnaHQ6IGN1cmh9 KTsNCgkJbWUuYWZ0ZXIoDQoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6ZWhhbmRsZSI+ LS0tICsgLS0tPC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgew0KCQkJ CXZhciBoID0gbWUuaGVpZ2h0KCk7DQoJCQkJdmFyIHkgPSBlLmNsaWVudFk7DQoJCQkJdmFy IG1vdmVIYW5kbGVyID0gZnVuY3Rpb24oZSkgew0KCQkJCQltZS5oZWlnaHQoTWF0aC5tYXgo MjAsIGUuY2xpZW50WSArIGggLSB5KSk7DQoJCQkJfTsNCgkJCQl2YXIgdXBIYW5kbGVyID0g ZnVuY3Rpb24oZSkgew0KCQkJCQlqUXVlcnkoImh0bWwiKS51bmJpbmQoIm1vdXNlbW92ZSIs bW92ZUhhbmRsZXIpLnVuYmluZCgibW91c2V1cCIsdXBIYW5kbGVyKTsNCgkJCQkJbmV3aCA9 IG1lLmhlaWdodCgpOw0KCQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBu ZXdoLCAzMCk7DQoJCQkJfTsNCgkJCQlqUXVlcnkoImh0bWwiKS5iaW5kKCJtb3VzZW1vdmUi LCBtb3ZlSGFuZGxlcikuYmluZCgibW91c2V1cCIsIHVwSGFuZGxlcik7DQoJCQl9KQ0KCQkp Ow0KCX0pOw0KfQ0KalF1ZXJ5LmZuLnNlbGVjdFJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIGVu ZCkgew0KCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7DQoJCWlmKHRoaXMuc2V0U2Vs ZWN0aW9uUmFuZ2UpIHsNCgkJCXRoaXMuZm9jdXMoKTsNCgkJCXRoaXMuc2V0U2VsZWN0aW9u UmFuZ2Uoc3RhcnQsIGVuZCk7DQoJCX0gZWxzZSBpZih0aGlzLmNyZWF0ZVRleHRSYW5nZSkg ew0KCQkJdmFyIHJhbmdlID0gdGhpcy5jcmVhdGVUZXh0UmFuZ2UoKTsNCgkJCXJhbmdlLmNv bGxhcHNlKHRydWUpOw0KCQkJcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKTsNCgkJ CXJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpOw0KCQkJcmFuZ2Uuc2VsZWN0 KCk7DQoJCX0NCgl9KTsNCn07DQpmdW5jdGlvbiBpZWRfZ29Ub0xpbmUoKSB7DQoJdmFyIGxp bmUgPSBwYXJzZUludChqUXVlcnkoJyNpZWRfanVtcFRvTGluZScpLnZhbCgpKTsNCgl2YXIg aWVkX2VkID0galF1ZXJ5KCcjcGx1Z2luX2VkaXRvcicpOw0KCXZhciBpZWRfZWRkID0gZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsdWdpbl9lZGl0b3InKTsgLy8gRHVubm8gaG93IHRv IGNvbnZlcnQgYSBqUXVlcnkgb2JqIGJhY2sgdG8gRE9NDQoJdmFyIGxpbmVzID0gaWVkX2Vk LnZhbCgpLnNwbGl0KCdcXG4nKTsNCgl2YXIgbnVtY2hhcnMgPSAwOw0KCXZhciBjb3VudCA9 IDA7DQoJdmFyIGZpbmRzdHIgPSAnJzsNCglqUXVlcnkuZWFjaChsaW5lcywgZnVuY3Rpb24o KSB7DQoJCWNvdW50Kys7DQoJCWlmIChjb3VudCA+PSBsaW5lKSB7DQoJCQlmaW5kc3RyID0g dGhpczsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQludW1jaGFycyArPSAodGhpcy5sZW5n dGgpKzI7IC8vIERvbid0IGFzay4gKzIgaXMgc29tZXRoaW5nIHRvIGRvIHdpdGggbGluZSBl bmRpbmdzIEkgdGhpbmsNCgl9KTsNCg0KCS8vIEZpbmQgdGhlIGxpbmUgY29udGFpbmluZyB0 aGUgc3RyaW5nIHdlIGZvdW5kLiBTdGFydCBjb3VudGluZyBmcm9tIHRoZSBsaW5lIGJlZm9y ZS4NCgkvLyBUaG9zZSBwZXNreSBsaW5lIGVuZGluZ3MgY29tZSBpbnRvIHBsYXkgYWdhaW4g c28gd2UgbmVlZCB0byBzdWJ0cmFjdCB0aGUgbnVtYmVyDQoJLy8gb2YgbGluZXMgZm91bmQg ZnJvbSB0aGUgc3RhcnQgY2hhcmFjdGVyIHBvc2l0aW9uICpzaHJ1ZyoNCglzdGFydCA9IGll ZF9lZC52YWwoKS5pbmRleE9mKGZpbmRzdHIsIG51bWNoYXJzLWNvdW50KTsNCglzdGFydCA9 IChmaW5kc3RyID09ICcnKSA/IHN0YXJ0KzEgOiBzdGFydDsNCgllbmQgPSBzdGFydCtmaW5k c3RyLmxlbmd0aDsNCglpZWRfZWQuc2VsZWN0UmFuZ2UoZW5kLTEsIGVuZCk7DQoNCglpZihk b2N1bWVudC5jcmVhdGVFdmVudCkgew0KCQl2YXIgaWVkX3RoZUNvZGUgPSBpZWRfZWQudmFs KCkuY2hhckNvZGVBdChlbmQtMSk7DQoJCWlmKCB3aW5kb3cuS2V5RXZlbnQgKSB7DQoJCQl2 YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnS2V5RXZlbnRzJyk7DQoJCQlldi5pbml0 S2V5RXZlbnQoJ2tleXByZXNzJywgZmFsc2UsIHRydWUsIHdpbmRvdywgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIDAsIGllZF90aGVDb2RlKTsNCgkJfSBlbHNlIHsNCgkJCXZhciBl diA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdVSUV2ZW50cycpOw0KCQkJZXYuaW5pdFVJRXZl bnQoJ2tleXByZXNzJywgZmFsc2UsIHRydWUsIHdpbmRvdywgMCk7DQoJCQlldi5rZXlDb2Rl ID0gaWVkX3RoZUNvZGU7DQoJCX0NCgkJaWVkX2VkZC5kaXNwYXRjaEV2ZW50KGV2KTsgLy8g Y2F1c2Ugc2Nyb2xsIHRvIGN1cnNvciBieSByZXBsYWNpbmcgbGFzdCBjaGFyIHdpdGggaXRz ZWxmDQoJfQ0KCWllZF9lZC5zZWxlY3RSYW5nZShzdGFydCwgZW5kKTsNCglyZXR1cm4gZmFs c2U7DQp9DQoNCmpRdWVyeShmdW5jdGlvbigpIHsNCgljdXJoID0gZ2V0Q29va2llKCdpZWRf cGx1Z2luX2VkaGVpZ2h0Jyk7DQoJY3VyaCA9IChjdXJoID09IG51bGwpID8gJzQ4MCcgOiBj dXJoOw0KCWpRdWVyeSgiI3BsdWdpbl9lZGl0b3IiKS5yZXNpemVoYW5kbGUocGFyc2VJbnQo Y3VyaCkpOw0KCWpRdWVyeSgndGV4dGFyZWFbbWF4bGVuZ3RoXScpLmtleXVwKGZ1bmN0aW9u KCl7DQoJCXZhciBtYXggPSBwYXJzZUludChqUXVlcnkodGhpcykuYXR0cignbWF4bGVuZ3Ro JykpOw0KCQlpZihqUXVlcnkodGhpcykudmFsKCkubGVuZ3RoID4gbWF4KXsNCgkJCWpRdWVy eSh0aGlzKS52YWwoalF1ZXJ5KHRoaXMpLnZhbCgpLnN1YnN0cigwLCBqUXVlcnkodGhpcyku YXR0cignbWF4bGVuZ3RoJykpKTsNCgkJfQ0KCQlqUXVlcnkodGhpcykucGFyZW50KCkuZmlu ZCgnLmNoYXJzUmVtYWluJykuaHRtbCgnQ2hhcnMgcmVtYWluaW5nOiAnKyAobWF4IC0galF1 ZXJ5KHRoaXMpLnZhbCgpLmxlbmd0aCkpOw0KCX0pOw0KCWpRdWVyeSgndGV4dGFyZWFbbWF4 bGVuZ3RoXScpLmtleXVwKCk7DQoJalF1ZXJ5KCcjaWVkX2p1bXBUb0xpbmUnKS5rZXlkb3du KGZ1bmN0aW9uKGUpIHsNCgkJdmFyIGNvZGUgPSAoZS5rZXlDb2RlID8gZS5rZXlDb2RlIDog ZS53aGljaCk7DQoJCWlmKGNvZGUgPT0gMTMpIHsNCgkJCWUucHJldmVudERlZmF1bHQoKTsN CgkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7DQoJCQlpZWRfZ29Ub0xpbmUoKTsNCgkJCXJldHVy biBmYWxzZTsNCgkJfQ0KCX0pOw0KfSk7DQo8L3NjcmlwdD4NCjxzdHlsZSB0eXBlPSJ0ZXh0 L2NzcyI+DQoucmVzaXplaGFuZGxlIHsNCgljdXJzb3I6cy1yZXNpemU7DQoJZmxvYXQ6bGVm dDsNCgl0ZXh0LWFsaWduOmNlbnRlcjsNCglmb250LXNpemU6MWVtOw0KCXdpZHRoOjgyJTsN CglwYWRkaW5nOjJweCAwIDZweDsNCn0NCi5jaGFyc1JlbWFpbiB7DQoJdGV4dC1hbGlnbjpy aWdodDsNCgljb2xvcjpncmF5Ow0KfQ0KPC9zdHlsZT4NCkVPRjsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlKCkgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9n bG9iYWxzLCAkcHJlZnM7DQoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCdu ZXduYW1lJywnZmlsZW5hbWUnLCdjb2RlJywnYXV0aG9yJywnYXV0aG9yX3VyaScsJ3ZlcnNp b24nLCdkZXNjcmlwdGlvbicsJ2hlbHAnLCdjc3MnLCdzdGF0dXMnLCd0eXBlJywnbG9hZF9v cmRlcicsJ3JlbmFtZV9maWxlJywncmVzdG9yZV9wb2ludCcpKSkpOw0KCSRmbGFncyA9IGdw cygnZmxhZ3MnKTsNCg0KCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVn aW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQn XSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsNCgkkZXh0cmFNc2cgPSAkbmV3 ZmlsZW5hbWUgPSAkbXNnMSA9ICRtc2cyID0gJyc7DQoJJG5ld25hbWUgPSB0cmltKCRuZXdu YW1lKTsNCglpZiAoJGZsYWdzKSB7DQoJCSRmbGFnb3V0ID0gMDsNCgkJZm9yZWFjaCAoJGZs YWdzIGFzICRmbGFnKSB7DQoJCQkkZmxhZ291dCB8PSAkZmxhZzsNCgkJfQ0KCQkkZmxhZ3Mg PSAkZmxhZ291dDsNCgl9DQoNCglpZiAoZW1wdHkoJG5ld25hbWUpKSB7DQoJCSRtc2cxID0g aWVkX3BsdWdpbl9nVHh0KCduYW1lX2ZpcnN0Jyk7DQoJfSBlbHNlIHsNCgkJaWYgKGVtcHR5 KCRmaWxlbmFtZSkpIHsNCgkJCSRob3V0ID0gYXJyYXkoKTsNCgkJCSRob3V0WzBdID0gJGhl bHA7DQoJCQlpZiAoJGNzcykgeyAkaG91dFsxXSA9IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4k ZW5kX2NzczsgfQ0KCQkJc2FmZV91cGRhdGUoDQoJCQkJJ3R4cF9wbHVnaW4nLA0KCQkJCSJu YW1lPSciLiRuZXduYW1lLiInLA0KCQkJCXN0YXR1cyA9ICIuaW50dmFsKCRzdGF0dXMpLiIs DQoJCQkJdHlwZSA9ICIuaW50dmFsKCR0eXBlKS4iLA0KCQkJCWF1dGhvciA9ICciLiRhdXRo b3IuIicsDQoJCQkJYXV0aG9yX3VyaSA9ICciLiRhdXRob3JfdXJpLiInLA0KCQkJCXZlcnNp b24gPSAnIi4kdmVyc2lvbi4iJywNCgkJCQlkZXNjcmlwdGlvbiA9ICciLiRkZXNjcmlwdGlv bi4iJywNCgkJCQloZWxwID0gJyIuam9pbignJywkaG91dCkuIicsDQoJCQkJY29kZSA9ICci LiRjb2RlLiInLA0KCQkJCWZsYWdzID0gIi5pbnR2YWwoJGZsYWdzKS4iLA0KCQkJCSIuKCgk cmVzdG9yZV9wb2ludCA9PSAxKT8gImNvZGVfcmVzdG9yZSA9ICciLiRjb2RlLiInLCIgOiAn JykuIg0KCQkJCWxvYWRfb3JkZXIgPSAiLiRsb2FkX29yZGVyLA0KCQkJCSJuYW1lID0gJyIu JG5hbWUuIiciKTsNCgkJCSRtc2cxID0gZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXkoJ3tu YW1lfScgPT4gJG5ld25hbWUpKTsNCgkJfSBlbHNlIHsNCgkJCSRkaXIgPSAkcHJlZnNbJ3Bs dWdpbl9jYWNoZV9kaXInXS5EUzsNCgkJCWlmIChmaWxlX2V4aXN0cygkZGlyLiRmaWxlbmFt ZSkpIHsNCgkJCQkkZmlsZWNvbnRlbnQgPSBmaWxlKCRkaXIuJGZpbGVuYW1lKTsNCgkJCX0g ZWxzZSB7DQoJCQkJaWYgKGVtcHR5KCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddKSkgew0K CQkJCQkkZmlsZWNvbnRlbnQgPSAnJzsNCgkJCQkJJG1zZzIgPSBpZWRfcGx1Z2luX2dUeHQo J2NhY2hlX25vdF9zZXQnKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkb3BvcmRlciA9IChpc3Nl dCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pICYmIGlzX251bWVyaWMoJHBy ZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5f b3V0cHV0X29yZGVyJ10gOiAwOw0KCQkJCQkkaGVscGNodW5rID0gaWVkX3BsdWdpbl9idWls ZF90ZW1wbGF0ZSgnaGVscCcsIGFycmF5KCRoZWxwLCAnICcpKTsgLy8gVXNlIGEgc3BhY2Ug dG8gZm9yY2UgYSBDU1MgaHVuayBpbiB0aGUgZmlsZQ0KCQkJCQkkY29kZWNodW5rID0gaWVk X3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgnY29kZScsICRjb2RlKTsNCgkJCQkJJGZpbGVjb250 ZW50ID0gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgicHJlYW1ibGUiKQ0KCQkJCQkJLmll ZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoIm5hbWUiLCAkbmV3bmFtZSkNCgkJCQkJCS5pZWRf cGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJodG1sX2hlbHAiKQ0KCQkJCQkJLmllZF9wbHVnaW5f YnVpbGRfdGVtcGxhdGUoInZlcnNpb24iLCAkdmVyc2lvbikNCgkJCQkJCS5pZWRfcGx1Z2lu X2J1aWxkX3RlbXBsYXRlKCJhdXRob3IiLCAkYXV0aG9yKQ0KCQkJCQkJLmllZF9wbHVnaW5f YnVpbGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAkYXV0aG9yX3VyaSkNCgkJCQkJCS5pZWRf cGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJkZXNjcmlwdGlvbiIsICRkZXNjcmlwdGlvbikNCgkJ CQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJsb2FkX29yZGVyIiwgJGxvYWRfb3Jk ZXIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidHlwZSIsICR0eXBlKQ0K CQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImZsYWdzIiwgJGZsYWdzKQ0KCQkJ CQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImluY2x1ZGUiKQ0KCQkJCQkJLigoJG9w b3JkZXIgPT0gMCkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuaykNCgkJCQkJCS4oKCRvcG9y ZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspDQoJCQkJCQkuaWVkX3BsdWdp bl9idWlsZF90ZW1wbGF0ZSgicG9zdGFtYmxlIik7DQoJCQkJCSRtc2cxID0gaWVkX3BsdWdp bl9nVHh0KCdlZGl0X25ldycpOw0KCQkJCX0NCgkJCX0NCg0KCQkJJGZpbGVjb250ZW50ID0g aWVkX3BsdWdpbl9tYWtlX2FycmF5KCRmaWxlY29udGVudCk7DQoJCQkkbWV0YXZhcnMgPSBh cnJheSgibmFtZSIgPT4gIiRuZXduYW1lIiwNCgkJCQkJCQkJCSJ2ZXJzaW9uIiA9PiAiJHZl cnNpb24iLA0KCQkJCQkJCQkJImF1dGhvciIgPT4gIiRhdXRob3IiLA0KCQkJCQkJCQkJImF1 dGhvcl91cmkiID0+ICIkYXV0aG9yX3VyaSIsDQoJCQkJCQkJCQkiZGVzY3JpcHRpb24iID0+ ICIkZGVzY3JpcHRpb24iLA0KCQkJCQkJCQkJInR5cGUiID0+ICIkdHlwZSIsDQoJCQkJCQkJ CQkiZmxhZ3MiID0+ICIkZmxhZ3MiLA0KCQkJCQkJCQkJIm9yZGVyIiA9PiAiJGxvYWRfb3Jk ZXIiLA0KCQkJCQkJCSk7DQoJCQkkaHVua3ZhcnMgPSBhcnJheSgiQ09ERSIgPT4gZG9TdHJp cChzdHJfcmVwbGFjZSgnXHJcbicsJw0KJywkY29kZSkpLCAvLyBuZXdsaW5lIHdvcmthcm91 bmQNCgkJCQkJCSJIRUxQIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRo ZWxwKSksDQoJCQkJCQkiQ1NTIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQon LCRjc3MpKSwNCgkJCQkJCQkpOw0KCQkJZm9yZWFjaCAoJG1ldGF2YXJzIGFzICR2YXJuYW1l ID0+ICR2YWx1ZSkgew0KCQkJCWZvcigkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmaWxlY29u dGVudCk7ICRpZHgrKykgew0KCQkJCQlpZiAoc3RycG9zKCRmaWxlY29udGVudFskaWR4XSwg JyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10nKSA9PT0gMCkgew0KCQkJCQkJJGZpbGVjb250 ZW50WyRpZHhdID0gJyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10gPSAnLmRvUXVvdGUoJHZh bHVlKS4nOyc7DQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWZvcmVh Y2ggKCRodW5rdmFycyBhcyAkdmFybmFtZSA9PiAkaHVuaykgew0KCQkJCWxpc3QgKCRzdGFy dF9kZWxpbSwgJGVuZF9kZWxpbSkgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkdmFybmFt ZSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2Jh bHNbJ2RsbV9lbmQnXSk7DQoJCQkJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxp bSwgJGZpbGVjb250ZW50KSArIDE7DQoJCQkJJGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2Rl bGltLCAkZmlsZWNvbnRlbnQpOw0KCQkJCWlmIChpc19udW1lcmljKCRzdGFydCkgJiYgaXNf bnVtZXJpYygkZW5kKSAmJiAkZW5kID49ICRzdGFydCkgew0KCQkJCQlhcnJheV9zcGxpY2Uo JGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7DQoJCQkJfQ0KCQkJ fQ0KCQkJJGZpbGVjb250ZW50ID0gaW1wbG9kZSgiXG4iLCAkZmlsZWNvbnRlbnQpOw0KDQoJ CQlpZiAoJGZpbGVjb250ZW50KSB7DQoJCQkJJGZoID0gZm9wZW4oJGRpci4kZmlsZW5hbWUs ICd3KycpOw0KCQkJCWZ3cml0ZSgkZmgsICRmaWxlY29udGVudCk7DQoJCQkJZmNsb3NlKCRm aCk7DQoJCQl9DQoJCQkkbXNnMSA9IChlbXB0eSgkbXNnMSkpID8gZ1R4dCgncGx1Z2luX3Nh dmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld25hbWUpKSA6ICRtc2cxOw0KDQoJCQkvLyBN YWtlIG5ldyBmaWxlIGlmIHJlcXVpcmVkDQoJCQlpZiAoJHJlbmFtZV9maWxlID09IDEpIHsN CgkJCQkkZm5hbWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmV3bmFtZSwgJHZlcnNpb24p Ow0KCQkJCSRuZXdmaWxlbmFtZSA9ICRmbmFtZXNbMl07DQoJCQkJJHJlcyA9IHJlbmFtZSgk ZGlyLiRmaWxlbmFtZSwgJGRpci4kbmV3ZmlsZW5hbWUpOw0KCQkJCSRleHRyYU1zZyA9ICgk cmVzKSA/IGllZF9wbHVnaW5fZ1R4dCgncmVuYW1lZCcpIDogaWVkX3BsdWdpbl9nVHh0KCdy ZW5hbWVfZmFpbGVkJyk7DQoJCQl9DQoJCX0NCgl9DQoJaWYgKCRtc2cyKSB7DQoJCWllZF9w bHVnaW5fbGlzdCgkbXNnMik7DQoJfSBlbHNlIHsNCgkJLy8gQ2hlY2sgdGhlIHBsdWdpbiB0 eXBlIG1hdGNoZXMgdGhlIGNvZGUgdXNlZA0KCQkkZXh0cmFNc2cgLj0gKGllZF9wbHVnaW5f YWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkgPyAnJyA6IHN0cm9uZyhpZWRfcGx1Z2luX2dU eHQoJ2NoZWNrX3R5cGUnKSk7DQoJCSRtZXNzYWdlID0gJG1zZzEuYnIuJGV4dHJhTXNnOw0K CQlpZWRfcGx1Z2luX2VkaXQoJG1lc3NhZ2UsICRuZXdmaWxlbmFtZSk7DQoJfQ0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2NyZWF0ZV9uZXcoKSB7DQoJZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnKSkpKTsNCgkkZm5hbWUgPSAnJzsNCglpZiAo JG5hbWU9PScnKSB7DQoJCWllZF9wbHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ25hbWVf Zmlyc3QnKSk7DQoJCXJldHVybjsNCgl9DQoJaWYgKHN0cnBvcygkbmFtZSwgIi5waHAiKSAh PT0gZmFsc2UpIHsNCgkJJGZuYW1lID0gJG5hbWU7DQoJCSRuYW1lID0gYmFzZW5hbWUoJG5h bWUsICIucGhwIik7DQoJfQ0KCSRleGlzdHMgPSBmZXRjaCgnbmFtZScsJ3R4cF9wbHVnaW4n LCduYW1lJywkbmFtZSk7DQoJaWYgKCEkZXhpc3RzKSB7DQoJCWlmICgkZm5hbWUpIHsNCgkJ CS8vIFB1dCBwbHVnaW4gaW4gY2FjaGUgZGlyIGJ5IGZha2luZyBhIFBPU1Qgc3VibWlzc2lv biBhbmQgc2F2aW5nDQoJCQkkX1BPU1RbJ2ZpbGVuYW1lJ10gPSAkZm5hbWU7DQoJCQkkX1BP U1RbJ25ld25hbWUnXSA9ICRuYW1lOw0KCQkJJF9QT1NUWydzdGF0dXMnXSA9IDA7DQoJCQkk X1BPU1RbJ3R5cGUnXSA9IDA7DQoJCQkkX1BPU1RbJ3ZlcnNpb24nXSA9ICcwLjEnOw0KCQkJ JF9QT1NUWydsb2FkX29yZGVyJ10gPSA1Ow0KCQkJJF9QT1NUWydmbGFncyddID0gMDsNCgkJ CWllZF9wbHVnaW5fc2F2ZSgpOw0KCQl9IGVsc2Ugew0KCQkJc2FmZV9pbnNlcnQoInR4cF9w bHVnaW4iLCAiDQoJCQkJbmFtZT0nJG5hbWUnLA0KCQkJCXN0YXR1cz0wLA0KCQkJCXR5cGU9 MCwNCgkJCQl2ZXJzaW9uPScwLjEnLA0KCQkJCWxvYWRfb3JkZXI9NSwNCgkJCQlmbGFncz0w LA0KCQkJCWRlc2NyaXB0aW9uPScnLA0KCQkJCWhlbHA9JycsDQoJCQkJY29kZT0nJywNCgkJ CQljb2RlX3Jlc3RvcmU9JycNCgkJCSIpOw0KCQkJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdp bnMnKSwgaWVkX3BsdWdpbl9nVHh0KCdlZGl0X25ldycpKTsNCgkJCWVjaG8gaWVkX3BsdWdp bl9lZGl0X2Zvcm0oJG5hbWUpOw0KCQl9DQoJfSBlbHNlIHsNCgkJaWVkX3BsdWdpbl9saXN0 KGdUeHQoJ3BsdWdpbicpLicgPHN0cm9uZz4nLiRuYW1lLic8L3N0cm9uZz4gJy5nVHh0KCdh bHJlYWR5X2V4aXN0cycpKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9w bHVnaW5fc2F2ZV9hc19maWxlKCkgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX2ds b2JhbHM7DQoJaWYgKGdwcygnbmFtZScpKSB7DQoJCSRuYW1lID0gZ3BzKCduYW1lJyk7DQoJ CSRycyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJz aW9uLCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyLCBmbGFncyIsICJ0eHBfcGx1Z2lu IiwgIm5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkJbGlzdCgkY3NzLCRo ZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIs ICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0gZWxzZWlmIChncHMo J2ZpbGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNb J3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0KCQlleHRyYWN0KCRw bHVnaW4pOw0KCX0NCg0KCSR6aXAgPSBncHMoJ3ppcCcpOw0KCWlmIChncHMoJ3RyaW0nKT09 MSkgew0KCQkkY29kZT1leHBsb2RlKCJcclxuIiwkY29kZSk7DQoJCSRjb2RlPWFycmF5X21h cCgndHJpbScsJGNvZGUpOw0KCQkkY29kZT1pbXBsb2RlKCJcclxuIiwkY29kZSk7DQoJfQ0K DQoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtl cnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdp bl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1l KCRuYW1lLCAkdmVyc2lvbik7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFp biIpOw0KCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5h bWU9JyAuICgoJHppcCkgPyAkZm5hbWVzWzFdIDogJGZuYW1lc1swXSkpOw0KDQoJJHR5cGVz ID0gYXJyYXkoICdDbGllbnQgc2lkZScgLCAnQWRtaW4vQ2xpZW50IHNpZGUnICwgJ0xpYnJh cnknICwgJ0FkbWluIHNpZGUnKTsNCgkkcGx1Z2luWyduYW1lJ10gPSAkbmFtZTsNCgkkcGx1 Z2luWydhdXRob3InXSA9ICRhdXRob3I7DQoJJHBsdWdpblsnYXV0aG9yX3VyaSddID0gJGF1 dGhvcl91cmk7DQoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNpb247DQoJJHBsdWdpblsn ZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsNCgkkcGx1Z2luWydjb2RlJ10gPSAkY29k ZTsNCgkkcGx1Z2luWyd0eXBlJ10gPSAkdHlwZTsNCgkkcGx1Z2luWydvcmRlciddID0gJGxv YWRfb3JkZXI7DQoJJHBsdWdpblsnZmxhZ3MnXSA9ICRmbGFnczsNCi8vCSRwbHVnaW5bJ2Fs bG93X2h0bWxfaGVscCddID0gdHJ1ZTsNCi8vCSRwbHVnaW5bJ2hlbHBfcmF3J10gPSAkaGVs cC4kc3RhcnRfY3NzLiRjc3MuJGVuZF9jc3M7DQoJJHBsdWdpblsnaGVscCddID0gaWVkX3Bs dWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3Mp Ow0KCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsNCg0KCWVjaG8g JyMgTmFtZTogJy4kbmFtZS4nIHYnLiR2ZXJzaW9uLicgJy4oKCR6aXApID8gIihjb21wcmVz c2VkKSIgOiAiIikuJw0KIyBUeXBlOiAnLiR0eXBlc1skdHlwZV0uJyBwbHVnaW4NCiMgJy4k ZGVzY3JpcHRpb24uJw0KIyBBdXRob3I6ICcuJGF1dGhvci4nDQojIFVSTDogJy4kYXV0aG9y X3VyaS4nDQojIFJlY29tbWVuZGVkIGxvYWQgb3JkZXI6ICcuJGxvYWRfb3JkZXIuJw0KDQoj IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLg0KIyBUaGlzIGlzIGEgcGx1Z2luIGZvciBUZXh0cGF0dGVybiAt IGh0dHA6Ly90ZXh0cGF0dGVybi5jb20vDQojIFRvIGluc3RhbGw6IHRleHRwYXR0ZXJuID4g YWRtaW4gPiBwbHVnaW5zDQojIFBhc3RlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbnRvIHRoZSBc J0luc3RhbGwgcGx1Z2luXCcgYm94Og0KIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KJy4oKCR6aXAp ID8gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShnemVuY29kZShzZXJpYWxpemUoJHBsdWdp bikpKSwgNzIpIDogY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdp bikpLCA3MikpOw0KDQoJZGllKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9w bHVnaW5fc2F2ZV9hc19waHBfZmlsZSgpIHsNCglnbG9iYWwgJHByZWZzOw0KCWlmIChncHMo J25hbWUnKSkgew0KCQkkbmFtZSA9IGdwcygnbmFtZScpOw0KCQkkcnMgPSBzYWZlX3Jvdygi ZGVzY3JpcHRpb24sIGF1dGhvciwgYXV0aG9yX3VyaSwgdmVyc2lvbiwgY29kZSwgaGVscCwg dHlwZSwgbG9hZF9vcmRlciwgZmxhZ3MiLCAidHhwX3BsdWdpbiIsICJuYW1lPSckbmFtZSci KTsNCgkJZXh0cmFjdCgkcnMpOw0KDQoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8g aWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVl KSA6IGFycmF5KCcnLCRoZWxwKTsNCgl9IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7DQoJ CSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJHByZWZzWydwbHVnaW5fY2FjaGVfZGly J10uRFMuZ3BzKCdmaWxlbmFtZScpKTsNCgkJZXh0cmFjdCgkcGx1Z2luKTsNCgl9DQoNCgkk b3BvcmRlciA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pICYm IGlzX251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSkgPyAkcHJl ZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10gOiAwOw0KCSRmbmFtZXMgPSBpZWRfcGx1 Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7DQoNCgloZWFkZXIoIkNvbnRlbnQtdHlw ZTogdGV4dC9waHAiKTsNCgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1l bnQ7IGZpbGVuYW1lPScgLiRmbmFtZXNbMl0pOw0KDQoJJGhlbHBjaHVuayA9IGllZF9wbHVn aW5fYnVpbGRfdGVtcGxhdGUoJ2hlbHAnLCBhcnJheSgkaGVscCwgJGNzcykpOw0KCSRjb2Rl Y2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdjb2RlJywgc3RyX3JlcGxhY2Uo IlxyXG4iLCJcbiIsJGNvZGUpKTsNCg0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0 ZSgicHJlYW1ibGUiKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoIm5hbWUi LCAkbmFtZSk7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJodG1sX2hlbHAi KTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoInZlcnNpb24iLCAkdmVyc2lv bik7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJhdXRob3IiLCAkYXV0aG9y KTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhvcl91cmkiLCAkYXV0 aG9yX3VyaSk7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJkZXNjcmlwdGlv biIsICRkZXNjcmlwdGlvbik7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJs b2FkX29yZGVyIiwgJGxvYWRfb3JkZXIpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1w bGF0ZSgidHlwZSIsICR0eXBlKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUo ImZsYWdzIiwgJGZsYWdzKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImlu Y2x1ZGUiKTsNCgllY2hvICgoJG9wb3JkZXIgPT0gMCkgPyAkY29kZWNodW5rIDogJGhlbHBj aHVuayk7DQoJZWNobyAoKCRvcG9yZGVyID09IDEpID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1 bmspOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgicG9zdGFtYmxlIik7DQoN CglkaWUoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9idWlsZF90 ZW1wbGF0ZSgkcHJ0LCAkdmFsPScnKSB7DQoJJGNzcyA9ICRoZWxwID0gJyc7DQoJaWYgKGlz X2FycmF5KCR2YWwpKSB7DQoJCSRoZWxwID0gJHZhbFswXTsNCgkJJGNzcyA9IGlzc2V0KCR2 YWxbMV0pID8gJHZhbFsxXSA6ICcnOw0KCQkkdmFsID0gJyc7DQoJfQ0KCSR0ZW1wbGF0ZSA9 IGFycmF5KA0KCQkicHJlYW1ibGUiID0+ICc8P3BocCcubi5uDQoJCQkJCQkuJy8vIFRoaXMg aXMgYSBQTFVHSU4gVEVNUExBVEUuJy5uLm4NCgkJCQkJCS4nLy8gQ29weSB0aGlzIGZpbGUg dG8gYSBuZXcgbmFtZSBsaWtlIGFiY19teXBsdWdpbi5waHAuICBFZGl0IHRoZSBjb2RlLCB0 aGVuJy5uDQoJCQkJCQkuJy8vIHJ1biB0aGlzIGZpbGUgYXQgdGhlIGNvbW1hbmQgbGluZSB0 byBwcm9kdWNlIGEgcGx1Z2luIGZvciBkaXN0cmlidXRpb246Jy5uDQoJCQkJCQkuJy8vICQg cGhwIGFiY19teXBsdWdpbi5waHAgPiBhYmNfbXlwbHVnaW4tMC4xLnR4dCcubi5uLA0KCQki bmFtZSIgPT4gJy8vIFBsdWdpbiBuYW1lIGlzIG9wdGlvbmFsLiAgSWYgdW5zZXQsIGl0IHdp bGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQnLm4NCgkJCQkJCS4nLy8gZmlsZSBu YW1lLiBQbHVnaW4gbmFtZXMgc2hvdWxkIHN0YXJ0IHdpdGggYSB0aHJlZSBsZXR0ZXIgcHJl Zml4IHdoaWNoIGlzJy5uDQoJCQkJCQkuJy8vIHVuaXF1ZSBhbmQgcmVzZXJ2ZWQgZm9yIGVh Y2ggcGx1Z2luIGF1dGhvciAoImFiYyIgaXMganVzdCBhbiBleGFtcGxlKS4nLm4NCgkJCQkJ CS4nLy8gVW5jb21tZW50IGFuZCBlZGl0IHRoaXMgbGluZSB0byBvdmVycmlkZTonLm4NCgkJ CQkJCS4nJHBsdWdpbltcJ25hbWVcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwNCgkJ Imh0bWxfaGVscCIgPT4gJy8vIEFsbG93IHJhdyBIVE1MIGhlbHAsIGFzIG9wcG9zZWQgdG8g VGV4dGlsZS4nLm4NCgkJCQkJCS4nLy8gMCA9IFBsdWdpbiBoZWxwIGlzIGluIFRleHRpbGUg Zm9ybWF0LCBubyByYXcgSFRNTCBhbGxvd2VkIChkZWZhdWx0KS4nLm4NCgkJCQkJCS4nLy8g MSA9IFBsdWdpbiBoZWxwIGlzIGluIHJhdyBIVE1MLiAgTm90IHJlY29tbWVuZGVkLicubg0K CQkJCQkJLicjICRwbHVnaW5bXCdhbGxvd19odG1sX2hlbHBcJ10gPSAxOycubi5uLA0KCQki dmVyc2lvbiIgPT4gJyRwbHVnaW5bXCd2ZXJzaW9uXCddID0gJy5kb1F1b3RlKCR2YWwpLic7 Jy5uLA0KCQkiZmxhZ3MiID0+ICcvLyBQbHVnaW4gImZsYWdzIiBzaWduYWwgdGhlIHByZXNl bmNlIG9mIG9wdGlvbmFsIGNhcGFiaWxpdGllcyB0byB0aGUgY29yZSBwbHVnaW4gbG9hZGVy Licubg0KCQkJCQkJLicvLyBVc2UgYW4gYXBwcm9wcmlhdGVseSBPUi1lZCBjb21iaW5hdGlv biBvZiB0aGVzZSBmbGFncy4nLm4NCgkJCQkJCS4nLy8gVGhlIGZvdXIgaGlnaC1vcmRlciBi aXRzIDB4ZjAwMCBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIHBsdWdpblwncyBwcml2YXRlIHVz ZScubg0KCQkJCQkJLidpZiAoIWRlZmluZWQoXCdQTFVHSU5fSEFTX1BSRUZTXCcpKSBkZWZp bmUoXCdQTFVHSU5fSEFTX1BSRUZTXCcsIDB4MDAwMSk7IC8vIFRoaXMgcGx1Z2luIHdhbnRz IHRvIHJlY2VpdmUgInBsdWdpbl9wcmVmcy57JHBsdWdpbltcJ25hbWVcJ119IiBldmVudHMn Lm4NCgkJCQkJCS4naWYgKCFkZWZpbmVkKFwnUExVR0lOX0xJRkVDWUNMRV9OT1RJRllcJykp IGRlZmluZShcJ1BMVUdJTl9MSUZFQ1lDTEVfTk9USUZZXCcsIDB4MDAwMik7IC8vIFRoaXMg cGx1Z2luIHdhbnRzIHRvIHJlY2VpdmUgInBsdWdpbl9saWZlY3ljbGUueyRwbHVnaW5bXCdu YW1lXCddfSIgZXZlbnRzJy5uLm4NCgkJCQkJCS4nJHBsdWdpbltcJ2ZsYWdzXCddID0gJy5k b1F1b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJhdXRob3IiID0+ICckcGx1Z2luW1wnYXV0aG9y XCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLA0KCQkiYXV0aG9yX3VyaSIgPT4gJyRwbHVn aW5bXCdhdXRob3JfdXJpXCddID0gJy5kb1F1b3RlKCR2YWwpLic7Jy5uLA0KCQkiZGVzY3Jp cHRpb24iID0+ICckcGx1Z2luW1wnZGVzY3JpcHRpb25cJ10gPSAnLmRvUXVvdGUoJHZhbCku JzsnLm4ubiwNCgkJImxvYWRfb3JkZXIiID0+ICcvLyBQbHVnaW4gbG9hZCBvcmRlcjonLm4N CgkJCQkJCS4nLy8gVGhlIGRlZmF1bHQgdmFsdWUgb2YgNSB3b3VsZCBmaXQgbW9zdCBwbHVn aW5zLCB3aGlsZSBmb3IgaW5zdGFuY2UgY29tbWVudCcubg0KCQkJCQkJLicvLyBzcGFtIGV2 YWx1YXRvcnMgb3IgVVJMIHJlZGlyZWN0b3JzIHdvdWxkIHByb2JhYmx5IHdhbnQgdG8gcnVu IGVhcmxpZXInLm4NCgkJCQkJCS4nLy8gKDEuLi40KSB0byBwcmVwYXJlIHRoZSBlbnZpcm9u bWVudCBmb3IgZXZlcnl0aGluZyBlbHNlIHRoYXQgZm9sbG93cy4nLm4NCgkJCQkJCS4nLy8g VmFsdWVzIDYuLi45IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBwbHVnaW5zIHdoaWNoIHdv dWxkIHdvcmsgbGF0ZS4nLm4NCgkJCQkJCS4nLy8gVGhpcyBvcmRlciBpcyB1c2VyLW92ZXJy aWRlYWJsZS4nLm4NCgkJCQkJCS4nJHBsdWdpbltcJ29yZGVyXCddID0gJy5kb1F1b3RlKCR2 YWwpLic7Jy5uLm4sDQoJCSJ0eXBlIiA9PiAnLy8gUGx1Z2luIFwndHlwZVwnIGRlZmluZXMg d2hlcmUgdGhlIHBsdWdpbiBpcyBsb2FkZWQnLm4NCgkJCQkJCS4nLy8gMCA9IHB1YmxpYyAg ICAgICA6IG9ubHkgb24gdGhlIHB1YmxpYyBzaWRlIG9mIHRoZSB3ZWJzaXRlIChkZWZhdWx0 KScubg0KCQkJCQkJLicvLyAxID0gcHVibGljK2FkbWluIDogb24gYm90aCB0aGUgcHVibGlj IGFuZCBhZG1pbiBzaWRlJy5uDQoJCQkJCQkuJy8vIDIgPSBsaWJyYXJ5ICAgICAgOiBvbmx5 IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBvciByZXF1aXJlX3BsdWdpbigpIGlzIGNhbGxlZCcu bg0KCQkJCQkJLicvLyAzID0gYWRtaW4gICAgICAgIDogb25seSBvbiB0aGUgYWRtaW4gc2lk ZScubg0KCQkJCQkJLickcGx1Z2luW1wndHlwZVwnXSA9ICcuZG9RdW90ZSgkdmFsKS4nOycu bi5uLA0KCQkiaW5jbHVkZSIgPT4gJ2lmICghZGVmaW5lZChcJ3R4cGludGVyZmFjZVwnKSkn Lm4NCgkJCQkJCS4nICAgICAgICBAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5waHBcJyk7Jy5u Lm4sDQoJCSJoZWxwIiA9PiAnaWYgKDApIHsnLm4NCgkJCQkJCS4nPz4nLm4NCgkJCQkJCS4g KCgkY3NzKSA/ICc8IS0tJy5uDQoJCQkJCQkuJyMgLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0t Jy5uDQoJCQkJCQkuJGNzcy5uDQoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4gQ1NTIC0tLScu bg0KCQkJCQkJLictLT4nLm4gOiAnJykNCgkJCQkJCS4nPCEtLScubg0KCQkJCQkJLicjIC0t LSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4NCgkJCQkJCS4kaGVscC5uDQoJCQkJCQkuJyMg LS0tIEVORCBQTFVHSU4gSEVMUCAtLS0nLm4NCgkJCQkJCS4nLS0+Jy5uDQoJCQkJCQkuJzw/ cGhwJy5uDQoJCQkJCQkuJ30nLm4sDQoJCSJjb2RlIiA9PiAnIyAtLS0gQkVHSU4gUExVR0lO IENPREUgLS0tJy5uDQoJCQkJCQkuJHZhbC5uDQoJCQkJCQkuJyMgLS0tIEVORCBQTFVHSU4g Q09ERSAtLS0nLm4sDQoJCSJwb3N0YW1ibGUiID0+ICc/PicsDQoJKTsNCg0KCXJldHVybiAo YXJyYXlfa2V5X2V4aXN0cygkcHJ0LCAkdGVtcGxhdGUpID8gJHRlbXBsYXRlWyRwcnRdIDog JycpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3VwbG9hZCgpIHsN CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFsczsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5k X2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xv YmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoN CglpZiAoISRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkgew0KCQlpZWRfcGx1Z2lu X2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdjaG9vc2VfZmlsZScpKTtyZXR1cm47DQoJfQ0KCSRw bHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9u YW1lJ10pOw0KLy8JJG5ld25hbWUgPSAoZW1wdHkoJHBsdWdpblsnbmFtZSddKSkgPyBiYXNl bmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXSwgJy5waHAnKSA6ICRwbHVnaW5bJ25h bWUnXTsNCgkkbmV3bmFtZSA9ICRwbHVnaW5bJ25hbWUnXTsNCglpZiAoZ3BzKCduYW1lJykg YW5kIGdwcygnbmFtZScpIT0neHh4X3h4eHh4eCcpIHsNCgkJJG5ld25hbWU9Z3BzKCduYW1l Jyk7DQoJfQ0KCWlmIChlbXB0eSgkcGx1Z2luWydjb2RlJ10pKSB7DQoJCSRwbHVnaW5bJ2Nv ZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUn XSkpOw0KCX0NCg0KCWlmIChNQUdJQ19RVU9URVNfR1BDKSB7DQoJCSRwbHVnaW4gPSBkb1N0 cmlwKCRwbHVnaW4pOw0KCX0NCglleHRyYWN0KGRvU2xhc2goJHBsdWdpbikpOw0KCSRtZDU9 bWQ1KCRjb2RlKTsNCgkkdmVyc2lvbiA9IChlbXB0eSgkdmVyc2lvbikpID8gIjAuMSIgOiAk dmVyc2lvbjsNCgkkaGVscCA9ICRoZWxwLigoJGNzcykgPyBuLiRzdGFydF9jc3Mubi4kY3Nz Lm4uJGVuZF9jc3MgOiAnJyk7DQoJJGV4aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdp bicsJ25hbWUnLCRuZXduYW1lKTsNCglpZiAoJGV4aXN0cykgew0KCQkkc3RhdHVzID0gZmV0 Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmV3bmFtZSk7DQoJCSRycyA9IHNh ZmVfdXBkYXRlKA0KCQkJInR4cF9wbHVnaW4iLA0KCQkJInN0YXR1cyA9ICIuaW50dmFsKCRz dGF0dXMpLiIsDQoJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsDQoJCQlhdXRob3IgPSAn JGF1dGhvcicsDQoJCQlhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywNCgkJCXZlcnNpb24g PSAnJHZlcnNpb24nLA0KCQkJZGVzY3JpcHRpb24gPSAnJGRlc2NyaXB0aW9uJywNCgkJCWhl bHAgPSAnJGhlbHAnLA0KCQkJY29kZSA9ICckY29kZScsDQoJCQljb2RlX3Jlc3RvcmUgPSAn JGNvZGUnLA0KCQkJY29kZV9tZDUgPSAnJG1kNScsDQoJCQlmbGFncyA9ICIuaW50dmFsKCRm bGFncykuIiwNCgkJCWxvYWRfb3JkZXIgPSAiLmludHZhbCgkbG9hZF9vcmRlciksDQoJCQki bmFtZSA9ICckbmV3bmFtZSciDQoJCSk7DQoJfSBlbHNlIHsNCgkJJHJzID0gc2FmZV9pbnNl cnQoDQoJCQkidHhwX3BsdWdpbiIsDQoJCQkibmFtZSA9ICckbmV3bmFtZScsDQoJCQlzdGF0 dXMgPSAwLA0KCQkJdHlwZSA9ICIuaW50dmFsKCR0eXBlKS4iLA0KCQkJYXV0aG9yID0gJyRh dXRob3InLA0KCQkJYXV0aG9yX3VyaSA9ICckYXV0aG9yX3VyaScsDQoJCQl2ZXJzaW9uID0g JyR2ZXJzaW9uJywNCgkJCWRlc2NyaXB0aW9uID0gJyRkZXNjcmlwdGlvbicsDQoJCQloZWxw ID0gJyRoZWxwJywNCgkJCWNvZGUgPSAnJGNvZGUnLA0KCQkJY29kZV9yZXN0b3JlID0gJyRj b2RlJywNCgkJCWNvZGVfbWQ1ID0gJyRtZDUnLA0KCQkJZmxhZ3MgPSAiLmludHZhbCgkZmxh Z3MpLiIsDQoJCQlsb2FkX29yZGVyID0gIi5pbnR2YWwoJGxvYWRfb3JkZXIpDQoJCSk7DQoJ fQ0KDQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgbWVzc2VuZ2VyKCdwbHVnaW4n LCRuZXduYW1lLCgkZXhpc3RzKT8ndXBkYXRlZCc6J3VwbG9hZGVkJykpOw0KCWVjaG8gaWVk X3BsdWdpbl9lZGl0X2Zvcm0oJG5ld25hbWUpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlv biBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkZmlsZXBhdGgpIHsNCgkkY29udGVudCA9IGZpbGUo JGZpbGVwYXRoKTsNCgkkanVzdGZpbGUgPSBiYXNlbmFtZSgkZmlsZXBhdGgpOw0KCSRleHQg PSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCSRleHQgPSAoJGV4dD09 JGp1c3RmaWxlKSA/ICcnIDogJy4nLiRleHQ7IC8vIE9ubHkgYXNzaWduIGFuIGV4dGVuc2lv biBpZiBvbmUgZXhpc3RzDQoJJHNvdXJjZV9saW5lcyA9IGNvdW50KCRjb250ZW50KTsNCgkk bWV0YWRhdGEgPSBhcnJheSgNCgkJCQkJCSduYW1lJyA9PiAnJywNCgkJCQkJCSd2ZXJzaW9u JyA9PiAnJywNCgkJCQkJCSdyZXZpc2lvbicgPT4gJycsDQoJCQkJCQknYXV0aG9yJyA9PiAn JywNCgkJCQkJCSdhdXRob3JfdXJpJyA9PiAnJywNCgkJCQkJCSdkZXNjcmlwdGlvbicgPT4g JycsDQoJCQkJCQknb3JkZXInID0+ICc1JywNCgkJCQkJCSd0eXBlJyA9PiAnJywNCgkJCQkJ CSdmbGFncycgPT4gJycsDQoJCQkJCSk7DQoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNl X2xpbmVzOyAkaWR4KyspIHsNCgkJJGNvbnRlbnRbJGlkeF0gPSBydHJpbSgkY29udGVudFsk aWR4XSk7DQoJCS8vIEJvbWIgb3V0IGlmIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGRlZmlu aXRpb24gYXJlYQ0KCQlpZiAoc3RycG9zKCAkY29udGVudFskaWR4XSwgJ2lmICghZGVmaW5l ZCcgKSA9PT0gMCkgew0KCQkJYnJlYWs7DQoJCX0NCgkJaWYgKHN0cnBvcygkY29udGVudFsk aWR4XSwgJyRwbHVnaW5bJykgPT09IDApIHsNCgkJCS8vIEZvdW5kIGEgcGx1Z2luIHZhcmlh YmxlIHNvIGV4dHJhY3QgaXQNCgkJCSRwYXJ0cyA9IGV4cGxvZGUoIiA9ICIsICRjb250ZW50 WyRpZHhdKTsNCgkJCSRwYXJ0c1swXSA9IHN0cl9yZXBsYWNlKCInIiwgIiIsICRwYXJ0c1sw XSk7IC8vIE1ha2UgdGhlIG1hdGNoIGVhc2llciENCgkJCSRwYXJ0c1sxXSA9IHN0cl9yZXBs YWNlKCI7IiwgIiIsICRwYXJ0c1sxXSk7IC8vIERpdHRvDQoJCQlwcmVnX21hdGNoKCIvcGx1 Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBdLCAkdmFyKTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2 YXJpYWJsZSBuYW1lDQoJCQlpZiAoaXNfbnVtZXJpYygkcGFydHNbMV0pKSB7DQoJCQkJJHBh cnRzWzFdID0gIiciLiRwYXJ0c1sxXS4iJyI7DQoJCQl9DQoJCQlwcmVnX21hdGNoKCIvLion KC4qKScuKi8iLCAkcGFydHNbMV0sICR2YWwpOyAvLyBSZW1vdmUgYW55dGhpbmcgb3V0c2lk ZSB0aGUgcXVvdGVzIChlLmcuICRyZXZpc2lvbikNCgkJCWlmICgkdmFyWzFdID09ICdyZXZp c2lvbicgJiYgIWVtcHR5KCR2YWxbMV0pKSB7DQoJCQkJJHJldnBhcnRzID0gZXhwbG9kZSgn ICcsIHRyaW0oJHZhbFsxXSwgJyQgJykpOw0KCQkJCSR2YWxbMV0gPSAkcmV2cGFydHNbY291 bnQoJHJldnBhcnRzKS0xXTsNCgkJCQkkdmFsWzFdID0gKGVtcHR5KCR2YWxbMV0pKSA/ICcn IDogJy4nIC4kdmFsWzFdOw0KCQkJfQ0KCQkJJG1ldGFkYXRhWyR2YXJbMV1dID0gJHZhbFsx XTsNCgkJfQ0KCX0NCg0KCSRtZXRhZGF0YVsnbmFtZSddID0gKGVtcHR5KCRtZXRhZGF0YVsn bmFtZSddKSkgPyBiYXNlbmFtZSgkanVzdGZpbGUsICRleHQpIDogJG1ldGFkYXRhWyduYW1l J107DQoJJG1ldGFkYXRhWydsb2FkX29yZGVyJ10gPSAkbWV0YWRhdGFbJ29yZGVyJ107DQoJ JG1ldGFkYXRhWyd2ZXJzaW9uJ10gLj0gJG1ldGFkYXRhWydyZXZpc2lvbiddOw0KCSRtZXRh ZGF0YVsnaGVscCddID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdIRUxQ Jyk7DQoJJG1ldGFkYXRhWydjc3MnXSAgPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29u dGVudCwgJ0NTUycgKTsNCgkkbWV0YWRhdGFbJ2NvZGUnXSA9IGllZF9wbHVnaW5fZXh0cmFj dF9odW5rKCRjb250ZW50LCAnQ09ERScpOw0KDQoJcmV0dXJuICRtZXRhZGF0YTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBuZXQtY2FydmVyJ3MgemVt X3RwbCB0ZW1wbGF0ZQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRl bnQsICRodW5rLCAkY21udD0iIyIsICRkZWxldGU9ZmFsc2UpIHsNCgkkZGxtID0gZXhwbG9k ZSgifCIsICRjbW50KTsNCgkkZGxtU3RhcnQgPSAkZGxtWzBdOw0KCSRkbG1FbmQgPSAoY291 bnQoJGRsbSkgPiAxKSA/ICRkbG1bMV0gOiAnJzsNCgkkbGluZXMgPSBpZWRfcGx1Z2luX21h a2VfYXJyYXkoJGNvbnRlbnQpOw0KDQoJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGlt KSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkZGxtU3RhcnQsICRkbG1FbmQp Ow0KCSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRsaW5lcykgKyAxOw0K CSRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGxpbmVzKTsNCg0KCS8vIEtsdWRn ZSB0byBnZXQgcm91bmQgdGhlIGRlbGltaXRlciBjaGFuZ2UgaW4gdjAuODMNCglpZiAoJGh1 bmsgPT0gJ0NTUycgJiYgJGVuZCA9PT0gZmFsc2UpIHsNCgkJJHN0YXJ0X2RlbGltID0gc3Ry X3JlcGxhY2UoJy0tLScsICcqKionLCAkc3RhcnRfZGVsaW0pOw0KCQkkZW5kX2RlbGltID0g c3RyX3JlcGxhY2UoJy0tLScsICcqKionLCAkZW5kX2RlbGltKTsNCgkJJHN0YXJ0ID0gYXJy YXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVzKSArIDE7DQoJCSRlbmQgPSBhcnJheV9z ZWFyY2goJGVuZF9kZWxpbSwgJGxpbmVzKTsNCgl9DQoNCgkkZXh0cmFjdGVkID0gYXJyYXko KTsNCglpZiAoY291bnQoJGxpbmVzKSA+IDAgJiYgaXNfbnVtZXJpYygkc3RhcnQpICYmIGlz X251bWVyaWMoJGVuZCkgJiYgJGVuZCA+ICRzdGFydCkgew0KCQkkZXh0cmFjdGVkID0gYXJy YXlfc2xpY2UoJGxpbmVzLCAkc3RhcnQsICRlbmQtJHN0YXJ0KTsNCgkJJGxpbmVOdW0gPSBj b3VudCgkZXh0cmFjdGVkKS0xOw0KCQl3aGlsZSAoJGxpbmVOdW0gPiAwICYmIHRyaW0oJGV4 dHJhY3RlZFskbGluZU51bS0tXSkgPT0gIiIpIHsNCgkJCWFycmF5X3BvcCgkZXh0cmFjdGVk KTsNCgkJfQ0KCQl3aGlsZSAoY291bnQoJGV4dHJhY3RlZCkgPiAwICYmIHRyaW0oJGV4dHJh Y3RlZFswXSkgPT0gIiIpIHsNCgkJCWFycmF5X3NoaWZ0KCRleHRyYWN0ZWQpOw0KCQl9DQoJ CWlmICgkZGVsZXRlKSB7DQoJCQkkY2hvcHBlZCA9IGFycmF5X3NwbGljZSgkbGluZXMsICRz dGFydC0xLCAkZW5kLSRzdGFydCsyLCAiIik7DQoJCX0NCgl9DQoJJHJlbWFpbnMgPSAkbGlu ZXM7DQoJLy8gQ2hlY2sgaWYgdGhlIENTUyBzZWN0aW9uIGhhcyA8c3R5bGU+IHRhZ3MgYXJv dW5kIGl0OyBhZGQgdGhlbSBpZiBub3QNCglpZiAoJGh1bmsgPT0gIkNTUyIpIHsNCgkJJG51 bXJvd3MgPSBjb3VudCgkZXh0cmFjdGVkKTsNCgkJaWYgKCRudW1yb3dzID4gMSkgew0KCQkJ aWYgKHN0cnBvcygkZXh0cmFjdGVkWyRudW1yb3dzLTFdLCAnPC9zdHlsZT4nKSA9PT0gZmFs c2UpIHsNCgkJCQkkZXh0cmFjdGVkW10gPSAnPC9zdHlsZT4nOw0KCQkJfQ0KCQkJaWYgKHN0 cnBvcygkZXh0cmFjdGVkWzBdLCAnPHN0eWxlICcpID09PSBmYWxzZSkgew0KCQkJCWFycmF5 X3Vuc2hpZnQoJGV4dHJhY3RlZCwgJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jyk7DQoJCQl9 DQoJCX0NCgl9DQoJaWYgKCRkZWxldGUpIHsNCgkJcmV0dXJuIGFycmF5KHRyaW0oam9pbigi XG4iLCAkZXh0cmFjdGVkKSksIHRyaW0oam9pbigiXG4iLCAkcmVtYWlucykpKTsNCgl9IGVs c2Ugew0KCQlyZXR1cm4gdHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQpKTsNCgl9DQp9DQoN Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9hcnJheSgkYXJyKSB7DQoJ aWYgKCFpc19hcnJheSgkYXJyKSkgew0KCQkkYXJyID0gZXhwbG9kZSgiXG4iLCAkYXJyKTsN Cgl9DQoJJHNvdXJjZV9saW5lcyA9IGNvdW50KCRhcnIpOw0KCWZvciAoJGlkeD0wOyAkaWR4 IDwgJHNvdXJjZV9saW5lczsgJGlkeCsrKSB7DQoJCSRhcnJbJGlkeF0gPSBydHJpbSgkYXJy WyRpZHhdKTsNCgl9DQoJcmV0dXJuICRhcnI7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkc3RhcnQsICRlbmQpIHsNCglnbG9i YWwgJGllZF9wbHVnaW5fZ2xvYmFsczsNCgkkc21hcmtlciA9ICRzdGFydCAuIHN0cl9yZXBs YWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNbJ3N0YXJ0J10pIC4g KCgkZW5kKT8nICcuJGVuZDonJyk7DQoJJGVtYXJrZXIgPSAkc3RhcnQgLiBzdHJfcmVwbGFj ZSgiU0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydlbmQnXSkgLiAoKCRl bmQpPycgJy4kZW5kOicnKTsNCglyZXR1cm4gKGFycmF5KCRzbWFya2VyLCAkZW1hcmtlcikp Ow0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyByaXBwZWQgYW5kIG1vZGRlZCBmcm9tIG5ldC1jYXJ2 ZXIncyB6ZW1fdHBsIHRlbXBsYXRlDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2FkbWluX2NoZWNr KCRjb2RlYmxvY2ssICR0eXBlKSB7DQoJLy8gU2hvcnQgY2lyY3VpdCBzaW5jZSB3ZSdyZSBv bmx5IGludGVyZXN0ZWQgaW4gY2xpZW50IHBsdWdpbnMNCglpZiAoJHR5cGUgIT0gJzAnIHx8 IHN0cnBvcygkY29kZWJsb2NrLCAndHhwaW50ZXJmYWNlJyk9PT1mYWxzZSkgew0KCQlyZXR1 cm4gdHJ1ZTsNCgl9DQoNCgkvLyBCZWxpZXZlIGl0IG9yIG5vdCB0aGlzIGlzIHNldmVyYWwg b3JkZXJzIG9mIG1hZ25pdHVkZSBxdWlja2VyIHRoYW4gYSBzaW5nbGUgcHJlZ19tYXRjaA0K CSRjYiA9IHN0cl9yZXBsYWNlKGFycmF5KCdcdCcsICcgJyksICcnLCAkY29kZWJsb2NrKTsN CgkkY2IgPSBzdHJfcmVwbGFjZSgnPT09JywgJz09JywgJGNiKTsNCglpZiAoc3RycG9zKCRj YiwgJ3R4cGludGVyZmFjZT09XCJhZG1pbicpKSByZXR1cm4gZmFsc2U7DQoJaWYgKHN0cnBv cygkY2IsICJ0eHBpbnRlcmZhY2U9PVwnYWRtaW4iKSkgcmV0dXJuIGZhbHNlOw0KCWlmIChz dHJwb3MoJGNiLCAnYWRtaW5cIj09dHhwaW50ZXJmYWNlJykpIHJldHVybiBmYWxzZTsNCglp ZiAoc3RycG9zKCRjYiwgImFkbWluXCc9PXR4cGludGVyZmFjZSIpKSByZXR1cm4gZmFsc2U7 DQoJaWYgKHN0cnBvcygkY2IsICdhZG1pblwiPT1AdHhwaW50ZXJmYWNlJykpIHJldHVybiBm YWxzZTsNCglpZiAoc3RycG9zKCRjYiwgImFkbWluXCc9PUB0eHBpbnRlcmZhY2UiKSkgcmV0 dXJuIGZhbHNlOw0KCXJldHVybiB0cnVlOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBp ZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRfZGxtLCAkZW5k X2RsbSkgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX2dsb2JhbHM7DQoNCgkkdG1w ZGlyID0gJGhscGZpbGUgPSAnJzsNCgkkY2hhbmdlZCA9IHRydWU7DQoJJG91dCA9IGFycmF5 KCk7DQoJaWYgKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXSkg JiYgIWVtcHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXSkgJiYgaXNf d3JpdGFibGUoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZSddKSkgew0KCQkk dG1wZGlyID0gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZSddOw0KCQkkY2Fj aGUgPSBidWlsZF9maWxlX3BhdGgoJHRtcGRpciwgJ2llZF9wbHVnaW5fY29tcG9zZXIuY2Fj aGUnKTsNCgkJaWYgKCFmaWxlX2V4aXN0cygkY2FjaGUpKSB7DQoJCQl0b3VjaCgkY2FjaGUp OyAvLyBDcmVhdGUgZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0DQoJCX0NCgkJJHBsdWdzID0g cGFyc2VfaW5pX2ZpbGUoJGNhY2hlKTsNCg0KCQkkb2xkX21kNSA9IChhcnJheV9rZXlfZXhp c3RzKCRuYW1lLCAkcGx1Z3MpKSA/ICRwbHVnc1skbmFtZV0gOiAnJzsNCgkJJGN1cnJfbWQ1 ID0gbWQ1KCRoZWxwKTsNCgkJJGhscGZpbGUgPSBidWlsZF9maWxlX3BhdGgoJHRtcGRpciwg JG5hbWUuJ19oZWxwLnR4dGwnKTsNCgkJaWYgKCRvbGRfbWQ1ID09ICRjdXJyX21kNSkgew0K CQkJJG91dFswXSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRobHBmaWxlKTsNCgkJCSRjaGFuZ2Vk ID0gZmFsc2U7DQoJCX0gZWxzZSB7DQoJCQkkcGx1Z3NbJG5hbWVdID0gJGN1cnJfbWQ1Ow0K CQkJJGZkID0gZm9wZW4oJGNhY2hlLCAidyIpOw0KCQkJZm9yZWFjaCAoJHBsdWdzIGFzICRp ZHggPT4gJHZhbCkgew0KCQkJCWZ3cml0ZSgkZmQsICRpZHguJyA9ICcuJHZhbC5uKTsNCgkJ CX0NCgkJCWZjbG9zZSgkZmQpOw0KCQl9DQogICB9DQoNCglpZiAoISRvdXQpIHsNCgkJQGlu Y2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxlLnBocCc7DQoJCSRvdXRbMF0g PSAkaGVscDsNCgkJaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7DQoJCQkvLyBUcnkg YW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50ZWxsaWdlbnQgYWJvdXQgYXBwbHlpbmcgdGV4dGls ZSBvciBub3QNCgkJCSRyZSA9ICcvaFswLTZdKFwoLipcKSk/XC4vJzsNCgkJCWlmIChwcmVn X21hdGNoKCRyZSwgJGhlbHApKSB7DQoJCQkJJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOw0K CQkJCSRvdXRbMF0gPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMoJGhlbHApOw0KCQkJfQ0KCQl9 DQoJfQ0KDQoJaWYgKCR0bXBkaXIgJiYgJGNoYW5nZWQpIHsNCgkJaWYgKCFmaWxlX2V4aXN0 cygkaGxwZmlsZSkpIHsNCgkJCXRvdWNoKCRobHBmaWxlKTsNCgkJfQ0KCQkkZmQgPSBmb3Bl bigkaGxwZmlsZSwgInciKTsNCgkJZndyaXRlKCRmZCwgJG91dFswXSk7DQoJCWZjbG9zZSgk ZmQpOw0KCX0NCg0KCS8vIFJlcGxhY2UgdGhlIHRyaXBsZSAnLS0tJyBpbiB0aGUgZGVsaW1p dGVycyBzbyB0aGUgaGVscCBmaWxlIGNhbiB2YWxpZGF0ZQ0KCSRzdGFydF9kbG0gPSBzdHJf cmVwbGFjZSgnLS0tJywgJyoqKicsICRzdGFydF9kbG0pOw0KCSRlbmRfZGxtID0gc3RyX3Jl cGxhY2UoJy0tLScsICcqKionLCAkZW5kX2RsbSk7DQoNCgkkb3V0WzFdID0gKCRjc3MpID8g IlxuJHN0YXJ0X2RsbVxuJGNzc1xuJGVuZF9kbG1cbiIgOiAnJzsNCglyZXR1cm4gc3Vic3Ry KGpvaW4oJycsICRvdXQpLCAwLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydzaXplX2hlbHAnXSsk aWVkX3BsdWdpbl9nbG9iYWxzWydzaXplX2NzcyddKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gaWVkX2luc2VydF9lZGl0b3JzKCkgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1 Z2luX3ByZWZzOw0KCSRvdXQgPSBhcnJheSgpOw0KDQoJJHByZWZrZXlzID0gZG9RdW90ZShp bXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7DQoJJHJz ID0gc2FmZV9yb3dzKCduYW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4k cHJlZmtleXMuJyknKTsNCglpZiAoY291bnQoJHJzKSA9PSBjb3VudCgkaWVkX3BsdWdpbl9w cmVmc1swXSkpIHsNCgkJJGVkID0gYXJyYXkoKTsNCgkJJGVkWyRwcmVmc1snaWVkX3BsdWdp bl9lZGl0b3InXV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnXTsNCgkJJGVk WyRwcmVmc1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdp bl9oZWxwX2VkaXRvcl9wYXRoJ107DQoNCgkJZm9yZWFjaCAoJGVkIGFzICRlZGl0b3IgPT4g JGVkaXRvcl9kaXIpIHsNCgkJCXN3aXRjaCAoJGVkaXRvcikgew0KCQkJCWNhc2UgInRpbnlf bWNlIjoNCgkJCQkJJG91dFtdID0gPDw8RU9GDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicvdGlueV9tY2UuanMiPjwvc2NyaXB0Pg0KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCXRpbnlNQ0UuaW5pdCh7DQoJCW1vZGUg OiAic3BlY2lmaWNfdGV4dGFyZWFzIiwNCgkJZWRpdG9yX3NlbGVjdG9yIDogIm1jZUVkaXRv ciIsDQoJCXRoZW1lX2FkdmFuY2VkX3Rvb2xiYXJfbG9jYXRpb24gOiAidG9wIiwNCgkJdGhl bWVfYWR2YW5jZWRfYnV0dG9uczEgOiAiYm9sZCxpdGFsaWMsdW5kZXJsaW5lLHN0cmlrZXRo cm91Z2gsZm9yZWNvbG9yLGJhY2tjb2xvcixyZW1vdmVmb3JtYXQsbnVtbGlzdCxidWxsaXN0 LG91dGRlbnQsaW5kZW50LGp1c3RpZnlsZWZ0LGp1c3RpZnljZW50ZXIsanVzdGlmeXJpZ2h0 LGp1c3RpZnlmdWxsIiwNCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczIgOiAibGluayx1bmxp bmssc2VwYXJhdG9yLGlicm93c2VyLHNlcGFyYXRvcixzZWFyY2gscmVwbGFjZSxzZXBhcmF0 b3IsY3V0LGNvcHkscGFzdGUsc2VwYXJhdG9yLGNvZGUsc2VwYXJhdG9yLGZvcm1hdHNlbGVj dCIsDQoJCXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMzIDogIiINCgl9KTsNCjwvc2NyaXB0PjsN CkVPRjsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiZWRpdF9hcmVhIjoNCgkJCQkJJG91dFtd ID0gPDw8RU9GDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkZWRpdG9y X2Rpci9lZGl0X2FyZWFfZnVsbC5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCI+DQoJLy8gaW5pdGlhbGlzYXRpb24NCgllZGl0QXJlYUxvYWRlci5pbml0 KHsNCgkJaWQ6ICJwbHVnaW5fZWRpdG9yIgkvLyBpZCBvZiB0aGUgdGV4dGFyZWEgdG8gdHJh bnNmb3JtDQoJCSxzdGFydF9oaWdobGlnaHQ6IHRydWUJLy8gaWYgc3RhcnQgd2l0aCBoaWdo bGlnaHQNCgkJLGFsbG93X3Jlc2l6ZTogImJvdGgiDQoJCSxhbGxvd190b2dnbGU6IHRydWUN CgkJLGxhbmd1YWdlOiAiZW4iDQoJCSxzeW50YXg6ICJwaHAiDQoJfSk7DQo8L3NjcmlwdD4N CkVPRjsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiY29kZXByZXNzIjoNCgkJCQkJJG91dFtd ID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJGVkaXRvcl9kaXIu Jy9jb2RlcHJlc3MuanMiPjwvc2NyaXB0Pic7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJ fQ0KDQoJcmV0dXJuIGltcGxvZGUoIlxuIiwgJG91dCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1 bmN0aW9uIGllZF9wbHVnaW5faGVscF92aWV3ZXIoJG1lc3NhZ2U9JycpIHsNCglnbG9iYWwg JHByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVn aW5zJyksJG1lc3NhZ2UpOw0KDQoJaWYgKGdwcygnbmFtZScpKSB7DQoJCSRuYW1lID0gZ3Bz KCduYW1lJyk7DQoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdp bicsJ25hbWUnLCRuYW1lKSA6ICcnOw0KCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/ IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1 ZSkgOiBhcnJheSgnJywkaGVscCk7DQoJfSBlbHNlIGlmIChncHMoJ2ZpbGVuYW1lJykpIHsN CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9k aXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0KCQlleHRyYWN0KCRwbHVnaW4pOw0KCX0NCgll Y2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsNCglpZiAoZW1wdHkoJGhlbHApKSB7DQoJCWVjaG8g dHIodGRhKCc8cD5IZWxwIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxlLjwvcD4nKSk7 DQoJfSBlbHNlIHsNCgkJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdp bl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCdd LCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCQkkcGx1Z2luWydoZWxwJ10g PSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAk ZW5kX2Nzcyk7DQoJCWVjaG8gdHIodGRhKCAnPHA+RXh0cmFjdGVkICcuKCFlbXB0eSgkcGx1 Z2luWydoZWxwJ10pID8gJ2FuZCBUZXh0aWxlIHByb2Nlc3NlZCcgOiAnJykuJyBoZWxwIHNl Y3Rpb24gZm9sbG93cyYjODIzMDs8L3A+PGhyPicsICcgd2lkdGg9IjYwMCInKSk7DQoJCWVj aG8gdHIodGRhKCRwbHVnaW5bJ2hlbHAnXSwgJyB3aWR0aD0iNjAwIicpKTsNCgl9DQoJZWNo byBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3Nl dHVwKCRldmVudD0nJywgJHN0ZXA9JycsICRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRpZWRf cGx1Z2luX3ByZWZzOw0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRpZWRfcGx1Z2luX3ByZWZz WzBdKTsNCg0KCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOw0KCSRw cmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgiJywnIixhcnJheV9rZXlzKCRpZWRfcGx1Z2lu X3ByZWZzWzBdKSkpOw0KCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcsJ3R4cF9w cmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7DQoJJG51bVJvd3MgPSBjb3VudCgk cnMpOw0KDQoJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdz YXZlJyksICdwdWJsaXNoJyk7DQoJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0 IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVn aW5fcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7 DQoJJGJ0blJlbW92ZSA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc19yZW1vdmUiIHN0 eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0 KCdkZWxldGUnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7DQoJJGJ0blN0eWxlID0gJyBzdHls ZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCg0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcp Ow0KCWlmICgkbnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGlu c3RhbGxlZA0KCQllY2hvIHRyKHRkYShzdHJvbmcoaWVkX3BsdWdpbl9nVHh0KCdwcmVmc190 aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4gdGRhKCRidG5SZW1vdmUsICRidG5TdHlsZSkg KTsNCgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1 Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOw0KCQlm b3IgKCRpZHggPSAwOyAkaWR4IDwgJG51bVJvd3M7ICRpZHgrKykgew0KCQkJJGEgPSAkcnNb JGlkeF07DQoJCQkkbGFiZWwgPSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVk X3BsdWdpbl9nVHh0KCRhWyduYW1lJ10pLic6PC9sYWJlbD4nOw0KCQkJJG91dCA9IHRkYSgk bGFiZWwsICcgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogbWlk ZGxlOyInKTsNCgkJCXN3aXRjaCgkYVsnbmFtZSddKSB7DQoJCQkJY2FzZSAiaWVkX3BsdWdp bl9lZGl0b3JfcGF0aCI6DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRo IjoNCgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZSI6DQoJCQkJY2FzZSAiaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGVjIjoNCgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9z ZmlsZXAiOg0KCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlIjoNCgkJCQkJ JG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAkYVsnbmFtZSddLCAkYVsndmFsJ10sICdlZGl0 JywgJycsICcnLCA1MCwgJycsICRhWyduYW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2Fz ZSAiaWVkX3BsdWdpbl9lZGl0b3IiOg0KLy8JCQkJCSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQo JGFbJ25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2VkaXRfYXJlYScgPT4gJ0Vk aXQgQXJlYScsICdjb2RlcHJlc3MnID0+ICdDb2RlUHJlc3MnKSwgJGFbJ3ZhbCddLCAnJywg JyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsi JywgJGFbJ25hbWUnXSkpOw0KCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1l J10sIGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEn KSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlz LmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOw0KCQkJCQlicmVhazsNCgkJCQlj YXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yIjoNCgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJ bnB1dCgkYVsnbmFtZSddLCBhcnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywg J3RpbnlfbWNlJyA9PiAnVGlueSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0i aWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUn XSkpOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9vcmRlciI6 DQoJCQkJCSRvdXQgLj0gdGQocmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8x OjApKS5pZWRfcGx1Z2luX2dUeHQoJ291dHB1dF9jb2RlX2ZpcnN0JykuIiAiIC4gcmFkaW8o JGFbJ25hbWUnXSwxLCgoJGFbJ3ZhbCddPT0xKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ291 dHB1dF9oZWxwX2ZpcnN0JykuIiAiKTsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAiaWVkX3Bs dWdpbl9lZGl0b3Jfd2lkdGgiOg0KCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRh WyduYW1lJ10sICRhWyd2YWwnXSwgJ2VkaXQnLCAnJywgJycsIDUsICcnLCAkYVsnbmFtZSdd KSk7DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQkJZWNobyB0cigkb3V0KTsNCgkJfQ0KCQllY2hv IHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7DQoJCWVjaG8gJzwvZm9ybT4nOw0KCX0g ZWxzZSBpZiAoJG51bVJvd3MgPiAwICYmICRudW1Sb3dzIDwgJG51bVJlcVByZWZzKSB7DQoJ CWVjaG8gdHIodGRhKHN0cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAn IGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRkYShzdHJvbmcoaWVkX3BsdWdpbl9nVHh0 KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJCQkuaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19z b21lX2V4cGxhaW4nKS5ici5icg0KCQkJCQkJLmllZF9wbHVnaW5fZ1R4dCgncHJlZnNfc29t ZV9vcHRpb25zJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRidG5SZW1v dmUsJGJ0blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfSBlbHNl IHsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfdGl0bGUn KSksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKGllZF9wbHVnaW5fZ1R4dCgn cHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIiJykpOw0KCQllY2hvIHRyKHRk YSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7DQoJfQ0KCWVjaG8gZW5kVGFibGUoKTsNCg0K CWVjaG8gPDw8RU9GDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgaWVk X3BsdWdpbl9wYXRoX3JlID0gbmV3IFJlZ0V4cCgiXi4qWy9cXF0iLCAiZyIpDQpmdW5jdGlv biBpZWRfcGx1Z2luX3ByZWZzd2FwKHNlbElELCBzZWxWYWx1ZSkgew0KCXZhciBpZCA9IHNl bElEKydfcGF0aCc7DQoJdmFyIG51dmFsID0gKChiYXNlbmFtZSgkKCIjIitpZCkudmFsKCkp ID09IHNlbFZhbHVlKSA/ICQoIiMiK2lkKS52YWwoKSA6IGRpcm5hbWUoJCgiIyIraWQpLnZh bCgpKStzZWxWYWx1ZSk7DQoJaWYgKCQoIiMiK3NlbElEKVswXS5zZWxlY3RlZEluZGV4ID09 IDApIHsNCgkJJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7IDsNCgl9IGVsc2Ug ew0KCQkkKCIjIitpZCkuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7IDsNCgkJJCgiIyIraWQp LnZhbChudXZhbCk7DQoJfQ0KfQ0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgc3VmZml4KSB7 DQoJcmV0dXJuIHBhdGgucmVwbGFjZShpZWRfcGx1Z2luX3BhdGhfcmUsICcnKTsNCn0NCmZ1 bmN0aW9uIGRpcm5hbWUocGF0aCkgew0KCXJldHVybiBwYXRoLm1hdGNoKGllZF9wbHVnaW5f cGF0aF9yZSk7DQp9DQokKGZ1bmN0aW9uKCkgew0KCSQoInNlbGVjdC5saXN0IikuZWFjaChm dW5jdGlvbigpIHsNCgkJaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVl KTsNCgl9KTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0Y7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIGllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCgkc2hvd3BhbmU9JzEnKSB7DQoJZ2xvYmFs ICRpZWRfcGx1Z2luX3ByZWZzOw0KCSRtZXNzYWdlID0gJyc7DQoJZm9yZWFjaCAoJGllZF9w bHVnaW5fcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKCFmZXRjaCgnbmFt ZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0gc2FmZV9pbnNlcnQo J3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYp KS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJpZWRfcGx1Z2lu IicpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3NhZ2UgPSBpZWRfcGx1 Z2luX2dUeHQoJ3ByZWZzX2luc3RhbGxlZCcpOw0KCQlpZWRfcGx1Z2luX3NldHVwKCcnLCcn LCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5f cHJlZnNfcmVtb3ZlKCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJl ZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3BsdWdp bl9wcmVmc1swXSwkaWVkX3BsdWdpbl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsN CgkJaWYgKGZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkk aWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgk cHJlZikpKTsNCgkJfQ0KCX0NCglpZiAoJHNob3dwYW5lKSB7DQoJCSRtZXNzYWdlID0gaWVk X3BsdWdpbl9nVHh0KCdwcmVmc19kZWxldGVkJyk7DQoJCWllZF9wbHVnaW5fc2V0dXAoJycs JycsJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdp bl9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOw0KCSRtZXNz YWdlID0gJyc7DQoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgpKTsNCglmb3JlYWNoICgk aWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlpZiAoaXNzZXQo JHBvc3RbJHByZWZdKSkgew0KCQkJc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwgPSAn Ii4kcG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2goJHByZWYpLiInIGFuZCBw cmVmc19pZCA9IDEiKTsNCgkJfQ0KCX0NCgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2Vz X3NhdmVkJyk7DQoJaWVkX3BsdWdpbl9zZXR1cCgnJywnJywkbWVzc2FnZSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJh eSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2NhY2hlX25vdF9zZXQnID0+ICdBZHZhbmNl ZCBwcmVmICJwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IiBub3QgZGVmaW5lZCcsDQoJCSdjaGVj a190eXBlJyA9PiAnQ2hlY2sgeW91ciBwbHVnaW4gdHlwZSEnLA0KCQknY2hvb3NlX2ZpbGUn ID0+ICdZb3UgYXJlIHN1cHBvc2VkIHRvIGNob29zZSB0aGUgZmlsZSA7KScsDQoJCSdjb2Rl X2Rpc3QnID0+ICdQbHVnaW4gY29kZTxicj5mb3IgZGlzdHJpYnV0aW9uJywNCgkJJ2llZF9w bHVnaW5fY29tcG9zZXInID0+ICdQbHVnaW4gQ29tcG9zZXInLA0KCQknY29tcHJlc3MnID0+ ICdaaXAnLA0KCQknY3JlYXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcgcGx1Z2luJywNCgkJJ2Vk aXRfbmV3JyA9PiAnRWRpdCB5b3VyIG5ldyBwbHVnaW4nLA0KCQknZW5hYmxlJyA9PiAnRW5h YmxlZCcsDQoJCSdleHBvcnQnID0+ICdFeHBvcnQgYXMnLA0KCQknZmxhZ19oYXNfcHJlZnMn ID0+ICdIYXMgcHJlZnMnLA0KCQknZmxhZ19saWZlY3ljbGVfbm90aWZ5JyA9PiAnRXZlbnQg bm90aWZ5JywNCgkJJ2ZsYWdzJyA9PiAnRmxhZ3MnLA0KCQknaWVkX3BsdWdpbl9lZGl0b3In ID0+ICdQbHVnaW4gZWRpdG9yJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+ICdQ bHVnaW4gZWRpdG9yIHBhdGggVVJMJywNCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJyA9 PiAnUGx1Z2luIGVkaXRvciB3aWR0aCAoY2hhcnMpJywNCgkJJ2llZF9wbHVnaW5faGVscF9l ZGl0b3InID0+ICdIZWxwIGVkaXRvcicsDQoJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3Bh dGgnID0+ICdIZWxwIGVkaXRvciBwYXRoIFVSTCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9v cmRlcicgPT4gJ1BIUCBleHBvcnQgb3JkZXInLA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGUnID0+ICdFeHBvcnQgcGx1Z2luIGZpbGVuYW1lIGZvcm1hdCcsDQoJCSdpZWRfcGx1Z2lu X291dHB1dF9zZmlsZWMnID0+ICdFeHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3JtYXQn LA0KCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAnUGx1Z2luIHRlbXBsYXRlIGZp bGVuYW1lIGZvcm1hdCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZScgPT4gJ0Nh Y2hlIHRleHRpbGVkIGhlbHAgaGVyZScsDQoJCSdqdW1wX3RvX2xpbmUnID0+ICdKdW1wIHRv IGxpbmU6JywNCgkJJ25hbWUnID0+ICdQbHVnaW4gbmFtZScsDQoJCSduYW1lX2ZpcnN0JyA9 PiAnWW91IGFyZSBzdXBwb3NlZCB0byBuYW1lIHRoZSBwbHVnaW4gOyknLA0KCQknbmFtZV90 b29sdGlwJyA9PiAnT25seSBuZWVkZWQgaWYgdGhlIFBIUCBmaWxlIHlvdSBhcmUgdXBsb2Fk aW5nIGlzIE5PVCBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0JywNCgkJJ2xvYWRf b3JkZXInID0+ICdMb2FkIG9yZGVyJywNCgkJJ2xvYWRfb3JkZXJfaGVscCcgPT4gJygxPWZp cnN0LCA1PW5vcm1hbCwgOT1sYXN0KScsDQoJCSdvdXRwdXRfY29kZV9maXJzdCcgPT4gJ0Nv ZGUgZmlyc3QnLA0KCQknb3V0cHV0X2hlbHBfZmlyc3QnID0+ICdIZWxwIGZpcnN0JywNCgkJ J3BsdWdpbl9jb2RlJyA9PiAnU291cmNlIGNvZGUnLA0KCQkncHJlZnNfZGVsZXRlZCcgPT4g J1ByZWZlcmVuY2VzIGRlbGV0ZWQnLA0KCQkncHJlZnNfaW5zdGFsbGVkJyA9PiAnUHJlZmVy ZW5jZXMgaW5zdGFsbGVkJywNCgkJJ3ByZWZzX25vdF9pbnN0YWxsZWQnID0+ICdQcmVmZXJl bmNlcyBub3QgaW5zdGFsbGVkLicsDQoJCSdwcmVmc19zb21lJyA9PiAnTm90IGFsbCBwcmVm ZXJlbmNlcyBhdmFpbGFibGUuJywNCgkJJ3ByZWZzX3NvbWVfZXhwbGFpbicgPT4gJ0l0IGlz IGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUnLmJy LidwbHVnaW4gdG8gb25lIHlvdSBoYWQgYmVmb3JlIG9yIHRoZSBwcmVmZXJlbmNlcycuYnIu J2hhdmUgYmVjb21lIGNvcnJ1cHQgc29tZWhvdy4nLA0KCQkncHJlZnNfc29tZV9vcHRpb25z JyA9PiAnQ2hvb3NlICcuZ1R4dCgnZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3Ig Jy5nVHh0KCdpbnN0YWxsJykuJyB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcg YWxsIGV4aXN0aW5nIHByZWZlcmVuY2VzIHVudG91Y2hlZC4nLA0KCQkncHJlZnNfdGl0bGUn ID0+ICdQbHVnaW4gQ29tcG9zZXIgcHJlZmVyZW5jZXMnLA0KCQkncmVuYW1lX2ZhaWxlZCcg PT4gJyAocmVuYW1lIGZhaWxlZCkgJywNCgkJJ3JlbmFtZV9maWxlJyA9PiAnUmVuYW1lIGZp bGUnLA0KCQkncmVuYW1lZCcgPT4gJyAocmVuYW1lZCkgJywNCgkJJ3Jlc3RvcmVfaGVscCcg PT4gJ1JvbGwgYmFjayB0aGUgcGx1Z2luIGNvZGUgdG8gdGhlIG1vc3QgcmVjZW50IHJlc3Rv cmUgcG9pbnQnLA0KCQkncmVzdG9yZV9wb2ludCcgPT4gJ1Jlc3RvcmUgcG9pbnQnLA0KCQkn cmVzdG9yZV92ZXJpZnknID0+ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcm9sbGJhY2sg dGhlIHtuYW1lfSBzb3VyY2UgY29kZSB0byBpdHMgbGFzdCByZXN0b3JlIHBvaW50PycsDQoJ CSdyZXN0b3JlZCcgPT4gJ1BsdWdpbiB7bmFtZX0gcmVzdG9yZWQuJywNCgkJJ3J1bl9mcm9t JyA9PiAnUGx1Z2lucyB0aGF0IHJ1biBmcm9tJywNCgkJJ3NhdmVfYXMnID0+ICdTYXZlIGFz JywNCgkJJ3NldHVwJyA9PiAnU2V0dXAnLA0KCQkndHlwZScgPT4gJ1BsdWdpbiB0eXBlJywN CgkJJ3R5cGVfMCcgPT4gJ0NsaWVudCcsDQoJCSd0eXBlXzEnID0+ICdBZG1pbiArIENsaWVu dCcsDQoJCSd0eXBlXzInID0+ICdMaWJyYXJ5JywNCgkJJ3R5cGVfMycgPT4gJ0FkbWluJywN CgkJJ3VwbG9hZF9waHAnID0+ICdVcGxvYWQgcGx1Z2luIGZyb20gUEhQIGZpbGUnLA0KCQkn dXRpbGl0aWVzJyA9PiAnVXRpbGl0aWVzICg8c3Ryb25nPnVzZSBvbmx5IGFmdGVyIHNhdmlu ZyB0aGUgZGF0YSBhYm92ZTwvc3Ryb25nPiknLA0KCSk7DQoJcmV0dXJuIHN0cnRyKCRsYW5n WyR3aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6NToib3JkZXIiO3M6 MToiNSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjQ6ImhlbHAiO3M6Mjg4NzQ6IjxkaXYgaWQ9 ImllZF9oZWxwIj4KCgk8aDE+SW5zcGlyZWQgcGx1Z2luIGNvbXBvc2VyPC9oMT4KCgk8cD5U aGlzIHBsdWdpbiBjcmVhdGVzIGEgbmV3IHBhZ2UgdW5kZXIgdGhlICYjODIxNjtFeHRlbnNp b25zJiM4MjE3OyB0YWIgd2hlcmUgeW91IGNhbiBlZGl0IHBsdWdpbnMgdGhhdCBhcmUgYWxy ZWFkeSBpbnN0YWxsZWQgaW4gVGV4dHBhdHRlcm4gYW5kIHJlZ2lzdGVyIG5ldyBwbHVnaW5z LjwvcD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5D cmVhdGUsIGVkaXQgb3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCB0 aGVuIHB1Ymxpc2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gcGx1Z2luIGZvcm1hdCAoc2VlIGFuIDxhIGhyZWY9Imh0dHA6Ly9z dGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZXhhbXBsZV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5l eGFtcGxlPC9hPik8L2xpPgoJCTxsaT5GdWxsIHN1cHBvcnQgZm9yIHRoZSBvZmZpY2lhbCA8 YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90 ZW1wbGF0ZS50eHQiPnplbV90cGwucGhwIHBsdWdpbiB0ZW1wbGF0ZTwvYT4uIFRoZSA8YSBo cmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1w bGF0ZV9jb2RlX2ZpcnN0LnR4dCI+bW9kaWZpZWQgdmVyc2lvbjwvYT4gYnkgPGEgaHJlZj0i aHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1 Z2luLWNvbXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIx NjtzdHlsZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0 ZXh0LiBUaGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBzZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0g YWNjb3JkaW5nbHkuIEl0IHdpbGwgYWxzbyByZWFkIDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48 L3NwYW4+ICRMYXN0Q2hhbmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVy KTwvbGk+CgkJPGxpPkV4cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLCBh bGxvd2luZyB5b3UgdG8gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNv bXBvc2VyIG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmls ZSBpbiB0aGUgcGx1Z2luX2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBv c2VyIGFuZCBwdWJsaXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUg Ym90dG9tIG9mIHRoZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBh Z2UiPkVkaXQgcGFnZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNh dmUgeW91ciBjaGFuZ2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRo ZSBjb2RlISBZb3UgY2FuIGV4cG9ydCBhczoKCTx1bD4KCQk8bGk+YSBzdGFuZGFyZCBCQVNF NjQtZW5jb2RlZCB0ZXh0IGZpbGU8L2xpPgoJCTxsaT5hIGd6aXBwZWQgdmVyc2lvbiAodXNl ZnVsIGZvciBsYXJnZSBwbHVnaW5zKTwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0 YW5kYXJkIHRlbXBsYXRlIGZvcm1hdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPldoZW4gZXhw b3J0aW5nLCBmaWxlcyBjYW4gYmUgc2F2ZWQgd2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sg Zmlyc3Qgb3IgdGhlIGhlbHAgYmxvY2sgZmlyc3QsIGFuZCB5b3UgY2FuIGNoYW5nZSB0aGUg b3V0cHV0IGZpbGVuYW1lIGZvcm1hdCB0byB0YXN0ZS4gVXNlIHRoZSA8YSBocmVmPSIjc2V0 dXBwYWdlIj5TZXR1cCBidXR0b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBv cnQgZm9yIGFsbCBwbHVnaW4gdHlwZXM6Cgk8dWw+CgkJPGxpPkNsaWVudCArIEFkbWluPC9s aT4KCQk8bGk+Q2xpZW50LXNpZGUgb25seTwvbGk+CgkJPGxpPkFkbWluLXNpZGUgb25seTwv bGk+CgkJPGxpPkxpYnJhcnkgcGx1Z2luczwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPlN1cHBv cnQgZm9yIHNwZWNpZnlpbmcgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBpZiB5 b3VyIHBsdWdpbiBuZWVkcyBzcGVjaWFsIHBvd2Vycy4gJiM4MjE2OzUmIzgyMTc7IGlzIHRo ZSBkZWZhdWx0LiBOb3RlIHRoYXQgaWYgdXNpbmcgdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3Rv cnkgdGhpcyBmZWF0dXJlIGlzIDxlbT5vbmx5IGF2YWlsYWJsZSBpZiB0aGUgPGNvZGU+JHBs dWdpblsmIzM5O29yZGVyJiMzOTtdPC9jb2RlPiBzdHJpbmcgaXMgaW4gdGhlIHRlbXBsYXRl IHRvIGJlZ2luIHdpdGguPC9lbT4gU28gaWYgeW91ciBsb2FkIG9yZGVyIGtlZXBzIHJldHVy bmluZyB0byAmIzgyMTY7NSYjODIxNzssIGVkaXQgeW91ciB0ZW1wbGF0ZSBkaXJlY3RseSB0 byBhZGQgdGhhdCBzdHJpbmcgb3IgcGFzdGUgeW91ciBwbHVnaW4gaW50byB0aGUgcmVsZXZh bnQgcGFydHMgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9h ZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlLnR4dCI+ZW1wdHkgcGx1Z2luIHRlbXBsYXRlPC9h PiBhbmQgdXBsb2FkIGl0PC9saT4KCQk8bGk+SGVscCB0ZXh0IGNhbiBiZSB3cml0dGVuIGlu IFRleHRpbGUgb3IgKFgpSFRNTC4gU3R5bGVzIGNhbiBiZSBhZGRlZCB0byB0aGUgaGVscCBz ZWN0aW9uPC9saT4KCQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMzA4OSI+VGlueU1D RSA8c3BhbiBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj4gZWRpdG9yPC9hPiBmb3IgdGhl IGhlbHAgc2VjdGlvbiBvciA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2pl Y3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD0xNjQwMDgiPkVkaXQgQXJlYTwvYT4gZm9yIGNv ZGUgbWFya3VwICh0aGFua3MgdmFyaWFhcykuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFn ZSI+c2V0dXA8L2E+IGFuZCA8YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPiBzZWN0aW9ucyBm b3IgbW9yZSBvbiB0aGVzZSBlZGl0b3JzPC9saT4KCQk8bGk+QnVpbHQtaW4gVGV4dGlsZSBo ZWxwIHZpZXdlciAodGhhbmtzIHRvIG5ldC1jYXJ2ZXImIzgyMTc7cyA8YSBocmVmPSJodHRw Oi8vdHhwLXBsdWdpbnMubmV0Y2FydmluZy5jb20vcGx1Z2lucy9wbHVnaW4taGVscC12aWV3 ZXIiPlBsdWdpbiBIZWxwIFZpZXdlcjwvYT4pIHRvIGFsbG93IHlvdSB0byBwcmV2aWV3IHlv dXIgSGVscCB0ZXh0IGR1cmluZyBkZXZlbG9wbWVudCAodGhlIHR3byB2aWV3ZXJzIHdpbGwg aGFwcGlseSBjby1leGlzdCBpZiB5b3Ugd2lzaCk8L2xpPgoJCTxsaT5SZXNpemFibGUgdGV4 dGFyZWEsIHBsdXMgY2hhcmFjdGVyIGxpbWl0L2NvdW50ZXJzIHNvIHRoZXJlJiM4MjE3O3Mg bGVzcyBjaGFuY2Ugb2YgeW91IG1ha2luZyB0aGUgcGx1Z2luIG9yIGRvY3MgdG9vIGJpZyB0 byBmaXQgaW4gdGhlIGRhdGFiYXNlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3Igc2V0dGluZyBh IGNvZGUgJiM4MjIwO3Jlc3RvcmUgcG9pbnQmIzgyMjE7IGFuZCByb2xsaW5nIGJhY2sgdG8g dGhhdCBwb2ludCBpZiB0aGluZ3MgZ28gc2lkZXdheXMuIEFsc28gdXNlZnVsIGZvciByZXR1 cm5pbmcgcGx1Z2luIHNvdXJjZSBjb2RlIHRvIGl0cyBhcy1pbnN0YWxsZWQgc3RhdGU8L2xp PgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvcnMiPkF1dGhvcnM8L2gyPgoKCTxwPk9yaWdpbmFs IHBsdWdpbjogPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvZmVlZGJhY2svIj5Z dXJhIExpbm55azwvYT48YnIgLz4KTW9kaWZpY2F0aW9ucyAodjAuNSspOiA8YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPjxiciAv PgpBIHRvdWNoIG9mIGNsYXNzOiA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0Y2Fy dmluZy5jb20vY29udGFjdCI+U3RldmUgRGlja2luc29uPC9hPjxiciAvPgpQbHVzIGhlbHAg ZnJvbSBhIGhvc3Qgb2YgZm9ydW0gY29udHJpYnV0b3JzIHRvbyBudW1lcm91cyB0byBtZW50 aW9uLiBZb3Uga25vdyB3aG8geW91IGFyZSA7LSk8L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5J bnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9InJlcXVpcmVk Ij5SZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiA0LjIuMCs8L3A+CgoJ PHA+RG93bmxvYWQgdGhlIHBsdWdpbiAodjAuNSBhbmQgYWJvdmUpIGZyb20gPGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zdGVmZGF3c29uLmNvbTwvYT4gKHByZXZpb3Vz IHZlcnNpb25zIGFyZSBzdGlsbCBhdmFpbGFibGUgb24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9p bnNwaXJlZC5raWV2LnVhL3R4cC9pZWRfcGx1Z2luX2NvbXBvc2VyIj5JbnNwaXJlZCBob21l cGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+ VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UsIGluc3RhbGwgYW5kIGVuYWJs ZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5UaGUgZGVmYXVsdCBwcmVmZXJlbmNlcyBhcmUgYXV0 b21hdGljYWxseSBpbnN0YWxsZWQuIFZpc2l0IHRoZSBFeHRlbnNpb25zIC0mZ3Q7IFBsdWdp biBDb21wb3NlciB0YWIgYW5kIGNsaWNrIHRoZSBTZXR1cCBidXR0b24gaW4gdGhlIHRvcC1y aWdodCBvZiB0aGUgc2NyZWVuIHRvIHJlaW5zdGFsbCwgZGVsZXRlIGFuZCBzYXZlIHRoZSBw bHVnaW4gcHJlZmVyZW5jZXMuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAg c2VjdGlvbjwvYT4gZm9yIGRldGFpbHMuPC9wPgoKCTxwPlRvIHJlbW92ZSB0aGUgUGx1Z2lu IENvbXBvc2VyIChub29vbyEpIHNpbXBseSBkZWxldGUgdGhlIHBsdWdpbiBhcyBub3JtYWwg ZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLiBBbGwgdGhlIHByZWZlcmVuY2Vz IHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkIGFzIHdlbGwuIDxzcGFuIGNsYXNzPSJj YXBzIj5OT1RFPC9zcGFuPjogZGVsZXRpbmcgdGhlIHBsdWdpbiBmcm9tIHRoZSBwbHVnaW4g Y29tcG9zZXIgd2luZG93IGl0c2VsZiA8ZW0+d2lsbCBub3Q8L2VtPiBkZWxldGUgdGhlIHBy ZWZlcmVuY2VzLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPGgzIGlkPSJs aXN0cGFnZSI+TGlzdCBwYWdlPC9oMz4KCgk8cD5UaGVyZSBpcyBhIDxhIGhyZWY9IiNzZXR1 cHBhZ2UiPnNldHVwPC9hPiBidXR0b24gdG8gYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSB2YXJp b3VzIG9wdGlvbnMgaW4gdGhlIENvbXBvc2VyLCB0aGUgcmVzdCBvZiB0aGUgcGFnZSBsaXN0 cyBhbGwgaW5zdGFsbGVkIHBsdWdpbnMuIFRoZSBjb2x1bW5zIGFyZTo8L3A+CgoJPHVsPgoJ CTxsaT48c3Ryb25nPlBsdWdpbjwvc3Ryb25nPiA6IGNsaWNrIHRoZSBwbHVnaW4gbmFtZSB0 byA8YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQ8L2E+IGl0LiBJZiB0aGUgcGx1Z2luIGhhcyBw cmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggaXQsIHlvdSB3aWxsIGFsc28gc2VlIGFuIDxl bT5bT3B0aW9uc108L2VtPiBsaW5rPC9saT4KCQk8bGk+PHN0cm9uZz5BdXRob3I8L3N0cm9u Zz4gOiBpZiBhdmFpbGFibGUsIGNsaWNrIHRoZSBhdXRob3IgdG8gZ28gdG8gdGhlaXIgc2l0 ZTwvbGk+CgkJPGxpPjxzdHJvbmc+VmVyc2lvbiAoTW9kaWZpZWQpPC9zdHJvbmc+IDogc2hv d3MgdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgYW5kIHdoZXRoZXIgdGhlIHBsdWdpbiBo YXMgYmVlbiBtb2RpZmllZCBmcm9tIHdoZW4gaXQgd2FzIGVpdGhlciBjcmVhdGVkIG9yIGlu c3RhbGxlZC4gSWYgaXQgaGFzLCB5b3UgY2FuIGNsaWNrIHRoZSB2ZXJzaW9uIG51bWJlciB0 byByZXN0b3JlIHRoZSBwbHVnaW4gY29kZSB0byBpdHMgaW5zdGFsbGVkIHN0YXRlIG9yIGxh c3QgPGEgaHJlZj0iI3Jlc3RvcmUiPnJlc3RvcmUgcG9pbnQ8L2E+PC9saT4KCQk8bGk+PHN0 cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IGJyaWVmbHksIHdoYXQgdGhlIHBsdWdpbiBk b2VzPC9saT4KCQk8bGk+PHN0cm9uZz5QdWJsaXNoPC9zdHJvbmc+IDogdGhyZWUgbGlua3MK CTx1bD4KCQk8bGk+PGVtPlB1Ymxpc2g8L2VtPiA6IGV4cG9ydHMgdGhlIHBsdWdpbiBhcyBh IC50eHQgZmlsZSBmb3IgZGlzdHJpYnV0aW9uIHRvIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJz PC9saT4KCQk8bGk+PGVtPlppcDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2luIGFzIGEgY29t cHJlc3NlZCAoZ3ppcHBlZCkgLnR4dCBmaWxlIGZvciBkaXN0cmlidXRpb248L2xpPgoJCTxs aT48ZW0+SGVscDwvZW0+IDogZGlzcGxheXMgdGhlICh0ZXh0aWxlIHByb2Nlc3NlZCkgcGx1 Z2luIGRvY3VtZW50YXRpb24sIGlmIHRoZXJlIGlzIGFueS4gQ2FuIGFsc28gYmUgdmlld2Vk IGZyb20gdGhlIEVkaXQgcGFnZTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+T3Jk ZXI8L3N0cm9uZz4gOiB0aGUgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3JkZXIgZnJvbSAx IChsb2FkZWQgZmlyc3QpIHRvIDkgKGxvYWRlZCBsYXN0KS4gNSBpcyBkZWZhdWx0PC9saT4K CQk8bGk+PHN0cm9uZz5BY3RpdmU8L3N0cm9uZz4gOiBlbmFibGUgb3IgZGlzYWJsZSBhIHBs dWdpbiBieSBjbGlja2luZyBlbnRyaWVzIGluIHRoaXMgY29sdW1uICYjODIxMjsgdGhpcyB3 aWxsIDxlbT5ub3Q8L2VtPiB0cmlnZ2VyIGFueSBlbmFibGVkL2Rpc2FibGVkIG5vdGlmaWNh dGlvbiBldmVudCBpbiB5b3VyIHBsdWdpbi4gVXNlIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5z IHRhYiBmb3IgdGVzdGluZyB0aGlzPC9saT4KCQk8bGk+PHN0cm9uZz54PC9zdHJvbmc+IDog ZGVsZXRlIHRoZSBwbHVnaW4gJiM4MjEyOyB0aGlzIHdpbGwgPGVtPm5vdDwvZW0+IHRyaWdn ZXIgdGhlICYjODIxNjtkZWxldGVkJiM4MjE3OyBub3RpZmljYXRpb24gZXZlbnQuIFVzZSB0 aGUgQWRtaW4gLSZndDsgUGx1Z2lucyB0YWIgZm9yIHRlc3RpbmcgdGhpczwvbGk+Cgk8L3Vs PgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIHBsdWdpbl9jYWNoZV9kaXIgKEFkbWluIC0m Z3Q7IEFkdmFuY2VkIFByZWZzKSwgYW55IHBsdWdpbnMgaW4gdGhlIHN0YW5kYXJkIHRlbXBs YXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIGF2YWlsYWJs ZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQgdGVzdGluZy4gWW91IGNhbiBlZGl0IGFu ZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0aGUgcmVndWxh ciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRp b25zOjwvcD4KCgk8b2w+CgkJPGxpPlRoZXJlIGlzIG5vIGNvbmNlcHQgb2YgJiM4MjE2O21v ZGlmaWVkJiM4MjE3OyBvciBvZiByZXN0b3JlIHBvaW50cyBhcyB0aGUgZmlsZXMgYWx3YXlz IHJlcHJlc2VudCB0aGUgbW9zdCB1cC10by1kYXRlIHZlcnNpb248L2xpPgoJCTxsaT5DYWNo ZWQgcGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5cyBvbiYjODIyMTsgYW5kIGRvIG5vdCBuZWVk IHRvIGJlIGluc3RhbGxlZC4gVG8gZGVhY3RpdmF0ZSB0aGUgcGx1Z2luIHRoZSBmaWxlIG11 c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5PC9saT4KCQk8 bGk+SXQgZm9sbG93cyB0aGF0IHRoZSAmIzgyMTY7aW5zdGFsbGVkJiM4MjE3OyBub3RpZmlj YXRpb24gZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBmcm9tIHBsdWdpbnMgaW4gdGhlIGNhY2hl IGRpcmVjdG9yeTwvbGk+CgkJPGxpPlRoZSByZWNvbW1lbmRlZCBsb2FkIG9yZGVyIGNhbm5v dCBiZSBjaGFuZ2VkIGZyb20gdGhlIGxpc3QgcGFnZTsgaXQgY2FuIG9ubHkgYmUgYWx0ZXJl ZCB2aWEgdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwvYT4gcGFnZS4gVGhlIGxvYWQg b3JkZXIgaXMgb25seSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiB0aGUgcGx1Z2luIGlzIGV4 cG9ydGVkPC9saT4KCTwvb2w+CgoJPGgzPkNyZWF0aW5nIGFuZCBuYW1pbmcgcGx1Z2luczwv aDM+CgoJPHA+VGhlcmUgYXJlIHR3byB3YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJvbSB0 aGUgUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4gVGhlIGZpcnN0IGlzIHRvIGNyZWF0ZSBh IGJsYW5rLCBlbXB0eSBwbHVnaW47IHVzZSB0aGUgdGV4dCBib3ggYXQgdGhlIHRvcCBmb3Ig dGhpcy4gUG9pbnRzIHRvIG5vdGU6PC9wPgoKCTx1bD4KCQk8bGk+SWYgeW91IHVzZSBhIHN0 YW5kYXJkIHBsdWdpbiBuYW1lIChlLmcuIDxjb2RlPmFiY19teV9wbHVnaW48L2NvZGU+KSBp dCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRhdGFiYXNlPC9saT4KCQk8bGk+SWYgeW91IGFk ZCA8Y29kZT4ucGhwPC9jb2RlPiB0byB0aGUgcGx1Z2luIG5hbWUsIGl0IHdpbGwgYmUgY3Jl YXRlZCBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBpbiBhIHN0YW5kYXJkIHRlbXBs YXRlIGZvcm1hdDwvbGk+CgkJPGxpPkF2b2lkIHNwZWNpZnlpbmcgdGhlIHZlcnNpb24gb2Yg dGhlIHBsdWdpbiBpbiB0aGUgbmFtZSAmIzgyMTI7IHlvdSBzaG91bGQgdXNlIHRoZSA8ZW0+ UmVuYW1lIGZpbGU8L2VtPiBvciA8ZW0+RXhwb3J0PC9lbT4gb3B0aW9ucyBpbiB0aGUgRWRp dCBwYWdlIHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBpbnRvIHlvdXIgcHJlZmVycmVkIGZpbGVu YW1lIGZvcm1hdCAoc2VlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9hPik8L2xpPgoJ PC91bD4KCgk8cD5UaGUgc2Vjb25kIG1ldGhvZCBvZiBjcmVhdGluZyBhIHBsdWdpbiBpcyB0 byB1cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93c2UvdXBsb2FkIGJveCBhdCB0aGUgYm90dG9t IG9mIHRoZSBsaXN0LiBQbGVhc2Ugbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5Zb3UgY2FuIHVw bG9hZCBjb2RlIGluIGVpdGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUgZm9ybWF0IChl aXRoZXIgY29kZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRoIDxzcGFuIGNs YXNzPSJjYXBzIj5DU1M8L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2FkIGEgPHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUgb25seTwvbGk+ CgkJPGxpPlRoZSBwbHVnaW4gd2lsbCBhbHdheXMgYmUgaW5zdGFsbGVkIGluIHRoZSBkYXRh YmFzZSB3aGVuIHVzaW5nIHRoaXMgbWV0aG9kICh1cGxvYWQgdGhlIHRlbXBsYXRlIG1hbnVh bGx5IHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBvciBjcmVhdGUgYSBuZXcg b25lIHdpdGggYSAucGhwIGV4dGVuc2lvbiBhbmQgcGFzdGUgdGhlIGNvZGUgaW50byBpdCBp ZiB5b3Ugd2FudCBpdCBpbiB0aGUgcGx1Z2luIGNhY2hlKTwvbGk+CgkJPGxpPklmIHRoZSBw bHVnaW4gZXhpc3RzIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHlvdXIgbmV3IGluZm88L2xp PgoJCTxsaT5UaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHlvdSBjYW4gdXBsb2FkIHJhdyA8c3Bh biBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB3aXRoIHRoZSA8Y29kZT4mbHQ7P3BocCA/Jmd0 OzwvY29kZT4gbWFya2Vycy4gRXZlcnl3aGVyZSBlbHNlIHlvdSBzaG91bGQgdXNlIGEgZnVs bCB0ZW1wbGF0ZTwvbGk+Cgk8L3VsPgoKCTxwPkV2ZXJ5IHBsdWdpbiBzaG91bGQgYmUgY3Jl YXRlZCB3aXRoIGEgdGhyZWUtbGV0dGVyIHByZWZpeCwgYW4gdW5kZXJzY29yZSwgdGhlbiB0 aGUgbmFtZSBvZiB0aGUgcGx1Z2luLiBZb3UgYXJlIGZyZWUgdG8gY2hvb3NlIHlvdXIgb3du IHRocmVlLWxldHRlciBwcmVmaXggKHVzdWFsbHkgeW91ciBpbml0aWFscykgc3ViamVjdCB0 byA8YSBocmVmPSJodHRwOi8vd3d3LnRleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90 aXRsZT1SZXNlcnZlZF9QbHVnaW5fUHJlZml4ZXMiPmF2b2lkaW5nIG9uZXMgYWxyZWFkeSB0 YWtlbiBieSBvdGhlciBwbHVnaW4gYXV0aG9yczwvYT4gc28gcGVvcGxlIGNhbiBnZXQgdG8g a25vdyB5b3VyIHdvcmsuIFBsdXMsIGl0IGdyb3VwcyB5b3VyIHBsdWdpbnMgdG9nZXRoZXIg aW4gdGhlIHBsdWdpbiBhcmNoaXZlLjwvcD4KCgk8cD5BbGwgZnVuY3Rpb25zLCB2YXJpYWJs ZXMgKGluY2x1ZGluZyA8c3BhbiBjbGFzcz0iY2FwcyI+RE9NPC9zcGFuPiBub2RlcyksIDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzZXMsIGFuZCBhbnl0aGluZyBlbHNl IHlvdSBpbmplY3QgaW50byB0aGUgZ2xvYmFsIHNjb3BlIHNob3VsZCBiZSBwcmVmaXhlZCBi eSA8c3Ryb25nPmF0IGxlYXN0PC9zdHJvbmc+IHlvdXIgdGhyZWUgbGV0dGVyIGNvZGU7IHBy ZWZlcmFibHkgdGhlIHdob2xlIHBsdWdpbiBuYW1lIChvciBhYnJpZGdlZCB2ZXJzaW9uIHRo ZXJlb2YpIHRvIGF2b2lkIG5hbWVzcGFjZSBjbGFzaGVzIHdpdGggeW91ciBvd24gYW5kIG90 aGVyIHBsdWdpbnMuPC9wPgoKCTxoMyBpZD0iZWRpdHBhZ2UiPkVkaXQgcGFnZTwvaDM+CgoJ PHA+VGhlIEVkaXQgcGFnZSBpcyB3aGVyZSB5b3UgY3JhZnQgeW91ciBtYXN0ZXJwaWVjZS4g SXQgaXMgZGl2aWRlZCBpbnRvIHZhcmlvdXMgc2VjdGlvbnMgYW5kIGJveGVzLCBhcyBkZXRh aWxlZCBoZXJlOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luPC9zdHJvbmc+IDog dGhlIG5hbWUgb2YgeW91ciBwbHVnaW4sIHdoaWNoIHlvdSBjYW4gY2hhbmdlIGF0IGFueSB0 aW1lLiBOb3RlIHRoYXQgaWYgeW91IGFyZSBlZGl0aW5nIGEgZmlsZSBmcm9tIHRoZSBwbHVn aW4gY2FjaGUgZGlyZWN0b3J5IGFuZCB0aGUgPGNvZGU+JHBsdWdpblsmIzM5O25hbWUmIzM5 O108L2NvZGU+IHJvdyBpcyBjb21tZW50ZWQgb3V0IGluIHRoZSBmaWxlLCB5b3Ugd2lsbCBu b3QgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHBsdWdpbiBuYW1lOyBpdCB3aWxsIGFsd2F5cyBi ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZS48YnIgLz4KVG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94 IHdpbGwgYmUgb25lIG9mIHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9uZz5FbmFibGU8 L3N0cm9uZz4gOiBpZiB0aGUgcGx1Z2luIGlzIGEgcmVndWxhciAoaW5zdGFsbGVkKSBwbHVn aW4sIHRoaXMgY2hlY2tib3ggYWxsb3dzIHlvdSB0byBzd2l0Y2ggdGhlIHBsdWdpbiBvbiBh bmQgb2ZmPC9saT4KCQk8bGk+PHN0cm9uZz4oZmlsZSBuYW1lKTwvc3Ryb25nPiA6IGlmIHlv dSBhcmUgZWRpdGluZyBhIHBsdWdpbiBpbiB0aGUgY2FjaGUgZGlyZWN0b3J5LCB0aGUgY3Vy cmVudCBmaWxlbmFtZSB5b3UgYXJlIHdyaXRpbmcgdG8gd2lsbCBiZSBkaXNwbGF5ZWQgaW5z dGVhZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+U291cmNlIGNvZGU8L3N0cm9u Zz4gOiB5b3VyIHBsdWdpbiBjb2RlIGdvZXMgaGVyZS4gVGhlIGJveCBpcyByZXNpemFibGUg YnkgZ3JhYmJpbmcgdGhlIDxjb2RlPi0tLSArIC0tLTwvY29kZT4gYmVsb3cgdGhlIGJveCBh bmQgZHJhZ2dpbmcuIFRoZSBib3ggc2l6ZSB3aWxsIGJlIHJlbWVtYmVyZWQgdmlhIGEgY29v a2llIGZvciAzMCBkYXlzIGZyb20geW91ciBsYXN0IGFkanVzdG1lbnQuPGJyIC8+ClBsdWdp bnMgYXJlIGxpbWl0ZWQgdG8gMTZNYiBvZiBjb2RlIHNvIHRoZXJlIGlzIGFsc28gYSBjaGFy YWN0ZXIgY291bnRkb3duIGp1c3QgYmVsb3cgdGhlIGVkaXQgYm94LiBJZiB5b3Ugc3RhcnQg YXBwcm9hY2hpbmcgdGhlIGxpbWl0KCEpLCBpdCBtaWdodCBiZSB3b3J0aCBjb25zaWRlcmlu ZyBzcGxpdHRpbmcgeW91ciBwbHVnaW4gaW50byBhIGZldyBwYXJ0cyBvciB3b3JraW5nIGZv ciBNaWNybyRvZnQsIHdoZXJlIGNvZGUgYmxvYXQgaXMgYWNjZXB0YWJsZTxiciAvPgpJbiBG aXJlZm94IGFuZCBJRTcrIHlvdSBjYW4gdXNlIHRoZSA8ZW0+SnVtcCB0byBsaW5lOjwvZW0+ IHRleHRib3guIEVudGVyIGEgbGluZSBudW1iZXIgYW5kIHByZXNzIEVudGVyIHRvIGp1bXAg dG8gdGhhdCBsaW5lIGluIHRoZSBjb2RlLiBJbiBvdGhlciBicm93c2VycywgeW1tdjwvbGk+ CgkJPGxpPjxzdHJvbmc+UGx1Z2luIHR5cGU8L3N0cm9uZz4gOiBjaG9vc2Ugb25lIG9mIHRo ZSB0eXBlcyB0aGF0IGJlc3QgZml0cyB0aGUgaW50ZW5kZWQgdXNlIG9mIHlvdXIgcGx1Z2lu LiBJZiB5b3UgY2hvb3NlICYjODIxNjtDbGllbnQmIzgyMTc7IGFuZCB0cnkgdG8gYWNjZXNz IHRoZSBhZG1pbiBzaWRlIGluIHlvdXIgY29kZSwgYSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVk IHdoZW4gdGhlIHBsdWdpbiBpcyBzYXZlZCBzbyB5b3UgY2FuIGNob29zZSBhIG1vcmUgYXBw cm9wcmlhdGUgdHlwZTwvbGk+CgkJPGxpPjxzdHJvbmc+RmxhZ3M8L3N0cm9uZz4gOiBjaG9v c2Ugd2hpY2ggcGx1Z2luIGZsYWdzIGFyZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBs dWdpbjoKCTx1bD4KCQk8bGk+PHN0cm9uZz5IYXMgcHJlZnM8L3N0cm9uZz4gOiBjaGVjayB0 aGlzIHRvIGluZGljYXRlIHlvdXIgcGx1Z2luIHJlc3BvbmRzIHRvIHRoZSA8ZW0+cGx1Z2lu X3ByZWZzLnlvdXJfcGx1Z2luX25hbWU8L2VtPiBldmVudDwvbGk+CgkJPGxpPjxzdHJvbmc+ ZXZlbnQgbm90aWZ5PC9zdHJvbmc+IDogY2hlY2sgdGhpcyB0byBpbmRpY2F0ZSB5b3VyIHBs dWdpbiByZXNwb25kcyB0byB0aGUgPGVtPnBsdWdpbl9saWZlY3ljbGUueW91cl9wbHVnaW5f bmFtZTwvZW0+IGV2ZW50L3N0ZXBzPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+CjxzdHJvbmc+ TG9hZCBvcmRlcjwvc3Ryb25nPiA6IGNob29zZSB0aGUgcmVjb21tZW5kZWQgb3JkZXIgaW4g d2hpY2ggeW91IHRoaW5rIHlvdXIgcGx1Z2luIHNob3VsZCBiZSBsb2FkZWQgYnkgdXNlcnMu IE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBkZWZhdWx0IG9mICYjODIxNjs1JiM4MjE3OyBpcyBm aW5lIGJ1dCBmb3Igc3BlY2lhbCBjYXNlcyB3aGVyZSB5b3VyIHBsdWdpbiBoYXMgdG8gc2V0 IHVwIGFuIGVudmlyb25tZW50IG9yIGhhcyB0byB3YWl0IGZvciBvdGhlciBwbHVnaW5zIHRv IGxvYWQgZmlyc3QsIHlvdSBtaWdodCByZXF1aXJlIG9uZSBvZiB0aGUgbnVtYmVycyBlaXRo ZXIgc2lkZS4gQmUgYXdhcmUgdGhhdCB0aGlzIGlzIGEgPGVtPnJlY29tbWVuZGF0aW9uPC9l bT4gYW5kIGlzIG92ZXJyaWRhYmxlIGJ5IHRoZSBzaXRlIGFkbWluLiBJZiB0aGUgcGx1Z2lu IGlzIGFscmVhZHkgZGVwbG95ZWQgb24gYSBzaXRlLCB0aGUgbG9hZCBvcmRlciBhbHJlYWR5 IHNldCB3aWxsIGJlIHVzZWQgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiB0aGlzIHZh bHVlLiBPbmx5IG5ldyBpbnN0YWxsYXRpb25zIHdpbGwgYmUgc2V0IHRvIHRoaXMgdmFsdWUg YnkgZGVmYXVsdAoKCTx1bD4KCQk8bGk+PHN0cm9uZz5WZXJzaW9uPC9zdHJvbmc+IDogdGhl IGN1cnJlbnQgdmVyc2lvbiBvZiB5b3VyIHBsdWdpbi4gVG8gdGhlIHJpZ2h0IG9mIHRoaXMg Ym94IHdpbGwgYmUgb25lIG9mIHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9uZz5SZXN0 b3JlIHBvaW50PC9zdHJvbmc+IDogc2VsZWN0aW5nIHRoaXMgY2hlY2tib3ggd2lsbCAodXBv biBzYXZlKSBzdG9yZSB0aGUgY3VycmVudCBjb2RlIGFzIGEgYmFzZWxpbmUgdG8gd2hpY2gg eW91IG1heSAmIzgyMjA7cm9sbCBiYWNrJiM4MjIxOyB0byBhdCBhIGxhdGVyIGRhdGUuIFNl ZSA8YSBocmVmPSIjcmVzdG9yZSI+cmVzdG9yZSBwb2ludHM8L2E+IGZvciBtb3JlPC9saT4K CQk8bGk+PHN0cm9uZz5SZW5hbWUgZmlsZTwvc3Ryb25nPiA6IGJ5IGRlZmF1bHQsIHdoZW4g eW91IHNhdmUgYSBmaWxlIHRoYXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBwbHVnaW4gY2Fj aGUgZGlyZWN0b3J5LCBpdCBpcyBvdmVyd3JpdHRlbiB3aXRoIHlvdXIgY2hhbmdlcy4gT25j ZSBhIHBsdWdpbiBpcyByZWxlYXNlZCB5b3Ugd291bGQgbm9ybWFsbHkgZG93bmxvYWQgYSBj b3B5IHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPiBmcm9tIHRoZSBwbHVnaW5f Y2FjaGVfZGlyIGZvciBzYWZla2VlcGluZy4gSWYgeW91IHRoZW4gc3Vic2VxdWVudGx5IG1v ZGlmeSB0aGUgcGx1Z2luIGFuZCBpbmNyZWFzZSB0aGUgdmVyc2lvbiBudW1iZXIsIHlvdSBt YXkgd2lzaCB0byBhbHRlciB0aGUgZmlsZW5hbWUgYXMgd2VsbC4gQ2hlY2tpbmcgdGhpcyBi b3ggd2lsbCAodXBvbiBzYXZlKSByZW5hbWUgdGhlIGZpbGUgaW4gdGhlIHBsdWdpbiBjYWNo ZSBkaXJlY3RvcnkgdG8gcmVmbGVjdCB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlci4gU2Vl IHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBwYWdlPC9hPiBmb3IgZGV0YWlscyBv biBjdXN0b21pc2luZyB0aGUgZmlsZW5hbWUgZm9ybWF0PC9saT4KCTwvdWw+PC9saT4KCQk8 bGk+PHN0cm9uZz5BdXRob3I8L3N0cm9uZz4gOiB5b3UhPC9saT4KCQk8bGk+PHN0cm9uZz5X ZWJzaXRlPC9zdHJvbmc+IDogeW91ciBob21lIHBhZ2Ugb3IgcGx1Z2luIHBhZ2UuIFdpbGwg YmUgaHlwZXJsaW5rZWQgdG8geW91ciBBdXRob3IgbmFtZSBpbiB0aGUgbGlzdCBwYWdlPC9s aT4KCQk8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IHZlcnkgYnJpZWYgb25l LWxpbmVyIGRlc2NyaWJpbmcgeW91ciBwbHVnaW4mIzgyMTc7cyBjb3JlIGZ1bmN0aW9uIC8g cmVhc29uIGZvciBleGlzdGVuY2U8L2xpPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBIZWxwPC9z dHJvbmc+IDogZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsaW5nIHRoZSBwbHVnaW4gdXNhZ2Uu IENhbiAocHJvYmFibHkgc2hvdWxkISkgYmUgd3JpdHRlbiB1c2luZyA8YSBocmVmPSJodHRw Oi8vdGV4dHBhdHRlcm4uY29tL3RleHRpbGUtc2FuZGJveCI+VGV4dGlsZTwvYT4uIFRoZXJl IHdlcmUgc29tZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0 b3BpYy5waHA/aWQ9MjUzMjciPmxvb3NlIGRvY3VtZW50YXRpb24gZ3VpZGVsaW5lczwvYT4g cHJvcG9zZWQgdGhhdCBzZXJ2ZSBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdGUgdGhh dCB0aGUgY2hhcmFjdGVyIGNvdW50ZG93biBoZXJlIGlzIG9ubHkgYXBwcm94aW1hdGUgYmVj YXVzZSB3aGVuIHlvdXIgcGx1Z2luIGlzIHNhdmVkIGFuZCB0aGUgaGVscCBpcyBjb252ZXJ0 ZWQgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+LCBpdCB1c3VhbGx5IHRha2Vz IHVwIG1vcmUgc3BhY2UgdGhhbiBUZXh0aWxlOyBwbGVhc2UgY2hlY2sgdGhhdCB5b3VyIGhl bHAgZmlsZSByZW5kZXJzIGNvcnJlY3RseSB3aGVuIHlvdXIgcGx1Z2luIGlzIGV4cG9ydGVk PC9saT4KCQk8bGk+PHN0cm9uZz5TdHlsZTwvc3Ryb25nPiA6IEFueSA8c3BhbiBjbGFzcz0i Y2FwcyI+Q1NTPC9zcGFuPiBzdHlsZSBydWxlcyB5b3Ugd2lzaCB0byBhcHBseSB0byB5b3Vy IGRvY3VtZW50YXRpb24gdG8gbWFrZSBpdCBtb3JlIHByZXR0eS4gSXQmIzgyMTc7cyBiZXN0 IHRvIHRhcmdldCB5b3VyIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IGJ5IHN1cnJvdW5k aW5nIHRoZSBlbnRpcmUgUGx1Z2luIEhlbHAgc2VjdGlvbiB3aXRoIHNvbWV0aGluZyBsaWtl OiA8Y29kZT4mbHQ7ZGl2IGlkPSZxdW90O2FiY19oZWxwJnF1b3Q7Jmd0O2gxLiBEb2NzIGdv IGhlcmUuLi4mbHQ7L2RpdiZndDs8L2NvZGU+LjxiciAvPgpOb3RlIHRoYXQgYm90aCB0aGUg UGx1Z2luIEhlbHAgYW5kIFN0eWxlIGFyZSBnb3Zlcm5lZCBieSBhIHNpemUgbGltaXQuIFNp bmNlIHRoZXkgYXJlIGJvdGggc3RvcmVkIGluIHRoZSBzYW1lIDY0a0IgZmllbGQsIHRoZSBz aXplIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZW0uIFN0eWxlcyBhcmUgPGVtPm5vdDwvZW0+IHBh c3NlZCB0aHJvdWdoIHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhbmQgeW91IGRvbiYjODIxNzt0 IG5lZWQgdG8gYWRkIHRoZSA8Y29kZT4mbHQ7c3R5bGUmZ3Q7PC9jb2RlPiB0YWdzOyB0aGUg Q29tcG9zZXIgd2lsbCBkbyB0aGF0IGZvciB5b3UgKGJ1dCBzZWUgPGEgaHJlZj0iI25vdGVz Ij5Ob3RlczwvYT4pPC9saT4KCQk8bGk+PHN0cm9uZz5TYXZlPC9zdHJvbmc+IDogY29tbWl0 cyB0aGUgY2hhbmdlczwvbGk+CgkJPGxpPjxzdHJvbmc+WyBWaWV3IEhlbHAgXTwvc3Ryb25n PiA6IHNob3dzIHRoZSBkb2N1bWVudGF0aW9uIGFzIHVzZXJzIHdpbGwgc2VlIGl0IChpLmUu IFRleHRpbGUgcHJvY2Vzc2VkIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+ KS4gQW55IGhlbHAgdGV4dCBvdmVyIDY0a0IgaW4gbGVuZ3RoIGlzIHRydW5jYXRlZCBzbyB5 b3UgY2FuIHZlcmlmeSB0aGF0IGFsbCB5b3VyIGRvY3VtZW50YXRpb24gZml0czwvbGk+Cgk8 L3VsPgoKCTxwPk9uY2UgeW91IGhhdmUgc2F2ZWQgeW91ciBwbHVnaW4sIHRoZXJlIGlzIGEg c2VjdGlvbiByaWdodCBhdCB0aGUgYm90dG9tIHRoYXQgYWxsb3dzIHlvdSB0byBleHBvcnQg eW91ciBwbHVnaW4gaW4gYSB2YXJpZXR5IG9mIGZvcm1hdHM6PC9wPgoKCTx1bD4KCQk8bGk+ PHN0cm9uZz5QbHVnaW4gY29kZSBmb3IgZGlzdHJpYnV0aW9uPC9zdHJvbmc+IDogaXMgYSBk aXJlY3QgY29weSAmIzgyMTY7biYjODIxNzsgcGFzdGUgYXJlYSB0aGF0IGNvbnRhaW5zIHlv dXIgZW50aXJlIHBsdWdpbiArIGRvY3MuIFlvdSBjYW4gdGFrZSB0aGlzIGVudGlyZSBhcmVh IGFuZCBwYXN0ZSBpdCBpbnRvIHRoZSAmIzgyMTY7SW5zdGFsbCBwbHVnaW4mIzgyMTc7IGJv eCBvbiB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlPC9saT4KCQk8bGk+PHN0cm9uZz5F eHBvcnQgYXMgYWJjX215cGx1Z2luLnR4dDwvc3Ryb25nPiA6IGNvbnZlcnRzIHRoZSBwbHVn aW4gaGVscCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gYW5kIHNhdmVzIHRo ZSBwbHVnaW4gdG8geW91ciBjb21wdXRlciBhcyBhIHJlZGlzdHJpYnV0YWJsZSB0ZXh0IGZp bGUgZm9yIG90aGVyIFRleHRwYXR0ZXJuIHVzZXJzIHRvIGluc3RhbGw8L2xpPgoJCTxsaT48 c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0IChjb21wcmVzc2VkKTwvc3Ryb25n PiA6IGNvbnZlcnRzIHRoZSBwbHVnaW4gaGVscCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+SFRN TDwvc3Bhbj4gYW5kIHNhdmVzIHRoZSBwbHVnaW4gYXMgYSByZWRpc3RyaWJ1dGFibGUsIGd6 aXBwZWQgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVybiB1c2VycyB0byBpbnN0YWxs LiBVc2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMgb3IgdG8gb2ZmZXIgYW4gYWx0ZXJuYXRpdmUg Zm9yIHBlb3BsZSB3aG8gaGF2ZSBzdHJpbmdlbnQgc2l6ZSBsaW1pdHMgaW1wb3NlZCBieSB0 aGVpciBob3N0PC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215cGx1Z2luLnBo cDwvc3Ryb25nPiA6IHNhdmVzIHRoZSBwbHVnaW4gaW4gYSBUZXh0cGF0dGVybiBzdGFuZGFy ZCB0ZW1wbGF0ZSBmb3JtYXQuIFVzZWZ1bCBmb3Iga2VlcGluZyB0aGUgcGx1Z2luIGZvciB5 b3Vyc2VsZiAmIzgyMTI7IGNvbXBsZXRlIHdpdGggVGV4dGlsZSBtYXJrdXAgJiM4MjEyOyBz byBpdCBjYW4gYmUgbGF0ZXIgZWRpdGVkIGFuZCByZS1pc3N1ZWQgLyB1cGRhdGVkIG9yIHNo YXJlZCB3aXRoIG90aGVyIGRldmVsb3BlcnMgd2hvIGhhdmUgdGhlIFBsdWdpbiBDb21wb3Nl ciBvciB6ZW1fdHBsLnBocCBjb21waWxlcjwvbGk+Cgk8L3VsPgoKCTxwPk5vdGUgdGhhdCB3 aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwgdGhlIFRleHRpbGUgcHJvY2Vz c29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1c2VkIFRleHRpbGUgb3Igbm90 OyBpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgaGVhZGVyICg8Y29kZT5oMS48L2Nv ZGU+IHRocm91Z2ggPGNvZGU+aDYuPC9jb2RlPikuIFJ1bm5pbmcgcHVyZSA8c3BhbiBjbGFz cz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGhyb3VnaCBUZXh0aWxlIG1heSBvY2Nhc2lvbmFsbHkg Y2F1c2UgZW5jb2RpbmcgaXNzdWVzIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgY2hhcmFj dGVyIHNldCB1c2VkIHNvIGl0IGlzIGFsd2F5cyBiZXN0IHRvIHRyeSBhbmQgc3RpY2sgdG8g VGV4dGlsZSBhcyB0aGUgZG9jdW1lbnRhdGlvbiBzeXN0ZW0uPC9wPgoKCTxoMyBpZD0icmVz dG9yZSI+UmVzdG9yZSBwb2ludHM8L2gzPgoKCTxwPldoZW4gYSBwbHVnaW4gaXMgaW5zdGFs bGVkLCBhIGNvcHkgaXMga2VwdCBpbiB0aGUgZGF0YWJhc2UuIElmIHRoZSBwbHVnaW4gY29k ZSAobm90IGhlbHAgdGV4dCkgaXMgc3Vic2VxdWVudGx5IGVkaXRlZCwgdGhlIHBsdWdpbiBp cyBjb25zaWRlcmVkICYjODIyMDttb2RpZmllZCYjODIyMTs7IGluZGljYXRlZCBpbiB0aGUg UGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZSBhbmQgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdl LiBTb21ldGltZXMgeW91IG1heSB3aXNoIHRvIHJldmVydCBhbnkgY2hhbmdlcyBiYWNrIHRv IHRoZSBhcy1pbnN0YWxsZWQgc3RhdGUgYW5kIHRoZSBDb21wb3NlciBhbGxvd3MgdGhpcy48 L3A+CgoJPHA+QW55IHRpbWUgYSBwbHVnaW4gaXMgbWFya2VkIGFzICYjODIxNjttb2RpZmll ZCYjODIxNzssIHRoZSB2ZXJzaW9uIG51bWJlciBiZWNvbWVzIGNsaWNrYWJsZSBpbiB0aGUg PGEgaHJlZj0iI2xpc3RwYWdlIj5saXN0PC9hPiBwYWdlLiBDbGlja2luZyBpdCAoYW5kIGNv bmZpcm1pbmcgeW91IGFyZSBzdXJlKSB3aWxsIHdpcGUgb3V0IGFueSBjaGFuZ2VzIHlvdSBt YWRlIGFuZCByZXR1cm4gdGhlIHBsdWdpbiB0byBpdHMgaW5zdGFsbGVkIHN0YXRlLjwvcD4K Cgk8cD5EdXJpbmcgdGhlIGVkaXRpbmcgcHJvY2VzcyBvZiB5b3VyIG93biBwbHVnaW5zLCBp dCBtYXkgYmUgdGhhdCBhdCBjZXJ0YWluIHRpbWVzIHlvdSB3aXNoIHRvIHB1dCBhIHN0YWtl IGluIHRoZSBncm91bmQgYW5kIHNheSAmIzgyMjA7dGhpcyBpcyBteSBjdXJyZW50IGJhc2Vs aW5lIHRoYXQgSSBtaWdodCB3YW50IHRvIHJldHVybiB0byBsYXRlciYjODIyMTsuIFBlcmhh cHMgeW91IGFyZSBhYm91dCB0byBtYWtlIHNvbWUgbW9uc3RlciBlZGl0cyBvciB0cnkgc29t ZXRoaW5nIGV4cGVyaW1lbnRhbCBhbmQgd2FudCBhbiBlYXN5IGZhbGxiYWNrIG1lY2hhbmlz bS4gVGhhdCYjODIxNztzIHdoZXJlIHRoZSAmIzgyMjA7UmVzdG9yZSBwb2ludCYjODIyMTsg Y2hlY2tib3ggY29tZXMgaW4uPC9wPgoKCTxwPkJ5IGNoZWNraW5nIHRoZSBib3ggd2hlbiB5 b3Ugc2F2ZSB5b3VyIHBsdWdpbiwgdGhlIGN1cnJlbnQgY29kZSB3aWxsIGJlY29tZSB5b3Vy IG5ldyByb2xsYmFjayBwb2ludCBhbmQgdGhlIHBsdWdpbiB3aWxsIG5vIGxvbmdlciBiZSBt YXJrZWQgJiM4MjIwO21vZGlmaWVkJiM4MjIxOy4gQW55IGNoYW5nZXMgbWFkZSBiZWZvcmVo YW5kIHdpbGwgbm90IGJlIHJlY292ZXJhYmxlIHNvIHlvdSB3aWxsIGhhdmUgdG8gcmVseSBv biB5b3VyIG93biBiYWNrdXBzIGlmIHlvdSB3aXNoIHRvIGdvIGJhY2sgZnVydGhlci4gQW55 IGVkaXRzIHlvdSBtYWtlIGFmdGVyIGNyZWF0aW5nIGEgcmVzdG9yZSBwb2ludCBjYW4gYmUg dW5kb25lIGJ5IHZpc2l0aW5nIHRoZSBsaXN0IHBhZ2UgYW5kIGNsaWNraW5nIHRoZSB2ZXJz aW9uIG51bWJlciBuZXh0IHRvIHlvdXIgcGx1Z2luLiBDdXJyZW50bHksIG9ubHkgb25lIHJv bGxiYWNrIHBvaW50IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLjwvcD4KCgk8aDMg aWQ9InNldHVwcGFnZSI+U2V0dXAgcGFnZTwvaDM+CgoJPHA+Q2xpY2tpbmcgU2V0dXAgZnJv bSB0aGUgbWFpbiA8YSBocmVmPSIjbGlzdHBhZ2UiPmxpc3Q8L2E+IHBhZ2UgYWxsb3dzIGFj Y2VzcyB0byB0aGUgcGx1Z2luIHByZWZlcmVuY2VzLjwvcD4KCgk8cD5Zb3UgY2FuIEluc3Rh bGwgdGhlbSAmIzgyMTI7IHdoaWNoIHJldGFpbnMgYW55IHByZXZpb3VzIHNldHRpbmdzIGFu ZCBhZGRzIG5ldyBvbmVzIHdoZW4gdXBkYXRpbmcgdGhlIHBsdWdpbiAmIzgyMTI7IG9yIERl bGV0ZSB0aGVtLiBUaGUgcGx1Z2luIGNoZWNrcyBpZiBhbGwgcmVxdWlyZWQgcHJlZmVyZW5j ZXMgYXJlIGF2YWlsYWJsZSBhbmQgb2ZmZXJzIHlvdSB0aGUgY2hvaWNlIG9mIGRlbGV0aW5n L3JlaW5zdGFsbGluZyBpbiBjYXNlIHRoZSBwcmVmcyBiZWNvbWUgY29ycnVwdGVkIG9yIG5l ZWQgdXBkYXRpbmcuPC9wPgoKCTxwPk9uY2UgdGhlIHByZWZzIGFyZSBpbnN0YWxsZWQgeW91 IHdpbGwgc2VlIHRoZSBhdmFpbGFibGUgb3B0aW9uczo8L3A+CgoJPHVsPgoJCTxsaT48c3Ry b25nPlBsdWdpbiBlZGl0b3I8L3N0cm9uZz4gOiB5b3UgbWF5IGNob29zZSB0byBlZGl0IHRo ZSBjb2RlIHVzaW5nIGEgM3JkIHBhcnR5IHN5bnRheCBoaWdobGlnaHRlci4gQ3VycmVudCBz dXBwb3J0IGlzIGZvciBFZGl0IEFyZWEgYW5kIChzb3J0IG9mKSBDb2RlUHJlc3MgKHNlZSB0 aGUgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4pLiBDaG9vc2UgdGhlIHN5c3RlbSBoZXJl LCB3aGVyZWJ5IHRoZSBib3ggYmVuZWF0aCBiZWNvbWVzIGF2YWlsYWJsZSBzbyB5b3UgY2Fu IHNwZWNpZnkgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBhdGggb2YgdGhl IEVkaXRBcmVhIGluc3RhbGxhdGlvbiBvbiB5b3VyIHNlcnZlcjsgdGhpcyBpcyBub3JtYWxs eSBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgL2VkaXRfYXJlYS4gTm8gdHJhaWxp bmcgc2xhc2ggaXMgcmVxdWlyZWQ8L2xpPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBlZGl0b3Ig d2lkdGg8L3N0cm9uZz4gOiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2lkZSB0byBtYWtl IHRoZSBib3hlcyBvbiB0aGUgPGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0PC9hPiBwYWdlIHRv IHN1aXQgeW91ciBzY3JlZW4gcmVzb2x1dGlvbjwvbGk+CgkJPGxpPjxzdHJvbmc+SGVscCBl ZGl0b3I8L3N0cm9uZz4gOiB5b3UgbWF5IGNob29zZSB0byBlZGl0IHRoZSBoZWxwIG1hbnVh bGx5IHZpYSBUZXh0aWxlIG9yIHVzZSBUaW55TUNFIGZvciBhIG1vcmUgPHNwYW4gY2xhc3M9 ImNhcHMiPldZU0lXWUc8L3NwYW4+IGV4cGVyaWVuY2UuIFRoaXMgaXMgZXhwZXJpbWVudGFs IGFuZCBwcm9iYWJseSB3b24mIzgyMTc7dCB3b3JrIHJpZ2h0IG5vdzwvbGk+CgkJPGxpPjxz dHJvbmc+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZXhwb3J0IG9yZGVyPC9zdHJv bmc+IDogd2hlbiBzYXZpbmcgeW91ciBwbHVnaW4gaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRl IGZvcm1hdCwgdGhpcyBnb3Zlcm5zIHdoZXRoZXIgeW91IHByZWZlciB0aGUgY29kZSBibG9j ayB0byBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGFuZCB0aGUgaGVscCBibG9jayBiZWxv dywgb3IgdmljZSB2ZXJzYTwvbGk+Cgk8L3VsPgoKCTxwPlRoZSBuZXh0IHRocmVlIHRleHRi b3hlcyBhcmUgYWxsIHZlcnkgc2ltaWxhcjsgdGhleSBkZWZpbmUgdGhlIGZvcm1hdCBvZiB0 aGUgZmlsZW5hbWVzIHdoZW4geW91IGV4cG9ydCBwbHVnaW5zLiBUaGUgZmlyc3QgaXMgZm9y IHdoZW4geW91IGV4cG9ydCBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+QkFTRTwvc3Bh bj4tNjQgcGx1Z2luczsgdGhlIHNlY29uZCBpcyBmb3IgY29tcHJlc3NlZCBwbHVnaW5zOyB0 aGUgdGhpcmQgaXMgZm9yIGV4cG9ydGluZyBhIHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBz Ij5QSFA8L3NwYW4+IHRlbXBsYXRlLjwvcD4KCgk8cD5XaGVyZXZlciB5b3UgdHlwZSA8Y29k ZT57bmFtZX08L2NvZGU+LCB0aGUgcGx1Z2luIG5hbWUgd2lsbCBhcHBlYXIuIFNpbWlsYXJs eSwgPGNvZGU+e3ZlcnNpb259PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGN1 cnJlbnQgcGx1Z2luIHZlcnNpb24gbnVtYmVyLiBZb3UgY2FuIHR5cGUgYW55dGhpbmcgeW91 IGxpa2UgaW4gdGhlc2UgYm94ZXMsIGJ1dCBpdCYjODIxNztzIG1vcmUgdXNlZnVsIHRvIGlu Y2x1ZGUgYm90aCBvZiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5ncyBzb21ld2hlcmUgaW4gZWFj aCBib3ggc28geW91IGRvbiYjODIxNzt0IGdldCBuYW1lIC8gdmVyc2lvbiBjbGFzaGVzLjwv cD4KCgk8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhlIGZhY3Qg dGhhdCB6aXBwZWQgcGx1Z2lucyBhcmUgZXhwb3J0ZWQgYXMgPGNvZGU+cGZ4X215X3BsdWdp bl92MC4xX3ppcC50eHQ8L2NvZGU+LCB5b3UgY2FuIGNoYW5nZSBpdC4gUGVyaGFwcyB5b3Ug bWF5IHByZWZlciA8Y29kZT5wZnhfbXlfcGx1Z2luLWNvbXByZXNzZWQtMC4xLnR4dDwvY29k ZT4uIEluIHdoaWNoIGNhc2UsIHNldCB0aGUgMm5kIGJveCB0byA8Y29kZT57bmFtZX0tY29t cHJlc3NlZC17dmVyc2lvbn0udHh0PC9jb2RlPi48L3A+CgoJPHA+VGhlIGV4dGVuc2lvbiBz aG91bGQgdXN1YWxseSBiZSBzcGVjaWZpZWQgc28geW91ciBzeXN0ZW0vYnJvd3NlciBrbm93 cyB0aGUgZmlsZSYjODIxNztzIHR5cGUgd2hlbiBpdCBpcyBleHBvcnRlZCwgYnV0IGl0JiM4 MjE3O3Mgbm90IG1hbmRhdG9yeSBhcyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPk1JTUU8L3Nw YW4+IHR5cGUgaXMgZ2l2ZW4gc28gKGdvb2QpIGJyb3dzZXJzIHNob3VsZCByZWFkIHRoYXQu PC9wPgoKCTxwPkZpbmFsbHksIGlmIHlvdSB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mIGhl bHAgY2FjaGVpbmcsIHB1dCB0aGUgcGF0aCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4g dGhlIDxzdHJvbmc+Q2FjaGUgZGlyPC9zdHJvbmc+IGJveC4gRW1wdHkgdGhlIGJveCBpZiB5 b3UgcHJlZmVyIHNhdmVzIGFuZCBleHBvcnRzIHRvIGJlIHNsb3dlciEgRGVmYXVsdHMgdG8g PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4mIzgyMTc7cyB0ZW1wb3JhcnkgZGlyZWN0 b3J5LjwvcD4KCgk8aDMgaWQ9Im5vdGVzIj5Ob3RlcyAvIGtub3duIGlzc3VlczwvaDM+CgoJ PG9sPgoJCTxsaT5Nb3JlIGVkaXRvcnMgY2FuIGJlIGludGVncmF0ZWQgaW50byB0aGUgQ29t cG9zZXIgZmFpcmx5IGVhc2lseS4gSWYgeW91IGZpbmQgYSBnb29kIG9uZSwgZ2V0IGluIGNv bnRhY3QuIEJlIHdhcm5lZCB0aGF0IHRoZSBlZGl0b3JzIGRvIHRlbmQgdG8gc2xvdyB0aGUg cGx1Z2luIGRvd24sIGVzcGVjaWFsbHkgYXMgY29kZSBzaXplIGluY3JlYXNlcy48L2xpPgoJ CTxsaT5UZW50YXRpdmUgc3VwcG9ydCBmb3IgQ29kZVByZXNzIGlzIGF2YWlsYWJsZSBidXQg aXQgaW5leHBsaWNhYmx5IGJsYW5rcyBvdXQgdGhlIHBsdWdpbiBjb2RlIHdoZW4gc2F2ZWQs IHNvIHN1cHBvcnQgaXMgZGlzYWJsZWQgZm9yIG5vdy4gSWYgYW55b25lIGNhbiBzaGVkIGFu eSBsaWdodCBvbiB3aHkgaXQgZG9lcyB0aGlzLCBwbGVhc2Ugc3BlYWsgdXAhIExvb2sgaW4g dGhlIGllZF9wbHVnaW5fc2V0dXAoKSBmdW5jdGlvbiB0b3dhcmRzIHRoZSBib3R0b20gb2Yg dGhlIGZpbGUsIHVuY29tbWVudCB0aGUgY29tbWVudGVkIG91dCBsaW5lIGFuZCBjb21tZW50 IG91dCB0aGUgb25lIGJlbmVhdGggaXQgdG8gZW5hYmxlIHN1cHBvcnQsIHRoZW4gdmlzaXQg dGhlIFNldHVwIHBhZ2UgYW5kIHNlbGVjdCBDb2RlUHJlc3MgZnJvbSB0aGUgbGlzdC4gRG9u JiM4MjE3O3QgZXhwZXJpbWVudCB3aXRoIHRoaXMgc2V0dGluZyBvbiBhbiBpbXBvcnRhbnQg cGx1Z2luIDotKTwvbGk+CgkJPGxpPldoZW4gYSBwbHVnaW4gaXMgc2F2ZWQgdG8gdGhlIHBs dWdpbl9jYWNoZV9kaXIsIGlmIHlvdSBoYXZlIG5vdCBwdXQgPGNvZGU+Jmx0O3N0eWxlJmd0 OzwvY29kZT4gbWFya2VycyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+ IGJsb2NrIHRoZXkgd2lsbCBiZSBhZGRlZCBmb3IgeW91IGluIHRoZSB0ZXh0IGFyZWEgYnV0 IDxlbT5ub3Q8L2VtPiBzYXZlZCBpbiB0aGUgYWN0dWFsIHRlbXBsYXRlIHVudGlsIHlvdSBz YXZlIGl0IGFnYWluIChleHBvcnRpbmcgYXMgYSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z cGFuPiBmaWxlIGlzIHVuYWZmZWN0ZWQpLiBTbyBpZiB5b3UgYXJlIGluIHRoZSBoYWJpdCBv ZiBtYW51YWxseSBkb3dubG9hZGluZyB0aGUgZmlsZSBmcm9tIHlvdXIgPHNwYW4gY2xhc3M9 ImNhcHMiPkZUUDwvc3Bhbj4gY2xpZW50IGltbWVkaWF0ZWx5IGFmdGVyIGEgc2F2ZSwganVz dCBzYXZlIHRoZSBwbHVnaW4gYWdhaW4gdG8gYmUgc3VyZTwvbGk+Cgk8L29sPgoKCTxoMyBp ZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gzPgoKCTx1bD4KCQk8bGk+MjUgRmViIDA2IHwg MC4xIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MjUgRmViIDA2IHwgMC4yIHwgQWRk ZWQgJiM4MjE2O3NhdmUgYXMmIzgyMTc7IG9wdGlvbjwvbGk+CgkJPGxpPjE3IE1hciAwNiB8 IDAuMyB8IEFkZGVkICYjODIxNjtzYXZlIGFzIHBocCYjODIxNzs8L2xpPgoJCTxsaT4xMCBB cHIgMDYgfCAwLjQgfCBBZGRlZCBzdXBwb3J0IGZvciBwbHVnaW5fY2FjaGVfZGlyPC9saT4K CQk8bGk+MDQgSmFuIDA4IHwgMC41IHwgRnVsbCBzdXBwb3J0IGZvciBzdGQgdGVtcGxhdGU7 IGNvbXByZXNzZWQgcGx1Z2luczsgTGlicmFyeSBwbHVnaW5zOyBUZXh0aWxlIGhlbHAgYW5k IHN0eWxpbmc7IGludGVncmF0aW9uIHdpdGggbmV0LWNhcnZlciYjODIxNztzIFBsdWdpbiBI ZWxwIFZpZXdlcjwvbGk+CgkJPGxpPjA3IEphbiAwOCB8IDAuNiB8IEJ1aWx0LWluIGhlbHAg dmlld2VyICh0aGFua3MgbmV0LWNhcnZlcik7IHN1cHBvcnQgZm9yIEVkaXQgQXJlYSAmYW1w OyBDb2RlUHJlc3MoaXNoKSAodGhhbmtzIHZhcmlhYXMpOyBIZWxwIGJsb2NrL0NvZGUgYmxv Y2sgcG9zaXRpb24gc3dpdGNoYWJsZSBvbiBleHBvcnQ7IGFkZGVkIFNldHVwIHByZWZzIHBh Z2U7IGxpbmUgYnJlYWsvc3R5bGUgYnVnZml4ZXM8L2xpPgoJCTxsaT4wOCBKYW4gMDggfCAw LjcgfCBSZS1pbXBvcnRpbmcgcGx1Z2lucyBub3cgcmV0YWlucyBzdHlsZSBibG9jazsgYWRk ZWQgJiM4MjE2O2FkbWluIHNpZGUgcGx1Z2luIHdpdGggY2xpZW50LXNpZGUgdHlwZSYjODIx Nzsgd2FybmluZzsgY2hhbmdlZCBidXR0b24gc3R5bGluZyBhbmQgcG9zaXRpb25zIChhbGwg dGhhbmtzIG5ldC1jYXJ2ZXIpOyBnVHh0KCkgcHJlZiBsYWJlbHMgYW5kICYjODIxNjtpbnRl bGxpZ2VudCYjODIxNzsgcHJlZnMgKGdvIGpRdWVyeSBnbyEpOyBjYWNoZWQgcGx1Z2lucyBu b3cgYWxzbyBoYXZlIGRpcmVjdCBleHBvcnQgZnJvbSBFZGl0IHBhZ2U7ICYjODIxNjtkb24m IzgyMTc7dCB0ZXh0aWxlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiYjODIxNzsg Y2hlY2s7IG1pbm9yIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+MDkgSmFuIDA4IHwgMC43MSB8IFRl eHRhcmVhIHdpZHRoIGNhbiBub3cgYmUgY29udHJvbGxlZCBmcm9tIHByZWZzLCBhbmQgaGVp Z2h0IGZyb20gYSBkcmFnIGJhcjsgZGVmYXVsdCB3aWR0aCBpbmNyZWFzZWQgdG8gMTEwIGNo YXJzOyBwdWJsaXNoIHBsdWdpbnMgZnJvbSB0aGUgbGlzdCBwYWdlOyBJbnN0YWxsIGJ1dHRv biByZW1vdmVkIHdoZW4gcHJlZnMgYWxsIGNvcnJlY3RseSBpbnN0YWxsZWQgKGFsbCB0aGFu a3MgdmFyaWFhcyAvIGlibGFzdG9mZik8L2xpPgoJCTxsaT4xMCBKYW4gMDggfCAwLjcyIHwg Rml4ZWQgYnVnIGlmIHBsdWdpbiBoYXMgbm8gaGVscDsgc3R5bGUgc2VjdGlvbiBubyBsb25n ZXIgc3RvcmVkL2V4cG9ydGVkIGlmIGl0JiM4MjE3O3Mgbm90IGluIHVzZSAodGhhbmtzIHRo ZV9naG9zdCAvIGlibGFzdG9mZik8L2xpPgoJCTxsaT4xMSBKYW4gMDggfCAwLjczIHwgQWRk ZWQgc3VwcG9ydCBmb3IgPGVtPnJlYWRpbmc8L2VtPiBhbiBvcHRpb25hbCByZXZpc2lvbiBm cm9tIHRoZSB0ZW1wbGF0ZSBwYXJzZXIgYW5kIGFwcGVuZGluZyBpdCB0byB0aGUgdmVyc2lv biAodGhhbmtzIG5ldC1jYXJ2ZXIpOyBtb3JlIGdUeHQoKSBzdHJpbmdzIGNvbnZlcnRlZDwv bGk+CgkJPGxpPjI4IE1hciAwOCB8IDAuNzQgfCBGaXhlZCBlbXB0eSBwbHVnaW4gY29kZSBp ZiBTdHlsZSBibG9jayBsZWZ0IGJsYW5rIDsgZml4ZWQgc3RyaXAvc2xhc2gvZW5jb2Rpbmcg ZXJyb3JzICh0aGFua3MgdGhlX2dob3N0L3J1dWQpIDsgZml4ZWQgY3JsZiBuZXdsaW5lcyBp biBjb2RlIGJsb2NrICh0aGFua3MgaGFram9vbi9ydXVkKTwvbGk+CgkJPGxpPjI4IE1heSAw OCB8IDAuNzUgfCBBZGRlZCAmIzgyMTY7bW9kaWZpZWQmIzgyMTc7IHRvIHRoZSBWZXJzaW9u IGNvbHVtbiAodGhhbmtzIHVsaSkgOyBhZGRlZCBhYmlsaXR5IHRvIHJlbmFtZSBmaWxlcyBp biB0aGUgcGx1Z2luIGNhY2hlIGRpciB3aGVuIHRoZSB2ZXJzaW9uIGNoYW5nZXM8L2xpPgoJ CTxsaT4wMyBOb3YgMDggfCAwLjggfCBBZGRlZCBzdXBwb3J0IGZvciByZWNvbW1lbmRlZCBw bHVnaW4gbG9hZCBvcmRlciA7IGFkZGVkIEFkbWluLW9ubHkgcGx1Z2luIHR5cGU7IGFkZGVk IGFiaWxpdHkgdG8gb3ZlcnJpZGUgZmlsZW5hbWUgZm9ybWF0IG9uIGV4cG9ydCA7IGFkZGVk IHJlc3RvcmUgcG9pbnQvcm9sbGJhY2sgKHRoYW5rcyBtYXZlcmljaykgOyBhZGRlZCBjaGFy YWN0ZXIgY291bnQgKHRoYW5rcyBwZXBlYmUpIDsgcmF0aW9uYWxpc2VkIHRoZSBsaXN0IGFu ZCBlZGl0IHBhZ2VzIDsgc3BlZCB1cCBleHBvcnQvc2F2ZSByb3V0aW5lcyA7IGZpeGVkIGEg ZmV3IGNvcm5lciBjYXNlIGJ1Z3MgKGUuZy4gZW1wdHkgcGx1Z2luIG5hbWUsIG1pc3Npbmcg cXVvdGVzIGluIHRlbXBsYXRlIG9wdGlvbnMpPC9saT4KCQk8bGk+MDMgSmFuIDA5IHwgMC44 MSB8IEFkZGVkIHRleHRpbGUgY2FjaGVpbmcgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSB3aXRo IGxhcmdlIGhlbHAgZmlsZXMgOyBwcm9maWxlZCBjb2RlIGFuZCBpbXByb3ZlZCBzcGVlZCBp biB2YXJpb3VzIGZ1bmN0aW9uczwvbGk+CgkJPGxpPjIzIEZlYiAwOSB8IDAuODIgfCBDYW4g bm93IGNyZWF0ZSBuZXcgdGVtcGxhdGUgZmlsZXMgb24gdGhlIGZseSAodGhhbmtzIGF6dykg OyBmaXhlZCBUZXh0aWxlIGxpbWl0IG9uIGxhcmdlIGhlbHAgZmlsZXMgOyBmaXhlZCBkYXRh YmFzZSBjYWxscyBmb3IgTXlTUUwgc3RyaWN0IG1vZGUgKHRoYW5rcyBHb2NvbSAvIGF6dyk8 L2xpPgoJCTxsaT4xMSBBcHIgMDkgfCAwLjgzIHwgRml4ZWQgaGVscCBmaWxlIDxzcGFuIGNs YXNzPSJjYXBzIj5DU1M8L3NwYW4+IG91dHB1dCBzbyBpdCB2YWxpZGF0ZXMgOyB1c2UgPGNv ZGU+JHByZWZzPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPiRHTE9CQUxTPC9jb2RlPiBpbnRl cm5hbGx5IDsgY2hlY2sgaWYgcGx1Z2luX2NhY2hlX2RpciBleGlzdHMgYmVmb3JlIHRyeWlu ZyB0byB1c2UgaXQgb24gdGhlIGxpc3QgcGFnZTwvbGk+CgkJPGxpPjI5IEF1ZyAwOSB8IDAu OSB8IFJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQuMi4wKyA7IGFk ZGVkIHN1cHBvcnQgZm9yIHBsdWdpbiBwcmVmcy9saWZlY3ljbGUgYW5kIGxhcmdlciBwbHVn aW4gY29kZSA7IGZpeGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGRlbGltaXRl ciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgOyBuZXcgcGx1Z2luIHRlbXBsYXRlIGRl dGFpbHMgdXNlZDwvbGk+CgkJPGxpPjExIEZlYiAxMCB8IDAuOTEgfCBBZGRlZCBKdW1wIFRv IExpbmUgY2FwYWJpbGl0eSAmIzgyMTI7IGluIG1vc3QgYnJvd3NlcnMgKHRoYW5rcyB0aGVi b21ic2l0ZSk8L2xpPgoJPC91bD4KCgk8aDIgaWQ9IndyaXRpbmciPldyaXRpbmcgYSBwbHVn aW48L2gyPgoKCTxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0dHA6 Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5QbHVnaW4g QXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1cHBvcnQg Rm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoZSA8 YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0c2hlZXQi PlRleHRQYXR0ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwvYT4gYW5kIHRoZSB0dXRvcmlhbHMg YW5kIGd1aWRlcyBmb3IgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm5ldC93aWtpL2lu ZGV4LnBocD90aXRsZT1FeHRlbmRpbmdfVGV4dHBhdHRlcm4iPkV4dGVuZGluZyBUZXh0cGF0 dGVybjwvYT4gb24gVGV4dEJvb2suPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBhdXRob3Jpbmcg Oi0pPC9wPgoKPC9kaXY+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPgojaWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2ll ZF9oZWxwIC5yZXF1aXJlZCB7Y29sb3I6cmVkO30KI2llZF9oZWxwIGNvZGUgeyBmb250OiAx MDUlLzEzMCUgJiM4MjIwO0NvdXJpZXIgTmV3JiM4MjIxOywgY291cmllciwgbW9ub3NwYWNl OyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGgxIHsgY29sb3I6ICMz Njk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFs aWduOiBjZW50ZXI7IH0KI2llZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk IGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9y Z2lhLCBzYW5zLXNlcmlmOyB9CiNpZWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1OyBmb250 OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1h cmdpbjogMTVweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+Cjwh LS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiYjY4M2Y3 MjVkN2Y2MTg4ZTllYzQ2OGNjMWE5ODJkMGQiO30=