# Name: smd_admin_themes v0.28 # Type: Admin side plugin # Admin-side theme manager and editor # Author: Stef Dawson # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzbWRfYWRtaW5fdGhlbWVzIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjI4IjtzOjExOiJkZXNjcmlwdGlv biI7czozNToiQWRtaW4tc2lkZSB0aGVtZSBtYW5hZ2VyIGFuZCBlZGl0b3IiO3M6NDoiY29k ZSI7czoxMTQyNjg6ImlmIChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsNCglnbG9iYWwg JHNtZF9hdF9ldmVudCwgJHNtZF9hdF9mdWxsZXYsICRzbWRfYXRfYWRtX2V2ZW50LCAkc21k X2F0X3ByaXZzLA0KCQkkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X3ByZWZzLCAkcHJlZnMs ICRzbWRfYXRfZmVlZHVybCwgJHNtZF9hdF90aGVtZV9yZXBvLA0KCQkkc21kX2F0X3N0eWxl czsNCg0KCSRzbWRfYXRfZXZlbnQgPSAnc21kX2F0JzsNCgkkc21kX2F0X2Z1bGxldiA9ICdz bWRfYWRtaW5fdGhlbWVzJzsNCgkkc21kX2F0X2FkbV9ldmVudCA9ICdzbWRfYWRtYXQnOw0K CSRzbWRfYXRfcHJpdnMgPSAnMSc7DQoJJHNtZF9hdF9mZWVkdXJsID0gJ2h0dHA6Ly90ZXh0 Z2FyZGVuLm9yZy9hZG1pbi10aGVtZXMtZmVlZCc7DQoJJHNtZF9hdF90aGVtZV9yZXBvID0g J2h0dHA6Ly90ZXh0Z2FyZGVuLm9yZy9hZG1pbmlzdHJhdGlvbi10aGVtZXMnOw0KCSRzbWRf YXRfc3R5bGVzID0gYXJyYXkoDQoJCSdjb21tb24nID0+DQoJCSAgICAnLnNtZF9jbGVhciB7 IGNsZWFyOmJvdGg7IH0NCiAgICAgICAgICAgLnNtZF9zbWFsbHByaW50IHsgZm9udC1zaXpl Ojc1JTsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi10b3A6LTEycHg7IH0NCiAgICAgICAg ICAgLnNtZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IG1hcmdpbjo1cHg7IH0nLA0KCQknY29u dHJvbCcgPT4NCgkJICAgICcjc21kX2NvbnRyb2wgeyBtYXJnaW46MCBhdXRvOyB9DQogICAg ICAgICAgICNzbWRfY29udHJvbCB0ZCAucHVibGlzaCB7IG1hcmdpbi1sZWZ0OjUwcHg7IH0N CiAgICAgICAgICAgI3NtZF9jb250cm9sIC51cGxvYWQtZm9ybSB7IHBhZGRpbmc6MDsgfQ0K ICAgICAgICAgICAuc21kX2F0X3VwZGF0ZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGNvbG9yOiM5 OTAwMDA7IH0nLA0KCQknZWRpdCcgPT4NCiAgICAgICAgICAnI3NtZF9hdF9pbWFnZXMgeyBt YXJnaW46MHB4IDZweCAtNHB4IDA7IH0NCiAgICAgICAgICAgLnNtZF9za2luX2ZpbGV0eXBl cyB7IG1hcmdpbjoxMnB4IDA7IH0nLA0KCQknZ3JpZCcgPT4NCgkJICAgICcuc21kX2dyaWQg eyB3aWR0aDo5NjBweDsgbWFyZ2luOjAgYXV0bzsgfQ0KICAgICAgICAgICAuc21kX2NlbGwg eyBmbG9hdDpsZWZ0OyBwYWRkaW5nOjEwcHg7IG1hcmdpbjoxMHB4OyBib3JkZXI6MXB4IHJp ZGdlICNjY2M7IHdpZHRoOnt0d31weDsgaGVpZ2h0Ont0aH1weDsgfQ0KICAgICAgICAgICAu c21kX2NlbGwuYWN0aXZlIHsgYm9yZGVyOjFweCBzb2xpZCByZWQ7IH0NCiAgICAgICAgICAg LnNtZF9jZWxsOmhvdmVyIHsgYmFja2dyb3VuZDojZTJkZmNlOyBjb2xvcjojODA1NTFlOyB9 DQogICAgICAgICAgIC5zbWRfY2VsbDpob3ZlciBhIHsgY29sb3I6YmxhY2s7IH0NCiAgICAg ICAgICAgLnNtZF9hdXRoLC5zbWRfYWN0aW9ucyB7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJn aW46NXB4IDA7IH0nLA0KCQknbGlzdCcgPT4NCiAgICAgICAgICAnLnNtZF9hdF9saXN0IHRy LmFjdGl2ZSwgLnNtZF9hdF9saXN0IHRyLmFjdGl2ZSBhIHsgYmFja2dyb3VuZC1jb2xvcjoj ZTJkZmNlOyBjb2xvcjojODA1NTFlOyB9JywNCgkJJ3NldHVwJyA9Pg0KICAgICAgICAgICcu c21kX2Zha2VidG4geyBjb2xvcjojNTU1OyBjdXJzb3I6cG9pbnRlcjsgfQ0KICAgICAgICAg ICAjc21kX2F0X3JhZGlvIGlucHV0IHsgZmxvYXQ6bGVmdDsgY2xlYXI6Ym90aDsgfQ0KICAg ICAgICAgICAjc21kX2F0X3JhZGlvIGxhYmVsIHsgZmxvYXQ6bGVmdDsgfScsDQoJKTsNCg0K CS8vIFRodW1ibmFpbCBkaW1lbnNpb25zDQoJJHNtZF9jb3JlX3RoZW1lcyA9IGFycmF5KCdj bGFzc2ljJywncmVtb3JhJyk7DQoNCglhZGRfcHJpdnMoJHNtZF9hdF9ldmVudCwgJHNtZF9h dF9wcml2cyk7DQoJYWRkX3ByaXZzKCdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldiwg JHNtZF9hdF9wcml2cyk7DQoJcmVnaXN0ZXJfdGFiKCJleHRlbnNpb25zIiwgJHNtZF9hdF9l dmVudCwgc21kX2F0X2dUeHQoJ3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdz bWRfYXRfb3B0aW9ucycsICdwbHVnaW5fcHJlZnMuJy4kc21kX2F0X2Z1bGxldik7DQoJcmVn aXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuJy4k c21kX2F0X2Z1bGxldik7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdCcsICRzbWRfYXRf ZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfcGVyJywgJ2FkbWluX3NpZGUn LCAndGhlbWVfbmFtZScpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYXRfbGluaycsICdw cmVmc191aScsICd0aGVtZV9uYW1lJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9hdF91 cGxvYWRfZm9ybScsICRzbWRfYXRfZXZlbnQuJ191aScsICd1cGxvYWRfZm9ybScpOw0KDQoJ aWYgKGlzc2V0KCRwcmVmc1snc21kX2F0X3N5c3RlbSddKSAmJiAkcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSA9PSAyKSB7DQoJCWFkZF9wcml2cygkc21kX2F0X2FkbV9ldmVudCwgJzIsMyw0 LDUsNicpOw0KCQlyZWdpc3Rlcl90YWIoImFkbWluIiwgJHNtZF9hdF9hZG1fZXZlbnQsIHNt ZF9hdF9nVHh0KCdza2lubmVyJykpOw0KCQlyZWdpc3Rlcl9jYWxsYmFjaygnc21kX2FkbWF0 JywgJHNtZF9hdF9hZG1fZXZlbnQpOw0KCX0NCg0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlz IGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQg aXMgYSBsaXN0IG9mIGxlZ2FjeSBwcmVmcyB0aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1 dHVyZSAoZGVmYXVsdHM6IGFsbCBlbXB0eSkNCgkkc21kX2F0X3ByZWZzID0gYXJyYXkoDQoJ CWFycmF5KA0KCQkJJ3NtZF9hdF9jYXNlX3NvcnQnID0+ICcxJywNCgkJCSdzbWRfYXRfY3J1 c2gnID0+ICd6aXAnLA0KCQkJJ3NtZF9hdF90dycgPT4gJzI2MCcsDQoJCQknc21kX2F0X3Ro JyA9PiAnMTUwJywNCgkJCSdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JyA9PiAne3RoZW1lfScs DQoJCQknc21kX2F0X2xheW91dCcgPT4gJzEnLA0KCQkJJ3NtZF9hdF9zeXN0ZW0nID0+ICcw JywNCgkJCSdzbWRfYXRfZ2xvYmFsX3NraW4nID0+ICcnLA0KCQkJJ3NtZF9hdF9ncm91cF9s aXN0JyA9PiAnJywNCgkJCSdzbWRfYXRfdXNlcl9saXN0JyA9PiAnJywNCgkJKSwNCgkJYXJy YXkoDQoJCQknc21kX2F0X2ZpbGVfcGF0aCcgPT4gJycsDQoJCSkNCgkpOw0KfQ0KDQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdCgkZXZlbnQsICRzdGVw KSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknc21kX2F0 X2Nsb25lJywNCgkJCSdzbWRfYXRfZGVsZXRlJywNCgkJCSdzbWRfYXRfZGVsZXRlX2ltYWdl JywNCgkJCSdzbWRfYXRfZWRpdCcsDQoJCQknc21kX2F0X2V4cG9ydCcsDQoJCQknc21kX2F0 X2ltcG9ydCcsDQoJCQknc21kX2F0X25ld2ZpbGUnLA0KCQkJJ3NtZF9hdF9wcmVmc19pbnN0 YWxsJywNCgkJCSdzbWRfYXRfcHJlZnNfcmVtb3ZlJywNCgkJCSdzbWRfYXRfcHJlZnNfdXBk YXRlJywNCgkJCSdzbWRfYXRfcmVuYW1lJywNCgkJCSdzbWRfYXRfc2F2ZScsDQoJCQknc21k X2F0X3NldHVwJywNCgkJCSdzbWRfYXRfc3dpdGNoJywNCgkJCSdzbWRfYXRfdXBsb2FkX2lt YWdlJywNCgkJCSdzbWRfYXRfY2hhbmdlX3BhZ2VieScsDQoJCSkpKSB7DQoJCXNtZF9hdF9s aXN0KCcnKTsNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24g c21kX2F0X3dlbGNvbWUoJGV2ZW50LCAkc3RlcCkgew0KCSRtc2cgPSAnJzsNCglzd2l0Y2gg KCRzdGVwKSB7DQoJCWNhc2UgJ2luc3RhbGxlZCc6DQoJCQlzbWRfYXRfcHJlZnNfaW5zdGFs bCgwKTsNCgkJCWJyZWFrOw0KCQljYXNlICdkZWxldGVkJzoNCgkJCXNtZF9hdF9wcmVmc19y ZW1vdmUoMCk7DQoJCQlicmVhazsNCgl9DQoJcmV0dXJuICRtc2c7DQp9DQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfbGluaygpIHsNCglnbG9iYWwgJHNtZF9hdF9ldmVudDsNCgly ZXR1cm4gaHJlZihzbWRfYXRfZ1R4dCgnbWFuYWdlX2xibCcpLCAnP2V2ZW50PScuJHNtZF9h dF9ldmVudCk7DQp9DQoNCi8vIEEgc3R1YiB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aG91dCBh ICRtZXNzYWdlDQpmdW5jdGlvbiBzbWRfYXRfZGlzcGxheSgpIHsNCgkJc21kX2F0X2xpc3Qo JycpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9h dF9saXN0KCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFsICRzbWRfYXRfZXZlbnQsICRwcmVmcywg JHNtZF9hdF9wcmVmcywgJHRoZW1lLCAkc21kX2NvcmVfdGhlbWVzLCAkc21kX2F0X2Z1bGxl diwgJHNtZF9hdF9mZWVkdXJsLCAkc21kX2F0X3RoZW1lX3JlcG8sICRzbWRfYXRfc3R5bGVz Ow0KDQoJJGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KDQoJZXh0cmFjdChncHNh KGFycmF5KCdzdGVwJywgJ3BhZ2UnLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJywgJ3NraW4n KSkpOw0KCSRtZXNzYWdlID0gKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogZ3BzKCdtZXNzYWdl Jyk7DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8g JGF0X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSRzdHlsZXJ1bGUgPSAoJGxheW91 dD09MCkgPyAnbGlzdCcgOiAnZ3JpZCc7DQoJJHR3ID0gKGlzc2V0KCRhdF9wcmVmc1snc21k X2F0X3R3J10pID8gJGF0X3ByZWZzWydzbWRfYXRfdHcnXSA6ICRzbWRfYXRfcHJlZnNbMF1b J3NtZF9hdF90dyddKSArIDEwOw0KCSR0aCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF90 aCddKSA/ICRhdF9wcmVmc1snc21kX2F0X3RoJ10gOiAkc21kX2F0X3ByZWZzWzBdWydzbWRf YXRfdGgnXSkgKyA4MDsNCgkkc3R5bGVyZXBzID0gYXJyYXkoDQoJCSd7dHd9JyA9PiAkdHcs DQoJCSd7dGh9JyA9PiAkdGgsDQoJKTsNCgkkaGVscExpbmsgPSAiP2V2ZW50PXBsdWdpbiZz dGVwPXBsdWdpbl9oZWxwJm5hbWU9JHNtZF9hdF9mdWxsZXYjdXNhZ2UiOw0KDQoJJHBhZ2Vi eSA9IChncHMoJ3F0eScpKSA/IGdwcygncXR5JykgOiAoKGNzKCdzbWRfYXRfcGFnZWJ5Jykp ID8gY3MoJ3NtZF9hdF9wYWdlYnknKSA6IDE1KTsNCgkkbWF4X2ZpbGVfc2l6ZSA9IDE1MCAq IDEwMjQ7IC8vIGEgYml0IGFyYml0cmFyeSENCg0KCSRjdXJyX3NraW4gPSAoc21kX2F0X2V4 aXN0cygkdGhlbWUtPm5hbWUpKSA/ICR0aGVtZS0+bmFtZSA6ICdjbGFzc2ljJzsNCgkkc2tp bl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCgkkY3J1c2hlcnMgPSBzbWRfYXRfY3J1 c2hfb3B0aW9ucygpOw0KCSR1bmNydXNoZXJzID0gc21kX2F0X2NydXNoX29wdGlvbnMoJ2lt cG9ydCcpOw0KCSRiYXNlcyA9IGFycmF5KCk7DQoNCgkvLyBHZXQgYSBsaXN0IG9mIGFuY2Vz dG9yIHRoZW1lcyAoaS5lLiBkZXBlbmRlbmNpZXMpDQoJZm9yZWFjaCAoJHNraW5fbGlzdCBh cyAkc2tpbmEpIHsNCgkJJG1hbmlmZXN0ID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luYSk7 DQoJCWlmICgkbWFuaWZlc3QpIHsNCgkJCWlmICgkbWFuaWZlc3RbJ2Jhc2VkX29uJ10pIHsN CgkJCQkkYmFzZXNbXSA9ICRtYW5pZmVzdFsnYmFzZWRfb24nXTsNCgkJCX0NCgkJfQ0KCX0N CgkkYmFzZXMgPSBhcnJheV91bmlxdWUoJGJhc2VzKTsNCg0KCXBhZ2V0b3Aoc21kX2F0X2dU eHQoJ21hbmFnZV9sYmwnKSwkbWVzc2FnZSk7DQoNCgkvLyBIYW5kbGUgcGFnaW5nDQoJJHRv dGFsID0gY291bnQoJHNraW5fbGlzdCk7DQoJJGxpbWl0ID0gbWF4KEAkcGFnZWJ5LCAxNSk7 DQoJbGlzdCgkcGFnZSwgJG9mZnNldCwgJG51bVBhZ2VzKSA9IHBhZ2VyKCR0b3RhbCwgJGxp bWl0LCAkcGFnZSk7DQoJJHNraW5fbGlzdCA9IGFycmF5X3NsaWNlKCRza2luX2xpc3QsICRv ZmZzZXQsICRsaW1pdCk7DQoNCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAkc21kX2F0 X2V2ZW50LA0KCQkicGFnZSIgPT4gJHBhZ2UsDQoJKTsNCg0KCWVjaG8gPDw8RU9KUw0KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KZnVuY3Rpb24gc21kX2dldGNydXNoKHNr aW4pIHsNCglza2luSGFuZGxlID0gImNydXNoXyIrc2tpbjsNCglqUXVlcnkoJy5zbWRfcG9w dXAnKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlib3ggPSBqUXVlcnkodGhpcyk7DQoJCWlmIChi b3guYXR0cigiaWQiKSA9PSBza2luSGFuZGxlKSB7DQoJCQlpZiAoYm94LmNzcygiZGlzcGxh eSIpID09ICJub25lIikgew0KCQkJCWJveC5zbGlkZURvd24oJ2Zhc3QnKTsNCgkJCX0gZWxz ZSB7DQoJCQkJYm94LnNsaWRlVXAoJ2Zhc3QnKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWJv eC5zbGlkZVVwKCdmYXN0Jyk7DQoJCX0NCgl9KTsNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUr JyBhJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0aGlzKS5hdHRyKCJocmVmIiwg Ij9ldmVudD17JHNtZF9hdF9ldmVudH0mc2tpbj0iK3NraW4rIiZzdGVwPXNtZF9hdF9leHBv cnQmY3J1c2g9IitqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dFt0eXBlPVwncmFkaW9c J106Y2hlY2tlZCcpLnZhbCgpKyImcGFnZT0iK3skcGFnZX0pOw0KCX0pOw0KCXJldHVybiBm YWxzZTsNCn0NCg0KZnVuY3Rpb24gc21kX2dldHZhbChza2luLCBzdGVwKSB7DQoJc2tpbkhh bmRsZSA9ICJwb3BfIitza2luOw0KCWpRdWVyeSgnLnNtZF9wb3B1cCcpLmVhY2goZnVuY3Rp b24oKSB7DQoJCWJveCA9IGpRdWVyeSh0aGlzKTsNCgkJaWYgKGJveC5hdHRyKCJpZCIpID09 IHNraW5IYW5kbGUpIHsNCgkJCWlmIChib3guY3NzKCJkaXNwbGF5IikgPT0gIm5vbmUiKSB7 DQoJCQkJYm94LnNsaWRlRG93bignZmFzdCcpOw0KCQkJCWpRdWVyeSgnIycrc2tpbkhhbmRs ZSsnIGlucHV0JykuZm9jdXMoKTsNCgkJCX0gZWxzZSB7DQoJCQkJYm94LnNsaWRlVXAoJ2Zh c3QnKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCWJveC5zbGlkZVVwKCdmYXN0Jyk7DQoJCX0N Cgl9KTsNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBhJykuY2xpY2soZnVuY3Rpb24oKSB7 DQoJCWpRdWVyeSh0aGlzKS5hdHRyKCJocmVmIiwgIj9ldmVudD17JHNtZF9hdF9ldmVudH0m c2tpbj0iKygoc2tpbj09J25ldycpPyAnJyA6IHNraW4pKyImc3RlcD0iK3N0ZXArIiZuZXdf c2tpbj0iK2pRdWVyeSgnIycrc2tpbkhhbmRsZSsnIGlucHV0JykudmFsKCkrIiZwYWdlPSIr eyRwYWdlfSk7DQoJfSk7DQoNCglqUXVlcnkoJyMnK3NraW5IYW5kbGUrJyBpbnB1dCcpLmtl eXVwKGZ1bmN0aW9uICgpIHsNCgkJdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUucmVwbGFjZSgv W15hLXpBLVowLTlfXHg3Zi1ceGZmXS9nLCcnKTsNCgkJd2hpbGUgKHRoaXMudmFsdWUubGVu Z3RoID4gMCAmJiB0aGlzLnZhbHVlLnN1YnN0cmluZygwLDEpLm1hdGNoKC9bMC05XS8pKSB7 DQoJCQl0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5zdWJzdHJpbmcoMSk7DQoJCX0NCgl9KTsN Cg0KCXJldHVybiBmYWxzZTsNCn0NCjwvc2NyaXB0Pg0KRU9KUzsNCg0KCS8vIEluamVjdCBz dHlsZXMNCgllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPic7DQoJZWNobyBzdHJ0cigk c21kX2F0X3N0eWxlc1snY29tbW9uJ10ubi4kc21kX2F0X3N0eWxlc1skc3R5bGVydWxlXS5u LiRzbWRfYXRfc3R5bGVzWydjb250cm9sJ10sICRzdHlsZXJlcHMpOw0KCWVjaG8gJzwvc3R5 bGU+JzsNCg0KCS8vIExpc3QgdGhlIGF2YWlsYWJsZSBza2lucw0KCWVjaG8gc3RhcnRUYWJs ZSgnc21kX2NvbnRyb2wnLCcnLCcnLDUpOw0KCWVjaG8gdHIoDQoJCXRkYSh1cGxvYWRfZm9y bShzbWRfYXRfZ1R4dCgnaW5zdGFsbF9za2luJyksICcnLCAnc21kX2F0X2ltcG9ydCcsICRz bWRfYXRfZXZlbnQsICcnLCAkbWF4X2ZpbGVfc2l6ZSkuYnIuJzxkaXYgY2xhc3M9InNtZF9z bWFsbHByaW50Ij4nLnNtZF9hdF9nVHh0KCdzdXBwb3J0ZWRfaW1wb3J0JywgYXJyYXkoJ3t0 eXBlc30nID0+IGpvaW4oJywgJywgJHVuY3J1c2hlcnMpKSkuJzwvZGl2PicsICcgY29sc3Bh bj0iMiInKQ0KCQkudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX2F0 X2dUeHQoJ3NldHVwJyksICdwdWJsaXNoJykuc0lucHV0KCdzbWRfYXRfc2V0dXAnKS5lSW5w dXQoJHNtZF9hdF9ldmVudCkpLCcgY29sc3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdo dDo1MHB4IicpDQoJKTsNCgllY2hvIGVuZFRhYmxlKCk7DQoJZWNobyAnPGZvcm0gbWV0aG9k PSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgYWN0aW9uPSInLmpvaW5fcXMoJHFzKS4nIj4nOw0K CSRuZXdidG4gPSAnICcuJzxhIGNsYXNzPSJuYXZsaW5rIiBocmVmPSI/ZXZlbnQ9Jy4kc21k X2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2Nsb25lJy5hLidza2luPSIgb25jbGljaz0icmV0 dXJuIHNtZF9nZXR2YWwoXCduZXdcJywgXCdzbWRfYXRfY2xvbmVcJyk7Ij4nLnNtZF9hdF9n VHh0KCduZXcnKS4nPC9hPicNCgkJLiAnPGRpdiBpZD0icG9wX25ldyIgY2xhc3M9InNtZF9w b3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCduZXdfc2tpbicpLic8L3Nw YW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNtZF90ZXh0X25hbWUiIHZhbHVlPSIiIC8+ IDxhIGhyZWY9IiMiPlsnLnNtZF9hdF9nVHh0KCdjb25maXJtJykuJ108L2E+PC9kaXY+JzsN CgkkcmVwb2J0biA9ICcgJy4nPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9IicuJHNtZF9hdF90 aGVtZV9yZXBvLiciPicuc21kX2F0X2dUeHQoJ2ZpbmRfdGhlbWUnKS4nPC9hPic7DQoJJGhk cm93ID0gaGVkKHNtZF9hdF9nVHh0KCdsaXN0X3RpdGxlJykuICcgJy4gc21kX2F0X2dUeHQo J2hlbHBfbGluaycsIGFycmF5KCd7bGlua30nID0+ICRoZWxwTGluaykpLCAzKTsNCglpZiAo JGxheW91dD09IjAiKSB7DQoJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcsJycsJ3NtZF9hdF9s aXN0Jyw1KTsNCgkJZWNobyB0cigNCgkJCXRkYSgkaGRyb3cuJHJlcG9idG4uJG5ld2J0biwg JyBjb2xzcGFuPSI3IicpDQoJCSk7DQoJCWVjaG8gdHIoDQoJCQlhc3NIZWFkKA0KCQkJCXNt ZF9hdF9nVHh0KCdza2luX2dibCcpLA0KCQkJCSdhdXRob3InLA0KCQkJCWdUeHQoJ3ZlcnNp b24nKSwNCgkJCQknZGVzY3JpcHRpb24nLA0KCQkJCXNtZF9hdF9nVHh0KCdhY3Rpb25zJykN CgkJCQkpDQoJCSk7DQoJfSBlbHNlIHsNCgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2dyaWQi PjxkaXYgY2xhc3M9InNtZF9uZXdyb3ciPicuJGhkcm93LiRyZXBvYnRuLiRuZXdidG4uJzwv ZGl2Pic7DQoJfQ0KCWlmKCBpc19jYWxsYWJsZSgnZnNvY2tvcGVuJykgKQ0KCQkkdHJhbnNw b3J0ID0gJ2Zzb2NrJzsNCgllbHNlaWYoIGlzX2NhbGxhYmxlKCdjdXJsX2luaXQnKSApIHsN CgkJJHRyYW5zcG9ydCA9ICdjdXJsJzsNCgl9IGVsc2Ugew0KCQkkdHJhbnNwb3J0ID0gJyc7 DQoJfQ0KDQoJJGZlZWQgPSAnJzsNCglzd2l0Y2ggKCR0cmFuc3BvcnQpIHsNCgkJY2FzZSAn Y3VybCc6DQoJCQkkYyA9IGN1cmxfaW5pdCgpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxP UFRfVVJMLCAkc21kX2F0X2ZlZWR1cmwpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRf UkVGRVJFUiwgaHUpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfUkVUVVJOVFJBTlNG RVIsIHRydWUpOw0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVkVSQk9TRSwgZmFsc2Up Ow0KCQkJY3VybF9zZXRvcHQoJGMsIENVUkxPUFRfVElNRU9VVCwgMTApOw0KCQkJJGZlZWQg PSBjdXJsX2V4ZWMoJGMpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2Zzb2NrJzoNCgkJCSR1cmwg PSBwYXJzZV91cmwoJHNtZF9hdF9mZWVkdXJsKTsNCgkJCSRmcCA9IEBmc29ja29wZW4gKCR1 cmxbJ2hvc3QnXSwgODAsICRlcnJubywgJGVycnN0ciwgNSk7DQoJCQlpZiAoJGZwKSB7DQoJ CQkJJHFyeSA9ICdHRVQgJy4kc21kX2F0X2ZlZWR1cmw7DQoJCQkJJHFyeSAuPSAiIEhUVFAv MS4wXHJcblxyXG4iOw0KDQoJCQkJZnB1dHMoJGZwLCAkcXJ5KTsNCgkJCQlzdHJlYW1fc2V0 X3RpbWVvdXQoJGZwLCAxMCk7DQoJCQkJJGluZm8gPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgk ZnApOw0KDQoJCQkJJGhkcnMgPSB0cnVlOw0KCQkJCXdoaWxlICgoIWZlb2YoJGZwKSkgJiYg KCEkaW5mb1sndGltZWRfb3V0J10pKSB7DQoJCQkJCSRsaW5lID0gZmdldHMoJGZwLCA4MTky KTsNCgkJCQkJJGxpbmUgPSBwcmVnX3JlcGxhY2UoIltcclxuXSIsICIiLCAkbGluZSk7DQoJ CQkJCWlmICgkaGRycyA9PSBmYWxzZSkgew0KCQkJCQkJJGZlZWQgLj0gJGxpbmUuIlxuIjsN CgkJCQkJfQ0KCQkJCQlpZiAoc3RybGVuKCRsaW5lKSA9PSAwKSAkaGRycyA9IGZhbHNlOw0K CQkJCX0NCgkJCQlpZiAoJGluZm9bJ3RpbWVkX291dCddKSB7DQoJCQkJCSRmZWVkID0gJyc7 DQoJCQkJfQ0KCQkJCWZjbG9zZSgkZnApOw0KCQkJfSBlbHNlIHsNCgkJCQkkZmVlZCA9ICcn Ow0KCQkJfQ0KCQkJYnJlYWs7DQoJCWRlZmF1bHQ6DQoJCQkkZmVlZCA9ICcnOw0KCX0NCg0K CSRzbWRfYXRfdmxhc3QgPSAnJzsNCgkkZmVlZHMgPSBhcnJheSgpOw0KCWlmIChpc3NldCgk cHJlZnNbJ3NtZF9hdF92ZXJzaW9ucyddKSAmJiBpc3NldCgkcHJlZnNbJ3NtZF9hdF92bGFz dCddKSkgew0KCQlpZiAodGltZSgpIC0gJHByZWZzWydzbWRfYXRfdmxhc3QnXSA8IDg2NDAw KSB7DQoJCQkvLyBMYXN0IHVwZGF0ZWQgd2l0aGluIHRoZSBsYXN0IGRheSwgc28gcmVhZCB0 aGUgY2FjaGVkIHZlcnNpb24gbnVtYmVycw0KCQkJJGZlZWRzID0gdW5zZXJpYWxpemUoJHBy ZWZzWydzbWRfYXRfdmVyc2lvbnMnXSk7DQoJCX0NCgl9DQoJaWYgKCEkZmVlZHMgfHwgZ3Bz KCdyZWFkX3ZlcnNpb25zJykpIHsNCgkJJGZlZWRzID0gc21kX2F0X2ZlZWQoJGZlZWQpOw0K CQkkaW5zdGFsbGVkX2ZlZWQgPSBhcnJheSgpOw0KCQkkZmVlZHMgPSAoaXNfYXJyYXkoJGZl ZWRzKSkgPyAkZmVlZHMgOiBhcnJheSgpOw0KDQoJCS8vIE9ubHkgcmVjb3JkIHRoZSB2ZXJz aW9uIGluZm8gZnJvbSB0aGVtZXMgdGhhdCBhcmUgaW5zdGFsbGVkDQoJCWZvcmVhY2goJHNr aW5fbGlzdCBhcyAkc2tpbl9uYW1lKSB7DQoJCQkkZmVlZF9za2luX25hbWUgPSBzdHJfcmVw bGFjZSgnXycsICctJywgJHNraW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgdGhlIHVybF90aXRs ZQ0KCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJGZlZWRfc2tpbl9uYW1lLCAkZmVlZHMpKSB7 DQoJCQkJJGluc3RhbGxlZF9mZWVkWyRmZWVkX3NraW5fbmFtZV0gPSAkZmVlZHNbJGZlZWRf c2tpbl9uYW1lXTsNCgkJCX0NCgkJfQ0KCQlzZXRfcHJlZignc21kX2F0X3ZsYXN0JywgdGlt ZSgpLCAkc21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkJc2V0 X3ByZWYoJ3NtZF9hdF92ZXJzaW9ucycsIHNlcmlhbGl6ZSgkaW5zdGFsbGVkX2ZlZWQpLCAk c21kX2F0X2V2ZW50LCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgl9DQoNCglmb3Jl YWNoICgkc2tpbl9saXN0IGFzICRza2luX25hbWUpIHsNCgkJLy8gUmVhZCBlYWNoIG1hbmlm ZXN0IGFuZCBzZXQgdXAgdGhlIGxhYmVscw0KCQkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tp bmZvKCRza2luX25hbWUpOw0KCQkkZmVlZF9za2luX25hbWUgPSBzdHJfcmVwbGFjZSgnXycs ICctJywgJHNraW5fbmFtZSk7IC8vIFVuc2FuaXRpemUgZm9yIHVybF90aXRsZSBtYXRjaGlu Zw0KDQoJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRza2luZm8sIDEpOw0KCQkk dGhpc19za2luID0gKCRza2luZm8pID8gKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8g c3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXSkgOiAkc2tpbl9u YW1lOw0KCQkkaXNfZ2JsID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2lu J10pICYmICRza2luX25hbWUgPT0gJGF0X3ByZWZzWydzbWRfYXRfZ2xvYmFsX3NraW4nXSkg PyBzbWRfYXRfZ1R4dCgnaXNfZ2xvYmFsJykgOiAnJzsNCgkJJHRodW1yb3cgPSAnPGEgaHJl Zj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9zd2l0Y2gnLmEuJ25l eHRzdGVwPXNtZF9hdF9saXN0Jy5hLidza2luPScuJHNraW5fbmFtZS5hLidwYWdlPScuJHBh Z2UuJyIgdGl0bGU9Iicuc21kX2F0X2dUeHQoJ2FwcGx5X3NraW4nKS4nIj4nLiR0aGlzX3Nr aW4uJGlzX2dibC4oKCRza2luZm8gJiYgJHNraW5mb1snYmFzZWRfb24nXSkgPyBzbWRfYXRf Z1R4dCgnYmFzZWRfb24nLCBhcnJheSgne3NraW59JyA9PiAkc2tpbmZvWydiYXNlZF9vbidd KSkgOiAnJykuKCgkdGh1bWJuYWlsKSA/ICc8ZGl2PicuJHRodW1ibmFpbC4nPC9kaXY+JyA6 ICcnKS4nPC9hPic7DQoJCSRhdXRocm93ID0gKCgkc2tpbmZvICYmIHN0cnBvcygkc2tpbmZv WydhdXRob3JfdXJpJ10sICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5m b1snYXV0aG9yX3VyaSddLiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogKCgkc2tp bmZvKSA/ICRza2luZm9bJ2F1dGhvciddIDogJy0nKSk7DQoJCSRhY3Ryb3cgPSAnPGEgaHJl Zj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNtZF9hdF9lZGl0Jy5hLidza2lu PScuJHNraW5fbmFtZS4nIj5bJy5nVHh0KCdlZGl0JykuJ108L2E+Jw0KCQkJLiAnICcgLigo JHNraW5mbykgPyAnPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVwPXNt ZF9hdF9jbG9uZScuYS4nc2tpbj0nLiRza2luX25hbWUuJyIgb25jbGljaz0icmV0dXJuIHNt ZF9nZXR2YWwoXCcnLiRza2luX25hbWUuJ1wnLCBcJ3NtZF9hdF9jbG9uZVwnKTsiPlsnLnNt ZF9hdF9nVHh0KCdjbG9uZScpLiddPC9hPicgOiAnJykNCgkJCS4gJyAnIC4oKCRza2luZm8p ID8gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZXhw b3J0Jy5hLidza2luPScuJHNraW5fbmFtZS4nIiBvbmNsaWNrPSJyZXR1cm4gc21kX2dldGNy dXNoKFwnJy4kc2tpbl9uYW1lLidcJyk7Ij5bJy5zbWRfYXRfZ1R4dCgnZXhwb3J0JykuJ108 L2E+JyA6ICcnKQ0KCQkJLiAnICcgLigoaW5fYXJyYXkoJHNraW5fbmFtZSwgJHNtZF9jb3Jl X3RoZW1lcykgfHwgaW5fYXJyYXkoJHNraW5fbmFtZSwgJGJhc2VzKSkgPyAnJyA6ICc8YSBo cmVmPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LmEuJ3N0ZXA9c21kX2F0X2RlbGV0ZScuYS4n c2tpbj0nLiRza2luX25hbWUuYS4ncGFnZT0nLiRwYWdlLiciIG9uY2xpY2s9InJldHVybiBj b25maXJtKFwnJy5zbWRfYXRfZ1R4dCgnZGVsZXRlX2NvbmZpcm0nLCBhcnJheSgne3NraW59 JyA9PiAkc2tpbl9uYW1lKSkuJ1wnKTsiPlsnLmdUeHQoJ2RlbGV0ZScpLiddPC9hPicpDQoJ CQkuICc8ZGl2IGlkPSJwb3BfJy4kc2tpbl9uYW1lLiciIGNsYXNzPSJzbWRfcG9wdXAgc21k X2hpZGRlbiI+PHNwYW4+Jy5zbWRfYXRfZ1R4dCgnbmV3X2Nsb25lc2tpbicpLic8L3NwYW4+ PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNtZF90ZXh0X25hbWUiIHZhbHVlPSIiIC8+IDxh IGhyZWY9IiMiPiZuYnNwO1snLnN0cm9uZyhzbWRfYXRfZ1R4dCgnY29uZmlybScpKS4nXTwv YT48L2Rpdj4nDQoJCQkuICc8ZGl2IGlkPSJjcnVzaF8nLiRza2luX25hbWUuJyIgY2xhc3M9 InNtZF9wb3B1cCBzbWRfaGlkZGVuIj48c3Bhbj4nLnNtZF9hdF9nVHh0KCdjcnVzaF9mb3Jt YXQnKS4nPC9zcGFuPicucmFkaW9TZXQoJGNydXNoZXJzLCAkc2tpbl9uYW1lLidfY3J1c2gn LCAoKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X2NydXNoJ10pKSA/ICRhdF9wcmVmc1snc21k X2F0X2NydXNoJ10gOiAnJykgKS4nPGEgaHJlZj0iIyI+Jm5ic3A7Wycuc3Ryb25nKHNtZF9h dF9nVHh0KCdjb25maXJtJykpLiddPC9hPjwvZGl2Pic7DQoJCSR2ZXJvdyA9ICgkc2tpbmZv KSA/ICgoaXNzZXQoJGZlZWRzWyRmZWVkX3NraW5fbmFtZV0pICYmIGlzc2V0KCRmZWVkc1sk ZmVlZF9za2luX25hbWVdWydzdW1tYXJ5J10pICYmIHZlcnNpb25fY29tcGFyZSgkZmVlZHNb JGZlZWRfc2tpbl9uYW1lXVsnc3VtbWFyeSddLCRza2luZm9bJ3ZlcnNpb24nXSk9PT0xKSA/ ICc8YSBocmVmPSInLiRmZWVkc1skZmVlZF9za2luX25hbWVdWydsaW5rJ10uJyIgY2xhc3M9 InNtZF9hdF91cGRhdGUiPicuc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJz aW9uJ10uJzwvYT4nIDogc21kX2F0X2dUeHQoJ3ZlcnNpb24nKS4kc2tpbmZvWyd2ZXJzaW9u J10pIDogJyc7DQoNCgkJaWYgKCRsYXlvdXQ9PTApIHsNCgkJCWVjaG8gdHIoDQoJCQkJdGQo JHRodW1yb3cpDQoJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJLnRkKCR2ZXJvdykNCgkJ CQkudGQoKCgkc2tpbmZvKT8gJHNraW5mb1snZGVzY3JpcHRpb24nXSA6ICctJykuKCgkc2tp bmZvICYmICRza2luZm9bJ2hlbHAnXSkgPyAnICcuaHJlZignWycuZ1R4dCgnaGVscCcpLidd JywgJHNraW5mb1snaGVscCddKSA6ICcnKSwgMjUwKQ0KCQkJCS50ZCgkYWN0cm93LDI2MCkN CgkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBjbGFzcz0iYWN0aXZlIicg OiAnJykNCgkJCSk7DQoJCX0gZWxzZSB7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2Vs bCcuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBhY3RpdmUnIDogJycpLiciPic7 DQoJCQllY2hvICc8ZGl2PicuJHRodW1yb3cuJzwvZGl2Pic7DQoJCQllY2hvICc8ZGl2IGNs YXNzPSJzbWRfYXV0aCI+Jy4kdmVyb3cuc21kX2F0X2dUeHQoJ2J5JykuJGF1dGhyb3cuJzwv ZGl2Pic7DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfYWN0aW9ucyI+Jy4kYWN0cm93Lic8 L2Rpdj4nOw0KCQkJZWNobyAnPC9kaXY+JzsNCgkJfQ0KCX0NCg0KCWlmICgkbGF5b3V0PT0i MCIpIHsNCgkJZWNobyAnPC90ZD48L3RyPic7DQoJCWVjaG8gZW5kVGFibGUoKTsNCgl9IGVs c2Ugew0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfY2xlYXIiPjwvZGl2PjwvZGl2Pic7DQoJ fQ0KCWVjaG8gJzwvZm9ybT4nOw0KCWVjaG8gbi5uYXZfZm9ybSgkc21kX2F0X2V2ZW50LCAk cGFnZSwgJG51bVBhZ2VzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsNCgllY2hvIG4ucGFn ZWJ5X2Zvcm0oJHNtZF9hdF9ldmVudCwgJHBhZ2VieSk7DQp9DQoNCmZ1bmN0aW9uIHNtZF9h dF9mZWVkKCRmZWVkKSB7DQoJZ2xvYmFsICRmZWVkczsNCg0KCSRmZWVkPXByZWdfcmVwbGFj ZSgiLz4iLiJbWzpzcGFjZTpdXSsiLiI8L2kiLCAiPjwiLCAkZmVlZCk7IC8vIEtpbGwgd2hp dGVzcGFjZSBpbiBmZWVkDQoJJHhtbHBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7DQoJ eG1sX3NldF9lbGVtZW50X2hhbmRsZXIoJHhtbHBhcnNlciwgInNtZF9hdF9mZWVkX3N0YXJ0 X3RhZyIsICJzbWRfYXRfZmVlZF9lbmRfdGFnIik7DQoJeG1sX3NldF9jaGFyYWN0ZXJfZGF0 YV9oYW5kbGVyKCR4bWxwYXJzZXIsICJzbWRfYXRfZmVlZF90YWdfY29udGVudHMiKTsNCgl4 bWxfcGFyc2UoJHhtbHBhcnNlciwgJGZlZWQpOw0KCXhtbF9wYXJzZXJfZnJlZSgkeG1scGFy c2VyKTsNCg0KCXJldHVybiAkZmVlZHM7DQp9DQoNCmZ1bmN0aW9uIHNtZF9hdF9mZWVkX3N0 YXJ0X3RhZygkcGFyc2VyLCAkbmFtZSwgJGF0dHJpYnMpIHsNCglnbG9iYWwgJHNtZF9hdF9m ZWVkaW4sICRzbWRfYXRfZmVlZHRhZzsNCglpZiAoJG5hbWUgPT0gIkVOVFJZIikgew0KCQkk c21kX2F0X2ZlZWRpbiA9IHRydWU7DQoJfQ0KCWlmICgkc21kX2F0X2ZlZWRpbikgew0KCQkk c21kX2F0X2ZlZWR0YWcgPSAkbmFtZTsNCgl9DQp9DQpmdW5jdGlvbiBzbWRfYXRfZmVlZF9l bmRfdGFnKCRwYXJzZXIsICRuYW1lKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21k X2F0X2ZlZWR0YWcsICRzbWRfYXRfZmVlZG5hbWU7DQoJaWYgKCRuYW1lID09ICJFTlRSWSIp IHsNCgkJJHNtZF9hdF9mZWVkaW4gPSBmYWxzZTsNCgkJJHNtZF9hdF9mZWVkbmFtZSA9ICcn Ow0KCX0NCn0NCg0KZnVuY3Rpb24gc21kX2F0X2ZlZWRfdGFnX2NvbnRlbnRzKCRwYXJzZXIs ICRkYXRhKSB7DQoJZ2xvYmFsICRzbWRfYXRfZmVlZGluLCAkc21kX2F0X2ZlZWR0YWcsICRz bWRfYXRfZmVlZG5hbWUsICRmZWVkczsNCglpZiAoJHNtZF9hdF9mZWVkaW4pIHsNCgkJaWYg KCRzbWRfYXRfZmVlZHRhZyA9PSAiTkFNRSIpIHsNCgkJCSRmZWVkc1skZGF0YV0gPSAnJzsN CgkJCSRzbWRfYXRfZmVlZG5hbWUgPSAkZGF0YTsNCgkJfQ0KCQlpZiAoaXNzZXQoJGZlZWRz WyRzbWRfYXRfZmVlZG5hbWVdKSkgew0KCQkJaWYgKCRzbWRfYXRfZmVlZHRhZyA9PSAiVElU TEUiIHx8ICRzbWRfYXRfZmVlZHRhZyA9PSAiU1VNTUFSWSIgfHwgJHNtZF9hdF9mZWVkdGFn ID09ICJVUERBVEVEIiB8fCAkc21kX2F0X2ZlZWR0YWcgPT0gIklEIiB8fCAkc21kX2F0X2Zl ZWR0YWcgPT0gIkxJTksiKSB7DQoJCQkJJGZlZWRzWyRzbWRfYXRfZmVlZG5hbWVdW3N0cnRv bG93ZXIoJHNtZF9hdF9mZWVkdGFnKV0gPSAkZGF0YTsNCgkJCX0NCgkJfQ0KCX0NCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZW1vdmUgaGFyZCBzcGFjZXMgaW4g dGhlIHVwbG9hZF9mb3JtIHNvIE9wZXJhIGFuZCBJRSB3cmFwIHRoZSBidXR0b25zDQpmdW5j dGlvbiBzbWRfYXRfdXBsb2FkX2Zvcm0oJGV2ZW50LCAkc3RlcCwgJGRhdGEsICRhcmdzKSB7 DQoJcmV0dXJuIHN0cl9yZXBsYWNlKCcmIzE2MDsnLCAnICcsICRkYXRhKTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfZWRpdCgkbWVzc2Fn ZT0nJykgew0KCWdsb2JhbCAkc21kX2F0X2V2ZW50LCAkc21kX2F0X3N0eWxlczsNCg0KCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywgJ25ld19za2luJywgJ2ZpbGUnKSkp KTsNCg0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkkbGF5b3V0ID0gKGlz c2V0KCRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9s YXlvdXQnXSA6IDE7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNzcyIsICJqcyIs ICJwaHAiKTsNCgkkaW1hZ2FibGUgPSBhcnJheSgianBnIiwgImpwZWciLCAiZ2lmIiwgInBu ZyIpOw0KCSRtYXhfZmlsZV9zaXplID0gMiAqIDEwMjQgKiAxMDI0Ow0KDQoJJHNraW5mbyA9 IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbik7DQoJJGZpbGUgPSAoZW1wdHkoJG5ld19za2lu KSkgPyAkZmlsZSA6ICRuZXdfc2tpbjsNCgkkZmlsZXMgPSBzbWRfYXRfbGlzdGRpcihUSEVN RS4kc2tpbik7DQoJc29ydCgkZmlsZXMpOw0KDQoJLy8gU3BsaXQgdGhlIGxpc3QgaW50byBp dHMgZGlyZWN0b3J5IGdyb3Vwcw0KCSRhbGxmaWxlcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAo JGZpbGVzIGFzICRjdXJyZmlsZSkgew0KCQkkZmlsZV9pbmZvID0gcGF0aGluZm8oJGN1cnJm aWxlKTsNCgkJLy8gSWdub3JlIGFueSByb2d1ZSBTdWJ2ZXJzaW9uIGZpbGVzDQoJCWlmIChz dHJwb3MoJGZpbGVfaW5mb1snZGlybmFtZSddLCAnLy5zdm4nKSA9PT0gZmFsc2UpIHsNCgkJ CSRmaWxlX3R5cGUgPSAoaXNzZXQoJGZpbGVfaW5mb1snZXh0ZW5zaW9uJ10pKSA/ICRmaWxl X2luZm9bJ2V4dGVuc2lvbiddIDogJ290aGVyJzsNCgkJCSRhbGxmaWxlc1skZmlsZV90eXBl XVtdID0gJGN1cnJmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKGdwcygnc21kX2F0X2VkaXRzJykp IHsNCgkJJGNvbnRlbnRzID0gc3RyX3JlcGxhY2UoJ1xyXG4nLCcNCicsZ3BzKCdzbWRfYXRf ZWRpdHMnKSk7IC8vIG5ld2xpbmUgd29ya2Fyb3VuZA0KCX0gZWxzZSB7DQoJCSRjb250ZW50 cyA9ICcnOw0KCQlpZiAoJGZpbGUgJiYgZmlsZV9leGlzdHMoVEhFTUUuJHNraW4uRFMuJGZp bGUpKSB7DQoJCQkkY29udGVudHMgPSBmaWxlKFRIRU1FLiRza2luLkRTLiRmaWxlKTsNCgkJ CSRjb250ZW50cyA9IGpvaW4oIiIsICRjb250ZW50cyk7DQoJCX0NCgl9DQoNCgkvLyBCZWdp biByZW5kZXJpbmcgdGhlIHBhZ2UNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdlZGl0X2xibCcp LCRtZXNzYWdlKTsNCg0KCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgllY2hv ICRzbWRfYXRfc3R5bGVzWydlZGl0J107DQoJZWNobyAnPC9zdHlsZT4nOw0KDQoJJHNraW5f bGlzdCA9IHNtZF9hdF9yZWFkX3NraW5zKCk7DQoNCgkvLyBzZWxlY3RJbnB1dCBuZWVkcyBi b3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNhc2UNCgkkc2tp bnNlbCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkc2tpbl9saXN0IGFzICRrZXkxID0+ICR2YWx1 ZTEpIHsNCgkJJHNraW5zZWxbJHZhbHVlMV0gPSAkc2tpbl9saXN0WyRrZXkxXTsNCiAgIH0N Cgkkc2tpbkNoYW5nZSA9ICc8Zm9ybSBuYW1lPSJza2luY2hhbmdlIiBhY3Rpb249ImluZGV4 LnBocCI+Jw0KCQkuIGVJbnB1dCgkc21kX2F0X2V2ZW50KQ0KCQkuIHNJbnB1dCgnc21kX2F0 X2VkaXQnKQ0KCQkuIHNlbGVjdElucHV0KCdza2luJywgJHNraW5zZWwsICRza2luLCAwLCAx KQ0KCQkuICc8L2Zvcm0+JzsNCg0KCSRmaWxlTGlzdCA9IGhlZChzbWRfYXRfZ1R4dCgnc2tp bl9maWxlcycpLDIpDQoJCS4gJHNraW5DaGFuZ2UNCgkJLiBzdGFydFRhYmxlKCdsaXN0Jywg J2xlZnQnLCAnc21kX3NraW5fZmlsZXR5cGVzJyk7DQoJJGZpbGVMaXN0IC49ICc8YnIgLz48 YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC5hLidzdGVw PXNtZF9hdF9uZXdmaWxlJy5hLidza2luPScuJHNraW4uJyI+Jy5zbWRfYXRfZ1R4dCgnbmV3 X2ZpbGUnKS4nPC9hPic7DQoJJGZpbGVMaXN0IC49ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhy ZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9 PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2luX2dyaWQnKSkuJzwvYT48YnIgLz4nOw0KCSRv dGhlcnMgPSBhcnJheSgpOw0KDQoJZm9yZWFjaCAoJGVkaXRhYmxlIGFzICRmaWxldHlwZSkg ew0KCQlpZiAoaXNzZXQoJGFsbGZpbGVzWyRmaWxldHlwZV0pKSB7DQoJCQlmb3JlYWNoICgk YWxsZmlsZXNbJGZpbGV0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCWlmICgk aWR4ID09IDApIHsNCgkJCQkJJGZpbGVMaXN0IC49IHRyKHRkKGhlZChzbWRfYXRfZ1R4dCgk ZmlsZXR5cGUpLDMpKSk7DQoJCQkJfQ0KCQkJCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRjdXJy ZmlsZSk7DQoJCQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhwbG9kZSAoJy4nLCRqdXN0 ZmlsZSkpOw0KCQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQu YS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2luLmEuJ2ZpbGU9Jy4kanVzdGZp bGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJvbmcoJGp1c3RmaWxlKSA6ICRq dXN0ZmlsZSkuJzwvYT4nOw0KCQkJCSRkZWwgPSAoJGJhc2VmaWxlID09ICRza2luKSA/ICcn IDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGUnLCAnZmlsZScsICRqdXN0 ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJJGZpbGVMaXN0IC49IHRyKHRkKCRlZGl0 KS50ZCgkZGVsKSk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkvLyBTb21lIG90aGVyIGZpbGUg dHlwZQ0KCQkJaWYgKCEkb3RoZXJzKSB7DQoJCQkJZm9yZWFjaCAoJGFsbGZpbGVzIGFzICRm dHlwZSA9PiAkZmxzKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJGZ0eXBlLCBhcnJheV9tZXJn ZSgkZWRpdGFibGUsICRpbWFnYWJsZSkpKSB7DQoJCQkJCQlmb3JlYWNoICgkYWxsZmlsZXNb JGZ0eXBlXSBhcyAkaWR4ID0+ICRjdXJyZmlsZSkgew0KCQkJCQkJCSRqdXN0ZmlsZSA9IGJh c2VuYW1lKCRjdXJyZmlsZSk7DQoJCQkJCQkJJGJhc2VmaWxlID0gYXJyYXlfc2hpZnQoZXhw bG9kZSAoJy4nLCRqdXN0ZmlsZSkpOw0KCQkJCQkJCSRlZGl0ID0gJzxhIGhyZWY9Ij9ldmVu dD0nLiRzbWRfYXRfZXZlbnQuYS4nc3RlcD1zbWRfYXRfZWRpdCcuYS4nc2tpbj0nLiRza2lu LmEuJ2ZpbGU9Jy4kanVzdGZpbGUuJyI+Jy4oKCRmaWxlID09ICRqdXN0ZmlsZSkgPyBzdHJv bmcoJGp1c3RmaWxlKSA6ICRqdXN0ZmlsZSkuJzwvYT4nOw0KCQkJCQkJCSRkZWwgPSAoJGJh c2VmaWxlID09ICRza2luKSA/ICcnIDogZExpbmsoJHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9k ZWxldGUnLCAnZmlsZScsICRqdXN0ZmlsZSwgMSwgJ3NraW4nLCAkc2tpbik7DQoJCQkJCQkJ JG90aGVyc1tdID0gdHIodGQoJGVkaXQpLnRkKCRkZWwpKTsNCgkJCQkJCX0NCgkJCQkJfQ0K CQkJCX0NCgkJCX0NCgkJfQ0KCX0NCgkkZmlsZUxpc3QgLj0gKCRvdGhlcnMpID8gdHIodGQo aGVkKHNtZF9hdF9nVHh0KCdvdGhlcl9maWxlcycpLDMpKSkuIGpvaW4obiwgJG90aGVycykg OiAnJzsNCgkkZmlsZUxpc3QgLj0gZW5kVGFibGUoKTsNCg0KCS8vIE1ha2UgdGhlIGxpc3Qg b2YgaW1hZ2VzIGZvciB0aGlzIHNraW4NCgkkcXMgPSBhcnJheSgNCgkJImV2ZW50IiA9PiAk c21kX2F0X2V2ZW50LA0KCQkic3RlcCIgPT4gJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLA0KCSk7 DQoJJHNlbFtdID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNtZF9hdF9pbWFnZWZvcm0i IG5hbWU9InNtZF9hdF9pbWFnZWZvcm0iIGFjdGlvbj0iJy5qb2luX3FzKCRxcykuJyI+JzsN Cgkkc2VsW10gPSAnPHNlbGVjdCBpZD0ic21kX2F0X2ltYWdlcyIgbmFtZT0ic21kX2F0X2lt YWdlc1tdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iMjQiIG11bHRpcGxlPSJtdWx0aXBsZSIgc3R5 bGU9IndpZHRoOjE1NHB4OyI+JzsNCg0KCWlmIChkZWZpbmVkKCdHTE9CX0JSQUNFJykpIHsN CgkJJGltZyA9IGdsb2IoVEhFTUUuJHNraW4uRFMuJ3sqLmpwZywqLmdpZiwqLnBuZ30nLCBH TE9CX0JSQUNFKTsNCgl9IGVsc2Ugew0KCQkkaW1nID0gYXJyYXlfbWVyZ2UoZ2xvYihUSEVN RS4kc2tpbi5EUy4nKi5qcGcnKSxnbG9iKFRIRU1FLiRza2luLkRTLicqLmdpZicpLGdsb2Io VEhFTUUuJHNraW4uRFMuJyoucG5nJykpOw0KCX0NCg0KCWlmKGlzX2FycmF5KCRpbWcpKSB7 DQoJCWZvcmVhY2ggKCRpbWcgYXMgJGltZ2ZpbGUpIHsNCgkJCSRzZWxbXSA9IHQuJzxvcHRp b24gdmFsdWU9IicuJGltZ2ZpbGUuJyI+Jy5iYXNlbmFtZSgkaW1nZmlsZSkuJzwvb3B0aW9u Pic7DQoJCX0NCgl9DQoJJHNlbFtdID0gJzwvc2VsZWN0Pic7DQoJJHNlbFtdID0gZExpbmso JHNtZF9hdF9ldmVudCwgJ3NtZF9hdF9kZWxldGVfaW1hZ2UnLCAnc2tpbicsICRza2luLCAx KTsNCgkkc2VsW10gPSAnPC9mb3JtPic7DQoJJHNlbCA9IGpvaW4oJycsJHNlbCk7DQoNCgkv LyBJbWFnZSBwb3J0aW9uDQoJJGltZ2JpdCA9IGhlZChzbWRfYXRfZ1R4dCgnc2tpbl9pbWFn ZXMnKSwgMikgLiBzdGFydFRhYmxlKCdsaXN0JywgJ2xlZnQnKTsNCgkkaW1nYml0IC49IHRy KHRkKCRzZWwpKTsNCgkkaW1nYml0IC49IHRyKHRkKHVwbG9hZF9mb3JtKHNtZF9hdF9nVHh0 KCd1cGxvYWRfaW1hZ2UnKSwgJycsICdzbWRfYXRfdXBsb2FkX2ltYWdlJywgJHNtZF9hdF9l dmVudCwgJHNraW4sICRtYXhfZmlsZV9zaXplLCAnJywgJycpLCAxNTApKTsNCgkkaW1nYml0 IC49IGVuZFRhYmxlKCk7DQoNCgkvLyBSZW5kZXIgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UNCgll Y2hvIHN0YXJ0VGFibGUoJ2VkaXQnKS4NCgl0cigNCgkJdGR0bCgkaW1nYml0KS4NCgkJdGQo DQoJCQloZWQoKCgkc2tpbmZvKSA/ICRza2luZm9bJ2RuYW1lJ10gOiAkc2tpbiksMSkuDQoJ CQlmb3JtKA0KCQkJCSc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmV3X3NraW4iIHZhbHVl PSInLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpLiciIGNsYXNzPSJlZGl0IiBzaXplPSI0MCIg dGFiaW5kZXg9IjIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHg7IiAvPicuYnINCgkJCQku Jzx0ZXh0YXJlYSBpZD0ic21kX2F0X2VkaXRzIiBjbGFzcz0iY29kZSIgbmFtZT0ic21kX2F0 X2VkaXRzIiBjb2xzPSI3NiIgcm93cz0iMzIiPicuaHRtbHNwZWNpYWxjaGFycygkY29udGVu dHMpLic8L3RleHRhcmVhPicuYnINCgkJCQkuZklucHV0KCdzdWJtaXQnLCcnLGdUeHQoJ3Nh dmUnKSwncHVibGlzaCcpDQoJCQkJLmVJbnB1dCgkc21kX2F0X2V2ZW50KS5zSW5wdXQoJ3Nt ZF9hdF9zYXZlJykNCgkJCQkuaElucHV0KCdza2luJywkc2tpbikNCgkJCQkuaElucHV0KCdm aWxlJywkZmlsZSkNCgkJCSkNCgkJKS4NCgkJdGR0bCgkZmlsZUxpc3QpDQoJKS4NCgllbmRU YWJsZSgpOw0KDQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gSnVzdCBj bGVhciBvdXQgdGhlIHZhciBzbyB0aGUgc2F2ZSBmdW5jdGlvbiB0cmVhdHMgdGhlIGNvbnRl bnQgYXMgYSBuZXcgZmlsZQ0KZnVuY3Rpb24gc21kX2F0X25ld2ZpbGUoKSB7DQoJJF9QT1NU WydmaWxlJ10gPSAnJzsNCgkkbWVzc2FnZT0nJzsNCglzbWRfYXRfZWRpdCgkbWVzc2FnZSk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2Ns b25lKCkgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShh cnJheSgnc2tpbicsICduZXdfc2tpbicpKSkpOw0KCSRtc2c9Jyc7DQoNCgkkbmV3X3NraW4g PSB0cmltKCRuZXdfc2tpbik7DQoJJG5ld19za2luID0gcmF3dXJsZW5jb2RlKCRuZXdfc2tp bik7DQoNCglpZiAoZW1wdHkoJG5ld19za2luKSkgew0KCQkkbXNnID0gc21kX2F0X2dUeHQo J25hbWVfZW1wdHknKTsNCgl9DQoNCgkvLyBDaGVjayB0aGUgbmV3IG5hbWUgaXNuJ3QgYWxy ZWFkeSBpbiB1c2UNCgkkdGhlbWVzID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCWlmIChp bl9hcnJheSgkbmV3X3NraW4sICR0aGVtZXMpKSB7DQoJCSRtc2cgPSBzbWRfYXRfZ1R4dCgn c2tpbl9leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKTsNCgl9DQoNCgkv LyBObyBlcnJvcnMsIHNvIG1ha2UgYSBuZXcgZGlyIGFuZCBjcmVhdGUgdGhlIFBIUCBmaWxl DQoJaWYgKCRtc2c9PScnKSB7DQoJCSRjb250ZW50ID0gJyc7DQoJCSRkZXN0ZGlyID0gVEhF TUUuJG5ld19za2luLkRTOw0KCQkkcmVzID0gbWtkaXIoJGRlc3RkaXIpOw0KCQkkYmFzZWQg PSAnJzsNCg0KCQlpZiAoJHNraW4pIHsNCgkJCS8vIEJhc2VkIG9uIGFuIGV4aXN0aW5nIHRo ZW1lLiBObyBuZWVkIGZvciBhbnkgZnVuY3Rpb25zIG90aGVyIHRoYW4gbWFuaWZlc3QoKQ0K CQkJJGJhc2VkID0gInRoZW1lOjpiYXNlZF9vbignIi4kc2tpbi4iJyk7IjsNCgkJCSRleHRl bmRzID0gJHNraW4uJ190aGVtZSc7DQoJCQkkc3Jjc3MgPSBUSEVNRS4kc2tpbi5EUy4ndGV4 dHBhdHRlcm4uY3NzJzsNCgkJCWlmIChmaWxlX2V4aXN0cygkc3Jjc3MpICYmIGZpbGVzaXpl KCRzcmNzcykgPiAwKSB7DQoJCQkJJGltcG9ydCA9IGpvaW4oJycsIGZpbGUoJHNyY3NzKSk7 DQoJCQl9IGVsc2Ugew0KCQkJCSRpbXBvcnQgPSAnQGltcG9ydCB1cmwoIi4uL2NsYXNzaWMv dGV4dHBhdHRlcm4uY3NzIik7JzsNCgkJCX0NCgkJCSRjb250ZW50ID0gJ3snOw0KCQl9IGVs c2Ugew0KCQkJLy8gQnJhbmQgc3BhbmtpbmcgbmV3IHRoZW1lLiBDbG9uZSAnY2xhc3NpYycg ZnVuY3Rpb25zIHRoZW4gYWRkIG5ldyBtYW5pZmVzdCgpDQoJCQkkZXh0ZW5kcyA9ICd0aGVt ZSc7DQoJCQkkaW1wb3J0ID0gJyc7DQoJCQkkc3JjID0gdHhwYXRoLkRTLlRIRU1FLidjbGFz c2ljJy5EUy4nY2xhc3NpYy5waHAnOw0KCQkJJGdyYWIgPSBmYWxzZTsNCgkJCSRmcCA9IGZp bGUoJHNyYyk7DQoNCgkJCWZvcmVhY2goJGZwIGFzICRsaW5lKSB7DQoJCQkJJGxpbmUgPSBy dHJpbSgkbGluZSk7DQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2Z1bmN0aW9uIG1hbmlmZXN0 KCknKSAhPT0gZmFsc2UpIHsNCgkJCQkJJGdyYWIgPSBmYWxzZTsgLy8gdW5uZWNlc3Nhcnk/ DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAoJGdyYWIpIHsNCgkJCQkJJGNvbnRlbnQg Lj0gJGxpbmUubjsNCgkJCQl9DQoJCQkJaWYgKHN0cnBvcygkbGluZSwgJ2NsYXNzIGNsYXNz aWNfdGhlbWUgZXh0ZW5kcyB0aGVtZScpICE9PSBmYWxzZSkgew0KCQkJCQkkZ3JhYiA9IHRy dWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJLy8gbWFuaWZlc3QgZmllbGRzDQoJCSRtYW51 c2VyID0gZ2V0X2F1dGhvcl9uYW1lKCR0eHBfdXNlcik7DQoJCSRtYW50aXRsZSA9IHVjd29y ZHMoJG5ld19za2luKTsNCg0KCQkvLyBXcml0ZSB0aGUgbmV3IFBIUCBmaWxlDQoJCSRidWYg PSA8PDxFT0YNCjw/cGhwDQoNCmlmICghZGVmaW5lZCgndHhwaW50ZXJmYWNlJykpIGRpZSgn dHhwaW50ZXJmYWNlIGlzIHVuZGVmaW5lZC4nKTsNCg0KeyRiYXNlZH0NCg0KY2xhc3MgeyRu ZXdfc2tpbn1fdGhlbWUgZXh0ZW5kcyB7JGV4dGVuZHN9DQp7JGNvbnRlbnR9DQoNCglmdW5j dGlvbiBtYW5pZmVzdCgpDQoJew0KCQlyZXR1cm4gYXJyYXkoDQoJCQkndGl0bGUnCSAJCT0+ ICd7JG1hbnRpdGxlfScsDQoJCQknYXV0aG9yJyAJCT0+ICd7JG1hbnVzZXJ9JywNCgkJCSdh dXRob3JfdXJpJyAJPT4gJycsDQoJCQkndmVyc2lvbicgCQk9PiAnMS4wJywNCgkJCSdkZXNj cmlwdGlvbicgCT0+ICcnLA0KCQkJJ2hlbHAnIAkJCT0+ICcnLA0KCQkpOw0KCX0NCn0NCj8+ DQpFT0Y7DQoNCgkJJGZwID0gZm9wZW4oJGRlc3RkaXIuJG5ld19za2luLicucGhwJywgIndi Iik7DQoJCWZ3cml0ZSgkZnAsICRidWYpOw0KCQlmY2xvc2UoJGZwKTsNCg0KCQkvLyBDcmVh dGUgdGhlIENTUyBmaWxlDQoJCSRmcCA9IGZvcGVuKCRkZXN0ZGlyLid0ZXh0cGF0dGVybi5j c3MnLCAid2IiKTsNCgkJZndyaXRlKCRmcCwgJGltcG9ydCk7DQoJCWZjbG9zZSgkZnApOw0K DQoJCWlmICgkc2tpbikgew0KCQkJJG1zZyA9IHNtZF9hdF9nVHh0KCdza2luX2Nsb25lZCcs IGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCgkJfSBlbHNlIHsNCgkJCSRtc2cg PSBzbWRfYXRfZ1R4dCgnc2tpbl9jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld19z a2luKSk7Ow0KCQl9DQoNCi8vCSRtc2cgPSBzbWRfYXRfZ1R4dCgnc2tpbl9ub3RfY3JlYXRl ZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuZXdfc2tpbikpOzsNCg0KCX0NCg0KCXNtZF9hdF9s aXN0KCRtc2cpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IHNtZF9hdF9jcnVzaF9vcHRpb25zKCRkaXJlY3Rpb249J2V4cG9ydCcpIHsNCgkkc21kX2Ny dXNoZXJzID0gYXJyYXkoJ3RhcicgPT4gc21kX2F0X2dUeHQoJ2NfdGFyJykpOw0KDQoJaWYg KCRkaXJlY3Rpb24gPT0gJ2V4cG9ydCcpIHsNCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnZ3pj b21wcmVzcycpICYmIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykgJiYgZnVuY3Rpb25fZXhp c3RzKCdnendyaXRlJykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2d6aXAnXSA9IHNtZF9hdF9n VHh0KCdjX2d6aXAnKTsNCgkJCSRzbWRfY3J1c2hlcnNbJ3ppcCddID0gc21kX2F0X2dUeHQo J2NfemlwJyk7DQoJCX0NCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpICYm IGZ1bmN0aW9uX2V4aXN0cygnYnpvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdiendyaXRl JykpIHsNCgkJCSRzbWRfY3J1c2hlcnNbJ2J6aXAyJ10gPSBzbWRfYXRfZ1R4dCgnY19iemlw MicpOw0KCQl9DQoJfSBlbHNlIHsNCgkJLy8gSW1wb3J0IGZ1bmN0aW9uIHJlcXVpcmVtZW50 cw0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemluZmxhdGUnKSkgew0KCQkJJHNtZF9jcnVz aGVyc1snZ3ppcCddID0gc21kX2F0X2dUeHQoJ2NfZ3ppcCcpOw0KCQkJJHNtZF9jcnVzaGVy c1snemlwJ10gPSBzbWRfYXRfZ1R4dCgnY196aXAnKTsNCgkJfQ0KCQlpZiAoZnVuY3Rpb25f ZXhpc3RzKCdiemRlY29tcHJlc3MnKSkgew0KCQkJJHNtZF9jcnVzaGVyc1snYnppcDInXSA9 IHNtZF9hdF9nVHh0KCdjX2J6aXAyJyk7DQoJCX0NCgl9DQoJcmV0dXJuICRzbWRfY3J1c2hl cnM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0 X2V4cG9ydCgpIHsNCglnbG9iYWwgJHByZWZzLCAkc21kX2F0X3ByZWZzOw0KDQoJZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NraW4nLCdjcnVzaCcpKSkpOw0KCSRtZXNzYWdlPScn Ow0KCWNoZGlyKFRIRU1FKTsNCgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2lu KTsNCgkkcmVwcyA9IGFycmF5KA0KCQkne3RoZW1lfScgPT4gJHNraW4sDQoJCSd7dmVyc2lv bn0nID0+ICRza2luZm9bJ3ZlcnNpb24nXSwNCgkpOw0KCSRvdXQgPSBzdHJ0cihnZXRfcHJl Zignc21kX2F0X2ZpbGVuYW1lX2Zvcm1hdCcsICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF9m aWxlbmFtZV9mb3JtYXQnXSksICRyZXBzKTsNCg0KCS8vIENoZWNrIHRoZSBwYXNzZWQgY29t cHJlc3Npb24gZm9ybWF0IGlzIHZhbGlkOyB1c2UgZGVmYXVsdCBpZiBub3QNCgkkY3J1c2hl cnMgPSBzbWRfYXRfY3J1c2hfb3B0aW9ucygpOw0KCWlmICgkY3J1c2g9PScnIHx8ICRjcnVz aD09J3VuZGVmaW5lZCcgfHwgIWFycmF5X2tleV9leGlzdHMoJGNydXNoLCAkY3J1c2hlcnMp KSB7DQoJCSRjcnVzaCA9IGdldF9wcmVmKCdzbWRfYXRfY3J1c2gnLCAkc21kX2F0X3ByZWZz WzBdWydzbWRfYXRfY3J1c2gnXSk7DQoJfQ0KDQoJc3dpdGNoKCRjcnVzaCkgew0KCQljYXNl ICd6aXAnOg0KCQkJJHppcCA9IG5ldyBzbWRfYXRfemlwX2ZpbGUoJG91dC4nLnppcCcpOw0K CQkJYnJlYWs7DQoJCWNhc2UgJ2J6aXAyJzoNCgkJCSR6aXAgPSBuZXcgc21kX2F0X2J6aXBf ZmlsZSgkb3V0LicudGJ6MicpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ3Rhcic6DQoJCQkkemlw ID0gbmV3IHNtZF9hdF90YXJfZmlsZSgkb3V0LicudGFyJyk7DQoJCQlicmVhazsNCgkJY2Fz ZSAnZ3ppcCc6DQoJCWRlZmF1bHQ6DQoJCQkkemlwID0gbmV3IHNtZF9hdF9nemlwX2ZpbGUo JG91dC4nLnRneicpOw0KIAkJCWJyZWFrOw0KCX0NCg0KCSR6aXAtPnNldF9vcHRpb25zKGFy cmF5KCdiYXNlZGlyJyA9PiB0eHBhdGguRFMuVEhFTUUsICdvdmVyd3JpdGUnID0+IDEsICdp bm1lbW9yeScgPT4gMSkpOw0KCSR6aXAtPmFkZF9maWxlcygkc2tpbi5EUy4nKi4qJyk7DQoJ JHppcC0+ZXhjbHVkZV9maWxlcygkc2tpbi5EUy4nKi5zdm4qJyk7DQoJJHppcC0+Y3JlYXRl X2FyY2hpdmUoKTsNCgkkemlwLT5kb3dubG9hZF9maWxlKCk7DQp9DQoNCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2ltcG9ydCgpIHsNCglnbG9iYWwg JHByZWZzOw0KDQoJJG5hbWUgPSAkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmls ZSA9IGdldF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSwg dHhwYXRoLkRTLlRIRU1FLmJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUn XSkpOw0KCSRiYXNlZGlyID0gdHhwYXRoLkRTLlRIRU1FOw0KCSR1bmNydXNoZXJzID0gc21k X2F0X2NydXNoX29wdGlvbnMoJ2ltcG9ydCcpOw0KCSRtZXNzYWdlPScnOw0KCSRpbmZvID0g ZXhwbG9kZSAoJy4nLCRuYW1lKTsNCgkkbGFzdHBhcnQgPSBjb3VudCgkaW5mbyktMTsNCgkk ZXh0ID0gJGluZm9bJGxhc3RwYXJ0XTsNCg0KCWlmICgkbmFtZSAmJiAkZmlsZSkgew0KCQlp ZiAoJGV4dCA9PSAnemlwJyAmJiBhcnJheV9rZXlfZXhpc3RzKCd6aXAnLCAkdW5jcnVzaGVy cykpIHsNCgkJCSR6aXAgPSBuZXcgc21kX2RVbnppcDIoJGZpbGUpOw0KLy8JCQkkemlwLT5k ZWJ1ZyA9IHRydWU7DQoJCQkkemlwLT5nZXRMaXN0KCk7DQoJCQkkdmFsaWRBcmNoaXZlID0g c21kX2F0X2NoZWNrX2FyY2hpdmUoJHppcC0+Y29tcHJlc3NlZExpc3QsICRleHQpOw0KCQkJ aWYgKCR2YWxpZEFyY2hpdmUpIHsNCgkJCQkkemlwLT51bnppcEFsbCgkYmFzZWRpcik7DQoJ CQkJJHppcC0+Y2xvc2UoKTsNCgkJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdpbXBvcnRf b2snKTsNCgkJCX0gZWxzZSB7DQoJCQkJJG1lc3NhZ2UgPSBhcnJheShzbWRfYXRfZ1R4dCgn aW1wb3J0X2ZhaWxlZCcpLCBFX1dBUk5JTkcpOw0KCQkJfQ0KCQl9IGVsc2UgaWYgKCRleHQg PT0gJ3RneicgJiYgYXJyYXlfa2V5X2V4aXN0cygnZ3ppcCcsICR1bmNydXNoZXJzKSkgew0K CQkJJHppcCA9IG5ldyBzbWRfYXRfZ3ppcF9maWxlKGJhc2VuYW1lKCRmaWxlKSk7DQoJCQkk emlwLT5zZXRfb3B0aW9ucyhhcnJheSgnYmFzZWRpcicgPT4gJGJhc2VkaXIsICdvdmVyd3Jp dGUnID0+IDEpKTsNCgkJCSR6aXAtPmV4dHJhY3RfZmlsZXMoKTsNCgkJCSRtZXNzYWdlID0g c21kX2F0X2dUeHQoJ2ltcG9ydF9vaycpOw0KCQl9IGVsc2UgaWYgKCRleHQgPT0gJ3RiejIn ICYmIGFycmF5X2tleV9leGlzdHMoJ2J6aXAyJywgJHVuY3J1c2hlcnMpKSB7DQoJCQkkemlw ID0gbmV3IHNtZF9hdF9iemlwX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAtPnNl dF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScgPT4g MSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSBpZiAoJGV4dCA9PSAndGFyJykgew0KCQkJ JHppcCA9IG5ldyBzbWRfYXRfdGFyX2ZpbGUoYmFzZW5hbWUoJGZpbGUpKTsNCgkJCSR6aXAt PnNldF9vcHRpb25zKGFycmF5KCdiYXNlZGlyJyA9PiAkYmFzZWRpciwgJ292ZXJ3cml0ZScg PT4gMSkpOw0KCQkJJHppcC0+ZXh0cmFjdF9maWxlcygpOw0KCQkJJG1lc3NhZ2UgPSBzbWRf YXRfZ1R4dCgnaW1wb3J0X29rJyk7DQoJCX0gZWxzZSB7DQoJCQkkbWVzc2FnZSA9IGFycmF5 KHNtZF9hdF9nVHh0KCd1bnN1cHBvcnRlZF9jb21wcmVzc2lvbnR5cGUnLCBhcnJheSgne2Ny dXNofScgPT4gJGV4dCkpLCBFX1dBUk5JTkcpOw0KCQl9DQoNCgkJLy8gUmVtb3ZlIHRoZSB0 ZW1wb3JhcnkgZmlsZQ0KCQl1bmxpbmsoJGZpbGUpOw0KCX0gZWxzZSB7DQoJCSRtZXNzYWdl ID0gc21kX2F0X2dUeHQoJ2VtcHR5X2luZm8nKTsNCgl9DQoNCglzbWRfYXRfbGlzdCgkbWVz c2FnZSk7DQp9DQoNCi8vIENoZWNrIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIG9mIHRoZSBh cmNoaXZlIGZvciB2YXJpb3VzIGl0ZW1zL2F0dHJpYnV0ZXMuDQovLyBFYWNoIHRpbWUgb25l IG9mIHRoZSBjb25kaXRpb25zIGlzIG1ldCwgdGhlIHZjbnQgaXMgaW5jcmVtZW1lbnRlZC4N Ci8vIE9uY2UgdGhlIHdob2xlIGFyY2hpdmUgaGFzIGJlZW4gcmVhZCwgaWYgdGhlIHZjbnQg bWF0Y2hlcyB0aGUgZXhwZWN0ZWRDb3VudHMgZm9yDQovLyB0aGF0IHR5cGUsIHRoZSBhcmNo aXZlIGlzIHZhbGlkLg0KZnVuY3Rpb24gc21kX2F0X2NoZWNrX2FyY2hpdmUoJHN0cnVjdCwg JHR5cGU9J3ppcCcpIHsNCgkkZXhwZWN0ZWRDb3VudHMgPSBhcnJheSgnemlwJyA9PiAxLCAn dGd6JyA9PiAwLCAndGJ6MicgPT4gMCwgJ3RhcicgPT4gMCk7DQoJc3dpdGNoICgkdHlwZSkg ew0KCQljYXNlICJ6aXAiOg0KCQkJJHZjbnQgPSAwOw0KCQkJZm9yZWFjaCAoJHN0cnVjdCBh cyAkZW50cnkgPT4gJGluZm8pIHsNCgkJCQkkcGFydHMgPSBwYXRoaW5mbygkaW5mb1snZmls ZV9uYW1lJ10pOw0KCQkJCWlmIChpc3NldCgkcGFydHNbJ2V4dGVuc2lvbiddKSAmJiAkcGFy dHNbJ2V4dGVuc2lvbiddID09ICdwaHAnKSB7DQoJCQkJCSRkaXJiaXRzID0gZXhwbG9kZShE UywgJHBhcnRzWydkaXJuYW1lJ10pOw0KCQkJCQkkbnVtZGlycyA9IGNvdW50KCRkaXJiaXRz KTsNCgkJCQkJaWYgKCgkcGFydHNbJ2ZpbGVuYW1lJ10gPT0gJGRpcmJpdHNbJG51bWRpcnMt MV0pICYmICRudW1kaXJzPT0xKSB7DQoJCQkJCQkkdmNudCsrOw0KCQkJCQl9DQoJCQkJfQ0K CQkJfQ0KCQkJYnJlYWs7DQoJfQ0KDQoJcmV0dXJuICgkZXhwZWN0ZWRDb3VudHNbJHR5cGVd ID09ICR2Y250KSA/IHRydWUgOiBmYWxzZTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfdXBsb2FkX2ltYWdlKCkgew0KCWdsb2JhbCAkZmls ZV9tYXhfdXBsb2FkX3NpemU7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnaWQn KSkpKTsNCgkkX1BPU1RbJ3NraW4nXSA9ICRza2luID0gJGlkOw0KDQoJJG5hbWUgPSAkX0ZJ TEVTWyd0aGVmaWxlJ11bJ25hbWUnXTsNCgkkZmlsZSA9IGdldF91cGxvYWRlZF9maWxlKCRf RklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7DQoJJG1lc3NhZ2U9Jyc7DQoNCglpZiAo JGZpbGUgPT09IGZhbHNlKSB7DQoJCSRtZXNzYWdlID0gZ1R4dCgnZmlsZV91cGxvYWRfZmFp bGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2coJF9GSUxFU1sndGhlZmls ZSddWydlcnJvciddKTsNCgkJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KCQlleGl0KCk7DQoJ fQ0KDQoJJHNpemUgPSBmaWxlc2l6ZSgkZmlsZSk7DQoJaWYgKCRmaWxlX21heF91cGxvYWRf c2l6ZSA8ICRzaXplKSB7DQoJCXVubGluaygkZmlsZSk7DQoJCSRtZXNzYWdlID0gZ1R4dCgn ZmlsZV91cGxvYWRfZmFpbGVkJykgLiIgJG5hbWUgLSAiLnVwbG9hZF9nZXRfZXJyb3Jtc2co VVBMT0FEX0VSUl9GT1JNX1NJWkUpOw0KCQlzbWRfYXRfZWRpdCgkbWVzc2FnZSk7DQoJCWV4 aXQoKTsNCgl9DQoNCgkkc2tpbmZvID0gc21kX2F0X3JlYWRfc2tpbmZvKCRza2luKTsNCgkk bmV3X3NraW4gPSAkc2tpbmZvWyduYW1lJ107DQoJJG5ld3BhdGggPSAkc2tpbmZvWydwYXRo J107DQoNCglpZiAoJG5ld19za2luICYmICRmaWxlKSB7DQoJCWlmKHNoaWZ0X3VwbG9hZGVk X2ZpbGUoJGZpbGUsICRuZXdwYXRoLiRuYW1lKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRf Z1R4dCgndXBsb2FkX3N1Y2Nlc3MnKTsNCgkJfSBlbHNlIHsNCgkJCXVubGluaygkZmlsZSk7 DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCd1cGxvYWRfZmFpbGVkJyk7DQoJCX0NCgl9 IGVsc2Ugew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdlbXB0eV9pbmZvJyk7DQoJfQ0K DQoJc21kX2F0X2VkaXQoJG1lc3NhZ2UpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9kZWxldGVfaW1hZ2UoKSB7DQoJZ2xvYmFsICRzbWRf Y29yZV90aGVtZXM7DQoNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnc2tpbicpKSkp Ow0KCSRmaWxlX2xpc3QgPSBncHMoJ3NtZF9hdF9pbWFnZXMnKTsNCgkkbWVzc2FnZT0nJzsN Cg0KCWlmIChlbXB0eSgkZmlsZV9saXN0KSkgew0KCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0 KCdlbXB0eV9pbmZvJyk7DQoJfSBlbHNlIHsNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21k X2NvcmVfdGhlbWVzKSkgew0KCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVt ZV9maWxlJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJfSBlbHNlIHsNCgkJCWZv cmVhY2ggKCRmaWxlX2xpc3QgYXMgJGltYWdlKSB7DQoJCQkJJHBhdGggPSB0eHBhdGguRFMu JGltYWdlOw0KCQkJCXVubGluaygkcGF0aCk7DQoJCQl9DQoJCX0NCgl9DQoNCglzbWRfYXRf ZWRpdCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX2F0X2RlbGV0ZSgpIHsNCglnbG9iYWwgJHNtZF9jb3JlX3RoZW1lcywgJHRo ZW1lLCAkc21kX2F0X3ByaXZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJZXh0cmFjdChkb1NsYXNo KGdwc2EoYXJyYXkoJ3NraW4nLCAnZmlsZScpKSkpOw0KCSRtZXNzYWdlPScnOw0KDQoJaWYg KCRmaWxlKSB7DQoJCS8vIEVkaXRpbmcgYSBza2luLCB0aHVzIGRlbGV0aW5nIGEgc2luZ2xl IGZpbGUNCgkJaWYgKGluX2FycmF5KCRza2luLCAkc21kX2NvcmVfdGhlbWVzKSkgew0KCQkJ JG1lc3NhZ2UgPSBzbWRfYXRfZ1R4dCgnY29yZV90aGVtZV9maWxlJywgYXJyYXkoJ3tza2lu fScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9lZGl0KCRtZXNzYWdlKTsNCgkJfSBlbHNlIHsN CgkJCSRkZWwgPSB1bmxpbmsoVEhFTUUuJHNraW4uRFMuJGZpbGUpOw0KCQkJaWYgKCRkZWwp IHsNCgkJCQkkbWVzc2FnZSA9IGdUeHQoJ2ZpbGVfZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0n ID0+ICRmaWxlKSk7DQoJCQkJJF9QT1NUWydmaWxlJ10gPSAnJzsgLy8gQ2xlYXIgdGhlIHZh cmlhYmxlIHNvIHRoZSBmaWxlbmFtZSBkb2Vzbid0IGFwcGVhciBvbiB0aGUgZWRpdCBwYWdl DQoJCQl9IGVsc2Ugew0KCQkJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ2ZpbGVfbm90X2Rl bGV0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZmlsZSkpOw0KCQkJfQ0KCQl9DQoJCXNtZF9h dF9lZGl0KCRtZXNzYWdlKTsNCgl9IGVsc2Ugew0KCQlpZiAoaW5fYXJyYXkoJHNraW4sICRz bWRfY29yZV90aGVtZXMpKSB7DQoJCQkkbWVzc2FnZSA9IHNtZF9hdF9nVHh0KCdjb3JlX3Ro ZW1lJywgYXJyYXkoJ3tza2lufScgPT4gJHNraW4pKTsNCgkJCXNtZF9hdF9saXN0KCRtZXNz YWdlKTsNCgkJfSBlbHNlIHsNCgkJCS8vIFZpZXdpbmcgdGhlIHNraW4gbGlzdCwgdGh1cyBk ZWxldGluZyB0aGUgd2hvbGUgc2tpbg0KCQkJJHNraW5kaXIgPSBUSEVNRS4kc2tpbjsNCgkJ CWlmICghc21kX3JtZGlyX3JlY3Vyc2l2ZSgkc2tpbmRpcikpIHsNCgkJCQkkbWVzc2FnZSA9 IHNtZF9hdF9nVHh0KCdkZWxldGVfZmFpbGVkJyk7DQoJCQl9IGVsc2Ugew0KCQkJCSRtZXNz YWdlID0gc21kX2F0X2dUeHQoJ3NraW5fZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRz a2luKSk7DQoJCQl9DQoNCgkJCS8vIEhhbmRsZSBzaXR1YXRpb25zIGlmIGN1cnJlbnQgc2tp biBoYXMgYmVlbiBkZWxldGVkDQoJCQlpZiAoIWZpbGVfZXhpc3RzKHR4cGF0aC5EUy5USEVN RS4kc2tpbikpIHsNCgkJCQkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3ByZWZzKCk7DQoNCgkJ CQkvLyBSZXNldCB0aGUgZ2xvYmFsIHNraW4gaW4gY2FzZSBpdCdzIGJlZW4gZGVsZXRlZA0K CQkJCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbidd KSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddIDogJyc7DQoJCQkJJGdibF9z a2luID0gKCRnYmxfc2tpbiAhPSAnJyAmJiBmaWxlX2V4aXN0cyh0eHBhdGguRFMuVEhFTUUu JGdibF9za2luKSkgPyAkZ2JsX3NraW4gOiAnY2xhc3NpYyc7DQoJCQkJc2V0X3ByZWYoJ3Nt ZF9hdF9nbG9iYWxfc2tpbicsICRnYmxfc2tpbiwgJHNtZF9hdF9ldmVudCwgUFJFRl9ISURE RU4sICd0ZXh0X2lucHV0Jyk7DQoJCQkJc2V0X3ByZWYoJ3RoZW1lX25hbWUnLCAkZ2JsX3Nr aW4pOw0KDQoJCQkJJHNraW4gPSBnZXRfcHJlZignc21kX3NraW4nKTsNCgkJCQlpZiAoIWZp bGVfZXhpc3RzKHR4cGF0aC5EUy5USEVNRS4kc2tpbikpIHsNCgkJCQkJJHNraW4gPSAkZ2Js X3NraW47DQoJCQkJfQ0KCQkJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2luLCAnc21kX2F0 JywgUFJFRl9ISURERU4sICd0ZXh0X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCgkJCX0N CgkJCSRfR0VUWydza2luJ10gPSAkc2tpbjsNCgkJCSRfR0VUWyduZXh0c3RlcCddID0gJ3Nt ZF9hdF9saXN0JzsNCgkJCXNtZF9hdF9zd2l0Y2goJG1lc3NhZ2UpOw0KCQl9DQoJfQ0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zYXZlKCkg ew0KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdza2luJywnbmV3X3NraW4nLCdmaWxl Jywnc21kX2F0X2VkaXRzJykpKSk7DQoNCgkkZWRpdGFibGUgPSBhcnJheSgic3NjIiwgImNz cyIsICJqcyIsICJwaHAiKTsNCgkkbWVzc2FnZSA9ICRleHRyYU1zZyA9ICcnOw0KCSRmaWxl ID0gdHJpbSgkZmlsZSk7DQoJJG5ld19za2luID0gdHJpbSgkbmV3X3NraW4pOw0KCSRtc2ds ZXYgPSAwOw0KDQoJLy8gTmV3IGZpbGUNCglpZiAoISRmaWxlICYmICRuZXdfc2tpbikgew0K CQkkZmlsZSA9ICRuZXdfc2tpbjsNCgkJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLics JGZpbGUpKTsNCgkJaWYgKHN0cnRvbG93ZXIoJGZpbGUpICE9ICdyZWFkbWUnICYmICgkZXh0 ID09ICcnIHx8ICFpbl9hcnJheSgkZXh0LCAkZWRpdGFibGUpKSkgew0KCQkJJG1lc3NhZ2Ug PSBzbWRfYXRfZ1R4dCgndW5zdXBwb3J0ZWRfZmlsZXR5cGUnKS5zbWRfYXRfZ1R4dCgndW5z dXBwb3J0ZWRfZnVkZ2UnKTsNCgkJCSRtc2dsZXYgPSBFX1dBUk5JTkc7DQoJCQkkX1BPU1Rb J2ZpbGUnXSA9ICRmaWxlOw0KCQl9DQoJfQ0KDQoJaWYgKCRtZXNzYWdlPT0nJykgew0KCQkk Zm5hbWUgPSBzYW5pdGl6ZUZvckZpbGUoJGZpbGUpOw0KCQkkbmV3X3NraW4gPSByYXd1cmxl bmNvZGUoJG5ld19za2luKTsNCgkJJF9QT1NUWyduZXdfc2tpbiddID0gJG5ld19za2luOw0K DQoJCSRzbWRfYXRfZWRpdHMgPSBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRz bWRfYXRfZWRpdHMpKTsgLy8gbmV3bGluZSB3b3JrYXJvdW5kDQoNCgkJaWYgKCRmbmFtZSkg ew0KCQkJJGZpbGVwYXRoID0gVEhFTUUuJHNraW4uRFM7DQoJCQlpZiAoIWZpbGVfZXhpc3Rz KCRmaWxlcGF0aC4kZm5hbWUpKSB7DQoJCQkJJHJldCA9IHRvdWNoKCRmaWxlcGF0aC4kZm5h bWUpOw0KCQkJCWlmICgkcmV0ID09PSBmYWxzZSkgew0KCQkJCQkkbWVzc2FnZSA9IHNtZF9h dF9nVHh0KCdta2Rpcl9mYWlsZWQnLCBhcnJheSgne25hbWV9JyA9PiAkZm5hbWUpKTsNCgkJ CQl9DQoJCQl9DQoNCgkJCS8vIEFzc3VtaW5nIG5vIGVycm9ycyBzbyBmYXIuLi4NCgkJCWlm ICgkbWVzc2FnZSA9PSAnJykgew0KCQkJCSRmaCA9IGZvcGVuKCRmaWxlcGF0aC4kZm5hbWUs ICd3YicpOw0KCQkJCWZ3cml0ZSgkZmgsICRzbWRfYXRfZWRpdHMpOw0KCQkJCWZjbG9zZSgk ZmgpOw0KDQoJCQkJaWYgKCRmbmFtZSAhPSAkbmV3X3NraW4pIHsNCgkJCQkJLy8gUmVuYW1l IHRoZSBmaWxlDQoJCQkJCSRyZXMgPSByZW5hbWUoJGZpbGVwYXRoLiRmbmFtZSwgJGZpbGVw YXRoLiRuZXdfc2tpbik7DQoNCgkJCQkJLy8gSWYgdGhlIHJlbmFtZWQgZmlsZSBpcyB0aGUg dGhlbWUncyBQSFAgZmlsZSwgdHJ5IHRvIHJlbmFtZSB0aGUgbWFpbiBza2luIGRpciB0b28N CgkJCQkJJGZpbGViaXRzID0gZXhwbG9kZSgnLicsICRuZXdfc2tpbik7DQoJCQkJCSRvbGRm aWxlYml0cyA9IGV4cGxvZGUoJy4nLCAkZm5hbWUpOw0KCQkJCQkkZXh0ID0gYXJyYXlfcG9w KCRmaWxlYml0cyk7DQoJCQkJCWlmICgkcmVzICYmICRleHQgPT0gJ3BocCcgJiYgKCRvbGRm aWxlYml0c1swXSA9PSAkc2tpbikpIHsNCgkJCQkJCSRuZXdfZmlsZXBhdGggPSBUSEVNRS4k ZmlsZWJpdHNbMF0uRFM7DQoJCQkJCQkkcmVuID0gcmVuYW1lKCRmaWxlcGF0aCwgJG5ld19m aWxlcGF0aCk7DQoJCQkJCQkkZmlsZXBhdGggPSAoJHJlbikgPyAkbmV3X2ZpbGVwYXRoIDog JGZpbGVwYXRoOw0KCQkJCQkJJF9QT1NUWydza2luJ10gPSAkZmlsZWJpdHNbMF07DQoJCQkJ CX0NCgkJCQkJJGV4dHJhTXNnID0gKCRyZXMpID8gc21kX2F0X2dUeHQoJ3JlbmFtZWQnLCBh cnJheSgne25hbWV9JyA9PiAkbmV3X3NraW4pKSA6IHNtZF9hdF9nVHh0KCdyZW5hbWVfZmFp bGVkJyk7DQoJCQkJfQ0KDQoJCQkJLy8gUHJvY2VzcyBhbnkgY3NzIHJlcGxhY2VtZW50cw0K CQkJCSRmaWxlYml0cyA9IGV4cGxvZGUgKCcuJywoKCRmbmFtZT09JG5ld19za2luKT8gJGZu YW1lIDogJG5ld19za2luKSk7DQoJCQkJJGNzc2ZpbGUgPSAkZmlsZWJpdHNbMF07DQoJCQkJ JGV4dCA9IGFycmF5X3BvcCgkZmlsZWJpdHMpOw0KCQkJCWlmICgkZXh0ID09ICdzc2MnKSB7 DQoJCQkJCSRyZXBsYWNlbWVudHMgPSBhcnJheSgpOw0KCQkJCQkkbnVtX3JlcDEgPSBwcmVn X21hdGNoX2FsbCgnLyhcQFtBLVphLXowLTlfXSspOlxzKiguKik7LycsICRzbWRfYXRfZWRp dHMsICRtYXRjaGVzMSk7DQoJCQkJCSRudW1fcmVwMiA9IHByZWdfbWF0Y2hfYWxsKCcvKFxA W0EtWmEtejAtOV9dKyk6XHMqXHsoLio/KVx9L3MnLCAkc21kX2F0X2VkaXRzLCAkbWF0Y2hl czIpOw0KDQoJCQkJCS8vIFNpbXBsZSByZXBsYWNlbWVudHMNCgkJCQkJZm9yZWFjaCgkbWF0 Y2hlczEgYXMgJGlkeCA9PiAkcmVwYXJyKSB7DQoJCQkJCQlpZiAoJGlkeCA9PSAwKSB7DQoJ CQkJCQkJLy8gUmVtb3ZlIHRoZSB2YXIgZGVmaW5pdGlvbnMNCgkJCQkJCQlmb3JlYWNoICgk cmVwYXJyIGFzICRyZXApIHsNCgkJCQkJCQkJJHNtZF9hdF9lZGl0cyA9IHN0cl9yZXBsYWNl KCRyZXAsICcnLCRzbWRfYXRfZWRpdHMpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWlm ICgkaWR4ID09IDEpIHsNCgkJCQkJCQlmb3JlYWNoICgkcmVwYXJyIGFzICRqZHggPT4gJHJl cCkgew0KCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyRyZXBdID0gJG1hdGNoZXMxWzJdWyRqZHhd Ow0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIE11bHRpLWxpbmUgcmVw bGFjZW1lbnRzDQoJCQkJCWZvcmVhY2goJG1hdGNoZXMyIGFzICRpZHggPT4gJHJlcGFycikg ew0KCQkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJCS8vIFJlbW92ZSB0aGUgdmFyIGRl ZmluaXRpb25zDQoJCQkJCQkJZm9yZWFjaCAoJHJlcGFyciBhcyAkcmVwKSB7DQoJCQkJCQkJ CSRzbWRfYXRfZWRpdHMgPSBzdHJfcmVwbGFjZSgkcmVwLCAnJywkc21kX2F0X2VkaXRzKTsN CgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCQlpZiAoJGlkeCA9PSAxKSB7DQoJCQkJCQkJZm9y ZWFjaCAoJHJlcGFyciBhcyAkamR4ID0+ICRyZXApIHsNCgkJCQkJCQkJJHJlcGxhY2VtZW50 c1skcmVwLic7J10gPSB0cmltKCRtYXRjaGVzMlsyXVskamR4XSk7DQoJCQkJCQkJfQ0KCQkJ CQkJfQ0KCQkJCQl9DQoNCgkJCQkJLy8gR2VuZXJhdGUgYW5kIHdyaXRlIHRoZSBuZXcgY3Nz IGZpbGUNCgkJCQkJJHNtZF9hdF9lZGl0cyA9IHRyaW0oc3RydHIoJHNtZF9hdF9lZGl0cywg JHJlcGxhY2VtZW50cykpOw0KCQkJCQkkZmggPSBmb3BlbigkZmlsZXBhdGguJGNzc2ZpbGUu Jy5jc3MnLCAnd2InKTsNCgkJCQkJZndyaXRlKCRmaCwgJHNtZF9hdF9lZGl0cyk7DQoJCQkJ CWZjbG9zZSgkZmgpOw0KCQkJCQlpZiAoJGZuYW1lICE9ICRuZXdfc2tpbikgew0KCQkJCQkJ JG9sZGZuYW1lID0gZXhwbG9kZSAoJy4nLCAkZm5hbWUpOw0KCQkJCQkJJG9sZGZuYW1lID0g JG9sZGZuYW1lWzBdLicuY3NzJzsNCgkJCQkJCSRyZXMgPSBAdW5saW5rKCRmaWxlcGF0aC4k b2xkZm5hbWUpOw0KCQkJCQl9DQoJCQkJfQ0KDQoJCQkJJG1lc3NhZ2UgPSBzbWRfYXRfZ1R4 dCgnZmlsZV9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRmbmFtZSkpLmJyLiRleHRyYU1z ZzsNCgkJCX0NCgkJfQ0KCX0NCglzbWRfYXRfZWRpdChhcnJheSgkbWVzc2FnZSwgJG1zZ2xl dikpOw0KfQ0KDQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gUFJFRlMNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcmVmcygp IHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxv ZGUoIicsJyIsYXJyYXlfa2V5cygkc21kX2F0X3ByZWZzWzBdKSkpOw0KCSRycyA9IHNhZmVf cm93cygnbmFtZSx2YWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScp Ow0KCSRhdF9wcmVmcyA9IGFycmF5KCk7DQoJZm9yZWFjaCAoJHJzIGFzICRwcmVmYXJyKSB7 DQoJCSRhdF9wcmVmc1skcHJlZmFyclsnbmFtZSddXSA9ICRwcmVmYXJyWyd2YWwnXTsNCgl9 DQoJcmV0dXJuICRhdF9wcmVmczsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBzbWRfYXRfb3B0aW9ucygkZXZlbnQsICRzdGVwLCAkbWVzc2FnZT0nJykg ew0KCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3NldHVwKCRtZXNzYWdlPScnKSB7DQoJZ2xvYmFs ICRwcmVmcywgJHNtZF9hdF9wcmVmcywgJHNtZF9hdF9ldmVudCwgJHRoZW1lLCAkc21kX2Nv cmVfdGhlbWVzLCAkc21kX2F0X3N0eWxlczsNCg0KCSRudW1SZXFQcmVmcyA9IGNvdW50KCRz bWRfYXRfcHJlZnNbMF0pOw0KCSRhdF9wcmVmcyA9IHNtZF9hdF9nZXRfcHJlZnMoKTsNCgkk bnVtUm93cyA9IGNvdW50KCRhdF9wcmVmcyk7DQoNCglwYWdldG9wKGdUeHQoJ3ByZWZzJyks JG1lc3NhZ2UpOw0KDQoJLy8gVE9ETzogdXNlIGdldF9ncm91cHMoKTsNCgkkbGV2ZWxzID0g YXJyYXkoDQovLwkJMSA9PiBnVHh0KCdwdWJsaXNoZXInKSwNCgkJMiA9PiBnVHh0KCdtYW5h Z2luZ19lZGl0b3InKSwNCgkJMyA9PiBnVHh0KCdjb3B5X2VkaXRvcicpLA0KCQk0ID0+IGdU eHQoJ3N0YWZmX3dyaXRlcicpLA0KCQk1ID0+IGdUeHQoJ2ZyZWVsYW5jZXInKSwNCgkJNiA9 PiBnVHh0KCdkZXNpZ25lcicpLA0KCSk7DQoJJG51bUxldnMgPSBjb3VudCgkbGV2ZWxzKTsN Cg0KCS8vIFNwbGl0IHRoZSB1c2VyIHNraW4gbGlzdA0KCSR1c2tpbnMgPSBhcnJheSgpOw0K CWlmIChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSkpIHsNCgkJJHVza2lu cyA9IGV4cGxvZGUoJywnLCAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSk7DQoJfQ0K DQoJJGxheW91dCA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9sYXlvdXQnXSkpID8gJGF0 X3ByZWZzWydzbWRfYXRfbGF5b3V0J10gOiAxOw0KCSRjbHJCdG4gPSAnIFs8c3BhbiBpZD0i c21kX2NsciIgY2xhc3M9InNtZF9mYWtlYnRuIj4nLnNtZF9hdF9nVHh0KCdjbGVhcicpLic8 L3NwYW4+XSc7DQoJJGJ0blNldCA9IGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF9h dF9nVHh0KCdzZXQnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9 ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF9hdF9ldmVudC4n JiMzODtzdGVwPXNtZF9hdF9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUi PicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlz aCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0 aW9uPSI/ZXZlbnQ9Jy4kc21kX2F0X2V2ZW50LicmIzM4O3N0ZXA9c21kX2F0X3ByZWZzX3Jl bW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1p dCcsIGdUeHQoJ2RlbGV0ZScpLCAnc21hbGxlcmJveCcpLic8L2Zvcm0+JzsNCgkkYnRuTGlz dCA9ICcgPGEgY2xhc3M9Im5hdmxpbmsiIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQu JyI+Jy5zbWRfYXRfZ1R4dCgoKCRsYXlvdXQ9PSIwIikgPyAnc2tpbl9saXN0JyA6ICdza2lu X2dyaWQnKSkuJzwvYT48YnIgLz4nOw0KCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjow O2hlaWdodDoyNXB4Iic7DQoJJHJhZEJ0bnMgPSBhcnJheSgNCgkJc21kX2F0X2dUeHQoJ3Bl cl9zaXRlJyksDQoJCXNtZF9hdF9nVHh0KCdwZXJfZ3JvdXAnKSwNCgkJc21kX2F0X2dUeHQo J3Blcl91c2VyJyksDQoJKTsNCg0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWlmICgk bnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsNCgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZA0K CQkkc2tpbl9saXN0ID0gc21kX2F0X3JlYWRfc2tpbnMoKTsNCg0KCQkvLyBzZWxlY3RJbnB1 dCBuZWVkcyBib3RoIGluZGV4IGFuZCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBpbiB0aGlzIGNh c2UNCgkJJHNraW5zZWwgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRza2luX2xpc3QgYXMgJGtl eTEgPT4gJHZhbHVlMSkgew0KCQkJaWYgKHNtZF9hdF9leGlzdHMoJHZhbHVlMSkpIHsNCgkJ CQkkc2tpbnNlbFskdmFsdWUxXSA9ICRza2luX2xpc3RbJGtleTFdOw0KCQkJfQ0KCQl9DQoJ CSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddKSAm JiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbiddICE9ICcnKSA/ICRhdF9wcmVmc1sn c21kX2F0X2dsb2JhbF9za2luJ10gOiAkdGhlbWUtPm5hbWU7DQoNCgkJZWNobyB0cih0ZGEo c3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4g dGRhKCRidG5SZW1vdmUuJGJ0bkxpc3QsICRidG5TdHlsZSkgKTsNCgkJZWNobyAnPGZvcm0g bWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfYXRfZXZlbnQuJyYjMzg7c3Rl cD1zbWRfYXRfcHJlZnNfdXBkYXRlIiBvbnN1Ym1pdD0icmV0dXJuIHNtZF9wcmVzdWIoKTsi Pic7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdjYXNlX3NvcnQnKSkudGRhKHllc25v UmFkaW8oJ3NtZF9hdF9jYXNlX3NvcnQnLCAkYXRfcHJlZnNbJ3NtZF9hdF9jYXNlX3NvcnQn XSksICcgd2lkdGg9IjI0MCIgaWQ9InNtZF9hdF9jYXNlX3NvcnQiJykpOw0KCQllY2hvIHRy KHRkYShzbWRfYXRfZ1R4dCgnY3J1c2hfdHlwZScpKS50ZGEocmFkaW9TZXQoc21kX2F0X2Ny dXNoX29wdGlvbnMoKSwgJ3NtZF9hdF9jcnVzaCcsICRhdF9wcmVmc1snc21kX2F0X2NydXNo J10pLCAnIHdpZHRoPSIyNDAiIGlkPSJzbWRfYXRfY3J1c2giJykpOw0KCQllY2hvIHRyKHRk YShzbWRfYXRfZ1R4dCgnbGF5b3V0JykpLnRkYShyYWRpb1NldChhcnJheShzbWRfYXRfZ1R4 dCgnbGF5b3V0X2xpc3QnKSwgc21kX2F0X2dUeHQoJ2xheW91dF9ncmlkJykpLCAnc21kX2F0 X2xheW91dCcsICRhdF9wcmVmc1snc21kX2F0X2xheW91dCddKSwgJyB3aWR0aD0iMjQwIiBp ZD0ic21kX2F0X2xheW91dCInKSk7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCd0aHVt YnNpemUnKSkudGRhKGZJbnB1dCgndGV4dCcsICdzbWRfYXRfdHcnLCAkYXRfcHJlZnNbJ3Nt ZF9hdF90dyddLCcnLCcnLCcnLDQpLnNtZF9hdF9nVHh0KCd0aW1lcycpLmZJbnB1dCgndGV4 dCcsICdzbWRfYXRfdGgnLCAkYXRfcHJlZnNbJ3NtZF9hdF90aCddLCcnLCcnLCcnLDQpKSk7 DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdmaWxlbmFtZV9mb3JtYXQnKSkudGRhKGZJ bnB1dCgndGV4dCcsICdzbWRfYXRfZmlsZW5hbWVfZm9ybWF0JywgJGF0X3ByZWZzWydzbWRf YXRfZmlsZW5hbWVfZm9ybWF0J10pKSk7DQoJCWVjaG8gdHIoDQoJCQl0ZChzbWRfYXRfZ1R4 dCgnZ2xvYmFsX3NraW4nKSkNCgkJCS50ZChzZWxlY3RJbnB1dCgnc21kX2F0X2dsb2JhbF9z a2luJywgJHNraW5zZWwsICRnYmxfc2tpbiwgMCwgMCkpDQoJCSk7DQoJCWVjaG8gdHIodGRh KHNtZF9hdF9nVHh0KCdza2luX3N5c3RlbScpKS50ZGEocmFkaW9TZXQoJHJhZEJ0bnMsICdz bWRfYXRfc3lzdGVtJywgJGF0X3ByZWZzWydzbWRfYXRfc3lzdGVtJ10pLCAnIHdpZHRoPSIy NDAiIGlkPSJzbWRfYXRfcmFkaW8iJykpOw0KDQoJCS8vIE9wdGlvbiAxDQoJCSRwcml2X2xp c3QgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3ByaXZzIiBuYW1lPSJzbWRfYXRfcHJpdnNbXSIg Y2xhc3M9Imxpc3QiIHNpemU9IicuJG51bUxldnMuJyIgbXVsdGlwbGU9Im11bHRpcGxlIj4n Ow0KCQlmb3JlYWNoICgkbGV2ZWxzIGFzICRsZXZpZCA9PiAkbGV2bmFtZSkgew0KCQkJJHBy aXZfbGlzdCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kbGV2aWQuJyI+Jy4kbGV2bmFtZS4nPC9v cHRpb24+JzsNCgkJfQ0KCQkkcHJpdl9saXN0IC49ICc8L3NlbGVjdD4nOw0KDQoJCS8vIE5v dGUgdGhlIGhpZGRlbiBza2luIGdyb3VwIGJveDsgalF1ZXJ5IGtlZXBzIHRyYWNrIG9mIGFu eSBsaXN0IGNoYW5nZXMgYW5kIGtlZXBzIGl0IHVwZGF0ZWQNCgkJJHNlbGEgPSBzbWRfYXRf Z1R4dCgnc2tpbl9ncm91cHMnKTsNCgkJJHNlbGIgPSBoSW5wdXQoJ3NtZF9hdF9ncm91cF9s aXN0JywgJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBfbGlzdCddKTsNCgkJJHNlbGIgLj0gJzxz ZWxlY3QgaWQ9InNtZF9hdF9ncnBzIiBuYW1lPSJzbWRfYXRfZ3JwcyIgY2xhc3M9Imxpc3Qi IHNpemU9IicuJG51bUxldnMuJyI+JzsNCgkJZm9yZWFjaCAoJHNraW5fbGlzdCBhcyAkYXNr aW4pIHsNCgkJCWlmIChzbWRfYXRfZXhpc3RzKCRhc2tpbikpIHsNCgkJCQkkc2VsYiAuPSAn PG9wdGlvbiB2YWx1ZT0iJy4kYXNraW4uJyI+Jy4kYXNraW4uJzwvb3B0aW9uPic7DQoJCQl9 DQoJCX0NCgkJJHNlbGIgLj0gJzwvc2VsZWN0Pic7DQoJCWVjaG8gdHIodGRhKCRzZWxhLCAn IGNsYXNzPSJzbWRfYXRfc2VsMSBzbWRfaGlkZGVuIicpIC4gdGRhKCRzZWxiLiRwcml2X2xp c3QsICcgd2lkdGg9IjQwMCIgY2xhc3M9InNtZF9hdF9zZWwxIHNtZF9oaWRkZW4iJykpOw0K DQoJCS8vIE9wdGlvbiAyDQoJCSRzZWxhID0gc21kX2F0X2dUeHQoJ2FsbG93ZWRfc2tpbnMn KTsNCgkJJHNlbGIgPSAnPHNlbGVjdCBpZD0ic21kX2F0X3VzZXJfbGlzdCIgbmFtZT0ic21k X2F0X3VzZXJfbGlzdFtdIiBjbGFzcz0ibGlzdCIgc2l6ZT0iOCIgbXVsdGlwbGU9Im11bHRp cGxlIj4nOw0KCQlmb3JlYWNoICgkc2tpbl9saXN0IGFzICRhc2tpbikgew0KCQkJaWYgKHNt ZF9hdF9leGlzdHMoJGFza2luKSkgew0KCQkJCSRzZWxiIC49ICc8b3B0aW9uIHZhbHVlPSIn LiRhc2tpbi4nIicuKChpbl9hcnJheSgkYXNraW4sICR1c2tpbnMpKSA/ICcgc2VsZWN0ZWQ9 InNlbGVjdGVkIicgOiAnJykuJz4nLiRhc2tpbi4nPC9vcHRpb24+JzsNCgkJCX0NCgkJfQ0K CQkkc2VsYiAuPSAnPC9zZWxlY3Q+Jy4kY2xyQnRuOw0KCQllY2hvIHRyKHRkYSgkc2VsYSwg JyBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSAuIHRkYSgkc2VsYiwgJyB3aWR0 aD0iMjQwIiBjbGFzcz0ic21kX2F0X3NlbDIgc21kX2hpZGRlbiInKSk7DQoJCWVjaG8gdHIo dGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJZWNobyAnPC9mb3JtPic7DQoJfSBlbHNl IGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3MgPCAkbnVtUmVxUHJlZnMpIHsNCgkJZWNo byB0cih0ZGEoc3Ryb25nKHNtZF9hdF9nVHh0KCdwcmVmc19zb21lJykpLmJyLmJyDQoJCQkJ CQkuc21kX2F0X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQkuc21k X2F0X2dUeHQoJ3ByZWZzX3NvbWVfb3B0aW9ucycpLCAnIGNvbHNwYW49IjIiJykpOw0KCQll Y2hvIHRyKHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRi dG5TdHlsZSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gdHIodGRhKHNtZF9hdF9nVHh0KCdwcmVm c19ub3RfaW5zdGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKCRi dG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KDQoJZWNo byA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoNCi8vIENvbmNh dGVuYXRlIGNoZWNrYm94IG9wdGlvbnMgZm9yIHN0b3JhZ2UNCmZ1bmN0aW9uIHNtZF9hdF9w cmVmc3dhcChzZWxWYWx1ZSkgew0KCWZvciAoaWR4PTA7IGlkeCA8IDM7IGlkeCsrKSB7DQoJ CWlmIChpZHg9PXNlbFZhbHVlKSB7DQoJCQlqUXVlcnkoIi5zbWRfYXRfc2VsIitpZHgpLnNo b3coKTsNCgkJfSBlbHNlIHsNCgkJCWpRdWVyeSgiLnNtZF9hdF9zZWwiK2lkeCkuaGlkZSgp Ow0KCQl9DQoJfQ0KfQ0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgiaW5wdXRbbmFt ZT0nc21kX2F0X3N5c3RlbSddIikuY2hhbmdlKGZ1bmN0aW9uKCkgew0KCQlzbWRfYXRfcHJl ZnN3YXAodGhpcy52YWx1ZSk7DQoJfSk7DQoNCglqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2so ZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSgnI3NtZF9hdF91c2VyX2xpc3Qgb3B0aW9uJykuYXR0 cigic2VsZWN0ZWQiLCAiIik7DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRfYXRfZ3JwcyIpLmNo YW5nZShmdW5jdGlvbigpIHsNCgkJc2Vsc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCg0K CQkvLyBDbGVhciB0aGUgb2xkIHByaXZzIGxpc3QgYW5kIGdyYWIgdGhlIGN1cnJlbnQgbGlz dCBmcm9tIHRoZSBoaWRkZW4gZmllbGQNCgkJalF1ZXJ5KCIjc21kX2F0X3ByaXZzIG9wdGlv biIpLmF0dHIoInNlbGVjdGVkIixmYWxzZSk7DQoJCXZhciBncnBsaXN0ID0galF1ZXJ5KCJp bnB1dFtuYW1lPSdzbWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCXZhciBncnBzID0g Z3JwbGlzdC5zcGxpdCgnLCcpOw0KCQl2YXIgY250ID0gZ3Jwcy5sZW5ndGg7DQoJCWZvciAo dmFyIGlkeCA9IDA7IGlkeCA8IGNudDsgaWR4KyspIHsNCgkJCXByaXZzID0gZ3Jwc1tpZHhd LnNwbGl0KCc6Jyk7DQoJCQlza2luaWQgPSBwcml2cy5zaGlmdCgpOw0KCQkJaWYgKHNraW5p ZCA9PSBzZWxza2luKSB7DQoJCQkJbnVtUHJpdnMgPSBwcml2cy5sZW5ndGg7DQoJCQkJZm9y IChqZHggPSAwOyBqZHggPCBudW1Qcml2czsgamR4KyspIHsNCgkJCQkJalF1ZXJ5KCIjc21k X2F0X3ByaXZzIG9wdGlvblt2YWx1ZT0nIitwcml2c1tqZHhdKyInXSIpLmF0dHIoInNlbGVj dGVkIiwgdHJ1ZSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfSk7DQoNCglqUXVlcnkoIiNzbWRf YXRfcHJpdnMiKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQoJCXNlbHNraW4gPSBqUXVlcnkoIiNz bWRfYXRfZ3JwcyBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsNCgkJdmFyIG91dCA9IFtdOw0K CQl2YXIgcHJpdnMgPSBbXTsNCgkJcHJpdnMucHVzaChzZWxza2luKTsNCgkJalF1ZXJ5KCIj c21kX2F0X3ByaXZzIG9wdGlvbjpzZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKSB7DQoJCQlw cml2cy5wdXNoKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KCQlpZiAocHJpdnMubGVu Z3RoID09IDEpIHsNCgkJCXByaXZzLnBvcCgpOw0KCQl9IGVsc2Ugew0KCQkJb3V0LnB1c2go cHJpdnMuam9pbigiOiIpKTsNCgkJfQ0KCQl2YXIgaGlkbGlzdCA9IGpRdWVyeSgiaW5wdXRb bmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbCgpOw0KCQl2YXIgcHJldmxpc3QgPSBo aWRsaXN0LnNwbGl0KCcsJyk7DQoJCXZhciBwcmV2Y250ID0gcHJldmxpc3QubGVuZ3RoOw0K DQoJCWpRdWVyeSgiI3NtZF9hdF9ncnBzIG9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKSB7DQoJ CQljdXJyc2tpbiA9IGpRdWVyeSh0aGlzKS52YWwoKTsNCgkJCWlmIChjdXJyc2tpbiAhPSBz ZWxza2luKSB7DQoJCQkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgcHJldmNudDsgaWR4Kysp IHsNCgkJCQkJcHJldnByaXZzID0gcHJldmxpc3RbaWR4XS5zcGxpdCgnOicpOw0KCQkJCQlz a2luaWQgPSBwcmV2cHJpdnMuc2hpZnQoKTsNCgkJCQkJLy8gR2VuZXJhdGUgdGhlIHByaXYg bGlzdCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBza2luLCByZW1vdmluZyBhbnkgZHVw bGljYXRlIHByaXZzIHNldCBlbHNld2hlcmUNCgkJCQkJaWYgKHNraW5pZCA9PSBjdXJyc2tp bikgew0KCQkJCQkJdG1wb3V0ID0gW107DQoJCQkJCQl0bXBvdXQucHVzaChza2luaWQpOw0K CQkJCQkJZm9yICh0aGlzcHJpdiBpbiBwcmV2cHJpdnMpIHsNCgkJCQkJCQlpZiAoalF1ZXJ5 LmluQXJyYXkocHJldnByaXZzW3RoaXNwcml2XSwgcHJpdnMpIDwgMCkgew0KCQkJCQkJCQl0 bXBvdXQucHVzaChwcmV2cHJpdnNbdGhpc3ByaXZdKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJ CQkJCQlpZiAodG1wb3V0Lmxlbmd0aCA+IDEpIHsNCgkJCQkJCQlvdXQucHVzaCh0bXBvdXQu am9pbigiOiIpKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSk7DQoJCWpR dWVyeSgiaW5wdXRbbmFtZT0nc21kX2F0X2dyb3VwX2xpc3QnXSIpLnZhbChvdXQpOw0KCX0p Ow0KDQoJLy8gRGlzcGxheSBhIHRvb2x0aXAgc2hvd2luZyB0aGUgY3VycmVudGx5LWFzc2ln bmVkIHNraW4gd2hlbiBob3ZlcmluZyBvdmVyIGEgcHJpdmlsZWdlIGxldmVsDQoJalF1ZXJ5 KCIjc21kX2F0X3ByaXZzIG9wdGlvbiIpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQlob3ZpdGVt ID0galF1ZXJ5KHRoaXMpLnZhbCgpOw0KCQlncnBzID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdz bWRfYXRfZ3JvdXBfbGlzdCddIikudmFsKCk7DQoJCWl0ZW1zID0gZ3Jwcy5zcGxpdCgiLCIp Ow0KCQlmb3IgKGlkeCA9IDA7IGlkeCA8IGl0ZW1zLmxlbmd0aDsgaWR4KyspIHsNCgkJCXNr aW56ID0gaXRlbXNbaWR4XS5zcGxpdCgiOiIpOw0KCQkJZm9yIChqZHggPSAxOyBqZHggPCBz a2luei5sZW5ndGg7IGpkeCsrKSB7DQoJCQkJaWYgKHNraW56W2pkeF0gPT0gaG92aXRlbSkg ew0KCQkJCQlqUXVlcnkodGhpcykuYXR0cigidGl0bGUiLCBza2luelswXSk7DQoJCQkJCWJy ZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0sDQoJZnVuY3Rpb24oKSB7DQoJCWpRdWVyeSh0 aGlzKS5hdHRyKCJ0aXRsZSIsICIiKTsNCgl9KTsNCglzbWRfYXRfcHJlZnN3YXAoalF1ZXJ5 KCJpbnB1dFtuYW1lPSdzbWRfYXRfc3lzdGVtJ106Y2hlY2tlZCIpLnZhbCgpKTsNCglqUXVl cnkoIiNzbWRfYXRfcHJpdnMiKS5jaGFuZ2UoKTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0pTOw0K CWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JzsNCgllY2hvICRzbWRfYXRfc3R5bGVz Wydjb21tb24nXS5uLiRzbWRfYXRfc3R5bGVzWydzZXR1cCddOw0KCWVjaG8gJzwvc3R5bGU+ JzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBTcGxpdCBhIG11bHRp LWNoYXIgcHJlZmVyZW5jZSB2YWx1ZSBpbnRvIGFuIGFycmF5IG9mIGtleXMvdmFsdWVzLg0K Ly8gTm90ZTogdmFsdWUgaXMgcGFzc2VkIGluIGFuZCBub3QgcmVhZCBkaXJlY3RseSBmcm9t IHRoZSBwcmVmcyBhcnJheSBpbiB0aGlzIGZ1bmN0aW9uIC0gaW50ZW50aW9uYWxseQ0KZnVu Y3Rpb24gc21kX2F0X3ByZWZfZXhwbG9kZSgkdmFsKSB7DQoJJG9yZGVyID0gYXJyYXlfdmFs dWVzKGFycmF5KHNtZF9hdF9nVHh0KCdjX2d6aXAnKSxzbWRfYXRfZ1R4dCgnY19iemlwJyks c21kX2F0X2dUeHQoJ2NfemlwJykpKTsNCgkkb25vZmYgPSBhcnJheV92YWx1ZXMocHJlZ19z cGxpdCgnLy8nLCAkdmFsLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSkpOw0KCSRvdXQgPSBh cnJheSgpOw0KCWZvcmVhY2goJG9yZGVyIGFzICRrZXkxID0+ICR2YWx1ZTEpIHsNCgkJJG91 dFsoc3RyaW5nKSR2YWx1ZTFdID0gJG9ub2ZmWyRrZXkxXTsNCgl9DQoJcmV0dXJuICRvdXQ7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc19pbnN0YWxsKCRzaG93 cGFuZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0K CWZvcmVhY2ggKCRzbWRfYXRfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYg KCFmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgew0KCQkJJGlkID0g c2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRv U2xhc2goJHByZWYpKS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50 PSJzbWRfYWRza2luIicpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJJG1lc3Nh Z2UgPSBzbWRfYXRfZ1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCXNtZF9hdF9zZXR1cCgk bWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfcHJlZnNf cmVtb3ZlKCRzaG93cGFuZT0nMScpIHsNCglnbG9iYWwgJHNtZF9hdF9wcmVmczsNCgkkbWVz c2FnZSA9ICcnOw0KCWZvcmVhY2ggKGFycmF5X21lcmdlKCRzbWRfYXRfcHJlZnNbMF0sJHNt ZF9hdF9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsNCgkJaWYgKGZldGNoKCduYW1l JywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgn dHhwX3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsNCgkJfQ0KCX0N CglpZiAoJHNob3dwYW5lKSB7DQoJCSRtZXNzYWdlID0gc21kX2F0X2dUeHQoJ3ByZWZzX2Rl bGV0ZWQnKTsNCgkJc21kX2F0X3NldHVwKCRtZXNzYWdlKTsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIHNtZF9hdF9wcmVmc191cGRhdGUoKSB7DQoJZ2xvYmFsICRzbWRfcGx1 Z2luX3ByZWZzLCAkc21kX2F0X3ByZWZzLCAkc21kX2F0X2V2ZW50Ow0KDQoJJG1lc3NhZ2Ug PSAnJzsNCgkkcG9zdCA9IGFycmF5KCk7DQoJJHBvc3RbJ3NtZF9hdF9nbG9iYWxfc2tpbidd ID0gZ3BzKCdzbWRfYXRfZ2xvYmFsX3NraW4nKTsNCgkkcG9zdFsnc21kX2F0X3N5c3RlbSdd ID0gZ3BzKCdzbWRfYXRfc3lzdGVtJyk7DQoJJHBvc3RbJ3NtZF9hdF9sYXlvdXQnXSA9IGdw cygnc21kX2F0X2xheW91dCcpOw0KCSRwb3N0WydzbWRfYXRfY2FzZV9zb3J0J10gPSBncHMo J3NtZF9hdF9jYXNlX3NvcnQnKTsNCgkkcG9zdFsnc21kX2F0X3R3J10gPSBncHMoJ3NtZF9h dF90dycpOw0KCSRwb3N0WydzbWRfYXRfdGgnXSA9IGdwcygnc21kX2F0X3RoJyk7DQoJJHBv c3RbJ3NtZF9hdF9maWxlbmFtZV9mb3JtYXQnXSA9IGdwcygnc21kX2F0X2ZpbGVuYW1lX2Zv cm1hdCcpOw0KCWlmIChncHMoJ3NtZF9hdF91c2VyX2xpc3QnKSkgew0KCQkkcG9zdFsnc21k X2F0X3VzZXJfbGlzdCddID0gam9pbignLCcsIGdwcygnc21kX2F0X3VzZXJfbGlzdCcpKTsN Cgl9IGVsc2Ugew0KCQkkcG9zdFsnc21kX2F0X3VzZXJfbGlzdCddID0gJyc7DQoJfQ0KCWlm IChncHMoJ3NtZF9hdF9ncm91cF9saXN0JykpIHsNCgkJJHBvc3RbJ3NtZF9hdF9ncm91cF9s aXN0J10gPSBncHMoJ3NtZF9hdF9ncm91cF9saXN0Jyk7DQoJfQ0KCWlmIChncHMoJ3NtZF9h dF9jcnVzaCcpKSB7DQoJCSRwb3N0WydzbWRfYXRfY3J1c2gnXSA9IGdwcygnc21kX2F0X2Ny dXNoJyk7DQoJfQ0KDQoJLy8gU2V0IHRoZSBzeXN0ZW0td2lkZSB0aGVtZSB0byB0aGUgZ2xv YmFsIHRoZW1lDQoJaWYgKCRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSkgew0KCQlzZXRf cHJlZigndGhlbWVfbmFtZScsICRwb3N0WydzbWRfYXRfZ2xvYmFsX3NraW4nXSk7DQoJfQ0K DQoJZm9yZWFjaCAoJHNtZF9hdF9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlp ZiAoaXNzZXQoJHBvc3RbJHByZWZdKSkgew0KCQkJc2V0X3ByZWYoJHByZWYsICRwb3N0WyRw cmVmXSwgJHNtZF9hdF9ldmVudCwgMik7DQoJCX0NCgl9DQoJJG1lc3NhZ2UgPSBnVHh0KCdw cmVmZXJlbmNlc19zYXZlZCcpOw0KCXNtZF9hdF9zZXR1cCgkbWVzc2FnZSk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gVVRJTElUWSBGVU5DVElPTlMNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X2dldF9wcml2cygkdXNl cj0nJykgew0KCWdsb2JhbCAkdHhwX3VzZXI7DQoJJHVzZXIgPSAoJHVzZXIpID8gJHVzZXIg OiAkdHhwX3VzZXI7DQoJJHByaXZzID0gc2FmZV9maWVsZCgicHJpdnMiLCAidHhwX3VzZXJz IiwgIm5hbWU9JyIuZG9TbGFzaCgkdXNlcikuIiciKTsNCglyZXR1cm4gJHByaXZzOw0KfQ0K DQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9leGlzdHMo JG5hbWUpIHsNCgkkaW5zdGFuY2UgPSB0aGVtZTo6ZmFjdG9yeSgkbmFtZSk7DQoJcmV0dXJu ICRpbnN0YW5jZTsNCn0NCg0KLy8gSWYgcGVyLXVzZXIgc2tpbiBzdXBwb3J0IGlzIE9GRiwg dGhlIGdsb2JhbCBza2luIHdpbnMuDQovLyBPbmUgZXhjZXB0aW9uOiBpZiB0aGUgdXNlciBp cyBhbiBhZG1pbiwgYWxsb3cgdGhlIGN1cnJlbnQgc2tpbiB0byBwcmV2YWlsIHNvIHRoZXkg bWF5IHN3aXRjaCBza2lucyB3aXRoIGltcHVuaXR5DQovLyBhbmQgbm90IGFmZmVjdCB0aGUg Z2xvYmFsIHNraW4NCmZ1bmN0aW9uIHNtZF9hdF9wZXIoKSB7DQoJZ2xvYmFsICRzbWRfYXRf cHJpdnMsICRwcmVmcywgJHRoZW1lLCAkdHhwX3VzZXI7DQoNCgkkYXRfcHJlZnMgPSBzbWRf YXRfZ2V0X3ByZWZzKCk7DQoJJHNraW5TeXMgPSBpc3NldCgkYXRfcHJlZnNbJ3NtZF9hdF9z eXN0ZW0nXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF9zeXN0ZW0nXSA6IDA7DQoJJHByaXZzID0g c21kX2F0X2dldF9wcml2cygpOw0KCSRnYmxfc2tpbiA9IChpc3NldCgkYXRfcHJlZnNbJ3Nt ZF9hdF9nbG9iYWxfc2tpbiddKSAmJiAkYXRfcHJlZnNbJ3NtZF9hdF9nbG9iYWxfc2tpbidd ICE9ICcnKSA/ICRhdF9wcmVmc1snc21kX2F0X2dsb2JhbF9za2luJ10gOiAnJzsNCgkkZ2Js X3NraW4gPSAoc21kX2F0X2V4aXN0cygkZ2JsX3NraW4pKSA/ICRnYmxfc2tpbiA6ICdjbGFz c2ljJzsNCg0KCXN3aXRjaCAoJHNraW5TeXMpIHsNCgkJY2FzZSAwOg0KCQkJLy8gR2xvYmFs IGZvcmNlZCBza2luIChleGNlcHQgYWRtaW5zKQ0KCQkJaWYgKCFpbl9hcnJheSgkcHJpdnMs IGV4cGxvZGUoJywnLCAkc21kX2F0X3ByaXZzKSkpIHsNCgkJCQlyZXR1cm4gJGdibF9za2lu Ow0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZG1pbnMNCgkJCQkkYWRtX3NraW4gPSBnZXRfcHJl Zignc21kX3NraW4nLCAoKCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUp KTsNCgkJCQlyZXR1cm4gKHNtZF9hdF9leGlzdHMoJGFkbV9za2luKSkgPyAkYWRtX3NraW4g OiAnY2xhc3NpYyc7DQoJCQl9DQoJCQlicmVhazsNCgkJY2FzZSAxOg0KCQkJLy8gR3JvdXAt bGV2ZWwgZm9yY2VkIHNraW5zDQoJCQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgn LCcsICRzbWRfYXRfcHJpdnMpKSkgew0KCQkJCSRmb3JjZVNraW5zID0gKGlzc2V0KCRhdF9w cmVmc1snc21kX2F0X2dyb3VwX2xpc3QnXSkpID8gJGF0X3ByZWZzWydzbWRfYXRfZ3JvdXBf bGlzdCddIDogKCgkZ2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKTsNCg0K CQkJCS8vIFNwbGl0IHRoZSBncm91cCBza2luIGxpc3QNCgkJCQkkZ3NraW5zID0gYXJyYXko KTsNCgkJCQkkZ29wdHMgPSBleHBsb2RlKCcsJywgJGZvcmNlU2tpbnMpOw0KCQkJCWZvcmVh Y2ggKCRnb3B0cyBhcyAkZ3JwZGVmKSB7DQoJCQkJCWlmICgkZ3JwZGVmID09ICcnKSBjb250 aW51ZTsNCgkJCQkJJHByaXZncnAgPSBleHBsb2RlKCI6IiwgJGdycGRlZik7DQoJCQkJCSRz a2luaWQgPSBhcnJheV9zaGlmdCgkcHJpdmdycCk7DQoJCQkJCWlmIChpbl9hcnJheSgkcHJp dnMsICRwcml2Z3JwKSkgew0KCQkJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3RzKCRza2luaWQp KSA/ICRza2luaWQgOiAnY2xhc3NpYyc7Ow0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiAo JGdibF9za2luKSA/ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZTsNCgkJCX0gZWxzZSB7DQoJ CQkJLy8gQWRtaW5zDQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgk Z2JsX3NraW4pID8gJGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChz bWRfYXRfZXhpc3RzKCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJ fQ0KCQkJYnJlYWs7DQoJCWNhc2UgMjoNCgkJCS8vIFBlci11c2VyIHNraW4uIElmIHVzZXIg aXMgbm9uLWFkbWluLCBjaGVjayB0aGUgc2tpbiBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0DQoJ CQlpZiAoIWluX2FycmF5KCRwcml2cywgZXhwbG9kZSgnLCcsICRzbWRfYXRfcHJpdnMpKSkg ew0KCQkJCSR2YWxpZFNraW5zID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3VzZXJfbGlz dCddKSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF91c2VyX2xpc3QnXSA6ICgoJGdibF9za2luKSA/ ICRnYmxfc2tpbiA6ICR0aGVtZS0+bmFtZSk7DQoJCQkJJHZhbGlkU2tpbnMgPSBkb19saXN0 KCR2YWxpZFNraW5zKTsNCgkJCQkkdGhlX3NraW4gPSBnZXRfcHJlZignc21kX3NraW4nLCAo KCRnYmxfc2tpbikgPyAkZ2JsX3NraW4gOiAkdGhlbWUtPm5hbWUpKTsNCgkJCQlyZXR1cm4g KGluX2FycmF5KCR0aGVfc2tpbiwgJHZhbGlkU2tpbnMpICYmIHNtZF9hdF9leGlzdHMoJHRo ZV9za2luKSkgPyAkdGhlX3NraW4gOiAnJzsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQWRtaW5z DQoJCQkJJGFkbV9za2luID0gZ2V0X3ByZWYoJ3NtZF9za2luJywgKCgkZ2JsX3NraW4pID8g JGdibF9za2luIDogJHRoZW1lLT5uYW1lKSk7DQoJCQkJcmV0dXJuIChzbWRfYXRfZXhpc3Rz KCRhZG1fc2tpbikpID8gJGFkbV9za2luIDogJ2NsYXNzaWMnOw0KCQkJfQ0KCQkJYnJlYWs7 DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFJlYWQgYW5kIHJl dHVybiB0aGUgbWFuaWZlc3QsIGlmIGl0IGV4aXN0cyBhbmQgYWRkIGEgZmV3IG90aGVyIG5p Y2V0aWVzIHRvIHRoZSBhcnJheSBmb3IgbGF0ZXINCmZ1bmN0aW9uIHNtZF9hdF9yZWFkX3Nr aW5mbygkc2tpbikgew0KCWdsb2JhbCAkc21kX2NvcmVfdGhlbWVzOw0KDQoJJHRoaXNfdGhl bWUgPSB0aGVtZTo6ZmFjdG9yeSgkc2tpbik7DQoJJHNraW5mbyA9IGFycmF5KCk7DQoJaWYg KCR0aGlzX3RoZW1lKSB7DQoJCSRza2luZm8gPSAkdGhpc190aGVtZS0+bWFuaWZlc3QoKTsN CgkJJHNraW5mb1snZG5hbWUnXSA9IGVtcHR5KCRza2luZm9bJ3RpdGxlJ10pID8gdWN3b3Jk cygkdGhpc190aGVtZS0+bmFtZSkgOiAkc2tpbmZvWyd0aXRsZSddOw0KCQkkc2tpbmZvWydu YW1lJ10gPSAkdGhpc190aGVtZS0+bmFtZTsNCgkJJHNraW5mb1sncGF0aCddID0gJHRoaXNf dGhlbWUtPnVybDsNCgkJJHNraW5mb1sncGhwZmlsZSddID0gJHRoaXNfdGhlbWUtPnBhdGgo JHNraW4pOw0KCQkkc2tpbmZvWydiYXNlZF9vbiddID0gJyc7DQoJCSRjb250ZW50cyA9IGZp bGVfZ2V0X2NvbnRlbnRzKCRza2luZm9bJ3BocGZpbGUnXSk7DQoJCWlmICgoJHBvcyA9IHN0 cnBvcygkY29udGVudHMsICd0aGVtZTo6YmFzZWRfb24nKSkgIT09IGZhbHNlKSB7DQoJCQkk YmVncG9zID0gc3RycG9zKCRjb250ZW50cywgIiciLCAkcG9zKSsxOw0KCQkJJGVuZHBvcyA9 IHN0cnBvcygkY29udGVudHMsICInIiwgJGJlZ3Bvcyk7DQoJCQkkYmFzZSA9IHN1YnN0cigk Y29udGVudHMsICRiZWdwb3MsICRlbmRwb3MtJGJlZ3Bvcyk7DQoJCQkkc2tpbmZvWydiYXNl ZF9vbiddID0gKGluX2FycmF5KCRiYXNlLCAkc21kX2NvcmVfdGhlbWVzKSkgPyAnJyA6ICRi YXNlOw0KCQl9DQoJCXVuc2V0KCR0aGlzX3RoZW1lKTsNCgl9DQoJcmV0dXJuICRza2luZm87 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gR3JhYiB0aGUgdGh1bWJu YWlsIGZpbGVuYW1lIGlmIGl0IGV4aXN0cywgb3B0aW9uYWxseSByZXR1cm4gYSBmb3JtYXR0 ZWQgaW1nIHRhZw0KZnVuY3Rpb24gc21kX2F0X2dldF90aHVtYigkc2tpbiwgJGltZz0wKSB7 DQoJZ2xvYmFsICRzbWRfYXRfcHJlZnM7DQoNCgkkYXRfcHJlZnMgPSBzbWRfYXRfZ2V0X3By ZWZzKCk7DQoJJHR3ID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJl ZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J107DQoJJHRo ID0gaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdGgnXSkgPyAkYXRfcHJlZnNbJ3NtZF9hdF90 aCddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3RoJ107DQoJJHVzZV90aHVtYiA9ICgk dHcgPT0gMCB8fCAkdGggPT0gMCkgPyBmYWxzZSA6IHRydWU7DQoNCgkvLyBBbiBhcnJheSBt ZWFucyB0aGUgbWFuaWZlc3QgaGFzIGFscmVhZHkgYmVlbiByZWFkIGFuZCBpcyBiZWluZyBw YXNzZWQgaW50byB0aGlzIGZ1bmN0aW9uDQoJaWYgKCFpc19hcnJheSgkc2tpbikpIHsNCgkJ JHNraW4gPSBzbWRfYXRfcmVhZF9za2luZm8oJHNraW4pOw0KCX0NCglpZiAoJHNraW4pIHsN CgkJJHNraW5kaXIgPSAkc2tpblsncGF0aCddOw0KCQkkdGh1bWJuYW1lID0gZ2xvYigkc2tp bmRpci4nc2NyZWVuc2hvdC4qJyk7DQoJCXJldHVybiAoJGltZyAmJiAkdXNlX3RodW1iICYm ICR0aHVtYm5hbWUgJiYgZmlsZV9leGlzdHMoJHRodW1ibmFtZVswXSkpID8gJzxpbWcgc3Jj PSInLiR0aHVtYm5hbWVbMF0uJyIgYWx0PSInLigoaXNzZXQoJHNraW5bJ25hbWUnXSkpID8g JHNraW5bJ25hbWUnXSA6ICcnKS4nIHRodW1ibmFpbCIgc3R5bGU9ImJvcmRlcjoycHggcmlk Z2UgIzk5OTtwYWRkaW5nOjJweDsiIHdpZHRoPSInLiR0dy4nIiBoZWlnaHQ9IicuJHRoLici IC8+JyA6ICcnOw0KCX0gZWxzZSB7DQoJCXJldHVybiAnJzsNCgl9DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX2F0X3JlYWRfc2tpbnMoKSB7DQoJ JHNraW5fbGlzdCA9IHRoZW1lOjpuYW1lcygpOw0KCSRza2luX2xpc3QgPSBzbWRfYXRfc29y dCgkc2tpbl9saXN0KTsNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0NCg0KLy8gU29ydCB0aGUg c2tpbnMgYnV0IGtlZXAgJ2NsYXNzaWMnIGF0IHRoZSB0b3ANCmZ1bmN0aW9uIHNtZF9hdF9z b3J0KCRza2luX2xpc3QpIHsNCglnbG9iYWwgJHByZWZzOw0KDQoJJGNhc2VTZW5zZSA9IGlz c2V0KCRwcmVmc1snc21kX2F0X2Nhc2Vfc29ydCddKSA/ICRwcmVmc1snc21kX2F0X2Nhc2Vf c29ydCddIDogMTsNCg0KCWlmKCRjYXNlU2Vuc2UpIHsNCgkJbmF0c29ydCgkc2tpbl9saXN0 KTsNCgl9IGVsc2Ugew0KCQluYXRjYXNlc29ydCgkc2tpbl9saXN0KTsNCgl9DQoJJGRmbHRf Zm91bmQgPSBmYWxzZTsNCglmb3JlYWNoICgkc2tpbl9saXN0IGFzICRza2luX2lkeCA9PiAk c2tpbl9uYW1lKSB7DQoJCWlmICgkc2tpbl9uYW1lID09ICJjbGFzc2ljIikgew0KCQkJdW5z ZXQoJHNraW5fbGlzdFskc2tpbl9pZHhdKTsNCgkJCSRkZmx0X2ZvdW5kID0gdHJ1ZTsNCgkJ CWJyZWFrOw0KCQl9DQoJfQ0KCWlmICgkZGZsdF9mb3VuZCkgew0KCQlhcnJheV91bnNoaWZ0 KCRza2luX2xpc3QsImNsYXNzaWMiKTsNCgl9DQoNCglyZXR1cm4gJHNraW5fbGlzdDsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfYXRfbGlzdGRp cigkc3RhcnRfZGlyPScuJykgew0KCSRmaWxlcyA9IGFycmF5KCk7DQoNCglpZiAoaXNfZGly KCRzdGFydF9kaXIpKSB7DQoJCSRmaCA9IG9wZW5kaXIoJHN0YXJ0X2Rpcik7DQoJCXdoaWxl ICgoJGZpbGUgPSByZWFkZGlyKCRmaCkpICE9PSBmYWxzZSkgew0KCQkJLy8gbG9vcCB0aHJv dWdoIHRoZSBmaWxlcywgc2tpcHBpbmcgLiBhbmQgLi4sIGFuZCByZWN1cnNpbmcgaWYgbmVj ZXNzYXJ5DQoJCQlpZiAoc3RyY21wKCRmaWxlLCAnLicpPT0wIHx8IHN0cmNtcCgkZmlsZSwg Jy4uJyk9PTApIGNvbnRpbnVlOw0KCQkJJGZpbGVwYXRoID0gJHN0YXJ0X2RpciAuICcvJyAu ICRmaWxlOw0KCQkJaWYgKCBpc19kaXIoJGZpbGVwYXRoKSApIHsNCgkJCQkkZmlsZXMgPSBh cnJheV9tZXJnZSgkZmlsZXMsIHNtZF9hdF9saXN0ZGlyKCRmaWxlcGF0aCkpOw0KCQkJfSBl bHNlIHsNCgkJCQlhcnJheV9wdXNoKCRmaWxlcywgJGZpbGVwYXRoKTsNCgkJCX0NCgkJfQ0K CQljbG9zZWRpcigkZmgpOw0KCX0gZWxzZSB7DQoNCgkJLy8gZmFsc2UgaWYgdGhlIGZ1bmN0 aW9uIHdhcyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG5vbi1kaXJlY3RvcnkgYXJndW1lbnQN CgkJJGZpbGVzID0gZmFsc2U7DQoJfQ0KDQoJcmV0dXJuICRmaWxlczsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZWN1cnNpdmUgcm1kaXIoKSBjb3VydGVzeSBv ZiB0aGUgcGhwIG1hbnVhbCB1c2VyIGNvbW1lbnRzDQpmdW5jdGlvbiBzbWRfcm1kaXJfcmVj dXJzaXZlKCRmaWxlcGF0aCkgew0KCWlmIChpc19kaXIoJGZpbGVwYXRoKSAmJiAhaXNfbGlu aygkZmlsZXBhdGgpKSB7DQoJCWlmICgkZGggPSBvcGVuZGlyKCRmaWxlcGF0aCkpIHsNCgkJ CXdoaWxlICgoJHNmID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsNCgkJCQlpZiAoJHNm ID09ICcuJyB8fCAkc2YgPT0gJy4uJykgY29udGludWU7DQoJCQkJaWYgKCFzbWRfcm1kaXJf cmVjdXJzaXZlKCRmaWxlcGF0aC4nLycuJHNmKSkgew0KCQkJCQlicmVhazsgLy8gRG9oLCBj YW4ndCBkZWxldGUNCgkJCQl9DQoJCQl9DQoJCQljbG9zZWRpcigkZGgpOw0KCQl9DQoJCXJl dHVybiBybWRpcigkZmlsZXBhdGgpOw0KCX0NCglyZXR1cm4gdW5saW5rKCRmaWxlcGF0aCk7 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gRnJvbSBQSFAgbWFudWFs IGNvbW1lbnRzLiBUaGFua3MgcHVyZW1hbmdvDQpmdW5jdGlvbiBzbWRfYXRfaXNfZGlyKCRk aXIpIHsNCgkvLyBieXBhc3NlcyBvcGVuX2Jhc2VkaXIgcmVzdHJpY3Rpb25zIG9mIGlzX2Rp ciBhbmQgZmlsZXBlcm1zDQoJJHRtcF9jbWQgPSBgbHMgLWRsICRkaXJgOw0KCSRkaXJfZmxh ZyA9ICR0bXBfY21kWzBdOw0KCWlmKCRkaXJfZmxhZyE9ImQiKSB7DQoJCS8vIG5vdCBkOyB1 c2UgbmV4dCBjaGFyIChmaXJzdCBjaGFyIG1pZ2h0IGJlICdzJyBhbmQgaXMgc3RpbGwgZGly ZWN0b3J5KQ0KCQkkZGlyX2ZsYWcgPSAkdG1wX2NtZFsxXTsNCgl9DQoJcmV0dXJuICgkZGly X2ZsYWc9PSJkIik7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX21rZGlyX3JlY3Vyc2l2ZSgkcGF0aCwgJG1vZGUgPSAwNzU1KSB7DQoJaWYoQG1r ZGlyKCRwYXRoLCAkbW9kZSkgb3IgZmlsZV9leGlzdHMoJHBhdGgpKSByZXR1cm4gdHJ1ZTsN CglyZXR1cm4gKHNtZF9ta2Rpcl9yZWN1cnNpdmUoZGlybmFtZSgkcGF0aCksICRtb2RlKSBh bmQgbWtkaXIoJHBhdGgsICRtb2RlKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gc21kX2F0X2NoYW5nZV9wYWdlYnkoKSB7DQoJc2V0Y29va2llKCdz bWRfYXRfcGFnZWJ5JywgZ3BzKCdxdHknKSk7DQoJc21kX2F0X2xpc3QoJycpOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF9hdF9zd2l0Y2goJG1l c3NhZ2U9JycpIHsNCglnbG9iYWwgJHNtZF9hdF9wcml2czsNCg0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCdza2luJywgJ2V2ZW50JywgJ25leHRzdGVwJykpKSk7DQoJJHVybCA9 ICI/ZXZlbnQ9Ii4kZXZlbnQuIiZzdGVwPSIuJG5leHRzdGVwOw0KDQoJaWYgKCRza2luICYm IHNtZF9hdF9leGlzdHMoJHNraW4pKSB7DQoJCXNldF9wcmVmKCdzbWRfc2tpbicsICRza2lu LCAkZXZlbnQsIFBSRUZfSElEREVOLCAndGV4dF9pbnB1dCcsIDAsIFBSRUZfUFJJVkFURSk7 DQoJCSR1cmwgLj0gJyZtZXNzYWdlPScgLiAoKCRtZXNzYWdlKSA/ICRtZXNzYWdlIDogc21k X2F0X2dUeHQoJ3NraW5fc3dpdGNoZWQnLCBhcnJheSgne3NraW59JyA9PiAkc2tpbikpKTsN Cgl9IGVsc2Ugew0KCQkkdXJsIC49ICcmbWVzc2FnZT0nIC4gJG1lc3NhZ2U7DQoJfQ0KDQoJ Ly8gU2luY2UgdGhlIGhlYWRlcnMgaGF2ZSBiZWVuIHNlbnQsIGRvdWJsZS1kZWNsdXRjaCBp biBvcmRlciB0byBzaG93IHRoZSBza2luIHRoaXMgZmlyc3QgdGltZQ0KCWVjaG8gPDw8RU9T DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp3aW5kb3cubG9jYXRpb24uaHJl Zj0ieyR1cmx9IjsNCjwvc2NyaXB0Pg0KPG5vc2NyaXB0Pg0KPG1ldGEgaHR0cC1lcXVpdj0i cmVmcmVzaCIgY29udGVudD0iMDt1cmw9eyR1cmx9IiAvPg0KPC9ub3NjcmlwdD4NCkVPUzsN CglleGl0Ow0KfQ0KDQovLyBBbGwtdXNlciBza2luIGNob29zZXINCmZ1bmN0aW9uIHNtZF9h ZG1hdCgkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwg YXJyYXkoDQoJCQknc21kX2F0X3N3aXRjaCcsDQoJCSkpKSB7DQoJCXNtZF9hdF9jaG9vc2Vy KCcnKTsNCgl9IGVsc2UgJHN0ZXAoKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBzbWRfYXRfY2hvb3NlcigkbWVzc2FnZT0nJykgew0KCWdsb2JhbCAk cHJlZnMsICRzbWRfYXRfYWRtX2V2ZW50LCAkdGhlbWUsICRzbWRfYXRfc3R5bGVzOw0KDQoJ JGF0X3ByZWZzID0gc21kX2F0X2dldF9wcmVmcygpOw0KCSRsYXlvdXQgPSAoaXNzZXQoJGF0 X3ByZWZzWydzbWRfYXRfbGF5b3V0J10pKSA/ICRhdF9wcmVmc1snc21kX2F0X2xheW91dCdd IDogMTsNCgkkdHcgPSAoaXNzZXQoJGF0X3ByZWZzWydzbWRfYXRfdHcnXSkgPyAkYXRfcHJl ZnNbJ3NtZF9hdF90dyddIDogJHNtZF9hdF9wcmVmc1swXVsnc21kX2F0X3R3J10pICsgMTA7 DQoJJHRoID0gKGlzc2V0KCRhdF9wcmVmc1snc21kX2F0X3RoJ10pID8gJGF0X3ByZWZzWydz bWRfYXRfdGgnXSA6ICRzbWRfYXRfcHJlZnNbMF1bJ3NtZF9hdF90aCddKSArIDgwOw0KCSRz dHlsZXJlcHMgPSBhcnJheSgNCgkJJ3t0d30nID0+ICR0dywNCgkJJ3t0aH0nID0+ICR0aCwN CgkpOw0KDQoJJG1lc3NhZ2UgPSAoJG1lc3NhZ2UpID8gJG1lc3NhZ2UgOiBncHMoJ21lc3Nh Z2UnKTsNCglwYWdldG9wKHNtZF9hdF9nVHh0KCdza2lubmVyJyksJG1lc3NhZ2UpOw0KDQoJ JGN1cnJfc2tpbiA9ICR0aGVtZS0+bmFtZTsNCg0KCSRhbGxvd2VkID0gJyc7DQoJaWYgKGlz c2V0KCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKSkgew0KCQkkYWxsb3dlZCA9IGV4cGxv ZGUoIiwiLCRwcmVmc1snc21kX2F0X3VzZXJfbGlzdCddKTsNCgkJZm9yZWFjaCAoJGFsbG93 ZWQgYXMgJGlkeCA9PiAkdmFsaWQpIHsNCgkJCWlmICgkdmFsaWQgPT0gJycpIHsNCgkJCQl1 bnNldCgkYWxsb3dlZFskaWR4XSk7DQoJCQl9DQoJCX0NCgl9DQoJJGFsbG93ZWQgPSBzbWRf YXRfc29ydCgkYWxsb3dlZCk7DQoJJGhkcm93ID0gaGVkKHNtZF9hdF9nVHh0KCdhdmFpbF90 aXRsZScpLCAzKTsNCg0KCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJZWNobyAnPHN0eWxlIHR5 cGU9InRleHQvY3NzIj4nOw0KCQllY2hvICRzbWRfYXRfc3R5bGVzWydjb21tb24nXS5uLiRz bWRfYXRfc3R5bGVzWydsaXN0J107DQoJCWVjaG8gJzwvc3R5bGU+JzsNCgkJZWNobyBzdGFy dFRhYmxlKCdsaXN0JywgJycsICdzbWRfYXRfbGlzdCcpOw0KCQllY2hvIHRyKA0KCQkJdGRh KCRoZHJvdywgJyBjb2xzcGFuPSIzIicpDQoJCSk7DQoJCWVjaG8gdHIoDQoJCQlhc3NIZWFk KA0KCQkJCXNtZF9hdF9nVHh0KCdza2luX2dibCcpLA0KCQkJCSdhdXRob3InLA0KCQkJCSdk ZXNjcmlwdGlvbicNCgkJCSkpOw0KCX0gZWxzZSB7DQoJCWVjaG8gJzxzdHlsZSB0eXBlPSJ0 ZXh0L2NzcyI+JzsNCgkJZWNobyBzdHJ0cigkc21kX2F0X3N0eWxlc1snY29tbW9uJ10ubi4k c21kX2F0X3N0eWxlc1snZ3JpZCddLCAkc3R5bGVyZXBzKTsNCgkJZWNobyAnPC9zdHlsZT4n Ow0KCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfZ3JpZCI+PGRpdiBjbGFzcz0ic21kX25ld3Jv dyI+Jy4kaGRyb3cuJzwvZGl2Pic7DQoJfQ0KCWZvcmVhY2ggKCRhbGxvd2VkIGFzICRza2lu X25hbWUpIHsNCgkJJHNraW5mbyA9IHNtZF9hdF9yZWFkX3NraW5mbygkc2tpbl9uYW1lKTsN CgkJaWYgKCRza2luZm8pIHsNCgkJCSR0aHVtYm5haWwgPSBzbWRfYXRfZ2V0X3RodW1iKCRz a2luZm8sIDEpOw0KCQkJJHRoaXNfc2tpbiA9ICgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4p ID8gc3Ryb25nKCRza2luZm9bJ2RuYW1lJ10pIDogJHNraW5mb1snZG5hbWUnXTsNCgkJCSR0 aHVtcm93ID0gJzxhIGhyZWY9Ij9ldmVudD0nLiRzbWRfYXRfYWRtX2V2ZW50LmEuJ3N0ZXA9 c21kX2F0X3N3aXRjaCcuYS4nbmV4dHN0ZXA9c21kX2FkbWF0Jy5hLidza2luPScuJHNraW5f bmFtZS4nIiB0aXRsZT0iJy5zbWRfYXRfZ1R4dCgnYXBwbHlfc2tpbicpLiciPicuJHRoaXNf c2tpbi4oKCR0aHVtYm5haWwpID8gJzxkaXY+Jy4kdGh1bWJuYWlsLic8L2Rpdj4nIDogJycp Lic8L2E+JzsNCgkJCSRhdXRocm93ID0gKHN0cnBvcygkc2tpbmZvWydhdXRob3JfdXJpJ10s ICJodHRwOi8vIikgPT09IDApID8gJzxhIGhyZWY9IicuJHNraW5mb1snYXV0aG9yX3VyaSdd LiciPicuJHNraW5mb1snYXV0aG9yJ10uJzwvYT4nIDogJHNraW5mb1snYXV0aG9yJ107DQoN CgkJCWlmICgkbGF5b3V0PT0iMCIpIHsNCgkJCQllY2hvIHRyKA0KCQkJCQl0ZCgkdGh1bXJv dykNCgkJCQkJLnRkKCRhdXRocm93LCAxMDApDQoJCQkJCS50ZCgkc2tpbmZvWydkZXNjcmlw dGlvbiddLCAyNTApDQoJCQkJCSwgKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBj bGFzcz0iYWN0aXZlIicgOiAnJykNCgkJCQkpOw0KCQkJfSBlbHNlIHsNCgkJCQllY2hvICc8 ZGl2IGNsYXNzPSJzbWRfY2VsbCcuKCgkc2tpbl9uYW1lID09ICRjdXJyX3NraW4pID8gJyBh Y3RpdmUnIDogJycpLiciPic7DQoJCQkJZWNobyAnPGRpdj4nLiR0aHVtcm93Lic8L2Rpdj4n Ow0KCQkJCWVjaG8gJzxkaXYgY2xhc3M9InNtZF9hdXRoIj4nLnNtZF9hdF9nVHh0KCdieScp LiRhdXRocm93Lic8L2Rpdj4nOw0KCQkJCWVjaG8gJzwvZGl2Pic7DQoJCQl9DQoJCX0NCgl9 DQoJaWYgKCRsYXlvdXQ9PSIwIikgew0KCQllY2hvIGVuZFRhYmxlKCk7DQoJfSBlbHNlIHsN CgkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2NsZWFyIj48L2Rpdj48L2Rpdj4nOw0KCX0NCn0N Cg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KIHwgVEFSL0daSVAvQlpJUDIvWklQIEFSQ0hJVkUgQ0xBU1NFUyAyLjENCiB8IEJ5IERl dmluIERvdWNldHRlDQogfCBDb3B5cmlnaHQgKGMpIDIwMDUgRGV2aW4gRG91Y2V0dGUNCiB8 IEVtYWlsOiBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IEVtYWlsIGJ1Z3Mvc3VnZ2VzdGlvbnMg dG8gZGFya3Nub29weUBzaGF3LmNhDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUaGlzIHNjcmlwdCBoYXMgYmVlbiBjcmVhdGVk IGFuZCByZWxlYXNlZCB1bmRlcg0KIHwgdGhlIEdOVSBHUEwgYW5kIGlzIGZyZWUgdG8gdXNl IGFuZCByZWRpc3RyaWJ1dGUNCiB8IG9ubHkgaWYgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50 IGlzIG5vdCByZW1vdmVkDQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8NCg0KLy8gTk9URTogY2xhc3MgbmFtZXMgYWx0ZXJlZCB0byBh ZGQgc21kX2F0XyBwcmVmaXggdG8gYXZvaWQgY2xhc2hlcyBpbiBnbG9iYWwgc2NvcGUsIGFu ZCBhZGRlZCBzdWJkaXIgY3JlYXRpb24NCg0KY2xhc3Mgc21kX2F0X2FyY2hpdmUNCnsNCglm dW5jdGlvbiBzbWRfYXRfYXJjaGl2ZSgkbmFtZSkNCgl7DQoJCSR0aGlzLT5vcHRpb25zID0g YXJyYXkgKA0KCQkJJ2Jhc2VkaXInID0+ICIuIiwNCgkJCSduYW1lJyA9PiAkbmFtZSwNCgkJ CSdwcmVwZW5kJyA9PiAiIiwNCgkJCSdpbm1lbW9yeScgPT4gMCwNCgkJCSdvdmVyd3JpdGUn ID0+IDAsDQoJCQkncmVjdXJzZScgPT4gMSwNCgkJCSdzdG9yZXBhdGhzJyA9PiAxLA0KCQkJ J2ZvbGxvd2xpbmtzJyA9PiAwLA0KCQkJJ2xldmVsJyA9PiAzLA0KCQkJJ21ldGhvZCcgPT4g MSwNCgkJCSdzZngnID0+ICIiLA0KCQkJJ3R5cGUnID0+ICIiLA0KCQkJJ2NvbW1lbnQnID0+ ICIiDQoJCSk7DQoJCSR0aGlzLT5maWxlcyA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXhjbHVk ZSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+c3RvcmVvbmx5ID0gYXJyYXkgKCk7DQoJCSR0aGlz LT5lcnJvciA9IGFycmF5ICgpOw0KCX0NCg0KCWZ1bmN0aW9uIHNldF9vcHRpb25zKCRvcHRp b25zKQ0KCXsNCgkJZm9yZWFjaCAoJG9wdGlvbnMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkk dGhpcy0+b3B0aW9uc1ska2V5XSA9ICR2YWx1ZTsNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9w dGlvbnNbJ2Jhc2VkaXInXSkpDQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10g PSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0K CQkJJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAi LyIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSA9IHByZWdfcmVwbGFjZSgiL1wvJC8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSk7DQoJCX0NCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkp DQoJCXsNCgkJCSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBzdHJfcmVwbGFjZSgiXFwiLCAi LyIsICR0aGlzLT5vcHRpb25zWyduYW1lJ10pOw0KCQkJJHRoaXMtPm9wdGlvbnNbJ25hbWUn XSA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICR0aGlzLT5vcHRpb25zWyduYW1lJ10p Ow0KCQl9DQoJCWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pKQ0KCQl7 DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8i LCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVw ZW5kJ10gPSBwcmVnX3JlcGxhY2UoIi9eKFwuKlwvKykrLyIsICIiLCAkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBwcmVnX3Jl cGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKTsNCgkJCSR0 aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwgIiIsICR0 aGlzLT5vcHRpb25zWydwcmVwZW5kJ10pIC4gIi8iOw0KCQl9DQoJfQ0KDQoJZnVuY3Rpb24g Y3JlYXRlX2FyY2hpdmUoKQ0KCXsNCgkJJHRoaXMtPm1ha2VfbGlzdCgpOw0KDQoJCWlmICgk dGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0gZ2V0Y3dk KCk7DQoJCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlmICgkdGhp cy0+b3B0aW9uc1snb3ZlcndyaXRlJ10gPT0gMCAmJiBmaWxlX2V4aXN0cygkdGhpcy0+b3B0 aW9uc1snbmFtZSddIC4gKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAiIHx8ICR0 aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiID8gIi50bXAiIDogIiIpKSkNCgkJCXsN CgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJGaWxlIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBh bHJlYWR5IGV4aXN0cy4iOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJ fQ0KCQkJZWxzZSBpZiAoJHRoaXMtPmFyY2hpdmUgPSBAZm9wZW4oJHRoaXMtPm9wdGlvbnNb J25hbWUnXSAuICgkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+ b3B0aW9uc1sndHlwZSddID09ICJiemlwIiA/ICIudG1wIiA6ICIiKSwgIndiKyIpKQ0KCQkJ CWNoZGlyKCRwd2QpOw0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0K CQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJ CSR0aGlzLT5hcmNoaXZlID0gIiI7DQoNCgkJc3dpdGNoICgkdGhpcy0+b3B0aW9uc1sndHlw ZSddKQ0KCQl7DQoJCWNhc2UgInppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfemlwKCkp DQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB6aXAgZmls ZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0K CQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltd ID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0N CgkJCWlmICghJHRoaXMtPmNyZWF0ZV9iemlwKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IGNyZWF0ZSBiemlwMiBmaWxlLiI7DQoJCQkJcmV0dXJuIDA7DQoJ CQl9DQoJCQlicmVhazsNCgkJY2FzZSAiZ3ppcCI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVf dGFyKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0 YXIgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRl X2d6aXAoKSkNCgkJCXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRl IGd6aXAgZmlsZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2Ug InRhciI6DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfdGFyKCkpDQoJCQl7DQoJCQkJJHRoaXMt PmVycm9yW10gPSAiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4iOw0KCQkJCXJldHVybiAw Ow0KCQkJfQ0KCQl9DQoNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDAp DQoJCXsNCgkJCWZjbG9zZSgkdGhpcy0+YXJjaGl2ZSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlv bnNbJ3R5cGUnXSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnpp cCIpDQoJCQkJdW5saW5rKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gLiAiLyIgLiAkdGhp cy0+b3B0aW9uc1snbmFtZSddIC4gIi50bXAiKTsNCgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGFk ZF9kYXRhKCRkYXRhKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09 IDApDQoJCQlmd3JpdGUoJHRoaXMtPmFyY2hpdmUsICRkYXRhKTsNCgkJZWxzZQ0KCQkJJHRo aXMtPmFyY2hpdmUgLj0gJGRhdGE7DQoJfQ0KDQoJZnVuY3Rpb24gbWFrZV9saXN0KCkNCgl7 DQoJCWlmICghZW1wdHkgKCR0aGlzLT5leGNsdWRlKSkNCgkJCWZvcmVhY2ggKCR0aGlzLT5m aWxlcyBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJCQlmb3JlYWNoICgkdGhpcy0+ZXhjbHVkZSBh cyAkY3VycmVudCkNCgkJCQkJaWYgKCR2YWx1ZVsnbmFtZSddID09ICRjdXJyZW50WyduYW1l J10pDQoJCQkJCQl1bnNldCAoJHRoaXMtPmZpbGVzWyRrZXldKTsNCgkJaWYgKCFlbXB0eSAo JHRoaXMtPnN0b3Jlb25seSkpDQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9 PiAkdmFsdWUpDQoJCQkJZm9yZWFjaCAoJHRoaXMtPnN0b3Jlb25seSBhcyAkY3VycmVudCkN CgkJCQkJaWYgKCR2YWx1ZVsnbmFtZSddID09ICRjdXJyZW50WyduYW1lJ10pDQoJCQkJCQkk dGhpcy0+ZmlsZXNbJGtleV1bJ21ldGhvZCddID0gMDsNCgkJdW5zZXQgKCR0aGlzLT5leGNs dWRlLCAkdGhpcy0+c3RvcmVvbmx5KTsNCgl9DQoNCglmdW5jdGlvbiBhZGRfZmlsZXMoJGxp c3QpDQoJew0KCQkkdGVtcCA9ICR0aGlzLT5saXN0X2ZpbGVzKCRsaXN0KTsNCgkJZm9yZWFj aCAoJHRlbXAgYXMgJGN1cnJlbnQpDQoJCQkkdGhpcy0+ZmlsZXNbXSA9ICRjdXJyZW50Ow0K CX0NCg0KCWZ1bmN0aW9uIGV4Y2x1ZGVfZmlsZXMoJGxpc3QpDQoJew0KCQkkdGVtcCA9ICR0 aGlzLT5saXN0X2ZpbGVzKCRsaXN0KTsNCgkJZm9yZWFjaCAoJHRlbXAgYXMgJGN1cnJlbnQp DQoJCQkkdGhpcy0+ZXhjbHVkZVtdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24gc3Rv cmVfZmlsZXMoJGxpc3QpDQoJew0KCQkkdGVtcCA9ICR0aGlzLT5saXN0X2ZpbGVzKCRsaXN0 KTsNCgkJZm9yZWFjaCAoJHRlbXAgYXMgJGN1cnJlbnQpDQoJCQkkdGhpcy0+c3RvcmVvbmx5 W10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBsaXN0X2ZpbGVzKCRsaXN0KQ0KCXsN CgkJaWYgKCFpc19hcnJheSAoJGxpc3QpKQ0KCQl7DQoJCQkkdGVtcCA9ICRsaXN0Ow0KCQkJ JGxpc3QgPSBhcnJheSAoJHRlbXApOw0KCQkJdW5zZXQgKCR0ZW1wKTsNCgkJfQ0KDQoJCSRm aWxlcyA9IGFycmF5ICgpOw0KDQoJCSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMt Pm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJZm9yZWFjaCAoJGxpc3QgYXMgJGN1cnJlbnQp DQoJCXsNCgkJCSRjdXJyZW50ID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3VycmVudCk7 DQoJCQkkY3VycmVudCA9IHByZWdfcmVwbGFjZSgiL1wvKy8iLCAiLyIsICRjdXJyZW50KTsN CgkJCSRjdXJyZW50ID0gcHJlZ19yZXBsYWNlKCIvXC8kLyIsICIiLCAkY3VycmVudCk7DQoJ CQlpZiAoc3Ryc3RyKCRjdXJyZW50LCAiKiIpKQ0KCQkJew0KCQkJCSRyZWdleCA9IHByZWdf cmVwbGFjZSgiLyhbXFxcXlwkXC5cW1xdXHxcKFwpXD9cK1x7XH1cL10pLyIsICJcXFxcXFwx IiwgJGN1cnJlbnQpOw0KCQkJCSRyZWdleCA9IHN0cl9yZXBsYWNlKCIqIiwgIi4qIiwgJHJl Z2V4KTsNCgkJCQkkZGlyID0gc3Ryc3RyKCRjdXJyZW50LCAiLyIpID8gc3Vic3RyKCRjdXJy ZW50LCAwLCBzdHJycG9zKCRjdXJyZW50LCAiLyIpKSA6ICIuIjsNCgkJCQkkdGVtcCA9ICR0 aGlzLT5wYXJzZV9kaXIoJGRpcik7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGN1cnJlbnQy KQ0KCQkJCQlpZiAocHJlZ19tYXRjaCgiL157JHJlZ2V4fSQvaSIsICRjdXJyZW50MlsnbmFt ZSddKSkNCgkJCQkJCSRmaWxlc1tdID0gJGN1cnJlbnQyOw0KCQkJCXVuc2V0ICgkcmVnZXgs ICRkaXIsICR0ZW1wLCAkY3VycmVudCk7DQoJCQl9DQoJCQllbHNlIGlmIChAaXNfZGlyKCRj dXJyZW50KSkNCgkJCXsNCgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGN1cnJlbnQp Ow0KCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICRmaWxlKQ0KCQkJCQkkZmlsZXNbXSA9ICRmaWxl Ow0KCQkJCXVuc2V0ICgkdGVtcCwgJGZpbGUpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoQGZpbGVf ZXhpc3RzKCRjdXJyZW50KSkNCgkJCQkkZmlsZXNbXSA9IGFycmF5ICgnbmFtZScgPT4gJGN1 cnJlbnQsICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSAuDQoJCQkJCXBy ZWdfcmVwbGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBh dGhzJ10gPT0gMCAmJiBzdHJzdHIoJGN1cnJlbnQsICIvIikpID8NCgkJCQkJc3Vic3RyKCRj dXJyZW50LCBzdHJycG9zKCRjdXJyZW50LCAiLyIpICsgMSkgOiAkY3VycmVudCksDQoJCQkJ CSd0eXBlJyA9PiBAaXNfbGluaygkY3VycmVudCkgJiYgJHRoaXMtPm9wdGlvbnNbJ2ZvbGxv d2xpbmtzJ10gPT0gMCA/IDIgOiAwLA0KCQkJCQknZXh0JyA9PiBzdWJzdHIoJGN1cnJlbnQs IHN0cnJwb3MoJGN1cnJlbnQsICIuIikpLCAnc3RhdCcgPT4gc3RhdCgkY3VycmVudCkpOw0K CQl9DQoNCgkJY2hkaXIoJHB3ZCk7DQoNCgkJdW5zZXQgKCRjdXJyZW50LCAkcHdkKTsNCg0K CQl1c29ydCgkZmlsZXMsIGFycmF5ICgic21kX2F0X2FyY2hpdmUiLCAic29ydF9maWxlcyIp KTsNCg0KCQlyZXR1cm4gJGZpbGVzOw0KCX0NCg0KCWZ1bmN0aW9uIHBhcnNlX2RpcigkZGly bmFtZSkNCgl7DQoJCWlmICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDEgJiYg IXByZWdfbWF0Y2goIi9eKFwuK1wvKikrJC8iLCAkZGlybmFtZSkpDQoJCQkkZmlsZXMgPSBh cnJheSAoYXJyYXkgKCduYW1lJyA9PiAkZGlybmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0 aW9uc1sncHJlcGVuZCddIC4NCgkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsvIiwgIiIs ICgkdGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRkaXJuYW1l LCAiLyIpKSA/DQoJCQkJc3Vic3RyKCRkaXJuYW1lLCBzdHJycG9zKCRkaXJuYW1lLCAiLyIp ICsgMSkgOiAkZGlybmFtZSksICd0eXBlJyA9PiA1LCAnc3RhdCcgPT4gc3RhdCgkZGlybmFt ZSkpKTsNCgkJZWxzZQ0KCQkJJGZpbGVzID0gYXJyYXkgKCk7DQoJCSRkaXIgPSBAb3BlbmRp cigkZGlybmFtZSk7DQoNCgkJd2hpbGUgKCRmaWxlID0gQHJlYWRkaXIoJGRpcikpDQoJCXsN CgkJCSRmdWxsbmFtZSA9ICRkaXJuYW1lIC4gIi8iIC4gJGZpbGU7DQoJCQlpZiAoJGZpbGUg PT0gIi4iIHx8ICRmaWxlID09ICIuLiIpDQoJCQkJY29udGludWU7DQoJCQllbHNlIGlmIChA aXNfZGlyKCRmdWxsbmFtZSkpDQoJCQl7DQoJCQkJaWYgKGVtcHR5ICgkdGhpcy0+b3B0aW9u c1sncmVjdXJzZSddKSkNCgkJCQkJY29udGludWU7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFy c2VfZGlyKCRmdWxsbmFtZSk7DQoJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJGZpbGUyKQ0KCQkJ CQkkZmlsZXNbXSA9ICRmaWxlMjsNCgkJCX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygk ZnVsbG5hbWUpKQ0KCQkJCSRmaWxlc1tdID0gYXJyYXkgKCduYW1lJyA9PiAkZnVsbG5hbWUs ICduYW1lMicgPT4gJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSAuDQoJCQkJCXByZWdfcmVw bGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhzJ10g PT0gMCAmJiBzdHJzdHIoJGZ1bGxuYW1lLCAiLyIpKSA/DQoJCQkJCXN1YnN0cigkZnVsbG5h bWUsIHN0cnJwb3MoJGZ1bGxuYW1lLCAiLyIpICsgMSkgOiAkZnVsbG5hbWUpLA0KCQkJCQkn dHlwZScgPT4gQGlzX2xpbmsoJGZ1bGxuYW1lKSAmJiAkdGhpcy0+b3B0aW9uc1snZm9sbG93 bGlua3MnXSA9PSAwID8gMiA6IDAsDQoJCQkJCSdleHQnID0+IHN1YnN0cigkZmlsZSwgc3Ry cnBvcygkZmlsZSwgIi4iKSksICdzdGF0JyA9PiBzdGF0KCRmdWxsbmFtZSkpOw0KCQl9DQoN CgkJQGNsb3NlZGlyKCRkaXIpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0KDQoJZnVuY3Rp b24gc29ydF9maWxlcygkYSwgJGIpDQoJew0KCQlpZiAoJGFbJ3R5cGUnXSAhPSAkYlsndHlw ZSddKQ0KCQkJaWYgKCRhWyd0eXBlJ10gPT0gNSB8fCAkYlsndHlwZSddID09IDIpDQoJCQkJ cmV0dXJuIC0xOw0KCQkJZWxzZSBpZiAoJGFbJ3R5cGUnXSA9PSAyIHx8ICRiWyd0eXBlJ10g PT0gNSkNCgkJCQlyZXR1cm4gMTsNCgkJZWxzZSBpZiAoJGFbJ3R5cGUnXSA9PSA1KQ0KCQkJ cmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRiWydu YW1lJ10pKTsNCgkJZWxzZSBpZiAoJGFbJ2V4dCddICE9ICRiWydleHQnXSkNCgkJCXJldHVy biBzdHJjbXAoJGFbJ2V4dCddLCAkYlsnZXh0J10pOw0KCQllbHNlIGlmICgkYVsnc3RhdCdd WzddICE9ICRiWydzdGF0J11bN10pDQoJCQlyZXR1cm4gJGFbJ3N0YXQnXVs3XSA+ICRiWydz dGF0J11bN10gPyAtMSA6IDE7DQoJCWVsc2UNCgkJCXJldHVybiBzdHJjbXAoc3RydG9sb3dl cigkYVsnbmFtZSddKSwgc3RydG9sb3dlcigkYlsnbmFtZSddKSk7DQoJCXJldHVybiAwOw0K CX0NCg0KCWZ1bmN0aW9uIGRvd25sb2FkX2ZpbGUoKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRp b25zWydpbm1lbW9yeSddID09IDApDQoJCXsNCgkJCSR0aGlzLT5lcnJvcltdID0gIkNhbiBv bmx5IHVzZSBkb3dubG9hZF9maWxlKCkgaWYgYXJjaGl2ZSBpcyBpbiBtZW1vcnkuIFJlZGly ZWN0IHRvIGZpbGUgb3RoZXJ3aXNlLCBpdCBpcyBmYXN0ZXIuIjsNCgkJCXJldHVybjsNCgkJ fQ0KCQlzd2l0Y2ggKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10pDQoJCXsNCgkJY2FzZSAiemlw IjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi96aXAiKTsNCgkJCWJy ZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNh dGlvbi94LWJ6aXAyIik7DQoJCQlicmVhazsNCgkJY2FzZSAiZ3ppcCI6DQoJCQloZWFkZXIo IkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1nemlwIik7DQoJCQlicmVhazsNCgkJY2Fz ZSAidGFyIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXRhciIp Ow0KCQl9DQoJCSRoZWFkZXIgPSAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsg ZmlsZW5hbWU9XCIiOw0KCQkkaGVhZGVyIC49IHN0cnN0cigkdGhpcy0+b3B0aW9uc1snbmFt ZSddLCAiLyIpID8gc3Vic3RyKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sIHN0cnJwb3MoJHRo aXMtPm9wdGlvbnNbJ25hbWUnXSwgIi8iKSArIDEpIDogJHRoaXMtPm9wdGlvbnNbJ25hbWUn XTsNCgkJJGhlYWRlciAuPSAiXCIiOw0KCQloZWFkZXIoJGhlYWRlcik7DQoJCWhlYWRlcigi Q29udGVudC1MZW5ndGg6ICIgLiBzdHJsZW4oJHRoaXMtPmFyY2hpdmUpKTsNCgkJaGVhZGVy KCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkiKTsNCgkJaGVhZGVyKCJDYWNo ZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTYwIik7DQoJ CWhlYWRlcigiRXhwaXJlczogU2F0LCAwMSBKYW4gMjAwMCAxMjowMDowMCBHTVQiKTsNCgkJ cHJpbnQoJHRoaXMtPmFyY2hpdmUpOw0KCX0NCn0NCg0KY2xhc3Mgc21kX2F0X3Rhcl9maWxl IGV4dGVuZHMgc21kX2F0X2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfYXRfdGFyX2ZpbGUo JG5hbWUpDQoJew0KCQkkdGhpcy0+c21kX2F0X2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+ b3B0aW9uc1sndHlwZSddID0gInRhciI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3Rhcigp DQoJew0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0K CQkJaWYgKCRjdXJyZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJ CQljb250aW51ZTsNCgkJCWlmIChzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJ CQl7DQoJCQkJJHBhdGggPSBzdWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIDAsIHN0cnBvcygk Y3VycmVudFsnbmFtZTInXSwgIi8iLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pIC0gMTAw KSArIDEpOw0KCQkJCSRjdXJyZW50WyduYW1lMiddID0gc3Vic3RyKCRjdXJyZW50WyduYW1l MiddLCBzdHJsZW4oJHBhdGgpKTsNCgkJCQlpZiAoc3RybGVuKCRwYXRoKSA+IDE1NCB8fCBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJy b3JbXSA9ICJDb3VsZCBub3QgYWRkIHskcGF0aH17JGN1cnJlbnRbJ25hbWUyJ119IHRvIGFy Y2hpdmUgYmVjYXVzZSB0aGUgZmlsZW5hbWUgaXMgdG9vIGxvbmcuIjsNCgkJCQkJY29udGlu dWU7DQoJCQkJfQ0KCQkJfQ0KCQkJJGJsb2NrID0gcGFjaygiYTEwMGE4YThhOGExMmExMmE4 YTFhMTAwYTZhMmEzMmEzMmE4YThhMTU1YTEyIiwgJGN1cnJlbnRbJ25hbWUyJ10sIHNwcmlu dGYoIiUwN28iLA0KCQkJCSRjdXJyZW50WydzdGF0J11bMl0pLCBzcHJpbnRmKCIlMDdvIiwg JGN1cnJlbnRbJ3N0YXQnXVs0XSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCdd WzVdKSwNCgkJCQlzcHJpbnRmKCIlMDExbyIsICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IDAg OiAkY3VycmVudFsnc3RhdCddWzddKSwgc3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsnc3Rh dCddWzldKSwNCgkJCQkiICAgICAgICAiLCAkY3VycmVudFsndHlwZSddLCAkY3VycmVudFsn dHlwZSddID09IDIgPyBAcmVhZGxpbmsoJGN1cnJlbnRbJ25hbWUnXSkgOiAiIiwgInVzdGFy ICIsICIgIiwNCgkJCQkiVW5rbm93biIsICJVbmtub3duIiwgIiIsICIiLCAhZW1wdHkgKCRw YXRoKSA/ICRwYXRoIDogIiIsICIiKTsNCg0KCQkJJGNoZWNrc3VtID0gMDsNCgkJCWZvciAo JGkgPSAwOyAkaSA8IDUxMjsgJGkrKykNCgkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigk YmxvY2ssICRpLCAxKSk7DQoJCQkkY2hlY2tzdW0gPSBwYWNrKCJhOCIsIHNwcmludGYoIiUw N28iLCAkY2hlY2tzdW0pKTsNCgkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywg JGNoZWNrc3VtLCAxNDgsIDgpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3R5cGUnXSA9PSAyIHx8 ICRjdXJyZW50WydzdGF0J11bN10gPT0gMCkNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2Nr KTsNCgkJCWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkN CgkJCXsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQl3aGlsZSAoJHRlbXAg PSBmcmVhZCgkZnAsIDEwNDg1NzYpKQ0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0K CQkJCWlmICgkY3VycmVudFsnc3RhdCddWzddICUgNTEyID4gMCkNCgkJCQl7DQoJCQkJCSR0 ZW1wID0gIiI7DQoJCQkJCWZvciAoJGkgPSAwOyAkaSA8IDUxMiAtICRjdXJyZW50WydzdGF0 J11bN10gJSA1MTI7ICRpKyspDQoJCQkJCQkkdGVtcCAuPSAiXDAiOw0KCQkJCQkkdGhpcy0+ YWRkX2RhdGEoJHRlbXApOw0KCQkJCX0NCgkJCQlmY2xvc2UoJGZwKTsNCgkJCX0NCgkJCWVs c2UNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskY3VycmVu dFsnbmFtZSddfSBmb3IgcmVhZGluZy4gSXQgd2FzIG5vdCBhZGRlZC4iOw0KCQl9DQoNCgkJ JHRoaXMtPmFkZF9kYXRhKHBhY2soImExMDI0IiwgIiIpKTsNCg0KCQljaGRpcigkcHdkKTsN Cg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBleHRyYWN0X2ZpbGVzKCkNCgl7DQoJ CSRwd2QgPSBnZXRjd2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7 DQoNCgkJaWYgKCRmcCA9ICR0aGlzLT5vcGVuX2FyY2hpdmUoKSkNCgkJew0KCQkJaWYgKCR0 aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDEpDQoJCQkJJHRoaXMtPmZpbGVzID0gYXJy YXkgKCk7DQoNCgkJCXdoaWxlICgkYmxvY2sgPSBmcmVhZCgkZnAsIDUxMikpDQoJCQl7DQoJ CQkJJHRlbXAgPSB1bnBhY2soImExMDBuYW1lL2E4bW9kZS9hOHVpZC9hOGdpZC9hMTJzaXpl L2ExMm10aW1lL2E4Y2hlY2tzdW0vYTF0eXBlL2ExMDBzeW1saW5rL2E2bWFnaWMvYTJ0ZW1w L2EzMnRlbXAvYTMydGVtcC9hOHRlbXAvYTh0ZW1wL2ExNTVwcmVmaXgvYTEydGVtcCIsICRi bG9jayk7DQoJCQkJJGZpbGUgPSBhcnJheSAoDQoJCQkJCSduYW1lJyA9PiAkdGVtcFsncHJl Zml4J10gLiAkdGVtcFsnbmFtZSddLA0KCQkJCQknc3RhdCcgPT4gYXJyYXkgKA0KCQkJCQkJ MiA9PiAkdGVtcFsnbW9kZSddLA0KCQkJCQkJNCA9PiBvY3RkZWMoJHRlbXBbJ3VpZCddKSwN CgkJCQkJCTUgPT4gb2N0ZGVjKCR0ZW1wWydnaWQnXSksDQoJCQkJCQk3ID0+IG9jdGRlYygk dGVtcFsnc2l6ZSddKSwNCgkJCQkJCTkgPT4gb2N0ZGVjKCR0ZW1wWydtdGltZSddKSwNCgkJ CQkJKSwNCgkJCQkJJ2NoZWNrc3VtJyA9PiBvY3RkZWMoJHRlbXBbJ2NoZWNrc3VtJ10pLA0K CQkJCQkndHlwZScgPT4gJHRlbXBbJ3R5cGUnXSwNCgkJCQkJJ21hZ2ljJyA9PiAkdGVtcFsn bWFnaWMnXSwNCgkJCQkpOw0KDQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSddID09IDB4MDAw MDAwMDApDQoJCQkJCWJyZWFrOw0KCQkJCWVsc2UgaWYgKHN1YnN0cigkZmlsZVsnbWFnaWMn XSwgMCwgNSkgIT0gInVzdGFyIikNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIlRo aXMgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgZXh0cmFjdGluZyB0aGlzIHR5cGUgb2YgdGFy IGZpbGUuIjsNCgkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJCSRibG9jayA9IHN1YnN0cl9yZXBs YWNlKCRibG9jaywgIiAgICAgICAgIiwgMTQ4LCA4KTsNCgkJCQkkY2hlY2tzdW0gPSAwOw0K CQkJCWZvciAoJGkgPSAwOyAkaSA8IDUxMjsgJGkrKykNCgkJCQkJJGNoZWNrc3VtICs9IG9y ZChzdWJzdHIoJGJsb2NrLCAkaSwgMSkpOw0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSAh PSAkY2hlY2tzdW0pDQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBleHRyYWN0 IGZyb20geyR0aGlzLT5vcHRpb25zWyduYW1lJ119LCBpdCBpcyBjb3JydXB0LiI7DQoNCgkJ CQkvLyBBZGRlZDogY3JlYXRlIGRpciBpZiByZXF1aXJlZA0KCQkJCWlmIChzdHJwb3MoJGZp bGVbJ25hbWUnXSwgJy4uJykgPT09IGZhbHNlKSB7DQoJCQkJCSRwYXRoX3BhcnRzID0gcGF0 aGluZm8oJGZpbGVbJ25hbWUnXSk7DQoJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVbJ25h bWUnXSkpIHsNCgkJCQkJCSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBh dGhfcGFydHNbJ2V4dGVuc2lvbiddKSkgPyBkaXJuYW1lKCR0aGlzLT5vcHRpb25zWydiYXNl ZGlyJ10uRFMuJGZpbGVbJ25hbWUnXSkgOiAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRT LiRmaWxlWyduYW1lJ10pKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJGZpbGVbJ2RhdGEnXSA9IGZy ZWFkKCRmcCwgJGZpbGVbJ3N0YXQnXVs3XSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUxMiAtICRm aWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVbJ3N0YXQn XVs3XSAlIDUxMikpOw0KCQkJCQl1bnNldCAoJGZpbGVbJ2NoZWNrc3VtJ10sICRmaWxlWydt YWdpYyddKTsNCgkJCQkJJHRoaXMtPmZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJCQkJZWxz ZSBpZiAoJGZpbGVbJ3R5cGUnXSA9PSA1KQ0KCQkJCXsNCgkJCQkJaWYgKCFpc19kaXIoJGZp bGVbJ25hbWUnXSkpDQoJCQkJCQlta2RpcigkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCdd WzJdKTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSdd ID09IDAgJiYgZmlsZV9leGlzdHMoJGZpbGVbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGhp cy0+ZXJyb3JbXSA9ICJ7JGZpbGVbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQkJ Y29udGludWU7DQoJCQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBlJ10gPT0gMikNCgkJ CQl7DQoJCQkJCXN5bWxpbmsoJHRlbXBbJ3N5bWxpbmsnXSwgJGZpbGVbJ25hbWUnXSk7DQoJ CQkJCWNobW9kKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJ CQllbHNlIGlmICgkbmV3ID0gZm9wZW4oJGZpbGVbJ25hbWUnXSwgIndiIikpDQoJCQkJew0K CQkJCQlmd3JpdGUoJG5ldywgZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKSk7DQoJCQkJ CWZyZWFkKCRmcCwgKDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAg OiAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikpOw0KCQkJCQlmY2xvc2UoJG5ldyk7 DQoJCQkJCUBjaG1vZCgkZmlsZVsnbmFtZSddLCAwNjQ0KTsgLy8gSGFyZC1jb2RlZCBmb3Ig bm93IGJlY2F1c2UgdGhlIHN0dXBpZCAwMTAwNjQ0IHZhbHVlIGluICRmaWxlWydzdGF0J11b Ml0gY29uZnVzZXMgdGhlIE9TL1BIUA0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkk dGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JGZpbGVbJ25hbWUnXX0gZm9yIHdy aXRpbmcuIjsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCS8vIFJlbW92ZSBvd25lciBh bmQgZ3JvdXAgc2V0dGluZyBzaW5jZSB0aGVyZSBpcyBhbG1vc3QgMCBsaWtlbGlob29kIHRo ZSBmaWxlcyB3aWxsIGhhdmUgdGhlIHNhbWUgdXNlci9ncm91cCBhY3Jvc3Mgc3lzdGVtcw0K CQkJCS8vIEluIG90aGVyIHdvcmRzLCBsZWF2ZSBvd25lci9ncm91cCBhdCB0aGUgQXBhY2hl IGRlZmF1bHQgLS0gd2hpY2ggaXMgd2hhdCB3ZSB3YW50DQovLwkJCQljaG93bigkZmlsZVsn bmFtZSddLCAkZmlsZVsnc3RhdCddWzRdKTsNCi8vCQkJCWNoZ3JwKCRmaWxlWyduYW1lJ10s ICRmaWxlWydzdGF0J11bNV0pOw0KCQkJCUB0b3VjaCgkZmlsZVsnbmFtZSddLCAkZmlsZVsn c3RhdCddWzldKTsNCgkJCQl1bnNldCAoJGZpbGUpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyR0aGlzLT5vcHRpb25z WyduYW1lJ119IjsNCg0KCQljaGRpcigkcHdkKTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2Fy Y2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAi cmIiKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF9nemlwX2ZpbGUgZXh0ZW5kcyBzbWRfYXRf dGFyX2ZpbGUNCnsNCglmdW5jdGlvbiBzbWRfYXRfZ3ppcF9maWxlKCRuYW1lKQ0KCXsNCgkJ JHRoaXMtPnNtZF9hdF90YXJfZmlsZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBl J10gPSAiZ3ppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX2d6aXAoKQ0KCXsNCgkJaWYg KCR0aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCXsNCgkJCSRwd2QgPSBnZXRj d2QoKTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJaWYgKCRm cCA9IGd6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAid2J7JHRoaXMtPm9wdGlvbnNb J2xldmVsJ119IikpDQoJCQl7DQoJCQkJZnNlZWsoJHRoaXMtPmFyY2hpdmUsIDApOw0KCQkJ CXdoaWxlICgkdGVtcCA9IGZyZWFkKCR0aGlzLT5hcmNoaXZlLCAxMDQ4NTc2KSkNCgkJCQkJ Z3p3cml0ZSgkZnAsICR0ZW1wKTsNCgkJCQlnemNsb3NlKCRmcCk7DQoJCQkJY2hkaXIoJHB3 ZCk7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiQ291bGQg bm90IG9wZW4geyR0aGlzLT5vcHRpb25zWyduYW1lJ119IGZvciB3cml0aW5nLiI7DQoJCQkJ Y2hkaXIoJHB3ZCk7DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCX0NCgkJZWxzZQ0KCQkJJHRo aXMtPmFyY2hpdmUgPSBnemVuY29kZSgkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNb J2xldmVsJ10pOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2 ZSgpDQoJew0KCQlyZXR1cm4gQGd6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIi KTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF9iemlwX2ZpbGUgZXh0ZW5kcyBzbWRfYXRfdGFy X2ZpbGUNCnsNCglmdW5jdGlvbiBzbWRfYXRfYnppcF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRo aXMtPnNtZF9hdF90YXJfZmlsZSgkbmFtZSk7DQoJCSR0aGlzLT5vcHRpb25zWyd0eXBlJ10g PSAiYnppcCI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX2J6aXAoKQ0KCXsNCgkJaWYgKCR0 aGlzLT5vcHRpb25zWydpbm1lbW9yeSddID09IDApDQoJCXsNCgkJCSRwd2QgPSBnZXRjd2Qo KTsNCgkJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQkJaWYgKCRmcCA9 IGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAid2IiKSkNCgkJCXsNCgkJCQlmc2Vl aygkdGhpcy0+YXJjaGl2ZSwgMCk7DQoJCQkJd2hpbGUgKCR0ZW1wID0gZnJlYWQoJHRoaXMt PmFyY2hpdmUsIDEwNDg1NzYpKQ0KCQkJCQliendyaXRlKCRmcCwgJHRlbXApOw0KCQkJCWJ6 Y2xvc2UoJGZwKTsNCgkJCQljaGRpcigkcHdkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJ CQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25h bWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsN CgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9IGJ6Y29tcHJlc3MoJHRo aXMtPmFyY2hpdmUsICR0aGlzLT5vcHRpb25zWydsZXZlbCddKTsNCg0KCQlyZXR1cm4gMTsN Cgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBiem9wZW4o JHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgInIiKTsNCgl9DQp9DQoNCmNsYXNzIHNtZF9hdF96 aXBfZmlsZSBleHRlbmRzIHNtZF9hdF9hcmNoaXZlDQp7DQoJZnVuY3Rpb24gc21kX2F0X3pp cF9maWxlKCRuYW1lKQ0KCXsNCgkJJHRoaXMtPnNtZF9hdF9hcmNoaXZlKCRuYW1lKTsNCgkJ JHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJ6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0 ZV96aXAoKQ0KCXsNCgkJJGZpbGVzID0gMDsNCgkJJG9mZnNldCA9IDA7DQoJCSRjZW50cmFs ID0gIiI7DQoNCgkJaWYgKCFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSkNCgkJCWlm ICgkZnAgPSBAZm9wZW4oJHRoaXMtPm9wdGlvbnNbJ3NmeCddLCAicmIiKSkNCgkJCXsNCgkJ CQkkdGVtcCA9IGZyZWFkKCRmcCwgZmlsZXNpemUoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSk7 DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQkk b2Zmc2V0ICs9IHN0cmxlbigkdGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCX0NCgkJ CWVsc2UNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBzZnggbW9kdWxl IGZyb20geyR0aGlzLT5vcHRpb25zWydzZngnXX0uIjsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7 DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0 aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50WyduYW1lJ10g PT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250aW51ZTsNCg0KCQkJJHRpbWVk YXRlID0gZXhwbG9kZSgiICIsIGRhdGUoIlkgbiBqIEcgaSBzIiwgJGN1cnJlbnRbJ3N0YXQn XVs5XSkpOw0KCQkJJHRpbWVkYXRlID0gKCR0aW1lZGF0ZVswXSAtIDE5ODAgPDwgMjUpIHwg KCR0aW1lZGF0ZVsxXSA8PCAyMSkgfCAoJHRpbWVkYXRlWzJdIDw8IDE2KSB8DQoJCQkJKCR0 aW1lZGF0ZVszXSA8PCAxMSkgfCAoJHRpbWVkYXRlWzRdIDw8IDUpIHwgKCR0aW1lZGF0ZVs1 XSk7DQoNCgkJCSRibG9jayA9IHBhY2soIlZ2dnZWIiwgMHgwNDAzNGI1MCwgMHgwMDBBLCAw eDAwMDAsIChpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydt ZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlKTsNCg0KCQkJaWYg KCRjdXJyZW50WydzdGF0J11bN10gPT0gMCAmJiAkY3VycmVudFsndHlwZSddID09IDUpDQoJ CQl7DQoJCQkJJGJsb2NrIC49IHBhY2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAw MCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAwMCk7 DQoJCQkJJGJsb2NrIC49ICRjdXJyZW50WyduYW1lMiddIC4gIi8iOw0KCQkJCSR0aGlzLT5h ZGRfZGF0YSgkYmxvY2spOw0KCQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2 VlYiLCAweDAyMDE0YjUwLCAweDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAw ID8gMHgwMDAwIDogMHgwMDBBLCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0 aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4 MDAwOCwgJHRpbWVkYXRlLA0KCQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAw MDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgw MDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ10g LiAiLyI7DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzEgKyBzdHJsZW4oJGN1 cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRjdXJyZW50WydzdGF0J11b N10gPT0gMCkNCgkJCXsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAw LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAw eDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+ YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2 dlZWIiwgMHgwMjAxNGI1MCwgMHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0g MCA/IDB4MDAwMCA6IDB4MDAwQSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21l dGhvZCddKSB8fCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAw eDAwMDgsICR0aW1lZGF0ZSwNCgkJCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAw MDAwMCwgc3RybGVuKCRjdXJyZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAkY3VycmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAw MDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJ CQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25h bWUyJ10pKTsNCgkJCX0NCgkJCWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFt ZSddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgJGN1cnJlbnRbJ3N0 YXQnXVs3XSk7DQoJCQkJZmNsb3NlKCRmcCk7DQoJCQkJJGNyYzMyID0gY3JjMzIoJHRlbXAp Ow0KCQkJCWlmICghaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSAmJiAkdGhpcy0+b3B0aW9u c1snbWV0aG9kJ10gPT0gMSkNCgkJCQl7DQoJCQkJCSR0ZW1wID0gZ3pjb21wcmVzcygkdGVt cCwgJHRoaXMtPm9wdGlvbnNbJ2xldmVsJ10pOw0KCQkJCQkkc2l6ZSA9IHN0cmxlbigkdGVt cCkgLSA2Ow0KCQkJCQkkdGVtcCA9IHN1YnN0cigkdGVtcCwgMiwgJHNpemUpOw0KCQkJCX0N CgkJCQllbHNlDQoJCQkJCSRzaXplID0gc3RybGVuKCR0ZW1wKTsNCgkJCQkkYmxvY2sgLj0g cGFjaygiVlZWdnYiLCAkY3JjMzIsICRzaXplLCAkY3VycmVudFsnc3RhdCddWzddLCBzdHJs ZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVu dFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkdGhpcy0+ YWRkX2RhdGEoJHRlbXApOw0KCQkJCXVuc2V0ICgkdGVtcCk7DQoJCQkJJGNlbnRyYWwgLj0g cGFjaygiVnZ2dnZWVlZWdnZ2dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9w dGlvbnNbJ21ldGhvZCddID09IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJ KGlzc2V0KCRjdXJyZW50WydtZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCdd ID09IDApID8gMHgwMDAwIDogMHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCSRjcmMzMiwgJHNp emUsICRjdXJyZW50WydzdGF0J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJ CQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJ JG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgJHNpemUpOw0K CQkJfQ0KCQkJZWxzZQ0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZp bGUgeyRjdXJyZW50WyduYW1lJ119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVkLiI7 DQoJCX0NCg0KCQkkdGhpcy0+YWRkX2RhdGEoJGNlbnRyYWwpOw0KDQoJCSR0aGlzLT5hZGRf ZGF0YShwYWNrKCJWdnZ2dlZWdiIsIDB4MDYwNTRiNTAsIDB4MDAwMCwgMHgwMDAwLCAkZmls ZXMsICRmaWxlcywgc3RybGVuKCRjZW50cmFsKSwgJG9mZnNldCwNCgkJCSFlbXB0eSAoJHRo aXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgPyBzdHJsZW4oJHRoaXMtPm9wdGlvbnNbJ2NvbW1l bnQnXSkgOiAweDAwMDApKTsNCg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29t bWVudCddKSkNCgkJCSR0aGlzLT5hZGRfZGF0YSgkdGhpcy0+b3B0aW9uc1snY29tbWVudCdd KTsNCg0KCQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQp9DQoNCiMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQojIENsYXNzIGRVbnppcDIgdjIuNjINCiMNCiMgIEF1dGhvcjogQWxleGFuZHJlIFRlZGVz Y2hpIChkKQ0KIyAgRS1NYWlsOiBhbGV4YW5kcmViciBhdCBnbWFpbCBkb3QgY29tDQojICBM b25kcmluYSAtIFBSIC8gQnJhemlsDQojDQojICBPYmplY3RpdmU6DQojICAgIFRoaXMgY2xh c3MgYWxsb3dzIHByb2dyYW1tZXIgdG8gZWFzaWx5IHVuemlwIGZpbGVzIG9uIHRoZSBmbHku DQojDQojICBSZXF1aXJlbWVudHM6DQojICAgIFRoaXMgY2xhc3MgcmVxdWlyZXMgZXh0ZW5z aW9uIFpMaWIgRW5hYmxlZC4gSXQgaXMgZGVmYXVsdA0KIyAgICBmb3IgbW9zdCBzaXRlIGhv c3RzIGFyb3VuZCB0aGUgd29ybGQsIGFuZCBmb3IgdGhlIFBIUCBXaW4zMiBkaXN0Lg0KIw0K IyAgVG8gZG86DQojICAgKiBFcnJvciBoYW5kbGluZw0KIyAgICogV3JpdGUgYSBQSFAtU2lk ZSBnemluZmxhdGUsIHRvIGNvbXBsZXRlbHkgYXZvaWQgYW55IGV4dGVybmFsIGV4dGVuc2lv bnMNCiMgICAqIFdyaXRlIG90aGVyIGRlY29tcHJlc3MgYWxnb3JpdGhtcw0KIw0KIyAgTWV0 aG9kczoNCiMgICogZFVuemlwMigkZmlsZW5hbWUpICAgICAgICAgLSBDb25zdHJ1Y3RvciAt IE9wZW5zICRmaWxlbmFtZQ0KIyAgKiBnZXRMaXN0KFskc3RvcE9uRmlsZV0pICAgICAtIFJl dHJpZXZlIHRoZSBmaWxlIGxpc3QNCiMgICogZ2V0RXh0cmFJbmZvKCR6aXBmaWxlbmFtZSkg LSBSZXRyaWV2ZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXByZXNzZWQgZmlsZQ0KIyAg KiBnZXRaaXBJbmZvKFskZW50cnldKSAgICAgICAtIFJldHJpZXZlIFpJUCBmaWxlIGRldGFp bHMuDQojICAqIHVuemlwKCR6aXBmaWxlbmFtZSwgWyRvdXRmaWxlbmFtZSwgWyRhcHBseUNo bW9kXV0pIC0gVW56aXAgZmlsZQ0KIyAgKiB1bnppcEFsbChbJG91dERpciwgWyR6aXBEaXIs IFskbWFpbnRhaW5TdHJ1Y3R1cmUsIFskYXBwbHlDaG1vZF1dXV0pDQojICAqIGNsb3NlKCkg ICAgICAgICAgICAgICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyLCBidXQga2VlcCB0aGUg bGlzdA0KIyAgKiBfX2Rlc3Ryb3koKSAgICAgICAgICAgICAgICAtIENsb3NlIGZpbGUgaGFu ZGxlciBhbmQgcmVsZWFzZSBtZW1vcnkNCiMNCiMgIElmIHlvdSBtb2RpZnkgdGhpcyBjbGFz cywgb3IgaGF2ZSBhbnkgaWRlYXMgdG8gaW1wcm92ZSBpdCwgcGxlYXNlIGNvbnRhY3QgbWUh DQojICBZb3UgYXJlIGFsbG93ZWQgdG8gcmVkaXN0cmlidXRlIHRoaXMgY2xhc3MsIGlmIHlv dSBrZWVwIG15IG5hbWUgYW5kIGNvbnRhY3QgZS1tYWlsIG9uIGl0Lg0KIw0KIyAgUExFQVNF ISBJRiBZT1UgVVNFIFRISVMgQ0xBU1MgSU4gQU5ZIE9GIFlPVVIgUFJPSkVDVFMsIFBMRUFT RSBMRVQgTUUgS05PVyENCiMgIElmIHlvdSBoYXZlIHByb2JsZW1zIHVzaW5nIGl0LCBkb24n dCB0aGluayB0d2ljZSBiZWZvcmUgY29udGFjdGluZyBtZSENCiMNCiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmlm KCFmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJykpew0KCS8vIElmIG5vdCBQ SFA1LCBjcmVhdGVzIGEgY29tcGF0aWJsZSBmdW5jdGlvbg0KCUZ1bmN0aW9uIGZpbGVfcHV0 X2NvbnRlbnRzKCRmaWxlLCAkZGF0YSl7DQoJCWlmKCR0bXAgPSBmb3BlbigkZmlsZSwgInci KSl7DQoJCQlmd3JpdGUoJHRtcCwgJGRhdGEpOw0KCQkJZmNsb3NlKCR0bXApOw0KCQkJcmV0 dXJuIHRydWU7DQoJCX0NCgkJZWNobyAiPGI+ZmlsZV9wdXRfY29udGVudHM6PC9iPiBDYW5u b3QgY3JlYXRlIGZpbGUgJGZpbGU8YnI+IjsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCn0NCg0K Y2xhc3Mgc21kX2RVbnppcDJ7DQoJRnVuY3Rpb24gZ2V0VmVyc2lvbigpew0KCQlyZXR1cm4g IjIuNjIiOw0KCX0NCgkvLyBQdWJsaWMNCgl2YXIgJGZpbGVOYW1lOw0KCXZhciAkbGFzdEVy cm9yOw0KCXZhciAkY29tcHJlc3NlZExpc3Q7IC8vIFlvdSB3aWxsIHByb2JsYWJseSB1c2Ug b25seSB0aGlzIG9uZSENCgl2YXIgJGNlbnRyYWxEaXJMaXN0OyAvLyBDZW50cmFsIGRpciBs aXN0Li4uIEl0J3MgYSBraW5kIG9mICdleHRyYSBhdHRyaWJ1dGVzJyBmb3IgYSBzZXQgb2Yg ZmlsZXMNCgl2YXIgJGVuZE9mQ2VudHJhbDsgICAvLyBFbmQgb2YgY2VudHJhbCBkaXIsIGNv bnRhaW5zIFpJUCBDb21tZW50cw0KCXZhciAkZGVidWc7DQoNCgkvLyBQcml2YXRlDQoJdmFy ICRmaDsNCgl2YXIgJHppcFNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDNceDA0IjsgLy8gbG9j YWwgZmlsZSBoZWFkZXIgc2lnbmF0dXJlDQoJdmFyICRkaXJTaWduYXR1cmUgPSAiXHg1MFx4 NGJceDAxXHgwMiI7IC8vIGNlbnRyYWwgZGlyIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRp clNpZ25hdHVyZUU9ICJceDUwXHg0Ylx4MDVceDA2IjsgLy8gZW5kIG9mIGNlbnRyYWwgZGly IHNpZ25hdHVyZQ0KDQoJLy8gUHVibGljDQoJRnVuY3Rpb24gc21kX2RVbnppcDIoJGZpbGVO YW1lKXsNCgkJJHRoaXMtPmZpbGVOYW1lICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhpcy0+ Y29tcHJlc3NlZExpc3QgPQ0KCQkkdGhpcy0+Y2VudHJhbERpckxpc3QgPQ0KCQkkdGhpcy0+ ZW5kT2ZDZW50cmFsICAgPSBBcnJheSgpOw0KCX0NCg0KCUZ1bmN0aW9uIGdldExpc3QoJHN0 b3BPbkZpbGU9ZmFsc2Upew0KCQlpZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7 DQoJCQkkdGhpcy0+ZGVidWdNc2coMSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRlZCBmaWxl IGxpc3QuIik7DQoJCQlyZXR1cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9DQoNCgkJ Ly8gT3BlbiBmaWxlLCBhbmQgc2V0IGZpbGUgaGFuZGxlcg0KCQkkZmggPSBmb3BlbigkdGhp cy0+ZmlsZU5hbWUsICJyIik7DQoJCSR0aGlzLT5maCA9ICYkZmg7DQoJCWlmKCEkZmgpew0K CQkJJHRoaXMtPmRlYnVnTXNnKDIsICJGYWlsZWQgdG8gbG9hZCBmaWxlLiIpOw0KCQkJcmV0 dXJuIGZhbHNlOw0KCQl9DQoNCgkJJHRoaXMtPmRlYnVnTXNnKDEsICJMb2FkaW5nIGxpc3Qg ZnJvbSAnRW5kIG9mIENlbnRyYWwgRGlyJyBpbmRleCBsaXN0Li4uIik7DQoJCWlmKCEkdGhp cy0+X2xvYWRGaWxlTGlzdEJ5RU9GKCRmaCwgJHN0b3BPbkZpbGUpKXsNCgkJCSR0aGlzLT5k ZWJ1Z01zZygxLCAiRmFpbGVkISBUcnlpbmcgdG8gbG9hZCBsaXN0IGxvb2tpbmcgZm9yIHNp Z25hdHVyZXMuLi4iKTsNCgkJCWlmKCEkdGhpcy0+X2xvYWRGaWxlTGlzdEJ5U2lnbmF0dXJl cygkZmgsICRzdG9wT25GaWxlKSl7DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJGYWlsZWQh IENvdWxkIG5vdCBmaW5kIGFueSB2YWxpZCBoZWFkZXIuIik7DQoJCQkJJHRoaXMtPmRlYnVn TXNnKDIsICJaSVAgRmlsZSBpcyBjb3JydXB0ZWQgb3IgZW1wdHkiKTsNCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCQl9DQoJCX0NCg0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJIy0tLS0tLS0g RGVidWcgY29tcHJlc3NlZExpc3QNCgkJCSRra2sgPSAwOw0KCQkJZWNobyAiPHRhYmxlIGJv cmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQg IzAwMCc+IjsNCgkJCWZvcmVhY2goJHRoaXMtPmNvbXByZXNzZWRMaXN0IGFzICRmaWxlTmFt ZT0+JGl0ZW0pew0KCQkJCWlmKCEka2trICYmICRra2s9MSl7DQoJCQkJCWVjaG8gIjx0ciBz dHlsZT0nYmFja2dyb3VuZDogI0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmll bGROYW1lPT4kdmFsdWUpDQoJCQkJCQllY2hvICI8dGQ+JGZpZWxkTmFtZTwvdGQ+IjsNCgkJ CQkJZWNobyAnPC90cj4nOw0KCQkJCX0NCgkJCQllY2hvICI8dHIgc3R5bGU9J2JhY2tncm91 bmQ6ICNDRkMnPiI7DQoJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUp ew0KCQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCWVj aG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiIuZGF0ZSgiZC9t L1kgSDppOnMiLCAkdmFsdWUpLiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJCQkJCWVjaG8gIjx0 ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJ CQl9DQoJCQkJZWNobyAiPC90cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90YWJsZT4iOw0KDQoJ CQkjLS0tLS0tLSBEZWJ1ZyBjZW50cmFsRGlyTGlzdA0KCQkJJGtrayA9IDA7DQoJCQlpZihz aXplb2YoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSl7DQoJCQkJZWNobyAiPHRhYmxlIGJvcmRl cj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQgIzAw MCc+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZU5hbWU9 PiRpdGVtKXsNCgkJCQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJCQkJCWVjaG8gIjx0ciBz dHlsZT0nYmFja2dyb3VuZDogI0FBRCc+IjsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGZp ZWxkTmFtZT0+JHZhbHVlKQ0KCQkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4iOw0K CQkJCQkJZWNobyAnPC90cj4nOw0KCQkJCQl9DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFj a2dyb3VuZDogI0NDRic+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4k dmFsdWUpew0KCQkJCQkJaWYoJGZpZWxkTmFtZSA9PSAnbGFzdG1vZF9kYXRldGltZScpDQoJ CQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+Ii5k YXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJCWVsc2UNCgkJCQkJ CQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFwJz4kdmFsdWU8 L3RkPiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hvICI8 L3RhYmxlPiI7DQoJCQl9DQoNCgkJCSMtLS0tLS0tIERlYnVnIGVuZE9mQ2VudHJhbA0KCQkJ JGtrayA9IDA7DQoJCQlpZihzaXplb2YoJHRoaXMtPmVuZE9mQ2VudHJhbCkpew0KCQkJCWVj aG8gIjx0YWJsZSBib3JkZXI9JzAnIHN0eWxlPSdmb250OiAxMXB4IFZlcmRhbmEnIHN0eWxl PSdib3JkZXI6IDFweCBzb2xpZCAjMDAwJz4iOw0KCQkJCWVjaG8gIjx0ciBzdHlsZT0nYmFj a2dyb3VuZDogI0RBQSc+PHRkIGNvbHNwYW49JzInPmRVbnppcCAtIEVuZCBvZiBmaWxlPC90 ZD48L3RyPiI7DQoJCQkJZm9yZWFjaCgkdGhpcy0+ZW5kT2ZDZW50cmFsIGFzICRmaWVsZD0+ JHZhbHVlKXsNCgkJCQkJZWNobyAiPHRyPiI7DQoJCQkJCWVjaG8gIjx0ZCBzdHlsZT0nYmFj a2dyb3VuZDogI0ZDQyc+JGZpZWxkPC90ZD4iOw0KCQkJCQllY2hvICI8dGQgc3R5bGU9J2Jh Y2tncm91bmQ6ICNGREQnPiR2YWx1ZTwvdGQ+IjsNCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJ CX0NCgkJCQllY2hvICI8L3RhYmxlPiI7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMt PmNvbXByZXNzZWRMaXN0Ow0KCX0NCglGdW5jdGlvbiBnZXRFeHRyYUluZm8oJGNvbXByZXNz ZWRGaWxlTmFtZSl7DQoJCXJldHVybg0KCQkJaXNzZXQoJHRoaXMtPmNlbnRyYWxEaXJMaXN0 WyRjb21wcmVzc2VkRmlsZU5hbWVdKT8NCgkJCSR0aGlzLT5jZW50cmFsRGlyTGlzdFskY29t cHJlc3NlZEZpbGVOYW1lXToNCgkJCWZhbHNlOw0KCX0NCglGdW5jdGlvbiBnZXRaaXBJbmZv KCRkZXRhaWw9ZmFsc2Upew0KCQlyZXR1cm4gJGRldGFpbD8NCgkJCSR0aGlzLT5lbmRPZkNl bnRyYWxbJGRldGFpbF06DQoJCQkkdGhpcy0+ZW5kT2ZDZW50cmFsOw0KCX0NCg0KCUZ1bmN0 aW9uIHVuemlwKCRjb21wcmVzc2VkRmlsZU5hbWUsICR0YXJnZXRGaWxlTmFtZT1mYWxzZSwg JGFwcGx5Q2htb2Q9MDc3Nyl7DQoJCWlmKCFzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0 KSl7DQoJCQkkdGhpcy0+ZGVidWdNc2coMSwgIlRyeWluZyB0byB1bnppcCBiZWZvcmUgbG9h ZGluZyBmaWxlIGxpc3QuLi4gTG9hZGluZyBpdCEiKTsNCgkJCSR0aGlzLT5nZXRMaXN0KGZh bHNlLCAkY29tcHJlc3NlZEZpbGVOYW1lKTsNCgkJfQ0KDQoJCSRmZGV0YWlscyA9ICYkdGhp cy0+Y29tcHJlc3NlZExpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV07DQoJCWlmKCFpc3NldCgk dGhpcy0+Y29tcHJlc3NlZExpc3RbJGNvbXByZXNzZWRGaWxlTmFtZV0pKXsNCgkJCSR0aGlz LT5kZWJ1Z01zZygyLCAiRmlsZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nIGlzIG5v dCBjb21wcmVzc2VkIGluIHRoZSB6aXAuIik7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJ aWYoc3Vic3RyKCRjb21wcmVzc2VkRmlsZU5hbWUsIC0xKSA9PSAiLyIpew0KCQkJJHRoaXMt PmRlYnVnTXNnKDIsICJUcnlpbmcgdG8gdW56aXAgYSBmb2xkZXIgbmFtZSAnPGI+JGNvbXBy ZXNzZWRGaWxlTmFtZTwvYj4nLiIpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWlmKCEk ZmRldGFpbHNbJ3VuY29tcHJlc3NlZF9zaXplJ10pew0KCQkJJHRoaXMtPmRlYnVnTXNnKDEs ICJGaWxlICc8Yj4kY29tcHJlc3NlZEZpbGVOYW1lPC9iPicgaXMgZW1wdHkuIik7DQoJCQly ZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRG aWxlTmFtZSwgIiIpOg0KCQkJCSIiOw0KCQl9DQoNCgkJZnNlZWsoJHRoaXMtPmZoLCAkZmRl dGFpbHNbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10pOw0KCQkkcmV0ID0gJHRoaXMtPnVuY29t cHJlc3MoDQoJCQkJZnJlYWQoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbXByZXNzZWRfc2l6 ZSddKSwNCgkJCQkkZmRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhvZCddLA0KCQkJCSRmZGV0 YWlsc1sndW5jb21wcmVzc2VkX3NpemUnXSwNCgkJCQkkdGFyZ2V0RmlsZU5hbWUNCgkJCSk7 DQoJCWlmKCRhcHBseUNobW9kICYmICR0YXJnZXRGaWxlTmFtZSkNCgkJCWNobW9kKCR0YXJn ZXRGaWxlTmFtZSwgMDc3Nyk7DQoJCQ0KCQlyZXR1cm4gJHJldDsNCgl9DQoJRnVuY3Rpb24g dW56aXBBbGwoJHRhcmdldERpcj1mYWxzZSwgJGJhc2VEaXI9IiIsICRtYWludGFpblN0cnVj dHVyZT10cnVlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoJHRhcmdldERpciA9PT0gZmFs c2UpDQoJCQkkdGFyZ2V0RGlyID0gZGlybmFtZSgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1F J10pLiIvIjsNCgkJDQoJCSRsaXN0YSA9ICR0aGlzLT5nZXRMaXN0KCk7DQoJCWlmKHNpemVv ZigkbGlzdGEpKSBmb3JlYWNoKCRsaXN0YSBhcyAkZmlsZU5hbWU9PiR0cmFzaCl7DQoJCQkk ZGlybmFtZSAgPSBkaXJuYW1lKCRmaWxlTmFtZSk7DQoJCQkkb3V0RE4gICAgPSAiJHRhcmdl dERpci8kZGlybmFtZSI7DQoJCQkNCgkJCWlmKHN1YnN0cigkZGlybmFtZSwgMCwgc3RybGVu KCRiYXNlRGlyKSkgIT0gJGJhc2VEaXIpDQoJCQkJY29udGludWU7DQoJCQkNCgkJCWlmKCFp c19kaXIoJG91dEROKSAmJiAkbWFpbnRhaW5TdHJ1Y3R1cmUpew0KCQkJCSRzdHIgPSAiIjsN CgkJCQkkZm9sZGVycyA9IGV4cGxvZGUoIi8iLCAkZGlybmFtZSk7DQoJCQkJZm9yZWFjaCgk Zm9sZGVycyBhcyAkZm9sZGVyKXsNCgkJCQkJJHN0ciA9ICRzdHI/IiRzdHIvJGZvbGRlciI6 JGZvbGRlcjsNCgkJCQkJaWYoIWlzX2RpcigiJHRhcmdldERpci8kc3RyIikpew0KCQkJCQkJ JHRoaXMtPmRlYnVnTXNnKDEsICJDcmVhdGluZyBmb2xkZXI6ICR0YXJnZXREaXIvJHN0ciIp Ow0KCQkJCQkJbWtkaXIoIiR0YXJnZXREaXIvJHN0ciIpOw0KCQkJCQkJaWYoJGFwcGx5Q2ht b2QpDQoJCQkJCQkJY2htb2QoIiR0YXJnZXREaXIvJHN0ciIsICRhcHBseUNobW9kKTsNCgkJ CQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWlmKHN1YnN0cigkZmlsZU5hbWUsIC0xLCAxKSA9PSAi LyIpDQoJCQkJY29udGludWU7DQoNCgkJCSRtYWludGFpblN0cnVjdHVyZT8NCgkJCQkkdGhp cy0+dW56aXAoJGZpbGVOYW1lLCAiJHRhcmdldERpci8kZmlsZU5hbWUiLCAkYXBwbHlDaG1v ZCk6DQoJCQkJJHRoaXMtPnVuemlwKCRmaWxlTmFtZSwgIiR0YXJnZXREaXIvIi5iYXNlbmFt ZSgkZmlsZU5hbWUpLCAkYXBwbHlDaG1vZCk7DQoJCX0NCgl9DQoJDQoJRnVuY3Rpb24gY2xv c2UoKXsgICAgIC8vIEZyZWUgdGhlIGZpbGUgcmVzb3VyY2UNCgkJaWYoJHRoaXMtPmZoKQ0K CQkJZmNsb3NlKCR0aGlzLT5maCk7DQoJfQ0KCUZ1bmN0aW9uIF9fZGVzdHJveSgpeyANCgkJ JHRoaXMtPmNsb3NlKCk7DQoJfQ0KDQoJLy8gUHJpdmF0ZSAoeW91IHNob3VsZCBOT1QgY2Fs bCB0aGVzZSBtZXRob2RzKToNCglGdW5jdGlvbiB1bmNvbXByZXNzKCYkY29udGVudCwgJG1v ZGUsICR1bmNvbXByZXNzZWRTaXplLCAkdGFyZ2V0RmlsZU5hbWU9ZmFsc2Upew0KCQlzd2l0 Y2goJG1vZGUpew0KCQkJY2FzZSAwOg0KCQkJCS8vIE5vdCBjb21wcmVzc2VkDQoJCQkJcmV0 dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZp bGVOYW1lLCAkY29udGVudCk6DQoJCQkJCSRjb250ZW50Ow0KCQkJY2FzZSAxOg0KCQkJCSR0 aGlzLT5kZWJ1Z01zZygyLCAiU2hydW5rIG1vZGUgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/ Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJY2FzZSAyOg0KCQkJY2FzZSAzOg0KCQkJY2Fz ZSA0Og0KCQkJY2FzZSA1Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiQ29tcHJlc3Npb24g ZmFjdG9yICIuKCRtb2RlLTEpLiIgaXMgbm90IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJ cmV0dXJuIGZhbHNlOw0KCQkJY2FzZSA2Og0KCQkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiSW1w bG9kZSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJ CQljYXNlIDc6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJUb2tlbml6aW5nIGNvbXByZXNz aW9uIGFsZ29yaXRobSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCQljYXNlIDg6DQoJCQkJLy8gRGVmbGF0ZQ0KCQkJCXJldHVybiAkdGFyZ2V0 RmlsZU5hbWU/DQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgZ3pp bmZsYXRlKCRjb250ZW50LCAkdW5jb21wcmVzc2VkU2l6ZSkpOg0KCQkJCQlnemluZmxhdGUo JGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXplKTsNCgkJCWNhc2UgOToNCgkJCQkkdGhpcy0+ ZGVidWdNc2coMiwgIkVuaGFuY2VkIERlZmxhdGluZyBpcyBub3Qgc3VwcG9ydGVkLi4uIHll dD8iKTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDEwOg0KCQkJCSR0aGlzLT5kZWJ1 Z01zZygyLCAiUEtXQVJFIERhdGUgQ29tcHJlc3Npb24gTGlicmFyeSBJbXBvbG9kaW5nIGlz IG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCiAgICAgICAg ICAgY2FzZSAxMjoNCiAgICAgICAgICAgICAgIC8vIEJ6aXAyDQogICAgICAgICAgICAgICBy ZXR1cm4gJHRhcmdldEZpbGVOYW1lPw0KICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2Nv bnRlbnRzKCR0YXJnZXRGaWxlTmFtZSwgYnpkZWNvbXByZXNzKCRjb250ZW50KSk6DQogICAg ICAgICAgICAgICAgICAgYnpkZWNvbXByZXNzKCRjb250ZW50KTsNCgkJCWNhc2UgMTg6DQoJ CQkJJHRoaXMtPmRlYnVnTXNnKDIsICJJQk0gVEVSU0UgaXMgbm90IHN1cHBvcnRlZC4uLiB5 ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJZGVmYXVsdDoNCgkJCQkkdGhpcy0+ZGVi dWdNc2coMiwgIlVua25vd24gdW5jb21wcmVzcyBtZXRob2Q6ICRtb2RlIik7DQoJCQkJcmV0 dXJuIGZhbHNlOw0KCQl9DQoJfQ0KCUZ1bmN0aW9uIGRlYnVnTXNnKCRsZXZlbCwgJHN0cmlu Zyl7DQoJCWlmKCR0aGlzLT5kZWJ1Zyl7DQoJCQlpZigkbGV2ZWwgPT0gMSkNCgkJCQllY2hv ICI8YiBzdHlsZT0nY29sb3I6ICM3NzcnPmRVbnppcDI6PC9iPiAkc3RyaW5nPGJyPiI7DQoJ CQkNCgkJCWlmKCRsZXZlbCA9PSAyKQ0KCQkJCWVjaG8gIjxiIHN0eWxlPSdjb2xvcjogI0Yw MCc+ZFVuemlwMjo8L2I+ICRzdHJpbmc8YnI+IjsNCgkJfQ0KCQkkdGhpcy0+bGFzdEVycm9y ID0gJHN0cmluZzsNCgl9DQoJRnVuY3Rpb24gZ2V0TGFzdEVycm9yKCl7DQoJCXJldHVybiAk dGhpcy0+bGFzdEVycm9yOw0KCX0NCg0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxpc3RCeUVPRigm JGZoLCAkc3RvcE9uRmlsZT1mYWxzZSl7DQoJCS8vIENoZWNrIGlmIHRoZXJlJ3MgYSB2YWxp ZCBDZW50cmFsIERpciBzaWduYXR1cmUuDQoJCS8vIExldCdzIGNvbnNpZGVyIGEgZmlsZSBj b21tZW50IHNtYWxsZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuLi4NCgkJLy8gQWN0dWFsbHks IGl0IGxlbmd0aCBjYW4gYmUgNjU1MzYuLiBCdXQgd2UncmUgbm90IGdvaW5nIHRvIHN1cHBv cnQgaXQuDQoNCgkJZm9yKCR4ID0gMDsgJHggPCAxMDI0OyAkeCsrKXsNCgkJCWZzZWVrKCRm aCwgLTIyLSR4LCBTRUVLX0VORCk7DQoNCgkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQp Ow0KCQkJaWYoJHNpZ25hdHVyZSA9PSAkdGhpcy0+ZGlyU2lnbmF0dXJlRSl7DQoJCQkJLy8g SWYgZm91bmQgRU9GIENlbnRyYWwgRGlyDQoJCQkJJGVvZGlyWydkaXNrX251bWJlcl90aGlz J10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBudW1iZXIgb2YgdGhpcyBk aXNrDQoJCQkJJGVvZGlyWydkaXNrX251bWJlciddICAgICAgICA9IHVucGFjaygidiIsIGZy ZWFkKCRmaCwgMikpOyAvLyBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2Yg dGhlIGNlbnRyYWwgZGlyZWN0b3J5DQoJCQkJJGVvZGlyWyd0b3RhbF9lbnRyaWVzX3RoaXMn XSA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB0b3RhbCBudW1iZXIgb2YgZW50 cmllcyBpbiB0aGUgY2VudHJhbCBkaXIgb24gdGhpcyBkaXNrDQoJCQkJJGVvZGlyWyd0b3Rh bF9lbnRyaWVzJ10gICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB0b3Rh bCBudW1iZXIgb2YgZW50cmllcyBpbg0KCQkJCSRlb2Rpclsnc2l6ZV9vZl9jZCddICAgICAg ICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gc2l6ZSBvZiB0aGUgY2VudHJh bCBkaXJlY3RvcnkNCgkJCQkkZW9kaXJbJ29mZnNldF9zdGFydF9jZCddICAgID0gdW5wYWNr KCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIG9mZnNldCBvZiBzdGFydCBvZiBjZW50cmFsIGRp cmVjdG9yeSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YXJ0aW5nIGRpc2sgbnVtYmVyDQoJCQkJ JHppcEZpbGVDb21tZW50TGVuZ2h0ICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyB6aXBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkJJGVvZGlyWyd6aXBmaWxlX2Nv bW1lbnQnXSAgICA9ICR6aXBGaWxlQ29tbWVudExlbmdodFsxXT9mcmVhZCgkZmgsICR6aXBG aWxlQ29tbWVudExlbmdodFsxXSk6Jyc7IC8vIHppcGZpbGUgY29tbWVudA0KCQkJCSR0aGlz LT5lbmRPZkNlbnRyYWwgPSBBcnJheSgNCgkJCQkJJ2Rpc2tfbnVtYmVyX3RoaXMnPT4kZW9k aXJbJ2Rpc2tfbnVtYmVyX3RoaXMnXVsxXSwNCgkJCQkJJ2Rpc2tfbnVtYmVyJz0+JGVvZGly WydkaXNrX251bWJlciddWzFdLA0KCQkJCQkndG90YWxfZW50cmllc190aGlzJz0+JGVvZGly Wyd0b3RhbF9lbnRyaWVzX3RoaXMnXVsxXSwNCgkJCQkJJ3RvdGFsX2VudHJpZXMnPT4kZW9k aXJbJ3RvdGFsX2VudHJpZXMnXVsxXSwNCgkJCQkJJ3NpemVfb2ZfY2QnPT4kZW9kaXJbJ3Np emVfb2ZfY2QnXVsxXSwNCgkJCQkJJ29mZnNldF9zdGFydF9jZCc9PiRlb2Rpclsnb2Zmc2V0 X3N0YXJ0X2NkJ11bMV0sDQoJCQkJCSd6aXBmaWxlX2NvbW1lbnQnPT4kZW9kaXJbJ3ppcGZp bGVfY29tbWVudCddLA0KCQkJCSk7DQoNCgkJCQkvLyBUaGVuLCBsb2FkIGZpbGUgbGlzdA0K CQkJCWZzZWVrKCRmaCwgJHRoaXMtPmVuZE9mQ2VudHJhbFsnb2Zmc2V0X3N0YXJ0X2NkJ10p Ow0KCQkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KDQoJCQkJd2hpbGUoJHNpZ25h dHVyZSA9PSAkdGhpcy0+ZGlyU2lnbmF0dXJlKXsNCgkJCQkJJGRpclsndmVyc2lvbl9tYWRl YnknXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbWFk ZSBieQ0KCQkJCQkkZGlyWyd2ZXJzaW9uX25lZWRlZCddICAgICAgPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJCQkkZGly WydnZW5lcmFsX2JpdF9mbGFnJ10gICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsg Ly8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBmbGFnDQoJCQkJCSRkaXJbJ2NvbXByZXNzaW9uX21l dGhvZCddICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBjb21wcmVzc2lvbiBt ZXRob2QNCgkJCQkJJGRpclsnbGFzdG1vZF90aW1lJ10gICAgICAgID0gdW5wYWNrKCJ2Iiwg ZnJlYWQoJGZoLCAyKSk7IC8vIGxhc3QgbW9kIGZpbGUgdGltZQ0KCQkJCQkkZGlyWydsYXN0 bW9kX2RhdGUnXSAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFz dCBtb2QgZmlsZSBkYXRlDQoJCQkJCSRkaXJbJ2NyYy0zMiddICAgICAgICAgICAgICA9IGZy ZWFkKCRmaCwgNCk7ICAgICAgICAgICAgICAvLyBjcmMtMzINCgkJCQkJJGRpclsnY29tcHJl c3NlZF9zaXplJ10gICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIGNvbXBy ZXNzZWQgc2l6ZQ0KCQkJCQkkZGlyWyd1bmNvbXByZXNzZWRfc2l6ZSddICAgPSB1bnBhY2so IlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2VkIHNpemUNCgkJCQkJJGZpbGVO YW1lTGVuZ3RoICAgICAgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8v IGZpbGVuYW1lIGxlbmd0aA0KCQkJCQkkZXh0cmFGaWVsZExlbmd0aCAgICAgICAgICAgPSB1 bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZXh0cmEgZmllbGQgbGVuZ3RoDQoJCQkJ CSRmaWxlQ29tbWVudExlbmd0aCAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkJCSRkaXJbJ2Rpc2tfbnVtYmVyX3N0 YXJ0J10gICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBkaXNrIG51bWJlciBz dGFydA0KCQkJCQkkZGlyWydpbnRlcm5hbF9hdHRyaWJ1dGVzJ10gPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLWJ5dGUxDQoJCQkJ CSRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMxJ109IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMtYnl0ZTINCgkJCQkJJGRpclsnZXh0 ZXJuYWxfYXR0cmlidXRlczInXT0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4 dGVybmFsIGZpbGUgYXR0cmlidXRlcw0KCQkJCQkkZGlyWydyZWxhdGl2ZV9vZmZzZXQnXSAg ICAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gcmVsYXRpdmUgb2Zmc2V0IG9m IGxvY2FsIGhlYWRlcg0KCQkJCQkkZGlyWydmaWxlX25hbWUnXSAgICAgICAgICAgPSBmcmVh ZCgkZmgsICRmaWxlTmFtZUxlbmd0aFsxXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBmaWxlbmFtZQ0KCQkJCQkkZGlyWydleHRyYV9maWVsZCddICAgICAgICAgPSAkZXh0 cmFGaWVsZExlbmd0aFsxXSA/ZnJlYWQoJGZoLCAkZXh0cmFGaWVsZExlbmd0aFsxXSkgOicn OyAvLyBleHRyYSBmaWVsZA0KCQkJCQkkZGlyWydmaWxlX2NvbW1lbnQnXSAgICAgICAgPSAk ZmlsZUNvbW1lbnRMZW5ndGhbMV0/ZnJlYWQoJGZoLCAkZmlsZUNvbW1lbnRMZW5ndGhbMV0p OicnOyAvLyBmaWxlIGNvbW1lbnQNCg0KCQkJCQkvLyBDb252ZXJ0IHRoZSBkYXRlIGFuZCB0 aW1lLCBmcm9tIE1TLURPUyBmb3JtYXQgdG8gVU5JWCBUaW1lc3RhbXANCgkJCQkJJEJJTmxh c3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xhc3Rtb2RfZGF0ZSddWzFdKSwg MTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJEJJTmxhc3Rtb2RfdGltZSA9IHN0cl9w YWQoZGVjYmluKCRkaXJbJ2xhc3Rtb2RfdGltZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9M RUZUKTsNCgkJCQkJJGxhc3Rtb2RfZGF0ZVkgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9k X2RhdGUsICAwLCA3KSkrMTk4MDsNCgkJCQkJJGxhc3Rtb2RfZGF0ZU0gPSBiaW5kZWMoc3Vi c3RyKCRCSU5sYXN0bW9kX2RhdGUsICA3LCA0KSk7DQoJCQkJCSRsYXN0bW9kX2RhdGVEID0g YmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwgNSkpOw0KCQkJCQkkbGFzdG1v ZF90aW1lSCA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfdGltZSwgICAwLCA1KSk7DQoJ CQkJCSRsYXN0bW9kX3RpbWVNID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF90aW1lLCAg IDUsIDYpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0 bW9kX3RpbWUsICAxMSwgNSkpOw0KDQoJCQkJCS8vIFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMg YXR0YWNrcy4uLg0KCQkJCQlpZighJGRpclsnZmlsZV9uYW1lJ10gPSAkdGhpcy0+X3Byb3Rl Y3QoJGRpclsnZmlsZV9uYW1lJ10pKQ0KCQkJCQkJY29udGludWU7DQoNCgkJCQkJJHRoaXMt PmNlbnRyYWxEaXJMaXN0WyRkaXJbJ2ZpbGVfbmFtZSddXSA9IEFycmF5KA0KCQkJCQkJJ3Zl cnNpb25fbWFkZWJ5Jz0+JGRpclsndmVyc2lvbl9tYWRlYnknXVsxXSwNCgkJCQkJCSd2ZXJz aW9uX25lZWRlZCc9PiRkaXJbJ3ZlcnNpb25fbmVlZGVkJ11bMV0sDQoJCQkJCQknZ2VuZXJh bF9iaXRfZmxhZyc9PnN0cl9wYWQoZGVjYmluKCRkaXJbJ2dlbmVyYWxfYml0X2ZsYWcnXVsx XSksIDgsICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJCQkJCSdjb21wcmVzc2lvbl9tZXRob2Qn PT4kZGlyWydjb21wcmVzc2lvbl9tZXRob2QnXVsxXSwNCgkJCQkJCSdsYXN0bW9kX2RhdGV0 aW1lJyAgPT5ta3RpbWUoJGxhc3Rtb2RfdGltZUgsICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1v ZF90aW1lUywgJGxhc3Rtb2RfZGF0ZU0sICRsYXN0bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRl WSksDQoJCQkJCQknY3JjLTMyJyAgICAgICAgICAgID0+c3RyX3BhZChkZWNoZXgob3JkKCRk aXJbJ2NyYy0zMiddWzNdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCQkJ ICBzdHJfcGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMl0pKSwgMiwgJzAnLCBTVFJf UEFEX0xFRlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMt MzInXVsxXSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3Bh ZChkZWNoZXgob3JkKCRkaXJbJ2NyYy0zMiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9MRUZU KSwNCgkJCQkJCSdjb21wcmVzc2VkX3NpemUnPT4kZGlyWydjb21wcmVzc2VkX3NpemUnXVsx XSwNCgkJCQkJCSd1bmNvbXByZXNzZWRfc2l6ZSc9PiRkaXJbJ3VuY29tcHJlc3NlZF9zaXpl J11bMV0sDQoJCQkJCQknZGlza19udW1iZXJfc3RhcnQnPT4kZGlyWydkaXNrX251bWJlcl9z dGFydCddWzFdLA0KCQkJCQkJJ2ludGVybmFsX2F0dHJpYnV0ZXMnPT4kZGlyWydpbnRlcm5h bF9hdHRyaWJ1dGVzJ11bMV0sDQoJCQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczEnPT4kZGly WydleHRlcm5hbF9hdHRyaWJ1dGVzMSddWzFdLA0KCQkJCQkJJ2V4dGVybmFsX2F0dHJpYnV0 ZXMyJz0+JGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczInXVsxXSwNCgkJCQkJCSdyZWxhdGl2 ZV9vZmZzZXQnPT4kZGlyWydyZWxhdGl2ZV9vZmZzZXQnXVsxXSwNCgkJCQkJCSdmaWxlX25h bWUnPT4kZGlyWydmaWxlX25hbWUnXSwNCgkJCQkJCSdleHRyYV9maWVsZCc9PiRkaXJbJ2V4 dHJhX2ZpZWxkJ10sDQoJCQkJCQknZmlsZV9jb21tZW50Jz0+JGRpclsnZmlsZV9jb21tZW50 J10sDQoJCQkJCSk7DQoJCQkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQkJCX0N Cg0KCQkJCS8vIElmIGxvYWRlZCBjZW50cmFsRGlycywgdGhlbiB0cnkgdG8gaWRlbnRpZnkg dGhlIG9mZnNldFBvc2l0aW9uIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuDQoJCQkJaWYoJHRo aXMtPmNlbnRyYWxEaXJMaXN0KSBmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAk ZmlsZW5hbWU9PiRkZXRhaWxzKXsNCgkJCQkJJGkgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJ bmZvcm1hdGlvbigkZmgsICRkZXRhaWxzWydyZWxhdGl2ZV9vZmZzZXQnXSk7DQoJCQkJCSR0 aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydmaWxlX25hbWUnXSAgICAgICAgICA9 ICRmaWxlbmFtZTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2Nv bXByZXNzaW9uX21ldGhvZCddID0gJGRldGFpbHNbJ2NvbXByZXNzaW9uX21ldGhvZCddOw0K CQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsndmVyc2lvbl9uZWVkZWQn XSAgICAgPSAkZGV0YWlsc1sndmVyc2lvbl9uZWVkZWQnXTsNCgkJCQkJJHRoaXMtPmNvbXBy ZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2xhc3Rtb2RfZGF0ZXRpbWUnXSAgID0gJGRldGFpbHNb J2xhc3Rtb2RfZGF0ZXRpbWUnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxl bmFtZV1bJ2NyYy0zMiddICAgICAgICAgICAgID0gJGRldGFpbHNbJ2NyYy0zMiddOw0KCQkJ CQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnY29tcHJlc3NlZF9zaXplJ10g ICAgPSAkZGV0YWlsc1snY29tcHJlc3NlZF9zaXplJ107DQoJCQkJCSR0aGlzLT5jb21wcmVz c2VkTGlzdFskZmlsZW5hbWVdWyd1bmNvbXByZXNzZWRfc2l6ZSddICA9ICRkZXRhaWxzWyd1 bmNvbXByZXNzZWRfc2l6ZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVu YW1lXVsnbGFzdG1vZF9kYXRldGltZSddICAgPSAkZGV0YWlsc1snbGFzdG1vZF9kYXRldGlt ZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnZXh0cmFfZmll bGQnXSAgICAgICAgPSAkaVsnZXh0cmFfZmllbGQnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNz ZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J109JGlbJ2NvbnRlbnRz LXN0YXJ0T2Zmc2V0J107DQoJCQkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09IHN0 cnRvbG93ZXIoJGZpbGVuYW1lKSkNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlyZXR1cm4g dHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCUZ1bmN0aW9uIF9sb2Fk RmlsZUxpc3RCeVNpZ25hdHVyZXMoJiRmaCwgJHN0b3BPbkZpbGU9ZmFsc2Upew0KCQlmc2Vl aygkZmgsIDApOw0KCQkNCgkJJHJldHVybiA9IGZhbHNlOw0KCQlmb3IoOzspew0KCQkJJGRl dGFpbHMgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgpOw0KCQkJaWYo ISRkZXRhaWxzKXsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIkludmFsaWQgc2lnbmF0dXJl LiBUcnlpbmcgdG8gdmVyaWZ5IGlmIGlzIG9sZCBzdHlsZSBEYXRhIERlc2NyaXB0b3IuLi4i KTsNCgkJCQlmc2VlaygkZmgsIDEyIC0gNCwgU0VFS19DVVIpOyAvLyAxMjogRGF0YSBkZXNj cmlwdG9yIC0gNDogU2lnbmF0dXJlICh0aGF0IHdpbGwgYmUgcmVhZCBhZ2FpbikNCgkJCQkk ZGV0YWlscyA9ICR0aGlzLT5fZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCRmaCk7DQoJCQl9 DQoJCQlpZighJGRldGFpbHMpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiU3RpbGwgaW52 YWxpZCBzaWduYXR1cmUuIFByb2JhYmx5IHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgZmlsZS4i KTsNCgkJCQlicmVhazsNCgkJCX0NCgkJCSRmaWxlbmFtZSA9ICRkZXRhaWxzWydmaWxlX25h bWUnXTsNCgkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdID0gJGRldGFpbHM7 DQoJCQkkcmV0dXJuID0gdHJ1ZTsNCgkJCWlmKHN0cnRvbG93ZXIoJHN0b3BPbkZpbGUpID09 IHN0cnRvbG93ZXIoJGZpbGVuYW1lKSkNCgkJCQlicmVhazsNCgkJfQ0KCQkNCgkJcmV0dXJu ICRyZXR1cm47DQoJfQ0KCUZ1bmN0aW9uIF9nZXRGaWxlSGVhZGVySW5mb3JtYXRpb24oJiRm aCwgJHN0YXJ0T2Zmc2V0PWZhbHNlKXsNCgkJaWYoJHN0YXJ0T2Zmc2V0ICE9PSBmYWxzZSkN CgkJCWZzZWVrKCRmaCwgJHN0YXJ0T2Zmc2V0KTsNCgkJDQoJCSRzaWduYXR1cmUgPSBmcmVh ZCgkZmgsIDQpOw0KCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT56aXBTaWduYXR1cmUpew0K CQkJIyAkdGhpcy0+ZGVidWdNc2coMSwgIlppcCBTaWduYXR1cmUhIik7DQoJCQkNCgkJCS8v IEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgemlwcGVkIGZpbGUNCgkJCSRmaWxlWyd2ZXJz aW9uX25lZWRlZCddICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2ZXJz aW9uIG5lZWRlZCB0byBleHRyYWN0DQoJCQkkZmlsZVsnZ2VuZXJhbF9iaXRfZmxhZyddICAg PSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZ2VuZXJhbCBwdXJwb3NlIGJpdCBm bGFnDQoJCQkkZmlsZVsnY29tcHJlc3Npb25fbWV0aG9kJ10gPSB1bnBhY2soInYiLCBmcmVh ZCgkZmgsIDIpKTsgLy8gY29tcHJlc3Npb24gbWV0aG9kDQoJCQkkZmlsZVsnbGFzdG1vZF90 aW1lJ10gICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2Qg ZmlsZSB0aW1lDQoJCQkkZmlsZVsnbGFzdG1vZF9kYXRlJ10gICAgICAgPSB1bnBhY2soInYi LCBmcmVhZCgkZmgsIDIpKTsgLy8gbGFzdCBtb2QgZmlsZSBkYXRlDQoJCQkkZmlsZVsnY3Jj LTMyJ10gICAgICAgICAgICAgPSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3Jj LTMyDQoJCQkkZmlsZVsnY29tcHJlc3NlZF9zaXplJ10gICAgPSB1bnBhY2soIlYiLCBmcmVh ZCgkZmgsIDQpKTsgLy8gY29tcHJlc3NlZCBzaXplDQoJCQkkZmlsZVsndW5jb21wcmVzc2Vk X3NpemUnXSAgPSB1bnBhY2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gdW5jb21wcmVzc2Vk IHNpemUNCgkJCSRmaWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygidiIsIGZy ZWFkKCRmaCwgMikpOyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCSRleHRyYUZpZWxkTGVuZ3Ro ICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBleHRyYSBmaWVs ZCBsZW5ndGgNCgkJCSRmaWxlWydmaWxlX25hbWUnXSAgICAgICAgICA9IGZyZWFkKCRmaCwg JGZpbGVOYW1lTGVuZ3RoWzFdKTsgLy8gZmlsZW5hbWUNCgkJCSRmaWxlWydleHRyYV9maWVs ZCddICAgICAgICA9ICRleHRyYUZpZWxkTGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGV4dHJhRmll bGRMZW5ndGhbMV0pOicnOyAvLyBleHRyYSBmaWVsZA0KCQkJJGZpbGVbJ2NvbnRlbnRzLXN0 YXJ0T2Zmc2V0J109IGZ0ZWxsKCRmaCk7DQoJCQkNCgkJCS8vIEJ5cGFzcyB0aGUgd2hvbGUg Y29tcHJlc3NlZCBjb250ZW50cywgYW5kIGxvb2sgZm9yIHRoZSBuZXh0IGZpbGUNCgkJCWZz ZWVrKCRmaCwgJGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddWzFdLCBTRUVLX0NVUik7DQoJCQkN CgkJCS8vIENvbnZlcnQgdGhlIGRhdGUgYW5kIHRpbWUsIGZyb20gTVMtRE9TIGZvcm1hdCB0 byBVTklYIFRpbWVzdGFtcA0KCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmlu KCRmaWxlWydsYXN0bW9kX2RhdGUnXVsxXSksIDE2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJ CQkkQklObGFzdG1vZF90aW1lID0gc3RyX3BhZChkZWNiaW4oJGZpbGVbJ2xhc3Rtb2RfdGlt ZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCSRsYXN0bW9kX2RhdGVZID0g YmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAgMCwgNykpKzE5ODA7DQoJCQkkbGFz dG1vZF9kYXRlTSA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDcsIDQpKTsN CgkJCSRsYXN0bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAx MSwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZUggPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9k X3RpbWUsICAgMCwgNSkpOw0KCQkJJGxhc3Rtb2RfdGltZU0gPSBiaW5kZWMoc3Vic3RyKCRC SU5sYXN0bW9kX3RpbWUsICAgNSwgNikpOw0KCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5kZWMo c3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOw0KCQkJDQoJCQkvLyBTb21lIHBy b3RlY3Rpb24gYWdhaW5zIGF0dGFja3MuLi4NCgkJCWlmKCEkZmlsZVsnZmlsZV9uYW1lJ10g PSAkdGhpcy0+X3Byb3RlY3QoJGZpbGVbJ2ZpbGVfbmFtZSddKSkNCgkJCQlyZXR1cm47DQoJ CQkNCgkJCS8vIE1vdW50IGZpbGUgdGFibGUNCgkJCSRpID0gQXJyYXkoDQoJCQkJJ2ZpbGVf bmFtZScgICAgICAgICA9PiRmaWxlWydmaWxlX25hbWUnXSwNCgkJCQknY29tcHJlc3Npb25f bWV0aG9kJz0+JGZpbGVbJ2NvbXByZXNzaW9uX21ldGhvZCddWzFdLA0KCQkJCSd2ZXJzaW9u X25lZWRlZCcgICAgPT4kZmlsZVsndmVyc2lvbl9uZWVkZWQnXVsxXSwNCgkJCQknbGFzdG1v ZF9kYXRldGltZScgID0+bWt0aW1lKCRsYXN0bW9kX3RpbWVILCAkbGFzdG1vZF90aW1lTSwg JGxhc3Rtb2RfdGltZVMsICRsYXN0bW9kX2RhdGVNLCAkbGFzdG1vZF9kYXRlRCwgJGxhc3Rt b2RfZGF0ZVkpLA0KCQkJCSdjcmMtMzInICAgICAgICAgICAgPT5zdHJfcGFkKGRlY2hleChv cmQoJGZpbGVbJ2NyYy0zMiddWzNdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJ CQkJCSAgc3RyX3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVsyXSkpLCAyLCAnMCcs IFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsn Y3JjLTMyJ11bMV0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJf cGFkKGRlY2hleChvcmQoJGZpbGVbJ2NyYy0zMiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9M RUZUKSwNCgkJCQknY29tcHJlc3NlZF9zaXplJyAgID0+JGZpbGVbJ2NvbXByZXNzZWRfc2l6 ZSddWzFdLA0KCQkJCSd1bmNvbXByZXNzZWRfc2l6ZScgPT4kZmlsZVsndW5jb21wcmVzc2Vk X3NpemUnXVsxXSwNCgkJCQknZXh0cmFfZmllbGQnICAgICAgID0+JGZpbGVbJ2V4dHJhX2Zp ZWxkJ10sDQoJCQkJJ2dlbmVyYWxfYml0X2ZsYWcnICA9PnN0cl9wYWQoZGVjYmluKCRmaWxl WydnZW5lcmFsX2JpdF9mbGFnJ11bMV0pLCA4LCAnMCcsIFNUUl9QQURfTEVGVCksDQoJCQkJ J2NvbnRlbnRzLXN0YXJ0T2Zmc2V0Jz0+JGZpbGVbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10N CgkJCSk7DQoJCQlyZXR1cm4gJGk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglG dW5jdGlvbiBfcHJvdGVjdCgkZnVsbFBhdGgpew0KCQkvLyBLbm93biBoYWNrLWF0dGFja3Mg KGZpbGVuYW1lIGxpa2UpOg0KCQkvLyAgIC9ob21lL3Vzcg0KCQkvLyAgIC4uLy4uL2hvbWUv dXNyDQoJCS8vICAgZm9sZGVyLy4uLy4uLy4uL2hvbWUvdXNyDQoJCS8vICAgc2FtcGxlLyh4 MCkuLi9ob21lL3Vzcg0KCQkNCgkJJGZ1bGxQYXRoID0gc3RydHIoJGZ1bGxQYXRoLCAiOio8 PnxcIlx4MFxcIiwgIi4uLi4uLi4vIik7DQoJCXdoaWxlKCRmdWxsUGF0aFswXSA9PSAiLyIp DQoJCQkkZnVsbFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAxKTsNCgkJDQoJCWlmKHN1YnN0 cigkZnVsbFBhdGgsIC0xKSA9PSAiLyIpew0KCQkJJGJhc2UgICAgID0gJyc7DQoJCQkkZnVs bFBhdGggPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCAtMSk7DQoJCX0NCgkJZWxzZXsNCgkJCSRi YXNlICAgICA9IGJhc2VuYW1lKCRmdWxsUGF0aCk7DQoJCQkkZnVsbFBhdGggPSBkaXJuYW1l KCRmdWxsUGF0aCk7DQoJCX0NCgkJDQoJCSRwYXJ0cyAgID0gZXhwbG9kZSgiLyIsICRmdWxs UGF0aCk7DQoJCSRsYXN0SWR4ID0gZmFsc2U7DQoJCWZvcmVhY2goJHBhcnRzIGFzICRpZHg9 PiRwYXJ0KXsNCgkJCWlmKCRwYXJ0ID09ICIuIikNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0p Ow0KCQkJZWxzZWlmKCRwYXJ0ID09ICIuLiIpew0KCQkJCXVuc2V0KCRwYXJ0c1skaWR4XSk7 DQoJCQkJaWYoJGxhc3RJZHggIT09IGZhbHNlKXsNCgkJCQkJdW5zZXQoJHBhcnRzWyRsYXN0 SWR4XSk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZWlmKCRwYXJ0ID09PSAnJyl7DQoJCQkJdW5z ZXQoJHBhcnRzWyRpZHhdKTsNCgkJCX0NCgkJCWVsc2V7DQoJCQkJJGxhc3RJZHggPSAkaWR4 Ow0KCQkJfQ0KCQl9DQoNCgkJJGZ1bGxQYXRoID0gc2l6ZW9mKCRwYXJ0cyk/aW1wbG9kZSgi LyIsICRwYXJ0cykuIi8iOiIiOw0KCQlyZXR1cm4gJGZ1bGxQYXRoLiRiYXNlOw0KCX0NCn0N Cg0KY2xhc3Mgc21kX2RaaXB7DQoJdmFyICRmaWxlbmFtZTsNCgl2YXIgJG92ZXJ3cml0ZTsN CgkNCgl2YXIgJHppcFNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDNceDA0IjsgLy8gbG9jYWwg ZmlsZSBoZWFkZXIgc2lnbmF0dXJlDQoJdmFyICRkaXJTaWduYXR1cmUgPSAiXHg1MFx4NGJc eDAxXHgwMiI7IC8vIGNlbnRyYWwgZGlyIGhlYWRlciBzaWduYXR1cmUNCgl2YXIgJGRpclNp Z25hdHVyZUU9ICJceDUwXHg0Ylx4MDVceDA2IjsgLy8gZW5kIG9mIGNlbnRyYWwgZGlyIHNp Z25hdHVyZQ0KCXZhciAkZmlsZXNfY291bnQgID0gMDsNCgl2YXIgJGZoOw0KCQ0KCUZ1bmN0 aW9uIHNtZF9kWmlwKCRmaWxlbmFtZSwgJG92ZXJ3cml0ZT10cnVlKXsNCgkJJHRoaXMtPmZp bGVuYW1lICA9ICRmaWxlbmFtZTsNCgkJJHRoaXMtPm92ZXJ3cml0ZSA9ICRvdmVyd3JpdGU7 DQoJfQ0KCUZ1bmN0aW9uIGFkZERpcigkZGlybmFtZSwgJGZpbGVDb21tZW50cz0nJyl7DQoJ CWlmKHN1YnN0cigkZGlybmFtZSwgLTEpICE9ICcvJykNCgkJCSRkaXJuYW1lIC49ICcvJzsN CgkJJHRoaXMtPmFkZEZpbGUoZmFsc2UsICRkaXJuYW1lLCAkZmlsZUNvbW1lbnRzKTsNCgl9 DQoJRnVuY3Rpb24gYWRkRmlsZSgkZmlsZW5hbWUsICRjZmlsZW5hbWUsICRmaWxlQ29tbWVu dHM9JycsICRkYXRhPWZhbHNlKXsNCgkJaWYoISgkZmggPSAmJHRoaXMtPmZoKSkNCgkJCSRm aCA9IGZvcGVuKCR0aGlzLT5maWxlbmFtZSwgJHRoaXMtPm92ZXJ3cml0ZT8nd2InOidhK2In KTsNCgkJDQoJCS8vICRmaWxlbmFtZSBjYW4gYmUgYSBsb2NhbCBmaWxlIE9SIHRoZSBkYXRh IHdpY2ggd2lsbCBiZSBjb21wcmVzc2VkDQoJCWlmKHN1YnN0cigkY2ZpbGVuYW1lLCAtMSk9 PScvJyl7DQoJCQkkZGV0YWlsc1sndW5jc2l6ZSddID0gMDsNCgkJCSRkYXRhID0gJyc7DQoJ CX0NCgkJZWxzZWlmKGZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpew0KCQkJJGRldGFpbHNbJ3Vu Y3NpemUnXSA9IGZpbGVzaXplKCRmaWxlbmFtZSk7DQoJCQkkZGF0YSA9IGZpbGVfZ2V0X2Nv bnRlbnRzKCRmaWxlbmFtZSk7DQoJCX0NCgkJZWxzZWlmKCRmaWxlbmFtZSl7DQoJCQllY2hv ICI8Yj5DYW5ub3QgYWRkICRmaWxlbmFtZS4gRmlsZSBub3QgZm91bmQ8L2I+PGJyPiI7DQoJ CQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZWxzZXsNCgkJCSRkZXRhaWxzWyd1bmNzaXplJ10g PSBzdHJsZW4oJGZpbGVuYW1lKTsNCgkJCS8vIERBVEEgaXMgZ2l2ZW4uLiB1c2UgaXQhIDp8 DQoJCX0NCg0KCQkvLyBpZiBkYXRhIHRvIGNvbXByZXNzIGlzIHRvbyBzbWFsbCwganVzdCBz dG9yZSBpdA0KCQlpZigkZGV0YWlsc1sndW5jc2l6ZSddIDwgMjU2KXsNCgkJCSRkZXRhaWxz Wydjb21zaXplJ10gPSAkZGV0YWlsc1sndW5jc2l6ZSddOw0KCQkJJGRldGFpbHNbJ3ZuZWVk ZWQnXSA9IDEwOw0KCQkJJGRldGFpbHNbJ2NtZXRob2QnXSA9IDA7DQoJCQkkemRhdGEgPSAm JGRhdGE7DQoJCX0NCgkJZWxzZXsgLy8gb3RoZXJ3aXNlLCBjb21wcmVzcyBpdA0KCQkJJHpk YXRhID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJCQkkemRhdGEgPSBzdWJzdHIoc3Vic3RyKCR6 ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7IC8vIGZpeCBjcmMgYnVnICh0aGFu a3MgdG8gRXJpYyBNdWVsbGVyKQ0KCQkJJGRldGFpbHNbJ2NvbXNpemUnXSA9IHN0cmxlbigk emRhdGEpOw0KCQkJJGRldGFpbHNbJ3ZuZWVkZWQnXSA9IDEwOw0KCQkJJGRldGFpbHNbJ2Nt ZXRob2QnXSA9IDg7DQoJCX0NCgkJDQoJCSRkZXRhaWxzWydiaXRmbGFnJ10gPSAwOw0KCQkk ZGV0YWlsc1snY3JjXzMyJ10gID0gY3JjMzIoJGRhdGEpOw0KCQkNCgkJLy8gQ29udmVydCBk YXRlIGFuZCB0aW1lIHRvIERPUyBGb3JtYXQsIGFuZCBzZXQgdGhlbg0KCQkkbGFzdG1vZF90 aW1lUyAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdzJyk+PTMyP2RhdGUoJ3MnKS0zMjpkYXRl KCdzJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX3RpbWVNICA9IHN0 cl9wYWQoZGVjYmluKGRhdGUoJ2knKSksIDYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxh c3Rtb2RfdGltZUggID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnSCcpKSwgNSwgJzAnLCBTVFJf UEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlRCAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdk JykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9kX2RhdGVNICA9IHN0cl9w YWQoZGVjYmluKGRhdGUoJ20nKSksIDQsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJJGxhc3Rt b2RfZGF0ZVkgID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnWScpLTE5ODApLCA3LCAnMCcsIFNU Ul9QQURfTEVGVCk7DQoJCQ0KCQkjIGVjaG8gIk1vZFRpbWU6ICRsYXN0bW9kX3RpbWVTLSRs YXN0bW9kX3RpbWVNLSRsYXN0bW9kX3RpbWVIICgiLmRhdGUoInMgSCBIIikuIilcbiI7DQoJ CSMgZWNobyAiTW9kRGF0ZTogJGxhc3Rtb2RfZGF0ZUQtJGxhc3Rtb2RfZGF0ZU0tJGxhc3Rt b2RfZGF0ZVkgKCIuZGF0ZSgiZCBtIFkiKS4iKVxuIjsNCgkJJGRldGFpbHNbJ21vZHRpbWUn XSA9IGJpbmRlYygiJGxhc3Rtb2RfdGltZUgkbGFzdG1vZF90aW1lTSRsYXN0bW9kX3RpbWVT Iik7DQoJCSRkZXRhaWxzWydtb2RkYXRlJ10gPSBiaW5kZWMoIiRsYXN0bW9kX2RhdGVZJGxh c3Rtb2RfZGF0ZU0kbGFzdG1vZF9kYXRlRCIpOw0KCQkNCgkJJGRldGFpbHNbJ29mZnNldCdd ID0gZnRlbGwoJGZoKTsNCgkJZndyaXRlKCRmaCwgJHRoaXMtPnppcFNpZ25hdHVyZSk7DQoJ CWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1sndm5lZWRlZCddKSk7IC8vIHZlcnNp b25fbmVlZGVkDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snYml0ZmxhZydd KSk7IC8vIGdlbmVyYWxfYml0X2ZsYWcNCgkJZndyaXRlKCRmaCwgcGFjaygncycsICRkZXRh aWxzWydjbWV0aG9kJ10pKTsgLy8gY29tcHJlc3Npb25fbWV0aG9kDQoJCWZ3cml0ZSgkZmgs IHBhY2soJ3MnLCAkZGV0YWlsc1snbW9kdGltZSddKSk7IC8vIGxhc3Rtb2RfdGltZQ0KCQlm d3JpdGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ21vZGRhdGUnXSkpOyAvLyBsYXN0bW9k X2RhdGUNCgkJZndyaXRlKCRmaCwgcGFjaygnVicsICRkZXRhaWxzWydjcmNfMzInXSkpOyAg Ly8gY3JjLTMyDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ0knLCAkZGV0YWlsc1snY29tc2l6ZSdd KSk7IC8vIGNvbXByZXNzZWRfc2l6ZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdJJywgJGRldGFp bHNbJ3VuY3NpemUnXSkpOyAvLyB1bmNvbXByZXNzZWRfc2l6ZQ0KCQlmd3JpdGUoJGZoLCBw YWNrKCdzJywgc3RybGVuKCRjZmlsZW5hbWUpKSk7ICAgLy8gZmlsZV9uYW1lX2xlbmd0aA0K CQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgMCkpOyAgLy8gZXh0cmFfZmllbGRfbGVuZ3RoDQoJ CWZ3cml0ZSgkZmgsICRjZmlsZW5hbWUpOyAgICAvLyBmaWxlX25hbWUNCgkJLy8gaWdub3Jp bmcgZXh0cmFfZmllbGQNCgkJZndyaXRlKCRmaCwgJHpkYXRhKTsNCgkJDQoJCS8vIEFwcGVu ZCBpdCB0byBjZW50cmFsIGRpcg0KCQkkZGV0YWlsc1snZXh0ZXJuYWxfYXR0cmlidXRlcydd ICA9IChzdWJzdHIoJGNmaWxlbmFtZSwgLTEpPT0nLycmJiEkemRhdGEpPzE2OjMyOyAvLyBE aXJlY3Rvcnkgb3IgZmlsZSBuYW1lDQoJCSRkZXRhaWxzWydjb21tZW50cyddICAgICAgICAg ICAgID0gJGZpbGVDb21tZW50czsNCgkJJHRoaXMtPmFwcGVuZENlbnRyYWxEaXIoJGNmaWxl bmFtZSwgJGRldGFpbHMpOw0KCQkkdGhpcy0+ZmlsZXNfY291bnQrKzsNCgl9DQoJRnVuY3Rp b24gc2V0RXh0cmEoJGZpbGVuYW1lLCAkcHJvcGVydHksICR2YWx1ZSl7DQoJCSR0aGlzLT5j ZW50cmFsZGlyc1skZmlsZW5hbWVdWyRwcm9wZXJ0eV0gPSAkdmFsdWU7DQoJfQ0KCUZ1bmN0 aW9uIHNhdmUoJHppcENvbW1lbnRzPScnKXsNCgkJaWYoISgkZmggPSAmJHRoaXMtPmZoKSkN CgkJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlbmFtZSwgJHRoaXMtPm92ZXJ3cml0ZT8ndyc6 J2ErJyk7DQoJCQ0KCQkkY2RyZWMgPSAiIjsNCgkJZm9yZWFjaCgkdGhpcy0+Y2VudHJhbGRp cnMgYXMgJGZpbGVuYW1lPT4kY2Qpew0KCQkJJGNkcmVjIC49ICR0aGlzLT5kaXJTaWduYXR1 cmU7DQoJCQkkY2RyZWMgLj0gIlx4MFx4MCI7ICAgICAgICAgICAgICAgICAgLy8gdmVyc2lv biBtYWRlIGJ5DQoJCQkkY2RyZWMgLj0gcGFjaygndicsICRjZFsndm5lZWRlZCddKTsgLy8g dmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJJGNkcmVjIC49ICJceDBceDAiOyAgICAg ICAgICAgICAgICAgIC8vIGdlbmVyYWwgYml0IGZsYWcNCgkJCSRjZHJlYyAuPSBwYWNrKCd2 JywgJGNkWydjbWV0aG9kJ10pOyAvLyBjb21wcmVzc2lvbiBtZXRob2QNCgkJCSRjZHJlYyAu PSBwYWNrKCd2JywgJGNkWydtb2R0aW1lJ10pOyAvLyBsYXN0bW9kIHRpbWUNCgkJCSRjZHJl YyAuPSBwYWNrKCd2JywgJGNkWydtb2RkYXRlJ10pOyAvLyBsYXN0bW9kIGRhdGUNCgkJCSRj ZHJlYyAuPSBwYWNrKCdWJywgJGNkWydjcmNfMzInXSk7ICAvLyBjcmMzMg0KCQkJJGNkcmVj IC49IHBhY2soJ1YnLCAkY2RbJ2NvbXNpemUnXSk7IC8vIGNvbXByZXNzZWQgZmlsZXNpemUN CgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWyd1bmNzaXplJ10pOyAvLyB1bmNvbXByZXNz ZWQgZmlsZXNpemUNCgkJCSRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRmaWxlbmFtZSkp OyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAg ICAgICAgICAgICAgICAvLyBleHRyYSBmaWVsZCBsZW5ndGgNCgkJCSRjZHJlYyAuPSBwYWNr KCd2Jywgc3RybGVuKCRjZFsnY29tbWVudHMnXSkpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3Ro DQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBkaXNrIG51bWJlciBzdGFydA0KCQkJ JGNkcmVjIC49IHBhY2soJ3YnLCAwKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJ CQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnZXh0ZXJuYWxfYXR0cmlidXRlcyddKTsgLy8g aW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsn b2Zmc2V0J10pOyAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwgaGVhZGVyDQoJCQkkY2Ry ZWMgLj0gJGZpbGVuYW1lOw0KCQkJJGNkcmVjIC49ICRjZFsnY29tbWVudHMnXTsNCgkJfQ0K CQkkYmVmb3JlX2NkID0gZnRlbGwoJGZoKTsNCgkJZndyaXRlKCRmaCwgJGNkcmVjKTsNCgkJ DQoJCS8vIGVuZCBvZiBjZW50cmFsIGRpcg0KCQlmd3JpdGUoJGZoLCAkdGhpcy0+ZGlyU2ln bmF0dXJlRSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAwKSk7IC8vIG51bWJlciBvZiB0 aGlzIGRpc2sNCgkJZndyaXRlKCRmaCwgcGFjaygndicsIDApKTsgLy8gbnVtYmVyIG9mIHRo ZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeQ0KCQlmd3Jp dGUoJGZoLCBwYWNrKCd2JywgJHRoaXMtPmZpbGVzX2NvdW50KSk7IC8vIHRvdGFsICMgb2Yg ZW50cmllcyAib24gdGhpcyBkaXNrIiANCgkJZndyaXRlKCRmaCwgcGFjaygndicsICR0aGlz LT5maWxlc19jb3VudCkpOyAvLyB0b3RhbCAjIG9mIGVudHJpZXMgb3ZlcmFsbCANCgkJZndy aXRlKCRmaCwgcGFjaygnVicsIHN0cmxlbigkY2RyZWMpKSk7ICAgICAvLyBzaXplIG9mIGNl bnRyYWwgZGlyIA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdWJywgJGJlZm9yZV9jZCkpOyAgICAg ICAgIC8vIG9mZnNldCB0byBzdGFydCBvZiBjZW50cmFsIGRpcg0KCQlmd3JpdGUoJGZoLCBw YWNrKCd2Jywgc3RybGVuKCR6aXBDb21tZW50cykpKTsgLy8gLnppcCBmaWxlIGNvbW1lbnQg bGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICR6aXBDb21tZW50cyk7DQoJCQ0KCQlmY2xvc2UoJGZo KTsNCgl9DQoJDQoJLy8gUHJpdmF0ZQ0KCUZ1bmN0aW9uIGFwcGVuZENlbnRyYWxEaXIoJGZp bGVuYW1lLCRwcm9wZXJ0aWVzKXsNCgkJJHRoaXMtPmNlbnRyYWxkaXJzWyRmaWxlbmFtZV0g PSAkcHJvcGVydGllczsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K Ly8gUGx1Z2luLXNwZWNpZmljIHJlcGxhY2VtZW50IHN0cmluZ3MgLSBsb2NhbGlzZSBhcyBy ZXF1aXJlZA0KZnVuY3Rpb24gc21kX2F0X2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkg ew0KCSRsYW5nID0gYXJyYXkoDQoJCSdhY3Rpb25zJyA9PiAnQWN0aW9ucycsDQoJCSdhbGxv d2VkX3NraW5zJyA9PiAnQWxsb3dlZCB0aGVtZXM6JywNCgkJJ2FwcGx5X3NraW4nID0+ICdB cHBseSB0aGlzIHRoZW1lJywNCgkJJ2F2YWlsX3RpdGxlJyA9PiAnQXZhaWxhYmxlIHRoZW1l cycsDQoJCSdiYXNlZF9vbicgPT4gJyAoYmFzZWQgb24ge3NraW59KScsDQoJCSdieScgPT4g JyBieSAnLA0KCQknY19iemlwMicgPT4gJ0JaaXAnLA0KCQknY19nemlwJyA9PiAnR1ppcCcs DQoJCSdjX3RhcicgPT4gJ1RhcicsDQoJCSdjX3ppcCcgPT4gJ1ppcCcsDQoJCSdjYXNlX3Nv cnQnID0+ICdDYXNlLXNlbnNpdGl2ZSB0aGVtZSBsaXN0OicsDQoJCSdjbGVhcicgPT4gJ25v bmUnLA0KCQknY2xvbmUnID0+ICdCYXNlJywNCgkJJ2NvbmZpcm0nID0+ICdHbycsDQoJCSdj b3JlX3RoZW1lJyA9PiAnQ2Fubm90IGRlbGV0ZSB7c2tpbn06IGNvcmUgdGhlbWUnLA0KCQkn Y29yZV90aGVtZV9maWxlJyA9PiAnQ2Fubm90IGRlbGV0ZSBmaWxlcyBmcm9tIHtza2lufTog Y29yZSB0aGVtZScsDQoJCSdjcnVzaF90eXBlJyA9PiAnRXhwb3J0IGNvbXByZXNzaW9uIHR5 cGU6JywNCgkJJ2NydXNoX2Zvcm1hdCcgPT4gJ0Zvcm1hdDonLA0KCQknc3NjJyA9PiAnU3R5 bGVwbGF0ZXMnLA0KCQknY3NzJyA9PiAnU3R5bGVzJywNCgkJJ2RlbGV0ZV9jb25maXJtJyA9 PiAnUmVhbGx5IGRlbGV0ZSB0aGVtZSB7c2tpbn0/JywNCgkJJ2RlbGV0ZV9mYWlsZWQnID0+ ICdEZWxldGUgZmFpbGVkLiBUcnkgcmVtb3ZpbmcgaXQgbWFudWFsbHknLA0KCQknZWRpdF9s YmwnID0+ICdUaGVtZSBlZGl0b3InLA0KCQknZW1wdHlfaW5mbycgPT4gJ1lvdSBzaG91bGQg Y2hvb3NlIGEgZmlsZSBmaXJzdCA6LSknLA0KCQknZXhwb3J0JyA9PiAnRXhwb3J0JywNCgkJ J2ZpbGVuYW1lX2Zvcm1hdCcgPT4gJ0ZpbGVuYW1lIGZvcm1hdDogJywNCgkJJ2ZpbGVfbm90 X2RlbGV0ZWQnID0+ICdGaWxlIHtuYW1lfSAnLnN0cm9uZygibm90IikuJyBkZWxldGVkJywN CgkJJ2ZpbGVfc2F2ZWQnID0+ICdGaWxlIHtuYW1lfSBzYXZlZCcsDQoJCSdmaW5kX3RoZW1l JyA9PiAnQnJvd3NlIHRoZW1lcycsDQoJCSdnbG9iYWxfc2tpbicgPT4gJ0RlZmF1bHQgdGhl bWU6JywNCgkJJ2hlbHBfbGluaycgPT4gJyg8YSBocmVmPSJ7bGlua30iPkhlbHA8L2E+KScs DQoJCSdpbWcnID0+ICdJbWFnZXMnLA0KCQknaW1wb3J0X2ZhaWxlZCcgPT4gJ0luc3RhbGxh dGlvbiBmYWlsZWQgOi0oIENoZWNrIHRoZSBhcmNoaXZlIHN0cnVjdHVyZScsDQoJCSdpbXBv cnRfc3VjY2VzcycgPT4gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVsLiBGaWxlcyBleHRyYWN0 ZWQ6IHtudW19JywNCgkJJ2ltcG9ydF9vaycgPT4gJ0luc3RhbGxhdGlvbiBzdWNjZXNzZnVs LicsDQoJCSdpbnN0YWxsX3NraW4nID0+ICdJbnN0YWxsIHRoZW1lJywNCgkJJ2ludmFsaWRf ZmlsZScgPT4gJ1JvZ3VlIGZpbGUgZGV0ZWN0ZWQ6IHtuYW1lfScsDQoJCSdpc19nbG9iYWwn ID0+ICcgW0RFRkFVTFRdJywNCgkJJ2pzJyA9PiAnU2NyaXB0cycsDQoJCSdsYXlvdXQnID0+ ICdMYXlvdXQgbWV0aG9kOicsDQoJCSdsYXlvdXRfbGlzdCcgPT4gJ0xpc3QnLA0KCQknbGF5 b3V0X2dyaWQnID0+ICdHcmlkJywNCgkJJ2xpc3RfdGl0bGUnID0+ICdJbnN0YWxsZWQgdGhl bWVzJywNCgkJJ21hbmFnZV9sYmwnID0+ICdUaGVtZSBtYW5hZ2VyJywNCgkJJ21rZGlyX2Zh aWxlZCcgPT4gJ0Nhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciBmaWxlIHtuYW1lfS4gVHJ5 IG1hbnVhbGx5IGNyZWF0aW5nIGl0LicsDQoJCSduYW1lX2VtcHR5JyA9PiAnWW91IHNob3Vs ZCBnaXZlIHlvdXIgdGhlbWUgYSBuYW1lIDotKScsDQoJCSduZXcnID0+ICdDcmVhdGUgbmV3 IHRoZW1lJywNCgkJJ25ld19maWxlJyA9PiAnTmV3IGZpbGUnLA0KCQknbmV3X2Nsb25lc2tp bicgPT4gJ05hbWUgb2YgY29weTonLA0KCQknbmV3X3NraW4nID0+ICdUaGVtZSBuYW1lOics DQoJCSdvdGhlcl9maWxlcycgPT4gJ090aGVycycsDQoJCSdwaHAnID0+ICdDb2RlJywNCgkJ J3Blcl9ncm91cCcgPT4gJ09uZSB0aGVtZSBwZXIgcHJpdmlsZWdlIGxldmVsJywNCgkJJ3Bl cl9zaXRlJyA9PiAnT25lIHRoZW1lIGZvciBldmVyeW9uZScsDQoJCSdwZXJfdXNlcicgPT4g J09uZSB0aGVtZSBwZXIgdXNlcicsDQoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5j ZXMgZGVsZXRlZCcsDQoJCSdwcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0 YWxsZWQnLA0KCQkncHJlZnNfbm90X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBp bnN0YWxsZWQuJywNCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2 YWlsYWJsZS4nLA0KCQkncHJlZnNfc29tZV9leHBsYWluJyA9PiAnSXQgaXMgZWl0aGVyIGJl Y2F1c2UgdGhpcyBpcyBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZScuYnIuJ3BsdWdpbiB0 byBvbmUgeW91IGhhZCBiZWZvcmUgb3IgdGhlIHByZWZlcmVuY2VzJy5ici4naGF2ZSBiZWNv bWUgY29ycnVwdCBzb21laG93LicsDQoJCSdwcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9v c2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2lu c3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3Rp bmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsDQoJCSdwcmVmc190aXRsZScgPT4gJ0FkbWlu IHRoZW1lIHByZWZlcmVuY2VzJywNCgkJJ3JlbmFtZV9mYWlsZWQnID0+ICdSZW5hbWUgZmFp bGVkJywNCgkJJ3JlbmFtZWQnID0+ICdSZW5hbWVkIHRvIHtuYW1lfScsDQoJCSdzZXQnID0+ ICdTZXQnLA0KCQknc2V0dXAnID0+ICdQcmVmZXJlbmNlcycsDQoJCSdza2luX2dibCcgPT4g J1RoZW1lJywNCgkJJ3NraW5fY2xvbmVkJyA9PiAnVGhlbWUgZXh0ZW5kZWQgYXMge25hbWV9 JywNCgkJJ3NraW5fY3JlYXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBjcmVhdGVkJywNCgkJJ3Nr aW5fZGVsZXRlZCcgPT4gJ1RoZW1lIHtuYW1lfSBkZWxldGVkJywNCgkJJ3NraW5fZXhpc3Rz JyA9PiAnVGhlbWUge25hbWV9IGFscmVhZHkgZXhpc3RzJywNCgkJJ3NraW5fZmlsZXMnID0+ ICdUaGVtZSBmaWxlcycsDQoJCSdza2luX2dyb3VwcycgPT4gJ0dyb3VwIHRoZW1lczonLA0K CQknc2tpbl9pbWFnZXMnID0+ICdUaGVtZSBpbWFnZXMnLA0KCQknc2tpbl9saXN0JyA9PiAn VGhlbWUgbGlzdCcsDQoJCSdza2luX2dyaWQnID0+ICdUaGVtZSBncmlkJywNCgkJJ3NraW5f bm90X2NyZWF0ZWQnID0+ICdUaGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGNyZWF0ZWQuIFRy eSBtYW51YWxseSBtYWtpbmcgdGhlIGRpcmVjdG9yeScsDQoJCSdza2luX25vdF9mb3VuZCcg PT4gJ1RoZSB0aGVtZSB7bmFtZX0gY291bGQgbm90IGJlIGZvdW5kJywNCgkJJ3NraW5fc3dp dGNoZWQnID0+ICdUaGVtZSBzd2l0Y2hlZCB0byB7c2tpbn0nLA0KCQknc2tpbl9zeXN0ZW0n ID0+ICdUaGVtZSBzeXN0ZW06JywNCgkJJ3NraW5uZXInID0+ICdUaGVtZScsDQoJCSdzdXBw b3J0ZWRfaW1wb3J0JyA9PiAnU3VwcG9ydGVkIGltcG9ydCB0eXBlczoge3R5cGVzfScsDQoJ CSd0YWJfbmFtZScgPT4gJ0FkbWluIHRoZW1lcycsDQoJCSd0aHVtYnNpemUnID0+ICdUaHVt YiBkaW1lbnNpb25zOicsDQoJCSd0aW1lcycgPT4gJyB4ICcsDQoJCSd1bnN1cHBvcnRlZF9j b21wcmVzc2lvbnR5cGUnID0+ICd7Y3J1c2h9IGlzIG5vdCBhIHN1cHBvcnRlZCBjb21wcmVz c2lvbiBmb3JtYXQgaW4gdGhpcyBpbnN0YWxsYXRpb24nLA0KCQkndW5zdXBwb3J0ZWRfZmls ZXR5cGUnID0+ICdGaWxlIGlzIG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlJywNCgkJJ3Vuc3Vw cG9ydGVkX2Z1ZGdlJyA9PiAnOiBoaXQgU2F2ZSBhZ2FpbiB0byBzdG9yZSBhbnl3YXknLA0K CQkndXBkYXRlJyA9PiAnVXBkYXRlJywNCgkJJ3VwbG9hZF9mYWlsZWQnID0+ICdJbWFnZSBj b3VsZCBub3QgYmUgdXBsb2FkZWQnLA0KCQkndXBsb2FkX2ltYWdlJyA9PiAnVXBsb2FkIGlt YWdlJywNCgkJJ3VwbG9hZF9zdWNjZXNzJyA9PiAnSW1hZ2UgdXBsb2FkZWQgc3VjY2Vzc2Z1 bGx5JywNCgkJJ3ZlcnNpb24nID0+ICd2JywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1sk d2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6 IjUiO3M6NToiZmxhZ3MiO3M6MToiMyI7czo0OiJoZWxwIjtzOjI1ODcxOiI8ZGl2IGlkPSJz bWRfaGVscCI+CgoJPGgxIGlkPSJ0b3AiPnNtZF9hZG1pbl90aGVtZXM8L2gxPgoKCTxwPklu c3RhbGwsIG1hbmFnZSwgZWRpdCBhbmQgc3dpdGNoIGFkbWluLXNpZGUgdGhlbWVzIHRoZW4g c2hhcmUgdGhlbSB3aXRoIHRoZSBjb21tdW5pdHkuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMi PkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSBhbmQgRWRpdCBhZG1pbi1zaWRl IHRoZW1lczwvbGk+CgkJPGxpPkVtcGxveSBpbWFnZXMsIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+LCBKUywgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+L1BIUCAoZm9y IGNoYW5naW5nIG1hc3RoZWFkLCBoZWFkZXIgJmFtcDsgZm9vdGVyKSBpbiB5b3VyIHRoZW1l PC9saT4KCQk8bGk+VXNlIGNvbnN0YW50cyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGZpbGVzPC9saT4KCQk8bGk+QmFzZSB5b3VyIHRoZW1lIG9uIGFuIGV4aXN0 aW5nIHRoZW1lIHRvIHR3ZWFrIGl0IHRvIHlvdXIgdGFzdGU8L2xpPgoJCTxsaT5FeHBvcnQg YSB0aGVtZSBwYWNrYWdlIGZvciBkaXN0cmlidXRpb24gdG8gdGhlIGNvbW11bml0eSBpbiBl aXRoZXIgLnRhciwgLnRneiwgLmJ6MiBvciAuemlwIGZvcm1hdDwvbGk+CgkJPGxpPkltcG9y dCAvIGluc3RhbGwgb3RoZXIgdGhlbWVzIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90ZXh0 Z2FyZGVuLm9yZy9hZG1pbmlzdHJhdGlvbi10aGVtZXMiPmNvbW11bml0eSByZXBvc2l0b3J5 PC9hPjwvbGk+CgkJPGxpPkFkbWluaXN0cmF0b3IgY2FuIHNldCBhIGRlZmF1bHQgdGhlbWUg Zm9yIGFsbCB1c2Vycywgb3IgZW5hYmxlIHBlci11c2VyIC8gcGVyLXJvbGUgdGhlbWVzPC9s aT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3IiPkF1dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0i aHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJ PGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJ PHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJodHRwOi8vdGV4 dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTA5Ni9zbWRfYWRtaW5fdGhlbWVzIj50ZXh0cGF0dGVy bi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5z b2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxsIGFu ZCBlbmFibGUgdGhlIHBsdWdpbi4gQSBuZXcgdGFiIGxhYmVsbGVkIDxlbT5FeHRlbnNpb25z IC0mZ3Q7IEFkbWluIHRoZW1lczwvZW0+IGlzIGNyZWF0ZWQuIDxzdHJvbmc+T25seSBwdWJs aXNoZXJzIHdpbGwgc2VlIHRoaXMgdGFiPC9zdHJvbmc+LjwvcD4KCgk8cD5UaGUgcGx1Z2lu IHNob3VsZCBhdXRvbWF0aWNhbGx5IGluc3RhbGwgdGhlIHByZWZlcmVuY2VzIGZvciB5b3Uu IENsaWNrICYjODIxNjtQcmVmZXJlbmNlcyYjODIxNzsgZnJvbSB0aGUgPGVtPkV4dGVuc2lv bnMgLSZndDsgQWRtaW4gdGhlbWVzPC9lbT4gdGFiIG9yIDxlbT5PcHRpb25zPC9lbT4gZnJv bSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyB0YWIgdG8gYWx0ZXIsIGRlbGV0ZSBvciByZWlu c3RhbGwgdGhlbS48L3A+CgoJPHA+VmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zMDk1MiI+Zm9ydW0gdGhyZWFkPC9h PiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhlcndp c2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gdW5pbnN0YWxsLCBzaW1wbHkgZGVsZXRl IHRoZSBwbHVnaW4gZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyBwYWdlLiBUaGUgcHJl ZmVyZW5jZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJlbW92ZWQuIFBsZWFzZSBiZSBhd2Fy ZSB0aGF0IHJlbW92aW5nIHRoZSBwbHVnaW4gZG9lcyA8c3Ryb25nPm5vdCByZW1vdmUgYW55 IHRoZW1lcyB5b3UgaGF2ZSBpbnN0YWxsZWQsIG5vciBkb2VzIGl0IHJlbW92ZSBwZXItdXNl ciB0aGVtZSBwcmVmZXJlbmNlczwvc3Ryb25nPi4gUGVyLXVzZXIgcHJlZnMgd2lsbCBzaW1w bHkgYmUgaWdub3JlZCB3aGVuIHRoZSBwbHVnaW4gaXMgZGVsZXRlZC48L3A+CgoJPGgyIGlk PSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPk9uIHRoZSA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBB ZG1pbiB0aGVtZXM8L2VtPiB0YWIgaXMgYSBsaXN0IG9yIGdyaWQgY29udGFpbmluZyBpbnN0 YWxsZWQgdGhlbWVzLiBPdXQgb2YgdGhlIGJveCwgdGhlcmUgd2lsbCBiZSB0d28gYXZhaWxh YmxlOiA8ZW0+Y2xhc3NpYzwvZW0+IGFuZCA8ZW0+cmVtb3JhPC9lbT4uIDxzdHJvbmc+SXQm IzgyMTc7cyBhZHZpc2FibGUgbm90IHRvIGNoYW5nZSB0aGVzZSB0aGVtZXM8L3N0cm9uZz4g c28geW91IGNhbiBhbHdheXMgZ28gYmFjayB0byB0aGVtIGlmIGV2ZXJ5dGhpbmcgZ29lcyBz aWRld2F5cy4gUGx1cyBpdCYjODIxNztzIGEgdmVyeSB1c2VmdWwgc3RhcnRpbmcgcG9pbnQg ZnJvbSB3aGljaCB0byA8YSBocmVmPSIjY2xvbmUiPmJhc2U8L2E+IGEgPGEgaHJlZj0iI25l dyI+bmV3IHRoZW1lPC9hPi48L3A+CgoJPHA+SW4gdGhlIGxpc3QgbGF5b3V0LCB0aGUgY29s dW1ucyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlRoZW1lPC9z cGFuPiA6IFRoZSBuYW1lIG9mIHRoZSB0aGVtZSBhbmQgKG9wdGlvbmFsKSB0aHVtYm5haWwg YXNzaWduZWQgdG8gaXQuIENsaWNrIHRvIDxhIGhyZWY9IiNzd2l0Y2giPmFjdGl2YXRlPC9h PiB0aGUgdGhlbWUuIElmIHRoZSB0aGVtZSBpcyBiYXNlZCBvbiBhbm90aGVyIHVzZXImIzgy MTc7cyB0aGVtZSwgdGhpcyBkZXBlbmRlbmN5IHdpbGwgYmUgc2hvd24gaW4gcGFyZW50aGVz ZXMgYWZ0ZXIgdGhlIHRoZW1lIG5hbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ QXV0aG9yPC9zcGFuPiA6IFlvdSEgTGlua2VkIHRvIHlvdXIgd2ViIHNpdGUgaWYgeW91IHN1 cHBseSBpdCBpbiB5b3VyIDxhIGhyZWY9IiNhYm91dCI+TWFuaWZlc3Q8L2E+PC9saT4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlZlcnNpb248L3NwYW4+IDogVGhlbWUgdmVyc2lvbiBu dW1iZXIgaW4gPGNvZGU+bWFqb3IubWlub3Iuc3VicmV2PC9jb2RlPiBub3RhdGlvbi4gSWYg YSBuZXdlciB2ZXJzaW9uIG9mIGEgdGhlbWUgaXMgYXZhaWxhYmxlIGZyb20gVGV4dGdhcmRl biwgdGhlIHZlcnNpb24gbnVtYmVyIHdpbGwgYmUgaHlwZXJsaW5rZWQgdG8gdGhlIHRoZW1l IG9uIFRleHRnYXJkZW4gc28geW91IG1heSBkb3dubG9hZC9pbnN0YWxsIGl0LiBUaGUgdmVy c2lvbnMgYXJlIGNoZWNrZWQsIGF0IG1vc3QsIG9uY2UgZXZlcnkgMjQgaG91cnMgdG8gYXZv aWQgaGFtbWVyaW5nIHRoZSBzZXJ2ZXI8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ RGVzY3JpcHRpb248L3NwYW4+IDogQnJpZWYgb25lLSBvciB0d28tbGluZXIgZXhwbGFpbmlu ZyB5b3VyIHRoZW1lLiBJZiB5b3UgaGF2ZSBvZmZlcmVkIGEgaGVscCA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPiBpbiB5b3VyIG1hbmlmZXN0LCBpdCB3aWxsIGJlIGxpbmtlZCBo ZXJlIGFzIHdlbGw8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QWN0aW9uczwvc3Bh bj4gOiBBY3Rpb25zIHRvIHBlcmZvcm0gb24gZWFjaCB0aGVtZQoJPHVsPgoJCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+W05ldyB0aGVtZV08L3NwYW4+IDogPGEgaHJlZj0iI25ldyI+Q3Jl YXRlPC9hPiBhIG5ldyBibGFuaywgZW1wdHkgZGlyZWN0b3J5IHJlYWR5IGZvciB5b3VyIHRo ZW1lLiBObyBzcGFjZXMgLyBvZGQgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCBpbiB0aGUgbmFt ZSBhbmQgaXQgbXVzdCBub3Qgc3RhcnQgd2l0aCBhIG51bWJlcjwvbGk+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5bRWRpdF08L3NwYW4+IDogPGEgaHJlZj0iI2VkaXRfdGhlbWUiPkVk aXQ8L2E+IHRoZSB2YXJpb3VzIGRldGFpbHMsIGZpbGVzIGFuZCBjb250ZW50IHdpdGhpbiB0 aGUgdGhlbWU8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+W0Jhc2VdPC9zcGFuPiA6 IDxhIGhyZWY9IiNjbG9uZSI+RXh0ZW5kPC9hPiBvbmUgb2YgdGhlIGV4aXN0aW5nIHRoZW1l cyB0byBtYWtlIHlvdXIgb3duIGNoYW5nZXMgdW5kZXIgYSBuZXcgbmFtZTwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJhdG5tIj5bRXhwb3J0XTwvc3Bhbj4gOiA8YSBocmVmPSIjZXhwb3J0 Ij5TYXZlPC9hPiB0aGUgdGhlbWUgcGFja2FnZSB0byB5b3VyIGhhcmQgZHJpdmUgZm9yIGRp c3RyaWJ1dGlvbi9iYWNrdXAgaW4geW91ciBjaG9zZW4gY29tcHJlc3Npb24gZm9ybWF0PC9s aT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPltEZWxldGVdPC9zcGFuPiA6IENvbXBsZXRl bHkgPGEgaHJlZj0iI2RlbGV0ZSI+cmVtb3ZlPC9hPiB0aGUgdGhlbWUuIE5vdCBhdmFpbGFi bGUgdG8gdGhlIGNvcmUgdGhlbWVzLCBmb3Igb2J2aW91cyByZWFzb25zISBBbHNvIG5vdCBh dmFpbGFibGUgaWYgYSB0aGVtZSBoYXMgYmVlbiB1c2VkIGFzIGEgYmFzaXMgZm9yIGFub3Ro ZXIgdGhlbWUgaW4gdGhlIGN1cnJlbnQgc2l0ZTwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoK CTxwPlRoZSByb3cgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZSBpcyBzaGFkZWQg YW5kIHRoZSBjdXJyZW50IGRlZmF1bHQgdGhlbWUgdGhhdCBpcyBpbiBlZmZlY3QgaXMgaGln aGxpZ2h0ZWQuIFRoZSBncmlkIHZpZXcgaGFzIHBhcnRzIG9mIHRoZSBhYm92ZSBpbmZvcm1h dGlvbiwgbGFpZCBvdXQgc2xpZ2h0bHkgZGlmZmVyZW50bHkuPC9wPgoKCTxoMiBpZD0ic3dp dGNoIj5Td2l0Y2hpbmcgdGhlbWVzPC9oMj4KCgk8cD5BcyB0aGUgYWRtaW5pc3RyYXRvciwg eW91IGNhbiBwbGF5IEdvZCBvdmVyIGV2ZXJ5b25lIGVsc2UmIzgyMTc7cyB0aGVtZXMuIFlv dSBhcmUgZnJlZSB0byBpbnN0YWxsIGFzIG1hbnkgYXMgeW91IHdpc2ggYW5kIHN3aXRjaCBi ZXR3ZWVuIHRoZW0gd2l0aG91dCBhZmZlY3RpbmcgYW55IG90aGVyIGxvZ2lucy4gTm9ib2R5 IGVsc2Ugd2lsbCBldmVuIGtub3cgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBwbHVnaW4uPC9w PgoKCTxwPklmLCBob3dldmVyLCB5b3UgdmlzaXQgdGhlIDxhIGhyZWY9IiNzZXR1cCI+UHJl ZmVyZW5jZXM8L2E+IHBhZ2UgeW91IGNhbiBjb25maWd1cmUgdGhlIHRoZW1lcyB0aGF0IG90 aGVycyB1c2UuIFRoZXJlIGFyZSB0aHJlZSBtZWNoYW5pc21zIHRvIGNob29zZSBmcm9tOjwv cD4KCgk8dWw+CgkJPGxpPkZvcmNlIG9uZSB0aGVtZSBmb3IgYWxsIHVzZXJzIChleGNlcHQg eW91cnNlbGYpPC9saT4KCQk8bGk+Rm9yY2Ugb25lIHRoZW1lIGZvciBlYWNoIHVzZXIgcHJp dmlsZWdlIGxldmVsIChleGNlcHQgeW91cnNlbGYpPC9saT4KCQk8bGk+QWxsb3cgYWxsIHVz ZXJzIChleGNlcHQgeW91cnNlbGYpIHRvIHBpY2sgdGhlaXIgZmF2b3VyaXRlIHRoZW1lIGZy b20gYSBzaG9ydGxpc3QgeW91IGRlZmluZTwvbGk+Cgk8L3VsPgoKCTxwPkF0IGFsbCB0aW1l cywgeW91IGNhbiBjaG9vc2UgYW55IHRoZW1lIHlvdSBwbGVhc2UgZm9yIHlvdXIgb3duIHVz ZS4gVGhpcyBhbGxvd3MgdHJpYWxsaW5nLCB0d2Vha2luZyBhbmQgdGVzdGluZyBvZiB0aGVt ZXMgYmVmb3JlIHVubGVhc2hpbmcgdGhlbSBvbiB5b3VyIHVzZXIgYmFzZS48L3A+CgoJPGgy IGlkPSJzZXR1cCI+VGhlbWUgcHJlZmVyZW5jZXM8L2gyPgoKCTx1bD4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPkNhc2Utc2Vuc2l0aXZlIHRoZW1lIGxpc3Q8L3NwYW4+IDogV2hlbiBz ZXQgdG8gPGNvZGU+WWVzPC9jb2RlPiwgdXBwZXItY2FzZSB0aGVtZSBuYW1lcyB0YWtlIHBy ZWNlZGVuY2Ugb3ZlciBsb3dlciBjYXNlIHRoZW1lIG5hbWVzIGFuZCB3aWxsIGJlIGxpc3Rl ZCBmaXJzdC4gRm9yIGV4YW1wbGUsIDMgdGhlbWUgY2FsbGVkICYjODIxNjtBbmdlbGljJiM4 MjE3OywgJiM4MjE2O2JhcmJhcmljJiM4MjE3OyBhbmQgJiM4MjE2O0NvaGVzaXZlJiM4MjE3 OyB3aWxsIGJlIG9yZGVyZWQ6IDxjb2RlPkFuZ2VsaWMsIENvaGVzaXZlLCBiYXJiYXJpYzwv Y29kZT4uIFNldCB0byA8Y29kZT5ObzwvY29kZT4gdG8gbWl4IHVwcGVyIGFuZCBsb3dlci1j YXNlIHRoZW1lcyB0b2dldGhlciAob3JkZXIgaXMgdGhlbiA8Y29kZT5BbmdlbGljLCBiYXJi YXJpYywgQ29oZXNpdmU8L2NvZGU+ICkuIFRoZSAmIzgyMTY7Y2xhc3NpYyYjODIxNzsgdGhl bWUgaXMgPGVtPmFsd2F5czwvZW0+IGxpc3RlZCBmaXJzdC48L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+RXhwb3J0IGNvbXByZXNzaW9uIHR5cGU8L3NwYW4+IDogRGVwZW5kaW5n IG9uIHlvdXIgdmVyc2lvbiBvZiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiBhbmQg d2hpY2ggbW9kdWxlcyBoYXZlIGJlZW4gY29tcGlsZWQgaW50byBpdCwgeW91IHdpbGwgc2Vl IGEgbGlzdCBvZiBjb21wcmVzc2lvbiBmb3JtYXRzIGhlcmUuIENob29zZSBvbmUgdGhhdCBz dWl0cyB5b3UgYXMgdGhlIGRlZmF1bHQgaW4gd2hpY2ggdG8gZXhwb3J0IHlvdXIgdGhlbWUg cGFja2FnZXMuIFlvdSBtYXkgY2hvb3NlIGZyb20gPGVtPlRhcjwvZW0+LCA8ZW0+R1ppcDwv ZW0+IChhY3R1YWxseSB0YXIrZ3ppcCksIDxlbT5CemlwMjwvZW0+ICh0YXIrYnppcCksIG9y IDxlbT5aaXA8L2VtPiAodGhlIGRlZmF1bHQpLjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5MYXlvdXQgbWV0aG9kPC9zcGFuPiA6IENob29zZSBmcm9tIGEgTGlzdCBWaWV3ICh1 c2VmdWwgaWYgeW91IHByZWZlciB0byBoaWRlIG9yIHVzZSBzbWFsbCB0aHVtYnMpIG9yIGEg R3JpZCBWaWV3IG9mIGluc3RhbGxlZCB0aGVtZXMuIFRoaXMgc2V0dGluZyBhcHBsaWVzIHRv IGJvdGggYWRtaW4gYW5kIHVzZXIgdGhlbWUgc2VsZWN0aW9uIHRhYnMuIERlZmF1bHQ6IEdy aWQgVmlldzwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UaHVtYiBkaW1lbnNpb25z PC9zcGFuPiA6IFNldCB0aGUgdGh1bWJuYWlsIGRpbWVuc2lvbnMgaW4gdGhlIHRoZW1lIGxp c3QuIFNldCBlaXRoZXIgZGltZW5zaW9uIHRvIDAgdG8gdHVybiBvZmYgdGh1bWJuYWlsIGRp c3BsYXkuIERlZmF1bHQ6IDI2MCAmIzIxNTsgMTUwcHg8L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+RmlsZW5hbWUgZm9ybWF0PC9zcGFuPiA6IERlZmluZSB0aGUgZm9ybWF0IG9m IHRoZSBleHBvcnRlZCB0aGVtZS4gWW91IGNhbiB1c2UgPGNvZGU+e3RoZW1lfTwvY29kZT4g YW5kIDxjb2RlPnt2ZXJzaW9ufTwvY29kZT4gcmVwbGFjZW1lbnQgdmFyaWFibGVzIGluIHRo aXMgZmllbGQuIEZvciBleGFtcGxlLCA8Y29kZT57dGhlbWV9X3Z7dmVyc2lvbn08L2NvZGU+ LiBEZWZhdWx0OiA8Y29kZT57dGhlbWV9PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5EZWZhdWx0IHRoZW1lPC9zcGFuPiA6IFNldCB0aGUgdGhlbWUgZm9yIGFsbCBv dGhlciB1c2Vycy4gSWYgdXNpbmcgJiM4MjE2O09uZSB0aGVtZSBmb3IgZXZlcnlvbmUmIzgy MTc7IHRoZSB0aGVtZSBjaG9zZW4gaGVyZSBpcyBmb3JjZWQgdXBvbiBhbGwgdXNlcnMuIElm IHVzaW5nIGFueSBvZiB0aGUgb3RoZXIgbWVjaGFuaXNtcywgdGhpcyB0aGVtZSBpcyBhIGZh bGxiYWNrIHNob3VsZCBzb21ldGhpbmcgZ28gcGVhci1zaGFwZWQuPC9saT4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlRoZW1lIHN5c3RlbTwvc3Bhbj4gOiBBcyBkZXRhaWxlZCBpbiA8 YSBocmVmPSIjc3dpdGNoIj5Td2l0Y2hpbmcgdGhlbWVzPC9hPiwgeW91IG1heSBjaG9vc2Ug dGhlIHdheSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW50ZXJmYWNlIGlz IHByZXNlbnRlZCB0byBvdGhlciB1c2VyczoKCTx1bD4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPk9uZSB0aGVtZSBmb3IgZXZlcnlvbmU8L3NwYW4+IDogdXNlcyB0aGUgRGVmYXVsdCB0 aGVtZSBmb3IgYWxsIHVzZXJzOyB0aGV5IGhhdmUgbm8gY2hvaWNlIGluIHRoZSBtYXR0ZXI8 L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+T25lIHRoZW1lIHBlciBwcml2aWxlZ2Ug bGV2ZWw8L3NwYW4+IDogYWxsb3dzIHlvdSB0byBhc3NpZ24gb25lIG9yIG1vcmUgcHJpdmls ZWdlIGxldmVscyB0byBhIHRoZW1lLiBDaG9vc2UgYSB0aGVtZSBmcm9tIHRoZSBsZWZ0LWhh bmQgbGlzdCBhbmQgdGhlbiBzaGlmdC9jdHJsLWNsaWNrIHRoZSBwcml2aWxlZ2UgbGV2ZWxz IHRvIGFzc2lnbiB0aGVtLiBGbGljayBiZXR3ZWVuIHRoZW1lcyBpbiB0aGUgbGVmdCBjb2x1 bW4gdG8gc2VlIHdoaWNoIG9uZXMgYXJlIHNldCBmb3IgdmFyaW91cyB1c2VyIGxldmVscywg b3IgaG92ZXIgb3ZlciBhIHByaXZpbGVnZSBsZXZlbCB0byBzZWUgYSB0b29sdGlwLiBPbmx5 IG9uZSBsZXZlbCBjYW4gYmUgYXNzaWduZWQgdG8gYSB0aGVtZSBzbyBpZiB5b3UgY2xpY2sg YSBsZXZlbCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQgdG8gYW5vdGhlciB0aGVt ZSwgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXRzIG9yaWdpbmFsIGFzc2lnbm1lbnQuIE5v dGUgeW91IG11c3QgU2F2ZSB0aGUgY2hhbmdlcyBmb3IgdGhlbSB0byB0YWtlIGVmZmVjdDwv bGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5PbmUgdGhlbWUgcGVyIHVzZXI8L3NwYW4+ IDogZGVmaW5lIGEgc2hvcnRsaXN0IGZyb20gdGhlIGF2YWlsYWJsZSBpbnN0YWxsZWQgdGhl bWVzIHRvIG9mZmVyIHRvIGFsbCB1c2Vycy4gQSBuZXcgdGFiIHdpbGwgYXBwZWFyIHRvIG90 aGVyIHVzZXJzIHVuZGVyIDxlbT5BZG1pbjwvZW0+IHRoYXQgaXMgZXNzZW50aWFsbHkgYSBj dXQtZG93biB2ZXJzaW9uIG9mIHRoZSA8ZW0+QWRtaW4gdGhlbWVzPC9lbT4gdGFiLiBVc2Vy cyBjYW4gc3dpdGNoIGJldHdlZW4gYW55IG9uZSBvZiB0aGUgdGhlbWVzIHlvdSBoYXZlIHBl cm1pdHRlZC48L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8cD5SZW1lbWJlciB0byBjbGlj ayBTYXZlIHRvIGFwcGx5IHRoZSBjaGFuZ2VzLiBDbGlja2luZyBhbnkgb3RoZXIgdGFiIHdp bGwgdW5kbyBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWF5IGhhdmUgbWFkZS48L3A+CgoJPGgy IGlkPSJicm93c2UiPkJyb3dzZSB0aGVtZXM8L2gyPgoKCTxwPkNsaWNrIHRoaXMgYnV0dG9u IHRvIGJlIHRha2VuIHRvIHRoZSBjZW50cmFsIGFkbWluIHRoZW1lIHJlcG9zaXRvcnkgd2hl cmUgeW91IG1heSBicm93c2UgdGhlbWVzIGFuZCBkb3dubG9hZCB0aGVtIHJlYWR5IGZvciBp bnN0YWxsYXRpb24uPC9wPgoKCTxoMiBpZD0iaW1wb3J0Ij5JbnN0YWxsIGEgdGhlbWU8L2gy PgoKCTxwPkxvY2F0ZSBhIHRoZW1lIHBhY2thZ2Ugb24geW91ciBoYXJkIGRyaXZlIG9yIHBh c3RlIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdG8gYSBwYWNrYWdlIGluIHRo ZSBib3ggYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS4gSGl0IDxzdHJvbmc+VXBsb2FkPC9zdHJv bmc+IGFuZCBpdCB3aWxsIGJlIGluc3RhbGxlZC4gSWYgaXQgYWxyZWFkeSBleGlzdHMgaXQg d2lsbCBiZSBvdmVyd3JpdHRlbi4gTm90ZSB0aGF0IHlvdSBtYXkgcmVjZWl2ZSBhIHdhcm5p bmcgaWYgdGhlIHRoZW1lIGlzIHBhY2thZ2VkIHVzaW5nIGEgY29tcHJlc3Npb24gYWxnb3Jp dGhtIHRoYXQgaXMgbm90IGJ1aWx0IGludG8geW91ciB2ZXJzaW9uIG9mIDxzcGFuIGNsYXNz PSJjYXBzIj5QSFA8L3NwYW4+LiBBIGxpc3Qgb2Ygc3VwcG9ydGVkIGNvbXByZXNzaW9uIHR5 cGVzIGlzIGdpdmVuIGJlbG93IHRoZSB1cGxvYWQgYm94LjwvcD4KCgk8aDIgaWQ9Im5ldyI+ Q3JlYXRlIGEgbmV3IChlbXB0eSkgdGhlbWU8L2gyPgoKCTxwPkNsaWNrIDxzdHJvbmc+Q3Jl YXRlIG5ldyB0aGVtZTwvc3Ryb25nPiBhbmQgYSBib3ggd2lsbCBzbGlkZSBkb3duIGFsbG93 aW5nIHlvdSB0byBnaXZlIHlvdXIgdGhlbWUgYSBuYW1lLiAgTm90ZSB0aGF0IHRoZSBlZGl0 IGJveCBhdXRvbWF0aWNhbGx5IHRha2VzIGZvY3VzLCBzbyB5b3UgY2FuIHR5cGUgc3RyYWln aHQgYXdheS48L3A+CgoJPHA+Tm8gc3BhY2VzIG9yIG9kZCBjaGFyYWN0ZXJzIGFyZSBwZXJt aXR0ZWQsIGJlY2F1c2UgdGhlIG5hbWUgeW91IGVudGVyIGlzIHRoZSBuYW1lIG9mIHRoZSBk aXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIDxlbT50aGVtZTwvZW0+IGZv bGRlciBhbmQgdGhlbSBuYW1lIG9mIHlvdXIgdGhlbWUmIzgyMTc7cyBjbGFzcy4gSWYgeW91 IGRvIG1hbmFnZSB0byB1c2Ugb2RkIGNoYXJhY3RlcnMsIHRoZSBuYW1lIHdpbGwgYmUgJiM4 MjIwO2R1bWJlZCBkb3duJiM4MjIxOyBmb3IgeW91LiBPbmNlIHRoZSBuYW1lIGlzIHNldCwg dGhhdCBpcyBpdDsgeW91IGNhbm5vdCBjaGFuZ2UgaXQgZnJvbSB3aXRoaW4gdGhlIGludGVy ZmFjZS4gVGhlIG9ubHkgd2F5IHRvIHJlbmFtZSBpdCBpcyB2aWEgeW91ciA8c3BhbiBjbGFz cz0iY2FwcyI+RlRQPC9zcGFuPiBjbGllbnQgYW5kIGluIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiBmaWxlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48L3A+ CgoJPHA+SW4gb3JkZXIgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGggb3RoZXIgcGVvcGxl JiM4MjE3O3MgdGhlbWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCB0aGVtZXMgeW91 IGRlc2lnbiBiZWdpbiB3aXRoIGEgdW5pcXVlIDMtbGV0dGVyIHByZWZpeCBvZiB5b3VyIG93 biBjaG9vc2luZywgcGx1cyBhbiB1bmRlcnNjb3JlICYjODIxMjsgZXhhY3RseSBsaWtlIHBs dWdpbnMuIFRodXMsIHNtZF9CbHVlTWVhbmllIG1pZ2h0IHdlbGwgYmUgdGhlIG5hbWUgb2Yg YSB0aGVtZS48L3A+CgoJPHA+V2hlbiB5b3UgaGF2ZSBuYW1lZCB5b3VyIHRoZW1lLCBjbGlj ayA8c3Ryb25nPkdvPC9zdHJvbmc+IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBpbiB3aGljaCBp dCBjYW4gcmVzaWRlLjwvcD4KCgk8aDIgaWQ9ImNsb25lIj5FeHRlbmQgYW4gZXhpc3Rpbmcg dGhlbWU8L2gyPgoKCTxwPkNsaWNrIDxzdHJvbmc+QmFzZTwvc3Ryb25nPiB0byBjcmVhdGUg YSBuZXcgdGhlbWUgYmFzZWQgb24gYW5vdGhlci4gQSBib3ggd2lsbCBzbGlkZSBkb3duICh0 aGUgY3Vyc29yIGZvY3VzZXMgYXV0b21hdGljYWxseSBpbiB0aGUgYm94IGZvciB5b3UpIHNv IHlvdSBtYXkgZW50ZXIgdGhlIG5hbWUgb2YgeW91ciBjb3B5LiBPYnNlcnZlIHRoZSA8YSBo cmVmPSIjbmV3Ij5uYW1pbmcgY29udmVudGlvbjwvYT4sIHRoZW4gY2xpY2sgPHN0cm9uZz5H bzwvc3Ryb25nPiB0byBjcmVhdGUgdGhlIG5ldyB0aGVtZS48L3A+CgoJPHA+PHNwYW4gY2xh c3M9ImltcG9ydGFudCI+UGxlYXNlIHJlbWVtYmVyLCB5b3VyIHRoZW1lIHdpbGwgYmUgZGVw ZW5kZW50IG9uIHRoZSBjaG9zZW4gdGhlbWUgYW5kIDxzdHJvbmc+Ym90aDwvc3Ryb25nPiBt dXN0IGJlIHByZXNlbnQgb24gYSB1c2VyJiM4MjE3O3Mgc3lzdGVtIGZvciB0aGUgdGhlbWUg dG8gd29yazwvc3Bhbj4uIEl0IGlzIHdvcnRoIGVuc3VyaW5nIHRoYXQgdXNlcnMgb2YgeW91 ciB0aGVtZSBhcmUgbWFkZSBhd2FyZSBvZiB0aGlzIGRlcGVuZGVuY3kgdG8gYXZvaWQgdW5u ZWNlc3NhcnkgZnJ1c3RyYXRpb247IHBlcmhhcHMgYWRkIGEgbGluayB0byB0aGUgdGhlbWUm IzgyMTc7cyBiYXNlLCBtZW50aW9uIHRoZSBkZXBlbmRlbmN5IGluIHRoZSBIZWxwIGxpbmsg YW5kL29yIGluIHRoZSB0aGVtZSYjODIxNztzIGFydGljbGUgb24gVGV4dGdhcmRlbi4gWW91 IHdpbGwgbm90IGJlIGFibGUgdG8gZGVsZXRlIGFueSB0aGVtZSBmcm9tIHRoZSBsaXN0IHRo YXQgaGFzIHN1Y2ggYSBkZXBlbmRlbmN5LCBvdGhlcndpc2UgeW91ciBhZG1pbiBzaWRlIHdp bGwgc3RvcCB3b3JraW5nLjwvcD4KCgk8aDIgaWQ9ImV4cG9ydCI+RXhwb3J0IGEgdGhlbWU8 L2gyPgoKCTxwPklmIHlvdSB3aXNoIHRvIGJhY2sgdXAgYSB0aGVtZSBvciBzaGFyZSBpdCB3 aXRoIG90aGVycywgY2xpY2sgPHN0cm9uZz5FeHBvcnQ8L3N0cm9uZz4uIEEgYm94IHdpbGwg c2xpZGUgZG93biBvZmZlcmluZyB5b3UgYSBjaG9pY2Ugb2YgY29tcHJlc3Npb24gZm9ybWF0 czsgdGhlIGRlZmF1bHQgaXMgdGhlIGZvcm1hdCB5b3UgY2hvc2UgZnJvbSB0aGUgPGEgaHJl Zj0iI3NldHVwIj5QcmVmZXJlbmNlczwvYT4gcGFnZS4gQ2xpY2sgPGVtPltHb108L2VtPiB0 byBleHBvcnQgdGhlIHRoZW1lIGFuZCBzYXZlIGl0IHRvIHlvdXIgY29tcHV0ZXIuIEFsbCBy ZWxhdGVkIGZpbGVzIGluIHRoZSB0aGVtZSB3aWxsIGJlIHBhY2thZ2VkIHRvZ2V0aGVyIGlu dG8gYSBzaW5nbGUgZG93bmxvYWQgZmlsZSBmb3IgY29udmVuaWVuY2UuPC9wPgoKCTxwPlRo ZSBmaWxlbmFtZSBpcyBnb3Zlcm5lZCBieSB0aGUgPGVtPkZpbGVuYW1lIGZvcm1hdDwvZW0+ IHByZWZlcmVuY2UuPC9wPgoKCTxoMiBpZD0iZGVsZXRlIj5EZWxldGUgYSB0aGVtZTwvaDI+ CgoJPHA+SGl0IHRoaXMgKGFuZCBjb25maXJtIHlvdSBhcmUgc3VyZSkgdG8gcmVtb3ZlIHRo ZSBlbnRpcmUgdGhlbWUgZm9sZGVyIGFuZCBjb250ZW50cyBmcm9tIHRoZSBmaWxlIHN5c3Rl bS4gPHNwYW4gY2xhc3M9ImltcG9ydGFudCI+VGhpcyBpcyBub3QgdW5kb2FibGUsIHNvIGJl IGNhcmVmdWw8L3NwYW4+LjwvcD4KCgk8aDIgaWQ9ImVkaXRfdGhlbWUiPkVkaXQgYSB0aGVt ZTwvaDI+CgoJPHA+QSB0aGVtZSBpcyBhIGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBmaWxl cyBhbGwgcmVzaWRlIGluIHRoZWlyIG93biBzZWxmLWNvbnRhaW5lZCBkaXJlY3RvcnkgdW5k ZXIgPGNvZGU+dGV4dHBhdHRlcm4vdGhlbWU8L2NvZGU+LiBUaGUgbmFtZSBvZiB0aGUgZGly ZWN0b3J5IGlzIHRoZSBuYW1lIG9mIHlvdXIgdGhlbWUsIGhlbmNlIHRoZSByZWFzb24gaXQg Y2Fubm90IGNvbnRhaW4gYW55IG9ic2N1cmUgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGJlIGlu dmFsaWQgaW4gdGhlIGZpbGVzeXN0ZW0gb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bh bj4gdmFyaWFibGVzLjwvcD4KCgk8cD5XaGVuIHlvdSBjbGljayAmIzgyMTY7RWRpdCYjODIx NzsgeW91IHdpbGwgYmUgdGFrZW4gdG8gYSBzY3JlZW4gdGhhdCBhbGxvd3MgeW91IHRvIG1h a2UgY2hhbmdlcyB0byB0aGUgdGhlbWUuIFRoZSBFZGl0IHNjcmVlbiBpcyBicm9rZW4gaW50 byB0aHJlZSB2ZXJ0aWNhbCBwYXJ0cywgYXMgZm9sbG93czo8L3A+CgoJPGgzIGlkPSJlZGl0 X2ltZyI+SW1hZ2UgaGFuZGxpbmc8L2gzPgoKCTxwPkVhY2ggdGhlbWUgY2FuIGNvbnRhaW4g YW4gb3B0aW9uYWwgdGh1bWJuYWlsLiBUaGlzIGlzIGFuIGltYWdlIG9mIDI2MCYjMjE1OzE1 MHB4IGluIHNpemUsIGNhbGxlZCA8Y29kZT5zY3JlZW5zaG90LnBuZzwvY29kZT4gKG9yIDxj b2RlPi5qcGc8L2NvZGU+LCA8Y29kZT4uZ2lmPC9jb2RlPiwgZXRjKSBpbiB5b3VyIHRoZW1l IGRpcmVjdG9yeS4gTm90ZSBpdCB3aWxsIGJlIHNxdWFzaGVkIC8gc3RyZXRjaGVkIHRvIGZp dCB5b3VyIHRodW1ibmFpbCBkaW1lbnNpb25zIHNldCBpbiB0aGUgcGx1Z2luIHByZWZzLjwv cD4KCgk8cD5PdGhlciBpbWFnZXMgZm9yIHVzZSBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NT PC9zcGFuPiBydWxlcyBjYW4gYWxzbyBiZSBhZGRlZCB0byBhIHRoZW1lLiBCcm93c2UgZm9y IGFuIGltYWdlIGFuZCBzZWxlY3QgaXQsIHRoZW4gY2xpY2sgPHN0cm9uZz5VcGxvYWQ8L3N0 cm9uZz4gdG8gYWRkIGl0IHRvIHRoZSB0aGVtZS4gWW91IGNhbiBjdXJyZW50bHkgb25seSB1 cGxvYWQgb25lIGltYWdlIGF0IGEgdGltZSwgdGhvdWdoIHlvdSBjYW4gZGVsZXRlIG9uZSBv ciBtb3JlIGF0IG9uY2UgYnkgU2hpZnQvQ3RybCBjbGlja2luZyB0aGUgb25lcyB5b3Ugd2lz aCB0byByZW1vdmUgYW5kIGhpdHRpbmcgdGhlICYjODIxNjt4JiM4MjE3OyBidXR0b24uIDxz cGFuIGNsYXNzPSJpbXBvcnRhbnQiPldhcm5pbmc6IGZpbGVzIHdpbGwgYmUgZGVsZXRlZCBp bW1lZGlhdGVseSwgd2l0aG91dCBjb25maXJtYXRpb24uPC9zcGFuPjwvcD4KCgk8cD5UaGUg YmVzdCB3YXkgdG8gcmVmZXIgdG8gaW1hZ2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bh bj5zIGluIHN0eWxlc2hlZXRzIGlzIHdpdGggYSByZWxhdGl2ZSBwYXRoOjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPi5teVN0eWxlIHsKICAgYmFja2dy b3VuZDogdXJsKG15LWltYWdlLmdpZik7Cn0KPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0iZWRp dF9jb250ZW50Ij5Db250ZW50PC9oMz4KCgk8cD5UaGUgY2VudHJhbCBwYW5lIGlzIHdoZXJl IHlvdSBlZGl0IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXMgaW4geW91ciB0aGVtZS4gVGhl IHNtYWxsIGVkaXQgYm94IGF0IHRoZSB0b3AgaXMgdGhlIGZpbGVuYW1lIGFuZCB0aGUgbGFy Z2UgdGV4dCBhcmVhIGlzIGl0cyBjb250ZW50LiBDbGljayA8c3Ryb25nPlNhdmU8L3N0cm9u Zz4gdG8gY29tbWl0IGNoYW5nZXMuIFlvdSBtYXkgZnJlZWx5IHJlbmFtZSBhbnkgZmlsZSB5 b3UgYXJlIGVkaXRpbmcuPC9wPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPkltcG9ydGFudDog aWYgeW91IHNlbGVjdCBhIGZpbGUsIGVkaXQgaXQsIHJlbmFtZSBpdCwgYW5kIGNsaWNrIDxz dHJvbmc+U2F2ZTwvc3Ryb25nPiB5b3Ugd2lsbCBvdmVyd3JpdGUgd2hhdGV2ZXIgd2FzIGlu IHRoZSBwcmV2aW91cyBmaWxlICYjODIxMjsgZXZlbiBpZiB5b3UgZW1wdHkgdGhlIGNvbnRl bnRzIG9mIHRoZSB0ZXh0YXJlYSBpbiBhbiBlZmZvcnQgdG8gbWFrZSBhICYjODIyMDtuZXcm IzgyMjE7IG9uZS4gSWYgeW91IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGZpbGUsIGl0IGlzIHNh ZmVyIHRvIGNsaWNrIHRoZSA8c3Ryb25nPk5ldyBmaWxlPC9zdHJvbmc+IGJ1dHRvbiBpbiB0 aGUgcmlnaHQgaGFuZCBjb2x1bW4gdG8gZW5zdXJlIHlvdSBhcmUgbm90IGVkaXRpbmcgYW4g ZXhpc3RpbmcgZmlsZSBieSBtaXN0YWtlLjwvcD4KCgk8cD5JdCBpcyBhbHNvIHdvcnRoIG5v dGluZyB0aGF0IGZpbGUgcGVybWlzc2lvbnMgdmFyeSBmcm9tIGhvc3QgdG8gaG9zdC4gSWYg eW91IHRyeSBhbmQgc2F2ZSBhIHRoZW1lIGZpbGUgYW5kIHJlY2VpdmUgYSB5dWtreSB3YXJu aW5nIG1lc3NhZ2UgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUgdGhlIGZpbGUsIHRy eSBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgdGhlbWUgZGlyZWN0b3J5IGFu ZCBhbGwgZmlsZXMgYmVuZWF0aCBpdC48L3A+CgoJPHA+VGhlIHRoZW1lIGZpbGVzIGFyZSBk aXN0cmlidXRlZCBpbiA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiB3aXRoIDxjb2Rl PjY0NDwvY29kZT4gcGVybWlzc2lvbnMgd2hpY2ggc2hvdWxkIGJlIGZpbmUgZm9yIGEgc3Rh bmRhcmQgaG9zdC4gU29tZSBzaGFyZWQgaG9zdGluZyBjb21wYW5pZXMgJiM4MjEyOyBhbmQg dGhlc2UgYXJlIHVzdWFsbHkgdGhlIG9uZXMgdGhhdCB0ZWxsIHlvdSB0byBzZXQgeW91ciA8 Y29kZT5maWxlczwvY29kZT4gYW5kIDxjb2RlPmltYWdlczwvY29kZT4gZGlyZWN0b3JpZXMg dG8gNzc3IGluIG9yZGVyIHRvIG1ha2UgdGhlbSB3cml0YWJsZSBieSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiAmIzgyMTI7IHJ1biBBcGFjaGUvUEhQIGluIGEgZGlmZmVyZW50 IHdheSB3aGljaCBtaWdodCByZXF1aXJlIGhpZ2hlciBwZXJtaXNzaW9ucyBpbiBvcmRlciB0 byB3cml0ZSB0byB0aGUgdGhlbWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZm9ydHVuYXRlbHkg b3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIHBsdWdpbiBzbyB5b3Ugd2lsbCBoYXZlIHRvIGV4 cGVyaW1lbnQgaWYgaXQgY2F1c2VzIHlvdSBwcm9ibGVtcy48L3A+CgoJPGgzPkZpbGUgaGFu ZGxpbmc8L2gzPgoKCTxwPlRoaXMgY29sdW1uIGJlZ2lucyB3aXRoIGEgc2VsZWN0IGxpc3Qg b2YgYWxsIGluc3RhbGxlZCB0aGVtZXM7IHRoZSBjdXJyZW50IHRoZW1lIHNlbGVjdGVkLiBD aGFuZ2luZyB0aGUgaXRlbSBoZXJlIHdpbGwgaW1tZWRpYXRlbHkgYWxsb3cgeW91IHRvIGVk aXQgYW5vdGhlciB0aGVtZS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3UgYXJlIGNvcHlp bmcgYW5kIHBhc3RpbmcgZmlsZXMgZnJvbSBvbmUgdGhlbWUgdG8gYW5vdGhlciBhbmQgc2F2 ZXMgeW91IGhhdmluZyB0byBnbyBiYWNrIHRvIHRoZSB0aGVtZSBsaXN0IGZpcnN0LjwvcD4K Cgk8cD5CZW5lYXRoIHRoYXQgYXJlIHR3byBidXR0b25zOjwvcD4KCgk8dWw+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5OZXcgZmlsZTwvc3Bhbj4gOiBDcmVhdGUgYSBuZXcsIGVtcHR5 IGZpbGUgaW4geW91ciB0aGVtZSBkaXJlY3RvcnkuIE5vdGhpbmcgaXMgYWN0dWFsbHkgY3Jl YXRlZCB1bnRpbCB5b3UgaGl0IDxzdHJvbmc+U2F2ZTwvc3Ryb25nPiBidXQgdXNpbmcgdGhp cyBidXR0b24gZW5zdXJlcyB5b3UgYmVnaW4gd2l0aCBhIGNsZWFuIHNsYXRlIGFuZCBkb24m IzgyMTc7dCBhY2NpZGVudGFsbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmaWxlIHlvdSB3 ZXJlIGVkaXRpbmc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGhlbWUgbGlzdDwv c3Bhbj4gOiBBIHNob3J0Y3V0IGJhY2sgdG8gdGhlIG1haW4gdGhlbWUgbGlzdCAoZXF1aXZh bGVudCB0byBjbGlja2luZyB0aGUgPGVtPkFkbWluIHRoZW1lczwvZW0+IHRhYik8L2xpPgoJ PC91bD4KCgk8cD5CZWxvdyB0aG9zZSBidXR0b25zIGFyZSB1cCB0byBmb3VyIHNlY3Rpb25z IGNvbnRhaW5pbmcgYWxsIHRoZSAobm9uLWltYWdlKSBmaWxlcyB0aGF0IG1ha2UgdXAgeW91 ciB0aGVtZS4gQ2xpY2sgYSBmaWxlbmFtZSB0byBsb2FkIGl0IGludG8gdGhlIGNlbnRyYWwg dGV4dCBhcmVhIGZvciBlZGl0aW5nLjwvcD4KCgk8aDQgaWQ9ImVkaXRfY3NzIj5TdHlsZXNo ZWV0czwvaDQ+CgoJPHAgY2xhc3M9ImltcG9ydGFudCI+RmlsZXMgY2FuIGJlIGFueSB2YWxp ZCBmaWxlbmFtZSBidXQgPHNwYW4gY2xhc3M9ImNhcHMiPk1VU1Q8L3NwYW4+IGVuZCBpbiA8 Y29kZT4uY3NzPC9jb2RlPjwvcD4KCgk8cD5UaGUgbWVhdCBhbmQgcG90YXRvZXMgb2YgeW91 ciB0aGVtZS4gQWRkIGFzIG1hbnkgc2hlZXRzIGFzIHlvdSBsaWtlIGFuZCBsb2FkIHRoZW0g ZnJvbSB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUocykuPC9wPgoK CTxoNCBpZD0iZWRpdF9jc3MiPlN0eWxlcGxhdGVzPC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0 YW50Ij5GaWxlcyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0i Y2FwcyI+TVVTVDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5zc2M8L2NvZGU+PC9wPgoKCTxwPkEg c3BlY2lhbCB2ZXJzaW9uIG9mIGEgc3R5bGVzaGVldCB0aGF0IGFsbG93cyB5b3UgdG8gZGVm aW5lIGNvbnN0YW50cyB0aHJvdWdob3V0IHlvdXIgc2hlZXQuIFdyaXRlIHlvdXIgc3R5bGVz aGVldCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB5b3Ugd291bGQgbm9ybWFsbHkgYnV0 IHdoZXJlIHlvdSBmaW5kIHlvdXJzZWxmLCBmb3IgZXhhbXBsZSwgdXNpbmcgdGhlIHNhbWUg Y29sb3IgdmFsdWUgcmVwZWF0ZWRseSBvciB0aGUgc2FtZSBydWxlcyBibG9jaywgeW91IGNh biBzYXZlIHlvdXJzZWxmIHR5cGluZyBieSB1c2luZyBjb25zdGFudHM6PC9wPgoKPHByZSBj bGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+QGJyYW5kaW5nOiAjMTIzNDU2Owoj aGVhZGVyIHsKICBjb2xvcjogQGJyYW5kaW5nOwp9CmgyIHsKICBjb2xvcjogQGJyYW5kaW5n Owp9CjwvY29kZT48L3ByZT4KCgk8cD5Zb3UgY2FuIGFsc28gc3BlY2lmeSB3aG9sZSBydWxl IGJsb2NrcyBsaWtlIHRoaXMgKDxlbT5Ob3RlIHRoZSBjb2xvbiBhZnRlciB0aGUgYmxvY2sg bmFtZTwvZW0+KSA6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9j ayI+QG15X2Jsb2NrOiB7CiAgbWFyZ2luOjAgMjBweDsKICBib3JkZXI6M3B4IHNvbGlkICM5 OTk7CiAgZm9udC1zaXplOjEyMCU7Cn0KI2hlYWRlciB7CiAgY29sb3I6IEBicmFuZGluZzsK ICBwb3NpdGlvbjpyZWxhdGl2ZTsKICBAbXlfYmxvY2s7Cn0KaDIgewogIEBteV9ibG9jazsK fQo8L2NvZGU+PC9wcmU+CgoJPHA+SWYgeW91IHB1dCBhbGwgeW91ciBjb25zdGFudHMgYXQg dGhlIHRvcCBvZiB0aGUgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSB0aGV5IHdpbGwgYmUgcmVt b3ZlZCBmcm9tIHRoZSBnZW5lcmF0ZWQgY3NzIGZpbGUuPC9wPgoKCTxwPldoZW4geW91IHNh dmUgYSA8Y29kZT4uc3NjPC9jb2RlPiBmaWxlLCBhIGNvcnJlc3BvbmRpbmctbmFtZWQgPGNv ZGU+LmNzczwvY29kZT4gZmlsZSB3aWxsIGFsc28gYmUgY3JlYXRlZC4gVGhlIHR3byB3aWxs IGJlIGtlcHQgaW4gc3luYyBhcyBmYXIgYXMgcHJhY3RpY2FibGUgKGV2ZW4gaWYgeW91IHJl bmFtZSB0aGUgb3JpZ2luYWwgZmlsZSkuIFdoZW4gaXQgY29tZXMgdG8gZGVsZXRpb24gdGhv dWdoLCB0aGV5IGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkuIFRoaXMgYWxsb3dzIHlvdSB0byBl aXRoZXIga2VlcCB0aGUgPGNvZGU+LnNzYzwvY29kZT4gZmlsZSBpbiB0aGUgZGlzdHJpYnV0 aW9uIGFyY2hpdmUgb3IgcmVtb3ZlIGl0IHByaW9yIHRvIGV4cG9ydC48L3A+CgoJPGg0IGlk PSJlZGl0X2pzIj5KYXZhc2NyaXB0PC9oND4KCgk8cCBjbGFzcz0iaW1wb3J0YW50Ij5GaWxl cyBjYW4gYmUgYW55IHZhbGlkIGZpbGVuYW1lIGJ1dCA8c3BhbiBjbGFzcz0iY2FwcyI+TVVT VDwvc3Bhbj4gZW5kIGluIDxjb2RlPi5qczwvY29kZT48L3A+CgoJPHA+QW55IHRyaWNrZXJ5 IHlvdSBtYXkgd2lzaCB0byBlbXBsb3kgaW4geW91ciB0aGVtZSBjYW4gYmUgd3JpdHRlbiBp biB0aGVzZSBmaWxlcy4gUmVtZW1iZXIgdGhhdCBqUXVlcnkgaXMgbG9hZGVkIGJ5IGRlZmF1 bHQgb24gdGhlIGFkbWluIHNpZGUgc28geW91IGNhbiBwbGF5IHdpdGggdGhhdC48L3A+CgoJ PGg0IGlkPSJlZGl0X3BocCI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L2g0PgoK CTxwIGNsYXNzPSJpbXBvcnRhbnQiPk9uZSBmaWxlIDxzdHJvbmc+bXVzdDwvc3Ryb25nPiBi ZSBuYW1lZCBleGFjdGx5IHRoZSBzYW1lIGFzIHlvdXIgdGhlbWUsIGkuZS4gPGNvZGU+c21k X0JsdWVNZWFuaWUucGhwPC9jb2RlPi4gQW55IG90aGVyIGZpbGVzIG11c3QgZW5kIGluIDxj b2RlPi5waHA8L2NvZGU+PC9wPgoKCTxwPkNvbnN1bHQgdGhlIDxhIGhyZWY9Imh0dHA6Ly90 ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9Q3JlYXRpbmdfYW5fQWRtaW5f U2lkZV9UaGVtZSI+QWRtaW4gU2lkZSB0aGVtZSBndWlkZTwvYT4gb24gVGV4dGJvb2sgZm9y IHRoZSBydWxlcyBvbiBtYWtpbmcgdGhlbWVzLiBOb3RlIHRoYXQgY29ycnVwdCB0aGVtZXMg YXJlIGRldGVjdGVkIHRvIHRoZSBiZXN0IG9mIHRoZSBwbHVnaW4mIzgyMTc7cyBhYmlsaXR5 IGFuZCB5b3UgbWF5IG5vdCBleHBvcnQsIGJhc2Ugb3Igc3dpdGNoIHRvIGFueSB0aGVtZSB0 aGF0IGlzIGJyb2tlbi48L3A+CgoJPHA+SWYgeW91IHJlbmFtZSB0aGUgdGhlbWUmIzgyMTc7 cyBjb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgKGkuZS4gdGhlIG9u ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHRoZW1lIGZvbGRlciBpdHNlbGYpIHRoZSBw bHVnaW4gd2lsbCBhdHRlbXB0IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGFzIHdlbGw7IGVz c2VudGlhbGx5IHJlbmFtaW5nIHRoZSB0aGVtZS4gVGhpcyBzaG91bGQgcHJldmVudCBhIHRo ZW1lIGZyb20gYmVjb21pbmcgdW5lZGl0YWJsZSwgYnV0IGl0IGlzIHVwIHRvIHlvdSB0byBr ZWVwIHRoZSBjbGFzcyBuYW1lIGluIHN5bmMgd2l0aCB0aGUgZmlsZSBuYW1lLiBJZiBhdCBh bnkgdGltZSB5b3UgZ28gYmFjayB0byB0aGUgdGhlbWUgbGlzdC9ncmlkIGFuZCBmaW5kIGEg dGhlbWUgZXhpc3RzIGJ1dCBoYXMgbm8gaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0 LCBjaGFuY2VzIGFyZSBpdCYjODIxNztzIGJlY2F1c2UgdGhlIGNsYXNzIG5hbWUgZG9lc24m IzgyMTc7dCBtYXRjaCB0aGUgdGhlbWUmIzgyMTc7cyBkaXJlY3RvcnkgbmFtZS4gSnVzdCBo aXQgW0VkaXRdIGFuZCBhbHRlciB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4g ZmlsZSB0byBicmluZyBldmVyeXRoaW5nIGJhY2sgb24gdHJhY2suPC9wPgoKCTxoNCBpZD0i ZWRpdF9vdGhlciI+T3RoZXJzPC9oND4KCgk8cD5BbnkgZmlsZXMgdGhhdCBhcmUgbm90IG9m IHRoZSBhYm92ZSB0aHJlZSB0eXBlcyAoYW5kIGFyZSBub3QgaW1hZ2VzKSBhcHBlYXIgaGVy ZS4gWW91IHdpbGwgcHJvYmFibHkgbmV2ZXIgc2VlIHRoaXMgc2VjdGlvbi4gSWYgeW91IGRv IHRyeSB0byBjcmVhdGUgYSBmaWxlIHRoYXQgaXMgbm90IG9mIHRoZSBhYm92ZSB0aHJlZSB0 eXBlcywgYSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkLiBZb3UgbXVzdCBoaXQgPGVtPlNhdmU8 L2VtPiBhZ2FpbiB0byBjb25maXJtIHlvdSByZWFsbHkgd2lzaCB0byBjcmVhdGUgdGhlIGZp bGUuPC9wPgoKCTxoMyBpZD0iYWJvdXQiPk1hbmlmZXN0PC9oMz4KCgk8cD5JbiB5b3VyIG1h aW4gPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBpcyBhIGZ1bmN0aW9uIGNh bGxlZCA8Y29kZT5tYW5pZmVzdCgpPC9jb2RlPiB3aGljaCBjb250YWlucyBpbmZvIGFib3V0 IHlvdSBhbmQgeW91ciB0aGVtZS4gRWRpdCB0aGUgdmFsdWVzIGhlcmUgdG8gc3RhbXAgeW91 ciBtYXJrIG9uIHRoZSB0aGVtZS4gTm90ZSB0aGF0IGlmIHlvdXIgZGVzY3JpcHRpb24gY29u dGFpbnMgYXBvc3Ryb3BoZXMgdGhleSBtdXN0IGJlIDxlbT5lc2NhcGVkPC9lbT4gYnkgcHJl Y2VkaW5nIHRoZW0gd2l0aCBhIHNpbmdsZSBiYWNrc2xhc2ggPGNvZGU+XDwvY29kZT4uIGUu Zy48L3A+Cgo8cHJlPjxjb2RlPiYjMzk7ZGVzY3JpcHRpb24mIzM5OyA9Jmd0OyAmIzM5O0Rv blwmIzM5O3QgZmVhciB0aGUgcmVhcGVyISYjMzk7LAo8L2NvZGU+PC9wcmU+CgoJPGgyIGlk PSJwZXJ1c2VyIj5QZXItdXNlciB0aGVtZSBzZWxlY3Rpb248L2gyPgoKCTxwPklmIGFuIGFk bWluaXN0cmF0b3IgY2hvb3NlcyB0byBhbGxvdyBwZXItdXNlciB0aGVtZXMsIGEgbmV3IHRh YiBhcHBlYXJzIHVuZGVyIHRoZSBBZG1pbiB0YWIgb2YgYWxsIHVzZXJzIChleGNlcHQgYWRt aW5pc3RyYXRvcnMpLiBUaGlzIHNpbXBseSBkaXNwbGF5cyBhbGwgYXZhaWxhYmxlIHRoZW1l cyAmIzgyMTI7IG9uZXMgdGhhdCB0aGUgYWRtaW5pc3RyYXRvciBoYXMgZXhwbGljaXRseSBh bGxvd2VkLjwvcD4KCgk8cD5DbGlja2luZyBhIHRoZW1lIG5hbWUgb3IgdGh1bWJuYWlsIHdp bGwgaW1tZWRpYXRlbHkgc3dpdGNoIHRvIHRoYXQgdGhlbWUgdW50aWwgdGhlIHVzZXIgY2hv b3NlcyBhbm90aGVyIG9yIHRoZSBhZG1pbmlzdHJhdG9yIGNoYW5nZXMgdGhlbWUgc3lzdGVt LjwvcD4KCgk8aDIgaWQ9ImNoYW5nZWxvZyI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxp PjEyIEp1biAyMDA5IHwgMC4xIHwgSW5pdGlhbCBwdWJsaWMgYmV0YTwvbGk+CgkJPGxpPjAz IFNlcCAyMDA5IHwgMC4xMSB8IEltcHJvdmVkIFRleHRnYXJkZW4gdGhlbWUgZmVlZCBhbmQg bGlua3MgOyBpbXByb3ZlZCBmaWxlIHN1cHBvcnQgKGJvdGggdGhhbmtzIHRoZWJvbWJzaXRl KSA7IG1hZGUgZ2xvYmFsIHRoZW1lIG1vcmUgb2J2aW91cyA7IGFsdGVyZWQgcHJlZnMgdGFi IGEgYml0IDsgYWRkZWQgPGNvZGU+LnNzYzwvY29kZT4gc3VwcG9ydCA7IGlnbm9yZWQgLnN2 biBzdWJkaXJzIChhbGwgdGhhbmtzIHBpZW1hbikgOyBpbXByb3ZlZCB3YXJuaW5nIG1lc3Nh Z2VzIDsgbWlzYyBmaXhlcyBhbmQgaG91c2VrZWVwaW5nPC9saT4KCQk8bGk+MDIgTm92IDIw MDkgfCAwLjEyIHwgUmVkdWNlZCB0aGVtZSBmZWVkIGNsdXR0ZXIgaW4gdGhlIHByZWZzIHRh YmxlPC9saT4KCQk8bGk+MDQgTm92IDIwMDkgfCAwLjEzIHwgUmVtb3ZlZCBlcmVnX3JlcGxh Y2UgdG8gY29uZm9ybSB3aXRoIFBIUDUuMysgKHRoYW5rcyB0aGVib21ic2l0ZSkgOyBjaGFu Z2VkICYjODIxNjtnbG9iYWwmIzgyMTc7IHRvICYjODIxNjtkZWZhdWx0JiM4MjE3OyA7IGZp eGVkIHJvZ3VlIHVudHJhbnNsYXRlZCBzdHJpbmc8L2xpPgoJCTxsaT4wOSBOb3YgMjAwOSB8 IDAuMTQgfCBNb3ZlZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgaW4gbGluZSB3 aXRoIFRleHRnYXJkZW4gbGF5b3V0IGFsdGVyYXRpb25zICh0aGFua3MgZm9yIHRoZSBoZWFk c3VwIHRoZWJvbWJzaXRlKSA7IG1hZGUgZmVlZHMgbW9yZSByb2J1c3QgaW4gdGhlIGV2ZW50 IFRleHRnYXJkZW4gaXMgZG93biAvIHVuZGVyIG1haW50ZW5hbmNlICh0aGFua3MgbWxhcmlu byk8L2xpPgoJCTxsaT4wOSBGZWIgMjAxMCB8IDAuMiB8IE5hdGl2ZSBzdXBwb3J0IGZvciB6 aXAgaW1wb3J0aW5nIGFuZCBleHBvcnRpbmcgKGFsbW9zdCkgaXJyZXNwZWN0aXZlIG9mIHlv dXIgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZW52aXJvbm1lbnQgOyB6aXAgaXMg bm93IHRoZSBkZWZhdWx0IHN5c3RlbSA7IGJldHRlciBub3RpZmljYXRpb24gb2Ygc3VwcG9y dGVkIGNvbXByZXNzaW9uIHR5cGVzIGFuZCBtb3JlIHJvYnVzdCByZWplY3Rpb24gaWYgc29t ZXRoaW5nIGlzIG1pc3Npbmc8L2xpPgoJCTxsaT4xMCBGZWIgMjAxMCB8IDAuMjEgfCBGaXhl ZCBiemlwMiB3YXJuaW5nICh0aGFua3MgdGhlYm9tYnNpdGUpIDsgZml4ZWQgcmVjdXJzaXZl IG1rZGlyIHByb2JsZW0gd2l0aCBiemlwMiBmaWxlcyAodGhhbmtzIDxzcGFuIGNsYXNzPSJj YXBzIj5QSFA8L3NwYW4+IG1hbnVhbCBjb21tZW50cykgOyBmaXhlZCByb2d1ZSB0ZW1wIGZp bGUgbGVmdCBiZWhpbmQgd2l0aCB6aXAgaW1wb3J0PC9saT4KCQk8bGk+MTUgRmViIDIwMTAg fCAwLjIyIHwgV2hlbiByZW5hbWluZyB0aGUgY29yZSB0aGVtZSA8c3BhbiBjbGFzcz0iY2Fw cyI+UEhQPC9zcGFuPiBmaWxlLCBhdXRvbWF0aWNhbGx5IHJlbmFtZSBkaXJlY3RvcnkgdG9v ICh0aGFua3MgZmxvb2RmaXNoKTwvbGk+CgkJPGxpPjI4IEZlYiAyMDEwIHwgMC4yMyB8IFJ1 ZGltZW50YXJ5IHZhbGlkYXRpb24gb2YgemlwIGZpbGUgY29udGVudHMgKHRoYW5rcyBUdXRz X2FuZF9UaXBwcyk7IGZpeGVkIGV4cG9ydCBub3RpZmljYXRpb248L2xpPgoJCTxsaT4wNiBB dWcgMjAxMCB8IDAuMjQgfCBGaXhlZCA8Y29kZT5mc29ja29wZW4oKTwvY29kZT4gYW5kIHVu ZGVmaW5lZCBpbmRleCB3YXJuaW5ncyBpZiBub3QgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5l dCAvIHByZWZzIG5vdCBpbnN0YWxsZWQ8L2xpPgoJCTxsaT4wMSBOb3YgMjAxMCB8IDAuMjUg fCBCZXR0ZXIgdGhlbWUgaW50ZWdyYXRpb24gKGNvbG91cnMsIGV0YykgOyBmaXhlZCBkdXBs aWNhdGUgcGFnZSByZW5kZXJzIG9uIGVkaXQgc2NyZWVuIGFuZCBhZGRlZCBmaWxlbmFtZSBm b3JtYXQgb3B0aW9uIChib3RoIHRoYW5rcyBtYXZlcmljayk8L2xpPgoJCTxsaT4yMSBGZWIg MjAxMSB8IDAuMjYgfCBGaXhlZCBpbXBvcnQgYnVnIGlmIG1vcmUgdGhhbiBvbmUgZG90IGlu IGZpbGVuYW1lICh0aGFua3MgcGhpbHdhcmVoYW0pPC9saT4KCQk8bGk+PGRlbD4wOCBKdW4g MjAxMSB8IDAuMjcgfCBGaXhlZCBlcnJvbmVvdXMgc3RyaXBwaW5nIG9mIHNsYXNoZXMgb24g c2F2ZSA7IGFkZGVkIHR4cCBwYXRoIHByZWYgKHRoYW5rcyBtYW5pcXVpKTwvZGVsPiA8c3Ry b25nPjxzcGFuIGNsYXNzPSJjYXBzIj5WRVJTSU9OPC9zcGFuPiA8c3BhbiBjbGFzcz0iY2Fw cyI+UkVWT0tFRDwvc3Bhbj48L3N0cm9uZz48L2xpPgoJCTxsaT4yOCBTZXAgMjAxMSB8IDAu MjggfCBGaXhlZCBlcnJvbmVvdXMgc3RyaXBwaW5nIG9mIHNsYXNoZXMgb24gc2F2ZTwvbGk+ Cgk8L3VsPgoKCTxoMiBpZD0iY3JlZGl0cyI+Q3JlZGl0czwvaDI+CgoJPHA+VGhpcyBwbHVn aW4gd291bGQgbm90IGhhdmUgZXhpc3RlZCB3aXRob3V0IHRoZSBkZWRpY2F0aW9uLCBpZGVh cyBhbmQgZ2VuaXVzIG9mIHRoZSBUZXh0cGF0dGVybiBkZXZlbG9wbWVudCB0ZWFtLCBlc3Bl Y2lhbGx5IFJvYmVydCBXZXR6bG1heXIgZm9yIHRoZSB0aGVtZSBzdXBwb3J0LiBQbHVzIG9m IGNvdXJzZSB0aGUgYXJteSBvZiBiZXRhIHRlc3RlcnMsIGlkZWFzIGhhbXN0ZXJzIGFuZCB0 aXJlbGVzcyB0aGVtZSBhZHZvY2F0ZXMsIG1vc3Qgbm90YWJseSBTdHVhcnQgQnV0Y2hlciwg RGFsZSBDaGFwbWFuLCBEYXZlIERlU2FuZHJvLCBhbmQgTWlrZSBEZW5uaXMuPC9wPgoKCTxw PkkgYW0gYWxzbyBpbmRlYnRlZCB0byB0aGUgbGlicmFyaWVzIGhvc3RlZCBhdCA8YSBocmVm PSJodHRwOi8vcGhwY2xhc3Nlcy5vcmcvIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiBDbGFzc2VzPC9hPiB0aGF0IGVuYWJsZWQgbmF0aXZlIGNvbXByZXNzaW9uIGFuZCBkZWNv bXByZXNzaW9uIG9mIHZhcmlvdXMgdHlwZXMuIFRoZSBoYXJkIHdvcmsgb2YgRGV2aW4gRG91 Y2V0dGUgYW5kIEFsZXhhbmRyZSBUZWRlc2NoaSByZWFsbHkgYWRkZWQgdGhlIGljaW5nIG9u IHRoZSBjYWtlIGZvciB0aGlzIHBsdWdpbi48L3A+CgoJPHA+S3Vkb3MgYW5kIHRoYW5rcyB0 byB5b3UgYWxsLjwvcD4KCjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAt LT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41 IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAl ICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjog I2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2Vp Z2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFy Z2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9u dDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNl bnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7 IHBhZGRpbmc6MTBweCAwIDA7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQoj c21kX2hlbHAgaDMgeyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRl ci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVy Y2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVscCBoNCB7IGZvbnQ6 IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFy Z2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgfQojc21kX2hlbHAg LmF0bm0geyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91 bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUgeyB3 aWR0aDo5MCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07IH0KI3Nt ZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRp bmc6LjVlbSAwOyB9CiNzbWRfaGVscCB1bCB7IGxpc3Qtc3R5bGUtdHlwZTpzcXVhcmU7IH0K I3NtZF9oZWxwIC5pbXBvcnRhbnQgeyBjb2xvcjpyZWQ7IH0KI3NtZF9oZWxwIGxpIHsgbWFy Z2luOjVweCAyMHB4IDVweCAzMHB4OyB9CiNzbWRfaGVscCAuYnJlYWsgeyBtYXJnaW4tdG9w OjVweDsgfQo8L3N0eWxlPgo8IS0tICoqKiBFTkQgUExVR0lOIENTUyAqKiogLS0+CiI7czoz OiJtZDUiO3M6MzI6IjgwMTg3MGZjN2EyYTk2MTI5NTdhOTY5ZDU2NTk0NTRhIjt9