{
	"auto_complete":
	{
		"selected_items":
		[
			[
				"scrapex",
				"scrapeXVideos"
			],
			[
				"cell",
				"cellspacing"
			],
			[
				"text-",
				"text-align"
			],
			[
				"tex",
				"text-align"
			],
			[
				"cali",
				"calendarId"
			],
			[
				"pub",
				"publishers_model"
			],
			[
				"bank_imp",
				"bank_import_allocation"
			],
			[
				"adve",
				"advertiser_invoices"
			],
			[
				"bank_impo",
				"bank_import_allocation"
			],
			[
				"adv",
				"advertiser_bookings"
			],
			[
				"invoice_ite",
				"invoice_item_type_id"
			],
			[
				"array",
				"array_key_exists"
			],
			[
				"base6",
				"base64_decode"
			],
			[
				"appe",
				"appendChild"
			],
			[
				"prev",
				"prevIndex"
			],
			[
				"nativ",
				"native_code"
			],
			[
				"inn",
				"innerText"
			],
			[
				"image",
				"imageContainerWidth"
			],
			[
				"imageCon",
				"imageContainerWidth"
			],
			[
				"get",
				"getElementById"
			],
			[
				"bas",
				"base64_decode()"
			],
			[
				"fet",
				"fetchAll"
			],
			[
				"Ref",
				"Referrals"
			],
			[
				"getPubsBy",
				"getPublishersByManagerId"
			],
			[
				"Publis",
				"Publishers"
			],
			[
				"veri",
				"verify_staff"
			],
			[
				"inp",
				"input-group"
			],
			[
				"mouse",
				"mouseenter"
			],
			[
				"fl",
				"flex-column"
			],
			[
				"form-che",
				"form-check-input"
			],
			[
				"input",
				"input-group"
			],
			[
				"form",
				"form-row"
			],
			[
				"backgrou",
				"background-color"
			],
			[
				"text",
				"text-decoration"
			],
			[
				"dail",
				"daily_impressions"
			],
			[
				"publisher",
				"publisher_bookings_log"
			],
			[
				"native_",
				"native_code"
			],
			[
				"np_eng",
				"np_engagebay_signup"
			],
			[
				"fetc",
				"fetchAll"
			],
			[
				"fk_ema",
				"fk_email_campaign_id"
			],
			[
				"non",
				"nonopener"
			],
			[
				"fk_camp",
				"fk_email_campaign_id"
			],
			[
				"array_key",
				"array_key_exists"
			],
			[
				"wire",
				"wire_transfer"
			],
			[
				"attr",
				"getAttribute"
			],
			[
				"cust",
				"customCssAdditional"
			],
			[
				"custo",
				"customCssDesktop"
			],
			[
				"desktop",
				"desktop_custom_image_size_width"
			],
			[
				"sampl",
				"sampleDescription"
			],
			[
				"sample",
				"sampleSocials"
			],
			[
				"samp",
				"sampleBrand"
			],
			[
				"image_de",
				"desktop_custom_image_size_width"
			],
			[
				"cus",
				"customCssMobile"
			],
			[
				"F",
				"FETCH_COLUMN"
			],
			[
				"forea",
				"foreach\tforeach …"
			]
		]
	},
	"buffers":
	[
		{
			"file": "resources/js/Components/Member/Feed.vue",
			"settings":
			{
				"buffer_size": 116907,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
			]
		},
		{
			"contents": "        // Check if user has dignity for demnitari category\n        if ($category->slug === 'demnitari') {\n            $member = LodgeMember::where('user_id', $request->user()->id)\n                ->where('lodge_id', $request->lodge_id)\n                ->first();\n\n            if (!$member || !$member->lodge_dignity_id) {\n                return response()->json([\n                    'message' => 'Nu aveți permisiunea de a posta în categoria Demnitari.'\n                ], 403);\n            }\n        }\n\n    const categories = [\n        { slug: 'comunicari', icon: 'M18 3a1 1 0 00-1.447-.894L8.763 6H5a3 3 0 000 6h.28l1.771 5.316A1 1 0 008 18h1a1 1 0 001-1v-4.382l6.553 3.276A1 1 0 0018 15V3z' },\n        { slug: 'demnitari', icon: 'M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z' },\n        { slug: 'miaza-zi', icon: 'M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z' },\n        { slug: 'miaza-noapte', icon: 'M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z' },\n        { slug: 'profun', icon: 'M18 10c0 3.866-3.582 7-8 7a8.841 8.841 0 01-4.083-.98L2 17l1.338-3.123C2.493 12.767 2 11.434 2 10c0-3.866 3.582-7 8-7s8 3.134 8 7zM7 9H5v2h2V9zm8 0h-2v2h2V9zM9 9h2v2H9V9z' }\n    ];\n\n            <div id=\"createboxpost\" v-if=\"(category == 'comunicari' && (user.lodge_member?.lodge_dignity_id == 1 || user.lodge_member?.lodge_dignity_id == 6)) || (category == 'demnitari' && (user.lodge_member?.lodge_dignity_id == 1 || user.lodge_member?.lodge_dignity_id == 2 || user.lodge_member?.lodge_dignity_id == 3 || user.lodge_member?.lodge_dignity_id == 4 || user.lodge_member?.lodge_dignity_id == 5 || user.lodge_member?.lodge_dignity_id == 6 || user.lodge_member?.lodge_dignity_id == 7 || user.lodge_member?.lodge_dignity_id == 8 || user.lodge_member?.lodge_dignity_id == 9)) || (category == 'miaza-zi' && (user.role == 'maestru' || user.role == 'calfa')) || (category == 'miaza-noapte' && (user.role == 'maestru' || user.role == 'calfa' || user.role == 'ucenic')) || (category == 'profun' && (user.role == 'maestru' || user.role == 'calfa' || user.role == 'ucenic'))\">",
			"settings":
			{
				"buffer_size": 2673,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					1,
					1,
					"paste",
					null,
					"AQAAAAAAAAAAAAAAA28BAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
				],
				[
					8,
					1,
					"paste",
					null,
					"AgAAAAAAAAAAAAAA+AEAAAAAAAAAAAAA+AEAAAAAAAD4AQAAAAAAADVvAQA8c2NyaXB0IHNldHVwPgppbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgdG9SYXcsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgdXNlUGFnZSB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwppbXBvcnQgXyBmcm9tICdsb2Rhc2gnOwppbXBvcnQgTW9kYWwgZnJvbSAnQC9Db21wb25lbnRzL01vZGFsLnZ1ZSc7CmltcG9ydCBJbnB1dExhYmVsIGZyb20gJ0AvQ29tcG9uZW50cy9JbnB1dExhYmVsLnZ1ZSc7CmltcG9ydCBUZXh0SW5wdXQgZnJvbSAnQC9Db21wb25lbnRzL1RleHRJbnB1dC52dWUnOwppbXBvcnQgVGV4dGFyZWEgZnJvbSAnQC9Db21wb25lbnRzL1RleHRhcmVhLnZ1ZSc7CmltcG9ydCBJbnB1dEVycm9yIGZyb20gJ0AvQ29tcG9uZW50cy9JbnB1dEVycm9yLnZ1ZSc7CmltcG9ydCBQcmltYXJ5QnV0dG9uIGZyb20gJ0AvQ29tcG9uZW50cy9QcmltYXJ5QnV0dG9uLnZ1ZSc7CmltcG9ydCBEYXRlcGlja2VyIGZyb20gJ0B2dWVwaWMvdnVlLWRhdGVwaWNrZXInOwppbXBvcnQgJ0B2dWVwaWMvdnVlLWRhdGVwaWNrZXIvZGlzdC9tYWluLmNzcyc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBTZWNvbmRhcnlCdXR0b24gZnJvbSAnQC9Db21wb25lbnRzL1NlY29uZGFyeUJ1dHRvbi52dWUnOwppbXBvcnQgRWNobyBmcm9tICdsYXJhdmVsLWVjaG8nOwppbXBvcnQgUHVzaGVyIGZyb20gJ3B1c2hlci1qcyc7CgppbXBvcnQgQ3JlYXRlUG9zdE1vZGFsIGZyb20gJy4vQ3JlYXRlUG9zdE1vZGFsLnZ1ZSc7CmltcG9ydCBDcmVhdGVFdmVudE1vZGFsIGZyb20gJy4vQ3JlYXRlRXZlbnRNb2RhbC52dWUnOwppbXBvcnQgQ3JlYXRlUG9sbE1vZGFsIGZyb20gJy4vQ3JlYXRlUG9sbE1vZGFsLnZ1ZSc7CmltcG9ydCBFZGl0UG9zdE1vZGFsIGZyb20gJy4vRWRpdFBvc3RNb2RhbC52dWUnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvMiA9ICgpID0+IHsKICAgIGNvbnNvbGUubG9nKCdzdGFydGluZyBlY2hvMicpOwogICAgdHJ5IHsKICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIHBvc3RzIGNoYW5uZWwKICAgICAgICBjb25zdCBjaGFubmVsID0gd2luZG93LkVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAKICAgICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXIgZm9yIFBvc3RSZWFjdGlvblVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RSZWFjdGlvblVwZGF0ZWQnLCAoZGF0YSkgPT4geyAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3Bvc3QnIGluIGRhdGEpIHsKICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGV4aXN0aW5nIHBvc3QgdG8gcHJlc2VydmUgaXRzIGRhdGEKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUG9zdCA9IGxvY2FsUG9zdHMudmFsdWUuZmluZChwb3N0ID0+IHBvc3QuaWQgPT09IGRhdGEucG9zdC5pZCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwb3N0IG9iamVjdCB3aXRoIGFsbCBuZWNlc3NhcnkgZGF0YQogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7CiAgICAgICAgICAgICAgICAgICAgLi4uZGF0YS5wb3N0LAogICAgICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHBvbGwgZGF0YSBpZiBpdCBleGlzdHMKICAgICAgICAgICAgICAgICAgICBwb2xsOiBleGlzdGluZ1Bvc3Q/LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUG9zdC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZV9jb3VudHMgaXMgYWx3YXlzIGRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IGV4aXN0aW5nUG9zdC5wb2xsLnZvdGVfY291bnRzIHx8IHt9LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZXMgaXMgYWx3YXlzIGFuIGFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBleGlzdGluZ1Bvc3QucG9sbC52b3RlcyB8fCBbXQogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIGV2ZW50IGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV4aXN0aW5nUG9zdD8uZXZlbnQgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUG9zdC5ldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBleGlzdGluZ1Bvc3QuZXZlbnQucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nUG9zdC5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHZvdGVfY291bnRzIGlzIGFsd2F5cyBkZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXhpc3RpbmdQb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZXMgaXMgYWx3YXlzIGFuIGFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogZXhpc3RpbmdQb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgW10KICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgcG9zdCBpbiBsb2NhbFBvc3RzCiAgICAgICAgICAgICAgICBjb25zdCBwb3N0SW5kZXggPSBsb2NhbFBvc3RzLnZhbHVlLmZpbmRJbmRleChwb3N0ID0+IHBvc3QuaWQgPT09IHVwZGF0ZWRQb3N0LmlkKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHBvc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHBvc3QKICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9zdHMgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFBvc3RzW3Bvc3RJbmRleF0gPSB1cGRhdGVkUG9zdDsKICAgICAgICAgICAgICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gdXBkYXRlZFBvc3RzOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHBvc3RzCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGN1cnJlbnRQYWdlLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlclBhZ2UgPSAxMDsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGVyUGFnZTsKICAgICAgICAgICAgICAgICAgICB2aXNpYmxlUG9zdHMudmFsdWUgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZS5zbGljZShzdGFydCwgZW5kKV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyIGZvciBQb3N0Q29tbWVudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDb21tZW50VXBkYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAncG9zdCcgaW4gZGF0YSkgewogICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZXhpc3RpbmcgcG9zdCB0byBwcmVzZXJ2ZSBpdHMgZGF0YQogICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdQb3N0ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kKHBvc3QgPT4gcG9zdC5pZCA9PT0gZGF0YS5wb3N0LmlkKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBvc3Qgb2JqZWN0IHdpdGggYWxsIG5lY2Vzc2FyeSBkYXRhCiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9zdCA9IHsKICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLnBvc3QsCiAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgICAgIHBvbGw6IGV4aXN0aW5nUG9zdD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXhpc3RpbmdQb3N0LnBvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB2b3RlX2NvdW50cyBpcyBhbHdheXMgZGVmaW5lZAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXhpc3RpbmdQb3N0LnBvbGwudm90ZV9jb3VudHMgfHwge30sCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB2b3RlcyBpcyBhbHdheXMgYW4gYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGV4aXN0aW5nUG9zdC5wb2xsLnZvdGVzIHx8IFtdCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgZXZlbnQgZGF0YSBpZiBpdCBleGlzdHMKICAgICAgICAgICAgICAgICAgICBldmVudDogZXhpc3RpbmdQb3N0Py5ldmVudCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXhpc3RpbmdQb3N0LmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBleGlzdGluZyBwb2xsIGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGw6IGV4aXN0aW5nUG9zdC5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXhpc3RpbmdQb3N0LmV2ZW50LnBvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZV9jb3VudHMgaXMgYWx3YXlzIGRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBleGlzdGluZ1Bvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB2b3RlcyBpcyBhbHdheXMgYW4gYXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBleGlzdGluZ1Bvc3QuZXZlbnQucG9sbC52b3RlcyB8fCBbXQogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgcG9zdCBpbiBsb2NhbFBvc3RzCiAgICAgICAgICAgICAgICBjb25zdCBwb3N0SW5kZXggPSBsb2NhbFBvc3RzLnZhbHVlLmZpbmRJbmRleChwb3N0ID0+IHBvc3QuaWQgPT09IHVwZGF0ZWRQb3N0LmlkKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHBvc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHBvc3QKICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9zdHMgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFBvc3RzW3Bvc3RJbmRleF0gPSB1cGRhdGVkUG9zdDsKICAgICAgICAgICAgICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gdXBkYXRlZFBvc3RzOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHBvc3RzCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGN1cnJlbnRQYWdlLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlclBhZ2UgPSAxMDsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGVyUGFnZTsKICAgICAgICAgICAgICAgICAgICB2aXNpYmxlUG9zdHMudmFsdWUgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZS5zbGljZShzdGFydCwgZW5kKV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyIGZvciBQb2xsVm90ZVVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignUG9sbFZvdGVVcGRhdGVkJywgKGRhdGEpID0+IHsgICAgICAgICAgICAKICAgICAgICAgICAgY29uc29sZS5sb2coJ1tGZWVkXSBQb2xsVm90ZVVwZGF0ZWQgZXZlbnQgcmVjZWl2ZWQ6JywgZGF0YSk7CiAgICAgICAgICAgIGlmIChkYXRhLnBvbGwpIHsKICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHBvc3QgdGhhdCBjb250YWlucyB0aGlzIHBvbGwKICAgICAgICAgICAgICAgIGNvbnN0IHBvc3RJbmRleCA9IGxvY2FsUG9zdHMudmFsdWUuZmluZEluZGV4KHBvc3QgPT4gCiAgICAgICAgICAgICAgICAgICAgKHBvc3QucG9sbCAmJiBwb3N0LnBvbGwuaWQgPT09IGRhdGEucG9sbC5pZCkgfHwgCiAgICAgICAgICAgICAgICAgICAgKHBvc3QuZXZlbnQ/LnBvbGwgJiYgcG9zdC5ldmVudC5wb2xsLmlkID09PSBkYXRhLnBvbGwuaWQpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW0ZlZWRdIEZvdW5kIHBvc3QgYXQgaW5kZXg6JywgcG9zdEluZGV4KTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHBvc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgdG8gdHJpZ2dlciByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3RzID0gWy4uLmxvY2FsUG9zdHMudmFsdWVdOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB2b3RlIGNvdW50cwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvdGVDb3VudHMgPSB7fTsKICAgICAgICAgICAgICAgICAgICBkYXRhLnBvbGwub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVDb3VudHNbb3B0aW9uXSA9IGRhdGEucG9sbC52b3Rlcy5maWx0ZXIodm90ZSA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGUuc2VsZWN0ZWRfb3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICkubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9sbCBkYXRhIHdpdGhpbiB0aGUgcG9zdAogICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkUG9zdHNbcG9zdEluZGV4XS5wb2xsPy5pZCA9PT0gZGF0YS5wb2xsLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb2xsID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YS5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGRhdGEucG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB2b3RlQ291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdHNbcG9zdEluZGV4XSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnVwZGF0ZWRQb3N0c1twb3N0SW5kZXhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvbGwKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRQb3N0c1twb3N0SW5kZXhdLmV2ZW50Py5wb2xsPy5pZCA9PT0gZGF0YS5wb2xsLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb2xsID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YS5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGRhdGEucG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB2b3RlQ291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdHNbcG9zdEluZGV4XSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnVwZGF0ZWRQb3N0c1twb3N0SW5kZXhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdHNbcG9zdEluZGV4XS5ldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiB1cGRhdGVkUG9sbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGxvY2FsUG9zdHMgcmVmIHdpdGggYSBuZXcgYXJyYXkgdG8gZm9yY2UgcmVhY3Rpdml0eQogICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSB1cGRhdGVkUG9zdHM7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUgYnkgY3JlYXRpbmcgYSBuZXcgYXJyYXkKICAgICAgICAgICAgICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gWy4uLmxvY2FsUG9zdHMudmFsdWVdOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIHVwZGF0ZSB2aXNpYmxlIHBvc3RzCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGN1cnJlbnRQYWdlLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlclBhZ2UgPSAxMDsgLy8gRGVmYXVsdCBwb3N0cyBwZXIgcGFnZQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBlclBhZ2U7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwZXJQYWdlOwogICAgICAgICAgICAgICAgICAgIHZpc2libGVQb3N0cy52YWx1ZSA9IFsuLi5sb2NhbFBvc3RzLnZhbHVlLnNsaWNlKHN0YXJ0LCBlbmQpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXIgZm9yIFBvc3RDcmVhdGVkCiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJy5Qb3N0Q3JlYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAncG9zdCcgaW4gZGF0YSkgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBvc3QgYWxyZWFkeSBleGlzdHMgaW4gbG9jYWxQb3N0cwogICAgICAgICAgICAgICAgY29uc3QgcG9zdEV4aXN0cyA9IGxvY2FsUG9zdHMudmFsdWUuc29tZShwb3N0ID0+IHBvc3QuaWQgPT09IGRhdGEucG9zdC5pZCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghcG9zdEV4aXN0cykgewogICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHBvc3QgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gW2RhdGEucG9zdCwgLi4ubG9jYWxQb3N0cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHZpc2libGUgcG9zdHMKICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gY3VycmVudFBhZ2UudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVyUGFnZSA9IDEwOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBlclBhZ2U7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwZXJQYWdlOwogICAgICAgICAgICAgICAgICAgIHZpc2libGVQb3N0cy52YWx1ZSA9IFsuLi5sb2NhbFBvc3RzLnZhbHVlLnNsaWNlKHN0YXJ0LCBlbmQpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXIgZm9yIFVucmVhZFBvc3RzQ291bnRVcGRhdGVkCiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJy5VbnJlYWRQb3N0c0NvdW50VXBkYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEudW5zZWVuUG9zdHNDb3VudCkgewogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bnNlZW4gcG9zdHMgY291bnQgaW4gdGhlIHBhZ2UgcHJvcHMKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdERlbGV0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3REZWxldGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdwb3N0X2lkJyBpbiBkYXRhKSB7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBwb3N0IGZyb20gbG9jYWxQb3N0cwogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3RzID0gbG9jYWxQb3N0cy52YWx1ZS5maWx0ZXIocG9zdCA9PiBwb3N0LmlkICE9PSBkYXRhLnBvc3RfaWQpOwogICAgICAgICAgICAgICAgbG9jYWxQb3N0cy52YWx1ZSA9IHVwZGF0ZWRQb3N0czsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHZpc2libGUgcG9zdHMKICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBjdXJyZW50UGFnZS52YWx1ZTsKICAgICAgICAgICAgICAgIGNvbnN0IHBlclBhZ2UgPSAxMDsKICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIHBlclBhZ2U7CiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBlclBhZ2U7CiAgICAgICAgICAgICAgICB2aXNpYmxlUG9zdHMudmFsdWUgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZS5zbGljZShzdGFydCwgZW5kKV07CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyIGZvciBFdmVudENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLkV2ZW50Q3JlYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGV2ZW50IGRhdGEgcmVjZWl2ZWQ6JywgZGF0YSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgcG9zdCBoYXMgdGhlIHJlcXVpcmVkIHN0cnVjdHVyZQogICAgICAgICAgICBjb25zdCBwb3N0ID0gewogICAgICAgICAgICAgICAgLi4uZGF0YS5wb3N0LAogICAgICAgICAgICAgICAgZXZlbnQ6IGRhdGEucG9zdC5ldmVudCA/IHsKICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLnBvc3QuZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogZGF0YS5wb3N0LmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEucG9zdC5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGhhbmRsZUV2ZW50Q3JlYXRlZChwb3N0KTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENvbW1lbnRBZGRlZAogICAgICAgIGNoYW5uZWwubGlzdGVuKCcuUG9zdENvbW1lbnRBZGRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAncG9zdCcgaW4gZGF0YSkgewogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBleGlzdGluZyBwb3N0IHRvIHByZXNlcnZlIGl0cyBkYXRhCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1Bvc3QgPSBsb2NhbFBvc3RzLnZhbHVlLmZpbmQocG9zdCA9PiBwb3N0LmlkID09PSBkYXRhLnBvc3QuaWQpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcG9zdCBvYmplY3Qgd2l0aCBhbGwgbmVjZXNzYXJ5IGRhdGEKICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAgICAgICAgIC4uLmRhdGEucG9zdCwKICAgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBleGlzdGluZyBldmVudCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgICAgIGV2ZW50OiBkYXRhLnBvc3QuZXZlbnQgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEucG9zdC5ldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBleGlzdGluZ1Bvc3Q/LmV2ZW50Py5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZXhpc3RpbmdQb3N0LmV2ZW50LnBvbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZV9jb3VudHMgaXMgYWx3YXlzIGRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBleGlzdGluZ1Bvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHBvc3QgaW4gbG9jYWxQb3N0cwogICAgICAgICAgICAgICAgY29uc3QgcG9zdEluZGV4ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kSW5kZXgocG9zdCA9PiBwb3N0LmlkID09PSB1cGRhdGVkUG9zdC5pZCk7CiAgICAgICAgICAgICAgICBpZiAocG9zdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB0byB0cmlnZ2VyIHJlYWN0aXZpdHkKICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9zdHMgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFBvc3RzW3Bvc3RJbmRleF0gPSB1cGRhdGVkUG9zdDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGxvY2FsUG9zdHMgcmVmIHdpdGggYSBuZXcgYXJyYXkgdG8gZm9yY2UgcmVhY3Rpdml0eQogICAgICAgICAgICAgICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSB1cGRhdGVkUG9zdHM7CgogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHBvc3RzIGlmIHRoZSB1cGRhdGVkIHBvc3QgaXMgaW4gdGhlIGN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpc2libGVQb3N0SW5kZXggPSB2aXNpYmxlUG9zdHMudmFsdWUuZmluZEluZGV4KHBvc3QgPT4gcG9zdC5pZCA9PT0gdXBkYXRlZFBvc3QuaWQpOwogICAgICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlUG9zdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmlzaWJsZVBvc3RzID0gWy4uLnZpc2libGVQb3N0cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaXNpYmxlUG9zdHNbdmlzaWJsZVBvc3RJbmRleF0gPSB1cGRhdGVkUG9zdDsKICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gdXBkYXRlZFZpc2libGVQb3N0czsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBEYXNoYm9hcmQgY29tcG9uZW50CiAgICAgICAgICAgICAgICAgICAgZW1pdCgndXBkYXRlLXBvc3RzJywgewogICAgICAgICAgICAgICAgICAgICAgICBwb3N0SWQ6IHVwZGF0ZWRQb3N0LmlkLAogICAgICAgICAgICAgICAgICAgICAgICBwb3N0RGF0YTogdXBkYXRlZFBvc3QKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXIgZm9yIFBvc3RQb2xsQ3JlYXRlZAogICAgICAgIGNoYW5uZWwubGlzdGVuKCdQb3N0UG9sbENyZWF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3Bvc3QnIGluIGRhdGEpIHsKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwb3N0IG9iamVjdCB3aXRoIGFsbCBuZWNlc3NhcnkgZGF0YQogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7CiAgICAgICAgICAgICAgICAgICAgLi4uZGF0YS5wb3N0LAogICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBwb2xsIGRhdGEgaXMgcHJvcGVybHkgc3RydWN0dXJlZAogICAgICAgICAgICAgICAgICAgIHBvbGw6IGRhdGEucG9zdC5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLnBvc3QucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHZvdGVfY291bnRzIGlzIGFsd2F5cyBkZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBkYXRhLnBvc3QucG9sbC52b3RlX2NvdW50cyB8fCB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHZvdGVzIGlzIGFsd2F5cyBhbiBhcnJheQogICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogZGF0YS5wb3N0LnBvbGwudm90ZXMgfHwgW10KICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgcG9zdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheQogICAgICAgICAgICAgICAgbG9jYWxQb3N0cy52YWx1ZSA9IFt1cGRhdGVkUG9zdCwgLi4ubG9jYWxQb3N0cy52YWx1ZV07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHBvc3RzCiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gY3VycmVudFBhZ2UudmFsdWU7CiAgICAgICAgICAgICAgICBjb25zdCBwZXJQYWdlID0gMTA7CiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgICAgICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwZXJQYWdlOwogICAgICAgICAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWy4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2Uoc3RhcnQsIGVuZCldOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgRWNobzonLCBlcnJvcik7CiAgICB9Cn07CgovLyBBZGQgbmV3IGZ1bmN0aW9uIHRvIG1hcmsgcG9zdCBhcyBzZWVuCmNvbnN0IG1hcmtQb3N0QXNTZWVuID0gYXN5bmMgKHBvc3RJZCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Qocm91dGUoJ21lbWJlci5wb3N0cy5tYXJrLXNlZW4nLCBwb3N0SWQpKTsKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7CiAgICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgd2lsbCBicm9hZGNhc3QgdGhlIHVwZGF0ZWQgY291bnQsIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQgZXZlbnQgbGlzdGVuZXIKICAgICAgICAgICAgY29uc29sZS5sb2coJ1Bvc3QgbWFya2VkIGFzIHNlZW4gc3VjY2Vzc2Z1bGx5Jyk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBtYXJraW5nIHBvc3QgYXMgc2VlbjonLCBlcnJvcik7CiAgICB9Cn07Cgpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGxvZGdlID0gcGFnZS5wcm9wcy5sb2RnZTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgcG9zdHM6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHsgZGF0YTogW10gfSkKICAgIH0sCiAgICBjYXRlZ29yaWVzOiB7CiAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgZGVmYXVsdDogKCkgPT4gW10KICAgIH0sCiAgICBjYXRlZ29yeTogewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgIH0sCiAgICBsb2RnZTogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogZmFsc2UsCiAgICAgICAgZGVmYXVsdDogbnVsbAogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9LAogICAgaXNEZXNrdG9wOiB7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgIH0KfSk7CgovLyBBZGQgaXNNb2JpbGUgcmVmIGFuZCB3aW5kb3cgcmVzaXplIGhhbmRsZXIKY29uc3QgaXNNb2JpbGUgPSByZWYoZmFsc2UpOwoKY29uc3QgY2hlY2tXaW5kb3dTaXplID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaXNNb2JpbGUudmFsdWUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7CiAgICB9Cn07CgovLyBDcmVhdGUgYSBsb2NhbCByZWFjdGl2ZSBjb3B5IG9mIHRoZSBwb3N0cwpjb25zdCBsb2NhbFBvc3RzID0gcmVmKFtdKTsKY29uc3QgdmlzaWJsZVBvc3RzID0gcmVmKFtdKTsKY29uc3QgY3VycmVudEJhdGNoID0gcmVmKDApOwpjb25zdCBwb3N0c1BlckJhdGNoID0gNTsKY29uc3QgaW5pdGlhbFBvc3RzQ291bnQgPSAxMDsKY29uc3QgaXNMb2FkaW5nTW9yZSA9IHJlZihmYWxzZSk7CmNvbnN0IGhhc01vcmVQb3N0cyA9IHJlZih0cnVlKTsKY29uc3QgY3VycmVudFBhZ2UgPSByZWYoMSk7CgovLyBJbml0aWFsaXplIHZpc2libGUgcG9zdHMKY29uc3QgaW5pdGlhbGl6ZVZpc2libGVQb3N0cyA9ICgpID0+IHsKICAgIGlmICghcHJvcHMucG9zdHM/LmRhdGEpIHJldHVybjsKICAgIAogICAgbG9jYWxQb3N0cy52YWx1ZSA9IHByb3BzLnBvc3RzLmRhdGE7CiAgICB2aXNpYmxlUG9zdHMudmFsdWUgPSBsb2NhbFBvc3RzLnZhbHVlOwogICAgY3VycmVudEJhdGNoLnZhbHVlID0gMTsKICAgIGN1cnJlbnRQYWdlLnZhbHVlID0gcHJvcHMucG9zdHMuY3VycmVudF9wYWdlOwogICAgaGFzTW9yZVBvc3RzLnZhbHVlID0gcHJvcHMucG9zdHMuY3VycmVudF9wYWdlIDwgcHJvcHMucG9zdHMubGFzdF9wYWdlOwp9OwoKLy8gTG9hZCBtb3JlIHBvc3RzCmNvbnN0IGxvYWRNb3JlUG9zdHMgPSBhc3luYyAoKSA9PiB7CiAgICBpZiAoaXNMb2FkaW5nTW9yZS52YWx1ZSB8fCAhaGFzTW9yZVBvc3RzLnZhbHVlKSByZXR1cm47CiAgICAKICAgIGlzTG9hZGluZ01vcmUudmFsdWUgPSB0cnVlOwogICAgCiAgICB0cnkgewogICAgICAgIGNvbnN0IG5leHRQYWdlID0gY3VycmVudFBhZ2UudmFsdWUgKyAxOwogICAgICAgIAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAvZGFzaGJvYXJkL2xvYWQtbW9yZT9jYXRlZ29yeT0ke3Byb3BzLmNhdGVnb3J5fSZwYWdlPSR7bmV4dFBhZ2V9YCk7CiAgICAgICAgCiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZGF0YSAmJiByZXNwb25zZS5kYXRhLmRhdGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBuZXdQb3N0cyA9IHJlc3BvbnNlLmRhdGEuZGF0YTsKICAgICAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWy4uLnZpc2libGVQb3N0cy52YWx1ZSwgLi4ubmV3UG9zdHNdOwogICAgICAgICAgICBjdXJyZW50UGFnZS52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuY3VycmVudF9wYWdlOwogICAgICAgICAgICBoYXNNb3JlUG9zdHMudmFsdWUgPSByZXNwb25zZS5kYXRhLmN1cnJlbnRfcGFnZSA8IHJlc3BvbnNlLmRhdGEubGFzdF9wYWdlOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gTWFyayBuZXcgcG9zdHMgYXMgc2VlbgogICAgICAgICAgICBmb3IgKGNvbnN0IHBvc3Qgb2YgbmV3UG9zdHMpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvc3RzLm1hcmstc2VlbicsIHBvc3QuaWQpKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbWFya2luZyBwb3N0IGFzIHNlZW46JywgZXJyb3IpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGFzTW9yZVBvc3RzLnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIG1vcmUgcG9zdHM6JywgZXJyb3IpOwogICAgICAgIGhhc01vcmVQb3N0cy52YWx1ZSA9IGZhbHNlOwogICAgfSBmaW5hbGx5IHsKICAgICAgICBpc0xvYWRpbmdNb3JlLnZhbHVlID0gZmFsc2U7CiAgICB9Cn07CgovLyBIYW5kbGUgc2Nyb2xsIHdpdGggZGVib3VuY2UKY29uc3QgaGFuZGxlU2Nyb2xsID0gXy5kZWJvdW5jZSgoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjsKICAgIAogICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodDsKICAgIGNvbnN0IHNjcm9sbFRvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7CiAgICBjb25zdCBjbGllbnRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgCiAgICAvLyBMb2FkIG1vcmUgd2hlbiB1c2VyIGlzIHdpdGhpbiAyMDBweCBvZiB0aGUgYm90dG9tCiAgICBpZiAoc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIDw9IGNsaWVudEhlaWdodCArIDIwMCkgewogICAgICAgIGxvYWRNb3JlUG9zdHMoKTsKICAgIH0KfSwgMTAwKTsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLnBvc3RzCndhdGNoKCgpID0+IHByb3BzLnBvc3RzPy5kYXRhLCAobmV3UG9zdHMpID0+IHsKICAgIGlmIChuZXdQb3N0cykgewogICAgbG9jYWxQb3N0cy52YWx1ZSA9IG5ld1Bvc3RzOwogICAgICAgIGluaXRpYWxpemVWaXNpYmxlUG9zdHMoKTsKICAgIH0KfSwgeyBkZWVwOiB0cnVlIH0pOwoKLy8gSW5pdGlhbGl6ZSBvbiBtb3VudApvbk1vdW50ZWQoKCkgPT4gewogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7CiAgICB9CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQogICAgaW5pdGlhbGl6ZVZpc2libGVQb3N0cygpOwoKICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnMKICAgIGNvbnN0IHdhaXRGb3JFY2hvID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LkVjaG8gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2FpdEZvckVjaG8pOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUVjaG8yKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgRWNobzonLCBlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LCAxMDApOyAvLyBjaGVjayBldmVyeSAxMDBtcwoKCiAgICAvLyBBZGQgaW50ZXJzZWN0aW9uIG9ic2VydmVyIHNldHVwCiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7CiAgICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgewogICAgICAgICAgICAgICAgY29uc3QgcG9zdElkID0gZW50cnkudGFyZ2V0LmRhdGFzZXQucG9zdElkOwogICAgICAgICAgICAgICAgaWYgKHBvc3RJZCkgewogICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwb3N0IGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIGFzIHNlZW4KICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3N0ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kKHAgPT4gcC5pZCA9PT0gcGFyc2VJbnQocG9zdElkKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3QgJiYgIXBvc3Qudmlld3M/LnNvbWUodmlldyA9PiB2aWV3LnVzZXJfaWQgPT09IHVzZXIuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtQb3N0QXNTZWVuKHBvc3RJZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LCB7CiAgICAgICAgdGhyZXNob2xkOiAwLjUsIC8vIFRyaWdnZXIgd2hlbiA1MCUgb2YgdGhlIHBvc3QgaXMgdmlzaWJsZQogICAgICAgIHJvb3RNYXJnaW46ICcwcHgnIC8vIE5vIG1hcmdpbgogICAgfSk7CgogICAgLy8gT2JzZXJ2ZSBhbGwgcG9zdCBlbGVtZW50cwogICAgY29uc3Qgb2JzZXJ2ZVBvc3RzID0gKCkgPT4gewogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wb3N0LWNvbnRhaW5lcicpLmZvckVhY2gocG9zdCA9PiB7CiAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUocG9zdCk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8vIEluaXRpYWwgb2JzZXJ2YXRpb24KICAgIG9ic2VydmVQb3N0cygpOwoKICAgIC8vIE9ic2VydmUgbmV3IHBvc3RzIHdoZW4gdGhleSdyZSBhZGRlZAogICAgY29uc3QgcG9zdHNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucG9zdHMtY29udGFpbmVyJyk7CiAgICBpZiAocG9zdHNDb250YWluZXIpIHsKICAgICAgICBjb25zdCBwb3N0c09ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgICBvYnNlcnZlUG9zdHMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcG9zdHNPYnNlcnZlci5vYnNlcnZlKHBvc3RzQ29udGFpbmVyLCB7CiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwKICAgICAgICAgICAgc3VidHJlZTogdHJ1ZQogICAgICAgIH0pOwogICAgfQp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGlmIChlY2hvKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IGVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWwuc3RvcExpc3RlbmluZygnLlBvc3REZWxldGVkJyk7CiAgICAgICAgICAgICAgICBlY2hvLmxlYXZlKCdwb3N0cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmVlZCAtIEVycm9yIGxlYXZpbmcgcG9zdHMgY2hhbm5lbDonLCBlcnJvcik7CiAgICAgICAgfQogICAgfQogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7CiAgICB9CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHNob3dQb3N0TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gcmVmKCcnKTsKCmNvbnN0IGZvcm0gPSB1c2VGb3JtKHsKICAgIGNvbnRlbnQ6ICcnLAogICAgaW1hZ2U6IG51bGwsCiAgICBmaWxlczogW10sCiAgICBjYXRlZ29yeV9pZDogbnVsbCwKICAgIGxvZGdlX2lkOiBudWxsLAogICAgY2F0ZWdvcnk6IG51bGwKfSk7CgovLyBVcGRhdGUgY2F0ZWdvcnlfaWQgd2hlbiBjb21wb25lbnQgbW91bnRzIGFuZCB3aGVuIGNhdGVnb3J5IGNoYW5nZXMKd2F0Y2goKCkgPT4gcHJvcHMuY2F0ZWdvcnksIChuZXdDYXRlZ29yeSkgPT4gewogICAgY29uc3QgY2F0ZWdvcnkgPSBwcm9wcy5jYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5zbHVnID09PSBuZXdDYXRlZ29yeSk7CiAgICBpZiAoY2F0ZWdvcnkpIHsKICAgICAgICBmb3JtLmNhdGVnb3J5X2lkID0gY2F0ZWdvcnkuaWQ7CiAgICAgICAgZm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgICAgIGZvcm0uY2F0ZWdvcnkgPSBuZXdDYXRlZ29yeTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSWYgbm8gY2F0ZWdvcnkgZm91bmQsIHVzZSB0aGUgZmlyc3QgY2F0ZWdvcnkKICAgICAgICBjb25zdCBmaXJzdENhdGVnb3J5ID0gcHJvcHMuY2F0ZWdvcmllc1swXTsKICAgICAgICBpZiAoZmlyc3RDYXRlZ29yeSkgewogICAgICAgICAgICBmb3JtLmNhdGVnb3J5X2lkID0gZmlyc3RDYXRlZ29yeS5pZDsKICAgICAgICAgICAgZm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgICAgICAgICBmb3JtLmNhdGVnb3J5ID0gZmlyc3RDYXRlZ29yeS5zbHVnOwogICAgICAgIH0KICAgIH0KfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7CgovLyBBZGQgYSB3YXRjaCBmb3IgZm9ybS5jYXRlZ29yeV9pZCB0byBlbnN1cmUgaXQncyBhbHdheXMgc2V0CndhdGNoKCgpID0+IGZvcm0uY2F0ZWdvcnlfaWQsIChuZXdJZCkgPT4gewp9LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTsKCmNvbnN0IHNob3dFbW9qaVBpY2tlciA9IHJlZihmYWxzZSk7CmNvbnN0IGltYWdlUHJldmlld1VybCA9IHJlZihudWxsKTsKCi8vIEFkZCBhIHdhdGNoIGZvciBzaG93UG9zdE1vZGFsIHRvIHJlc2V0IGltYWdlIHByZXZpZXcgd2hlbiBtb2RhbCBpcyBjbG9zZWQKd2F0Y2goc2hvd1Bvc3RNb2RhbCwgKG5ld1ZhbHVlKSA9PiB7CiAgICBpZiAoIW5ld1ZhbHVlKSB7CiAgICAgICAgLy8gUmVzZXQgZm9ybSBhbmQgaW1hZ2UgcHJldmlldyB3aGVuIG1vZGFsIGlzIGNsb3NlZAogICAgICAgIGZvcm0ucmVzZXQoKTsKICAgICAgICBpZiAoaW1hZ2VQcmV2aWV3VXJsLnZhbHVlKSB7CiAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1hZ2VQcmV2aWV3VXJsLnZhbHVlKTsKICAgICAgICAgICAgaW1hZ2VQcmV2aWV3VXJsLnZhbHVlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgc2hvd0Vtb2ppUGlja2VyLnZhbHVlID0gZmFsc2U7CiAgICB9Cn0pOwoKY29uc3Qgd2FsbHMgPSBbCiAgICB7IGlkOiAnYWxsJywgbmFtZTogJ1RvYXRlJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgeyBpZDogJ2V2ZW50cycsIG5hbWU6ICdFdmVuaW1lbnRlJywgaWNvbjogJ004IDdWM204IDRWM20tOSA4aDEwTTUgMjFoMTRhMiAyIDAgMDAyLTJWN2EyIDIgMCAwMC0yLTJINWEyIDIgMCAwMC0yIDJ2MTJhMiAyIDAgMDAyIDJ6JyB9LAogICAgeyBpZDogJ2Fubm91bmNlbWVudHMnLCBuYW1lOiAnQW51bsibdXJpJywgaWNvbjogJ00xMSA1Ljg4MlYxOS4yNGExLjc2IDEuNzYgMCAwMS0zLjQxNy41OTJsLTIuMTQ3LTYuMTVNMTggMTNhMyAzIDAgMTAwLTZNNS40MzYgMTMuNjgzQTQuMDAxIDQuMDAxIDAgMDE3IDZoMS44MzJjNC4xIDAgNy42MjUtMS4yMzQgOS4xNjgtM3YxNGMtMS41NDMtMS43NjYtNS4wNjctMy05LjE2OC0zSDdhMy45ODggMy45ODggMCAwMS0xLjU2NC0uMzE3eicgfSwKICAgIHsgaWQ6ICdkaXNjdXNzaW9ucycsIG5hbWU6ICdEaXNjdcibaWknLCBpY29uOiAnTTggMTJoLjAxTTEyIDEyaC4wMU0xNiAxMmguMDFNMjEgMTJjMCA0LjQxOC00LjAzIDgtOSA4YTkuODYzIDkuODYzIDAgMDEtNC4yNTUtLjk0OUwzIDIwbDEuMzk1LTMuNzJDMy41MTIgMTUuMDQyIDMgMTMuNTc0IDMgMTJjMC00LjQxOCA0LjAzLTggOS04czkgMy41ODIgOSA4eicgfQpdOwoKY29uc3QgYWN0aXZlUmVhY3Rpb25Qb3N0ID0gcmVmKG51bGwpOwpjb25zdCBhY3RpdmVDb21tZW50c1Bvc3QgPSByZWYobnVsbCk7CmNvbnN0IGNvbW1lbnRGb3JtID0gdXNlRm9ybSh7CiAgICBjb250ZW50OiAnJywKICAgIHBvc3RfaWQ6IG51bGwKfSk7Cgpjb25zdCBzaG93Q29tbWVudElucHV0ID0gcmVmKGZhbHNlKTsKY29uc3QgbmV3Q29tbWVudCA9IHJlZignJyk7Cgpjb25zdCB0b2dnbGVSZWFjdGlvblBpY2tlciA9IChwb3N0SWQpID0+IHsKICAgIGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSA9IGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSA9PT0gcG9zdElkID8gbnVsbCA6IHBvc3RJZDsKfTsKCmNvbnN0IGhhbmRsZUxpa2VDbGljayA9IGFzeW5jIChwb3N0KSA9PiB7CiAgICB0cnkgewogICAgICAgIGNvbnN0IHVzZXJSZWFjdGlvbiA9IHBvc3QucmVhY3Rpb25zPy5maW5kKHIgPT4gci51c2VyX2lkID09PSB1c2VyLmlkKTsKICAgICAgICAKICAgICAgICBpZiAodXNlclJlYWN0aW9uKSB7CiAgICAgICAgICAgIGNvbnN0IHhzcmZUb2tlbiA9IGRvY3VtZW50LmNvb2tpZQogICAgICAgICAgICAgICAgLnNwbGl0KCc7ICcpCiAgICAgICAgICAgICAgICAuZmluZChyb3cgPT4gcm93LnN0YXJ0c1dpdGgoJ1hTUkYtVE9LRU49JykpCiAgICAgICAgICAgICAgICA/LnNwbGl0KCc9JylbMV07CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIXhzcmZUb2tlbikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdYU1JGIHRva2VuIG5vdCBmb3VuZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5yZWFjdGlvbnMuZGVzdHJveScsIHsgcG9zdDogcG9zdC5pZCwgcmVhY3Rpb246IHVzZXJSZWFjdGlvbi5pZCB9KSwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoeHNyZlRva2VuKSwKICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3RzID0gbG9jYWxQb3N0cy52YWx1ZS5tYXAocCA9PiB7CiAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gcG9zdC5pZCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAgICAgICAgICAgICAuLi5wLAogICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbnM6IHAucmVhY3Rpb25zLmZpbHRlcihyID0+IHIuaWQgIT09IHVzZXJSZWFjdGlvbi5pZCkKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIGVtaXQoJ3VwZGF0ZS1wb3N0cycsIHsgcG9zdElkOiBwLmlkLCBwb3N0RGF0YTogdXBkYXRlZFBvc3QgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWRQb3N0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgbG9jYWxQb3N0cy52YWx1ZSA9IFsuLi51cGRhdGVkUG9zdHNdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSA9IHBvc3QuaWQ7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDE5KSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCByZWFjdFRvUG9zdCA9IGFzeW5jIChwb3N0LCBlbW9qaSkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCB1c2VyUmVhY3Rpb24gPSBwb3N0LnJlYWN0aW9ucz8uZmluZChyID0+IHIudXNlcl9pZCA9PT0gdXNlci5pZCk7CiAgICAgICAgCiAgICAgICAgaWYgKHVzZXJSZWFjdGlvbikgewogICAgICAgICAgICAgICAgY29uc3QgeHNyZlRva2VuID0gZG9jdW1lbnQuY29va2llCiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7ICcpCiAgICAgICAgICAgICAgICAgICAgLmZpbmQocm93ID0+IHJvdy5zdGFydHNXaXRoKCdYU1JGLVRPS0VOPScpKQogICAgICAgICAgICAgICAgICAgID8uc3BsaXQoJz0nKVsxXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF4c3JmVG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1hTUkYgdG9rZW4gbm90IGZvdW5kJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgYXdhaXQgYXhpb3MuZGVsZXRlKHJvdXRlKCdtZW1iZXIucG9zdHMucmVhY3Rpb25zLmRlc3Ryb3knLCB7IHBvc3Q6IHBvc3QuaWQsIHJlYWN0aW9uOiB1c2VyUmVhY3Rpb24uaWQgfSksIHsKICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoeHNyZlRva2VuKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0cyA9IGxvY2FsUG9zdHMudmFsdWUubWFwKHAgPT4gewogICAgICAgICAgICAgICAgICAgIGlmIChwLmlkID09PSBwb3N0LmlkKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3Rpb25zOiBwLnJlYWN0aW9ucy5maWx0ZXIociA9PiByLmlkICE9PSB1c2VyUmVhY3Rpb24uaWQpCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgZW1pdCgndXBkYXRlLXBvc3RzJywgeyBwb3N0SWQ6IHAuaWQsIHBvc3REYXRhOiB1cGRhdGVkUG9zdCB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFBvc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSBbLi4udXBkYXRlZFBvc3RzXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgcm91dGVVcmwgPSByb3V0ZSgnbWVtYmVyLnBvc3RzLnJlYWN0aW9ucy5zdG9yZScsIHsgcG9zdDogcG9zdC5pZCB9KTsKICAgICAgICAgICAgY29uc3QgeHNyZlRva2VuID0gZG9jdW1lbnQuY29va2llCiAgICAgICAgICAgICAgICAuc3BsaXQoJzsgJykKICAgICAgICAgICAgICAgIC5maW5kKHJvdyA9PiByb3cuc3RhcnRzV2l0aCgnWFNSRi1UT0tFTj0nKSkKICAgICAgICAgICAgICAgID8uc3BsaXQoJz0nKVsxXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgheHNyZlRva2VuKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1hTUkYgdG9rZW4gbm90IGZvdW5kJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Qocm91dGVVcmwsIAogICAgICAgICAgICAgICAgICAgIHsgZW1vamkgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoeHNyZlRva2VuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9zdHMgPSBsb2NhbFBvc3RzLnZhbHVlLm1hcChwID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAocC5pZCA9PT0gcG9zdC5pZCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uczogWy4uLihwLnJlYWN0aW9ucyB8fCBbXSksIHJlc3BvbnNlLmRhdGEucmVhY3Rpb25dCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgZW1pdCgndXBkYXRlLXBvc3RzJywgeyBwb3N0SWQ6IHAuaWQsIHBvc3REYXRhOiB1cGRhdGVkUG9zdCB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZFBvc3Q7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSBbLi4udXBkYXRlZFBvc3RzXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID0gbnVsbDsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQxOSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfQogICAgfQp9OwoKLy8gQWRkIGhlbHBlciBtZXRob2QgdG8gY2hlY2sgaWYgdXNlciByZWFjdGVkIHdpdGggc3BlY2lmaWMgZW1vamkKY29uc3QgaGFzUmVhY3RlZCA9IChwb3N0LCBlbW9qaSkgPT4gewogICAgcmV0dXJuIHBvc3QucmVhY3Rpb25zLnNvbWUoCiAgICAgICAgcmVhY3Rpb24gPT4gcmVhY3Rpb24udXNlcl9pZCA9PT0gdXNlci5pZCAmJiByZWFjdGlvbi5lbW9qaSA9PT0gZW1vamkKICAgICk7Cn07Cgpjb25zdCBkZWxldGVDb21tZW50ID0gYXN5bmMgKHBvc3QsIGNvbW1lbnQpID0+IHsKICAgIGlmICghY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbW1lbnQ/JykpIHJldHVybjsKICAgIAogICAgdHJ5IHsKICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5jb21tZW50cy5kZXN0cm95JywgeyBwb3N0OiBwb3N0LmlkLCBjb21tZW50OiBjb21tZW50LmlkIH0pLCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llLm1hdGNoKC9YU1JGLVRPS0VOPShbXjtdKykvKVsxXSksCiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFVwZGF0ZSBsb2NhbFBvc3RzCiAgICAgICAgY29uc3QgaW5kZXggPSBsb2NhbFBvc3RzLnZhbHVlLmZpbmRJbmRleChwID0+IHAuaWQgPT09IHBvc3QuaWQpOwogICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7CiAgICAgICAgICAgICAgICAuLi5sb2NhbFBvc3RzLnZhbHVlW2luZGV4XSwKICAgICAgICAgICAgICAgIGNvbW1lbnRzOiBsb2NhbFBvc3RzLnZhbHVlW2luZGV4XS5jb21tZW50cy5maWx0ZXIoYyA9PiBjLmlkICE9PSBjb21tZW50LmlkKQogICAgICAgICAgICB9OwogICAgICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gWwogICAgICAgICAgICAgICAgLi4ubG9jYWxQb3N0cy52YWx1ZS5zbGljZSgwLCBpbmRleCksCiAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdCwKICAgICAgICAgICAgICAgIC4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2UoaW5kZXggKyAxKQogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgLy8gVXBkYXRlIHZpc2libGVQb3N0cwogICAgICAgIGNvbnN0IHZpc2libGVJbmRleCA9IHZpc2libGVQb3N0cy52YWx1ZS5maW5kSW5kZXgocCA9PiBwLmlkID09PSBwb3N0LmlkKTsKICAgICAgICBpZiAodmlzaWJsZUluZGV4ICE9PSAtMSkgewogICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9zdCA9IHsKICAgICAgICAgICAgICAgIC4uLnZpc2libGVQb3N0cy52YWx1ZVt2aXNpYmxlSW5kZXhdLAogICAgICAgICAgICAgICAgY29tbWVudHM6IHZpc2libGVQb3N0cy52YWx1ZVt2aXNpYmxlSW5kZXhdLmNvbW1lbnRzLmZpbHRlcihjID0+IGMuaWQgIT09IGNvbW1lbnQuaWQpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZpc2libGVQb3N0cy52YWx1ZSA9IFsKICAgICAgICAgICAgICAgIC4uLnZpc2libGVQb3N0cy52YWx1ZS5zbGljZSgwLCB2aXNpYmxlSW5kZXgpLAogICAgICAgICAgICAgICAgdXBkYXRlZFBvc3QsCiAgICAgICAgICAgICAgICAuLi52aXNpYmxlUG9zdHMudmFsdWUuc2xpY2UodmlzaWJsZUluZGV4ICsgMSkKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGNvbW1lbnQ6JywgZXJyb3IpOwogICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MTkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZGVsZXRlIGNvbW1lbnQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgICAgfQogICAgfQp9OwoKY29uc3Qgc2hvd0NvbW1lbnRzID0gKHBvc3QpID0+IHsKICAgIGFjdGl2ZUNvbW1lbnRzUG9zdC52YWx1ZSA9IGFjdGl2ZUNvbW1lbnRzUG9zdC52YWx1ZSA9PT0gcG9zdC5pZCA/IG51bGwgOiBwb3N0LmlkOwogICAgaWYgKGFjdGl2ZUNvbW1lbnRzUG9zdC52YWx1ZSA9PT0gcG9zdC5pZCkgewogICAgICAgIGNvbW1lbnRGb3JtLnBvc3RfaWQgPSBwb3N0LmlkOwogICAgfQp9OwoKY29uc3QgYWRkQ29tbWVudCA9IGFzeW5jIChwb3N0KSA9PiB7CiAgICBpZiAoIWNvbW1lbnRGb3JtLmNvbnRlbnQudHJpbSgpKSByZXR1cm47CiAgICAKICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMuY29tbWVudHMuc3RvcmUnLCBwb3N0LmlkKSwgewogICAgICAgICAgICBjb250ZW50OiBjb21tZW50Rm9ybS5jb250ZW50CiAgICAgICAgfSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnWC1YU1JGLVRPS0VOJzogZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvWFNSRi1UT0tFTj0oW147XSspLylbMV0pLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBFbnN1cmUgdGhlIGNvbW1lbnQgaGFzIHRoZSBwcm9wZXIgYXV0aG9yIGRhdGEgc3RydWN0dXJlCiAgICAgICAgY29uc3QgbmV3Q29tbWVudCA9IHsKICAgICAgICAgICAgLi4ucmVzcG9uc2UuZGF0YS5jb21tZW50LAogICAgICAgICAgICBhdXRob3I6IHsKICAgICAgICAgICAgICAgIGlkOiB1c2VyLmlkLAogICAgICAgICAgICAgICAgZmlyc3RfbmFtZTogdXNlci5maXJzdF9uYW1lLAogICAgICAgICAgICAgICAgbGFzdF9uYW1lOiB1c2VyLmxhc3RfbmFtZSwKICAgICAgICAgICAgICAgIHByb2ZpbGVfcGhvdG9fdXJsOiB1c2VyLnByb2ZpbGVfcGhvdG9fdXJsCiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBVcGRhdGUgdGhlIGxvY2FsIHBvc3Qgd2l0aCB0aGUgbmV3IGNvbW1lbnQKICAgICAgICBjb25zdCB1cGRhdGVkUG9zdCA9IHsKICAgICAgICAgICAgLi4ucG9zdCwKICAgICAgICAgICAgY29tbWVudHM6IFsuLi4ocG9zdC5jb21tZW50cyB8fCBbXSksIG5ld0NvbW1lbnRdCiAgICAgICAgfTsKCiAgICAgICAgLy8gVXBkYXRlIGxvY2FsUG9zdHMKICAgICAgICBjb25zdCBpbmRleCA9IGxvY2FsUG9zdHMudmFsdWUuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gcG9zdC5pZCk7CiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gWwogICAgICAgICAgICAgICAgLi4ubG9jYWxQb3N0cy52YWx1ZS5zbGljZSgwLCBpbmRleCksCiAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdCwKICAgICAgICAgICAgICAgIC4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2UoaW5kZXggKyAxKQogICAgICAgICAgICBdOwogICAgICAgIH0KCiAgICAgICAgLy8gVXBkYXRlIHZpc2libGVQb3N0cwogICAgICAgIGNvbnN0IHZpc2libGVJbmRleCA9IHZpc2libGVQb3N0cy52YWx1ZS5maW5kSW5kZXgocCA9PiBwLmlkID09PSBwb3N0LmlkKTsKICAgICAgICBpZiAodmlzaWJsZUluZGV4ICE9PSAtMSkgewogICAgICAgICAgICB2aXNpYmxlUG9zdHMudmFsdWUgPSBbCiAgICAgICAgICAgICAgICAuLi52aXNpYmxlUG9zdHMudmFsdWUuc2xpY2UoMCwgdmlzaWJsZUluZGV4KSwKICAgICAgICAgICAgICAgIHVwZGF0ZWRQb3N0LAogICAgICAgICAgICAgICAgLi4udmlzaWJsZVBvc3RzLnZhbHVlLnNsaWNlKHZpc2libGVJbmRleCArIDEpCiAgICAgICAgICAgIF07CiAgICAgICAgfQoKICAgICAgICAvLyBSZXNldCB0aGUgZm9ybQogICAgICAgIGNvbW1lbnRGb3JtLnJlc2V0KCk7CiAgICAgICAgY29tbWVudEZvcm0uY29udGVudCA9ICcnOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgY29tbWVudDonLCBlcnJvcik7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQxOSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfQogICAgfQp9OwoKY29uc3QgcmVmcmVzaFBvc3RzID0gYXN5bmMgKCkgPT4gewogICAgYXdhaXQgcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsncG9zdHMnXSB9KTsKfTsKCmNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudCkgPT4gewogICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjsKICAgIAogICAgLy8gR2V0IGFsbCBvcGVuIGVtb2ppIHBpY2tlcnMKICAgIGNvbnN0IGVtb2ppUGlja2VycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbW9qaS1waWNrZXInKTsKICAgIGNvbnN0IGxpa2VCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxpa2UtYnV0dG9uJyk7CiAgICAKICAgIC8vIENoZWNrIGlmIGNsaWNrIGlzIG91dHNpZGUgYm90aCB0aGUgZW1vamkgcGlja2VyIGFuZCBsaWtlIGJ1dHRvbgogICAgY29uc3QgY2xpY2tlZE91dHNpZGUgPSBBcnJheS5mcm9tKGVtb2ppUGlja2VycykuZXZlcnkocGlja2VyID0+ICFwaWNrZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGxpa2VCdXR0b25zKS5ldmVyeShidXR0b24gPT4gIWJ1dHRvbi5jb250YWlucyhldmVudC50YXJnZXQpKTsKICAgIAogICAgaWYgKGNsaWNrZWRPdXRzaWRlICYmIGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSAhPT0gbnVsbCkgewogICAgICAgIGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSA9IG51bGw7CiAgICB9Cn07CgovLyBPcHRpbWl6ZSBzYWZlQ2F0ZWdvcmllcyB3aXRoIG1lbW9pemF0aW9uCmNvbnN0IHNhZmVDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4gewogICAgaWYgKCFwcm9wcy5jYXRlZ29yaWVzKSByZXR1cm4gW107CiAgICAKICAgIC8vIENhY2hlIHRoZSByYXcgY2F0ZWdvcmllcyB2YWx1ZQogICAgY29uc3QgcmF3Q2F0ZWdvcmllcyA9IHRvUmF3KHByb3BzLmNhdGVnb3JpZXMpOwogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmF3Q2F0ZWdvcmllcykgPyByYXdDYXRlZ29yaWVzIDogW107Cn0pOwoKLy8gQWRkIGEgZGF0ZSBmb3JtYXR0aW5nIGZ1bmN0aW9uCmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpOwogICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdyby1STycsIHsKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBtb250aDogJ2xvbmcnLAogICAgICAgIHllYXI6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pLmZvcm1hdChkYXRlKTsKfTsKCmNvbnN0IGZvcm1hdFBvc3RDb250ZW50ID0gKGNvbnRlbnQpID0+IHsKICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoL1xuL2csICc8YnI+Jyk7Cn07Cgpjb25zdCBmb3JtYXREYXRlVGltZSA9IChkYXRlVGltZVN0cmluZykgPT4gewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lU3RyaW5nKTsKICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKCdyby1STycsIHsKICAgICAgICB3ZWVrZGF5OiAnbG9uZycsCiAgICAgICAgeWVhcjogJ251bWVyaWMnLAogICAgICAgIG1vbnRoOiAnbG9uZycsCiAgICAgICAgZGF5OiAnbnVtZXJpYycsCiAgICAgICAgaG91cjogJzItZGlnaXQnLAogICAgICAgIG1pbnV0ZTogJzItZGlnaXQnCiAgICB9KTsKfTsKCmNvbnN0IGZvcm1hdEZpbGVTaXplID0gKGJ5dGVzKSA9PiB7CiAgICBpZiAoIWJ5dGVzKSByZXR1cm4gJzAgQnl0ZXMnOwogICAgCiAgICBjb25zdCBrID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQiddOwogICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpOwogICAgCiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHNob3dQb2xsTW9kYWwgPSByZWYoZmFsc2UpOwoKY29uc3QgaGFuZGxlUG9sbEJ1dHRvbkNsaWNrID0gKCkgPT4gewogICAgc2hvd1BvbGxNb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBzaG93RXZlbnRNb2RhbCA9IHJlZihmYWxzZSk7CgovLyBVcGRhdGUgdGhlIGJ1dHRvbiBjbGljayBoYW5kbGVyIHRvIHNldCBjYXRlZ29yeV9pZCBhbmQgbG9kZ2VfaWQKY29uc3QgaGFuZGxlRXZlbnRCdXR0b25DbGljayA9ICgpID0+IHsKICAgIHNob3dFdmVudE1vZGFsLnZhbHVlID0gdHJ1ZTsKfTsKCmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3VwZGF0ZS1wb3N0cycsICdwb2xsLXVwZGF0ZWQnXSk7CgovLyBVcGRhdGUgdGhlIHNhZmVQb3N0cyBjb21wdXRlZCBwcm9wZXJ0eSB0byB1c2UgbG9jYWxQb3N0cwpjb25zdCBzYWZlUG9zdHMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gewogICAgICAgIGRhdGE6IGxvY2FsUG9zdHMudmFsdWUgfHwgW10KICAgIH07Cn0pOwoKLy8gVXBkYXRlIHRoZSBoYW5kbGVWb3RlIG1ldGhvZCB0byB1c2UgdGhlIHVwZGF0ZSBmdW5jdGlvbnMKY29uc3QgaGFuZGxlVm90ZSA9IGFzeW5jIChwb2xsLCBzZWxlY3RlZE9wdGlvbnMpID0+IHsKICAgIGlmICghcG9sbD8uaWQpIHJldHVybjsKICAgIAogICAgdHJ5IHsKICAgICAgICBjb25zb2xlLmxvZygnW0ZlZWRdIFN0YXJ0aW5nIHZvdGUgcHJvY2VzcyBmb3IgcG9sbDonLCBwb2xsLmlkKTsKICAgICAgICBjb25zb2xlLmxvZygnW0ZlZWRdIFNlbGVjdGVkIG9wdGlvbnM6Jywgc2VsZWN0ZWRPcHRpb25zKTsKICAgICAgICAKICAgICAgICAvLyBBbHdheXMgc2VuZCBhbiBhcnJheSBmb3Igc2VsZWN0ZWRfb3B0aW9ucwogICAgICAgIGxldCBvcHRpb25zVG9TdWJtaXQgPSBzZWxlY3RlZE9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZE9wdGlvbnMgPT09IG51bGwgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShzZWxlY3RlZE9wdGlvbnMpICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDApID8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSA6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRPcHRpb25zKSA/IHNlbGVjdGVkT3B0aW9ucyA6IFtzZWxlY3RlZE9wdGlvbnNdKTsKICAgICAgICAKICAgICAgICBjb25zb2xlLmxvZygnW0ZlZWRdIFN1Ym1pdHRpbmcgb3B0aW9uczonLCBvcHRpb25zVG9TdWJtaXQpOwogICAgICAgIAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvbGxzLnZvdGUnLCBwb2xsLmlkKSwgewogICAgICAgICAgICBzZWxlY3RlZF9vcHRpb25zOiBvcHRpb25zVG9TdWJtaXQKICAgICAgICB9LCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICBjb25zb2xlLmxvZygnW0ZlZWRdIFZvdGUgcmVzcG9uc2U6JywgcmVzcG9uc2UuZGF0YSk7CiAgICAgICAgCiAgICAgICAgaWYgKHJlc3BvbnNlPy5kYXRhPy5zdWNjZXNzKSB7CiAgICAgICAgICAgIC8vIEZpbmQgdGhlIHBvc3QgY29udGFpbmluZyB0aGlzIHBvbGwKICAgICAgICAgICAgY29uc3QgcG9zdEluZGV4ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kSW5kZXgocG9zdCA9PiAKICAgICAgICAgICAgICAgIChwb3N0LnBvbGwgJiYgcG9zdC5wb2xsLmlkID09PSBwb2xsLmlkKSB8fCAKICAgICAgICAgICAgICAgIChwb3N0LmV2ZW50Py5wb2xsICYmIHBvc3QuZXZlbnQucG9sbC5pZCA9PT0gcG9sbC5pZCkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbRmVlZF0gRm91bmQgcG9zdCBhdCBpbmRleDonLCBwb3N0SW5kZXgpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHBvc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3N0ID0gbG9jYWxQb3N0cy52YWx1ZVtwb3N0SW5kZXhdOwogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7IC4uLmN1cnJlbnRQb3N0IH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9sbCBkYXRhCiAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFBvc3QucG9sbD8uaWQgPT09IHBvbGwuaWQpIHsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdC5wb2xsID0gewogICAgICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogcmVzcG9uc2UuZGF0YS5wb2xsLnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogcmVzcG9uc2UuZGF0YS5wb2xsLnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZFBvc3QuZXZlbnQ/LnBvbGw/LmlkID09PSBwb2xsLmlkKSB7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFBvc3QuZXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnVwZGF0ZWRQb3N0LmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdC5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IHJlc3BvbnNlLmRhdGEucG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiByZXNwb25zZS5kYXRhLnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbRmVlZF0gVXBkYXRlZCBwb3N0OicsIHVwZGF0ZWRQb3N0KTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwb3N0IGluIHRoZSBhcnJheQogICAgICAgICAgICAgICAgbG9jYWxQb3N0cy52YWx1ZVtwb3N0SW5kZXhdID0gdXBkYXRlZFBvc3Q7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHBvc3RzCiAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gY3VycmVudFBhZ2UudmFsdWU7CiAgICAgICAgICAgICAgICBjb25zdCBwZXJQYWdlID0gMTA7CiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgICAgICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwZXJQYWdlOwogICAgICAgICAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWy4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2Uoc3RhcnQsIGVuZCldOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGUgdG8gcGFyZW50IGNvbXBvbmVudHMKICAgICAgICAgICAgICAgIGVtaXQoJ3VwZGF0ZS1wb3N0cycsIHsKICAgICAgICAgICAgICAgICAgICBwb3N0SWQ6IHVwZGF0ZWRQb3N0LmlkLAogICAgICAgICAgICAgICAgICAgIHBvc3REYXRhOiB1cGRhdGVkUG9zdAogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gRW1pdCBhIGN1c3RvbSBldmVudCBmb3IgdGhlIFJpZ2h0U2lkZWJhcgogICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRQb3N0LmV2ZW50Py5wb2xsPy5pZCA9PT0gcG9sbC5pZCkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbRmVlZF0gRW1pdHRpbmcgcG9sbC11cGRhdGVkIGV2ZW50IHdpdGggZGF0YTonLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxJZDogcG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgcG9sbERhdGE6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50CiAgICAgICAgICAgICAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICAgICAgICAgICAgICBwb2xsSWQ6IHBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGxEYXRhOiByZXNwb25zZS5kYXRhLnBvbGwKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy8gQWxzbyBlbWl0IGEgY3VzdG9tIGV2ZW50IHRoYXQgY2FuIGJlIGNhdWdodCBieSB0aGUgUmlnaHRTaWRlYmFyCiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9sbFVwZGF0ZUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdwb2xsLXVwZGF0ZWQnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbElkOiBwb2xsLmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9sbERhdGE6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQocG9sbFVwZGF0ZUV2ZW50KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW0ZlZWRdIEVtaXR0ZWQgdXBkYXRlLXBvc3RzIGV2ZW50Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2UgaWYgdGhlIHNlcnZlciByZXR1cm5zIHN1Y2Nlc3M6IGZhbHNlCiAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc3VibWl0IHZvdGUnKTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIC8vIFNob3cgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlCiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHN1Ym1pdHRpbmcgeW91ciB2b3RlLiBQbGVhc2UgdHJ5IGFnYWluLic7CiAgICAgICAgYWxlcnQoZXJyb3JNZXNzYWdlKTsKICAgIH0KfTsKCmNvbnN0IGdldFNlbGVjdGVkT3B0aW9ucyA9IChwb2xsKSA9PiB7CiAgICBpZiAoIXBvbGwudm90ZXMpIHJldHVybiBbXTsKICAgIGNvbnN0IHVzZXJWb3RlID0gcG9sbC52b3Rlcy5maW5kKHZvdGUgPT4gdm90ZS51c2VyX2lkID09PSB1c2VyLmlkKTsKICAgIHJldHVybiB1c2VyVm90ZSA/IHVzZXJWb3RlLnNlbGVjdGVkX29wdGlvbnMgOiBbXTsKfTsKCmNvbnN0IGlzT3B0aW9uU2VsZWN0ZWQgPSAocG9sbCwgb3B0aW9uKSA9PiB7CiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBnZXRTZWxlY3RlZE9wdGlvbnMocG9sbCk7CiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmluY2x1ZGVzKG9wdGlvbik7Cn07Cgpjb25zdCBzaG93Vm90ZXJzTW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHJlZihudWxsKTsKY29uc3Qgdm90ZXJzID0gcmVmKHt9KTsKCmNvbnN0IHNob3dWb3RlcnMgPSBhc3luYyAocG9sbCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhbGxWb3RlcnMgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBwb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQocm91dGUoJ21lbWJlci5wb2xscy52b3RlcnMnLCB7IHBvbGw6IHBvbGwuaWQsIG9wdGlvbiB9KSwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LnZvdGVycykgewogICAgICAgICAgICAgICAgYWxsVm90ZXJzW29wdGlvbl0gPSByZXNwb25zZS5kYXRhLnZvdGVyczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2b3RlcnMudmFsdWUgPSBhbGxWb3RlcnM7CiAgICAgICAgc2hvd1ZvdGVyc01vZGFsLnZhbHVlID0gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQxOSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBmZXRjaCB2b3RlcnMgbGlzdC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgICB9CiAgICB9Cn07CgovLyBBZGQgdGhpcyBuZXcgbWV0aG9kIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZXMgZnJvbSBSaWdodFNpZGViYXIKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZVJpZ2h0U2lkZWJhciA9ICh7IHBvc3RJZCwgcG9sbCB9KSA9PiB7CiAgICAvLyBGaW5kIHRoZSBwb3N0IGluIHRoZSBwb3N0cyBhcnJheQogICAgY29uc3QgcG9zdEluZGV4ID0gcHJvcHMucG9zdHMuZGF0YS5maW5kSW5kZXgocCA9PiBwLmlkID09PSBwb3N0SWQpOwogICAgaWYgKHBvc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICBjb25zdCB1cGRhdGVkUG9zdCA9IHsgLi4ucHJvcHMucG9zdHMuZGF0YVtwb3N0SW5kZXhdIH07CiAgICAgICAgaWYgKHVwZGF0ZWRQb3N0LmV2ZW50Py5wb2xsPy5pZCA9PT0gcG9sbC5pZCkgewogICAgICAgICAgICB1cGRhdGVkUG9zdC5ldmVudC5wb2xsID0gcG9sbDsKICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRQb3N0LnBvbGw/LmlkID09PSBwb2xsLmlkKSB7CiAgICAgICAgICAgIHVwZGF0ZWRQb3N0LnBvbGwgPSBwb2xsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCBwb3N0CiAgICAgICAgY29uc3QgdXBkYXRlZFBvc3RzID0gWwogICAgICAgICAgICAuLi5wcm9wcy5wb3N0cy5kYXRhLnNsaWNlKDAsIHBvc3RJbmRleCksCiAgICAgICAgICAgIHVwZGF0ZWRQb3N0LAogICAgICAgICAgICAuLi5wcm9wcy5wb3N0cy5kYXRhLnNsaWNlKHBvc3RJbmRleCArIDEpCiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGUgZXZlbnQKICAgICAgICBwcm9wcy5wb3N0cy5kYXRhID0gdXBkYXRlZFBvc3RzOwogICAgfQp9OwoKLy8gQWRkIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiBnZXRSZWFjdGlvbkNvdW50cwpjb25zdCBnZXRSZWFjdGlvbkNvdW50cyA9IChyZWFjdGlvbnMpID0+IHsKICAgIGlmICghQXJyYXkuaXNBcnJheShyZWFjdGlvbnMpKSByZXR1cm4ge307CiAgICAKICAgIC8vIFVzZSBhIE1hcCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbGFyZ2UgcmVhY3Rpb24gc2V0cwogICAgY29uc3QgY291bnRzID0gbmV3IE1hcCgpOwogICAgcmVhY3Rpb25zLmZvckVhY2gocmVhY3Rpb24gPT4gewogICAgICAgIGlmIChyZWFjdGlvbj8uZW1vamkpIHsKICAgICAgICAgICAgY291bnRzLnNldChyZWFjdGlvbi5lbW9qaSwgKGNvdW50cy5nZXQocmVhY3Rpb24uZW1vamkpIHx8IDApICsgMSk7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoY291bnRzKTsKfTsKCmNvbnN0IHNob3dFZGl0TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBlZGl0aW5nUG9zdCA9IHJlZihudWxsKTsKCmNvbnN0IG9wZW5FZGl0TW9kYWwgPSAocG9zdCkgPT4gewogICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgcG9zdCB0byBhdm9pZCBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsCiAgICBjb25zdCBwb3N0VG9FZGl0ID0gewogICAgICAgIC4uLnBvc3QsCiAgICAgICAgLy8gSWYgaXQncyBhIHBvbGwgcG9zdCwgZW5zdXJlIHdlIGhhdmUgdGhlIHBvbGwgZGF0YQogICAgICAgIHBvbGw6IHBvc3QucG9sbCA/IHsKICAgICAgICAgICAgLi4ucG9zdC5wb2xsLAogICAgICAgICAgICBxdWVzdGlvbjogcG9zdC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICBvcHRpb25zOiBwb3N0LnBvbGwub3B0aW9ucywKICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBwb3N0LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlCiAgICAgICAgfSA6IG51bGwsCiAgICAgICAgLy8gSWYgaXQncyBhbiBldmVudCBwb3N0LCBlbnN1cmUgd2UgaGF2ZSB0aGUgZXZlbnQgZGF0YQogICAgICAgIGV2ZW50OiBwb3N0LmV2ZW50ID8gewogICAgICAgICAgICAuLi5wb3N0LmV2ZW50LAogICAgICAgICAgICB0aXRsZTogcG9zdC5ldmVudC50aXRsZSwKICAgICAgICAgICAgZGVzY3JpcHRpb246IHBvc3QuZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgIHN0YXJ0X2RhdGU6IHBvc3QuZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgZW5kX2RhdGU6IHBvc3QuZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgIGxvY2F0aW9uOiBwb3N0LmV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICBwb2xsOiBwb3N0LmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAuLi5wb3N0LmV2ZW50LnBvbGwsCiAgICAgICAgICAgICAgICBxdWVzdGlvbjogcG9zdC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgb3B0aW9uczogcG9zdC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IHBvc3QuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UKICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICB9IDogbnVsbAogICAgfTsKICAgIAogICAgZWRpdGluZ1Bvc3QudmFsdWUgPSBwb3N0VG9FZGl0OwogICAgc2hvd0VkaXRNb2RhbC52YWx1ZSA9IHRydWU7Cn07CgovLyBIYW5kbGUgcmVndWxhciBwb3N0IHVwZGF0ZXMKY29uc3QgaGFuZGxlUmVndWxhclBvc3RVcGRhdGUgPSAocG9zdFRvVXBkYXRlLCBjdXJyZW50UG9zdCkgPT4gewogICAgLy8gRm9yIHJlZ3VsYXIgcG9zdHMsIHdlIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIGJhc2ljIHBvc3QgZGF0YQogICAgcmV0dXJuIHsKICAgICAgICAuLi5wb3N0VG9VcGRhdGUsCiAgICAgICAgcmVhY3Rpb25zOiBjdXJyZW50UG9zdC5yZWFjdGlvbnMgfHwgW10sCiAgICAgICAgY29tbWVudHM6IGN1cnJlbnRQb3N0LmNvbW1lbnRzIHx8IFtdLAogICAgICAgIHZpZXdzOiBjdXJyZW50UG9zdC52aWV3cyB8fCBbXQogICAgfTsKfTsKCi8vIEhhbmRsZSBldmVudCBwb3N0IHVwZGF0ZXMKY29uc3QgaGFuZGxlRXZlbnRQb3N0VXBkYXRlID0gKHBvc3RUb1VwZGF0ZSwgY3VycmVudFBvc3QpID0+IHsKICAgIGlmICghcG9zdFRvVXBkYXRlLmV2ZW50KSByZXR1cm4gcG9zdFRvVXBkYXRlOwoKICAgIC8vIENyZWF0ZSBhIGRlZXAgY29weSBvZiB0aGUgZXZlbnQgZGF0YQogICAgY29uc3QgdXBkYXRlZEV2ZW50ID0gewogICAgICAgIC4uLnBvc3RUb1VwZGF0ZS5ldmVudCwKICAgICAgICAvLyBQcmVzZXJ2ZSBhbnkgZXZlbnQtc3BlY2lmaWMgZGF0YSBmcm9tIGN1cnJlbnQgcG9zdAogICAgICAgIG5vdGlmaWVkXzI0aF9iZWZvcmU6IGN1cnJlbnRQb3N0LmV2ZW50Py5ub3RpZmllZF8yNGhfYmVmb3JlID8/IHBvc3RUb1VwZGF0ZS5ldmVudC5ub3RpZmllZF8yNGhfYmVmb3JlLAogICAgICAgIG5vdGlmaWVkX25vdzogY3VycmVudFBvc3QuZXZlbnQ/Lm5vdGlmaWVkX25vdyA/PyBwb3N0VG9VcGRhdGUuZXZlbnQubm90aWZpZWRfbm93LAogICAgICAgIC8vIEVuc3VyZSBhbGwgZXZlbnQgZmllbGRzIGFyZSBwcm9wZXJseSBjb3BpZWQKICAgICAgICB0aXRsZTogcG9zdFRvVXBkYXRlLmV2ZW50LnRpdGxlLAogICAgICAgIGRlc2NyaXB0aW9uOiBwb3N0VG9VcGRhdGUuZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgc3RhcnRfZGF0ZTogcG9zdFRvVXBkYXRlLmV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgZW5kX2RhdGU6IHBvc3RUb1VwZGF0ZS5ldmVudC5lbmRfZGF0ZSwKICAgICAgICBsb2NhdGlvbjogcG9zdFRvVXBkYXRlLmV2ZW50LmxvY2F0aW9uLAogICAgICAgIGF1dGhvcl9pZDogcG9zdFRvVXBkYXRlLmV2ZW50LmF1dGhvcl9pZAogICAgfTsKCiAgICAvLyBJZiB0aGUgZXZlbnQgaGFzIGEgcG9sbCwgaGFuZGxlIHBvbGwgZGF0YQogICAgaWYgKHBvc3RUb1VwZGF0ZS5ldmVudC5wb2xsKSB7CiAgICAgICAgdXBkYXRlZEV2ZW50LnBvbGwgPSBoYW5kbGVQb2xsVXBkYXRlKHBvc3RUb1VwZGF0ZS5ldmVudC5wb2xsLCBjdXJyZW50UG9zdC5ldmVudD8ucG9sbCk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgY29tcGxldGUgdXBkYXRlZCBwb3N0IHdpdGggYWxsIG5lY2Vzc2FyeSBkYXRhCiAgICByZXR1cm4gewogICAgICAgIC4uLnBvc3RUb1VwZGF0ZSwKICAgICAgICBldmVudDogdXBkYXRlZEV2ZW50LAogICAgICAgIC8vIFByZXNlcnZlIG90aGVyIHBvc3QgZGF0YQogICAgICAgIHJlYWN0aW9uczogY3VycmVudFBvc3QucmVhY3Rpb25zIHx8IFtdLAogICAgICAgIGNvbW1lbnRzOiBjdXJyZW50UG9zdC5jb21tZW50cyB8fCBbXSwKICAgICAgICB2aWV3czogY3VycmVudFBvc3Qudmlld3MgfHwgW10KICAgIH07Cn07CgovLyBIYW5kbGUgcG9sbCBkYXRhIHVwZGF0ZXMKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChuZXdQb2xsLCBjdXJyZW50UG9sbCkgPT4gewogICAgaWYgKCFjdXJyZW50UG9sbCkgcmV0dXJuIG5ld1BvbGw7CgogICAgLy8gQ3JlYXRlIGEgbWFwcGluZyBvZiBvbGQgb3B0aW9ucyB0byBuZXcgb3B0aW9ucwogICAgY29uc3Qgb3B0aW9uTWFwcGluZyA9IHt9OwogICAgY3VycmVudFBvbGwub3B0aW9ucy5mb3JFYWNoKChvbGRPcHRpb24sIGluZGV4KSA9PiB7CiAgICAgICAgaWYgKG5ld1BvbGwub3B0aW9uc1tpbmRleF0pIHsKICAgICAgICAgICAgb3B0aW9uTWFwcGluZ1tvbGRPcHRpb25dID0gbmV3UG9sbC5vcHRpb25zW2luZGV4XTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBVcGRhdGUgdm90ZSBjb3VudHMgZm9yIG5ldyBvcHRpb25zCiAgICBjb25zdCBuZXdWb3RlQ291bnRzID0ge307CiAgICBuZXdQb2xsLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gewogICAgICAgIC8vIENvdW50IHZvdGVzIGZvciB0aGlzIG9wdGlvbiBmcm9tIGV4aXN0aW5nIHZvdGVzCiAgICAgICAgY29uc3QgY291bnQgPSBjdXJyZW50UG9sbC52b3Rlcy5yZWR1Y2UoKGFjYywgdm90ZSkgPT4gewogICAgICAgICAgICByZXR1cm4gYWNjICsgKHZvdGUuc2VsZWN0ZWRfb3B0aW9ucy5zb21lKG9sZE9wdGlvbiA9PiAKICAgICAgICAgICAgICAgIG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXSA9PT0gb3B0aW9uCiAgICAgICAgICAgICkgPyAxIDogMCk7CiAgICAgICAgfSwgMCk7CiAgICAgICAgbmV3Vm90ZUNvdW50c1tvcHRpb25dID0gY291bnQ7CiAgICB9KTsKCiAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaW4gdm90ZXMgdG8gbWF0Y2ggbmV3IG9wdGlvbnMKICAgIGNvbnN0IHVwZGF0ZWRWb3RlcyA9IGN1cnJlbnRQb2xsLnZvdGVzLm1hcCh2b3RlID0+ICh7CiAgICAgICAgLi4udm90ZSwKICAgICAgICBzZWxlY3RlZF9vcHRpb25zOiB2b3RlLnNlbGVjdGVkX29wdGlvbnMubWFwKG9sZE9wdGlvbiA9PiAKICAgICAgICAgICAgb3B0aW9uTWFwcGluZ1tvbGRPcHRpb25dIHx8IG9sZE9wdGlvbgogICAgICAgICkKICAgIH0pKTsKCiAgICByZXR1cm4gewogICAgICAgIC4uLm5ld1BvbGwsCiAgICAgICAgdm90ZXM6IHVwZGF0ZWRWb3RlcywKICAgICAgICB2b3RlX2NvdW50czogbmV3Vm90ZUNvdW50cwogICAgfTsKfTsKCi8vIE1haW4gcG9zdCB1cGRhdGUgaGFuZGxlcgpjb25zdCBoYW5kbGVQb3N0VXBkYXRlZCA9ICh1cGRhdGVkUG9zdCkgPT4geyAgICAKICAgIGNvbnN0IGluZGV4ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kSW5kZXgocCA9PiBwLmlkID09PSB1cGRhdGVkUG9zdC5pZCk7CiAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgICAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IG9mIHRoZSB1cGRhdGVkIHBvc3QKICAgICAgICBjb25zdCBwb3N0VG9VcGRhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHVwZGF0ZWRQb3N0KSk7CiAgICAgICAgY29uc3QgY3VycmVudFBvc3QgPSBsb2NhbFBvc3RzLnZhbHVlW2luZGV4XTsKICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgdGhlIHVwZGF0ZSBiYXNlZCBvbiBwb3N0IHR5cGUKICAgICAgICBsZXQgdXBkYXRlZFBvc3REYXRhOwogICAgICAgIGlmIChwb3N0VG9VcGRhdGUuZXZlbnQpIHsKICAgICAgICAgICAgdXBkYXRlZFBvc3REYXRhID0gaGFuZGxlRXZlbnRQb3N0VXBkYXRlKHBvc3RUb1VwZGF0ZSwgY3VycmVudFBvc3QpOwogICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaGFzIGEgcG9sbCwgdXBkYXRlIHRoZSBSaWdodFNpZGViYXIKICAgICAgICAgICAgaWYgKHVwZGF0ZWRQb3N0RGF0YS5ldmVudD8ucG9sbCkgewogICAgICAgICAgICAgICAgaGFuZGxlUG9sbFVwZGF0ZVJpZ2h0U2lkZWJhcih7CiAgICAgICAgICAgICAgICAgICAgcG9zdElkOiB1cGRhdGVkUG9zdERhdGEuaWQsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvc3REYXRhLmV2ZW50LnBvbGwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwb3N0VG9VcGRhdGUucG9sbCkgewogICAgICAgICAgICB1cGRhdGVkUG9zdERhdGEgPSB7CiAgICAgICAgICAgICAgICAuLi5wb3N0VG9VcGRhdGUsCiAgICAgICAgICAgICAgICBwb2xsOiBoYW5kbGVQb2xsVXBkYXRlKHBvc3RUb1VwZGF0ZS5wb2xsLCBjdXJyZW50UG9zdC5wb2xsKQogICAgICAgICAgICB9OwogICAgICAgICAgICAvLyBVcGRhdGUgdGhlIFJpZ2h0U2lkZWJhciBmb3IgcmVndWxhciBwb2xscwogICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlUmlnaHRTaWRlYmFyKHsKICAgICAgICAgICAgICAgIHBvc3RJZDogdXBkYXRlZFBvc3REYXRhLmlkLAogICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvc3REYXRhLnBvbGwKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXBkYXRlZFBvc3REYXRhID0gaGFuZGxlUmVndWxhclBvc3RVcGRhdGUocG9zdFRvVXBkYXRlLCBjdXJyZW50UG9zdCk7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCBwb3N0CiAgICAgICAgY29uc3QgdXBkYXRlZFBvc3RzID0gWy4uLmxvY2FsUG9zdHMudmFsdWVdOwogICAgICAgIHVwZGF0ZWRQb3N0c1tpbmRleF0gPSB1cGRhdGVkUG9zdERhdGE7CiAgICAgICAgCiAgICAgICAgLy8gVXBkYXRlIGxvY2FsUG9zdHMgd2l0aCBhIG5ldyBhcnJheSByZWZlcmVuY2UKICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gdXBkYXRlZFBvc3RzOwoKICAgICAgICAvLyBVcGRhdGUgdmlzaWJsZSBwb3N0cyB3aXRoIGEgbmV3IGFycmF5IHJlZmVyZW5jZQogICAgICAgIGNvbnN0IHBhZ2UgPSBjdXJyZW50UGFnZS52YWx1ZTsKICAgICAgICBjb25zdCBwZXJQYWdlID0gMTA7CiAgICAgICAgY29uc3Qgc3RhcnQgPSAocGFnZSAtIDEpICogcGVyUGFnZTsKICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBlclBhZ2U7CiAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWy4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2Uoc3RhcnQsIGVuZCldOwoKICAgICAgICAvLyBGb3JjZSBhIHJlYWN0aXZlIHVwZGF0ZQogICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBhcnJheSByZWZlcmVuY2VzIHRvIGZvcmNlIHJlYWN0aXZpdHkKICAgICAgICAgICAgbG9jYWxQb3N0cy52YWx1ZSA9IFsuLi5sb2NhbFBvc3RzLnZhbHVlXTsKICAgICAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWy4uLnZpc2libGVQb3N0cy52YWx1ZV07CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGUgdG8gcGFyZW50IGNvbXBvbmVudHMgd2l0aCB0aGUgbGF0ZXN0IGRhdGEKICAgICAgICAgICAgZW1pdCgndXBkYXRlLXBvc3RzJywgewogICAgICAgICAgICAgICAgcG9zdElkOiB1cGRhdGVkUG9zdERhdGEuaWQsCiAgICAgICAgICAgICAgICBwb3N0RGF0YTogdXBkYXRlZFBvc3REYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBDbG9zZSB0aGUgZWRpdCBtb2RhbAogICAgICAgIHNob3dFZGl0TW9kYWwudmFsdWUgPSBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS5sb2coJ1Bvc3Qgbm90IGZvdW5kIGluIGFycmF5Jyk7CiAgICB9Cn07Cgpjb25zdCBkZWxldGVQb3N0ID0gYXN5bmMgKHBvc3QpID0+IHsKICAgIGlmICghY29uZmlybSgnRciZdGkgc2lndXIgY8SDIHZyZWkgc8SDIMiZdGVyZ2kgYWNlYXN0xIMgcG9zdGFyZT8nKSkgcmV0dXJuOwogICAgCiAgICB0cnkgewogICAgICAgIGNvbnN0IHhzcmZUb2tlbiA9IGRvY3VtZW50LmNvb2tpZQogICAgICAgICAgICAuc3BsaXQoJzsgJykKICAgICAgICAgICAgLmZpbmQocm93ID0+IHJvdy5zdGFydHNXaXRoKCdYU1JGLVRPS0VOPScpKQogICAgICAgICAgICA/LnNwbGl0KCc9JylbMV07CiAgICAgICAgCiAgICAgICAgaWYgKCF4c3JmVG9rZW4pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdYU1JGIHRva2VuIG5vdCBmb3VuZCcpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5kZXN0cm95JywgcG9zdC5pZCksIHsKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ1gtWFNSRi1UT0tFTic6IGRlY29kZVVSSUNvbXBvbmVudCh4c3JmVG9rZW4pLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIC8vIFJlbW92ZSB0aGUgcG9zdCBmcm9tIHRoZSBsb2NhbCBwb3N0cyBhcnJheQogICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSBsb2NhbFBvc3RzLnZhbHVlLmZpbHRlcihwID0+IHAuaWQgIT09IHBvc3QuaWQpOwogICAgICAgIAogICAgICAgIC8vIFJlZnJlc2ggdGhlIHBvc3RzIGxpc3QKICAgICAgICByb3V0ZXIudmlzaXQocm91dGUoJ2Rhc2hib2FyZCcsIHsgY2F0ZWdvcnk6IHByb3BzLmNhdGVnb3J5IH0pLCB7CiAgICAgICAgICAgIHByZXNlcnZlU3RhdGU6IHRydWUsCiAgICAgICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgICAgICBvbmx5OiBbJ3Bvc3RzJ10KICAgICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQxOSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0EgYXDEg3J1dCBvIGVyb2FyZSBsYSDImXRlcmdlcmVhIHBvc3TEg3JpaS4gVsSDIHJ1Z8SDbSBzxIMgw65uY2VyY2HIm2kgZGluIG5vdS4nKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBoYW5kbGVQb3N0UmVhY3Rpb25VcGRhdGUgPSAodXBkYXRlZFBvc3QpID0+IHsKICAgIGlmICghdXBkYXRlZFBvc3QgfHwgIXVwZGF0ZWRQb3N0LmlkKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBwb3N0IGRhdGEgcmVjZWl2ZWQ6JywgdXBkYXRlZFBvc3QpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgLy8gVXBkYXRlIGxvY2FsUG9zdHMKICAgIGNvbnN0IGluZGV4ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kSW5kZXgocCA9PiBwLmlkID09PSB1cGRhdGVkUG9zdC5pZCk7CiAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFycmF5IHdpdGggdGhlIHVwZGF0ZWQgcG9zdAogICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSBbCiAgICAgICAgICAgIC4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2UoMCwgaW5kZXgpLAogICAgICAgICAgICB7IC4uLnVwZGF0ZWRQb3N0IH0sCiAgICAgICAgICAgIC4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2UoaW5kZXggKyAxKQogICAgICAgIF07CiAgICB9IGVsc2UgewogICAgICAgIC8vIElmIHBvc3Qgbm90IGZvdW5kIGluIGxvY2FsUG9zdHMsIGFkZCBpdAogICAgICAgIGxvY2FsUG9zdHMudmFsdWUgPSBbLi4ubG9jYWxQb3N0cy52YWx1ZSwgeyAuLi51cGRhdGVkUG9zdCB9XTsKICAgIH0KCiAgICAvLyBVcGRhdGUgdmlzaWJsZVBvc3RzCiAgICBjb25zdCB2aXNpYmxlSW5kZXggPSB2aXNpYmxlUG9zdHMudmFsdWUuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gdXBkYXRlZFBvc3QuaWQpOwogICAgaWYgKHZpc2libGVJbmRleCAhPT0gLTEpIHsKICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCBwb3N0CiAgICAgICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWwogICAgICAgICAgICAuLi52aXNpYmxlUG9zdHMudmFsdWUuc2xpY2UoMCwgdmlzaWJsZUluZGV4KSwKICAgICAgICAgICAgeyAuLi51cGRhdGVkUG9zdCB9LAogICAgICAgICAgICAuLi52aXNpYmxlUG9zdHMudmFsdWUuc2xpY2UodmlzaWJsZUluZGV4ICsgMSkKICAgICAgICBdOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBwb3N0IG5vdCBmb3VuZCBpbiB2aXNpYmxlUG9zdHMsIGFkZCBpdAogICAgICAgIHZpc2libGVQb3N0cy52YWx1ZSA9IFsuLi52aXNpYmxlUG9zdHMudmFsdWUsIHsgLi4udXBkYXRlZFBvc3QgfV07CiAgICB9CgogICAgLy8gRW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50CiAgICBlbWl0KCd1cGRhdGUtcG9zdHMnLCB7IHBvc3RJZDogdXBkYXRlZFBvc3QuaWQsIHBvc3REYXRhOiB1cGRhdGVkUG9zdCB9KTsKfTsKCi8vIEFkZCBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGhhbmRsZSBwb3N0IGNvbW1lbnQgdXBkYXRlcwpjb25zdCBoYW5kbGVQb3N0Q29tbWVudFVwZGF0ZSA9ICh1cGRhdGVkUG9zdCkgPT4gewogICAgaWYgKCF1cGRhdGVkUG9zdCB8fCAhdXBkYXRlZFBvc3QuaWQpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHBvc3QgZGF0YSByZWNlaXZlZDonLCB1cGRhdGVkUG9zdCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFVwZGF0ZSBsb2NhbFBvc3RzCiAgICBjb25zdCBpbmRleCA9IGxvY2FsUG9zdHMudmFsdWUuZmluZEluZGV4KHAgPT4gcC5pZCA9PT0gdXBkYXRlZFBvc3QuaWQpOwogICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHBvc3QKICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gWwogICAgICAgICAgICAuLi5sb2NhbFBvc3RzLnZhbHVlLnNsaWNlKDAsIGluZGV4KSwKICAgICAgICAgICAgeyAuLi51cGRhdGVkUG9zdCB9LAogICAgICAgICAgICAuLi5sb2NhbFBvc3RzLnZhbHVlLnNsaWNlKGluZGV4ICsgMSkKICAgICAgICBdOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBwb3N0IG5vdCBmb3VuZCBpbiBsb2NhbFBvc3RzLCBhZGQgaXQKICAgICAgICBsb2NhbFBvc3RzLnZhbHVlID0gWy4uLmxvY2FsUG9zdHMudmFsdWUsIHsgLi4udXBkYXRlZFBvc3QgfV07CiAgICB9CgogICAgLy8gVXBkYXRlIHZpc2libGVQb3N0cwogICAgY29uc3QgdmlzaWJsZUluZGV4ID0gdmlzaWJsZVBvc3RzLnZhbHVlLmZpbmRJbmRleChwID0+IHAuaWQgPT09IHVwZGF0ZWRQb3N0LmlkKTsKICAgIGlmICh2aXNpYmxlSW5kZXggIT09IC0xKSB7CiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFycmF5IHdpdGggdGhlIHVwZGF0ZWQgcG9zdAogICAgICAgIHZpc2libGVQb3N0cy52YWx1ZSA9IFsKICAgICAgICAgICAgLi4udmlzaWJsZVBvc3RzLnZhbHVlLnNsaWNlKDAsIHZpc2libGVJbmRleCksCiAgICAgICAgICAgIHsgLi4udXBkYXRlZFBvc3QgfSwKICAgICAgICAgICAgLi4udmlzaWJsZVBvc3RzLnZhbHVlLnNsaWNlKHZpc2libGVJbmRleCArIDEpCiAgICAgICAgXTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSWYgcG9zdCBub3QgZm91bmQgaW4gdmlzaWJsZVBvc3RzLCBhZGQgaXQKICAgICAgICB2aXNpYmxlUG9zdHMudmFsdWUgPSBbLi4udmlzaWJsZVBvc3RzLnZhbHVlLCB7IC4uLnVwZGF0ZWRQb3N0IH1dOwogICAgfQoKICAgIC8vIEVtaXQgdGhlIHVwZGF0ZSB0byB0aGUgcGFyZW50IGNvbXBvbmVudAogICAgZW1pdCgndXBkYXRlLXBvc3RzJywgeyBwb3N0SWQ6IHVwZGF0ZWRQb3N0LmlkLCBwb3N0RGF0YTogdXBkYXRlZFBvc3QgfSk7Cn07CgovLyBGdW5jdGlvbiBtb3ZlZCBhbmQgbWVyZ2VkIHdpdGggdGhlIG9uZSBhYm92ZQoKLy8gQWRkIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGZvciBwb3N0IGRlbGV0aW9uCmNvbnN0IGhhbmRsZVBvc3REZWxldGVkID0gKHBvc3RJZCkgPT4geyAgICAKICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsUG9zdHMKICAgIGxvY2FsUG9zdHMudmFsdWUgPSBsb2NhbFBvc3RzLnZhbHVlLmZpbHRlcihwb3N0ID0+IHBvc3QuaWQgIT09IHBvc3RJZCk7CiAgICAKICAgIC8vIFJlbW92ZSBmcm9tIHZpc2libGVQb3N0cwogICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gdmlzaWJsZVBvc3RzLnZhbHVlLmZpbHRlcihwb3N0ID0+IHBvc3QuaWQgIT09IHBvc3RJZCk7CiAgICAKICAgIC8vIFJlbW92ZSBmcm9tIHByb3BzLnBvc3RzLmRhdGEgaWYgaXQgZXhpc3RzCiAgICBpZiAocHJvcHMucG9zdHMgJiYgcHJvcHMucG9zdHMuZGF0YSkgewogICAgICAgIHByb3BzLnBvc3RzLmRhdGEgPSBwcm9wcy5wb3N0cy5kYXRhLmZpbHRlcihwb3N0ID0+IHBvc3QuaWQgIT09IHBvc3RJZCk7CiAgICB9Cn07CgovLyBIYW5kbGVyIGZvciBFdmVudENyZWF0ZWQgZXZlbnQKY29uc3QgaGFuZGxlRXZlbnRDcmVhdGVkID0gKCkgPT4gewogICAgLy8gUmVsb2FkIHRoZSBwYWdlIGRhdGEKICAgIHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ3Bvc3RzJ10gfSk7Cn07Cgpjb25zdCBoYW5kbGVQb2xsVm90ZVVwZGF0ZSA9ICh1cGRhdGVkUG9sbCkgPT4gewogICAgLy8gRmluZCB0aGUgcG9zdCB0aGF0IGNvbnRhaW5zIHRoaXMgcG9sbAogICAgY29uc3QgcG9zdEluZGV4ID0gbG9jYWxQb3N0cy52YWx1ZS5maW5kSW5kZXgocG9zdCA9PiAKICAgICAgICBwb3N0LnBvbGwgJiYgcG9zdC5wb2xsLmlkID09PSB1cGRhdGVkUG9sbC5pZAogICAgKTsKICAgIAogICAgaWYgKHBvc3RJbmRleCAhPT0gLTEpIHsKICAgICAgICAvLyBVcGRhdGUgdGhlIHBvbGwgZGF0YSB3aXRoaW4gdGhlIHBvc3QKICAgICAgICBsb2NhbFBvc3RzLnZhbHVlW3Bvc3RJbmRleF0ucG9sbCA9IHVwZGF0ZWRQb2xsOwogICAgfQp9OwoKY29uc3QgaGFuZGxlUG9sbENyZWF0ZWQgPSAocG9zdCkgPT4gewogICAgLy8gQWRkIHRoZSBuZXcgcG9zdCB0byB0aGUgYmVnaW5uaW5nIG9mIGxvY2FsUG9zdHMKICAgIGxvY2FsUG9zdHMudmFsdWUgPSBbcG9zdCwgLi4ubG9jYWxQb3N0cy52YWx1ZV07CiAgICAKICAgIC8vIFVwZGF0ZSB2aXNpYmxlIHBvc3RzCiAgICBjb25zdCBwYWdlID0gY3VycmVudFBhZ2UudmFsdWU7CiAgICBjb25zdCBwZXJQYWdlID0gMTA7CiAgICBjb25zdCBzdGFydCA9IChwYWdlIC0gMSkgKiBwZXJQYWdlOwogICAgY29uc3QgZW5kID0gc3RhcnQgKyBwZXJQYWdlOwogICAgdmlzaWJsZVBvc3RzLnZhbHVlID0gWy4uLmxvY2FsUG9zdHMudmFsdWUuc2xpY2Uoc3RhcnQsIGVuZCldOwogICAgCiAgICAvLyBFbWl0IHRoZSB1cGRhdGUgdG8gdGhlIHBhcmVudCBjb21wb25lbnQKICAgIGVtaXQoJ3VwZGF0ZS1wb3N0cycsIHsKICAgICAgICBwb3N0SWQ6IHBvc3QuaWQsCiAgICAgICAgcG9zdERhdGE6IHBvc3QKICAgIH0pOwp9Owo8L3NjcmlwdD4KCgo8dGVtcGxhdGU+CiAgICA8ZGl2IDpjbGFzcz0ieydmbGV4IGZsZXgtY29sJzogaXNNb2JpbGUsICdmbGV4LTEgbWwtWzM2MHB4XSBtci1bMzYwcHhdJzogIWlzTW9iaWxlfSI+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsncGItMTYgcHQtNCc6IGlzTW9iaWxlLCAnZmVlZC1jb250YWluZXIgbWF4LXctWzY4MHB4XSBteC1hdXRvIHB0LTQgcHgtNCc6ICFpc01vYmlsZX0iPgoKICAgICAgICAgICAgPCEtLSBDcmVhdGUgUG9zdCBCb3ggLS0+CiAgICAgICAgICAgIDxkaXYgdi1pZj0iKGNhdGVnb3J5ID09ICdjb211bmljYXJpJyAmJiAodXNlci5sb2RnZV9tZW1iZXI/LmxvZGdlX2RpZ25pdHlfaWQgPT0gMSB8fCB1c2VyLmxvZGdlX21lbWJlcj8ubG9kZ2VfZGlnbml0eV9pZCA9PSA2KSkgfHwgKGNhdGVnb3J5ID09ICdtaWF6YS16aScgJiYgKHVzZXIucm9sZSA9PSAnbWFlc3RydScgfHwgdXNlci5yb2xlID09ICdjYWxmYScpKSB8fCAoY2F0ZWdvcnkgPT0gJ21pYXphLW5vYXB0ZScgJiYgKHVzZXIucm9sZSA9PSAnbWFlc3RydScgfHwgdXNlci5yb2xlID09ICdjYWxmYScgfHwgdXNlci5yb2xlID09ICd1Y2VuaWMnKSkgfHwgKGNhdGVnb3J5ID09ICdwcm9mdW4nICYmICh1c2VyLnJvbGUgPT0gJ21hZXN0cnUnIHx8IHVzZXIucm9sZSA9PSAnY2FsZmEnIHx8IHVzZXIucm9sZSA9PSAndWNlbmljJykpIgogICAgICAgICAgICAgICAgOmNsYXNzPSJ7J2JnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93IG1iLTQgcC00JzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyBtYi00IHAtNCc6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICB2LW1lbW89Ilt1c2VyXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBzcGFjZS14LTQiPgogICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9ImgtMTAgdy0xMCByb3VuZGVkLWZ1bGwiIDpzcmM9InByb2ZpbGVQaG90b1VybCIgYWx0PSJQcm9maWxlIHBob3RvIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dQb3N0TW9kYWwgPSB0cnVlIgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleC0xIGJnLWdyYXktMTAwIHRleHQtZ3JheS01MDAgcm91bmRlZC1mdWxsIHB4LTQgdGV4dC1sZWZ0IGhvdmVyOmJnLWdyYXktMjAwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgQ2UgYWkgw65uIGfDom5kLCB7eyB1c2VyLmZpcnN0X25hbWUgfX0/CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBtdC00IHB0LTMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iaGFuZGxlRXZlbnRCdXR0b25DbGljayIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgaG92ZXI6YmctZ3JheS0xMDAgZmxleC0xIGp1c3RpZnktY2VudGVyIHAtMiByb3VuZGVkLWxnIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYgdGV4dC1ncmVlbi01MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDJhMSAxIDAgMDAtMSAxdjFINGEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWNmEyIDIgMCAwMC0yLTJoLTFWM2ExIDEgMCAxMC0yIDB2MUg3VjNhMSAxIDAgMDAtMS0xem0wIDVhMSAxIDAgMDAwIDJoOGExIDEgMCAxMDAtMkg2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FdmVudDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImhhbmRsZVBvbGxCdXR0b25DbGljayIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgaG92ZXI6YmctZ3JheS0xMDAgZmxleC0xIGp1c3RpZnktY2VudGVyIHAtMiByb3VuZGVkLWxnIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYgdGV4dC1ibHVlLTUwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDExYTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2NWExIDEgMCAwMS0xIDFIM2ExIDEgMCAwMS0xLTF2LTV6TTggN2ExIDEgMCAwMTEtMWgyYTEgMSAwIDAxMSAxdjlhMSAxIDAgMDEtMSAxSDlhMSAxIDAgMDEtMS0xVjd6TTE0IDRhMSAxIDAgMDExLTFoMmExIDEgMCAwMTEgMXYxMmExIDEgMCAwMS0xIDFoLTJhMSAxIDAgMDEtMS0xVjR6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qb2xsPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gQWNjZXNzIERlbmllZCBNZXNzYWdlIC0tPgogICAgICAgICAgICA8ZGl2IHYtaWY9InVzZXIucm9sZSA9PT0gJ3VjZW5pYycgJiYgY2F0ZWdvcnkgPT09ICdtaWF6YS16aSciIGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyBtYi00IHAtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTEyIHctMTIgdGV4dC1ncmF5LTQwMCBteC1hdXRvIG1iLTIiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xMiA5djJtMCA0aC4wMW0tNi45MzggNGgxMy44NTZjMS41NCAwIDIuNTAyLTEuNjY3IDEuNzMyLTNMMTMuNzMyIDRjLS43Ny0xLjMzMy0yLjY5NC0xLjMzMy0zLjQ2NCAwTDMuMzQgMTZjLS43NyAxLjMzMy4xOTIgMyAxLjczMiAzeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIj5BY2NlcyBSZXN0cmljyJtpb25hdDwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtdC0yIHRleHQtc20gdGV4dC1ncmF5LTUwMCI+VXRpbGl6YXRvcmlpIGN1IHJvbHVsIGRlIFVjZW5pYyBudSBhdSBhY2NlcyBsYSBhY2Vhc3TEgyBjYXRlZ29yaWUuPC9wPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBGZWVkIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTQgcG9zdHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgIDwhLS0gUG9zdHMgU2VjdGlvbiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9InBvc3QgaW4gdmlzaWJsZVBvc3RzIiAKICAgICAgICAgICAgICAgICAgICAgOmtleT0icG9zdC5pZCIgCiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJiZy13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXNtIHJvdW5kZWQtbGcgcG9zdC1jb250YWluZXIiCiAgICAgICAgICAgICAgICAgICAgIDpkYXRhLXBvc3QtaWQ9InBvc3QuaWQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTEwIHctMTAgcm91bmRlZC1mdWxsIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJwb3N0LmF1dGhvci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQocG9zdC5hdXRob3IuZmlyc3RfbmFtZSArICcgJyArIHBvc3QuYXV0aG9yLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9InBvc3QuYXV0aG9yLmZpcnN0X25hbWUgKyAnICcgKyBwb3N0LmF1dGhvci5sYXN0X25hbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtbWVkaXVtIj57eyBwb3N0LmF1dGhvci5maXJzdF9uYW1lIH19IHt7IHBvc3QuYXV0aG9yLmxhc3RfbmFtZSB9fTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgdGV4dC1zbSI+e3sgZm9ybWF0RGF0ZShwb3N0LmNyZWF0ZWRfYXQpIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUG9zdCBPcHRpb25zIERyb3Bkb3duIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIocG9zdC5hdXRob3IuaWQgPT09IHVzZXIuaWQpIHx8IChwb3N0LmV2ZW50ICYmIHBvc3QuZXZlbnQuYXV0aG9yX2lkID09PSB1c2VyLmlkKSIgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gYWxpZ249InJpZ2h0IiB3aWR0aD0iNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI3RyaWdnZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtZ3JheS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTAgNmEyIDIgMCAxMTAtNCAyIDIgMCAwMTAgNHpNMTAgMTJhMiAyIDAgMTEwLTQgMiAyIDAgMDEwIDR6TTEwIDE4YTIgMiAwIDExMC00IDIgMiAwIDAxMCA0eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNjb250ZW50PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9Im9wZW5FZGl0TW9kYWwocG9zdCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCB0ZXh0LWxlZnQgcHgtNCBweS0yIHRleHQtc20gdGV4dC1ncmF5LTcwMCBob3ZlcjpiZy1ncmF5LTEwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIGZsZXggaXRlbXMtY2VudGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTEgNUg2YTIgMiAwIDAwLTIgMnYxMWEyIDIgMCAwMDIgMmgxMWEyIDIgMCAwMDItMnYtNW0tMS40MTQtOS40MTRhMiAyIDAgMTEyLjgyOCAyLjgyOEwxMS44MjggMTVIOXYtMi44MjhsOC41ODYtOC41ODZ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkVkaXRlYXrEgzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTGluayAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcz0iYnV0dG9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZGVsZXRlUG9zdChwb3N0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE5IDdsLS44NjcgMTIuMTQyQTIgMiAwIDAxMTYuMTM4IDIxSDcuODYyYTIgMiAwIDAxLTEuOTk1LTEuODU4TDUgN201IDR2Nm00LTZ2Nm0xLTEwVjRhMSAxIDAgMDAtMS0xaC00YTEgMSAwIDAwLTEgMXYzTTQgN2gxNiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPsiYdGVyZ2U8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUG9zdCBDb250ZW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgdi1pZj0iIXBvc3QucG9sbCAmJiAhcG9zdC5ldmVudCIgY2xhc3M9InRleHQtZ3JheS04MDAgd2hpdGVzcGFjZS1wcmUtd3JhcCI+e3sgcG9zdC5jb250ZW50IH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj0icG9zdC5pbWFnZV91cmwgJiYgIXBvc3QucG9sbCAmJiAhcG9zdC5ldmVudCIgOnNyYz0icG9zdC5pbWFnZV91cmwiIGFsdD0iUG9zdCBpbWFnZSIgY2xhc3M9Im10LTQgcm91bmRlZC1sZyB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBEaXNwbGF5IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0icG9zdC5maWxlX3BhdGggJiYgIXBvc3QucG9sbCAmJiAhcG9zdC5ldmVudCIgY2xhc3M9Im10LTQgYmctZ3JheS01MCByb3VuZGVkLWxnIHAtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPSJyb3V0ZSgnZmlsZXMuZG93bmxvYWQnLCBwb3N0LmlkKSIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy00IGgtNCBtci0yIiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTEyIDEwdjZtMCAwbC0zLTNtMyAzbDMtM20yIDhIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg1LjU4NmExIDEgMCAwMS43MDcuMjkzbDUuNDE0IDUuNDE0YTEgMSAwIDAxLjI5My43MDdWMTlhMiAyIDAgMDEtMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWQge3sgcG9zdC5maWxlX25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFdmVudCBJbmZvcm1hdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3QuZXZlbnQiIGNsYXNzPSJtdC00IGJnLWJsdWUtNTAgcm91bmRlZC1sZyBwLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgdGV4dC1ibHVlLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDJhMSAxIDAgMDAtMSAxdjFINGEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWNmEyIDIgMCAwMC0yLTJoLTFWM2ExIDEgMCAxMC0yIDB2MUg3VjNhMSAxIDAgMDAtMS0xem0wIDVhMSAxIDAgMDAwIDJoOGExIDEgMCAxMDAtMkg2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1tZWRpdW0iPnt7IHBvc3QuZXZlbnQudGl0bGUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHRleHQtc20gdGV4dC1ibHVlLTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0xLTEyYTEgMSAwIDEwLTIgMHY0YTEgMSAwIDAwLjI5My43MDdsMi44MjggMi44MjlhMSAxIDAgMTAxLjQxNS0xLjQxNUwxMSA5LjU4NlY2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZvcm1hdERhdGVUaW1lKHBvc3QuZXZlbnQuc3RhcnRfZGF0ZSkgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0icG9zdC5ldmVudC5sb2NhdGlvbiIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBtdC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNCB3LTQiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcG9zdC5ldmVudC5sb2NhdGlvbiB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJwb3N0LmV2ZW50LmRlc2NyaXB0aW9uIiBjbGFzcz0ibXQtMiB0ZXh0LWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwb3N0LmV2ZW50LmRlc2NyaXB0aW9uIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgRGlzcGxheSBmb3IgRXZlbnRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJwb3N0LmZpbGVfcGF0aCIgY2xhc3M9Im10LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPSJyb3V0ZSgnZmlsZXMuZG93bmxvYWQnLCBwb3N0LmlkKSIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTEyIDEwdjZtMCAwbC0zLTNtMyAzbDMtM20yIDhIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg1LjU4NmExIDEgMCAwMS43MDcuMjkzbDUuNDE0IDUuNDE0YTEgMSAwIDAxLjI5My43MDdWMTlhMiAyIDAgMDEtMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHBvc3QuZmlsZV9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtbC0yIHRleHQtc20gdGV4dC1ncmF5LTUwMCI+KHt7IGZvcm1hdEZpbGVTaXplKHBvc3QuZmlsZV9zaXplKSB9fSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFdmVudCBQb2xsIERpc3BsYXkgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3QuZXZlbnQucG9sbCIgY2xhc3M9Im10LTQgYm9yZGVyLXQgYm9yZGVyLWJsdWUtMjAwIHB0LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtbWVkaXVtIHRleHQtYmx1ZS03MDAgbWItMyI+e3sgcG9zdC5ldmVudC5wb2xsLnF1ZXN0aW9uIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iKG9wdGlvbiwgaW5kZXgpIGluIHBvc3QuZXZlbnQucG9sbC5vcHRpb25zIiA6a2V5PSJpbmRleCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJlbGF0aXZlIGdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bmFtZT0iJ3BvbGxfJyArIHBvc3QuZXZlbnQucG9sbC5pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnZhbHVlPSJvcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjaGVja2VkPSJpc09wdGlvblNlbGVjdGVkKHBvc3QuZXZlbnQucG9sbCwgb3B0aW9uKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iKGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IGdldFNlbGVjdGVkT3B0aW9ucyhwb3N0LmV2ZW50LnBvbGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3QuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2hlY2tlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWb3RlKHBvc3QuZXZlbnQucG9sbCwgWy4uLmN1cnJlbnRTZWxlY3RlZCwgb3B0aW9uXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0ZWQuZmlsdGVyKG8gPT4gbyAhPT0gb3B0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVm90ZShwb3N0LmV2ZW50LnBvbGwsIG5ld1NlbGVjdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZvdGUocG9zdC5ldmVudC5wb2xsLCBlLnRhcmdldC5jaGVja2VkID8gW29wdGlvbl0gOiBbXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkLWZ1bGwgYm9yZGVyLWdyYXktMzAwIHRleHQtaW5kaWdvLTYwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWluZGlnby0zMDAgZm9jdXM6cmluZyBmb2N1czpyaW5nLWluZGlnby0yMDAgZm9jdXM6cmluZy1vcGFjaXR5LTUwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gfX0gdm90ZXMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+KHt7IE1hdGgucm91bmQoKHBvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIC8gT2JqZWN0LnZhbHVlcyhwb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApKSAqIDEwMCkgfHwgMCB9fSUpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC0yIGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC1mdWxsIGJnLWluZGlnby01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPSJ7IHdpZHRoOiBgJHtNYXRoLnJvdW5kKChwb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHNbb3B0aW9uXSAvIE9iamVjdC52YWx1ZXMocG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSkgKiAxMDApIHx8IDB9JWAgfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IE9iamVjdC52YWx1ZXMocG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSB9fSB2b3RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dWb3RlcnMocG9zdC5ldmVudC5wb2xsKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyB2b3RlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFsb25lIFBvbGwgRGlzcGxheSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0icG9zdC5wb2xsICYmICFwb3N0LmV2ZW50IiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0zIj57eyBwb3N0LnBvbGwucXVlc3Rpb24gfX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb24sIGluZGV4KSBpbiBwb3N0LnBvbGwub3B0aW9ucyIgOmtleT0iaW5kZXgiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icmVsYXRpdmUgZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bmFtZT0iJ3BvbGxfJyArIHBvc3QucG9sbC5pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT0ib3B0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNoZWNrZWQ9ImlzT3B0aW9uU2VsZWN0ZWQocG9zdC5wb2xsLCBvcHRpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iKGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSBnZXRTZWxlY3RlZE9wdGlvbnMocG9zdC5wb2xsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zdC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQuY2hlY2tlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVm90ZShwb3N0LnBvbGwsIFsuLi5jdXJyZW50U2VsZWN0ZWQsIG9wdGlvbl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0ZWQuZmlsdGVyKG8gPT4gbyAhPT0gb3B0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZvdGUocG9zdC5wb2xsLCBuZXdTZWxlY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVWb3RlKHBvc3QucG9sbCwgZS50YXJnZXQuY2hlY2tlZCA/IFtvcHRpb25dIDogW10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZC1mdWxsIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1pbmRpZ28tMzAwIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1pbmRpZ28tMjAwIGZvY3VzOnJpbmctb3BhY2l0eS01MCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBvcHRpb24gfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHBvc3QucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIH19IHZvdGVzIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgTWF0aC5yb3VuZCgocG9zdC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gLyBPYmplY3QudmFsdWVzKHBvc3QucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwIH19JSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTIgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC1mdWxsIGJnLWluZGlnby01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT0ieyB3aWR0aDogYCR7TWF0aC5yb3VuZCgocG9zdC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gLyBPYmplY3QudmFsdWVzKHBvc3QucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwfSVgIH0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBPYmplY3QudmFsdWVzKHBvc3QucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgfX0gdm90ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93Vm90ZXJzKHBvc3QucG9sbCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC14cyB0ZXh0LWluZGlnby02MDAgaG92ZXI6dGV4dC1pbmRpZ28tODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IHZvdGVycwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBvc3QgQWN0aW9ucyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgcHQtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVhY3Rpb25zIGFuZCBDb21tZW50cyBDb3VudCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3QucmVhY3Rpb25zPy5sZW5ndGggPiAwIHx8IHBvc3QuY29tbWVudHM/Lmxlbmd0aCA+IDAiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMyBweC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC0wLjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9InBvc3QucmVhY3Rpb25zPy5sZW5ndGggPiAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIoY291bnQsIGVtb2ppKSBpbiBnZXRSZWFjdGlvbkNvdW50cyhwb3N0LnJlYWN0aW9ucykiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0iZW1vamkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgYmctd2hpdGUgcm91bmRlZC1mdWxsIHNoYWRvdy1zbSBweC0xLjUgcHktMC41IC1tci0xIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20iPnt7IGVtb2ppIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIG1sLTAuNSI+e3sgY291bnQgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0icG9zdC5jb21tZW50cz8ubGVuZ3RoID4gMCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93Q29tbWVudHMocG9zdCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwIGZsZXggaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHBvc3QuY29tbWVudHMubGVuZ3RoIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtbC0xIj57eyBwb3N0LmNvbW1lbnRzLmxlbmd0aCA9PT0gMSA/ICdjb21lbnRhcml1JyA6ICdjb21lbnRhcmlpJyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMaWtlIEJ1dHRvbiB3aXRoIEVtb2ppIFBpY2tlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImhhbmRsZUxpa2VDbGljayhwb3N0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIGxpa2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dC1ibHVlLTUwMCc6IHBvc3Q/LnJlYWN0aW9ucz8uc29tZShyID0+IHI/LnVzZXJfaWQgPT09IHVzZXI/LmlkKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtYmx1ZS01MDAnOiAhcG9zdD8ucmVhY3Rpb25zPy5zb21lKHIgPT4gcj8udXNlcl9pZCA9PT0gdXNlcj8uaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIgMTAuNWExLjUgMS41IDAgMTEzIDB2NmExLjUgMS41IDAgMDEtMyAwdi02ek02IDEwLjMzM3Y1LjQzYTIgMiAwIDAwMS4xMDYgMS43OWwuMDUuMDI1QTQgNCAwIDAwOC45NDMgMThoNS40MTZhMiAyIDAgMDAxLjk2Mi0xLjYwOGwxLjItNkEyIDIgMCAwMDE1LjU2IDhIMTJWNGEyIDIgMCAwMC0yLTIgMSAxIDAgMDAtMSAxdi42NjdhNCA0IDAgMDEtLjggMi40TDYuOCA3LjkzM2E0IDQgMCAwMC0uOCAyLjR6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkxpa2U8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRW1vamkgUmVhY3Rpb24gUGlja2VyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJhY3RpdmVSZWFjdGlvblBvc3QgPT09IHBvc3QuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFic29sdXRlIGJvdHRvbS1mdWxsIGxlZnQtMCBtYi0yIGJnLXdoaXRlIGRhcms6YmctZ3JheS04MDAgc2hhZG93LWxnIHJvdW5kZWQtbGcgcC0yIHotMTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMCBlbW9qaS1waWNrZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtNCBnYXAtMS41IG1pbi13LVsxNjBweF0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHYtZm9yPSJlbW9qaSBpbiBbJ/CfkY0nLCAn4p2k77iPJywgJ/CfmIonLCAn8J+YgicsICfwn5iuJywgJ/CfmKInLCAn8J+YoScsICfwn46JJ10iIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImVtb2ppIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0icmVhY3RUb1Bvc3QocG9zdCwgZW1vamkpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmctYmx1ZS0xMDAgZGFyazpiZy1ibHVlLTkwMCc6IGhhc1JlYWN0ZWQocG9zdCwgZW1vamkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG92ZXI6YmctZ3JheS0xMDAgZGFyazpob3ZlcjpiZy1ncmF5LTcwMCc6ICFoYXNSZWFjdGVkKHBvc3QsIGVtb2ppKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtMnhsIHAtMS41IHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW1vamkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbW1lbnQgQnV0dG9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93Q29tbWVudHMocG9zdCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTggMTBjMCAzLjg2Ni0zLjU4MiA3LTggN2E4Ljg0MSA4Ljg0MSAwIDAxLTQuMDgzLS45OEwyIDE3bDEuMzM4LTMuMTIzQzIuNDkzIDEyLjc2NyAyIDExLjQzNCAyIDEwYzAtMy44NjYgMy41ODItNyA4LTdzOCAzLjEzNCA4IDd6TTcgOUg1djJoMlY5em04IDBoLTJ2MmgyVjl6TTkgOWgydjJIOVY5eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Db21tZW50PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb21tZW50cyBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iYWN0aXZlQ29tbWVudHNQb3N0ID09PSBwb3N0LmlkIiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbW1lbnQgSW5wdXQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLXN0YXJ0IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImgtOCB3LTggcm91bmRlZC1mdWxsIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0icHJvZmlsZVBob3RvVXJsIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJZb3VyIHByb2ZpbGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iY29tbWVudEZvcm0uY29udGVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9IjEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iV3JpdGUgYSBjb21tZW50Li4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBib3JkZXItMCBmb2N1czpyaW5nLTAgdGV4dC1zbSByZXNpemUtbm9uZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duLmVudGVyLnByZXZlbnQ9ImFkZENvbW1lbnQocG9zdCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbW1lbnRzIExpc3QgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3QuY29tbWVudHMgJiYgcG9zdC5jb21tZW50cy5sZW5ndGggPiAwIiBjbGFzcz0ibXQtNCBzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9ImNvbW1lbnQgaW4gcG9zdC5jb21tZW50cyIgOmtleT0iY29tbWVudC5pZCIgY2xhc3M9ImZsZXggaXRlbXMtc3RhcnQgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyA6c3JjPSJjb21tZW50LmF1dGhvci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQoY29tbWVudC5hdXRob3IuZmlyc3RfbmFtZSArICcgJyArIGNvbW1lbnQuYXV0aG9yLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImgtOCB3LTggcm91bmRlZC1mdWxsIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJjb21tZW50LmF1dGhvci5maXJzdF9uYW1lICsgJyAnICsgY29tbWVudC5hdXRob3IubGFzdF9uYW1lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWdyYXktMTAwIGRhcms6YmctZ3JheS04MDAgcm91bmRlZC1sZyBwLTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LXNtIj57eyBjb21tZW50LmF1dGhvci5maXJzdF9uYW1lIH19IHt7IGNvbW1lbnQuYXV0aG9yLmxhc3RfbmFtZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPSJjb21tZW50LmF1dGhvci5pZCA9PT0gdXNlci5pZCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJkZWxldGVDb21tZW50KHBvc3QsIGNvbW1lbnQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtcmVkLTUwMCB0ZXh0LXNtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTkgMmExIDEgMCAwMC0uODk0LjU1M0w3LjM4MiA0SDRhMSAxIDAgMDAwIDJ2MTBhMiAyIDAgMDAyIDJoOGEyIDIgMCAwMDItMlY2YTEgMSAwIDEwMC0yaC0zLjM4MmwtLjcyNC0xLjQ0N0ExIDEgMCAwMDExIDJIOXpNNyA4YTEgMSAwIDAxMiAwdjZhMSAxIDAgMTEtMiAwVjh6bTUtMWExIDEgMCAwMC0xIDF2NmExIDEgMCAxMDIgMFY4YTEgMSAwIDAwLTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtc20gbXQtMSI+e3sgY29tbWVudC5jb250ZW50IH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCBtdC0xIGJsb2NrIj57eyBmb3JtYXREYXRlKGNvbW1lbnQuY3JlYXRlZF9hdCkgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIExvYWRpbmcgSW5kaWNhdG9yIC0tPgogICAgICAgICAgICA8ZGl2IHYtaWY9ImlzTG9hZGluZ01vcmUiIGNsYXNzPSJmbGV4IGp1c3RpZnktY2VudGVyIHB5LTQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBoLTggdy04IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktOTAwIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIE5vIE1vcmUgUG9zdHMgTWVzc2FnZSAtLT4KICAgICAgICAgICAgPGRpdiB2LWlmPSIhaGFzTW9yZVBvc3RzICYmIHZpc2libGVQb3N0cy5sZW5ndGggPiAwIiBjbGFzcz0idGV4dC1jZW50ZXIgcHktNCB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgIDxkaXY+TnUgbWFpIHN1bnQgcG9zdMSDcmkgZGUgYWZpyJlhdDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gRGVidWcgSW5mb3JtYXRpb24gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhpZGRlbiI+CiAgICAgICAgICAgICAgICA8ZGl2PlRvdGFsIHBvc3TEg3JpOiB7eyBsb2NhbFBvc3RzLmxlbmd0aCB9fSwgQWZpyJlhdGU6IHt7IHZpc2libGVQb3N0cy5sZW5ndGggfX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXY+QmF0Y2g6IHt7IGN1cnJlbnRCYXRjaCB9fTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdj5IYXMgTW9yZToge3sgaGFzTW9yZVBvc3RzIH19PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2PkxvYWRpbmc6IHt7IGlzTG9hZGluZ01vcmUgfX08L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8IS0tIFBvc3QgQ3JlYXRpb24gTW9kYWwgLS0+CiAgICA8Q3JlYXRlUG9zdE1vZGFsCiAgICAgICAgOnNob3dQb3N0TW9kYWw9InNob3dQb3N0TW9kYWwiCiAgICAgICAgOnVzZXI9InVzZXIiCiAgICAgICAgOnByb2ZpbGVQaG90b1VybD0icHJvZmlsZVBob3RvVXJsIgogICAgICAgIDppbWFnZVByZXZpZXdVcmw9ImltYWdlUHJldmlld1VybCIKICAgICAgICA6Y2F0ZWdvcmllcz0icHJvcHMuY2F0ZWdvcmllcyIKICAgICAgICA6Y2F0ZWdvcnk9InByb3BzLmNhdGVnb3J5IgogICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgQGNsb3NlPSJzaG93UG9zdE1vZGFsID0gZmFsc2UiCiAgICAvPgoKICAgIDwhLS0gRXZlbnQgQ3JlYXRpb24gTW9kYWwgLS0+CiAgICA8Q3JlYXRlRXZlbnRNb2RhbAogICAgICAgIDpzaG93PSJzaG93RXZlbnRNb2RhbCIKICAgICAgICA6Y2F0ZWdvcmllcz0icHJvcHMuY2F0ZWdvcmllcyIKICAgICAgICA6Y2F0ZWdvcnk9InByb3BzLmNhdGVnb3J5IgogICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgOnVzZXI9InVzZXIiCiAgICAgICAgQGNsb3NlPSJzaG93RXZlbnRNb2RhbCA9IGZhbHNlIgogICAgICAgIEBldmVudC1jcmVhdGVkPSJoYW5kbGVFdmVudENyZWF0ZWQiCiAgICAvPgoKICAgIDwhLS0gUG9sbCBDcmVhdGlvbiBNb2RhbCAtLT4KICAgIDxDcmVhdGVQb2xsTW9kYWwKICAgICAgICA6c2hvdz0ic2hvd1BvbGxNb2RhbCIKICAgICAgICA6Y2F0ZWdvcmllcz0iY2F0ZWdvcmllcyIKICAgICAgICA6Y2F0ZWdvcnk9ImNhdGVnb3J5IgogICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgOnVzZXI9InVzZXIiCiAgICAgICAgQGNsb3NlPSJzaG93UG9sbE1vZGFsID0gZmFsc2UiCiAgICAgICAgQHBvbGwtY3JlYXRlZD0iaGFuZGxlUG9sbENyZWF0ZWQiCiAgICAvPgoKICAgPCEtLSBWb3RlcnMgTW9kYWwgLS0+CiAgIDxNb2RhbCA6c2hvdz0ic2hvd1ZvdGVyc01vZGFsIiBAY2xvc2U9InNob3dWb3RlcnNNb2RhbCA9IGZhbHNlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLTYiPgogICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgIFBvbGwgVm90ZXJzCiAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIob3B0aW9uVm90ZXJzLCBvcHRpb24pIGluIHZvdGVycyIgOmtleT0ib3B0aW9uIiBjbGFzcz0ic3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9oMz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJ2b3RlciBpbiBvcHRpb25Wb3RlcnMiIDprZXk9InZvdGVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0idm90ZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZvdGVyLmZpcnN0X25hbWUgKyAnICcgKyB2b3Rlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJ2b3Rlci5maXJzdF9uYW1lICsgJyAnICsgdm90ZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS03MDAiPnt7IHZvdGVyLmZpcnN0X25hbWUgfX0ge3sgdm90ZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJvcHRpb25Wb3RlcnMubGVuZ3RoID09PSAwIiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHZvdGVycyB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTYgZmxleCBqdXN0aWZ5LWVuZCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVyc01vZGFsID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JheS0yMDAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgQ2xvc2UKICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvTW9kYWw+CgogICAgPCEtLSBFZGl0IE1vZGFsIC0tPgogICAgPEVkaXRQb3N0TW9kYWwKICAgICAgICA6c2hvdz0ic2hvd0VkaXRNb2RhbCIKICAgICAgICA6cG9zdD0iZWRpdGluZ1Bvc3QiCiAgICAgICAgOnVzZXI9InVzZXIiCiAgICAgICAgQGNsb3NlPSJzaG93RWRpdE1vZGFsID0gZmFsc2UiCiAgICAgICAgQHBvc3QtdXBkYXRlZD0iaGFuZGxlUG9zdFVwZGF0ZWQiCiAgICAvPgo8L3RlbXBsYXRlPiA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAANvAQAAAAAAAAAAAAAA8L8"
				],
				[
					9,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"BQAAAPgBAAAAAAAA+QEAAAAAAAAAAAAA+QEAAAAAAAABAgAAAAAAAAAAAAABAgAAAAAAAAICAAAAAAAAAAAAAAICAAAAAAAACgIAAAAAAAAAAAAA+QEAAAAAAAD5AQAAAAAAAAgAAAAgICAgICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD4AQAAAAAAAPgBAAAAAAAAAAAAAAAA8L8"
				],
				[
					11,
					1,
					"paste",
					null,
					"AgAAAPoBAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAAAAAABwAAAAAAAAgAAAAgICAgICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAACAgAAAAAAAPoBAAAAAAAAAAAAAAAAAAA"
				],
				[
					12,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"BQAAAAAHAAAAAAAAAQcAAAAAAAAAAAAAAQcAAAAAAAAFBwAAAAAAAAAAAAAFBwAAAAAAAAYHAAAAAAAAAAAAAAYHAAAAAAAACgcAAAAAAAAAAAAAAQcAAAAAAAABBwAAAAAAAAQAAAAgICAg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAABwAAAAAAAAAHAAAAAAAAAAAAAAAA8L8"
				],
				[
					14,
					1,
					"paste",
					null,
					"AgAAAAIHAAAAAAAAcQoAAAAAAAAAAAAAcQoAAAAAAABxCgAAAAAAAAQAAAAgICAg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAGBwAAAAAAAAIHAAAAAAAAAAAAAAAAAAA"
				]
			]
		},
		{
			"file": "resources/js/Layouts/MemberLayout.vue",
			"settings":
			{
				"buffer_size": 14489,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					82,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAE4kAAAAAAAATyQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABOJAAAAAAAAE4kAAAAAAAAAAAAAAAA8L8"
				],
				[
					83,
					1,
					"paste",
					null,
					"AQAAAE8kAAAAAAAAXiQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABPJAAAAAAAAE8kAAAAAAAAAAAAAAAA8L8"
				],
				[
					85,
					1,
					"insert",
					{
						"characters": "!"
					},
					"AQAAAFUkAAAAAAAAViQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABVJAAAAAAAAFUkAAAAAAAAAAAAAAAA8L8"
				],
				[
					92,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACpNgAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2ssIHdhdGNoIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluaywgcm91dGVyLCB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEFwcGxpY2F0aW9uTG9nbyBmcm9tICdAL0NvbXBvbmVudHMvQXBwbGljYXRpb25Mb2dvLnZ1ZSc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBOYXZMaW5rIGZyb20gJ0AvQ29tcG9uZW50cy9OYXZMaW5rLnZ1ZSc7CmltcG9ydCBSZXNwb25zaXZlTmF2TGluayBmcm9tICdAL0NvbXBvbmVudHMvUmVzcG9uc2l2ZU5hdkxpbmsudnVlJzsKaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJzsKaW1wb3J0IFB1c2hlciBmcm9tICdwdXNoZXItanMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBHZXQgQ1NSRiB0b2tlbiBmcm9tIG1ldGEgdGFnCiAgICAgICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImNzcmYtdG9rZW4iXScpPy5jb250ZW50OwogICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQgaW4gbWV0YSB0YWcuIFBsZWFzZSBlbnN1cmUgdGhlIG1ldGEgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dCBmaWxlLicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBJbml0aWFsaXplIEVjaG8gd2l0aCBwcm9wZXIgY29uZmlndXJhdGlvbgogICAgICAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oewogICAgICAgICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsCiAgICAgICAgICAgIGtleTogaW1wb3J0Lm1ldGEuZW52LlZJVEVfUFVTSEVSX0FQUF9LRVksCiAgICAgICAgICAgIGNsdXN0ZXI6IGltcG9ydC5tZXRhLmVudi5WSVRFX1BVU0hFUl9BUFBfQ0xVU1RFUiwKICAgICAgICAgICAgYXV0aDogewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiB0b2tlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlVucmVhZFBvc3RzQ291bnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS51bnNlZW5Qb3N0c0NvdW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdXNlcidzIElECiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHVuc2VlbiBwb3N0cyBjb3VudCBmb3IgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDcmVhdGVkJywgYXN5bmMgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciB0aGUgY3VycmVudCB1c2VyCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9zdHMudW5zZWVuLWNvdW50JykpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHBhZ2UucHJvcHMuYXV0aC51c2VyLmlkOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgKG5vdCBuZXN0ZWQgYnkgdXNlciBJRCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLnJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJVbnNlZW5Db3VudCA9IHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dpbmdOYXZpZ2F0aW9uRHJvcGRvd24gPSByZWYoZmFsc2UpOwpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIC8vIE9ubHkgc2hvdyBzZWxlY3RlZCBjYXRlZ29yeSB3aGVuIG9uIGRhc2hib2FyZCBwYWdlCiAgICBpZiAocGFnZS51cmwuc3RhcnRzV2l0aCgnL2Rhc2hib2FyZCcpKSB7CiAgICAgICAgcmV0dXJuIHBhZ2UucHJvcHMuY2F0ZWdvcnkgfHwgJ2NvbXVuaWNhcmknOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0pOwpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCi8vIEFkZCBmdW5jdGlvbiB0byBmZXRjaCB1bnNlZW4gcG9zdHMgY291bnQKY29uc3QgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBwYWdlLnByb3BzLmF1dGgudXNlci5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCAobm90IG5lc3RlZCBieSB1c2VyIElEKQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQuY29tdW5pY2FyaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBuZXN0ZWQgYnkgdXNlciBJRAogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4udXNlclVuc2VlbkNvdW50IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIGluaXRpYWxpemVFY2hvKCk7CiAgICAvLyBGZXRjaCBpbml0aWFsIHVuc2VlbiBwb3N0cyBjb3VudAogICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7Cn0pOwoKLy8gV2F0Y2ggZm9yIHJvdXRlIGNoYW5nZXMgdXNpbmcgSW5lcnRpYSdzIHBhZ2UgcHJvcHMKd2F0Y2goKCkgPT4gcGFnZS5wcm9wcy51cmwsICgpID0+IHsKICAgIGZldGNoVW5zZWVuUG9zdHNDb3VudCgpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgaWYgKHdpbmRvdy5FY2hvKSB7CiAgICAgICAgd2luZG93LkVjaG8uZGlzY29ubmVjdCgpOwogICAgfQp9KTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLAogICAgfSwKICAgIHVuc2Vlbl9wb3N0c19jb3VudDogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLAogICAgfSwKfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHVzZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gewogICAgc3dpdGNoKHVzZXIucm9sZSkgewogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICdVY2VuaWMnLCBjbGFzczogJ2JnLWdyZWVuLTUwIHRleHQtZ3JlZW4tNzAwJyB9OwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ0NhbGbEgycsIGNsYXNzOiAnYmctb3JhbmdlLTUwIHRleHQtb3JhbmdlLTcwMCcgfTsKICAgICAgICBjYXNlICdtYWVzdHJ1JzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ01hZXN0cnUnLCBjbGFzczogJ2JnLXJlZC01MCB0ZXh0LXJlZC03MDAnIH07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ1V0aWxpemF0b3InLCBjbGFzczogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnIH07CiAgICB9Cn0pOwoKY29uc3QgbmF2aWdhdGlvbkNhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yaWVzID0gWwogICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0KICAgIF07CgogICAgLy8gRmlsdGVyIG91dCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICBpZiAodXNlci5yb2xlID09PSAndWNlbmljJykgewogICAgICAgIHJldHVybiBjYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gY2F0LnNsdWcgIT09ICdtaWF6YS16aScpOwogICAgfQoKICAgIHJldHVybiBjYXRlZ29yaWVzOwp9KTsKCmNvbnN0IHNlbGVjdENhdGVnb3J5ID0gKGNhdGVnb3J5KSA9PiB7CiAgICByb3V0ZXIuZ2V0KHJvdXRlKCdkYXNoYm9hcmQnKSwgeyBjYXRlZ29yeSB9LCB7CiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBvbmx5OiBbJ3Bvc3RzJywgJ2NhdGVnb3J5J10sCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIEZldGNoIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50IGFmdGVyIG5hdmlnYXRpb24KICAgICAgICAgICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7CiAgICAgICAgfQogICAgfSk7Cn07CgovLyBVcGRhdGUgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRvIGFkZCBsb2dnaW5nCmNvbnN0IHVuc2VlblBvc3RzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfHwge307Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9Im1pbi1oLXNjcmVlbiBiZy1bI2YwZjJmNV0iPgogICAgICAgIDwhLS0gRml4ZWQgdG9wIG5hdmlnYXRpb24gLS0+CiAgICAgICAgPG5hdiBjbGFzcz0iZml4ZWQgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgei0yMCBiZy13aGl0ZSBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgc2hhZG93LXNtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHgtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE0Ij4KICAgICAgICAgICAgICAgICAgICA8IS0tIExvZ28gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlcic6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnZGFzaGJvYXJkJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcGxpY2F0aW9uTG9nbyBjbGFzcz0iYmxvY2sgaC04IHctYXV0byBmaWxsLWN1cnJlbnQgdGV4dC1ncmF5LTgwMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIE5hdmlnYXRpb24gVGFicyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgbWF4LXctWzY4MHB4XSBteC1hdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImNhdCBpbiBuYXZpZ2F0aW9uQ2F0ZWdvcmllcyIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdC5zbHVnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIjIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IGJvcmRlci1iLTIgcmVsYXRpdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudENhdGVnb3J5ID09PSBjYXQuc2x1ZyA/ICdib3JkZXItYmx1ZS01MDAgdGV4dC1ibHVlLTYwMCcgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD0ic2VsZWN0Q2F0ZWdvcnkoY2F0LnNsdWcpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCA6ZD0iY2F0Lmljb24iIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0idW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gPiAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhYnNvbHV0ZSB0b3AtWzAuNXJlbV0gLXRyYW5zbGF0ZS14LTEvMiBiZy1yZWQtNTAwIHRleHQtd2hpdGUgdGV4dC1bMC42cmVtXSByb3VuZGVkLWZ1bGwgaC00IHctNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iaXNNb2JpbGUgPyAnbGVmdC1bNzUlXScgOiAnbGVmdC1bNTUlXSciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBEcm9wZG93biAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCc6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBhbGlnbj0icmlnaHQiIHdpZHRoPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICN0cmlnZ2VyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5saW5lLWZsZXggcm91bmRlZC1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB5LTIgdGV4dC1zbSBsZWFkaW5nLTQgZm9udC1tZWRpdW0gcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSB0cmFuc2l0aW9uIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdweC0zJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaC04IHctOCByb3VuZGVkLWZ1bGwiIDpzcmM9InByb2ZpbGVQaG90b1VybCIgYWx0PSJQcm9maWxlIHBob3RvIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdtci0yJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBtaW4tdy1bODBweF0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSI+e3sgdXNlci5maXJzdF9uYW1lIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSAtbXQtMC41IiA6Y2xhc3M9InVzZXJUeXBlLmNsYXNzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXJUeXBlLnRleHQgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2NvbnRlbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdwcm9maWxlLmVkaXQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bkxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdsb2dvdXQnKSIgbWV0aG9kPSJwb3N0IiBhcz0iYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29uZWN0YXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L25hdj4KCiAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgPG1haW4gY2xhc3M9InB0LTE0Ij4KICAgICAgICAgICAgPCEtLSBQYWdlIEhlYWRpbmcgLS0+CiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImJnLXdoaXRlIHNoYWRvdyIgdi1pZj0iJHNsb3RzLmhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy03eGwgbXgtYXV0byBweS02IHB4LTQgc206cHgtNiBsZzpweC04Ij4KICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPSJoZWFkZXIiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oZWFkZXI+CgogICAgICAgICAgICA8IS0tIFBhZ2UgQ29udGVudCAtLT4KICAgICAgICAgICAgPHNsb3QgLz4KICAgICAgICA8L21haW4+CiAgICA8L2Rpdj4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KYm9keSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMmY1Owp9Cjwvc3R5bGU+IAAAAAAAAAAAjzcAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAQHAAAAAAAACQcAAAAAAAAAAAAAAAA8L8"
				],
				[
					99,
					1,
					"cut",
					null,
					"AQAAAFAgAAAAAAAAUCAAAAAAAADnAAAALAogICAgICAgIHsgc2x1ZzogJ2RlbW5pdGFyaScsIGljb246ICdNOSAxMmwyIDIgNC00bTUuNjE4LTQuMDE2QTExLjk1NSAxMS45NTUgMCAwMTEyIDIuOTQ0YTExLjk1NSAxMS45NTUgMCAwMS04LjYxOCAzLjA0QTEyLjAyIDEyLjAyIDAgMDAzIDljMCA1LjU5MSAzLjgyNCAxMC4yOSA5IDExLjYyMiA1LjE3Ni0xLjMzMiA5LTYuMDMgOS0xMS42MjIgMC0xLjA0Mi0uMTMzLTIuMDUyLS4zODItMy4wMTZ6JyB9",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA3IQAAAAAAAFAgAAAAAAAAAAAAAAAA8L8"
				],
				[
					102,
					1,
					"paste",
					null,
					"AQAAAPccAAAAAAAA3h0AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD3HAAAAAAAAPccAAAAAAAAAAAAAAAA8L8"
				],
				[
					103,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACQNwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2ssIHdhdGNoIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluaywgcm91dGVyLCB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEFwcGxpY2F0aW9uTG9nbyBmcm9tICdAL0NvbXBvbmVudHMvQXBwbGljYXRpb25Mb2dvLnZ1ZSc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBOYXZMaW5rIGZyb20gJ0AvQ29tcG9uZW50cy9OYXZMaW5rLnZ1ZSc7CmltcG9ydCBSZXNwb25zaXZlTmF2TGluayBmcm9tICdAL0NvbXBvbmVudHMvUmVzcG9uc2l2ZU5hdkxpbmsudnVlJzsKaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJzsKaW1wb3J0IFB1c2hlciBmcm9tICdwdXNoZXItanMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBHZXQgQ1NSRiB0b2tlbiBmcm9tIG1ldGEgdGFnCiAgICAgICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImNzcmYtdG9rZW4iXScpPy5jb250ZW50OwogICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQgaW4gbWV0YSB0YWcuIFBsZWFzZSBlbnN1cmUgdGhlIG1ldGEgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dCBmaWxlLicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBJbml0aWFsaXplIEVjaG8gd2l0aCBwcm9wZXIgY29uZmlndXJhdGlvbgogICAgICAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oewogICAgICAgICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsCiAgICAgICAgICAgIGtleTogaW1wb3J0Lm1ldGEuZW52LlZJVEVfUFVTSEVSX0FQUF9LRVksCiAgICAgICAgICAgIGNsdXN0ZXI6IGltcG9ydC5tZXRhLmVudi5WSVRFX1BVU0hFUl9BUFBfQ0xVU1RFUiwKICAgICAgICAgICAgYXV0aDogewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiB0b2tlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlVucmVhZFBvc3RzQ291bnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS51bnNlZW5Qb3N0c0NvdW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdXNlcidzIElECiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHVuc2VlbiBwb3N0cyBjb3VudCBmb3IgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDcmVhdGVkJywgYXN5bmMgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciB0aGUgY3VycmVudCB1c2VyCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9zdHMudW5zZWVuLWNvdW50JykpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHBhZ2UucHJvcHMuYXV0aC51c2VyLmlkOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgKG5vdCBuZXN0ZWQgYnkgdXNlciBJRCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLnJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJVbnNlZW5Db3VudCA9IHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dpbmdOYXZpZ2F0aW9uRHJvcGRvd24gPSByZWYoZmFsc2UpOwpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIC8vIE9ubHkgc2hvdyBzZWxlY3RlZCBjYXRlZ29yeSB3aGVuIG9uIGRhc2hib2FyZCBwYWdlCiAgICBpZiAocGFnZS51cmwuc3RhcnRzV2l0aCgnL2Rhc2hib2FyZCcpKSB7CiAgICAgICAgcmV0dXJuIHBhZ2UucHJvcHMuY2F0ZWdvcnkgfHwgJ2NvbXVuaWNhcmknOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0pOwpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCi8vIEFkZCBmdW5jdGlvbiB0byBmZXRjaCB1bnNlZW4gcG9zdHMgY291bnQKY29uc3QgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBwYWdlLnByb3BzLmF1dGgudXNlci5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCAobm90IG5lc3RlZCBieSB1c2VyIElEKQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQuY29tdW5pY2FyaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBuZXN0ZWQgYnkgdXNlciBJRAogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4udXNlclVuc2VlbkNvdW50IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIGluaXRpYWxpemVFY2hvKCk7CiAgICAvLyBGZXRjaCBpbml0aWFsIHVuc2VlbiBwb3N0cyBjb3VudAogICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7Cn0pOwoKLy8gV2F0Y2ggZm9yIHJvdXRlIGNoYW5nZXMgdXNpbmcgSW5lcnRpYSdzIHBhZ2UgcHJvcHMKd2F0Y2goKCkgPT4gcGFnZS5wcm9wcy51cmwsICgpID0+IHsKICAgIGZldGNoVW5zZWVuUG9zdHNDb3VudCgpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgaWYgKHdpbmRvdy5FY2hvKSB7CiAgICAgICAgd2luZG93LkVjaG8uZGlzY29ubmVjdCgpOwogICAgfQp9KTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLAogICAgfSwKICAgIHVuc2Vlbl9wb3N0c19jb3VudDogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLAogICAgfSwKfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHVzZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gewogICAgc3dpdGNoKHVzZXIucm9sZSkgewogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICdVY2VuaWMnLCBjbGFzczogJ2JnLWdyZWVuLTUwIHRleHQtZ3JlZW4tNzAwJyB9OwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ0NhbGbEgycsIGNsYXNzOiAnYmctb3JhbmdlLTUwIHRleHQtb3JhbmdlLTcwMCcgfTsKICAgICAgICBjYXNlICdtYWVzdHJ1JzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ01hZXN0cnUnLCBjbGFzczogJ2JnLXJlZC01MCB0ZXh0LXJlZC03MDAnIH07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ1V0aWxpemF0b3InLCBjbGFzczogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnIH07CiAgICB9Cn0pOwoKY29uc3QgbmF2aWdhdGlvbkNhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yaWVzID0gWwogICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ2RlbW5pdGFyaScsIGljb246ICdNOSAxMmwyIDIgNC00bTUuNjE4LTQuMDE2QTExLjk1NSAxMS45NTUgMCAwMTEyIDIuOTQ0YTExLjk1NSAxMS45NTUgMCAwMS04LjYxOCAzLjA0QTEyLjAyIDEyLjAyIDAgMDAzIDljMCA1LjU5MSAzLjgyNCAxMC4yOSA5IDExLjYyMiA1LjE3Ni0xLjMzMiA5LTYuMDMgOS0xMS42MjIgMC0xLjA0Mi0uMTMzLTIuMDUyLS4zODItMy4wMTZ6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0KICAgIF07CgogICAgLy8gRmlsdGVyIG91dCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICBpZiAodXNlci5yb2xlID09PSAndWNlbmljJykgewogICAgICAgIHJldHVybiBjYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gY2F0LnNsdWcgIT09ICdtaWF6YS16aScpOwogICAgfQoKICAgIHJldHVybiBjYXRlZ29yaWVzOwp9KTsKCmNvbnN0IHNlbGVjdENhdGVnb3J5ID0gKGNhdGVnb3J5KSA9PiB7CiAgICByb3V0ZXIuZ2V0KHJvdXRlKCdkYXNoYm9hcmQnKSwgeyBjYXRlZ29yeSB9LCB7CiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBvbmx5OiBbJ3Bvc3RzJywgJ2NhdGVnb3J5J10sCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIEZldGNoIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50IGFmdGVyIG5hdmlnYXRpb24KICAgICAgICAgICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7CiAgICAgICAgfQogICAgfSk7Cn07CgovLyBVcGRhdGUgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRvIGFkZCBsb2dnaW5nCmNvbnN0IHVuc2VlblBvc3RzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfHwge307Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9Im1pbi1oLXNjcmVlbiBiZy1bI2YwZjJmNV0iPgogICAgICAgIDwhLS0gRml4ZWQgdG9wIG5hdmlnYXRpb24gLS0+CiAgICAgICAgPG5hdiBjbGFzcz0iZml4ZWQgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgei0yMCBiZy13aGl0ZSBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgc2hhZG93LXNtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHgtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE0Ij4KICAgICAgICAgICAgICAgICAgICA8IS0tIExvZ28gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlcic6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnZGFzaGJvYXJkJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcGxpY2F0aW9uTG9nbyBjbGFzcz0iYmxvY2sgaC04IHctYXV0byBmaWxsLWN1cnJlbnQgdGV4dC1ncmF5LTgwMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIE5hdmlnYXRpb24gVGFicyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgbWF4LXctWzY4MHB4XSBteC1hdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImNhdCBpbiBuYXZpZ2F0aW9uQ2F0ZWdvcmllcyIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdC5zbHVnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIjIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IGJvcmRlci1iLTIgcmVsYXRpdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudENhdGVnb3J5ID09PSBjYXQuc2x1ZyA/ICdib3JkZXItYmx1ZS01MDAgdGV4dC1ibHVlLTYwMCcgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD0ic2VsZWN0Q2F0ZWdvcnkoY2F0LnNsdWcpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCA6ZD0iY2F0Lmljb24iIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0idW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gPiAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhYnNvbHV0ZSB0b3AtWzAuNXJlbV0gLXRyYW5zbGF0ZS14LTEvMiBiZy1yZWQtNTAwIHRleHQtd2hpdGUgdGV4dC1bMC42cmVtXSByb3VuZGVkLWZ1bGwgaC00IHctNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iaXNNb2JpbGUgPyAnbGVmdC1bNzUlXScgOiAnbGVmdC1bNTUlXSciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBEcm9wZG93biAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCc6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBhbGlnbj0icmlnaHQiIHdpZHRoPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICN0cmlnZ2VyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5saW5lLWZsZXggcm91bmRlZC1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB5LTIgdGV4dC1zbSBsZWFkaW5nLTQgZm9udC1tZWRpdW0gcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSB0cmFuc2l0aW9uIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdweC0zJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaC04IHctOCByb3VuZGVkLWZ1bGwiIDpzcmM9InByb2ZpbGVQaG90b1VybCIgYWx0PSJQcm9maWxlIHBob3RvIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdtci0yJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBtaW4tdy1bODBweF0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSI+e3sgdXNlci5maXJzdF9uYW1lIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSAtbXQtMC41IiA6Y2xhc3M9InVzZXJUeXBlLmNsYXNzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXJUeXBlLnRleHQgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2NvbnRlbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdwcm9maWxlLmVkaXQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bkxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdsb2dvdXQnKSIgbWV0aG9kPSJwb3N0IiBhcz0iYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29uZWN0YXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L25hdj4KCiAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgPG1haW4gY2xhc3M9InB0LTE0Ij4KICAgICAgICAgICAgPCEtLSBQYWdlIEhlYWRpbmcgLS0+CiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImJnLXdoaXRlIHNoYWRvdyIgdi1pZj0iJHNsb3RzLmhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy03eGwgbXgtYXV0byBweS02IHB4LTQgc206cHgtNiBsZzpweC04Ij4KICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPSJoZWFkZXIiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oZWFkZXI+CgogICAgICAgICAgICA8IS0tIFBhZ2UgQ29udGVudCAtLT4KICAgICAgICAgICAgPHNsb3QgLz4KICAgICAgICA8L21haW4+CiAgICA8L2Rpdj4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KYm9keSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMmY1Owp9Cjwvc3R5bGU+IAAAAAAAAAAAmjgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADeHQAAAAAAAN4dAAAAAAAAAAAAAAAA8L8"
				],
				[
					108,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACbOAAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2ssIHdhdGNoIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluaywgcm91dGVyLCB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEFwcGxpY2F0aW9uTG9nbyBmcm9tICdAL0NvbXBvbmVudHMvQXBwbGljYXRpb25Mb2dvLnZ1ZSc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBOYXZMaW5rIGZyb20gJ0AvQ29tcG9uZW50cy9OYXZMaW5rLnZ1ZSc7CmltcG9ydCBSZXNwb25zaXZlTmF2TGluayBmcm9tICdAL0NvbXBvbmVudHMvUmVzcG9uc2l2ZU5hdkxpbmsudnVlJzsKaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJzsKaW1wb3J0IFB1c2hlciBmcm9tICdwdXNoZXItanMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBHZXQgQ1NSRiB0b2tlbiBmcm9tIG1ldGEgdGFnCiAgICAgICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImNzcmYtdG9rZW4iXScpPy5jb250ZW50OwogICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQgaW4gbWV0YSB0YWcuIFBsZWFzZSBlbnN1cmUgdGhlIG1ldGEgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dCBmaWxlLicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBJbml0aWFsaXplIEVjaG8gd2l0aCBwcm9wZXIgY29uZmlndXJhdGlvbgogICAgICAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oewogICAgICAgICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsCiAgICAgICAgICAgIGtleTogaW1wb3J0Lm1ldGEuZW52LlZJVEVfUFVTSEVSX0FQUF9LRVksCiAgICAgICAgICAgIGNsdXN0ZXI6IGltcG9ydC5tZXRhLmVudi5WSVRFX1BVU0hFUl9BUFBfQ0xVU1RFUiwKICAgICAgICAgICAgYXV0aDogewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiB0b2tlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlVucmVhZFBvc3RzQ291bnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS51bnNlZW5Qb3N0c0NvdW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdXNlcidzIElECiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHVuc2VlbiBwb3N0cyBjb3VudCBmb3IgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDcmVhdGVkJywgYXN5bmMgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciB0aGUgY3VycmVudCB1c2VyCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9zdHMudW5zZWVuLWNvdW50JykpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHBhZ2UucHJvcHMuYXV0aC51c2VyLmlkOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgKG5vdCBuZXN0ZWQgYnkgdXNlciBJRCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLnJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJVbnNlZW5Db3VudCA9IHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dpbmdOYXZpZ2F0aW9uRHJvcGRvd24gPSByZWYoZmFsc2UpOwpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIC8vIE9ubHkgc2hvdyBzZWxlY3RlZCBjYXRlZ29yeSB3aGVuIG9uIGRhc2hib2FyZCBwYWdlCiAgICBpZiAocGFnZS51cmwuc3RhcnRzV2l0aCgnL2Rhc2hib2FyZCcpKSB7CiAgICAgICAgcmV0dXJuIHBhZ2UucHJvcHMuY2F0ZWdvcnkgfHwgJ2NvbXVuaWNhcmknOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0pOwpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCi8vIEFkZCBmdW5jdGlvbiB0byBmZXRjaCB1bnNlZW4gcG9zdHMgY291bnQKY29uc3QgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBwYWdlLnByb3BzLmF1dGgudXNlci5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCAobm90IG5lc3RlZCBieSB1c2VyIElEKQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQuY29tdW5pY2FyaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBuZXN0ZWQgYnkgdXNlciBJRAogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4udXNlclVuc2VlbkNvdW50IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIGluaXRpYWxpemVFY2hvKCk7CiAgICAvLyBGZXRjaCBpbml0aWFsIHVuc2VlbiBwb3N0cyBjb3VudAogICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7Cn0pOwoKLy8gV2F0Y2ggZm9yIHJvdXRlIGNoYW5nZXMgdXNpbmcgSW5lcnRpYSdzIHBhZ2UgcHJvcHMKd2F0Y2goKCkgPT4gcGFnZS5wcm9wcy51cmwsICgpID0+IHsKICAgIGZldGNoVW5zZWVuUG9zdHNDb3VudCgpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgaWYgKHdpbmRvdy5FY2hvKSB7CiAgICAgICAgd2luZG93LkVjaG8uZGlzY29ubmVjdCgpOwogICAgfQp9KTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLAogICAgfSwKICAgIHVuc2Vlbl9wb3N0c19jb3VudDogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLAogICAgfSwKfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHVzZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gewogICAgc3dpdGNoKHVzZXIucm9sZSkgewogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICdVY2VuaWMnLCBjbGFzczogJ2JnLWdyZWVuLTUwIHRleHQtZ3JlZW4tNzAwJyB9OwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ0NhbGbEgycsIGNsYXNzOiAnYmctb3JhbmdlLTUwIHRleHQtb3JhbmdlLTcwMCcgfTsKICAgICAgICBjYXNlICdtYWVzdHJ1JzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ01hZXN0cnUnLCBjbGFzczogJ2JnLXJlZC01MCB0ZXh0LXJlZC03MDAnIH07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ1V0aWxpemF0b3InLCBjbGFzczogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnIH07CiAgICB9Cn0pOwoKY29uc3QgbmF2aWdhdGlvbkNhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yaWVzID0gWwogICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ2RlbW5pdGFyaScsIGljb246ICdNOSAxMmwyIDIgNC00bTUuNjE4LTQuMDE2QTExLjk1NSAxMS45NTUgMCAwMTEyIDIuOTQ0YTExLjk1NSAxMS45NTUgMCAwMS04LjYxOCAzLjA0QTEyLjAyIDEyLjAyIDAgMDAzIDljMCA1LjU5MSAzLjgyNCAxMC4yOSA5IDExLjYyMiA1LjE3Ni0xLjMzMiA5LTYuMDMgOS0xMS42MjIgMC0xLjA0Mi0uMTMzLTIuMDUyLS4zODItMy4wMTZ6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0KICAgIF07CgogICAgLy8gRmlsdGVyIG91dCBjYXRlZ29yaWVzIGJhc2VkIG9uIHVzZXIgcm9sZSBhbmQgZGlnbml0eQogICAgcmV0dXJuIGNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiB7CiAgICAgICAgLy8gRmlsdGVyIG91dCBtaWF6YS16aSBmb3IgdWNlbmljIHVzZXJzCiAgICAgICAgaWYgKHVzZXIucm9sZSA9PT0gJ3VjZW5pYycgJiYgY2F0LnNsdWcgPT09ICdtaWF6YS16aScpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBGaWx0ZXIgb3V0IGRlbW5pdGFyaSBmb3IgdXNlcnMgd2l0aG91dCBkaWduaXR5CiAgICAgICAgaWYgKGNhdC5zbHVnID09PSAnZGVtbml0YXJpJyAmJiAhdXNlci5sb2RnZV9tZW1iZXI/LmxvZGdlX2RpZ25pdHlfaWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwp9KTsKCmNvbnN0IHNlbGVjdENhdGVnb3J5ID0gKGNhdGVnb3J5KSA9PiB7CiAgICByb3V0ZXIuZ2V0KHJvdXRlKCdkYXNoYm9hcmQnKSwgeyBjYXRlZ29yeSB9LCB7CiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBvbmx5OiBbJ3Bvc3RzJywgJ2NhdGVnb3J5J10sCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIEZldGNoIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50IGFmdGVyIG5hdmlnYXRpb24KICAgICAgICAgICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7CiAgICAgICAgfQogICAgfSk7Cn07CgovLyBVcGRhdGUgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRvIGFkZCBsb2dnaW5nCmNvbnN0IHVuc2VlblBvc3RzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfHwge307Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9Im1pbi1oLXNjcmVlbiBiZy1bI2YwZjJmNV0iPgogICAgICAgIDwhLS0gRml4ZWQgdG9wIG5hdmlnYXRpb24gLS0+CiAgICAgICAgPG5hdiBjbGFzcz0iZml4ZWQgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgei0yMCBiZy13aGl0ZSBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgc2hhZG93LXNtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHgtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE0Ij4KICAgICAgICAgICAgICAgICAgICA8IS0tIExvZ28gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlcic6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnZGFzaGJvYXJkJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcGxpY2F0aW9uTG9nbyBjbGFzcz0iYmxvY2sgaC04IHctYXV0byBmaWxsLWN1cnJlbnQgdGV4dC1ncmF5LTgwMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIE5hdmlnYXRpb24gVGFicyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgbWF4LXctWzY4MHB4XSBteC1hdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImNhdCBpbiBuYXZpZ2F0aW9uQ2F0ZWdvcmllcyIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdC5zbHVnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIjIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IGJvcmRlci1iLTIgcmVsYXRpdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudENhdGVnb3J5ID09PSBjYXQuc2x1ZyA/ICdib3JkZXItYmx1ZS01MDAgdGV4dC1ibHVlLTYwMCcgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD0ic2VsZWN0Q2F0ZWdvcnkoY2F0LnNsdWcpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCA6ZD0iY2F0Lmljb24iIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0idW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gPiAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhYnNvbHV0ZSB0b3AtWzAuNXJlbV0gLXRyYW5zbGF0ZS14LTEvMiBiZy1yZWQtNTAwIHRleHQtd2hpdGUgdGV4dC1bMC42cmVtXSByb3VuZGVkLWZ1bGwgaC00IHctNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iaXNNb2JpbGUgPyAnbGVmdC1bNzUlXScgOiAnbGVmdC1bNTUlXSciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBEcm9wZG93biAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCc6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBhbGlnbj0icmlnaHQiIHdpZHRoPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICN0cmlnZ2VyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5saW5lLWZsZXggcm91bmRlZC1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB5LTIgdGV4dC1zbSBsZWFkaW5nLTQgZm9udC1tZWRpdW0gcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSB0cmFuc2l0aW9uIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdweC0zJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaC04IHctOCByb3VuZGVkLWZ1bGwiIDpzcmM9InByb2ZpbGVQaG90b1VybCIgYWx0PSJQcm9maWxlIHBob3RvIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdtci0yJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBtaW4tdy1bODBweF0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSI+e3sgdXNlci5maXJzdF9uYW1lIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSAtbXQtMC41IiA6Y2xhc3M9InVzZXJUeXBlLmNsYXNzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXJUeXBlLnRleHQgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2NvbnRlbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdwcm9maWxlLmVkaXQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bkxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdsb2dvdXQnKSIgbWV0aG9kPSJwb3N0IiBhcz0iYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29uZWN0YXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L25hdj4KCiAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgPG1haW4gY2xhc3M9InB0LTE0Ij4KICAgICAgICAgICAgPCEtLSBQYWdlIEhlYWRpbmcgLS0+CiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImJnLXdoaXRlIHNoYWRvdyIgdi1pZj0iJHNsb3RzLmhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy03eGwgbXgtYXV0byBweS02IHB4LTQgc206cHgtNiBsZzpweC04Ij4KICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPSJoZWFkZXIiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oZWFkZXI+CgogICAgICAgICAgICA8IS0tIFBhZ2UgQ29udGVudCAtLT4KICAgICAgICAgICAgPHNsb3QgLz4KICAgICAgICA8L21haW4+CiAgICA8L2Rpdj4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KYm9keSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMmY1Owp9Cjwvc3R5bGU+IAAAAAAAAAAAgTcAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA+IQAAAAAAADgcAAAAAAAAAAAAAAAA8L8"
				],
				[
					116,
					1,
					"paste",
					null,
					"AgAAAFEcAAAAAAAAPiEAAAAAAAAAAAAAPiEAAAAAAAA+IQAAAAAAAN8EAAAgICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0sCiAgICAgICAgeyBzbHVnOiAnZGVtbml0YXJpJywgaWNvbjogJ005IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xNyA2YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpNMTIuOTMgMTdjLjA0Ni0uMzI3LjA3LS42Ni4wNy0xYTYuOTcgNi45NyAwIDAwLTEuNS00LjMzQTUgNSAwIDAxMTkgMTZ2MWgtNi4wN3pNNiAxMWE1IDUgMCAwMTUgNXYxSDF2LTFhNSA1IDAgMDE1LTV6JyB9CiAgICBdOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAwIQAAAAAAAFEcAAAAAAAAAAAAAAAA8L8"
				],
				[
					117,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACQNwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2ssIHdhdGNoIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluaywgcm91dGVyLCB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEFwcGxpY2F0aW9uTG9nbyBmcm9tICdAL0NvbXBvbmVudHMvQXBwbGljYXRpb25Mb2dvLnZ1ZSc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBOYXZMaW5rIGZyb20gJ0AvQ29tcG9uZW50cy9OYXZMaW5rLnZ1ZSc7CmltcG9ydCBSZXNwb25zaXZlTmF2TGluayBmcm9tICdAL0NvbXBvbmVudHMvUmVzcG9uc2l2ZU5hdkxpbmsudnVlJzsKaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJzsKaW1wb3J0IFB1c2hlciBmcm9tICdwdXNoZXItanMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBHZXQgQ1NSRiB0b2tlbiBmcm9tIG1ldGEgdGFnCiAgICAgICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImNzcmYtdG9rZW4iXScpPy5jb250ZW50OwogICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQgaW4gbWV0YSB0YWcuIFBsZWFzZSBlbnN1cmUgdGhlIG1ldGEgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dCBmaWxlLicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBJbml0aWFsaXplIEVjaG8gd2l0aCBwcm9wZXIgY29uZmlndXJhdGlvbgogICAgICAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oewogICAgICAgICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsCiAgICAgICAgICAgIGtleTogaW1wb3J0Lm1ldGEuZW52LlZJVEVfUFVTSEVSX0FQUF9LRVksCiAgICAgICAgICAgIGNsdXN0ZXI6IGltcG9ydC5tZXRhLmVudi5WSVRFX1BVU0hFUl9BUFBfQ0xVU1RFUiwKICAgICAgICAgICAgYXV0aDogewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiB0b2tlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlVucmVhZFBvc3RzQ291bnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS51bnNlZW5Qb3N0c0NvdW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdXNlcidzIElECiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHVuc2VlbiBwb3N0cyBjb3VudCBmb3IgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDcmVhdGVkJywgYXN5bmMgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciB0aGUgY3VycmVudCB1c2VyCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9zdHMudW5zZWVuLWNvdW50JykpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHBhZ2UucHJvcHMuYXV0aC51c2VyLmlkOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgKG5vdCBuZXN0ZWQgYnkgdXNlciBJRCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLnJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJVbnNlZW5Db3VudCA9IHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dpbmdOYXZpZ2F0aW9uRHJvcGRvd24gPSByZWYoZmFsc2UpOwpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIC8vIE9ubHkgc2hvdyBzZWxlY3RlZCBjYXRlZ29yeSB3aGVuIG9uIGRhc2hib2FyZCBwYWdlCiAgICBpZiAocGFnZS51cmwuc3RhcnRzV2l0aCgnL2Rhc2hib2FyZCcpKSB7CiAgICAgICAgcmV0dXJuIHBhZ2UucHJvcHMuY2F0ZWdvcnkgfHwgJ2NvbXVuaWNhcmknOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0pOwpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCi8vIEFkZCBmdW5jdGlvbiB0byBmZXRjaCB1bnNlZW4gcG9zdHMgY291bnQKY29uc3QgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBwYWdlLnByb3BzLmF1dGgudXNlci5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCAobm90IG5lc3RlZCBieSB1c2VyIElEKQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQuY29tdW5pY2FyaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBuZXN0ZWQgYnkgdXNlciBJRAogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4udXNlclVuc2VlbkNvdW50IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIGluaXRpYWxpemVFY2hvKCk7CiAgICAvLyBGZXRjaCBpbml0aWFsIHVuc2VlbiBwb3N0cyBjb3VudAogICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7Cn0pOwoKLy8gV2F0Y2ggZm9yIHJvdXRlIGNoYW5nZXMgdXNpbmcgSW5lcnRpYSdzIHBhZ2UgcHJvcHMKd2F0Y2goKCkgPT4gcGFnZS5wcm9wcy51cmwsICgpID0+IHsKICAgIGZldGNoVW5zZWVuUG9zdHNDb3VudCgpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgaWYgKHdpbmRvdy5FY2hvKSB7CiAgICAgICAgd2luZG93LkVjaG8uZGlzY29ubmVjdCgpOwogICAgfQp9KTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLAogICAgfSwKICAgIHVuc2Vlbl9wb3N0c19jb3VudDogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLAogICAgfSwKfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHVzZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gewogICAgc3dpdGNoKHVzZXIucm9sZSkgewogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICdVY2VuaWMnLCBjbGFzczogJ2JnLWdyZWVuLTUwIHRleHQtZ3JlZW4tNzAwJyB9OwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ0NhbGbEgycsIGNsYXNzOiAnYmctb3JhbmdlLTUwIHRleHQtb3JhbmdlLTcwMCcgfTsKICAgICAgICBjYXNlICdtYWVzdHJ1JzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ01hZXN0cnUnLCBjbGFzczogJ2JnLXJlZC01MCB0ZXh0LXJlZC03MDAnIH07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ1V0aWxpemF0b3InLCBjbGFzczogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnIH07CiAgICB9Cn0pOwoKY29uc3QgbmF2aWdhdGlvbkNhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yaWVzID0gWwogICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ2RlbW5pdGFyaScsIGljb246ICdNOSAxMmwyIDIgNC00bTUuNjE4LTQuMDE2QTExLjk1NSAxMS45NTUgMCAwMTEyIDIuOTQ0YTExLjk1NSAxMS45NTUgMCAwMS04LjYxOCAzLjA0QTEyLjAyIDEyLjAyIDAgMDAzIDljMCA1LjU5MSAzLjgyNCAxMC4yOSA5IDExLjYyMiA1LjE3Ni0xLjMzMiA5LTYuMDMgOS0xMS42MjIgMC0xLjA0Mi0uMTMzLTIuMDUyLS4zODItMy4wMTZ6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0KICAgIF07CgogICAgLy8gRmlsdGVyIG91dCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICBpZiAodXNlci5yb2xlID09PSAndWNlbmljJykgewogICAgICAgIHJldHVybiBjYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gY2F0LnNsdWcgIT09ICdtaWF6YS16aScpOwogICAgfQoKICAgIHJldHVybiBjYXRlZ29yaWVzOwp9KTsKCmNvbnN0IHNlbGVjdENhdGVnb3J5ID0gKGNhdGVnb3J5KSA9PiB7CiAgICByb3V0ZXIuZ2V0KHJvdXRlKCdkYXNoYm9hcmQnKSwgeyBjYXRlZ29yeSB9LCB7CiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBvbmx5OiBbJ3Bvc3RzJywgJ2NhdGVnb3J5J10sCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIEZldGNoIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50IGFmdGVyIG5hdmlnYXRpb24KICAgICAgICAgICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7CiAgICAgICAgfQogICAgfSk7Cn07CgovLyBVcGRhdGUgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRvIGFkZCBsb2dnaW5nCmNvbnN0IHVuc2VlblBvc3RzQ291bnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfHwge307Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9Im1pbi1oLXNjcmVlbiBiZy1bI2YwZjJmNV0iPgogICAgICAgIDwhLS0gRml4ZWQgdG9wIG5hdmlnYXRpb24gLS0+CiAgICAgICAgPG5hdiBjbGFzcz0iZml4ZWQgdG9wLTAgbGVmdC0wIHJpZ2h0LTAgei0yMCBiZy13aGl0ZSBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgc2hhZG93LXNtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHgtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBoLTE0Ij4KICAgICAgICAgICAgICAgICAgICA8IS0tIExvZ28gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlcic6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnZGFzaGJvYXJkJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFwcGxpY2F0aW9uTG9nbyBjbGFzcz0iYmxvY2sgaC04IHctYXV0byBmaWxsLWN1cnJlbnQgdGV4dC1ncmF5LTgwMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIE5hdmlnYXRpb24gVGFicyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWZ1bGwgbWF4LXctWzY4MHB4XSBteC1hdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImNhdCBpbiBuYXZpZ2F0aW9uQ2F0ZWdvcmllcyIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdC5zbHVnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSIjIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IGJvcmRlci1iLTIgcmVsYXRpdmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudENhdGVnb3J5ID09PSBjYXQuc2x1ZyA/ICdib3JkZXItYmx1ZS01MDAgdGV4dC1ibHVlLTYwMCcgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD0ic2VsZWN0Q2F0ZWdvcnkoY2F0LnNsdWcpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCA6ZD0iY2F0Lmljb24iIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0idW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gPiAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhYnNvbHV0ZSB0b3AtWzAuNXJlbV0gLXRyYW5zbGF0ZS14LTEvMiBiZy1yZWQtNTAwIHRleHQtd2hpdGUgdGV4dC1bMC42cmVtXSByb3VuZGVkLWZ1bGwgaC00IHctNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iaXNNb2JpbGUgPyAnbGVmdC1bNzUlXScgOiAnbGVmdC1bNTUlXSciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdW5zZWVuUG9zdHNDb3VudFtjYXQuc2x1Z10gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBEcm9wZG93biAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieyd3LVs2MHB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCc6IGlzTW9iaWxlLCAndy1bMjgwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93biBhbGlnbj0icmlnaHQiIHdpZHRoPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICN0cmlnZ2VyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5saW5lLWZsZXggcm91bmRlZC1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB5LTIgdGV4dC1zbSBsZWFkaW5nLTQgZm9udC1tZWRpdW0gcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSB0cmFuc2l0aW9uIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdweC0zJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaC04IHctOCByb3VuZGVkLWZ1bGwiIDpzcmM9InByb2ZpbGVQaG90b1VybCIgYWx0PSJQcm9maWxlIHBob3RvIiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdtci0yJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNNb2JpbGUiIGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBtaW4tdy1bODBweF0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSI+e3sgdXNlci5maXJzdF9uYW1lIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSAtbXQtMC41IiA6Y2xhc3M9InVzZXJUeXBlLmNsYXNzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXJUeXBlLnRleHQgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2NvbnRlbnQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdwcm9maWxlLmVkaXQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9maWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bkxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bkxpbmsgOmhyZWY9InJvdXRlKCdsb2dvdXQnKSIgbWV0aG9kPSJwb3N0IiBhcz0iYnV0dG9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY29uZWN0YXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L25hdj4KCiAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgPG1haW4gY2xhc3M9InB0LTE0Ij4KICAgICAgICAgICAgPCEtLSBQYWdlIEhlYWRpbmcgLS0+CiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9ImJnLXdoaXRlIHNoYWRvdyIgdi1pZj0iJHNsb3RzLmhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXgtdy03eGwgbXgtYXV0byBweS02IHB4LTQgc206cHgtNiBsZzpweC04Ij4KICAgICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPSJoZWFkZXIiIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9oZWFkZXI+CgogICAgICAgICAgICA8IS0tIFBhZ2UgQ29udGVudCAtLT4KICAgICAgICAgICAgPHNsb3QgLz4KICAgICAgICA8L21haW4+CiAgICA8L2Rpdj4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KYm9keSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMmY1Owp9Cjwvc3R5bGU+IAAAAAAAAAAA7jcAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA+IQAAAAAAAD4hAAAAAAAAAAAAAAAA8L8"
				],
				[
					124,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAADvNwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2ssIHdhdGNoIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluaywgcm91dGVyLCB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEFwcGxpY2F0aW9uTG9nbyBmcm9tICdAL0NvbXBvbmVudHMvQXBwbGljYXRpb25Mb2dvLnZ1ZSc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBOYXZMaW5rIGZyb20gJ0AvQ29tcG9uZW50cy9OYXZMaW5rLnZ1ZSc7CmltcG9ydCBSZXNwb25zaXZlTmF2TGluayBmcm9tICdAL0NvbXBvbmVudHMvUmVzcG9uc2l2ZU5hdkxpbmsudnVlJzsKaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJzsKaW1wb3J0IFB1c2hlciBmcm9tICdwdXNoZXItanMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBHZXQgQ1NSRiB0b2tlbiBmcm9tIG1ldGEgdGFnCiAgICAgICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImNzcmYtdG9rZW4iXScpPy5jb250ZW50OwogICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQgaW4gbWV0YSB0YWcuIFBsZWFzZSBlbnN1cmUgdGhlIG1ldGEgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dCBmaWxlLicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBJbml0aWFsaXplIEVjaG8gd2l0aCBwcm9wZXIgY29uZmlndXJhdGlvbgogICAgICAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oewogICAgICAgICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsCiAgICAgICAgICAgIGtleTogaW1wb3J0Lm1ldGEuZW52LlZJVEVfUFVTSEVSX0FQUF9LRVksCiAgICAgICAgICAgIGNsdXN0ZXI6IGltcG9ydC5tZXRhLmVudi5WSVRFX1BVU0hFUl9BUFBfQ0xVU1RFUiwKICAgICAgICAgICAgYXV0aDogewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiB0b2tlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlVucmVhZFBvc3RzQ291bnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS51bnNlZW5Qb3N0c0NvdW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdXNlcidzIElECiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHVuc2VlbiBwb3N0cyBjb3VudCBmb3IgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDcmVhdGVkJywgYXN5bmMgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciB0aGUgY3VycmVudCB1c2VyCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9zdHMudW5zZWVuLWNvdW50JykpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHBhZ2UucHJvcHMuYXV0aC51c2VyLmlkOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgKG5vdCBuZXN0ZWQgYnkgdXNlciBJRCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLnJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJVbnNlZW5Db3VudCA9IHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dpbmdOYXZpZ2F0aW9uRHJvcGRvd24gPSByZWYoZmFsc2UpOwpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIC8vIE9ubHkgc2hvdyBzZWxlY3RlZCBjYXRlZ29yeSB3aGVuIG9uIGRhc2hib2FyZCBwYWdlCiAgICBpZiAocGFnZS51cmwuc3RhcnRzV2l0aCgnL2Rhc2hib2FyZCcpKSB7CiAgICAgICAgcmV0dXJuIHBhZ2UucHJvcHMuY2F0ZWdvcnkgfHwgJ2NvbXVuaWNhcmknOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0pOwpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCi8vIEFkZCBmdW5jdGlvbiB0byBmZXRjaCB1bnNlZW4gcG9zdHMgY291bnQKY29uc3QgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBwYWdlLnByb3BzLmF1dGgudXNlci5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCAobm90IG5lc3RlZCBieSB1c2VyIElEKQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQuY29tdW5pY2FyaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBuZXN0ZWQgYnkgdXNlciBJRAogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4udXNlclVuc2VlbkNvdW50IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIGluaXRpYWxpemVFY2hvKCk7CiAgICAvLyBGZXRjaCBpbml0aWFsIHVuc2VlbiBwb3N0cyBjb3VudAogICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7Cn0pOwoKLy8gV2F0Y2ggZm9yIHJvdXRlIGNoYW5nZXMgdXNpbmcgSW5lcnRpYSdzIHBhZ2UgcHJvcHMKd2F0Y2goKCkgPT4gcGFnZS5wcm9wcy51cmwsICgpID0+IHsKICAgIGZldGNoVW5zZWVuUG9zdHNDb3VudCgpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgaWYgKHdpbmRvdy5FY2hvKSB7CiAgICAgICAgd2luZG93LkVjaG8uZGlzY29ubmVjdCgpOwogICAgfQp9KTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLAogICAgfSwKICAgIHVuc2Vlbl9wb3N0c19jb3VudDogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLAogICAgfSwKfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHVzZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gewogICAgc3dpdGNoKHVzZXIucm9sZSkgewogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICdVY2VuaWMnLCBjbGFzczogJ2JnLWdyZWVuLTUwIHRleHQtZ3JlZW4tNzAwJyB9OwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ0NhbGbEgycsIGNsYXNzOiAnYmctb3JhbmdlLTUwIHRleHQtb3JhbmdlLTcwMCcgfTsKICAgICAgICBjYXNlICdtYWVzdHJ1JzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ01hZXN0cnUnLCBjbGFzczogJ2JnLXJlZC01MCB0ZXh0LXJlZC03MDAnIH07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ1V0aWxpemF0b3InLCBjbGFzczogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnIH07CiAgICB9Cn0pOwoKY29uc3QgbmF2aWdhdGlvbkNhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yaWVzID0gWwogICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ2RlbW5pdGFyaScsIGljb246ICdNOSAxMmwyIDIgNC00bTUuNjE4LTQuMDE2QTExLjk1NSAxMS45NTUgMCAwMTEyIDIuOTQ0YTExLjk1NSAxMS45NTUgMCAwMS04LjYxOCAzLjA0QTEyLjAyIDEyLjAyIDAgMDAzIDljMCA1LjU5MSAzLjgyNCAxMC4yOSA5IDExLjYyMiA1LjE3Ni0xLjMzMiA5LTYuMDMgOS0xMS42MjIgMC0xLjA0Mi0uMTMzLTIuMDUyLS4zODItMy4wMTZ6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0KICAgIF07CgogICAgLy8gRmlsdGVyIG91dCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICBpZiAodXNlci5yb2xlID09PSAndWNlbmljJykgewogICAgICAgIHJldHVybiBjYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gY2F0LnNsdWcgIT09ICdtaWF6YS16aScpOwogICAgfQoKICAgIHJldHVybiBjYXRlZ29yaWVzOwp9KTsKCmNvbnN0IHNlbGVjdENhdGVnb3J5ID0gKGNhdGVnb3J5KSA9PiB7CiAgICBpZiAoY2F0ZWdvcnkgPT09ICdkZW1uaXRhcmknKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIGNhdGVnb3J5OicsIGNhdGVnb3J5KTsKICAgIH0KICAgIHJvdXRlci5nZXQocm91dGUoJ2Rhc2hib2FyZCcpLCB7IGNhdGVnb3J5IH0sIHsKICAgICAgICBwcmVzZXJ2ZVN0YXRlOiB0cnVlLAogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9ubHk6IFsncG9zdHMnLCAnY2F0ZWdvcnknXSwKICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgLy8gRmV0Y2ggdXBkYXRlZCB1bnNlZW4gcG9zdHMgY291bnQgYWZ0ZXIgbmF2aWdhdGlvbgogICAgICAgICAgICBmZXRjaFVuc2VlblBvc3RzQ291bnQoKTsKICAgICAgICB9CiAgICB9KTsKfTsKCi8vIFVwZGF0ZSB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdG8gYWRkIGxvZ2dpbmcKY29uc3QgdW5zZWVuUG9zdHNDb3VudCA9IGNvbXB1dGVkKCgpID0+IHsKICAgIHJldHVybiBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB8fCB7fTsKfSk7Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ibWluLWgtc2NyZWVuIGJnLVsjZjBmMmY1XSI+CiAgICAgICAgPCEtLSBGaXhlZCB0b3AgbmF2aWdhdGlvbiAtLT4KICAgICAgICA8bmF2IGNsYXNzPSJmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCB6LTIwIGJnLXdoaXRlIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBzaGFkb3ctc20iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJweC00Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTQiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gTG9nbyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFpc01vYmlsZSIgOmNsYXNzPSJ7J3ctWzYwcHhdIGZsZXggaXRlbXMtY2VudGVyJzogaXNNb2JpbGUsICd3LVsyODBweF0gZmxleCBpdGVtcy1jZW50ZXInOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdkYXNoYm9hcmQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Mb2dvIGNsYXNzPSJibG9jayBoLTggdy1hdXRvIGZpbGwtY3VycmVudCB0ZXh0LWdyYXktODAwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gTmF2aWdhdGlvbiBUYWJzIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctZnVsbCBtYXgtdy1bNjgwcHhdIG14LWF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj0iY2F0IGluIG5hdmlnYXRpb25DYXRlZ29yaWVzIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0iY2F0LnNsdWciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9IiMiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTQgYm9yZGVyLWItMiByZWxhdGl2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJjdXJyZW50Q2F0ZWdvcnkgPT09IGNhdC5zbHVnID8gJ2JvcmRlci1ibHVlLTUwMCB0ZXh0LWJsdWUtNjAwJyA6ICdib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PSJzZWxlY3RDYXRlZ29yeShjYXQuc2x1ZykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIDpkPSJjYXQuaWNvbiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPSJ1bnNlZW5Qb3N0c0NvdW50W2NhdC5zbHVnXSA+IDAiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFic29sdXRlIHRvcC1bMC41cmVtXSAtdHJhbnNsYXRlLXgtMS8yIGJnLXJlZC01MDAgdGV4dC13aGl0ZSB0ZXh0LVswLjZyZW1dIHJvdW5kZWQtZnVsbCBoLTQgdy00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJpc01vYmlsZSA/ICdsZWZ0LVs3NSVdJyA6ICdsZWZ0LVs1NSVdJyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1bnNlZW5Qb3N0c0NvdW50W2NhdC5zbHVnXSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIERyb3Bkb3duIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J3ctWzYwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJzogaXNNb2JpbGUsICd3LVsyODBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIGFsaWduPSJyaWdodCIgd2lkdGg9IjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI3RyaWdnZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCByb3VuZGVkLWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHktMiB0ZXh0LXNtIGxlYWRpbmctNCBmb250LW1lZGl1bSByb3VuZGVkLWZ1bGwgaG92ZXI6YmctZ3JheS0xMDAgZm9jdXM6b3V0bGluZS1ub25lIHRyYW5zaXRpb24iIDpjbGFzcz0ieycnOiBpc01vYmlsZSwgJ3B4LTMnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIgOnNyYz0icHJvZmlsZVBob3RvVXJsIiBhbHQ9IlByb2ZpbGUgcGhvdG8iIDpjbGFzcz0ieycnOiBpc01vYmlsZSwgJ21yLTInOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFpc01vYmlsZSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIG1pbi13LVs4MHB4XSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtbWVkaXVtIj57eyB1c2VyLmZpcnN0X25hbWUgfX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0yLjUgcHktMC41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtIC1tdC0wLjUiIDpjbGFzcz0idXNlclR5cGUuY2xhc3MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlclR5cGUudGV4dCB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjY29udGVudD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTGluayA6aHJlZj0icm91dGUoJ3Byb2ZpbGUuZWRpdCcpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTGluayA6aHJlZj0icm91dGUoJ2xvZ291dCcpIiBtZXRob2Q9InBvc3QiIGFzPSJidXR0b24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb25lY3RhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bkxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvbmF2PgoKICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICA8bWFpbiBjbGFzcz0icHQtMTQiPgogICAgICAgICAgICA8IS0tIFBhZ2UgSGVhZGluZyAtLT4KICAgICAgICAgICAgPGhlYWRlciBjbGFzcz0iYmctd2hpdGUgc2hhZG93IiB2LWlmPSIkc2xvdHMuaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1heC13LTd4bCBteC1hdXRvIHB5LTYgcHgtNCBzbTpweC02IGxnOnB4LTgiPgogICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9ImhlYWRlciIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2hlYWRlcj4KCiAgICAgICAgICAgIDwhLS0gUGFnZSBDb250ZW50IC0tPgogICAgICAgICAgICA8c2xvdCAvPgogICAgICAgIDwvbWFpbj4KICAgIDwvZGl2Pgo8L3RlbXBsYXRlPgoKPHN0eWxlPgpib2R5IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYyZjU7Cn0KPC9zdHlsZT4gAAAAAAAAAACrOAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABSIQAAAAAAAFohAAAAAAAAAAAAAAAA8L8"
				],
				[
					125,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACsOAAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2ssIHdhdGNoIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluaywgcm91dGVyLCB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEFwcGxpY2F0aW9uTG9nbyBmcm9tICdAL0NvbXBvbmVudHMvQXBwbGljYXRpb25Mb2dvLnZ1ZSc7CmltcG9ydCBEcm9wZG93biBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd24udnVlJzsKaW1wb3J0IERyb3Bkb3duTGluayBmcm9tICdAL0NvbXBvbmVudHMvRHJvcGRvd25MaW5rLnZ1ZSc7CmltcG9ydCBOYXZMaW5rIGZyb20gJ0AvQ29tcG9uZW50cy9OYXZMaW5rLnZ1ZSc7CmltcG9ydCBSZXNwb25zaXZlTmF2TGluayBmcm9tICdAL0NvbXBvbmVudHMvUmVzcG9uc2l2ZU5hdkxpbmsudnVlJzsKaW1wb3J0IEVjaG8gZnJvbSAnbGFyYXZlbC1lY2hvJzsKaW1wb3J0IFB1c2hlciBmcm9tICdwdXNoZXItanMnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCmNvbnN0IGluaXRpYWxpemVFY2hvID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBHZXQgQ1NSRiB0b2tlbiBmcm9tIG1ldGEgdGFnCiAgICAgICAgY29uc3QgdG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9ImNzcmYtdG9rZW4iXScpPy5jb250ZW50OwogICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ1NSRiB0b2tlbiBub3QgZm91bmQgaW4gbWV0YSB0YWcuIFBsZWFzZSBlbnN1cmUgdGhlIG1ldGEgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGxheW91dCBmaWxlLicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBJbml0aWFsaXplIEVjaG8gd2l0aCBwcm9wZXIgY29uZmlndXJhdGlvbgogICAgICAgIHdpbmRvdy5FY2hvID0gbmV3IEVjaG8oewogICAgICAgICAgICBicm9hZGNhc3RlcjogJ3B1c2hlcicsCiAgICAgICAgICAgIGtleTogaW1wb3J0Lm1ldGEuZW52LlZJVEVfUFVTSEVSX0FQUF9LRVksCiAgICAgICAgICAgIGNsdXN0ZXI6IGltcG9ydC5tZXRhLmVudi5WSVRFX1BVU0hFUl9BUFBfQ0xVU1RFUiwKICAgICAgICAgICAgYXV0aDogewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiB0b2tlbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlVucmVhZFBvc3RzQ291bnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS51bnNlZW5Qb3N0c0NvdW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdXNlcidzIElECiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHVuc2VlbiBwb3N0cyBjb3VudCBmb3IgdGhlIGN1cnJlbnQgdXNlcgogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gZGF0YS51bnNlZW5Qb3N0c0NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3IgUG9zdENyZWF0ZWQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3RDcmVhdGVkJywgYXN5bmMgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0KSB7CiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciB0aGUgY3VycmVudCB1c2VyCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9zdHMudW5zZWVuLWNvdW50JykpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHBhZ2UucHJvcHMuYXV0aC51c2VyLmlkOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgKG5vdCBuZXN0ZWQgYnkgdXNlciBJRCkKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLnJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJVbnNlZW5Db3VudCA9IHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50W2N1cnJlbnRVc2VySWRdIHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3RpbmcgY291bnRzIGZvciBvdGhlciBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIG5ldyBjb3VudHMgd2l0aCBleGlzdGluZyBvbmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4uZXhpc3RpbmdDb3VudHMsIC4uLnVzZXJVbnNlZW5Db3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTG9nIHN1YnNjcmlwdGlvbiBlcnJvcnMKICAgICAgICBjaGFubmVsLmVycm9yKChlcnJvcikgPT4gewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDaGFubmVsIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dpbmdOYXZpZ2F0aW9uRHJvcGRvd24gPSByZWYoZmFsc2UpOwpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGN1cnJlbnRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIC8vIE9ubHkgc2hvdyBzZWxlY3RlZCBjYXRlZ29yeSB3aGVuIG9uIGRhc2hib2FyZCBwYWdlCiAgICBpZiAocGFnZS51cmwuc3RhcnRzV2l0aCgnL2Rhc2hib2FyZCcpKSB7CiAgICAgICAgcmV0dXJuIHBhZ2UucHJvcHMuY2F0ZWdvcnkgfHwgJ2NvbXVuaWNhcmknOwogICAgfQogICAgcmV0dXJuIG51bGw7Cn0pOwpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCi8vIEFkZCBmdW5jdGlvbiB0byBmZXRjaCB1bnNlZW4gcG9zdHMgY291bnQKY29uc3QgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSBwYWdlLnByb3BzLmF1dGgudXNlci5pZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCAobm90IG5lc3RlZCBieSB1c2VyIElEKQogICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQuY29tdW5pY2FyaSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXNwb25zZSBpcyBuZXN0ZWQgYnkgdXNlciBJRAogICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4udXNlclVuc2VlbkNvdW50IH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tNZW1iZXJMYXlvdXRdIEVycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIGluaXRpYWxpemVFY2hvKCk7CiAgICAvLyBGZXRjaCBpbml0aWFsIHVuc2VlbiBwb3N0cyBjb3VudAogICAgZmV0Y2hVbnNlZW5Qb3N0c0NvdW50KCk7Cn0pOwoKLy8gV2F0Y2ggZm9yIHJvdXRlIGNoYW5nZXMgdXNpbmcgSW5lcnRpYSdzIHBhZ2UgcHJvcHMKd2F0Y2goKCkgPT4gcGFnZS5wcm9wcy51cmwsICgpID0+IHsKICAgIGZldGNoVW5zZWVuUG9zdHNDb3VudCgpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgaWYgKHdpbmRvdy5FY2hvKSB7CiAgICAgICAgd2luZG93LkVjaG8uZGlzY29ubmVjdCgpOwogICAgfQp9KTsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLAogICAgfSwKICAgIHVuc2Vlbl9wb3N0c19jb3VudDogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLAogICAgfSwKfSk7Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IHVzZXJUeXBlID0gY29tcHV0ZWQoKCkgPT4gewogICAgc3dpdGNoKHVzZXIucm9sZSkgewogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiB7IHRleHQ6ICdVY2VuaWMnLCBjbGFzczogJ2JnLWdyZWVuLTUwIHRleHQtZ3JlZW4tNzAwJyB9OwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ0NhbGbEgycsIGNsYXNzOiAnYmctb3JhbmdlLTUwIHRleHQtb3JhbmdlLTcwMCcgfTsKICAgICAgICBjYXNlICdtYWVzdHJ1JzoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ01hZXN0cnUnLCBjbGFzczogJ2JnLXJlZC01MCB0ZXh0LXJlZC03MDAnIH07CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHsgdGV4dDogJ1V0aWxpemF0b3InLCBjbGFzczogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnIH07CiAgICB9Cn0pOwoKY29uc3QgbmF2aWdhdGlvbkNhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yaWVzID0gWwogICAgICAgIHsgc2x1ZzogJ2NvbXVuaWNhcmknLCBpY29uOiAnTTE4IDNhMSAxIDAgMDAtMS40NDctLjg5NEw4Ljc2MyA2SDVhMyAzIDAgMDAwIDZoLjI4bDEuNzcxIDUuMzE2QTEgMSAwIDAwOCAxOGgxYTEgMSAwIDAwMS0xdi00LjM4Mmw2LjU1MyAzLjI3NkExIDEgMCAwMDE4IDE1VjN6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLXppJywgaWNvbjogJ00xMCAyYTEgMSAwIDAxMSAxdjFhMSAxIDAgMTEtMiAwVjNhMSAxIDAgMDExLTF6bTQgOGE0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6bS0uNDY0IDQuOTVsLjcwNy43MDdhMSAxIDAgMDAxLjQxNC0xLjQxNGwtLjcwNy0uNzA3YTEgMSAwIDAwLTEuNDE0IDEuNDE0em0yLjEyLTEwLjYwN2ExIDEgMCAwMTAgMS40MTRsLS43MDYuNzA3YTEgMSAwIDExLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDB6TTE3IDExYTEgMSAwIDEwMC0yaC0xYTEgMSAwIDEwMCAyaDF6bS03IDRhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDB2LTFhMSAxIDAgMDExLTF6TTUuMDUgNi40NjRBMSAxIDAgMTA2LjQ2NSA1LjA1bC0uNzA4LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTRsLjcwNy43MDd6bTEuNDE0IDguNDg2bC0uNzA3LjcwN2ExIDEgMCAwMS0xLjQxNC0xLjQxNGwuNzA3LS43MDdhMSAxIDAgMDExLjQxNCAxLjQxNHpNNCAxMWExIDEgMCAxMDAtMkgzYTEgMSAwIDAwMCAyaDF6JyB9LAogICAgICAgIHsgc2x1ZzogJ21pYXphLW5vYXB0ZScsIGljb246ICdNMTcuMjkzIDEzLjI5M0E4IDggMCAwMTYuNzA3IDIuNzA3YTguMDAxIDguMDAxIDAgMTAxMC41ODYgMTAuNTg2eicgfSwKICAgICAgICB7IHNsdWc6ICdwcm9mdW4nLCBpY29uOiAnTTE4IDEwYzAgMy44NjYtMy41ODIgNy04IDdhOC44NDEgOC44NDEgMCAwMS00LjA4My0uOThMMiAxN2wxLjMzOC0zLjEyM0MyLjQ5MyAxMi43NjcgMiAxMS40MzQgMiAxMGMwLTMuODY2IDMuNTgyLTcgOC03czggMy4xMzQgOCA3ek03IDlINXYyaDJWOXptOCAwaC0ydjJoMlY5ek05IDloMnYySDlWOXonIH0KICAgIF07CgogICAgLy8gQWRkIGRlbW5pdGFyaSBjYXRlZ29yeSBvbmx5IGlmIHVzZXIgaGFzIGEgZGlnbml0eQogICAgaWYgKHVzZXIubG9kZ2VfbWVtYmVyPy5sb2RnZV9kaWduaXR5IHx8IHVzZXIubWxucl9kaWduaXR5KSB7CiAgICAgICAgY2F0ZWdvcmllcy5zcGxpY2UoMSwgMCwgeyAKICAgICAgICAgICAgc2x1ZzogJ2RlbW5pdGFyaScsIAogICAgICAgICAgICBpY29uOiAnTTkgMTJsMiAyIDQtNG01LjYxOC00LjAxNkExMS45NTUgMTEuOTU1IDAgMDExMiAyLjk0NGExMS45NTUgMTEuOTU1IDAgMDEtOC42MTggMy4wNEExMi4wMiAxMi4wMiAwIDAwMyA5YzAgNS41OTEgMy44MjQgMTAuMjkgOSAxMS42MjIgNS4xNzYtMS4zMzIgOS02LjAzIDktMTEuNjIyIDAtMS4wNDItLjEzMy0yLjA1Mi0uMzgyLTMuMDE2eicgCiAgICAgICAgfSk7CiAgICB9CgogICAgLy8gRmlsdGVyIG91dCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICBpZiAodXNlci5yb2xlID09PSAndWNlbmljJykgewogICAgICAgIHJldHVybiBjYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gY2F0LnNsdWcgIT09ICdtaWF6YS16aScpOwogICAgfQoKICAgIHJldHVybiBjYXRlZ29yaWVzOwp9KTsKCmNvbnN0IHNlbGVjdENhdGVnb3J5ID0gKGNhdGVnb3J5KSA9PiB7CiAgICBpZiAoY2F0ZWdvcnkgPT09ICdkZW1uaXRhcmknKSB7CiAgICAgICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIGNhdGVnb3J5OicsIGNhdGVnb3J5KTsKICAgIH0KICAgIHJvdXRlci5nZXQocm91dGUoJ2Rhc2hib2FyZCcpLCB7IGNhdGVnb3J5IH0sIHsKICAgICAgICBwcmVzZXJ2ZVN0YXRlOiB0cnVlLAogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9ubHk6IFsncG9zdHMnLCAnY2F0ZWdvcnknXSwKICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgLy8gRmV0Y2ggdXBkYXRlZCB1bnNlZW4gcG9zdHMgY291bnQgYWZ0ZXIgbmF2aWdhdGlvbgogICAgICAgICAgICBmZXRjaFVuc2VlblBvc3RzQ291bnQoKTsKICAgICAgICB9CiAgICB9KTsKfTsKCi8vIFVwZGF0ZSB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdG8gYWRkIGxvZ2dpbmcKY29uc3QgdW5zZWVuUG9zdHNDb3VudCA9IGNvbXB1dGVkKCgpID0+IHsKICAgIHJldHVybiBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB8fCB7fTsKfSk7Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ibWluLWgtc2NyZWVuIGJnLVsjZjBmMmY1XSI+CiAgICAgICAgPCEtLSBGaXhlZCB0b3AgbmF2aWdhdGlvbiAtLT4KICAgICAgICA8bmF2IGNsYXNzPSJmaXhlZCB0b3AtMCBsZWZ0LTAgcmlnaHQtMCB6LTIwIGJnLXdoaXRlIGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBzaGFkb3ctc20iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJweC00Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIGgtMTQiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gTG9nbyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFpc01vYmlsZSIgOmNsYXNzPSJ7J3ctWzYwcHhdIGZsZXggaXRlbXMtY2VudGVyJzogaXNNb2JpbGUsICd3LVsyODBweF0gZmxleCBpdGVtcy1jZW50ZXInOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdkYXNoYm9hcmQnKSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QXBwbGljYXRpb25Mb2dvIGNsYXNzPSJibG9jayBoLTggdy1hdXRvIGZpbGwtY3VycmVudCB0ZXh0LWdyYXktODAwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gTmF2aWdhdGlvbiBUYWJzIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctZnVsbCBtYXgtdy1bNjgwcHhdIG14LWF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj0iY2F0IGluIG5hdmlnYXRpb25DYXRlZ29yaWVzIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0iY2F0LnNsdWciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9IiMiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTQgYm9yZGVyLWItMiByZWxhdGl2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJjdXJyZW50Q2F0ZWdvcnkgPT09IGNhdC5zbHVnID8gJ2JvcmRlci1ibHVlLTUwMCB0ZXh0LWJsdWUtNjAwJyA6ICdib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PSJzZWxlY3RDYXRlZ29yeShjYXQuc2x1ZykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIDpkPSJjYXQuaWNvbiIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPSJ1bnNlZW5Qb3N0c0NvdW50W2NhdC5zbHVnXSA+IDAiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFic29sdXRlIHRvcC1bMC41cmVtXSAtdHJhbnNsYXRlLXgtMS8yIGJnLXJlZC01MDAgdGV4dC13aGl0ZSB0ZXh0LVswLjZyZW1dIHJvdW5kZWQtZnVsbCBoLTQgdy00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJpc01vYmlsZSA/ICdsZWZ0LVs3NSVdJyA6ICdsZWZ0LVs1NSVdJyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1bnNlZW5Qb3N0c0NvdW50W2NhdC5zbHVnXSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmdzIERyb3Bkb3duIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J3ctWzYwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kJzogaXNNb2JpbGUsICd3LVsyODBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duIGFsaWduPSJyaWdodCIgd2lkdGg9IjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI3RyaWdnZXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCByb3VuZGVkLWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHktMiB0ZXh0LXNtIGxlYWRpbmctNCBmb250LW1lZGl1bSByb3VuZGVkLWZ1bGwgaG92ZXI6YmctZ3JheS0xMDAgZm9jdXM6b3V0bGluZS1ub25lIHRyYW5zaXRpb24iIDpjbGFzcz0ieycnOiBpc01vYmlsZSwgJ3B4LTMnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIgOnNyYz0icHJvZmlsZVBob3RvVXJsIiBhbHQ9IlByb2ZpbGUgcGhvdG8iIDpjbGFzcz0ieycnOiBpc01vYmlsZSwgJ21yLTInOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFpc01vYmlsZSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIG1pbi13LVs4MHB4XSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtbWVkaXVtIj57eyB1c2VyLmZpcnN0X25hbWUgfX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0yLjUgcHktMC41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtIC1tdC0wLjUiIDpjbGFzcz0idXNlclR5cGUuY2xhc3MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlclR5cGUudGV4dCB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjY29udGVudD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTGluayA6aHJlZj0icm91dGUoJ3Byb2ZpbGUuZWRpdCcpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTGluayA6aHJlZj0icm91dGUoJ2xvZ291dCcpIiBtZXRob2Q9InBvc3QiIGFzPSJidXR0b24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb25lY3RhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bkxpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvbmF2PgoKICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICA8bWFpbiBjbGFzcz0icHQtMTQiPgogICAgICAgICAgICA8IS0tIFBhZ2UgSGVhZGluZyAtLT4KICAgICAgICAgICAgPGhlYWRlciBjbGFzcz0iYmctd2hpdGUgc2hhZG93IiB2LWlmPSIkc2xvdHMuaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1heC13LTd4bCBteC1hdXRvIHB5LTYgcHgtNCBzbTpweC02IGxnOnB4LTgiPgogICAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9ImhlYWRlciIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2hlYWRlcj4KCiAgICAgICAgICAgIDwhLS0gUGFnZSBDb250ZW50IC0tPgogICAgICAgICAgICA8c2xvdCAvPgogICAgICAgIDwvbWFpbj4KICAgIDwvZGl2Pgo8L3RlbXBsYXRlPgoKPHN0eWxlPgpib2R5IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYyZjU7Cn0KPC9zdHlsZT4gAAAAAAAAAAA9OgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABSIQAAAAAAAFohAAAAAAAAAAAAAAAA8L8"
				],
				[
					128,
					3,
					"left_delete",
					null,
					"AwAAAFkgAAAAAAAAWSAAAAAAAADsAAAAICAgIC8vIERlYnVnIGxvZ3MKICAgIGNvbnNvbGUubG9nKCdVc2VyOicsIHVzZXIpOwogICAgY29uc29sZS5sb2coJ0xvZGdlIE1lbWJlcjonLCB1c2VyLmxvZGdlX21lbWJlcik7CiAgICBjb25zb2xlLmxvZygnTG9kZ2UgRGlnbml0eSBJRDonLCB1c2VyLmxvZGdlX21lbWJlcj8ubG9kZ2VfZGlnbml0eV9pZCk7CiAgICBjb25zb2xlLmxvZygnTUxOUiBEaWduaXR5IElEOicsIHVzZXIubWxucl9kaWduaXR5X2lkKTtYIAAAAAAAAFggAAAAAAAAAQAAAApXIAAAAAAAAFcgAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABFIQAAAAAAAFkgAAAAAAAAAAAAAAAA8L8"
				],
				[
					131,
					2,
					"left_delete",
					null,
					"AgAAANkgAAAAAAAA2SAAAAAAAABEAAAAICAgICAgICBjb25zb2xlLmxvZygnQWRkaW5nIGRlbW5pdGFyaSBjYXRlZ29yeSAtIHVzZXIgaGFzIGRpZ25pdHknKTvYIAAAAAAAANggAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAdIQAAAAAAANkgAAAAAAAAAAAAAAAA8L8"
				],
				[
					134,
					1,
					"left_delete",
					null,
					"AQAAAAEiAAAAAAAAASIAAAAAAABZAAAAIGVsc2UgewogICAgICAgIGNvbnNvbGUubG9nKCdOb3QgYWRkaW5nIGRlbW5pdGFyaSBjYXRlZ29yeSAtIHVzZXIgaGFzIG5vIGRpZ25pdHknKTsKICAgIH0",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABaIgAAAAAAAAEiAAAAAAAAAAAAAAAA8L8"
				],
				[
					137,
					1,
					"left_delete",
					null,
					"AQAAAL0gAAAAAAAAvSAAAAAAAAAYAAAAIHx8IHVzZXIubWxucl9kaWduaXR5X2lk",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADVIAAAAAAAAL0gAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Http/Controllers/Member/DashboardController.php",
			"settings":
			{
				"buffer_size": 9332,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					7,
					1,
					"paste",
					null,
					"AgAAAAkKAAAAAAAAKwoAAAAAAAAAAAAAKwoAAAAAAAArCgAAAAAAAB4AAAAtPndoZXJlKCdzbHVnJywgJ2NvbXVuaWNhcmknKTs",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAnCgAAAAAAAAkKAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					1,
					"insert",
					{
						"characters": "demnitari"
					},
					"CgAAACAKAAAAAAAAIQoAAAAAAAAAAAAAIQoAAAAAAAAhCgAAAAAAAAgAAABtaWF6YS16aSEKAAAAAAAAIgoAAAAAAAAAAAAAIgoAAAAAAAAjCgAAAAAAAAAAAAAjCgAAAAAAACQKAAAAAAAAAAAAACQKAAAAAAAAJQoAAAAAAAAAAAAAJQoAAAAAAAAmCgAAAAAAAAAAAAAmCgAAAAAAACcKAAAAAAAAAAAAACcKAAAAAAAAKAoAAAAAAAAAAAAAKAoAAAAAAAApCgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAoCgAAAAAAACAKAAAAAAAAAAAAAAAA8L8"
				],
				[
					32,
					3,
					"left_delete",
					null,
					"AwAAAMUMAAAAAAAAxQwAAAAAAAAVAQAAICAgICAgICAvLyBJZiB1c2VyIHRyaWVzIHRvIGFjY2VzcyBkZW1uaXRhcmkgY2F0ZWdvcnkgd2l0aG91dCBoYXZpbmcgYSBkaWduaXR5LCByZWRpcmVjdCB0byBjb211bmljYXJpCiAgICAgICAgaWYgKCRjYXRlZ29yeSA9PT0gJ2RlbW5pdGFyaScgJiYgISR1c2VyLT5sb2RnZV9tZW1iZXI/LT5sb2RnZV9kaWduaXR5X2lkKSB7CiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgnZGFzaGJvYXJkJywgWydjYXRlZ29yeScgPT4gJ2NvbXVuaWNhcmknXSk7CiAgICAgICAgfcQMAAAAAAAAxAwAAAAAAAABAAAACsMMAAAAAAAAwwwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADaDQAAAAAAAMUMAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACUIQAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xNZW1iZXI7Cgp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsKdXNlIElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0Owp1c2UgSW5lcnRpYVxJbmVydGlhOwp1c2UgQXBwXE1vZGVsc1xMb2RnZU1lbWJlcjsKdXNlIEFwcFxNb2RlbHNcUG9zdDsKdXNlIEFwcFxNb2RlbHNcUG9zdENhdGVnb3J5Owp1c2UgQXBwXE1vZGVsc1xQb3N0VmlldzsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXExvZzsKCmNsYXNzIERhc2hib2FyZENvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChSZXF1ZXN0ICRyZXF1ZXN0KQogICAgewogICAgICAgICR1c2VyID0gJHJlcXVlc3QtPnVzZXIoKTsKICAgICAgICAKICAgICAgICAvLyBHZXQgdGhlIHVzZXIncyBsb2RnZSBtZW1iZXIgcmVjb3JkCiAgICAgICAgJG1lbWJlciA9IExvZGdlTWVtYmVyOjp3aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCkKICAgICAgICAgICAgLT53aXRoKFsnbG9kZ2UnXSkKICAgICAgICAgICAgLT5maXJzdCgpOwoKICAgICAgICBpZiAoISRtZW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL0Rhc2hib2FyZCcsIFsKICAgICAgICAgICAgICAgICdwb3N0cycgPT4gW10sCiAgICAgICAgICAgICAgICAnY2F0ZWdvcmllcycgPT4gW10sCiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknID0+ICdjb211bmljYXJpJywKICAgICAgICAgICAgICAgICdsb2RnZScgPT4gbnVsbCwKICAgICAgICAgICAgICAgICd1bnNlZW5fcG9zdHNfY291bnQnID0+IFtdLAogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgICRsb2RnZSA9ICRtZW1iZXItPmxvZGdlOwoKICAgICAgICAvLyBMb2FkIHRoZSBsb2RnZSB3aXRoIG1lbWJlcnMgY291bnQKICAgICAgICAkbG9kZ2UtPmxvYWRDb3VudChbJ21lbWJlcnMnID0+IGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAkcXVlcnktPmpvaW4oJ3VzZXJzJywgJ2xvZGdlX21lbWJlcnMudXNlcl9pZCcsICc9JywgJ3VzZXJzLmlkJykKICAgICAgICAgICAgICAgICAgLT53aGVyZShmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCd1c2Vycy5yb2xlJywgJ3VjZW5pYycpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdjYWxmYScpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdtYWVzdHJ1Jyk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH1dKTsKCiAgICAgICAgJGxvZGdlLT5sb2FkQ291bnQoWydwcm9qZWN0cyBhcyB1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgnc3RhdHVzJywgJ2luX3Byb2dyZXNzJyk7CiAgICAgICAgfV0pOwoKICAgICAgICAvLyBMb2FkIHVwY29taW5nIGV2ZW50cyBjb3VudAogICAgICAgICR1cGNvbWluZ0V2ZW50c0NvdW50ID0gUG9zdDo6d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVyZUhhcygnZXZlbnQnLCBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3N0YXJ0X2RhdGUnLCAnPicsIG5vdygpKTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAvLyBHZXQgcG9zdHMgd2l0aCB0aGVpciBjYXRlZ29yaWVzIGFuZCBhdXRob3JzCiAgICAgICAgJGNhdGVnb3J5ID0gJHJlcXVlc3QtPmlucHV0KCdjYXRlZ29yeScsICdjb211bmljYXJpJyk7CiAgICAgICAgCiAgICAgICAgJHBvc3RzID0gUG9zdDo6d2l0aChbJ2NhdGVnb3J5JywgJ2F1dGhvcicsICdyZWFjdGlvbnMnLCAnY29tbWVudHMuYXV0aG9yJywgJ2V2ZW50LnBvbGwudm90ZXMnLCAncG9sbC52b3RlcycsICd2aWV3cyddKQogICAgICAgICAgICAtPndoZXJlKCdsb2RnZV9pZCcsICRsb2RnZS0+aWQpCiAgICAgICAgICAgIC0+d2hlbigkdXNlci0+cm9sZSA9PT0gJ3VjZW5pYycsIGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRxdWVyeS0+d2hlcmVIYXMoJ2NhdGVnb3J5JywgZnVuY3Rpb24oJHEpIHsKICAgICAgICAgICAgICAgICAgICAkcS0+d2hlcmUoJ3NsdWcnLCAnIT0nLCAnbWlhemEtemknKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KQogICAgICAgICAgICAtPndoZW4oJGNhdGVnb3J5ID09PSAnZGVtbml0YXJpJyAmJiAhJHVzZXItPmxvZGdlX21lbWJlcj8tPmxvZGdlX2RpZ25pdHlfaWQsIGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAgICAgLy8gSWYgdXNlciB0cmllcyB0byBhY2Nlc3MgZGVtbml0YXJpIGNhdGVnb3J5IHdpdGhvdXQgaGF2aW5nIGEgZGlnbml0eSwgcmVkaXJlY3QgdG8gY29tdW5pY2FyaQogICAgICAgICAgICAgICAgcmV0dXJuICRxdWVyeS0+d2hlcmVIYXMoJ2NhdGVnb3J5JywgZnVuY3Rpb24oJHEpIHsKICAgICAgICAgICAgICAgICAgICAkcS0+d2hlcmUoJ3NsdWcnLCAnIT0nLCAnZGVtbml0YXJpJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT53aGVuKCRjYXRlZ29yeSAhPT0gJ2FsbCcsIGZ1bmN0aW9uKCRxdWVyeSkgdXNlICgkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcXVlcnktPndoZXJlSGFzKCdjYXRlZ29yeScsIGZ1bmN0aW9uKCRxKSB1c2UgKCRjYXRlZ29yeSkgewogICAgICAgICAgICAgICAgICAgICRxLT53aGVyZSgnc2x1ZycsICRjYXRlZ29yeSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5sYXRlc3QoKQogICAgICAgICAgICAtPnBhZ2luYXRlKDEwKQogICAgICAgICAgICAtPnRocm91Z2goZnVuY3Rpb24gKCRwb3N0KSB7CiAgICAgICAgICAgICAgICBpZiAoJHBvc3QtPmV2ZW50ICYmICRwb3N0LT5ldmVudC0+cG9sbCkgewogICAgICAgICAgICAgICAgICAgICRwb3N0LT5ldmVudC0+cG9sbC0+YXBwZW5kKCd2b3RlX2NvdW50cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRwb3N0LT5wb2xsKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvc3QtPnBvbGwtPmFwcGVuZCgndm90ZV9jb3VudHMnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkcG9zdDsKICAgICAgICAgICAgfSk7CgogICAgICAgIC8vIFRyYWNrIHBvc3Qgdmlld3MKICAgICAgICBmb3JlYWNoICgkcG9zdHMgYXMgJHBvc3QpIHsKICAgICAgICAgICAgaWYgKCEkcG9zdC0+dmlld3MtPmNvbnRhaW5zKCd1c2VyX2lkJywgJHVzZXItPmlkKSkgewogICAgICAgICAgICAgICAgUG9zdFZpZXc6OmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ291bnQgdW5zZWVuIHBvc3RzIHBlciBjYXRlZ29yeQogICAgICAgICR1bnNlZW5Qb3N0c0NvdW50ID0gW107CiAgICAgICAgJGNhdGVnb3JpZXMgPSBQb3N0Q2F0ZWdvcnk6OmFsbCgpOwogICAgICAgIGZvcmVhY2ggKCRjYXRlZ29yaWVzIGFzICRjYXQpIHsKICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnRbJGNhdC0+c2x1Z10gPSBQb3N0Ojp3aGVyZSgnbG9kZ2VfaWQnLCAkbG9kZ2UtPmlkKQogICAgICAgICAgICAgICAgLT53aGVyZSgnY2F0ZWdvcnlfaWQnLCAkY2F0LT5pZCkKICAgICAgICAgICAgICAgIC0+d2hlcmVEb2VzbnRIYXZlKCd2aWV3cycsIGZ1bmN0aW9uKCRxdWVyeSkgdXNlICgkdXNlcikgewogICAgICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC0+Y291bnQoKTsKICAgICAgICB9CgogICAgICAgIC8vIEdldCBhbGwgZXZlbnRzIGZvciB0aGUgcmlnaHQgc2lkZWJhcgogICAgICAgICRldmVudHMgPSBQb3N0Ojp3aXRoKFsnYXV0aG9yJywgJ2V2ZW50LnBvbGwudm90ZXMnXSkKICAgICAgICAgICAgLT53aGVyZSgnbG9kZ2VfaWQnLCAkbG9kZ2UtPmlkKQogICAgICAgICAgICAtPndoZXJlSGFzKCdldmVudCcpCiAgICAgICAgICAgIC0+bGF0ZXN0KCkKICAgICAgICAgICAgLT5nZXQoKQogICAgICAgICAgICAtPm1hcChmdW5jdGlvbiAoJHBvc3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkcG9zdC0+ZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJHBvc3QtPmV2ZW50LT5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgICdsb2NhdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRvcicgPT4gJHBvc3QtPmF1dGhvciA/IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRwb3N0LT5hdXRob3ItPmZpcnN0X25hbWUgLiAnICcgLiAkcG9zdC0+YXV0aG9yLT5sYXN0X25hbWUKICAgICAgICAgICAgICAgICAgICBdIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZmlsZV9wYXRoJyA9PiAkcG9zdC0+ZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICdmaWxlX25hbWUnID0+ICRwb3N0LT5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfc2l6ZScgPT4gJHBvc3QtPmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbGwnID0+ICRwb3N0LT5ldmVudC0+cG9sbCA/IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2b3RlcycgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT52b3RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2b3RlX2NvdW50cycgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgICAgICBdIDogbnVsbAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdNZW1iZXIvRGFzaGJvYXJkJywgWwogICAgICAgICAgICAncG9zdHMnID0+ICRwb3N0cywKICAgICAgICAgICAgJ2V2ZW50cycgPT4gJGV2ZW50cywKICAgICAgICAgICAgJ2NhdGVnb3JpZXMnID0+ICRjYXRlZ29yaWVzLT50b0FycmF5KCksCiAgICAgICAgICAgICdjYXRlZ29yeScgPT4gJGNhdGVnb3J5LAogICAgICAgICAgICAnbG9kZ2UnID0+IFsKICAgICAgICAgICAgICAgICdpZCcgPT4gJGxvZGdlLT5pZCwKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkbG9kZ2UtPm5hbWUsCiAgICAgICAgICAgICAgICAnYWRkcmVzcycgPT4gJGxvZGdlLT5hZGRyZXNzLAogICAgICAgICAgICAgICAgJ2NpdHknID0+ICRsb2RnZS0+Y2l0eSwKICAgICAgICAgICAgICAgICdtZW1iZXJzX2NvdW50JyA9PiAkbG9kZ2UtPm1lbWJlcnNfY291bnQsCiAgICAgICAgICAgICAgICAndW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCcgPT4gJGxvZGdlLT51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50LAogICAgICAgICAgICAgICAgJ3VwY29taW5nX2V2ZW50c19jb3VudCcgPT4gJHVwY29taW5nRXZlbnRzQ291bnQKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ3Vuc2Vlbl9wb3N0c19jb3VudCcgPT4gJHVuc2VlblBvc3RzQ291bnQsCiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRNb3JlKFJlcXVlc3QgJHJlcXVlc3QpCiAgICB7CiAgICAgICAgXExvZzo6aW5mbygnTG9hZE1vcmUgcmVxdWVzdCByZWNlaXZlZDonLCBbCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkcmVxdWVzdC0+dXNlcigpLT5pZCwKICAgICAgICAgICAgJ2NhdGVnb3J5JyA9PiAkcmVxdWVzdC0+aW5wdXQoJ2NhdGVnb3J5JyksCiAgICAgICAgICAgICdwYWdlJyA9PiAkcmVxdWVzdC0+aW5wdXQoJ3BhZ2UnKSwKICAgICAgICAgICAgJ2hlYWRlcnMnID0+ICRyZXF1ZXN0LT5oZWFkZXJzLT5hbGwoKQogICAgICAgIF0pOwoKICAgICAgICAkdXNlciA9ICRyZXF1ZXN0LT51c2VyKCk7CiAgICAgICAgJG1lbWJlciA9IExvZGdlTWVtYmVyOjp3aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCkKICAgICAgICAgICAgLT53aXRoKFsnbG9kZ2UnXSkKICAgICAgICAgICAgLT5maXJzdCgpOwoKICAgICAgICBpZiAoISRtZW1iZXIpIHsKICAgICAgICAgICAgXExvZzo6d2FybmluZygnTm8gbWVtYmVyIGZvdW5kIGZvciB1c2VyJywgWyd1c2VyX2lkJyA9PiAkdXNlci0+aWRdKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oWwogICAgICAgICAgICAgICAgJ2RhdGEnID0+IFtdLAogICAgICAgICAgICAgICAgJ2N1cnJlbnRfcGFnZScgPT4gMSwKICAgICAgICAgICAgICAgICdsYXN0X3BhZ2UnID0+IDEKICAgICAgICAgICAgXSk7CiAgICAgICAgfQoKICAgICAgICAkbG9kZ2UgPSAkbWVtYmVyLT5sb2RnZTsKICAgICAgICAkY2F0ZWdvcnkgPSAkcmVxdWVzdC0+aW5wdXQoJ2NhdGVnb3J5JywgJ2NvbXVuaWNhcmknKTsKICAgICAgICAkcGFnZSA9ICRyZXF1ZXN0LT5pbnB1dCgncGFnZScsIDEpOwogICAgICAgIAogICAgICAgIFxMb2c6OmluZm8oJ0ZldGNoaW5nIHBvc3RzIHdpdGggcGFyYW1zOicsIFsKICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkbG9kZ2UtPmlkLAogICAgICAgICAgICAnY2F0ZWdvcnknID0+ICRjYXRlZ29yeSwKICAgICAgICAgICAgJ3BhZ2UnID0+ICRwYWdlCiAgICAgICAgXSk7CiAgICAgICAgCiAgICAgICAgJHBvc3RzID0gUG9zdDo6d2l0aChbJ2NhdGVnb3J5JywgJ2F1dGhvcicsICdyZWFjdGlvbnMnLCAnY29tbWVudHMuYXV0aG9yJywgJ2V2ZW50LnBvbGwudm90ZXMnLCAncG9sbC52b3RlcyddKQogICAgICAgICAgICAtPndoZW4oJGNhdGVnb3J5ICE9PSAnYWxsJywgZnVuY3Rpb24gKCRxdWVyeSkgdXNlICgkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcXVlcnktPndoZXJlSGFzKCdjYXRlZ29yeScsIGZ1bmN0aW9uICgkcSkgdXNlICgkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgICAgICAkcS0+d2hlcmUoJ3NsdWcnLCAkY2F0ZWdvcnkpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC0+d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT5sYXRlc3QoKQogICAgICAgICAgICAtPnBhZ2luYXRlKDEwLCBbJyonXSwgJ3BhZ2UnLCAkcGFnZSkKICAgICAgICAgICAgLT50aHJvdWdoKGZ1bmN0aW9uICgkcG9zdCkgewogICAgICAgICAgICAgICAgaWYgKCRwb3N0LT5ldmVudCAmJiAkcG9zdC0+ZXZlbnQtPnBvbGwpIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+ZXZlbnQtPnBvbGwtPmFwcGVuZCgndm90ZV9jb3VudHMnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkcG9zdC0+cG9sbCkgewogICAgICAgICAgICAgICAgICAgICRwb3N0LT5wb2xsLT5hcHBlbmQoJ3ZvdGVfY291bnRzJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHBvc3Q7CiAgICAgICAgICAgIH0pOwoKICAgICAgICBcTG9nOjppbmZvKCdQb3N0cyBmZXRjaGVkOicsIFsKICAgICAgICAgICAgJ3RvdGFsJyA9PiAkcG9zdHMtPnRvdGFsKCksCiAgICAgICAgICAgICdjdXJyZW50X3BhZ2UnID0+ICRwb3N0cy0+Y3VycmVudFBhZ2UoKSwKICAgICAgICAgICAgJ2xhc3RfcGFnZScgPT4gJHBvc3RzLT5sYXN0UGFnZSgpLAogICAgICAgICAgICAncGVyX3BhZ2UnID0+ICRwb3N0cy0+cGVyUGFnZSgpLAogICAgICAgICAgICAnaXRlbXNfY291bnQnID0+IGNvdW50KCRwb3N0cy0+aXRlbXMoKSkKICAgICAgICBdKTsKCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oWwogICAgICAgICAgICAnZGF0YScgPT4gJHBvc3RzLT5pdGVtcygpLAogICAgICAgICAgICAnY3VycmVudF9wYWdlJyA9PiAkcG9zdHMtPmN1cnJlbnRQYWdlKCksCiAgICAgICAgICAgICdsYXN0X3BhZ2UnID0+ICRwb3N0cy0+bGFzdFBhZ2UoKQogICAgICAgIF0pOwogICAgfQp9IAAAAAAAAAAACSYAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADDDAAAAAAAAMMMAAAAAAAAAAAAAAAA8L8"
				],
				[
					43,
					1,
					"left_delete",
					null,
					"AQAAAKcRAAAAAAAApxEAAAAAAAAAAQAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50IGRhdGEgZnJvbSBkYXRhYmFzZTonLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+ICRwb3N0LT5ldmVudC0+dG9BcnJheSgpLAogICAgICAgICAgICAgICAgICAgICdyYXdfZW5kX2RhdGUnID0+ICRwb3N0LT5ldmVudC0+Z2V0UmF3T3JpZ2luYWwoJ2VuZF9kYXRlJykKICAgICAgICAgICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACnEgAAAAAAAKcRAAAAAAAAAAAAAAAA8L8"
				],
				[
					45,
					2,
					"left_delete",
					null,
					"AgAAAKcRAAAAAAAApxEAAAAAAAABAAAACqYRAAAAAAAAphEAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACoEQAAAAAAAKgRAAAAAAAAAAAAAAAAAAA"
				],
				[
					52,
					2,
					"left_delete",
					null,
					"AgAAAB8YAAAAAAAAHxgAAAAAAADCAAAAICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgXExvZzo6aW5mbygnRXZlbnQgZGF0YSBiZWluZyBzZW50IHRvIGZyb250ZW5kOicsIFsKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICdldmVudF9kYXRhJyA9PiAkZXZlbnREYXRhCiAgICAgICAgICAgICAgICBdKTseGAAAAAAAAB4YAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADhGAAAAAAAAB8YAAAAAAAAAAAAAAAA8L8"
				],
				[
					56,
					2,
					"left_delete",
					null,
					"AgAAAEcbAAAAAAAARxsAAAAAAAAFAQAAICAgICAgICBcTG9nOjppbmZvKCdMb2FkTW9yZSByZXF1ZXN0IHJlY2VpdmVkOicsIFsKICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRyZXF1ZXN0LT51c2VyKCktPmlkLAogICAgICAgICAgICAnY2F0ZWdvcnknID0+ICRyZXF1ZXN0LT5pbnB1dCgnY2F0ZWdvcnknKSwKICAgICAgICAgICAgJ3BhZ2UnID0+ICRyZXF1ZXN0LT5pbnB1dCgncGFnZScpLAogICAgICAgICAgICAnaGVhZGVycycgPT4gJHJlcXVlc3QtPmhlYWRlcnMtPmFsbCgpCiAgICAgICAgXSk7RhsAAAAAAABGGwAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMHAAAAAAAAEcbAAAAAAAAAAAAAAAA8L8"
				],
				[
					58,
					1,
					"left_delete",
					null,
					"AQAAAEYbAAAAAAAARhsAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABHGwAAAAAAAEcbAAAAAAAAAAAAAAAAREA"
				],
				[
					63,
					2,
					"left_delete",
					null,
					"AgAAAHQdAAAAAAAAdB0AAAAAAACvAAAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdGZXRjaGluZyBwb3N0cyB3aXRoIHBhcmFtczonLCBbCiAgICAgICAgICAgICdsb2RnZV9pZCcgPT4gJGxvZGdlLT5pZCwKICAgICAgICAgICAgJ2NhdGVnb3J5JyA9PiAkY2F0ZWdvcnksCiAgICAgICAgICAgICdwYWdlJyA9PiAkcGFnZQogICAgICAgIF0pO3MdAAAAAAAAcx0AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAjHgAAAAAAAHQdAAAAAAAAAAAAAAAA8L8"
				],
				[
					67,
					2,
					"left_delete",
					null,
					"AgAAAKsgAAAAAAAAqyAAAAAAAAAgAQAACiAgICAgICAgXExvZzo6aW5mbygnUG9zdHMgZmV0Y2hlZDonLCBbCiAgICAgICAgICAgICd0b3RhbCcgPT4gJHBvc3RzLT50b3RhbCgpLAogICAgICAgICAgICAnY3VycmVudF9wYWdlJyA9PiAkcG9zdHMtPmN1cnJlbnRQYWdlKCksCiAgICAgICAgICAgICdsYXN0X3BhZ2UnID0+ICRwb3N0cy0+bGFzdFBhZ2UoKSwKICAgICAgICAgICAgJ3Blcl9wYWdlJyA9PiAkcG9zdHMtPnBlclBhZ2UoKSwKICAgICAgICAgICAgJ2l0ZW1zX2NvdW50JyA9PiBjb3VudCgkcG9zdHMtPml0ZW1zKCkpCiAgICAgICAgXSk7qiAAAAAAAACqIAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADLIQAAAAAAAKsgAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAABsIQAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xNZW1iZXI7Cgp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsKdXNlIElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0Owp1c2UgSW5lcnRpYVxJbmVydGlhOwp1c2UgQXBwXE1vZGVsc1xMb2RnZU1lbWJlcjsKdXNlIEFwcFxNb2RlbHNcUG9zdDsKdXNlIEFwcFxNb2RlbHNcUG9zdENhdGVnb3J5Owp1c2UgQXBwXE1vZGVsc1xQb3N0VmlldzsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXExvZzsKCmNsYXNzIERhc2hib2FyZENvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChSZXF1ZXN0ICRyZXF1ZXN0KQogICAgewogICAgICAgICR1c2VyID0gJHJlcXVlc3QtPnVzZXIoKTsKICAgICAgICAKICAgICAgICAvLyBHZXQgdGhlIHVzZXIncyBsb2RnZSBtZW1iZXIgcmVjb3JkCiAgICAgICAgJG1lbWJlciA9IExvZGdlTWVtYmVyOjp3aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCkKICAgICAgICAgICAgLT53aXRoKFsnbG9kZ2UnXSkKICAgICAgICAgICAgLT5maXJzdCgpOwoKICAgICAgICBpZiAoISRtZW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL0Rhc2hib2FyZCcsIFsKICAgICAgICAgICAgICAgICdwb3N0cycgPT4gW10sCiAgICAgICAgICAgICAgICAnY2F0ZWdvcmllcycgPT4gW10sCiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknID0+ICdjb211bmljYXJpJywKICAgICAgICAgICAgICAgICdsb2RnZScgPT4gbnVsbCwKICAgICAgICAgICAgICAgICd1bnNlZW5fcG9zdHNfY291bnQnID0+IFtdLAogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgICRsb2RnZSA9ICRtZW1iZXItPmxvZGdlOwoKICAgICAgICAvLyBMb2FkIHRoZSBsb2RnZSB3aXRoIG1lbWJlcnMgY291bnQKICAgICAgICAkbG9kZ2UtPmxvYWRDb3VudChbJ21lbWJlcnMnID0+IGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAkcXVlcnktPmpvaW4oJ3VzZXJzJywgJ2xvZGdlX21lbWJlcnMudXNlcl9pZCcsICc9JywgJ3VzZXJzLmlkJykKICAgICAgICAgICAgICAgICAgLT53aGVyZShmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCd1c2Vycy5yb2xlJywgJ3VjZW5pYycpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdjYWxmYScpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdtYWVzdHJ1Jyk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH1dKTsKCiAgICAgICAgJGxvZGdlLT5sb2FkQ291bnQoWydwcm9qZWN0cyBhcyB1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgnc3RhdHVzJywgJ2luX3Byb2dyZXNzJyk7CiAgICAgICAgfV0pOwoKICAgICAgICAvLyBMb2FkIHVwY29taW5nIGV2ZW50cyBjb3VudAogICAgICAgICR1cGNvbWluZ0V2ZW50c0NvdW50ID0gUG9zdDo6d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVyZUhhcygnZXZlbnQnLCBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3N0YXJ0X2RhdGUnLCAnPicsIG5vdygpKTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAvLyBHZXQgcG9zdHMgd2l0aCB0aGVpciBjYXRlZ29yaWVzIGFuZCBhdXRob3JzCiAgICAgICAgJGNhdGVnb3J5ID0gJHJlcXVlc3QtPmlucHV0KCdjYXRlZ29yeScsICdjb211bmljYXJpJyk7CiAgICAgICAgCiAgICAgICAgJHBvc3RzID0gUG9zdDo6d2l0aChbJ2NhdGVnb3J5JywgJ2F1dGhvcicsICdyZWFjdGlvbnMnLCAnY29tbWVudHMuYXV0aG9yJywgJ2V2ZW50LnBvbGwudm90ZXMnLCAncG9sbC52b3RlcycsICd2aWV3cyddKQogICAgICAgICAgICAtPndoZXJlKCdsb2RnZV9pZCcsICRsb2RnZS0+aWQpCiAgICAgICAgICAgIC0+d2hlbigkdXNlci0+cm9sZSA9PT0gJ3VjZW5pYycsIGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRxdWVyeS0+d2hlcmVIYXMoJ2NhdGVnb3J5JywgZnVuY3Rpb24oJHEpIHsKICAgICAgICAgICAgICAgICAgICAkcS0+d2hlcmUoJ3NsdWcnLCAnIT0nLCAnbWlhemEtemknKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KQogICAgICAgICAgICAtPndoZW4oJGNhdGVnb3J5ID09PSAnZGVtbml0YXJpJyAmJiAhJHVzZXItPmxvZGdlX21lbWJlcj8tPmxvZGdlX2RpZ25pdHlfaWQsIGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAgICAgLy8gSWYgdXNlciB0cmllcyB0byBhY2Nlc3MgZGVtbml0YXJpIGNhdGVnb3J5IHdpdGhvdXQgaGF2aW5nIGEgZGlnbml0eSwgcmVkaXJlY3QgdG8gY29tdW5pY2FyaQogICAgICAgICAgICAgICAgcmV0dXJuICRxdWVyeS0+d2hlcmVIYXMoJ2NhdGVnb3J5JywgZnVuY3Rpb24oJHEpIHsKICAgICAgICAgICAgICAgICAgICAkcS0+d2hlcmUoJ3NsdWcnLCAnIT0nLCAnZGVtbml0YXJpJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT53aGVuKCRjYXRlZ29yeSAhPT0gJ2FsbCcsIGZ1bmN0aW9uKCRxdWVyeSkgdXNlICgkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcXVlcnktPndoZXJlSGFzKCdjYXRlZ29yeScsIGZ1bmN0aW9uKCRxKSB1c2UgKCRjYXRlZ29yeSkgewogICAgICAgICAgICAgICAgICAgICRxLT53aGVyZSgnc2x1ZycsICRjYXRlZ29yeSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5sYXRlc3QoKQogICAgICAgICAgICAtPnBhZ2luYXRlKDEwKQogICAgICAgICAgICAtPnRocm91Z2goZnVuY3Rpb24gKCRwb3N0KSB7CiAgICAgICAgICAgICAgICBpZiAoJHBvc3QtPmV2ZW50ICYmICRwb3N0LT5ldmVudC0+cG9sbCkgewogICAgICAgICAgICAgICAgICAgICRwb3N0LT5ldmVudC0+cG9sbC0+YXBwZW5kKCd2b3RlX2NvdW50cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRwb3N0LT5wb2xsKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvc3QtPnBvbGwtPmFwcGVuZCgndm90ZV9jb3VudHMnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkcG9zdDsKICAgICAgICAgICAgfSk7CgogICAgICAgIC8vIFRyYWNrIHBvc3Qgdmlld3MKICAgICAgICBmb3JlYWNoICgkcG9zdHMgYXMgJHBvc3QpIHsKICAgICAgICAgICAgaWYgKCEkcG9zdC0+dmlld3MtPmNvbnRhaW5zKCd1c2VyX2lkJywgJHVzZXItPmlkKSkgewogICAgICAgICAgICAgICAgUG9zdFZpZXc6OmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ291bnQgdW5zZWVuIHBvc3RzIHBlciBjYXRlZ29yeQogICAgICAgICR1bnNlZW5Qb3N0c0NvdW50ID0gW107CiAgICAgICAgJGNhdGVnb3JpZXMgPSBQb3N0Q2F0ZWdvcnk6OmFsbCgpOwogICAgICAgIGZvcmVhY2ggKCRjYXRlZ29yaWVzIGFzICRjYXQpIHsKICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnRbJGNhdC0+c2x1Z10gPSBQb3N0Ojp3aGVyZSgnbG9kZ2VfaWQnLCAkbG9kZ2UtPmlkKQogICAgICAgICAgICAgICAgLT53aGVyZSgnY2F0ZWdvcnlfaWQnLCAkY2F0LT5pZCkKICAgICAgICAgICAgICAgIC0+d2hlcmVEb2VzbnRIYXZlKCd2aWV3cycsIGZ1bmN0aW9uKCRxdWVyeSkgdXNlICgkdXNlcikgewogICAgICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC0+Y291bnQoKTsKICAgICAgICB9CgogICAgICAgIC8vIEdldCBhbGwgZXZlbnRzIGZvciB0aGUgcmlnaHQgc2lkZWJhcgogICAgICAgICRldmVudHMgPSBQb3N0Ojp3aXRoKFsnYXV0aG9yJywgJ2V2ZW50JyA9PiBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+c2VsZWN0KCdpZCcsICdwb3N0X2lkJywgJ3RpdGxlJywgJ2Rlc2NyaXB0aW9uJywgJ3N0YXJ0X2RhdGUnLCAnZW5kX2RhdGUnLCAnbG9jYXRpb24nLCAnbm90aWZ5X25vdycsICdub3RpZnlfMjRoX2JlZm9yZScsICdub3RpZmllZF8yNGhfYmVmb3JlJyk7CiAgICAgICAgICAgIH0sICdldmVudC5wb2xsLnZvdGVzJ10pCiAgICAgICAgICAgIC0+d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVyZUhhcygnZXZlbnQnKQogICAgICAgICAgICAtPmxhdGVzdCgpCiAgICAgICAgICAgIC0+Z2V0KCkKICAgICAgICAgICAgLT5tYXAoZnVuY3Rpb24gKCRwb3N0KSB7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJGV2ZW50RGF0YSA9IFsKICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRwb3N0LT5ldmVudC0+dGl0bGUsCiAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyA9PiAkcG9zdC0+ZXZlbnQtPmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICdzdGFydF9kYXRlJyA9PiAkcG9zdC0+ZXZlbnQtPnN0YXJ0X2RhdGUgaW5zdGFuY2VvZiBcQ2FyYm9uXENhcmJvbiAKICAgICAgICAgICAgICAgICAgICAgICAgPyAkcG9zdC0+ZXZlbnQtPnN0YXJ0X2RhdGUtPmZvcm1hdCgnWS1tLWRcVEg6aTpzLnVcWicpCiAgICAgICAgICAgICAgICAgICAgICAgIDogXENhcmJvblxDYXJib246OnBhcnNlKCRwb3N0LT5ldmVudC0+c3RhcnRfZGF0ZSktPmZvcm1hdCgnWS1tLWRcVEg6aTpzLnVcWicpLAogICAgICAgICAgICAgICAgICAgICdlbmRfZGF0ZScgPT4gJHBvc3QtPmV2ZW50LT5lbmRfZGF0ZSAKICAgICAgICAgICAgICAgICAgICAgICAgPyAoXENhcmJvblxDYXJib246OnBhcnNlKCRwb3N0LT5ldmVudC0+ZW5kX2RhdGUpLT5mb3JtYXQoJ1ktbS1kXFRIOmk6cy51XFonKSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICdsb2NhdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAnY3JlYXRvcicgPT4gJHBvc3QtPmF1dGhvciA/IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRwb3N0LT5hdXRob3ItPmZpcnN0X25hbWUgLiAnICcgLiAkcG9zdC0+YXV0aG9yLT5sYXN0X25hbWUKICAgICAgICAgICAgICAgICAgICBdIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZmlsZV9wYXRoJyA9PiAkcG9zdC0+ZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICdmaWxlX25hbWUnID0+ICRwb3N0LT5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfc2l6ZScgPT4gJHBvc3QtPmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbGwnID0+ICRwb3N0LT5ldmVudC0+cG9sbCA/IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2b3RlcycgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT52b3RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2b3RlX2NvdW50cycgPT4gJHBvc3QtPmV2ZW50LT5wb2xsLT52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgICAgICBdIDogbnVsbAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHJldHVybiAkZXZlbnREYXRhOwogICAgICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL0Rhc2hib2FyZCcsIFsKICAgICAgICAgICAgJ3Bvc3RzJyA9PiAkcG9zdHMsCiAgICAgICAgICAgICdldmVudHMnID0+ICRldmVudHMsCiAgICAgICAgICAgICdjYXRlZ29yaWVzJyA9PiAkY2F0ZWdvcmllcy0+dG9BcnJheSgpLAogICAgICAgICAgICAnY2F0ZWdvcnknID0+ICRjYXRlZ29yeSwKICAgICAgICAgICAgJ2xvZGdlJyA9PiBbCiAgICAgICAgICAgICAgICAnaWQnID0+ICRsb2RnZS0+aWQsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJGxvZGdlLT5uYW1lLAogICAgICAgICAgICAgICAgJ2FkZHJlc3MnID0+ICRsb2RnZS0+YWRkcmVzcywKICAgICAgICAgICAgICAgICdjaXR5JyA9PiAkbG9kZ2UtPmNpdHksCiAgICAgICAgICAgICAgICAnbWVtYmVyc19jb3VudCcgPT4gJGxvZGdlLT5tZW1iZXJzX2NvdW50LAogICAgICAgICAgICAgICAgJ3VuZmluaXNoZWRfcHJvamVjdHNfY291bnQnID0+ICRsb2RnZS0+dW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCwKICAgICAgICAgICAgICAgICd1cGNvbWluZ19ldmVudHNfY291bnQnID0+ICR1cGNvbWluZ0V2ZW50c0NvdW50CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICd1bnNlZW5fcG9zdHNfY291bnQnID0+ICR1bnNlZW5Qb3N0c0NvdW50LAogICAgICAgIF0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkTW9yZShSZXF1ZXN0ICRyZXF1ZXN0KQogICAgewogICAgICAgICR1c2VyID0gJHJlcXVlc3QtPnVzZXIoKTsKICAgICAgICAkbWVtYmVyID0gTG9kZ2VNZW1iZXI6OndoZXJlKCd1c2VyX2lkJywgJHVzZXItPmlkKQogICAgICAgICAgICAtPndpdGgoWydsb2RnZSddKQogICAgICAgICAgICAtPmZpcnN0KCk7CgogICAgICAgIGlmICghJG1lbWJlcikgewogICAgICAgICAgICBcTG9nOjp3YXJuaW5nKCdObyBtZW1iZXIgZm91bmQgZm9yIHVzZXInLCBbJ3VzZXJfaWQnID0+ICR1c2VyLT5pZF0pOwogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbCiAgICAgICAgICAgICAgICAnZGF0YScgPT4gW10sCiAgICAgICAgICAgICAgICAnY3VycmVudF9wYWdlJyA9PiAxLAogICAgICAgICAgICAgICAgJ2xhc3RfcGFnZScgPT4gMQogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgICRsb2RnZSA9ICRtZW1iZXItPmxvZGdlOwogICAgICAgICRjYXRlZ29yeSA9ICRyZXF1ZXN0LT5pbnB1dCgnY2F0ZWdvcnknLCAnY29tdW5pY2FyaScpOwogICAgICAgICRwYWdlID0gJHJlcXVlc3QtPmlucHV0KCdwYWdlJywgMSk7CiAgICAgICAgCiAgICAgICAgJHBvc3RzID0gUG9zdDo6d2l0aChbJ2NhdGVnb3J5JywgJ2F1dGhvcicsICdyZWFjdGlvbnMnLCAnY29tbWVudHMuYXV0aG9yJywgJ2V2ZW50LnBvbGwudm90ZXMnLCAncG9sbC52b3RlcyddKQogICAgICAgICAgICAtPndoZW4oJGNhdGVnb3J5ICE9PSAnYWxsJywgZnVuY3Rpb24gKCRxdWVyeSkgdXNlICgkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkcXVlcnktPndoZXJlSGFzKCdjYXRlZ29yeScsIGZ1bmN0aW9uICgkcSkgdXNlICgkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgICAgICAkcS0+d2hlcmUoJ3NsdWcnLCAkY2F0ZWdvcnkpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC0+d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT5sYXRlc3QoKQogICAgICAgICAgICAtPnBhZ2luYXRlKDEwLCBbJyonXSwgJ3BhZ2UnLCAkcGFnZSkKICAgICAgICAgICAgLT50aHJvdWdoKGZ1bmN0aW9uICgkcG9zdCkgewogICAgICAgICAgICAgICAgaWYgKCRwb3N0LT5ldmVudCAmJiAkcG9zdC0+ZXZlbnQtPnBvbGwpIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+ZXZlbnQtPnBvbGwtPmFwcGVuZCgndm90ZV9jb3VudHMnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkcG9zdC0+cG9sbCkgewogICAgICAgICAgICAgICAgICAgICRwb3N0LT5wb2xsLT5hcHBlbmQoJ3ZvdGVfY291bnRzJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHBvc3Q7CiAgICAgICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbCiAgICAgICAgICAgICdkYXRhJyA9PiAkcG9zdHMtPml0ZW1zKCksCiAgICAgICAgICAgICdjdXJyZW50X3BhZ2UnID0+ICRwb3N0cy0+Y3VycmVudFBhZ2UoKSwKICAgICAgICAgICAgJ2xhc3RfcGFnZScgPT4gJHBvc3RzLT5sYXN0UGFnZSgpCiAgICAgICAgXSk7CiAgICB9Cn0gAAAAAAAAAABqJAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAA/hsAAAAAAAAEHAAAAAAAAAAAAAAAAPC/"
				],
				[
					2,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAABqJAAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xNZW1iZXI7Cgp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsKdXNlIElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0Owp1c2UgSW5lcnRpYVxJbmVydGlhOwp1c2UgQXBwXE1vZGVsc1xMb2RnZU1lbWJlcjsKdXNlIEFwcFxNb2RlbHNcUG9zdDsKdXNlIEFwcFxNb2RlbHNcUG9zdENhdGVnb3J5Owp1c2UgQXBwXE1vZGVsc1xQb3N0VmlldzsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXExvZzsKCmNsYXNzIERhc2hib2FyZENvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChSZXF1ZXN0ICRyZXF1ZXN0KQogICAgewogICAgICAgICR1c2VyID0gJHJlcXVlc3QtPnVzZXIoKTsKICAgICAgICAKICAgICAgICAvLyBHZXQgdGhlIHVzZXIncyBsb2RnZSBtZW1iZXIgcmVjb3JkCiAgICAgICAgJG1lbWJlciA9IExvZGdlTWVtYmVyOjp3aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCkKICAgICAgICAgICAgLT53aXRoKFsnbG9kZ2UnXSkKICAgICAgICAgICAgLT5maXJzdCgpOwoKICAgICAgICBpZiAoISRtZW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL0Rhc2hib2FyZCcsIFsKICAgICAgICAgICAgICAgICdwb3N0cycgPT4gW10sCiAgICAgICAgICAgICAgICAnY2F0ZWdvcmllcycgPT4gW10sCiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknID0+ICdjb211bmljYXJpJywKICAgICAgICAgICAgICAgICdsb2RnZScgPT4gbnVsbCwKICAgICAgICAgICAgICAgICd1bnNlZW5fcG9zdHNfY291bnQnID0+IFtdLAogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgICRsb2RnZSA9ICRtZW1iZXItPmxvZGdlOwoKICAgICAgICAvLyBMb2FkIHRoZSBsb2RnZSB3aXRoIG1lbWJlcnMgY291bnQKICAgICAgICAkbG9kZ2UtPmxvYWRDb3VudChbJ21lbWJlcnMnID0+IGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAkcXVlcnktPmpvaW4oJ3VzZXJzJywgJ2xvZGdlX21lbWJlcnMudXNlcl9pZCcsICc9JywgJ3VzZXJzLmlkJykKICAgICAgICAgICAgICAgICAgLT53aGVyZShmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCd1c2Vycy5yb2xlJywgJ3VjZW5pYycpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdjYWxmYScpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdtYWVzdHJ1Jyk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH1dKTsKCiAgICAgICAgJGxvZGdlLT5sb2FkQ291bnQoWydwcm9qZWN0cyBhcyB1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgnc3RhdHVzJywgJ2luX3Byb2dyZXNzJyk7CiAgICAgICAgfV0pOwoKICAgICAgICAvLyBMb2FkIHVwY29taW5nIGV2ZW50cyBjb3VudAogICAgICAgICR1cGNvbWluZ0V2ZW50c0NvdW50ID0gUG9zdDo6d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVyZUhhcygnZXZlbnQnLCBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3N0YXJ0X2RhdGUnLCAnPicsIG5vdygpKTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAvLyBHZXQgcG9zdHMgd2l0aCB0aGVpciBjYXRlZ29yaWVzIGFuZCBhdXRob3JzCiAgICAgICAgJGNhdGVnb3J5ID0gJHJlcXVlc3QtPmlucHV0KCdjYXRlZ29yeScsICdjb211bmljYXJpJyk7CiAgICAgICAgCiAgICAgICAgJHBvc3RzID0gUG9zdDo6d2l0aChbJ2NhdGVnb3J5JywgJ2F1dGhvci5sb2RnZV9tZW1iZXIubG9kZ2VEaWduaXR5JywgJ3JlYWN0aW9ucycsICdjb21tZW50cy5hdXRob3InLCAnZXZlbnQucG9sbC52b3RlcycsICdwb2xsLnZvdGVzJywgJ3ZpZXdzJ10pCiAgICAgICAgICAgIC0+d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVuKCR1c2VyLT5yb2xlID09PSAndWNlbmljJywgZnVuY3Rpb24oJHF1ZXJ5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHF1ZXJ5LT53aGVyZUhhcygnY2F0ZWdvcnknLCBmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICRxLT53aGVyZSgnc2x1ZycsICchPScsICdtaWF6YS16aScpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC0+d2hlbigkY2F0ZWdvcnkgPT09ICdkZW1uaXRhcmknICYmICEkdXNlci0+bG9kZ2VfbWVtYmVyPy0+bG9kZ2VfZGlnbml0eV9pZCwgZnVuY3Rpb24oJHF1ZXJ5KSB7CiAgICAgICAgICAgICAgICAvLyBJZiB1c2VyIHRyaWVzIHRvIGFjY2VzcyBkZW1uaXRhcmkgY2F0ZWdvcnkgd2l0aG91dCBoYXZpbmcgYSBkaWduaXR5LCByZWRpcmVjdCB0byBjb211bmljYXJpCiAgICAgICAgICAgICAgICByZXR1cm4gJHF1ZXJ5LT53aGVyZUhhcygnY2F0ZWdvcnknLCBmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICRxLT53aGVyZSgnc2x1ZycsICchPScsICdkZW1uaXRhcmknKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KQogICAgICAgICAgICAtPndoZW4oJGNhdGVnb3J5ICE9PSAnYWxsJywgZnVuY3Rpb24oJHF1ZXJ5KSB1c2UgKCRjYXRlZ29yeSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRxdWVyeS0+d2hlcmVIYXMoJ2NhdGVnb3J5JywgZnVuY3Rpb24oJHEpIHVzZSAoJGNhdGVnb3J5KSB7CiAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCdzbHVnJywgJGNhdGVnb3J5KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KQogICAgICAgICAgICAtPmxhdGVzdCgpCiAgICAgICAgICAgIC0+cGFnaW5hdGUoMTApCiAgICAgICAgICAgIC0+dGhyb3VnaChmdW5jdGlvbiAoJHBvc3QpIHsKICAgICAgICAgICAgICAgIGlmICgkcG9zdC0+ZXZlbnQgJiYgJHBvc3QtPmV2ZW50LT5wb2xsKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvc3QtPmV2ZW50LT5wb2xsLT5hcHBlbmQoJ3ZvdGVfY291bnRzJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJHBvc3QtPnBvbGwpIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+cG9sbC0+YXBwZW5kKCd2b3RlX2NvdW50cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQWRkIGRpZ25pdHkgbmFtZSB0byBhdXRob3IKICAgICAgICAgICAgICAgIGlmICgkcG9zdC0+YXV0aG9yICYmICRwb3N0LT5hdXRob3ItPmxvZGdlX21lbWJlciAmJiAkcG9zdC0+YXV0aG9yLT5sb2RnZV9tZW1iZXItPmxvZGdlRGlnbml0eSkgewogICAgICAgICAgICAgICAgICAgICRwb3N0LT5hdXRob3ItPmRpZ25pdHlfbmFtZSA9ICRwb3N0LT5hdXRob3ItPmxvZGdlX21lbWJlci0+bG9kZ2VEaWduaXR5LT5uYW1lOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+YXV0aG9yLT5kaWduaXR5X25hbWUgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICRwb3N0OwogICAgICAgICAgICB9KTsKCiAgICAgICAgLy8gVHJhY2sgcG9zdCB2aWV3cwogICAgICAgIGZvcmVhY2ggKCRwb3N0cyBhcyAkcG9zdCkgewogICAgICAgICAgICBpZiAoISRwb3N0LT52aWV3cy0+Y29udGFpbnMoJ3VzZXJfaWQnLCAkdXNlci0+aWQpKSB7CiAgICAgICAgICAgICAgICBQb3N0Vmlldzo6Y3JlYXRlKFsKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDb3VudCB1bnNlZW4gcG9zdHMgcGVyIGNhdGVnb3J5CiAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKICAgICAgICAkY2F0ZWdvcmllcyA9IFBvc3RDYXRlZ29yeTo6YWxsKCk7CiAgICAgICAgZm9yZWFjaCAoJGNhdGVnb3JpZXMgYXMgJGNhdCkgewogICAgICAgICAgICAkdW5zZWVuUG9zdHNDb3VudFskY2F0LT5zbHVnXSA9IFBvc3Q6OndoZXJlKCdsb2RnZV9pZCcsICRsb2RnZS0+aWQpCiAgICAgICAgICAgICAgICAtPndoZXJlKCdjYXRlZ29yeV9pZCcsICRjYXQtPmlkKQogICAgICAgICAgICAgICAgLT53aGVyZURvZXNudEhhdmUoJ3ZpZXdzJywgZnVuY3Rpb24oJHF1ZXJ5KSB1c2UgKCR1c2VyKSB7CiAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLT5jb3VudCgpOwogICAgICAgIH0KCiAgICAgICAgLy8gR2V0IGFsbCBldmVudHMgZm9yIHRoZSByaWdodCBzaWRlYmFyCiAgICAgICAgJGV2ZW50cyA9IFBvc3Q6OndpdGgoWydhdXRob3InLCAnZXZlbnQnID0+IGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAgICAgJHF1ZXJ5LT5zZWxlY3QoJ2lkJywgJ3Bvc3RfaWQnLCAndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAnc3RhcnRfZGF0ZScsICdlbmRfZGF0ZScsICdsb2NhdGlvbicsICdub3RpZnlfbm93JywgJ25vdGlmeV8yNGhfYmVmb3JlJywgJ25vdGlmaWVkXzI0aF9iZWZvcmUnKTsKICAgICAgICAgICAgfSwgJ2V2ZW50LnBvbGwudm90ZXMnXSkKICAgICAgICAgICAgLT53aGVyZSgnbG9kZ2VfaWQnLCAkbG9kZ2UtPmlkKQogICAgICAgICAgICAtPndoZXJlSGFzKCdldmVudCcpCiAgICAgICAgICAgIC0+bGF0ZXN0KCkKICAgICAgICAgICAgLT5nZXQoKQogICAgICAgICAgICAtPm1hcChmdW5jdGlvbiAoJHBvc3QpIHsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkZXZlbnREYXRhID0gWwogICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJHBvc3QtPmV2ZW50LT50aXRsZSwKICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICRwb3N0LT5ldmVudC0+ZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X2RhdGUnID0+ICRwb3N0LT5ldmVudC0+c3RhcnRfZGF0ZSBpbnN0YW5jZW9mIFxDYXJib25cQ2FyYm9uIAogICAgICAgICAgICAgICAgICAgICAgICA/ICRwb3N0LT5ldmVudC0+c3RhcnRfZGF0ZS0+Zm9ybWF0KCdZLW0tZFxUSDppOnMudVxaJykKICAgICAgICAgICAgICAgICAgICAgICAgOiBcQ2FyYm9uXENhcmJvbjo6cGFyc2UoJHBvc3QtPmV2ZW50LT5zdGFydF9kYXRlKS0+Zm9ybWF0KCdZLW0tZFxUSDppOnMudVxaJyksCiAgICAgICAgICAgICAgICAgICAgJ2VuZF9kYXRlJyA9PiAkcG9zdC0+ZXZlbnQtPmVuZF9kYXRlIAogICAgICAgICAgICAgICAgICAgICAgICA/IChcQ2FyYm9uXENhcmJvbjo6cGFyc2UoJHBvc3QtPmV2ZW50LT5lbmRfZGF0ZSktPmZvcm1hdCgnWS1tLWRcVEg6aTpzLnVcWicpKQogICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkcG9zdC0+ZXZlbnQtPmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICdjcmVhdG9yJyA9PiAkcG9zdC0+YXV0aG9yID8gWwogICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJHBvc3QtPmF1dGhvci0+Zmlyc3RfbmFtZSAuICcgJyAuICRwb3N0LT5hdXRob3ItPmxhc3RfbmFtZQogICAgICAgICAgICAgICAgICAgIF0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3BhdGgnID0+ICRwb3N0LT5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfbmFtZScgPT4gJHBvc3QtPmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnZmlsZV9zaXplJyA9PiAkcG9zdC0+ZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgICdldmVudCcgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAncG9sbCcgPT4gJHBvc3QtPmV2ZW50LT5wb2xsID8gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+ICRwb3N0LT5ldmVudC0+cG9sbC0+b3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19tdWx0aXBsZV9jaG9pY2UnID0+ICRwb3N0LT5ldmVudC0+cG9sbC0+aXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZvdGVzJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZvdGVfY291bnRzJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnZvdGVfY291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgIF0gOiBudWxsCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuICRldmVudERhdGE7CiAgICAgICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdNZW1iZXIvRGFzaGJvYXJkJywgWwogICAgICAgICAgICAncG9zdHMnID0+ICRwb3N0cywKICAgICAgICAgICAgJ2V2ZW50cycgPT4gJGV2ZW50cywKICAgICAgICAgICAgJ2NhdGVnb3JpZXMnID0+ICRjYXRlZ29yaWVzLT50b0FycmF5KCksCiAgICAgICAgICAgICdjYXRlZ29yeScgPT4gJGNhdGVnb3J5LAogICAgICAgICAgICAnbG9kZ2UnID0+IFsKICAgICAgICAgICAgICAgICdpZCcgPT4gJGxvZGdlLT5pZCwKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkbG9kZ2UtPm5hbWUsCiAgICAgICAgICAgICAgICAnYWRkcmVzcycgPT4gJGxvZGdlLT5hZGRyZXNzLAogICAgICAgICAgICAgICAgJ2NpdHknID0+ICRsb2RnZS0+Y2l0eSwKICAgICAgICAgICAgICAgICdtZW1iZXJzX2NvdW50JyA9PiAkbG9kZ2UtPm1lbWJlcnNfY291bnQsCiAgICAgICAgICAgICAgICAndW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCcgPT4gJGxvZGdlLT51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50LAogICAgICAgICAgICAgICAgJ3VwY29taW5nX2V2ZW50c19jb3VudCcgPT4gJHVwY29taW5nRXZlbnRzQ291bnQKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ3Vuc2Vlbl9wb3N0c19jb3VudCcgPT4gJHVuc2VlblBvc3RzQ291bnQsCiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRNb3JlKFJlcXVlc3QgJHJlcXVlc3QpCiAgICB7CiAgICAgICAgJHVzZXIgPSAkcmVxdWVzdC0+dXNlcigpOwogICAgICAgICRtZW1iZXIgPSBMb2RnZU1lbWJlcjo6d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpCiAgICAgICAgICAgIC0+d2l0aChbJ2xvZGdlJ10pCiAgICAgICAgICAgIC0+Zmlyc3QoKTsKCiAgICAgICAgaWYgKCEkbWVtYmVyKSB7CiAgICAgICAgICAgIFxMb2c6Ondhcm5pbmcoJ05vIG1lbWJlciBmb3VuZCBmb3IgdXNlcicsIFsndXNlcl9pZCcgPT4gJHVzZXItPmlkXSk7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgICAgICdkYXRhJyA9PiBbXSwKICAgICAgICAgICAgICAgICdjdXJyZW50X3BhZ2UnID0+IDEsCiAgICAgICAgICAgICAgICAnbGFzdF9wYWdlJyA9PiAxCiAgICAgICAgICAgIF0pOwogICAgICAgIH0KCiAgICAgICAgJGxvZGdlID0gJG1lbWJlci0+bG9kZ2U7CiAgICAgICAgJGNhdGVnb3J5ID0gJHJlcXVlc3QtPmlucHV0KCdjYXRlZ29yeScsICdjb211bmljYXJpJyk7CiAgICAgICAgJHBhZ2UgPSAkcmVxdWVzdC0+aW5wdXQoJ3BhZ2UnLCAxKTsKICAgICAgICAKICAgICAgICAkcG9zdHMgPSBQb3N0Ojp3aXRoKFsnY2F0ZWdvcnknLCAnYXV0aG9yLmxvZGdlX21lbWJlci5sb2RnZURpZ25pdHknLCAncmVhY3Rpb25zJywgJ2NvbW1lbnRzLmF1dGhvcicsICdldmVudC5wb2xsLnZvdGVzJywgJ3BvbGwudm90ZXMnXSkKICAgICAgICAgICAgLT53aGVuKCRjYXRlZ29yeSAhPT0gJ2FsbCcsIGZ1bmN0aW9uICgkcXVlcnkpIHVzZSAoJGNhdGVnb3J5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHF1ZXJ5LT53aGVyZUhhcygnY2F0ZWdvcnknLCBmdW5jdGlvbiAoJHEpIHVzZSAoJGNhdGVnb3J5KSB7CiAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCdzbHVnJywgJGNhdGVnb3J5KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KQogICAgICAgICAgICAtPndoZXJlKCdsb2RnZV9pZCcsICRsb2RnZS0+aWQpCiAgICAgICAgICAgIC0+bGF0ZXN0KCkKICAgICAgICAgICAgLT5wYWdpbmF0ZSgxMCwgWycqJ10sICdwYWdlJywgJHBhZ2UpCiAgICAgICAgICAgIC0+dGhyb3VnaChmdW5jdGlvbiAoJHBvc3QpIHsKICAgICAgICAgICAgICAgIGlmICgkcG9zdC0+ZXZlbnQgJiYgJHBvc3QtPmV2ZW50LT5wb2xsKSB7CiAgICAgICAgICAgICAgICAgICAgJHBvc3QtPmV2ZW50LT5wb2xsLT5hcHBlbmQoJ3ZvdGVfY291bnRzJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJHBvc3QtPnBvbGwpIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+cG9sbC0+YXBwZW5kKCd2b3RlX2NvdW50cycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gQWRkIGRpZ25pdHkgbmFtZSB0byBhdXRob3IKICAgICAgICAgICAgICAgIGlmICgkcG9zdC0+YXV0aG9yICYmICRwb3N0LT5hdXRob3ItPmxvZGdlX21lbWJlciAmJiAkcG9zdC0+YXV0aG9yLT5sb2RnZV9tZW1iZXItPmxvZGdlRGlnbml0eSkgewogICAgICAgICAgICAgICAgICAgICRwb3N0LT5hdXRob3ItPmRpZ25pdHlfbmFtZSA9ICRwb3N0LT5hdXRob3ItPmxvZGdlX21lbWJlci0+bG9kZ2VEaWduaXR5LT5uYW1lOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+YXV0aG9yLT5kaWduaXR5X25hbWUgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICRwb3N0OwogICAgICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oWwogICAgICAgICAgICAnZGF0YScgPT4gJHBvc3RzLT5pdGVtcygpLAogICAgICAgICAgICAnY3VycmVudF9wYWdlJyA9PiAkcG9zdHMtPmN1cnJlbnRQYWdlKCksCiAgICAgICAgICAgICdsYXN0X3BhZ2UnID0+ICRwb3N0cy0+bGFzdFBhZ2UoKQogICAgICAgIF0pOwogICAgfQp9IAAAAAAAAAAAdCQAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAA/hsAAAAAAAAEHAAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "app/Http/Controllers/Member/EventController.php",
			"settings":
			{
				"buffer_size": 24738,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"left_delete",
					null,
					"AQAAABkCAAAAAAAAGQIAAAAAAAByAAAAICAgICAgICBcTG9nOjppbmZvKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBTdGFydGluZycsIFsKICAgICAgICAgICAgJ3JlcXVlc3RfZGF0YScgPT4gJHJlcXVlc3QtPmFsbCgpCiAgICAgICAgXSk7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACLAgAAAAAAABkCAAAAAAAAAAAAAAAA8L8"
				],
				[
					5,
					2,
					"left_delete",
					null,
					"AgAAABkCAAAAAAAAGQIAAAAAAAABAAAAChgCAAAAAAAAGAIAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAaAgAAAAAAABoCAAAAAAAAAAAAAAAAAAA"
				],
				[
					11,
					3,
					"left_delete",
					null,
					"AwAAAJQFAAAAAAAAlAUAAAAAAAB4AAAAICAgICAgICBcTG9nOjppbmZvKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBWYWxpZGF0aW9uIHBhc3NlZCcsIFsKICAgICAgICAgICAgJ3ZhbGlkYXRlZF9kYXRhJyA9PiAkdmFsaWRhdGVkCiAgICAgICAgXSk7kwUAAAAAAACTBQAAAAAAAAEAAAAKkgUAAAAAAACSBQAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAMBgAAAAAAAJQFAAAAAAAAAAAAAAAA8L8"
				],
				[
					14,
					2,
					"left_delete",
					null,
					"AgAAAOAFAAAAAAAA4AUAAAAAAACFAQAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gVXNlciBhbmQgTG9kZ2VNZW1iZXInLCBbCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQsCiAgICAgICAgICAgICd1c2VyJyA9PiAkdXNlci0+dG9BcnJheSgpLAogICAgICAgICAgICAnbG9kZ2VfbWVtYmVyX2lkJyA9PiAkbG9kZ2VNZW1iZXIgPyAkbG9kZ2VNZW1iZXItPmlkIDogbnVsbCwKICAgICAgICAgICAgJ2xvZGdlX21lbWJlcicgPT4gJGxvZGdlTWVtYmVyID8gJGxvZGdlTWVtYmVyLT50b0FycmF5KCkgOiBudWxsLAogICAgICAgICAgICAnbG9kZ2VfbWVtYmVyX3VzZXJfaWQnID0+ICRsb2RnZU1lbWJlciA/ICRsb2RnZU1lbWJlci0+dXNlcl9pZCA6IG51bGwKICAgICAgICBdKTvfBQAAAAAAAN8FAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlBwAAAAAAAOAFAAAAAAAAAAAAAAAA8L8"
				],
				[
					17,
					2,
					"left_delete",
					null,
					"AgAAAAQIAAAAAAAABAgAAAAAAAB5AAAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gQ3JlYXRpbmcgcG9zdCB3aXRoIGRhdGEnLCBbCiAgICAgICAgICAgICdwb3N0X2RhdGEnID0+ICRwb3N0RGF0YQogICAgICAgIF0pOwMIAAAAAAAAAwgAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB9CAAAAAAAAAQIAAAAAAAAAAAAAAAA8L8"
				],
				[
					20,
					2,
					"left_delete",
					null,
					"AgAAAC4IAAAAAAAALggAAAAAAAD0AAAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gUG9zdCBjcmVhdGVkJywgWwogICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAncG9zdCcgPT4gJHBvc3QtPnRvQXJyYXkoKSwKICAgICAgICAgICAgJ3Bvc3RfYXV0aG9yX2lkJyA9PiAkcG9zdC0+YXV0aG9yX2lkLAogICAgICAgICAgICAncG9zdF91c2VyX2lkJyA9PiAkcG9zdC0+dXNlcl9pZAogICAgICAgIF0pOy0IAAAAAAAALQgAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAiCQAAAAAAAC4IAAAAAAAAAAAAAAAA8L8"
				],
				[
					23,
					2,
					"left_delete",
					null,
					"AgAAAIMIAAAAAAAAgwgAAAAAAABIAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gSGFuZGxpbmcgZmlsZSB1cGxvYWRzJyk7gggAAAAAAACCCAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADLCAAAAAAAAIMIAAAAAAAAAAAAAAAA8L8"
				],
				[
					27,
					2,
					"left_delete",
					null,
					"AgAAAPALAAAAAAAA8AsAAAAAAAB8AAAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gQ3JlYXRpbmcgZXZlbnQgd2l0aCBkYXRhJywgWwogICAgICAgICAgICAnZXZlbnRfZGF0YScgPT4gJGV2ZW50RGF0YQogICAgICAgIF0pO+8LAAAAAAAA7wsAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABsDAAAAAAAAPALAAAAAAAAAAAAAAAA8L8"
				],
				[
					30,
					2,
					"left_delete",
					null,
					"AgAAACYMAAAAAAAAJgwAAAAAAACZAAAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gRXZlbnQgY3JlYXRlZCcsIFsKICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAnZXZlbnQnID0+ICRldmVudC0+dG9BcnJheSgpCiAgICAgICAgXSk7JQwAAAAAAAAlDAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC/DAAAAAAAACYMAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					1,
					"left_delete",
					null,
					"AQAAAG0MAAAAAAAAbQwAAAAAAABAAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gQ3JlYXRpbmcgcG9sbCcpOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACtDAAAAAAAAG0MAAAAAAAAAAAAAAAA8L8"
				],
				[
					34,
					1,
					"left_delete",
					null,
					"AQAAAGwMAAAAAAAAbAwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtDAAAAAAAAG0MAAAAAAAAAAAAAAAA8L8"
				],
				[
					37,
					1,
					"left_delete",
					null,
					"AQAAAFMNAAAAAAAAUw0AAAAAAACGAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIENyZWF0aW5nIHBvbGwgd2l0aCBkYXRhJywgWwogICAgICAgICAgICAgICAgJ3BvbGxfZGF0YScgPT4gJHBvbGxEYXRhCiAgICAgICAgICAgIF0pOwo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADZDQAAAAAAAFMNAAAAAAAAAAAAAAAA8L8"
				],
				[
					40,
					2,
					"left_delete",
					null,
					"AgAAAOwNAAAAAAAA7A0AAAAAAACyAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIFBvbGwgY3JlYXRlZCcsIFsKICAgICAgICAgICAgICAgICdldmVudF9pZCcgPT4gJGV2ZW50LT5pZCwKICAgICAgICAgICAgICAgICdwb2xsX2RhdGEnID0+ICRldmVudC0+cG9sbC0+dG9BcnJheSgpCiAgICAgICAgICAgIF0pO+sNAAAAAAAA6w0AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeDgAAAAAAAOwNAAAAAAAAAAAAAAAA8L8"
				],
				[
					43,
					2,
					"left_delete",
					null,
					"AgAAACoOAAAAAAAAKg4AAAAAAAAiAQAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIEJyb2FkY2FzdGluZyBwb2xsIGNyZWF0aW9uJywgWwogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ2NoYW5uZWwnID0+ICdwb3N0cycsCiAgICAgICAgICAgICAgICAgICAgJ2V2ZW50JyA9PiAnUG9zdFBvbGxDcmVhdGVkJywKICAgICAgICAgICAgICAgICAgICAncG9zdF9kYXRhJyA9PiAkcG9zdC0+dG9BcnJheSgpCiAgICAgICAgICAgICAgICBdKTspDgAAAAAAACkOAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMDwAAAAAAACoOAAAAAAAAAAAAAAAA8L8"
				],
				[
					45,
					1,
					"left_delete",
					null,
					"AQAAACkOAAAAAAAAKQ4AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAqDgAAAAAAACoOAAAAAAAAAAAAAAAAYUA"
				],
				[
					48,
					2,
					"left_delete",
					null,
					"AgAAAG0OAAAAAAAAbQ4AAAAAAACaAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBQb2xsIGNyZWF0aW9uIGJyb2FkY2FzdCBzdWNjZXNzZnVsJywgWwogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgICAgIF0pO2wOAAAAAAAAbA4AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAHDwAAAAAAAG0OAAAAAAAAAAAAAAAA8L8"
				],
				[
					51,
					2,
					"left_delete",
					null,
					"AgAAAKUSAAAAAAAApRIAAAAAAADjAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBVbnJlYWRQb3N0c0NvdW50VXBkYXRlZCBicm9hZGNhc3Qgc3VjY2Vzc2Z1bCcsIFsKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICd1bnNlZW5fcG9zdHNfY291bnQnID0+ICR1bnNlZW5Qb3N0c0NvdW50CiAgICAgICAgICAgICAgICBdKTukEgAAAAAAAKQSAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACIEwAAAAAAAKUSAAAAAAAAAAAAAAAA8L8"
				],
				[
					56,
					2,
					"left_delete",
					null,
					"AgAAABsVAAAAAAAAGxUAAAAAAAD/AAAAICAgICAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gQnJvYWRjYXN0aW5nIGV2ZW50JywgWwogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICdjaGFubmVsJyA9PiAncG9zdHMnLAogICAgICAgICAgICAgICAgJ2V2ZW50JyA9PiAnRXZlbnRDcmVhdGVkJywKICAgICAgICAgICAgICAgICdwb3N0X2RhdGEnID0+ICRwb3N0LT50b0FycmF5KCkKICAgICAgICAgICAgXSk7GhUAAAAAAAAaFQAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAaFgAAAAAAABsVAAAAAAAAAAAAAAAA8L8"
				],
				[
					58,
					1,
					"left_delete",
					null,
					"AQAAABoVAAAAAAAAGhUAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAbFQAAAAAAABsVAAAAAAAAAAAAAAAAWkA"
				],
				[
					61,
					1,
					"left_delete",
					null,
					"AQAAAFcVAAAAAAAAVxUAAAAAAACBAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIEJyb2FkY2FzdCBzdWNjZXNzZnVsJywgWwogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZAogICAgICAgICAgICBdKTsK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADYFQAAAAAAAFcVAAAAAAAAAAAAAAAA8L8"
				],
				[
					65,
					2,
					"left_delete",
					null,
					"AgAAADsZAAAAAAAAOxkAAAAAAADTAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIFVucmVhZFBvc3RzQ291bnRVcGRhdGVkIGJyb2FkY2FzdCBzdWNjZXNzZnVsJywgWwogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICd1bnNlZW5fcG9zdHNfY291bnQnID0+ICR1bnNlZW5Qb3N0c0NvdW50CiAgICAgICAgICAgIF0pOzoZAAAAAAAAOhkAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAOGgAAAAAAADsZAAAAAAAAAAAAAAAA8L8"
				],
				[
					70,
					2,
					"left_delete",
					null,
					"AgAAAKEaAAAAAAAAoRoAAAAAAABRAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gU2VuZGluZyBpbW1lZGlhdGUgbm90aWZpY2F0aW9uJyk7oBoAAAAAAACgGgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADyGgAAAAAAAKEaAAAAAAAAAAAAAAAA8L8"
				],
				[
					73,
					1,
					"left_delete",
					null,
					"AQAAAOQaAAAAAAAA5BoAAAAAAABHAAAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHN0b3JlIC0gQ29tcGxldGVkIHN1Y2Nlc3NmdWxseScpOwo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAArGwAAAAAAAOQaAAAAAAAAAAAAAAAA8L8"
				],
				[
					78,
					1,
					"left_delete",
					null,
					"AQAAAHIbAAAAAAAAchsAAAAAAACmAAAAICAgICAgICBcTG9nOjppbmZvKCdTZW5kaW5nIGV2ZW50IG5vdGlmaWNhdGlvbicsIFsKICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAndHlwZScgPT4gJHR5cGUsCiAgICAgICAgICAgICd0aXRsZScgPT4gJGV2ZW50LT50aXRsZQogICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAYHAAAAAAAAHIbAAAAAAAAAAAAAAAA8L8"
				],
				[
					80,
					2,
					"left_delete",
					null,
					"AgAAAHIbAAAAAAAAchsAAAAAAAABAAAACnEbAAAAAAAAcRsAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABzGwAAAAAAAHMbAAAAAAAAAAAAAAAAAAA"
				],
				[
					84,
					3,
					"left_delete",
					null,
					"AwAAAHkcAAAAAAAAeRwAAAAAAACkAAAAICAgICAgICBcTG9nOjppbmZvKCdGb3VuZCBtZW1iZXJzIHRvIG5vdGlmeScsIFsKICAgICAgICAgICAgJ2NvdW50JyA9PiAkbWVtYmVycy0+Y291bnQoKSwKICAgICAgICAgICAgJ21lbWJlcnMnID0+ICRtZW1iZXJzLT5wbHVjaygndXNlci5pZCcpLT50b0FycmF5KCkKICAgICAgICBdKTt4HAAAAAAAAHgcAAAAAAAAAQAAAAp3HAAAAAAAAHccAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAdHQAAAAAAAHkcAAAAAAAAAAAAAAAA8L8"
				],
				[
					88,
					1,
					"left_delete",
					null,
					"AQAAAMwdAAAAAAAAzB0AAAAAAADEAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1NlbmRpbmcgRkNNIG5vdGlmaWNhdGlvbiB0byB1c2VyJywgWwogICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAnZmNtX3Rva2VuJyA9PiAkbWVtYmVyLT51c2VyLT5mY21fdG9rZW4KICAgICAgICAgICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACQHgAAAAAAAMwdAAAAAAAAAAAAAAAA8L8"
				],
				[
					90,
					2,
					"left_delete",
					null,
					"AgAAAMwdAAAAAAAAzB0AAAAAAAABAAAACssdAAAAAAAAyx0AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADNHQAAAAAAAM0dAAAAAAAAAAAAAAAAAAA"
				],
				[
					95,
					2,
					"left_delete",
					null,
					"AgAAAOMfAAAAAAAA4x8AAAAAAACpAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdGQ00gbm90aWZpY2F0aW9uIHJlc3VsdCcsIFsKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICRyZXN1bHQKICAgICAgICAgICAgICAgIF0pO+IfAAAAAAAA4h8AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMIAAAAAAAAOMfAAAAAAAAAAAAAAAA8L8"
				],
				[
					98,
					1,
					"left_delete",
					null,
					"AQAAAHcgAAAAAAAAdyAAAAAAAAASAQAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0F0dGVtcHRpbmcgdG8gc2VuZCBlbWFpbCBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJG1lbWJlci0+dXNlci0+ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgJ2VtYWlsX25vdGlmaWNhdGlvbnMnID0+ICRtZW1iZXItPnVzZXItPmVtYWlsX25vdGlmaWNhdGlvbnMKICAgICAgICAgICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACJIQAAAAAAAHcgAAAAAAAAAAAAAAAA8L8"
				],
				[
					100,
					2,
					"left_delete",
					null,
					"AgAAAHcgAAAAAAAAdyAAAAAAAAABAAAACnYgAAAAAAAAdiAAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB4IAAAAAAAAHggAAAAAAAAAAAAAAAAAAA"
				],
				[
					103,
					7,
					"left_delete",
					null,
					"BwAAADghAAAAAAAAOCEAAAAAAAAGAQAAICAgICAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdFbWFpbCBub3RpZmljYXRpb24gc2VudCBzdWNjZXNzZnVsbHknLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAgICAgJ25vdGlmaWNhdGlvbl90eXBlJyA9PiAkdHlwZQogICAgICAgICAgICAgICAgICAgIF0pOzchAAAAAAAANyEAAAAAAAABAAAACjMhAAAAAAAAMyEAAAAAAAAEAAAAICAgIC8hAAAAAAAALyEAAAAAAAAEAAAAICAgICshAAAAAAAAKyEAAAAAAAAEAAAAICAgICchAAAAAAAAJyEAAAAAAAAEAAAAICAgICMhAAAAAAAAIyEAAAAAAAAEAAAAICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA+IgAAAAAAADghAAAAAAAAAAAAAAAA8L8"
				],
				[
					104,
					1,
					"left_delete",
					null,
					"AQAAACIhAAAAAAAAIiEAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAjIQAAAAAAACMhAAAAAAAAAAAAAAAA8L8"
				],
				[
					109,
					1,
					"left_delete",
					null,
					"AQAAAKsiAAAAAAAAqyIAAAAAAABAAQAAIGVsc2UgewogICAgICAgICAgICAgICAgXExvZzo6aW5mbygnU2tpcHBpbmcgZW1haWwgbm90aWZpY2F0aW9uIC0gdXNlciBoYXMgZGlzYWJsZWQgbm90aWZpY2F0aW9ucycsIFsKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAnZW1haWxfbm90aWZpY2F0aW9ucycgPT4gJG1lbWJlci0+dXNlci0+ZW1haWxfbm90aWZpY2F0aW9ucwogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrIwAAAAAAAKsiAAAAAAAAAAAAAAAA8L8"
				],
				[
					113,
					1,
					"left_delete",
					null,
					"AQAAAFMlAAAAAAAAUyUAAAAAAACcAAAAICAgICAgICBcTG9nOjppbmZvKCdQcmVwYXJpbmcgRkNNIG5vdGlmaWNhdGlvbicsIFsKICAgICAgICAgICAgJ3Rva2VuJyA9PiAkdG9rZW4sCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAkbWVzc2FnZSwKICAgICAgICAgICAgJ2RhdGEnID0+ICRkYXRhCiAgICAgICAgXSk7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADvJQAAAAAAAFMlAAAAAAAAAAAAAAAA8L8"
				],
				[
					115,
					2,
					"left_delete",
					null,
					"AgAAAFMlAAAAAAAAUyUAAAAAAAABAAAAClIlAAAAAAAAUiUAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABUJQAAAAAAAFQlAAAAAAAAAAAAAAAAAAA"
				],
				[
					118,
					2,
					"left_delete",
					null,
					"AgAAAAEmAAAAAAAAASYAAAAAAADHAAAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdGQ00gQ29uZmlndXJhdGlvbicsIFsKICAgICAgICAgICAgJ3Byb2plY3RfaWQnID0+ICRwcm9qZWN0SWQsCiAgICAgICAgICAgICdjbGllbnRfZW1haWwnID0+ICRjbGllbnRFbWFpbCwKICAgICAgICAgICAgJ2hhc19wcml2YXRlX2tleScgPT4gIWVtcHR5KCRwcml2YXRlS2V5KQogICAgICAgIF0pOwAmAAAAAAAAACYAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIJgAAAAAAAAEmAAAAAAAAAAAAAAAA8L8"
				],
				[
					122,
					2,
					"left_delete",
					null,
					"AgAAAFMqAAAAAAAAUyoAAAAAAACbAAAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdQcml2YXRlIGtleSBmb3JtYXQnLCBbCiAgICAgICAgICAgICdrZXknID0+IHN1YnN0cigkcHJpdmF0ZUtleSwgMCwgNTApIC4gJy4uLicgLy8gTG9nIGZpcnN0IDUwIGNoYXJzIGZvciBkZWJ1Z2dpbmcKICAgICAgICBdKTtSKgAAAAAAAFIqAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADuKgAAAAAAAFMqAAAAAAAAAAAAAAAA8L8"
				],
				[
					128,
					2,
					"left_delete",
					null,
					"AgAAAI01AAAAAAAAjTUAAAAAAAAkAQAACiAgICAgICAgXExvZzo6aW5mbygnRkNNIG1lc3NhZ2UgcmVzcG9uc2UnLCBbCiAgICAgICAgICAgICdzdWNjZXNzJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5zdWNjZXNzZnVsKCksCiAgICAgICAgICAgICdzdGF0dXMnID0+ICRtZXNzYWdlUmVzcG9uc2UtPnN0YXR1cygpLAogICAgICAgICAgICAncmVzcG9uc2UnID0+ICRtZXNzYWdlUmVzcG9uc2UtPmpzb24oKSwKICAgICAgICAgICAgJ2VuZHBvaW50JyA9PiAkZmNtRW5kcG9pbnQsCiAgICAgICAgICAgICdkYXRhJyA9PiAkc3RyaW5nRGF0YQogICAgICAgIF0pO4w1AAAAAAAAjDUAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACxNgAAAAAAAI01AAAAAAAAAAAAAAAA8L8"
				],
				[
					132,
					1,
					"left_delete",
					null,
					"AQAAAGY8AAAAAAAAZjwAAAAAAAAAAQAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50IGRhdGEgZnJvbSBkYXRhYmFzZTonLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+ICRwb3N0LT5ldmVudC0+dG9BcnJheSgpLAogICAgICAgICAgICAgICAgICAgICdyYXdfZW5kX2RhdGUnID0+ICRwb3N0LT5ldmVudC0+Z2V0UmF3T3JpZ2luYWwoJ2VuZF9kYXRlJykKICAgICAgICAgICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABmPQAAAAAAAGY8AAAAAAAAAAAAAAAA8L8"
				],
				[
					134,
					2,
					"left_delete",
					null,
					"AgAAAGY8AAAAAAAAZjwAAAAAAAABAAAACmU8AAAAAAAAZTwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABnPAAAAAAAAGc8AAAAAAAAAAAAAAAAAAA"
				],
				[
					138,
					2,
					"left_delete",
					null,
					"AgAAAA5DAAAAAAAADkMAAAAAAACyAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdFdmVudCBkYXRhIGJlaW5nIHNlbnQgdG8gZnJvbnRlbmQ6JywgWwogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ2V2ZW50X2RhdGEnID0+ICRldmVudERhdGEKICAgICAgICAgICAgICAgIF0pOw1DAAAAAAAADUMAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADAQwAAAAAAAA5DAAAAAAAAAAAAAAAA8L8"
				],
				[
					142,
					2,
					"left_delete",
					null,
					"AgAAAF1GAAAAAAAAXUYAAAAAAAByAQAAICAgICAgICBcTG9nOjppbmZvKCdFdmVudCB1cGRhdGUgcmVxdWVzdCByZWNlaXZlZCcsIFsKICAgICAgICAgICAgJ3JlcXVlc3RfZGF0YScgPT4gJHJlcXVlc3QtPmFsbCgpLAogICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAncG9zdF9kYXRhJyA9PiAkcG9zdC0+dG9BcnJheSgpLAogICAgICAgICAgICAnZXZlbnRfZGF0YScgPT4gJHBvc3QtPmV2ZW50ID8gJHBvc3QtPmV2ZW50LT50b0FycmF5KCkgOiBudWxsLAogICAgICAgICAgICAncG9sbF9kYXRhJyA9PiAkcG9zdC0+ZXZlbnQgJiYgJHBvc3QtPmV2ZW50LT5wb2xsID8gJHBvc3QtPmV2ZW50LT5wb2xsLT50b0FycmF5KCkgOiBudWxsCiAgICAgICAgXSk7ClxGAAAAAAAAXEYAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADPRwAAAAAAAF1GAAAAAAAAAAAAAAAA8L8"
				],
				[
					146,
					2,
					"left_delete",
					null,
					"AgAAAIBKAAAAAAAAgEoAAAAAAACNAAAACiAgICAgICAgXExvZzo6aW5mbygnUG9zdCB1cGRhdGVkJywgWwogICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAndXBkYXRlZF9kYXRhJyA9PiAkcG9zdC0+ZnJlc2goKS0+dG9BcnJheSgpCiAgICAgICAgXSk7f0oAAAAAAAB/SgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANSwAAAAAAAIBKAAAAAAAAAAAAAAAA8L8"
				],
				[
					149,
					1,
					"left_delete",
					null,
					"AQAAAPpKAAAAAAAA+koAAAAAAADbAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnUmVtb3ZpbmcgZXhpc3RpbmcgZmlsZScsIFsKICAgICAgICAgICAgICAgICdjdXJyZW50X2ZpbGVfcGF0aCcgPT4gJHBvc3QtPmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICdjdXJyZW50X2ZpbGVfbmFtZScgPT4gJHBvc3QtPmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgXSk7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADVSwAAAAAAAPpKAAAAAAAAAAAAAAAA8L8"
				],
				[
					151,
					2,
					"left_delete",
					null,
					"AgAAAPpKAAAAAAAA+koAAAAAAAABAAAACvlKAAAAAAAA+UoAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD7SgAAAAAAAPtKAAAAAAAAAAAAAAAAAAA"
				],
				[
					154,
					2,
					"left_delete",
					null,
					"AgAAAJ9LAAAAAAAAn0sAAAAAAACkAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0ZpbGUgZGVsZXRlZCBmcm9tIHN0b3JhZ2UnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3BhdGgnID0+ICRvbGRGaWxlUGF0aCwKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkCiAgICAgICAgICAgICAgICBdKTueSwAAAAAAAJ5LAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABDTAAAAAAAAJ9LAAAAAAAAAAAAAAAA8L8"
				],
				[
					158,
					1,
					"left_delete",
					null,
					"AQAAALNMAAAAAAAAs0wAAAAAAAClAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnTmV3IGZpbGVzIHJlY2VpdmVkJywgWwogICAgICAgICAgICAgICAgJ2ZpbGVfY291bnQnID0+IGNvdW50KCRyZXF1ZXN0LT5maWxlKCdmaWxlcycpKSwKICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgXSk7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABYTQAAAAAAALNMAAAAAAAAAAAAAAAAAAA"
				],
				[
					160,
					2,
					"left_delete",
					null,
					"AgAAALNMAAAAAAAAs0wAAAAAAAABAAAACrJMAAAAAAAAskwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC0TAAAAAAAALRMAAAAAAAAAAAAAAAAAAA"
				],
				[
					163,
					2,
					"left_delete",
					null,
					"AgAAANpOAAAAAAAA2k4AAAAAAACTAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ05ldyBmaWxlIHN0b3JlZCcsIFsKICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZAogICAgICAgICAgICAgICAgXSk72U4AAAAAAADZTgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtTwAAAAAAANpOAAAAAAAAAAAAAAAA8L8"
				],
				[
					166,
					2,
					"left_delete",
					null,
					"AgAAAK5QAAAAAAAArlAAAAAAAACRAAAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnQgdXBkYXRlZCcsIFsKICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAndXBkYXRlZF9kYXRhJyA9PiAkZXZlbnQtPmZyZXNoKCktPnRvQXJyYXkoKQogICAgICAgIF0pO61QAAAAAAAArVAAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA/UQAAAAAAAK5QAAAAAAAAAAAAAAAA8L8"
				],
				[
					170,
					2,
					"left_delete",
					null,
					"AgAAAE9VAAAAAAAAT1UAAAAAAABMAQAAICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0NvbnZlcnRpbmcgbXVsdGlwbGUgY2hvaWNlIHZvdGUgdG8gc2luZ2xlIGNob2ljZScsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndm90ZV9pZCcgPT4gJHZvdGUtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmlnaW5hbF9vcHRpb25zJyA9PiAkdm90ZS0+c2VsZWN0ZWRfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VsZWN0ZWRfb3B0aW9uJyA9PiAkc2VsZWN0ZWRPcHRpb25zWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTtOVQAAAAAAAE5VAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACbVgAAAAAAAE9VAAAAAAAAAAAAAAAA8L8"
				],
				[
					173,
					2,
					"left_delete",
					null,
					"AgAAAMNXAAAAAAAAw1cAAAAAAAABAQAACiAgICAgICAgICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1ZvdGUgdXBkYXRlZCcsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2b3RlX2lkJyA9PiAkdm90ZS0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2xkX29wdGlvbnMnID0+ICRzZWxlY3RlZE9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3X29wdGlvbnMnID0+ICR1cGRhdGVkT3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICBdKTvCVwAAAAAAAMJXAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADEWAAAAAAAAMNXAAAAAAAAAAAAAAAA8L8"
				],
				[
					176,
					2,
					"left_delete",
					null,
					"AgAAANlXAAAAAAAA2VcAAAAAAADpAAAACiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnVm90ZXMgdXBkYXRlZCBzdWNjZXNzZnVsbHknLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd0b3RhbF92b3RlcycgPT4gJGV4aXN0aW5nVm90ZXMtPmNvdW50KCksCiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VkX3RvX3NpbmdsZV9jaG9pY2UnID0+ICRpc0NoYW5naW5nVG9TaW5nbGVDaG9pY2UKICAgICAgICAgICAgICAgICAgICBdKTvYVwAAAAAAANhXAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADCWAAAAAAAANlXAAAAAAAAAAAAAAAA8L8"
				],
				[
					179,
					2,
					"left_delete",
					null,
					"AgAAAIlYAAAAAAAAiVgAAAAAAACqAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdQb2xsIHVwZGF0ZWQnLCBbCiAgICAgICAgICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAgICAgICAgICdwb2xsX2RhdGEnID0+ICRldmVudC0+cG9sbC0+dG9BcnJheSgpCiAgICAgICAgICAgICAgICBdKTuIWAAAAAAAAIhYAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAzWQAAAAAAAIlYAAAAAAAAAAAAAAAA8L8"
				],
				[
					182,
					2,
					"left_delete",
					null,
					"AgAAAGFaAAAAAAAAYVoAAAAAAACuAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdOZXcgcG9sbCBjcmVhdGVkJywgWwogICAgICAgICAgICAgICAgICAgICdldmVudF9pZCcgPT4gJGV2ZW50LT5pZCwKICAgICAgICAgICAgICAgICAgICAncG9sbF9kYXRhJyA9PiAkZXZlbnQtPnBvbGwtPnRvQXJyYXkoKQogICAgICAgICAgICAgICAgXSk7YFoAAAAAAABgWgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAPWwAAAAAAAGFaAAAAAAAAAAAAAAAA8L8"
				],
				[
					185,
					2,
					"left_delete",
					null,
					"AgAAAO1aAAAAAAAA7VoAAAAAAABtAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1BvbGwgcmVtb3ZlZCcsIFsKICAgICAgICAgICAgICAgICAgICAnZXZlbnRfaWQnID0+ICRldmVudC0+aWQKICAgICAgICAgICAgICAgIF0pO+xaAAAAAAAA7FoAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABaWwAAAAAAAO1aAAAAAAAAAAAAAAAA8L8"
				],
				[
					189,
					2,
					"left_delete",
					null,
					"AgAAAO1dAAAAAAAA7V0AAAAAAAAEAQAACiAgICAgICAgXExvZzo6aW5mbygnRXZlbnQgdXBkYXRlIGNvbXBsZXRlZCcsIFsKICAgICAgICAgICAgJ2ZpbmFsX3Bvc3RfZGF0YScgPT4gJHBvc3QtPnRvQXJyYXkoKSwKICAgICAgICAgICAgJ2ZpbmFsX2V2ZW50X2RhdGEnID0+ICRwb3N0LT5ldmVudC0+dG9BcnJheSgpLAogICAgICAgICAgICAnZmluYWxfcG9sbF9kYXRhJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwgPyAkcG9zdC0+ZXZlbnQtPnBvbGwtPnRvQXJyYXkoKSA6IG51bGwKICAgICAgICBdKTvsXQAAAAAAAOxdAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADxXgAAAAAAAO1dAAAAAAAAAAAAAAAA8L8"
				],
				[
					192,
					1,
					"left_delete",
					null,
					"AQAAACJeAAAAAAAAIl4AAAAAAAAHAQAAICAgICAgICAgICAgXExvZzo6aW5mbygnRXZlbnRDb250cm9sbGVyQHVwZGF0ZSAtIEJyb2FkY2FzdGluZyBldmVudCB1cGRhdGUnLCBbCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgJ2NoYW5uZWwnID0+ICdwb3N0cycsCiAgICAgICAgICAgICAgICAnZXZlbnQnID0+ICdFdmVudFVwZGF0ZWQnLAogICAgICAgICAgICAgICAgJ3Bvc3RfZGF0YScgPT4gJHBvc3QtPnRvQXJyYXkoKQogICAgICAgICAgICBdKTs",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAApXwAAAAAAACJeAAAAAAAAAAAAAAAA8L8"
				],
				[
					194,
					2,
					"left_delete",
					null,
					"AgAAACJeAAAAAAAAIl4AAAAAAAABAAAACiFeAAAAAAAAIV4AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAjXgAAAAAAACNeAAAAAAAAAAAAAAAAAAA"
				],
				[
					197,
					2,
					"left_delete",
					null,
					"AgAAAF5eAAAAAAAAXl4AAAAAAACBAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ0V2ZW50Q29udHJvbGxlckB1cGRhdGUgLSBCcm9hZGNhc3Qgc3VjY2Vzc2Z1bCcsIFsKICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgXSk7XV4AAAAAAABdXgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADfXgAAAAAAAF5eAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAARYAAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xNZW1iZXI7Cgp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsKdXNlIElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0Owp1c2UgQXBwXE1vZGVsc1xQb3N0Owp1c2UgQXBwXE1vZGVsc1xQb2xsOwp1c2UgQXBwXE1vZGVsc1xMb2RnZTsKdXNlIEluZXJ0aWFcSW5lcnRpYTsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXEh0dHA7CnVzZSBBcHBcRXZlbnRzXEV2ZW50Q3JlYXRlZDsKdXNlIEFwcFxFdmVudHNcUG9zdFBvbGxDcmVhdGVkOwp1c2UgQXBwXEV2ZW50c1xFdmVudFVwZGF0ZWQ7CnVzZSBBcHBcRXZlbnRzXFVucmVhZFBvc3RzQ291bnRVcGRhdGVkOwp1c2UgQXBwXE5vdGlmaWNhdGlvbnNcRXZlbnROb3RpZmljYXRpb247CnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcRmFjYWRlc1xNYWlsOwoKY2xhc3MgRXZlbnRDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcmUoUmVxdWVzdCAkcmVxdWVzdCkKICAgIHsKICAgICAgICAkdmFsaWRhdGVkID0gJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICdudWxsYWJsZXxzdHJpbmcnLAogICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJ3JlcXVpcmVkfGRhdGUnLAogICAgICAgICAgICAnZW5kX2RhdGUnID0+ICdudWxsYWJsZXxkYXRlfGFmdGVyX29yX2VxdWFsOnN0YXJ0X2RhdGUnLAogICAgICAgICAgICAnbG9jYXRpb24nID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJ3JlcXVpcmVkfGV4aXN0czpwb3N0X2NhdGVnb3JpZXMsaWQnLAogICAgICAgICAgICAnaGFzX3BvbGwnID0+ICdib29sZWFuJywKICAgICAgICAgICAgJ3BvbGxfcXVlc3Rpb24nID0+ICdyZXF1aXJlZF9pZjpoYXNfcG9sbCx0cnVlfG51bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ3BvbGxfb3B0aW9ucycgPT4gJ3JlcXVpcmVkX2lmOmhhc19wb2xsLHRydWV8bnVsbGFibGV8YXJyYXl8bWluOjInLAogICAgICAgICAgICAncG9sbF9vcHRpb25zLionID0+ICdyZXF1aXJlZF9pZjpoYXNfcG9sbCx0cnVlfG51bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2lzX211bHRpcGxlX2Nob2ljZScgPT4gJ2Jvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5X25vdycgPT4gJ2Jvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICdib29sZWFuJywKICAgICAgICAgICAgJ2ZpbGVzLionID0+ICdudWxsYWJsZXxmaWxlfG1pbWVzOnBkZixkb2MsZG9jeCx0eHR8bWF4OjEwMjQwJyAvLyAxME1CIG1heAogICAgICAgIF0pOwoKICAgICAgICAkdXNlciA9IGF1dGgoKS0+dXNlcigpOwogICAgICAgICRsb2RnZU1lbWJlciA9ICR1c2VyLT5sb2RnZV9tZW1iZXI7CgogICAgICAgIGlmICghJGxvZGdlTWVtYmVyKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBObyBsb2RnZSBtZW1iZXIgZm91bmQgZm9yIHVzZXInLCBbCiAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICByZXR1cm4gYmFjaygpLT53aXRoKCdlcnJvcicsICdZb3UgbXVzdCBiZSBhIG1lbWJlciBvZiBhIGxvZGdlIHRvIGNyZWF0ZSBldmVudHMuJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgdGhlIHBvc3QKICAgICAgICAkcG9zdERhdGEgPSBbCiAgICAgICAgICAgICdhdXRob3JfaWQnID0+ICRsb2RnZU1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICR2YWxpZGF0ZWRbJ2Rlc2NyaXB0aW9uJ10gPz8gJycsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJHZhbGlkYXRlZFsnY2F0ZWdvcnlfaWQnXSwKICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkbG9kZ2VNZW1iZXItPmxvZGdlX2lkCiAgICAgICAgXTsKCiAgICAgICAgJHBvc3QgPSBQb3N0OjpjcmVhdGUoJHBvc3REYXRhKTsKCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdXBsb2FkcyBpZiBwcmVzZW50CiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNGaWxlKCdmaWxlcycpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRyZXF1ZXN0LT5maWxlKCdmaWxlcycpIGFzICRmaWxlKSB7CiAgICAgICAgICAgICAgICAkcGF0aCA9ICRmaWxlLT5zdG9yZSgicG9zdHMveyRsb2RnZU1lbWJlci0+bG9kZ2VfaWR9IiwgJ3B1YmxpYycpOwogICAgICAgICAgICAgICAgJHBvc3QtPnVwZGF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGF0aCcgPT4gJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfbmFtZScgPT4gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3R5cGUnID0+ICRmaWxlLT5nZXRDbGllbnRNaW1lVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3NpemUnID0+ICRmaWxlLT5nZXRTaXplKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgdGhlIGV2ZW50CiAgICAgICAgJGV2ZW50RGF0YSA9IFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdmFsaWRhdGVkWyd0aXRsZSddLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICR2YWxpZGF0ZWRbJ2Rlc2NyaXB0aW9uJ10sCiAgICAgICAgICAgICdzdGFydF9kYXRlJyA9PiAkdmFsaWRhdGVkWydzdGFydF9kYXRlJ10sCiAgICAgICAgICAgICdlbmRfZGF0ZScgPT4gJHZhbGlkYXRlZFsnZW5kX2RhdGUnXSwKICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkdmFsaWRhdGVkWydsb2NhdGlvbiddLAogICAgICAgICAgICAnbm90aWZ5X25vdycgPT4gJHZhbGlkYXRlZFsnbm90aWZ5X25vdyddLAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICR2YWxpZGF0ZWRbJ25vdGlmeV8yNGhfYmVmb3JlJ10KICAgICAgICBdOwoKICAgICAgICAkZXZlbnQgPSAkcG9zdC0+ZXZlbnQoKS0+Y3JlYXRlKCRldmVudERhdGEpOwoKICAgICAgICAvLyBDcmVhdGUgcG9sbCBpZiByZXF1ZXN0ZWQKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc19wb2xsKSB7CiAgICAgICAgICAgICRwb2xsRGF0YSA9IFsKICAgICAgICAgICAgICAgICdxdWVzdGlvbicgPT4gJHZhbGlkYXRlZFsncG9sbF9xdWVzdGlvbiddLAogICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+ICR2YWxpZGF0ZWRbJ3BvbGxfb3B0aW9ucyddLAogICAgICAgICAgICAgICAgJ2lzX211bHRpcGxlX2Nob2ljZScgPT4gJHZhbGlkYXRlZFsnaXNfbXVsdGlwbGVfY2hvaWNlJ10KICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICRldmVudC0+cG9sbCgpLT5jcmVhdGUoJHBvbGxEYXRhKTsKCiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIGV2ZW50IG1vZGVsIHRvIGxvYWQgdGhlIG5ldyBwb2xsIHJlbGF0aW9uc2hpcAogICAgICAgICAgICAkZXZlbnQtPnJlZnJlc2goKTsKCiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgcG9sbCBjcmVhdGlvbgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgYnJvYWRjYXN0KG5ldyBQb3N0UG9sbENyZWF0ZWQoJHBvc3QpKS0+dG9PdGhlcnMoKTsKCiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciBhbGwgdXNlcnMgaW4gdGhlIGxvZGdlCiAgICAgICAgICAgICAgICAkdXNlcnMgPSAkcG9zdC0+bG9kZ2UtPnVzZXJzOwogICAgICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyLT5yb2xlID09PSAndWNlbmljJyAmJiAkcG9zdC0+Y2F0ZWdvcnktPnNsdWcgPT09ICdtaWF6YS16aScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkY291bnQgPSBQb3N0Ojp3aGVyZSgnbG9kZ2VfaWQnLCAkcG9zdC0+bG9kZ2VfaWQpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+d2hlcmUoJ2NhdGVnb3J5X2lkJywgJHBvc3QtPmNhdGVnb3J5X2lkKQogICAgICAgICAgICAgICAgICAgICAgICAtPndoZXJlRG9lc250SGF2ZSgndmlld3MnLCBmdW5jdGlvbigkcXVlcnkpIHVzZSAoJHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAtPmNvdW50KCk7CgogICAgICAgICAgICAgICAgICAgICR1bnNlZW5Qb3N0c0NvdW50WyR1c2VyLT5pZF0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICRwb3N0LT5jYXRlZ29yeS0+c2x1ZyA9PiAkY291bnQKICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgdXBkYXRlZCB1bnNlZW4gcG9zdHMgY291bnQKICAgICAgICAgICAgICAgIGJyb2FkY2FzdChuZXcgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQoJHVuc2VlblBvc3RzQ291bnQpKS0+dG9PdGhlcnMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIFBvbGwgY3JlYXRpb24gYnJvYWRjYXN0IGZhaWxlZCcsIFsKICAgICAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBMb2FkIHRoZSBwb3N0IHdpdGggYWxsIHJlbGF0aW9uc2hpcHMKICAgICAgICAkcG9zdC0+bG9hZChbCiAgICAgICAgICAgICdyZWFjdGlvbnMnLAogICAgICAgICAgICAnYXV0aG9yJywKICAgICAgICAgICAgJ2NhdGVnb3J5JywKICAgICAgICAgICAgJ2NvbW1lbnRzLmF1dGhvcicsCiAgICAgICAgICAgICdldmVudC5wb2xsLnZvdGVzJywKICAgICAgICAgICAgJ3BvbGwudm90ZXMnLAogICAgICAgICAgICAndmlld3MnCiAgICAgICAgXSk7CgogICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgbmV3IGV2ZW50CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYnJvYWRjYXN0KG5ldyBFdmVudENyZWF0ZWQoJHBvc3QpKS0+dG9PdGhlcnMoKTsKCiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB1bnNlZW4gcG9zdHMgY291bnQgZm9yIGFsbCB1c2VycyBpbiB0aGUgbG9kZ2UKICAgICAgICAgICAgJHVzZXJzID0gJHBvc3QtPmxvZGdlLT51c2VyczsKICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcikgewogICAgICAgICAgICAgICAgLy8gU2tpcCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICAgICAgICAgICAgICBpZiAoJHVzZXItPnJvbGUgPT09ICd1Y2VuaWMnICYmICRwb3N0LT5jYXRlZ29yeS0+c2x1ZyA9PT0gJ21pYXphLXppJykgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjb3VudCA9IFBvc3Q6OndoZXJlKCdsb2RnZV9pZCcsICRwb3N0LT5sb2RnZV9pZCkKICAgICAgICAgICAgICAgICAgICAtPndoZXJlKCdjYXRlZ29yeV9pZCcsICRwb3N0LT5jYXRlZ29yeV9pZCkKICAgICAgICAgICAgICAgICAgICAtPndoZXJlRG9lc250SGF2ZSgndmlld3MnLCBmdW5jdGlvbigkcXVlcnkpIHVzZSAoJHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAtPmNvdW50KCk7CgogICAgICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnRbJHVzZXItPmlkXSA9IFsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+Y2F0ZWdvcnktPnNsdWcgPT4gJGNvdW50CiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50CiAgICAgICAgICAgIGJyb2FkY2FzdChuZXcgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQoJHVuc2VlblBvc3RzQ291bnQpKS0+dG9PdGhlcnMoKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBCcm9hZGNhc3QgZmFpbGVkJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKQogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgIC8vIFNlbmQgaW1tZWRpYXRlIG5vdGlmaWNhdGlvbiBpZiByZXF1ZXN0ZWQKICAgICAgICBpZiAoJHZhbGlkYXRlZFsnbm90aWZ5X25vdyddKSB7CiAgICAgICAgICAgICR0aGlzLT5zZW5kRXZlbnROb3RpZmljYXRpb24oJGV2ZW50LCAnbm93Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmFjaygpLT53aXRoKCdzdWNjZXNzJywgJ0V2ZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZW5kRXZlbnROb3RpZmljYXRpb24oJGV2ZW50LCAkdHlwZSkKICAgIHsKICAgICAgICAkbG9kZ2UgPSAkZXZlbnQtPnBvc3QtPmxvZGdlOwogICAgICAgICRtZW1iZXJzID0gJGxvZGdlLT5tZW1iZXJzKCkKICAgICAgICAgICAgLT53aGVyZUhhcygndXNlcicsIGZ1bmN0aW9uICgkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmVJbigncm9sZScsIFsnbWFlc3RydScsICdjYWxmYScsICd1Y2VuaWMnXSk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC0+d2l0aCgndXNlcicpCiAgICAgICAgICAgIC0+Z2V0KCk7CgogICAgICAgICRtZXNzYWdlID0gJHR5cGUgPT09ICdub3cnIAogICAgICAgICAgICA/ICJOZXcgZXZlbnQ6IHskZXZlbnQtPnRpdGxlfSBvbiAiIC4gJGV2ZW50LT5zdGFydF9kYXRlLT5mb3JtYXQoJ0YgaiwgWSBnOmkgQScpCiAgICAgICAgICAgIDogIlJlbWluZGVyOiBFdmVudCB7JGV2ZW50LT50aXRsZX0gc3RhcnRzIGluIDI0IGhvdXJzIjsKCiAgICAgICAgZm9yZWFjaCAoJG1lbWJlcnMgYXMgJG1lbWJlcikgewogICAgICAgICAgICAvLyBTZW5kIHB1c2ggbm90aWZpY2F0aW9uIGlmIEZDTSB0b2tlbiBleGlzdHMKICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXItPmZjbV90b2tlbikgewogICAgICAgICAgICAgICAgLy8gU2VuZCBwdXNoIG5vdGlmaWNhdGlvbiB1c2luZyBGQ00KICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c2VuZEZDTU5vdGlmaWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAkbWVtYmVyLT51c2VyLT5mY21fdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAnZXZlbnRfaWQnID0+ICRldmVudC0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnZXZlbnRfbm90aWZpY2F0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJGV2ZW50LT5zdGFydF9kYXRlLT50b0lzbzg2MDFTdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkZXZlbnQtPmxvY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU2VuZCBlbWFpbCBub3RpZmljYXRpb24gaWYgdXNlciBoYXMgZW5hYmxlZCBlbWFpbCBub3RpZmljYXRpb25zCiAgICAgICAgICAgIGlmICgkbWVtYmVyLT51c2VyLT5lbWFpbF9ub3RpZmljYXRpb25zKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIE1haWw6OnRvKCRtZW1iZXItPnVzZXItPmVtYWlsKQogICAgICAgICAgICAgICAgICAgICAgICAtPnNlbmQobmV3IFxBcHBcTWFpbFxFdmVudE5vdGlmaWNhdGlvbk1haWwoJGV2ZW50LCAkdHlwZSwgJG1lbWJlci0+dXNlcikpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIFxMb2c6OmVycm9yKCdGYWlsZWQgdG8gc2VuZCBlbWFpbCBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJGVuZ2xpc2hNb250aCkKICAgIHsKICAgICAgICAkbW9udGhzID0gWwogICAgICAgICAgICAnSmFudWFyeScgPT4gJ2lhbnVhcmllJywKICAgICAgICAgICAgJ0ZlYnJ1YXJ5JyA9PiAnZmVicnVhcmllJywKICAgICAgICAgICAgJ01hcmNoJyA9PiAnbWFydGllJywKICAgICAgICAgICAgJ0FwcmlsJyA9PiAnYXByaWxpZScsCiAgICAgICAgICAgICdNYXknID0+ICdtYWknLAogICAgICAgICAgICAnSnVuZScgPT4gJ2l1bmllJywKICAgICAgICAgICAgJ0p1bHknID0+ICdpdWxpZScsCiAgICAgICAgICAgICdBdWd1c3QnID0+ICdhdWd1c3QnLAogICAgICAgICAgICAnU2VwdGVtYmVyJyA9PiAnc2VwdGVtYnJpZScsCiAgICAgICAgICAgICdPY3RvYmVyJyA9PiAnb2N0b21icmllJywKICAgICAgICAgICAgJ05vdmVtYmVyJyA9PiAnbm9pZW1icmllJywKICAgICAgICAgICAgJ0RlY2VtYmVyJyA9PiAnZGVjZW1icmllJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRtb250aHNbJGVuZ2xpc2hNb250aF0gPz8gJGVuZ2xpc2hNb250aDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNlbmRGQ01Ob3RpZmljYXRpb24oJHRva2VuLCAkbWVzc2FnZSwgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkcHJvamVjdElkID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJvamVjdF9pZCcpOwogICAgICAgICRjbGllbnRFbWFpbCA9IGNvbmZpZygnc2VydmljZXMuZmNtLmNsaWVudF9lbWFpbCcpOwogICAgICAgICRwcml2YXRlS2V5ID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJpdmF0ZV9rZXknKTsKICAgICAgICAKICAgICAgICAkbm93ID0gdGltZSgpOwogICAgICAgICRleHBpcmVzID0gJG5vdyArIDM2MDA7IC8vIFRva2VuIGV4cGlyZXMgaW4gMSBob3VyCiAgICAgICAgCiAgICAgICAgJGhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ1JTMjU2JywKICAgICAgICAgICAgJ3R5cCcgPT4gJ0pXVCcKICAgICAgICBdOwogICAgICAgIAogICAgICAgICRwYXlsb2FkID0gWwogICAgICAgICAgICAnaXNzJyA9PiAkY2xpZW50RW1haWwsCiAgICAgICAgICAgICdzY29wZScgPT4gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZmlyZWJhc2UubWVzc2FnaW5nJywKICAgICAgICAgICAgJ2F1ZCcgPT4gJ2h0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuJywKICAgICAgICAgICAgJ2V4cCcgPT4gJGV4cGlyZXMsCiAgICAgICAgICAgICdpYXQnID0+ICRub3cKICAgICAgICBdOwogICAgICAgIAogICAgICAgICRoZWFkZXJCYXNlNjQgPSBydHJpbShzdHJ0cihiYXNlNjRfZW5jb2RlKGpzb25fZW5jb2RlKCRoZWFkZXIpKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgJHBheWxvYWRCYXNlNjQgPSBydHJpbShzdHJ0cihiYXNlNjRfZW5jb2RlKGpzb25fZW5jb2RlKCRwYXlsb2FkKSksICcrLycsICctXycpLCAnPScpOwogICAgICAgIAogICAgICAgIC8vIENyZWF0ZSB0aGUgc2lnbmF0dXJlIHVzaW5nIE9wZW5TU0wKICAgICAgICAkcHJpdmF0ZUtleSA9IHN0cl9yZXBsYWNlKFsnXG4nLCAnXHInXSwgJycsICRwcml2YXRlS2V5KTsKICAgICAgICAKICAgICAgICAvLyBJZiB0aGUga2V5IGRvZXNuJ3QgaGF2ZSBQRU0gaGVhZGVycywgYWRkIHRoZW0KICAgICAgICBpZiAoIXN0cl9jb250YWlucygkcHJpdmF0ZUtleSwgJy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLScpKSB7CiAgICAgICAgICAgICRwcml2YXRlS2V5ID0gIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxuIiAuIAogICAgICAgICAgICAgICAgICAgICAgICAgd29yZHdyYXAoJHByaXZhdGVLZXksIDY0LCAiXG4iLCB0cnVlKSAuIAogICAgICAgICAgICAgICAgICAgICAgICAgIlxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLSI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRzaWduYXR1cmUgPSAnJzsKICAgICAgICAkc3VjY2VzcyA9IG9wZW5zc2xfc2lnbigKICAgICAgICAgICAgJGhlYWRlckJhc2U2NCAuICcuJyAuICRwYXlsb2FkQmFzZTY0LAogICAgICAgICAgICAkc2lnbmF0dXJlLAogICAgICAgICAgICAkcHJpdmF0ZUtleSwKICAgICAgICAgICAgT1BFTlNTTF9BTEdPX1NIQTI1NgogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgaWYgKCEkc3VjY2VzcykgewogICAgICAgICAgICBcTG9nOjplcnJvcignRmFpbGVkIHRvIHNpZ24gSldUJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiBvcGVuc3NsX2Vycm9yX3N0cmluZygpLAogICAgICAgICAgICAgICAgJ2tleV9sZW5ndGgnID0+IHN0cmxlbigkcHJpdmF0ZUtleSkKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHNpZ25hdHVyZUJhc2U2NCA9IHJ0cmltKHN0cnRyKGJhc2U2NF9lbmNvZGUoJHNpZ25hdHVyZSksICcrLycsICctXycpLCAnPScpOwogICAgICAgIAogICAgICAgICRqd3QgPSAkaGVhZGVyQmFzZTY0IC4gJy4nIC4gJHBheWxvYWRCYXNlNjQgLiAnLicgLiAkc2lnbmF0dXJlQmFzZTY0OwogICAgICAgIAogICAgICAgIC8vIEdldCBhY2Nlc3MgdG9rZW4KICAgICAgICAkcmVzcG9uc2UgPSBIdHRwOjphc0Zvcm0oKS0+cG9zdCgnaHR0cHM6Ly9vYXV0aDIuZ29vZ2xlYXBpcy5jb20vdG9rZW4nLCBbCiAgICAgICAgICAgICdncmFudF90eXBlJyA9PiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6and0LWJlYXJlcicsCiAgICAgICAgICAgICdhc3NlcnRpb24nID0+ICRqd3QKICAgICAgICBdKTsKICAgICAgICAKICAgICAgICBpZiAoISRyZXNwb25zZS0+c3VjY2Vzc2Z1bCgpKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdGYWlsZWQgdG8gZ2V0IEZDTSBhY2Nlc3MgdG9rZW4nLCBbCiAgICAgICAgICAgICAgICAncmVzcG9uc2UnID0+ICRyZXNwb25zZS0+anNvbigpLAogICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHJlc3BvbnNlLT5zdGF0dXMoKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkYWNjZXNzVG9rZW4gPSAkcmVzcG9uc2UtPmpzb24oKVsnYWNjZXNzX3Rva2VuJ107CiAgICAgICAgCiAgICAgICAgLy8gRW5zdXJlIGFsbCBkYXRhIHZhbHVlcyBhcmUgc3RyaW5ncwogICAgICAgICRzdHJpbmdEYXRhID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0sICRkYXRhKTsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgdGhlIGRhdGUgaW4gUm9tYW5pYW4KICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJGRhdGFbJ3N0YXJ0X2RhdGUnXSk7CiAgICAgICAgJGRheSA9ICRkYXRlLT5mb3JtYXQoJ2QnKTsKICAgICAgICAkbW9udGggPSAkdGhpcy0+Z2V0Um9tYW5pYW5Nb250aCgkZGF0ZS0+Zm9ybWF0KCdGJykpOwogICAgICAgICR5ZWFyID0gJGRhdGUtPmZvcm1hdCgnWScpOwogICAgICAgICR0aW1lID0gJGRhdGUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgJGZvcm1hdHRlZERhdGUgPSAieyRkYXl9IHskbW9udGh9IHskeWVhcn0geyR0aW1lfSI7CiAgICAgICAgCiAgICAgICAgLy8gU2VuZCBtZXNzYWdlIHVzaW5nIHRoZSBjb3JyZWN0IEZDTSBlbmRwb2ludAogICAgICAgICRmY21FbmRwb2ludCA9ICJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy97JHByb2plY3RJZH0vbWVzc2FnZXM6c2VuZCI7CiAgICAgICAgCiAgICAgICAgJG1lc3NhZ2VSZXNwb25zZSA9IEh0dHA6OndpdGhIZWFkZXJzKFsKICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICRhY2Nlc3NUb2tlbiwKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0pLT5wb3N0KCRmY21FbmRwb2ludCwgWwogICAgICAgICAgICAnbWVzc2FnZScgPT4gWwogICAgICAgICAgICAgICAgJ3Rva2VuJyA9PiAkdG9rZW4sCiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAnRXZlbmltZW50IG5vdScsCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknID0+ICRkYXRhWydsb2NhdGlvbiddID8gCiAgICAgICAgICAgICAgICAgICAgICAgICJ7JGRhdGFbJ3RpdGxlJ119IC0geyRkYXRhWydsb2NhdGlvbiddfVxueyRmb3JtYXR0ZWREYXRlfSIgOgogICAgICAgICAgICAgICAgICAgICAgICAieyRkYXRhWyd0aXRsZSddfVxueyRmb3JtYXR0ZWREYXRlfSIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ2RhdGEnID0+ICRzdHJpbmdEYXRhLAogICAgICAgICAgICAgICAgJ2FuZHJvaWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAncHJpb3JpdHknID0+ICdoaWdoJywKICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICdzb3VuZCcgPT4gJ2RlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdhcG5zJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdW5kJyA9PiAnZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgXQogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gJG1lc3NhZ2VSZXNwb25zZS0+c3VjY2Vzc2Z1bCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KFBvc3QgJHBvc3QpCiAgICB7CiAgICAgICAgJHRoaXMtPmF1dGhvcml6ZSgnZGVsZXRlJywgJHBvc3QpOwogICAgICAgIAogICAgICAgICRwb3N0LT5kZWxldGUoKTsKICAgICAgICAKICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbJ21lc3NhZ2UnID0+ICdFdmVudCBkZWxldGVkIHN1Y2Nlc3NmdWxseSddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5kZXgoKQogICAgewogICAgICAgICR1c2VyID0gYXV0aCgpLT51c2VyKCk7CiAgICAgICAgJGxvZGdlTWVtYmVyID0gJHVzZXItPmxvZGdlX21lbWJlcjsKCiAgICAgICAgaWYgKCEkbG9kZ2VNZW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL0V2ZW50cycsIFsKICAgICAgICAgICAgICAgICdldmVudHMnID0+IFtdLAogICAgICAgICAgICAgICAgJ3VzZXInID0+ICR1c2VyLAogICAgICAgICAgICAgICAgJ2xvZGdlJyA9PiBudWxsLAogICAgICAgICAgICAgICAgJ21lbWJlcnMnID0+IFtdCiAgICAgICAgICAgIF0pOwogICAgICAgIH0KCiAgICAgICAgLy8gTG9hZCB0aGUgbG9kZ2Ugd2l0aCBtZW1iZXJzIGNvdW50IGFuZCBkaWduaXR5CiAgICAgICAgJGxvZGdlID0gJGxvZGdlTWVtYmVyLT5sb2RnZTsKICAgICAgICAkbG9kZ2UtPmxvYWRDb3VudChbJ21lbWJlcnMnID0+IGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAkcXVlcnktPmpvaW4oJ3VzZXJzJywgJ2xvZGdlX21lbWJlcnMudXNlcl9pZCcsICc9JywgJ3VzZXJzLmlkJykKICAgICAgICAgICAgICAgICAgLT53aGVyZShmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCd1c2Vycy5yb2xlJywgJ3VjZW5pYycpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdjYWxmYScpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdtYWVzdHJ1Jyk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH1dKTsKCiAgICAgICAgJGxvZGdlLT5sb2FkQ291bnQoWydwcm9qZWN0cyBhcyB1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgnc3RhdHVzJywgJ2luX3Byb2dyZXNzJyk7CiAgICAgICAgfV0pOwoKICAgICAgICAvLyBMb2FkIHVwY29taW5nIGV2ZW50cyBjb3VudAogICAgICAgICR1cGNvbWluZ0V2ZW50c0NvdW50ID0gUG9zdDo6d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVyZUhhcygnZXZlbnQnLCBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3N0YXJ0X2RhdGUnLCAnPicsIG5vdygpKTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAvLyBHZXQgYWxsIGV2ZW50cyBmb3IgdGhlIGxvZGdlCiAgICAgICAgJGV2ZW50cyA9IFBvc3Q6OndoZXJlSGFzKCdldmVudCcpCiAgICAgICAgICAgIC0+d2l0aChbJ2V2ZW50LnBvbGwudm90ZXMnLCAnYXV0aG9yJywgJ2xvZGdlJ10pCiAgICAgICAgICAgIC0+b3JkZXJCeSgnY3JlYXRlZF9hdCcsICdkZXNjJykKICAgICAgICAgICAgLT5nZXQoKQogICAgICAgICAgICAtPm1hcChmdW5jdGlvbiAoJHBvc3QpIHsKICAgICAgICAgICAgICAgICRldmVudERhdGEgPSBbCiAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkcG9zdC0+ZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJHBvc3QtPmV2ZW50LT5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgICdlbmRfZGF0ZScgPT4gJHBvc3QtPmV2ZW50LT5nZXRSYXdPcmlnaW5hbCgnZW5kX2RhdGUnKSwKICAgICAgICAgICAgICAgICAgICAnbG9jYXRpb24nID0+ICRwb3N0LT5ldmVudC0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkcG9zdC0+bG9kZ2VfaWQsCiAgICAgICAgICAgICAgICAgICAgJ2xvZGdlJyA9PiAkcG9zdC0+bG9kZ2UgPyBbCiAgICAgICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJHBvc3QtPmxvZGdlLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRwb3N0LT5sb2RnZS0+bmFtZQogICAgICAgICAgICAgICAgICAgIF0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgICdjcmVhdG9yJyA9PiAkcG9zdC0+YXV0aG9yID8gWwogICAgICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRwb3N0LT5hdXRob3ItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJHBvc3QtPmF1dGhvci0+Zmlyc3RfbmFtZSAuICcgJyAuICRwb3N0LT5hdXRob3ItPmxhc3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGUnID0+ICRwb3N0LT5hdXRob3ItPnJvbGUKICAgICAgICAgICAgICAgICAgICBdIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZmlsZV9wYXRoJyA9PiAkcG9zdC0+ZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICdmaWxlX25hbWUnID0+ICRwb3N0LT5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfc2l6ZScgPT4gJHBvc3QtPmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+ZXZlbnQtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAncG9sbCcgPT4gJHBvc3QtPmV2ZW50LT5wb2xsID8gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+ICRwb3N0LT5ldmVudC0+cG9sbC0+b3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19tdWx0aXBsZV9jaG9pY2UnID0+ICRwb3N0LT5ldmVudC0+cG9sbC0+aXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZvdGVzJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZvdGVfY291bnRzJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnZvdGVfY291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgIF0gOiBudWxsCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJGV2ZW50RGF0YTsKICAgICAgICAgICAgfSk7CgogICAgICAgIC8vIEdldCBhbGwgbWVtYmVycyBmb3IgdGhlIGxvZGdlCiAgICAgICAgJG1lbWJlcnMgPSAkbG9kZ2UtPnVzZXJzKCkKICAgICAgICAgICAgLT53aGVyZUluKCdyb2xlJywgWyd1Y2VuaWMnLCAnY2FsZmEnLCAnbWFlc3RydSddKQogICAgICAgICAgICAtPmdldCgpOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdNZW1iZXIvRXZlbnRzJywgWwogICAgICAgICAgICAnZXZlbnRzJyA9PiAkZXZlbnRzLAogICAgICAgICAgICAndXNlcicgPT4gJHVzZXIsCiAgICAgICAgICAgICdsb2RnZScgPT4gWwogICAgICAgICAgICAgICAgJ2lkJyA9PiAkbG9kZ2UtPmlkLAogICAgICAgICAgICAgICAgJ25hbWUnID0+ICRsb2RnZS0+bmFtZSwKICAgICAgICAgICAgICAgICdhZGRyZXNzJyA9PiAkbG9kZ2UtPmFkZHJlc3MsCiAgICAgICAgICAgICAgICAnY2l0eScgPT4gJGxvZGdlLT5jaXR5LAogICAgICAgICAgICAgICAgJ21lbWJlcnNfY291bnQnID0+ICRsb2RnZS0+bWVtYmVyc19jb3VudCwKICAgICAgICAgICAgICAgICd1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiAkbG9kZ2UtPnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQsCiAgICAgICAgICAgICAgICAndXBjb21pbmdfZXZlbnRzX2NvdW50JyA9PiAkdXBjb21pbmdFdmVudHNDb3VudAogICAgICAgICAgICBdLAogICAgICAgICAgICAnbWVtYmVycycgPT4gJG1lbWJlcnMKICAgICAgICBdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKFJlcXVlc3QgJHJlcXVlc3QsIFBvc3QgJHBvc3QpCiAgICB7CiAgICAgICAgJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICdyZXF1aXJlZHxzdHJpbmcnLAogICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJ3JlcXVpcmVkfGRhdGUnLAogICAgICAgICAgICAnZW5kX2RhdGUnID0+ICdudWxsYWJsZXxkYXRlfGFmdGVyX29yX2VxdWFsOnN0YXJ0X2RhdGUnLAogICAgICAgICAgICAnbG9jYXRpb24nID0+ICdyZXF1aXJlZHxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJ3JlcXVpcmVkfGV4aXN0czpwb3N0X2NhdGVnb3JpZXMsaWQnLAogICAgICAgICAgICAnbG9kZ2VfaWQnID0+ICdyZXF1aXJlZHxleGlzdHM6bG9kZ2VzLGlkJywKICAgICAgICAgICAgJ3BvbGxfcXVlc3Rpb24nID0+ICdzb21ldGltZXN8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAncG9sbF9vcHRpb25zJyA9PiAnc29tZXRpbWVzfGFycmF5JywKICAgICAgICAgICAgJ3BvbGxfb3B0aW9ucy4qJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAnc29tZXRpbWVzfGJvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5X25vdycgPT4gJ2Jvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICdib29sZWFuJywKICAgICAgICAgICAgJ2ZpbGVzJyA9PiAnbnVsbGFibGV8YXJyYXknLAogICAgICAgICAgICAnZmlsZXMuKicgPT4gJ2ZpbGV8bWltZXM6cGRmLGRvYyxkb2N4LHR4dHxtYXg6MTAyNDAnIC8vIDEwTUIgbWF4CiAgICAgICAgXSk7CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zdAogICAgICAgICRwb3N0LT51cGRhdGUoWwogICAgICAgICAgICAnY29udGVudCcgPT4gJHJlcXVlc3QtPnRpdGxlLAogICAgICAgICAgICAnY2F0ZWdvcnlfaWQnID0+ICRyZXF1ZXN0LT5jYXRlZ29yeV9pZCwKICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkcmVxdWVzdC0+bG9kZ2VfaWQsCiAgICAgICAgXSk7CgogICAgICAgIC8vIEhhbmRsZSBmaWxlIHJlbW92YWwgaWYgcmVxdWVzdGVkCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXMoJ3JlbW92ZV9maWxlJykgJiYgJHJlcXVlc3QtPnJlbW92ZV9maWxlID09PSAnMScpIHsgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCRwb3N0LT5maWxlX3BhdGgpIHsKICAgICAgICAgICAgICAgICRvbGRGaWxlUGF0aCA9ICRwb3N0LT5maWxlX3BhdGg7CiAgICAgICAgICAgICAgICBcU3RvcmFnZTo6ZGlzaygncHVibGljJyktPmRlbGV0ZSgkcG9zdC0+ZmlsZV9wYXRoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcG9zdC0+ZmlsZV9wYXRoID0gbnVsbDsKICAgICAgICAgICAgJHBvc3QtPmZpbGVfbmFtZSA9IG51bGw7CiAgICAgICAgICAgICRwb3N0LT5maWxlX3R5cGUgPSBudWxsOwogICAgICAgICAgICAkcG9zdC0+ZmlsZV9zaXplID0gbnVsbDsKICAgICAgICAgICAgJHBvc3QtPnNhdmUoKTsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBuZXcgZmlsZSB1cGxvYWQKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc0ZpbGUoJ2ZpbGVzJykpIHsgICAgICAgICAgICAKICAgICAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBmaWxlIGZyb20gdGhlIGFycmF5CiAgICAgICAgICAgICRmaWxlcyA9ICRyZXF1ZXN0LT5maWxlKCdmaWxlcycpOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpID4gMCkgewogICAgICAgICAgICAgICAgJGZpbGUgPSAkZmlsZXNbMF07CiAgICAgICAgICAgICAgICAkcGF0aCA9ICRmaWxlLT5zdG9yZSgncG9zdHMvJyAuICRwb3N0LT5sb2RnZV9pZCwgJ3B1YmxpYycpOwogICAgICAgICAgICAgICAgJHBvc3QtPnVwZGF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGF0aCcgPT4gJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfbmFtZScgPT4gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3R5cGUnID0+ICRmaWxlLT5nZXRDbGllbnRNaW1lVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3NpemUnID0+ICRmaWxlLT5nZXRTaXplKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50CiAgICAgICAgJGV2ZW50ID0gJHBvc3QtPmV2ZW50OwogICAgICAgICRldmVudC0+dXBkYXRlKFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAkcmVxdWVzdC0+dGl0bGUsCiAgICAgICAgICAgICdkZXNjcmlwdGlvbicgPT4gJHJlcXVlc3QtPmRlc2NyaXB0aW9uLAogICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJHJlcXVlc3QtPnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICdlbmRfZGF0ZScgPT4gJHJlcXVlc3QtPmVuZF9kYXRlLAogICAgICAgICAgICAnbG9jYXRpb24nID0+ICRyZXF1ZXN0LT5sb2NhdGlvbiwKICAgICAgICAgICAgJ25vdGlmeV9ub3cnID0+ICRyZXF1ZXN0LT5ub3RpZnlfbm93LAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICRyZXF1ZXN0LT5ub3RpZnlfMjRoX2JlZm9yZQogICAgICAgIF0pOwoKICAgICAgICAvLyBIYW5kbGUgcG9sbCBjcmVhdGlvbi91cGRhdGUKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc19wb2xsKSB7CiAgICAgICAgICAgIGlmICgkZXZlbnQtPnBvbGwpIHsKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBwb2xsCiAgICAgICAgICAgICAgICAkb2xkT3B0aW9ucyA9ICRldmVudC0+cG9sbC0+b3B0aW9uczsKICAgICAgICAgICAgICAgICRuZXdPcHRpb25zID0gJHJlcXVlc3QtPnBvbGxfb3B0aW9uczsKICAgICAgICAgICAgICAgICRpc0NoYW5naW5nVG9TaW5nbGVDaG9pY2UgPSAhJGV2ZW50LT5wb2xsLT5pc19tdWx0aXBsZV9jaG9pY2UgJiYgJHJlcXVlc3QtPmlzX211bHRpcGxlX2Nob2ljZTsKCiAgICAgICAgICAgICAgICAkZXZlbnQtPnBvbGwtPnVwZGF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcmVxdWVzdC0+cG9sbF9xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gJHJlcXVlc3QtPnBvbGxfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAkcmVxdWVzdC0+aXNfbXVsdGlwbGVfY2hvaWNlCiAgICAgICAgICAgICAgICBdKTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgZXhpc3Rpbmcgdm90ZXMKICAgICAgICAgICAgICAgICRleGlzdGluZ1ZvdGVzID0gJGV2ZW50LT5wb2xsLT52b3RlczsKCiAgICAgICAgICAgICAgICBpZiAoJGV4aXN0aW5nVm90ZXMtPmlzTm90RW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRleGlzdGluZ1ZvdGVzIGFzICR2b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxlY3RlZE9wdGlvbnMgPSAkdm90ZS0+c2VsZWN0ZWRfb3B0aW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZWRPcHRpb25zID0gW107CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjaGFuZ2luZyB0byBzaW5nbGUgY2hvaWNlLCB0YWtlIG9ubHkgdGhlIGZpcnN0IHNlbGVjdGVkIG9wdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzQ2hhbmdpbmdUb1NpbmdsZUNob2ljZSAmJiBjb3VudCgkc2VsZWN0ZWRPcHRpb25zKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxlY3RlZE9wdGlvbnMgPSBbcmVzZXQoJHNlbGVjdGVkT3B0aW9ucyldOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXAgb2xkIG9wdGlvbnMgdG8gbmV3IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHNlbGVjdGVkT3B0aW9ucyBhcyAkb3B0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXggPSBhcnJheV9zZWFyY2goJG9wdGlvbiwgJG9sZE9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpbmRleCAhPT0gZmFsc2UgJiYgaXNzZXQoJG5ld09wdGlvbnNbJGluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXBkYXRlZE9wdGlvbnNbXSA9ICRuZXdPcHRpb25zWyRpbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdm90ZSB3aXRoIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICR2b3RlLT51cGRhdGUoWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdGVkX29wdGlvbnMnID0+ICR1cGRhdGVkT3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgcG9sbCB0byBnZXQgdXBkYXRlZCB2b3RlIGNvdW50cwogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsLT5yZWZyZXNoKCk7CiAgICAgICAgICAgICAgICAkZXZlbnQtPnBvbGwtPmFwcGVuZCgndm90ZV9jb3VudHMnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgcG9sbAogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsKCktPmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcmVxdWVzdC0+cG9sbF9xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gJHJlcXVlc3QtPnBvbGxfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAkcmVxdWVzdC0+aXNfbXVsdGlwbGVfY2hvaWNlCiAgICAgICAgICAgICAgICBdKTsKCiAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSBldmVudCBtb2RlbCB0byBsb2FkIHRoZSBuZXcgcG9sbCByZWxhdGlvbnNoaXAKICAgICAgICAgICAgICAgICRldmVudC0+cmVmcmVzaCgpOwogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsLT5hcHBlbmQoJ3ZvdGVfY291bnRzJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZW1vdmUgcG9sbCBpZiBleGlzdHMKICAgICAgICAgICAgaWYgKCRldmVudC0+cG9sbCkgewogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsLT5kZWxldGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTG9hZCB0aGUgcG9zdCB3aXRoIGFsbCBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcwogICAgICAgICRwb3N0LT5sb2FkKFsKICAgICAgICAgICAgJ2V2ZW50JywKICAgICAgICAgICAgJ2V2ZW50LnBvbGwudm90ZXMudXNlcicsCiAgICAgICAgICAgICdhdXRob3InLAogICAgICAgICAgICAnY2F0ZWdvcnknLAogICAgICAgICAgICAnbG9kZ2UnCiAgICAgICAgXSk7CgogICAgICAgIC8vIEFkZCB2b3RlX2NvdW50cyB0byB0aGUgcG9sbCBpZiBpdCBleGlzdHMKICAgICAgICBpZiAoJHBvc3QtPmV2ZW50LT5wb2xsKSB7CiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB2b3RlIGNvdW50cyBmcm9tIHRoZSBhY3R1YWwgdm90ZXMKICAgICAgICAgICAgJHZvdGVDb3VudHMgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHBvc3QtPmV2ZW50LT5wb2xsLT5vcHRpb25zIGFzICRvcHRpb24pIHsKICAgICAgICAgICAgICAgICR2b3RlQ291bnRzWyRvcHRpb25dID0gJHBvc3QtPmV2ZW50LT5wb2xsLT52b3Rlcy0+ZmlsdGVyKGZ1bmN0aW9uKCR2b3RlKSB1c2UgKCRvcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5fYXJyYXkoJG9wdGlvbiwgJHZvdGUtPnNlbGVjdGVkX29wdGlvbnMpOwogICAgICAgICAgICAgICAgfSktPmNvdW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBvc3QtPmV2ZW50LT5wb2xsLT52b3RlX2NvdW50cyA9ICR2b3RlQ291bnRzOwogICAgICAgIH0KCiAgICAgICAgLy8gQnJvYWRjYXN0IHRoZSBldmVudCB1cGRhdGUKICAgICAgICB0cnkgewogICAgICAgICAgICBicm9hZGNhc3QobmV3IEV2ZW50VXBkYXRlZCgkcG9zdCkpLT50b090aGVycygpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0V2ZW50Q29udHJvbGxlckB1cGRhdGUgLSBCcm9hZGNhc3QgZmFpbGVkJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKQogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRXZlbnQgdXBkYXRlZCBzdWNjZXNzZnVsbHknLAogICAgICAgICAgICAncG9zdCcgPT4gJHBvc3QKICAgICAgICBdKTsKICAgIH0KfQoAAAAAAAAAAClgAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAACgYAAAAAAAAQBgAAAAAAAAAAAAAAAPC/"
				],
				[
					19,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAApYAAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xNZW1iZXI7Cgp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsKdXNlIElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0Owp1c2UgQXBwXE1vZGVsc1xQb3N0Owp1c2UgQXBwXE1vZGVsc1xQb2xsOwp1c2UgQXBwXE1vZGVsc1xMb2RnZTsKdXNlIEluZXJ0aWFcSW5lcnRpYTsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXEh0dHA7CnVzZSBBcHBcRXZlbnRzXEV2ZW50Q3JlYXRlZDsKdXNlIEFwcFxFdmVudHNcUG9zdFBvbGxDcmVhdGVkOwp1c2UgQXBwXEV2ZW50c1xFdmVudFVwZGF0ZWQ7CnVzZSBBcHBcRXZlbnRzXFVucmVhZFBvc3RzQ291bnRVcGRhdGVkOwp1c2UgQXBwXE5vdGlmaWNhdGlvbnNcRXZlbnROb3RpZmljYXRpb247CnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcRmFjYWRlc1xNYWlsOwoKY2xhc3MgRXZlbnRDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcmUoUmVxdWVzdCAkcmVxdWVzdCkKICAgIHsKICAgICAgICAkdmFsaWRhdGVkID0gJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICdudWxsYWJsZXxzdHJpbmcnLAogICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJ3JlcXVpcmVkfGRhdGUnLAogICAgICAgICAgICAnZW5kX2RhdGUnID0+ICdudWxsYWJsZXxkYXRlfGFmdGVyX29yX2VxdWFsOnN0YXJ0X2RhdGUnLAogICAgICAgICAgICAnbG9jYXRpb24nID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJ3JlcXVpcmVkfGV4aXN0czpwb3N0X2NhdGVnb3JpZXMsaWQnLAogICAgICAgICAgICAnaGFzX3BvbGwnID0+ICdib29sZWFuJywKICAgICAgICAgICAgJ3BvbGxfcXVlc3Rpb24nID0+ICdyZXF1aXJlZF9pZjpoYXNfcG9sbCx0cnVlfG51bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ3BvbGxfb3B0aW9ucycgPT4gJ3JlcXVpcmVkX2lmOmhhc19wb2xsLHRydWV8bnVsbGFibGV8YXJyYXl8bWluOjInLAogICAgICAgICAgICAncG9sbF9vcHRpb25zLionID0+ICdyZXF1aXJlZF9pZjpoYXNfcG9sbCx0cnVlfG51bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2lzX211bHRpcGxlX2Nob2ljZScgPT4gJ2Jvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5X25vdycgPT4gJ2Jvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICdib29sZWFuJywKICAgICAgICAgICAgJ2ZpbGVzLionID0+ICdudWxsYWJsZXxmaWxlfG1pbWVzOnBkZixkb2MsZG9jeCx0eHR8bWF4OjEwMjQwJyAvLyAxME1CIG1heAogICAgICAgIF0pOwoKICAgICAgICAkdXNlciA9IGF1dGgoKS0+dXNlcigpOwogICAgICAgICRsb2RnZU1lbWJlciA9ICR1c2VyLT5sb2RnZV9tZW1iZXI7CgogICAgICAgIGlmICghJGxvZGdlTWVtYmVyKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBObyBsb2RnZSBtZW1iZXIgZm91bmQgZm9yIHVzZXInLCBbCiAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICByZXR1cm4gYmFjaygpLT53aXRoKCdlcnJvcicsICdZb3UgbXVzdCBiZSBhIG1lbWJlciBvZiBhIGxvZGdlIHRvIGNyZWF0ZSBldmVudHMuJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgdGhlIHBvc3QKICAgICAgICAkcG9zdERhdGEgPSBbCiAgICAgICAgICAgICdhdXRob3JfaWQnID0+ICRsb2RnZU1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICR2YWxpZGF0ZWRbJ2Rlc2NyaXB0aW9uJ10gPz8gJycsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJHZhbGlkYXRlZFsnY2F0ZWdvcnlfaWQnXSwKICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkbG9kZ2VNZW1iZXItPmxvZGdlX2lkCiAgICAgICAgXTsKCiAgICAgICAgJHBvc3QgPSBQb3N0OjpjcmVhdGUoJHBvc3REYXRhKTsKCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdXBsb2FkcyBpZiBwcmVzZW50CiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNGaWxlKCdmaWxlcycpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRyZXF1ZXN0LT5maWxlKCdmaWxlcycpIGFzICRmaWxlKSB7CiAgICAgICAgICAgICAgICAkcGF0aCA9ICRmaWxlLT5zdG9yZSgicG9zdHMveyRsb2RnZU1lbWJlci0+bG9kZ2VfaWR9IiwgJ3B1YmxpYycpOwogICAgICAgICAgICAgICAgJHBvc3QtPnVwZGF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGF0aCcgPT4gJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfbmFtZScgPT4gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3R5cGUnID0+ICRmaWxlLT5nZXRDbGllbnRNaW1lVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3NpemUnID0+ICRmaWxlLT5nZXRTaXplKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDcmVhdGUgdGhlIGV2ZW50CiAgICAgICAgJGV2ZW50RGF0YSA9IFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAkdmFsaWRhdGVkWyd0aXRsZSddLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICR2YWxpZGF0ZWRbJ2Rlc2NyaXB0aW9uJ10sCiAgICAgICAgICAgICdzdGFydF9kYXRlJyA9PiAkdmFsaWRhdGVkWydzdGFydF9kYXRlJ10sCiAgICAgICAgICAgICdlbmRfZGF0ZScgPT4gJHZhbGlkYXRlZFsnZW5kX2RhdGUnXSwKICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkdmFsaWRhdGVkWydsb2NhdGlvbiddLAogICAgICAgICAgICAnbm90aWZ5X25vdycgPT4gJHZhbGlkYXRlZFsnbm90aWZ5X25vdyddLAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICR2YWxpZGF0ZWRbJ25vdGlmeV8yNGhfYmVmb3JlJ10KICAgICAgICBdOwoKICAgICAgICAkZXZlbnQgPSAkcG9zdC0+ZXZlbnQoKS0+Y3JlYXRlKCRldmVudERhdGEpOwoKICAgICAgICAvLyBDcmVhdGUgcG9sbCBpZiByZXF1ZXN0ZWQKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc19wb2xsKSB7CiAgICAgICAgICAgICRwb2xsRGF0YSA9IFsKICAgICAgICAgICAgICAgICdxdWVzdGlvbicgPT4gJHZhbGlkYXRlZFsncG9sbF9xdWVzdGlvbiddLAogICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+ICR2YWxpZGF0ZWRbJ3BvbGxfb3B0aW9ucyddLAogICAgICAgICAgICAgICAgJ2lzX211bHRpcGxlX2Nob2ljZScgPT4gJHZhbGlkYXRlZFsnaXNfbXVsdGlwbGVfY2hvaWNlJ10KICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICRldmVudC0+cG9sbCgpLT5jcmVhdGUoJHBvbGxEYXRhKTsKCiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIGV2ZW50IG1vZGVsIHRvIGxvYWQgdGhlIG5ldyBwb2xsIHJlbGF0aW9uc2hpcAogICAgICAgICAgICAkZXZlbnQtPnJlZnJlc2goKTsKCiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgcG9sbCBjcmVhdGlvbgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgYnJvYWRjYXN0KG5ldyBQb3N0UG9sbENyZWF0ZWQoJHBvc3QpKS0+dG9PdGhlcnMoKTsKCiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciBhbGwgdXNlcnMgaW4gdGhlIGxvZGdlCiAgICAgICAgICAgICAgICAkdXNlcnMgPSAkcG9zdC0+bG9kZ2UtPnVzZXJzOwogICAgICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyLT5yb2xlID09PSAndWNlbmljJyAmJiAkcG9zdC0+Y2F0ZWdvcnktPnNsdWcgPT09ICdtaWF6YS16aScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkY291bnQgPSBQb3N0Ojp3aGVyZSgnbG9kZ2VfaWQnLCAkcG9zdC0+bG9kZ2VfaWQpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+d2hlcmUoJ2NhdGVnb3J5X2lkJywgJHBvc3QtPmNhdGVnb3J5X2lkKQogICAgICAgICAgICAgICAgICAgICAgICAtPndoZXJlRG9lc250SGF2ZSgndmlld3MnLCBmdW5jdGlvbigkcXVlcnkpIHVzZSAoJHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAtPmNvdW50KCk7CgogICAgICAgICAgICAgICAgICAgICR1bnNlZW5Qb3N0c0NvdW50WyR1c2VyLT5pZF0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICRwb3N0LT5jYXRlZ29yeS0+c2x1ZyA9PiAkY291bnQKICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgdXBkYXRlZCB1bnNlZW4gcG9zdHMgY291bnQKICAgICAgICAgICAgICAgIGJyb2FkY2FzdChuZXcgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQoJHVuc2VlblBvc3RzQ291bnQpKS0+dG9PdGhlcnMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0V2ZW50Q29udHJvbGxlckBzdG9yZSAtIFBvbGwgY3JlYXRpb24gYnJvYWRjYXN0IGZhaWxlZCcsIFsKICAgICAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBMb2FkIHRoZSBwb3N0IHdpdGggYWxsIHJlbGF0aW9uc2hpcHMKICAgICAgICAkcG9zdC0+bG9hZChbCiAgICAgICAgICAgICdyZWFjdGlvbnMnLAogICAgICAgICAgICAnYXV0aG9yJywKICAgICAgICAgICAgJ2NhdGVnb3J5JywKICAgICAgICAgICAgJ2NvbW1lbnRzLmF1dGhvcicsCiAgICAgICAgICAgICdldmVudC5wb2xsLnZvdGVzJywKICAgICAgICAgICAgJ3BvbGwudm90ZXMnLAogICAgICAgICAgICAndmlld3MnCiAgICAgICAgXSk7CgogICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgbmV3IGV2ZW50CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYnJvYWRjYXN0KG5ldyBFdmVudENyZWF0ZWQoJHBvc3QpKS0+dG9PdGhlcnMoKTsKCiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB1bnNlZW4gcG9zdHMgY291bnQgZm9yIGFsbCB1c2VycyBpbiB0aGUgbG9kZ2UKICAgICAgICAgICAgJHVzZXJzID0gJHBvc3QtPmxvZGdlLT51c2VyczsKICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VycyBhcyAkdXNlcikgewogICAgICAgICAgICAgICAgLy8gU2tpcCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICAgICAgICAgICAgICBpZiAoJHVzZXItPnJvbGUgPT09ICd1Y2VuaWMnICYmICRwb3N0LT5jYXRlZ29yeS0+c2x1ZyA9PT0gJ21pYXphLXppJykgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjb3VudCA9IFBvc3Q6OndoZXJlKCdsb2RnZV9pZCcsICRwb3N0LT5sb2RnZV9pZCkKICAgICAgICAgICAgICAgICAgICAtPndoZXJlKCdjYXRlZ29yeV9pZCcsICRwb3N0LT5jYXRlZ29yeV9pZCkKICAgICAgICAgICAgICAgICAgICAtPndoZXJlRG9lc250SGF2ZSgndmlld3MnLCBmdW5jdGlvbigkcXVlcnkpIHVzZSAoJHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAtPmNvdW50KCk7CgogICAgICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnRbJHVzZXItPmlkXSA9IFsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+Y2F0ZWdvcnktPnNsdWcgPT4gJGNvdW50CiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50CiAgICAgICAgICAgIGJyb2FkY2FzdChuZXcgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQoJHVuc2VlblBvc3RzQ291bnQpKS0+dG9PdGhlcnMoKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdFdmVudENvbnRyb2xsZXJAc3RvcmUgLSBCcm9hZGNhc3QgZmFpbGVkJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKQogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgIC8vIFNlbmQgaW1tZWRpYXRlIG5vdGlmaWNhdGlvbiBpZiByZXF1ZXN0ZWQKICAgICAgICBpZiAoJHZhbGlkYXRlZFsnbm90aWZ5X25vdyddKSB7CiAgICAgICAgICAgICR0aGlzLT5zZW5kRXZlbnROb3RpZmljYXRpb24oJGV2ZW50LCAnbm93Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmFjaygpLT53aXRoKCdzdWNjZXNzJywgJ0V2ZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZW5kRXZlbnROb3RpZmljYXRpb24oJGV2ZW50LCAkdHlwZSkKICAgIHsKICAgICAgICAkbG9kZ2UgPSAkZXZlbnQtPnBvc3QtPmxvZGdlOwogICAgICAgICRtZW1iZXJzID0gJGxvZGdlLT5tZW1iZXJzKCkKICAgICAgICAgICAgLT53aGVyZUhhcygndXNlcicsIGZ1bmN0aW9uICgkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmVJbigncm9sZScsIFsnbWFlc3RydScsICdjYWxmYScsICd1Y2VuaWMnXSk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC0+d2l0aCgndXNlcicpCiAgICAgICAgICAgIC0+Z2V0KCk7CgogICAgICAgICRtZXNzYWdlID0gJHR5cGUgPT09ICdub3cnIAogICAgICAgICAgICA/ICJOZXcgZXZlbnQ6IHskZXZlbnQtPnRpdGxlfSBvbiAiIC4gJGV2ZW50LT5zdGFydF9kYXRlLT5mb3JtYXQoJ0YgaiwgWSBnOmkgQScpCiAgICAgICAgICAgIDogIlJlbWluZGVyOiBFdmVudCB7JGV2ZW50LT50aXRsZX0gc3RhcnRzIGluIDI0IGhvdXJzIjsKCiAgICAgICAgZm9yZWFjaCAoJG1lbWJlcnMgYXMgJG1lbWJlcikgewogICAgICAgICAgICAvLyBTZW5kIHB1c2ggbm90aWZpY2F0aW9uIGlmIEZDTSB0b2tlbiBleGlzdHMKICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXItPmZjbV90b2tlbikgewogICAgICAgICAgICAgICAgLy8gU2VuZCBwdXNoIG5vdGlmaWNhdGlvbiB1c2luZyBGQ00KICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c2VuZEZDTU5vdGlmaWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAkbWVtYmVyLT51c2VyLT5mY21fdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAnZXZlbnRfaWQnID0+ICRldmVudC0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnZXZlbnRfbm90aWZpY2F0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJGV2ZW50LT5zdGFydF9kYXRlLT50b0lzbzg2MDFTdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkZXZlbnQtPmxvY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU2VuZCBlbWFpbCBub3RpZmljYXRpb24gaWYgdXNlciBoYXMgZW5hYmxlZCBlbWFpbCBub3RpZmljYXRpb25zCiAgICAgICAgICAgIGlmICgkbWVtYmVyLT51c2VyLT5lbWFpbF9ub3RpZmljYXRpb25zKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIE1haWw6OnRvKCRtZW1iZXItPnVzZXItPmVtYWlsKQogICAgICAgICAgICAgICAgICAgICAgICAtPnNlbmQobmV3IFxBcHBcTWFpbFxFdmVudE5vdGlmaWNhdGlvbk1haWwoJGV2ZW50LCAkdHlwZSwgJG1lbWJlci0+dXNlcikpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIFxMb2c6OmVycm9yKCdGYWlsZWQgdG8gc2VuZCBlbWFpbCBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJGVuZ2xpc2hNb250aCkKICAgIHsKICAgICAgICAkbW9udGhzID0gWwogICAgICAgICAgICAnSmFudWFyeScgPT4gJ2lhbnVhcmllJywKICAgICAgICAgICAgJ0ZlYnJ1YXJ5JyA9PiAnZmVicnVhcmllJywKICAgICAgICAgICAgJ01hcmNoJyA9PiAnbWFydGllJywKICAgICAgICAgICAgJ0FwcmlsJyA9PiAnYXByaWxpZScsCiAgICAgICAgICAgICdNYXknID0+ICdtYWknLAogICAgICAgICAgICAnSnVuZScgPT4gJ2l1bmllJywKICAgICAgICAgICAgJ0p1bHknID0+ICdpdWxpZScsCiAgICAgICAgICAgICdBdWd1c3QnID0+ICdhdWd1c3QnLAogICAgICAgICAgICAnU2VwdGVtYmVyJyA9PiAnc2VwdGVtYnJpZScsCiAgICAgICAgICAgICdPY3RvYmVyJyA9PiAnb2N0b21icmllJywKICAgICAgICAgICAgJ05vdmVtYmVyJyA9PiAnbm9pZW1icmllJywKICAgICAgICAgICAgJ0RlY2VtYmVyJyA9PiAnZGVjZW1icmllJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRtb250aHNbJGVuZ2xpc2hNb250aF0gPz8gJGVuZ2xpc2hNb250aDsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNlbmRGQ01Ob3RpZmljYXRpb24oJHRva2VuLCAkbWVzc2FnZSwgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkcHJvamVjdElkID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJvamVjdF9pZCcpOwogICAgICAgICRjbGllbnRFbWFpbCA9IGNvbmZpZygnc2VydmljZXMuZmNtLmNsaWVudF9lbWFpbCcpOwogICAgICAgICRwcml2YXRlS2V5ID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJpdmF0ZV9rZXknKTsKICAgICAgICAKICAgICAgICAkbm93ID0gdGltZSgpOwogICAgICAgICRleHBpcmVzID0gJG5vdyArIDM2MDA7IC8vIFRva2VuIGV4cGlyZXMgaW4gMSBob3VyCiAgICAgICAgCiAgICAgICAgJGhlYWRlciA9IFsKICAgICAgICAgICAgJ2FsZycgPT4gJ1JTMjU2JywKICAgICAgICAgICAgJ3R5cCcgPT4gJ0pXVCcKICAgICAgICBdOwogICAgICAgIAogICAgICAgICRwYXlsb2FkID0gWwogICAgICAgICAgICAnaXNzJyA9PiAkY2xpZW50RW1haWwsCiAgICAgICAgICAgICdzY29wZScgPT4gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZmlyZWJhc2UubWVzc2FnaW5nJywKICAgICAgICAgICAgJ2F1ZCcgPT4gJ2h0dHBzOi8vb2F1dGgyLmdvb2dsZWFwaXMuY29tL3Rva2VuJywKICAgICAgICAgICAgJ2V4cCcgPT4gJGV4cGlyZXMsCiAgICAgICAgICAgICdpYXQnID0+ICRub3cKICAgICAgICBdOwogICAgICAgIAogICAgICAgICRoZWFkZXJCYXNlNjQgPSBydHJpbShzdHJ0cihiYXNlNjRfZW5jb2RlKGpzb25fZW5jb2RlKCRoZWFkZXIpKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgJHBheWxvYWRCYXNlNjQgPSBydHJpbShzdHJ0cihiYXNlNjRfZW5jb2RlKGpzb25fZW5jb2RlKCRwYXlsb2FkKSksICcrLycsICctXycpLCAnPScpOwogICAgICAgIAogICAgICAgIC8vIENyZWF0ZSB0aGUgc2lnbmF0dXJlIHVzaW5nIE9wZW5TU0wKICAgICAgICAkcHJpdmF0ZUtleSA9IHN0cl9yZXBsYWNlKFsnXG4nLCAnXHInXSwgJycsICRwcml2YXRlS2V5KTsKICAgICAgICAKICAgICAgICAvLyBJZiB0aGUga2V5IGRvZXNuJ3QgaGF2ZSBQRU0gaGVhZGVycywgYWRkIHRoZW0KICAgICAgICBpZiAoIXN0cl9jb250YWlucygkcHJpdmF0ZUtleSwgJy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLScpKSB7CiAgICAgICAgICAgICRwcml2YXRlS2V5ID0gIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxuIiAuIAogICAgICAgICAgICAgICAgICAgICAgICAgd29yZHdyYXAoJHByaXZhdGVLZXksIDY0LCAiXG4iLCB0cnVlKSAuIAogICAgICAgICAgICAgICAgICAgICAgICAgIlxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLSI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRzaWduYXR1cmUgPSAnJzsKICAgICAgICAkc3VjY2VzcyA9IG9wZW5zc2xfc2lnbigKICAgICAgICAgICAgJGhlYWRlckJhc2U2NCAuICcuJyAuICRwYXlsb2FkQmFzZTY0LAogICAgICAgICAgICAkc2lnbmF0dXJlLAogICAgICAgICAgICAkcHJpdmF0ZUtleSwKICAgICAgICAgICAgT1BFTlNTTF9BTEdPX1NIQTI1NgogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgaWYgKCEkc3VjY2VzcykgewogICAgICAgICAgICBcTG9nOjplcnJvcignRmFpbGVkIHRvIHNpZ24gSldUJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiBvcGVuc3NsX2Vycm9yX3N0cmluZygpLAogICAgICAgICAgICAgICAgJ2tleV9sZW5ndGgnID0+IHN0cmxlbigkcHJpdmF0ZUtleSkKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJHNpZ25hdHVyZUJhc2U2NCA9IHJ0cmltKHN0cnRyKGJhc2U2NF9lbmNvZGUoJHNpZ25hdHVyZSksICcrLycsICctXycpLCAnPScpOwogICAgICAgIAogICAgICAgICRqd3QgPSAkaGVhZGVyQmFzZTY0IC4gJy4nIC4gJHBheWxvYWRCYXNlNjQgLiAnLicgLiAkc2lnbmF0dXJlQmFzZTY0OwogICAgICAgIAogICAgICAgIC8vIEdldCBhY2Nlc3MgdG9rZW4KICAgICAgICAkcmVzcG9uc2UgPSBIdHRwOjphc0Zvcm0oKS0+cG9zdCgnaHR0cHM6Ly9vYXV0aDIuZ29vZ2xlYXBpcy5jb20vdG9rZW4nLCBbCiAgICAgICAgICAgICdncmFudF90eXBlJyA9PiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6and0LWJlYXJlcicsCiAgICAgICAgICAgICdhc3NlcnRpb24nID0+ICRqd3QKICAgICAgICBdKTsKICAgICAgICAKICAgICAgICBpZiAoISRyZXNwb25zZS0+c3VjY2Vzc2Z1bCgpKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdGYWlsZWQgdG8gZ2V0IEZDTSBhY2Nlc3MgdG9rZW4nLCBbCiAgICAgICAgICAgICAgICAncmVzcG9uc2UnID0+ICRyZXNwb25zZS0+anNvbigpLAogICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJHJlc3BvbnNlLT5zdGF0dXMoKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkYWNjZXNzVG9rZW4gPSAkcmVzcG9uc2UtPmpzb24oKVsnYWNjZXNzX3Rva2VuJ107CiAgICAgICAgCiAgICAgICAgLy8gRW5zdXJlIGFsbCBkYXRhIHZhbHVlcyBhcmUgc3RyaW5ncwogICAgICAgICRzdHJpbmdEYXRhID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0sICRkYXRhKTsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgdGhlIGRhdGUgaW4gUm9tYW5pYW4KICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJGRhdGFbJ3N0YXJ0X2RhdGUnXSk7CiAgICAgICAgJGRheSA9ICRkYXRlLT5mb3JtYXQoJ2QnKTsKICAgICAgICAkbW9udGggPSAkdGhpcy0+Z2V0Um9tYW5pYW5Nb250aCgkZGF0ZS0+Zm9ybWF0KCdGJykpOwogICAgICAgICR5ZWFyID0gJGRhdGUtPmZvcm1hdCgnWScpOwogICAgICAgICR0aW1lID0gJGRhdGUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgJGZvcm1hdHRlZERhdGUgPSAieyRkYXl9IHskbW9udGh9IHskeWVhcn0geyR0aW1lfSI7CiAgICAgICAgCiAgICAgICAgLy8gU2VuZCBtZXNzYWdlIHVzaW5nIHRoZSBjb3JyZWN0IEZDTSBlbmRwb2ludAogICAgICAgICRmY21FbmRwb2ludCA9ICJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy97JHByb2plY3RJZH0vbWVzc2FnZXM6c2VuZCI7CiAgICAgICAgCiAgICAgICAgJG1lc3NhZ2VSZXNwb25zZSA9IEh0dHA6OndpdGhIZWFkZXJzKFsKICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICRhY2Nlc3NUb2tlbiwKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0pLT5wb3N0KCRmY21FbmRwb2ludCwgWwogICAgICAgICAgICAnbWVzc2FnZScgPT4gWwogICAgICAgICAgICAgICAgJ3Rva2VuJyA9PiAkdG9rZW4sCiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAnRXZlbmltZW50IG5vdScsCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknID0+ICRkYXRhWydsb2NhdGlvbiddID8gCiAgICAgICAgICAgICAgICAgICAgICAgICJ7JGRhdGFbJ3RpdGxlJ119IC0geyRkYXRhWydsb2NhdGlvbiddfVxueyRmb3JtYXR0ZWREYXRlfSIgOgogICAgICAgICAgICAgICAgICAgICAgICAieyRkYXRhWyd0aXRsZSddfVxueyRmb3JtYXR0ZWREYXRlfSIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ2RhdGEnID0+ICRzdHJpbmdEYXRhLAogICAgICAgICAgICAgICAgJ2FuZHJvaWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAncHJpb3JpdHknID0+ICdoaWdoJywKICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICdzb3VuZCcgPT4gJ2RlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdhcG5zJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdW5kJyA9PiAnZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgXQogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gJG1lc3NhZ2VSZXNwb25zZS0+c3VjY2Vzc2Z1bCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KFBvc3QgJHBvc3QpCiAgICB7CiAgICAgICAgJHRoaXMtPmF1dGhvcml6ZSgnZGVsZXRlJywgJHBvc3QpOwogICAgICAgIAogICAgICAgICRwb3N0LT5kZWxldGUoKTsKICAgICAgICAKICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbJ21lc3NhZ2UnID0+ICdFdmVudCBkZWxldGVkIHN1Y2Nlc3NmdWxseSddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5kZXgoKQogICAgewogICAgICAgICR1c2VyID0gYXV0aCgpLT51c2VyKCk7CiAgICAgICAgJGxvZGdlTWVtYmVyID0gJHVzZXItPmxvZGdlX21lbWJlcjsKCiAgICAgICAgaWYgKCEkbG9kZ2VNZW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL0V2ZW50cycsIFsKICAgICAgICAgICAgICAgICdldmVudHMnID0+IFtdLAogICAgICAgICAgICAgICAgJ3VzZXInID0+ICR1c2VyLAogICAgICAgICAgICAgICAgJ2xvZGdlJyA9PiBudWxsLAogICAgICAgICAgICAgICAgJ21lbWJlcnMnID0+IFtdCiAgICAgICAgICAgIF0pOwogICAgICAgIH0KCiAgICAgICAgLy8gTG9hZCB0aGUgbG9kZ2Ugd2l0aCBtZW1iZXJzIGNvdW50IGFuZCBkaWduaXR5CiAgICAgICAgJGxvZGdlID0gJGxvZGdlTWVtYmVyLT5sb2RnZTsKICAgICAgICAkbG9kZ2UtPmxvYWRDb3VudChbJ21lbWJlcnMnID0+IGZ1bmN0aW9uKCRxdWVyeSkgewogICAgICAgICAgICAkcXVlcnktPmpvaW4oJ3VzZXJzJywgJ2xvZGdlX21lbWJlcnMudXNlcl9pZCcsICc9JywgJ3VzZXJzLmlkJykKICAgICAgICAgICAgICAgICAgLT53aGVyZShmdW5jdGlvbigkcSkgewogICAgICAgICAgICAgICAgICAgICAgJHEtPndoZXJlKCd1c2Vycy5yb2xlJywgJ3VjZW5pYycpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdjYWxmYScpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+b3JXaGVyZSgndXNlcnMucm9sZScsICdtYWVzdHJ1Jyk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH1dKTsKCiAgICAgICAgJGxvZGdlLT5sb2FkQ291bnQoWydwcm9qZWN0cyBhcyB1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgnc3RhdHVzJywgJ2luX3Byb2dyZXNzJyk7CiAgICAgICAgfV0pOwoKICAgICAgICAvLyBMb2FkIHVwY29taW5nIGV2ZW50cyBjb3VudAogICAgICAgICR1cGNvbWluZ0V2ZW50c0NvdW50ID0gUG9zdDo6d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT53aGVyZUhhcygnZXZlbnQnLCBmdW5jdGlvbigkcXVlcnkpIHsKICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3N0YXJ0X2RhdGUnLCAnPicsIG5vdygpKTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAvLyBHZXQgYWxsIGV2ZW50cyBmb3IgdGhlIGxvZGdlCiAgICAgICAgJGV2ZW50cyA9IFBvc3Q6OndoZXJlSGFzKCdldmVudCcpCiAgICAgICAgICAgIC0+d2l0aChbJ2V2ZW50LnBvbGwudm90ZXMnLCAnYXV0aG9yJywgJ2xvZGdlJ10pCiAgICAgICAgICAgIC0+b3JkZXJCeSgnY3JlYXRlZF9hdCcsICdkZXNjJykKICAgICAgICAgICAgLT5nZXQoKQogICAgICAgICAgICAtPm1hcChmdW5jdGlvbiAoJHBvc3QpIHsKICAgICAgICAgICAgICAgICRldmVudERhdGEgPSBbCiAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkcG9zdC0+ZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICdkZXNjcmlwdGlvbicgPT4gJHBvc3QtPmV2ZW50LT5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJHBvc3QtPmV2ZW50LT5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgICdlbmRfZGF0ZScgPT4gJHBvc3QtPmV2ZW50LT5nZXRSYXdPcmlnaW5hbCgnZW5kX2RhdGUnKSwKICAgICAgICAgICAgICAgICAgICAnbG9jYXRpb24nID0+ICRwb3N0LT5ldmVudC0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkcG9zdC0+bG9kZ2VfaWQsCiAgICAgICAgICAgICAgICAgICAgJ2xvZGdlJyA9PiAkcG9zdC0+bG9kZ2UgPyBbCiAgICAgICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJHBvc3QtPmxvZGdlLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRwb3N0LT5sb2RnZS0+bmFtZQogICAgICAgICAgICAgICAgICAgIF0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgICdjcmVhdG9yJyA9PiAkcG9zdC0+YXV0aG9yID8gWwogICAgICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRwb3N0LT5hdXRob3ItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJHBvc3QtPmF1dGhvci0+Zmlyc3RfbmFtZSAuICcgJyAuICRwb3N0LT5hdXRob3ItPmxhc3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3JvbGUnID0+ICRwb3N0LT5hdXRob3ItPnJvbGUKICAgICAgICAgICAgICAgICAgICBdIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZmlsZV9wYXRoJyA9PiAkcG9zdC0+ZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICdmaWxlX25hbWUnID0+ICRwb3N0LT5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfc2l6ZScgPT4gJHBvc3QtPmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+ZXZlbnQtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAncG9sbCcgPT4gJHBvc3QtPmV2ZW50LT5wb2xsID8gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+ICRwb3N0LT5ldmVudC0+cG9sbC0+b3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19tdWx0aXBsZV9jaG9pY2UnID0+ICRwb3N0LT5ldmVudC0+cG9sbC0+aXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZvdGVzJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZvdGVfY291bnRzJyA9PiAkcG9zdC0+ZXZlbnQtPnBvbGwtPnZvdGVfY291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgIF0gOiBudWxsCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJGV2ZW50RGF0YTsKICAgICAgICAgICAgfSk7CgogICAgICAgIC8vIEdldCBhbGwgbWVtYmVycyBmb3IgdGhlIGxvZGdlCiAgICAgICAgJG1lbWJlcnMgPSAkbG9kZ2UtPnVzZXJzKCkKICAgICAgICAgICAgLT53aGVyZUluKCdyb2xlJywgWyd1Y2VuaWMnLCAnY2FsZmEnLCAnbWFlc3RydSddKQogICAgICAgICAgICAtPmdldCgpOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdNZW1iZXIvRXZlbnRzJywgWwogICAgICAgICAgICAnZXZlbnRzJyA9PiAkZXZlbnRzLAogICAgICAgICAgICAndXNlcicgPT4gJHVzZXIsCiAgICAgICAgICAgICdsb2RnZScgPT4gWwogICAgICAgICAgICAgICAgJ2lkJyA9PiAkbG9kZ2UtPmlkLAogICAgICAgICAgICAgICAgJ25hbWUnID0+ICRsb2RnZS0+bmFtZSwKICAgICAgICAgICAgICAgICdhZGRyZXNzJyA9PiAkbG9kZ2UtPmFkZHJlc3MsCiAgICAgICAgICAgICAgICAnY2l0eScgPT4gJGxvZGdlLT5jaXR5LAogICAgICAgICAgICAgICAgJ21lbWJlcnNfY291bnQnID0+ICRsb2RnZS0+bWVtYmVyc19jb3VudCwKICAgICAgICAgICAgICAgICd1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50JyA9PiAkbG9kZ2UtPnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQsCiAgICAgICAgICAgICAgICAndXBjb21pbmdfZXZlbnRzX2NvdW50JyA9PiAkdXBjb21pbmdFdmVudHNDb3VudAogICAgICAgICAgICBdLAogICAgICAgICAgICAnbWVtYmVycycgPT4gJG1lbWJlcnMKICAgICAgICBdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKFJlcXVlc3QgJHJlcXVlc3QsIFBvc3QgJHBvc3QpCiAgICB7CiAgICAgICAgJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+ICdudWxsYWJsZXxzdHJpbmcnLAogICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJ3JlcXVpcmVkfGRhdGUnLAogICAgICAgICAgICAnZW5kX2RhdGUnID0+ICdudWxsYWJsZXxkYXRlfGFmdGVyX29yX2VxdWFsOnN0YXJ0X2RhdGUnLAogICAgICAgICAgICAnbG9jYXRpb24nID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJ3JlcXVpcmVkfGV4aXN0czpwb3N0X2NhdGVnb3JpZXMsaWQnLAogICAgICAgICAgICAnbG9kZ2VfaWQnID0+ICdyZXF1aXJlZHxleGlzdHM6bG9kZ2VzLGlkJywKICAgICAgICAgICAgJ3BvbGxfcXVlc3Rpb24nID0+ICdzb21ldGltZXN8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAncG9sbF9vcHRpb25zJyA9PiAnc29tZXRpbWVzfGFycmF5JywKICAgICAgICAgICAgJ3BvbGxfb3B0aW9ucy4qJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAnc29tZXRpbWVzfGJvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5X25vdycgPT4gJ2Jvb2xlYW4nLAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICdib29sZWFuJywKICAgICAgICAgICAgJ2ZpbGVzJyA9PiAnbnVsbGFibGV8YXJyYXknLAogICAgICAgICAgICAnZmlsZXMuKicgPT4gJ2ZpbGV8bWltZXM6cGRmLGRvYyxkb2N4LHR4dHxtYXg6MTAyNDAnIC8vIDEwTUIgbWF4CiAgICAgICAgXSk7CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zdAogICAgICAgICRwb3N0LT51cGRhdGUoWwogICAgICAgICAgICAnY29udGVudCcgPT4gJHJlcXVlc3QtPnRpdGxlLAogICAgICAgICAgICAnY2F0ZWdvcnlfaWQnID0+ICRyZXF1ZXN0LT5jYXRlZ29yeV9pZCwKICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkcmVxdWVzdC0+bG9kZ2VfaWQsCiAgICAgICAgXSk7CgogICAgICAgIC8vIEhhbmRsZSBmaWxlIHJlbW92YWwgaWYgcmVxdWVzdGVkCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXMoJ3JlbW92ZV9maWxlJykgJiYgJHJlcXVlc3QtPnJlbW92ZV9maWxlID09PSAnMScpIHsgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCRwb3N0LT5maWxlX3BhdGgpIHsKICAgICAgICAgICAgICAgICRvbGRGaWxlUGF0aCA9ICRwb3N0LT5maWxlX3BhdGg7CiAgICAgICAgICAgICAgICBcU3RvcmFnZTo6ZGlzaygncHVibGljJyktPmRlbGV0ZSgkcG9zdC0+ZmlsZV9wYXRoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcG9zdC0+ZmlsZV9wYXRoID0gbnVsbDsKICAgICAgICAgICAgJHBvc3QtPmZpbGVfbmFtZSA9IG51bGw7CiAgICAgICAgICAgICRwb3N0LT5maWxlX3R5cGUgPSBudWxsOwogICAgICAgICAgICAkcG9zdC0+ZmlsZV9zaXplID0gbnVsbDsKICAgICAgICAgICAgJHBvc3QtPnNhdmUoKTsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBuZXcgZmlsZSB1cGxvYWQKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc0ZpbGUoJ2ZpbGVzJykpIHsgICAgICAgICAgICAKICAgICAgICAgICAgLy8gR2V0IHRoZSBmaXJzdCBmaWxlIGZyb20gdGhlIGFycmF5CiAgICAgICAgICAgICRmaWxlcyA9ICRyZXF1ZXN0LT5maWxlKCdmaWxlcycpOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpID4gMCkgewogICAgICAgICAgICAgICAgJGZpbGUgPSAkZmlsZXNbMF07CiAgICAgICAgICAgICAgICAkcGF0aCA9ICRmaWxlLT5zdG9yZSgncG9zdHMvJyAuICRwb3N0LT5sb2RnZV9pZCwgJ3B1YmxpYycpOwogICAgICAgICAgICAgICAgJHBvc3QtPnVwZGF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGF0aCcgPT4gJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfbmFtZScgPT4gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3R5cGUnID0+ICRmaWxlLT5nZXRDbGllbnRNaW1lVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3NpemUnID0+ICRmaWxlLT5nZXRTaXplKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50CiAgICAgICAgJGV2ZW50ID0gJHBvc3QtPmV2ZW50OwogICAgICAgICRldmVudC0+dXBkYXRlKFsKICAgICAgICAgICAgJ3RpdGxlJyA9PiAkcmVxdWVzdC0+dGl0bGUsCiAgICAgICAgICAgICdkZXNjcmlwdGlvbicgPT4gJHJlcXVlc3QtPmRlc2NyaXB0aW9uID86IG51bGwsCiAgICAgICAgICAgICdzdGFydF9kYXRlJyA9PiAkcmVxdWVzdC0+c3RhcnRfZGF0ZSwKICAgICAgICAgICAgJ2VuZF9kYXRlJyA9PiAkcmVxdWVzdC0+ZW5kX2RhdGUgPzogbnVsbCwKICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkcmVxdWVzdC0+bG9jYXRpb24gPzogbnVsbCwKICAgICAgICAgICAgJ25vdGlmeV9ub3cnID0+ICRyZXF1ZXN0LT5ub3RpZnlfbm93LAogICAgICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICRyZXF1ZXN0LT5ub3RpZnlfMjRoX2JlZm9yZQogICAgICAgIF0pOwoKICAgICAgICAvLyBIYW5kbGUgcG9sbCBjcmVhdGlvbi91cGRhdGUKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhc19wb2xsKSB7CiAgICAgICAgICAgIGlmICgkZXZlbnQtPnBvbGwpIHsKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBwb2xsCiAgICAgICAgICAgICAgICAkb2xkT3B0aW9ucyA9ICRldmVudC0+cG9sbC0+b3B0aW9uczsKICAgICAgICAgICAgICAgICRuZXdPcHRpb25zID0gJHJlcXVlc3QtPnBvbGxfb3B0aW9uczsKICAgICAgICAgICAgICAgICRpc0NoYW5naW5nVG9TaW5nbGVDaG9pY2UgPSAhJGV2ZW50LT5wb2xsLT5pc19tdWx0aXBsZV9jaG9pY2UgJiYgJHJlcXVlc3QtPmlzX211bHRpcGxlX2Nob2ljZTsKCiAgICAgICAgICAgICAgICAkZXZlbnQtPnBvbGwtPnVwZGF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcmVxdWVzdC0+cG9sbF9xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gJHJlcXVlc3QtPnBvbGxfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAkcmVxdWVzdC0+aXNfbXVsdGlwbGVfY2hvaWNlCiAgICAgICAgICAgICAgICBdKTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgZXhpc3Rpbmcgdm90ZXMKICAgICAgICAgICAgICAgICRleGlzdGluZ1ZvdGVzID0gJGV2ZW50LT5wb2xsLT52b3RlczsKCiAgICAgICAgICAgICAgICBpZiAoJGV4aXN0aW5nVm90ZXMtPmlzTm90RW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRleGlzdGluZ1ZvdGVzIGFzICR2b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxlY3RlZE9wdGlvbnMgPSAkdm90ZS0+c2VsZWN0ZWRfb3B0aW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgJHVwZGF0ZWRPcHRpb25zID0gW107CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBjaGFuZ2luZyB0byBzaW5nbGUgY2hvaWNlLCB0YWtlIG9ubHkgdGhlIGZpcnN0IHNlbGVjdGVkIG9wdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzQ2hhbmdpbmdUb1NpbmdsZUNob2ljZSAmJiBjb3VudCgkc2VsZWN0ZWRPcHRpb25zKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxlY3RlZE9wdGlvbnMgPSBbcmVzZXQoJHNlbGVjdGVkT3B0aW9ucyldOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXAgb2xkIG9wdGlvbnMgdG8gbmV3IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHNlbGVjdGVkT3B0aW9ucyBhcyAkb3B0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5kZXggPSBhcnJheV9zZWFyY2goJG9wdGlvbiwgJG9sZE9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpbmRleCAhPT0gZmFsc2UgJiYgaXNzZXQoJG5ld09wdGlvbnNbJGluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdXBkYXRlZE9wdGlvbnNbXSA9ICRuZXdPcHRpb25zWyRpbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdm90ZSB3aXRoIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICR2b3RlLT51cGRhdGUoWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdGVkX29wdGlvbnMnID0+ICR1cGRhdGVkT3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgcG9sbCB0byBnZXQgdXBkYXRlZCB2b3RlIGNvdW50cwogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsLT5yZWZyZXNoKCk7CiAgICAgICAgICAgICAgICAkZXZlbnQtPnBvbGwtPmFwcGVuZCgndm90ZV9jb3VudHMnKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgcG9sbAogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsKCktPmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uJyA9PiAkcmVxdWVzdC0+cG9sbF9xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gJHJlcXVlc3QtPnBvbGxfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAnaXNfbXVsdGlwbGVfY2hvaWNlJyA9PiAkcmVxdWVzdC0+aXNfbXVsdGlwbGVfY2hvaWNlCiAgICAgICAgICAgICAgICBdKTsKCiAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSBldmVudCBtb2RlbCB0byBsb2FkIHRoZSBuZXcgcG9sbCByZWxhdGlvbnNoaXAKICAgICAgICAgICAgICAgICRldmVudC0+cmVmcmVzaCgpOwogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsLT5hcHBlbmQoJ3ZvdGVfY291bnRzJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZW1vdmUgcG9sbCBpZiBleGlzdHMKICAgICAgICAgICAgaWYgKCRldmVudC0+cG9sbCkgewogICAgICAgICAgICAgICAgJGV2ZW50LT5wb2xsLT5kZWxldGUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTG9hZCB0aGUgcG9zdCB3aXRoIGFsbCBuZWNlc3NhcnkgcmVsYXRpb25zaGlwcwogICAgICAgICRwb3N0LT5sb2FkKFsKICAgICAgICAgICAgJ2V2ZW50JywKICAgICAgICAgICAgJ2V2ZW50LnBvbGwudm90ZXMudXNlcicsCiAgICAgICAgICAgICdhdXRob3InLAogICAgICAgICAgICAnY2F0ZWdvcnknLAogICAgICAgICAgICAnbG9kZ2UnCiAgICAgICAgXSk7CgogICAgICAgIC8vIEFkZCB2b3RlX2NvdW50cyB0byB0aGUgcG9sbCBpZiBpdCBleGlzdHMKICAgICAgICBpZiAoJHBvc3QtPmV2ZW50LT5wb2xsKSB7CiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB2b3RlIGNvdW50cyBmcm9tIHRoZSBhY3R1YWwgdm90ZXMKICAgICAgICAgICAgJHZvdGVDb3VudHMgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJHBvc3QtPmV2ZW50LT5wb2xsLT5vcHRpb25zIGFzICRvcHRpb24pIHsKICAgICAgICAgICAgICAgICR2b3RlQ291bnRzWyRvcHRpb25dID0gJHBvc3QtPmV2ZW50LT5wb2xsLT52b3Rlcy0+ZmlsdGVyKGZ1bmN0aW9uKCR2b3RlKSB1c2UgKCRvcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5fYXJyYXkoJG9wdGlvbiwgJHZvdGUtPnNlbGVjdGVkX29wdGlvbnMpOwogICAgICAgICAgICAgICAgfSktPmNvdW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHBvc3QtPmV2ZW50LT5wb2xsLT52b3RlX2NvdW50cyA9ICR2b3RlQ291bnRzOwogICAgICAgIH0KCiAgICAgICAgLy8gQnJvYWRjYXN0IHRoZSBldmVudCB1cGRhdGUKICAgICAgICB0cnkgewogICAgICAgICAgICBicm9hZGNhc3QobmV3IEV2ZW50VXBkYXRlZCgkcG9zdCkpLT50b090aGVycygpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0V2ZW50Q29udHJvbGxlckB1cGRhdGUgLSBCcm9hZGNhc3QgZmFpbGVkJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKQogICAgICAgICAgICBdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRXZlbnQgdXBkYXRlZCBzdWNjZXNzZnVsbHknLAogICAgICAgICAgICAncG9zdCcgPT4gJHBvc3QKICAgICAgICBdKTsKICAgIH0KfQoAAAAAAAAAAKJgAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAARxsAAAAAAABHGwAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "resources/js/Layouts/AdminLayout.vue",
			"settings":
			{
				"buffer_size": 7642,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					6,
					2,
					"left_delete",
					null,
					"AgAAAJAXAAAAAAAAkBcAAAAAAAAJAAAAc206aGlkZGVujxcAAAAAAACPFwAAAAAAAAEAAAAg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACZFwAAAAAAAJAXAAAAAAAAAAAAAAAA8L8"
				],
				[
					11,
					1,
					"left_delete",
					null,
					"AQAAAIkXAAAAAAAAiRcAAAAAAAAGAAAAaGlkZGVu",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACJFwAAAAAAAI8XAAAAAAAAAAAAAAAA8L8"
				],
				[
					14,
					2,
					"left_delete",
					null,
					"AgAAAHIXAAAAAAAAchcAAAAAAAAYAAAAICAgICAgICAgICAgICAgIGNsYXNzPSIicRcAAAAAAABxFwAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACKFwAAAAAAAHIXAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Components/Member/CreateEventModal.vue",
			"settings":
			{
				"buffer_size": 16062,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					4,
					2,
					"left_delete",
					null,
					"AgAAAGgGAAAAAAAAaAYAAAAAAAA9AAAAICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBldmVudCB3aXRoIGZvcm0gZGF0YTonLCBmb3JtKTsKICAgIGcGAAAAAAAAZwYAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAClBgAAAAAAAGgGAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					2,
					"left_delete",
					null,
					"AgAAAIYNAAAAAAAAhg0AAAAAAABMAAAAICAgIGNvbnNvbGUubG9nKCdTdWJtaXR0aW5nIGZvcm0gZGF0YTonLCBPYmplY3QuZnJvbUVudHJpZXMoZm9ybURhdGEpKTsKICAgIIUNAAAAAAAAhQ0AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADSDQAAAAAAAIYNAAAAAAAAAAAAAAAA8L8"
				],
				[
					13,
					1,
					"left_delete",
					null,
					"AgAAAO0NAAAAAAAA7Q0AAAAAAAA2AAAAICAgICAgICAgICAgY29uc29sZS5sb2coJ0V2ZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk77A0AAAAAAADsDQAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAjDgAAAAAAAO0NAAAAAAAAAAAAAAAA8L8"
				],
				[
					21,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAABBPAAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNb2RhbCBmcm9tICdAL0NvbXBvbmVudHMvTW9kYWwudnVlJzsKaW1wb3J0IElucHV0TGFiZWwgZnJvbSAnQC9Db21wb25lbnRzL0lucHV0TGFiZWwudnVlJzsKaW1wb3J0IFRleHRJbnB1dCBmcm9tICdAL0NvbXBvbmVudHMvVGV4dElucHV0LnZ1ZSc7CmltcG9ydCBUZXh0YXJlYSBmcm9tICdAL0NvbXBvbmVudHMvVGV4dGFyZWEudnVlJzsKaW1wb3J0IElucHV0RXJyb3IgZnJvbSAnQC9Db21wb25lbnRzL0lucHV0RXJyb3IudnVlJzsKaW1wb3J0IFByaW1hcnlCdXR0b24gZnJvbSAnQC9Db21wb25lbnRzL1ByaW1hcnlCdXR0b24udnVlJzsKaW1wb3J0IERhdGVwaWNrZXIgZnJvbSAnQHZ1ZXBpYy92dWUtZGF0ZXBpY2tlcic7CmltcG9ydCAnQHZ1ZXBpYy92dWUtZGF0ZXBpY2tlci9kaXN0L21haW4uY3NzJzsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgc2hvdzogewogICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBjYXRlZ29yaWVzOiB7CiAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgZGVmYXVsdDogKCkgPT4gW10KICAgIH0sCiAgICBjYXRlZ29yeTogewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICB9LAogICAgdXNlcjogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfQp9KTsKCmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2Nsb3NlJywgJ2V2ZW50LWNyZWF0ZWQnXSk7Cgpjb25zdCBmb3JtID0gdXNlRm9ybSh7CiAgICB0aXRsZTogJycsCiAgICBkZXNjcmlwdGlvbjogJycsCiAgICBzdGFydF9kYXRlOiAnJywKICAgIGxvY2F0aW9uOiAnJywKICAgIGhhc19wb2xsOiBmYWxzZSwKICAgIHBvbGxfcXVlc3Rpb246ICcnLAogICAgcG9sbF9vcHRpb25zOiBbJycsICcnXSwKICAgIGlzX211bHRpcGxlX2Nob2ljZTogZmFsc2UsCiAgICBjYXRlZ29yeV9pZDogbnVsbCwKICAgIGxvZGdlX2lkOiBudWxsLAogICAgZmlsZXM6IFtdLAogICAgbm90aWZ5X25vdzogZmFsc2UsCiAgICBub3RpZnlfMjRoX2JlZm9yZTogZmFsc2UKfSk7Cgpjb25zdCBldmVudEZpbGVMaXN0ID0gcmVmKFtdKTsKY29uc3QgZXZlbnRGaWxlSW5wdXQgPSByZWYobnVsbCk7Cgpjb25zdCBmb3JtYXRGaWxlU2l6ZSA9IChieXRlcykgPT4gewogICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gJzAgQnl0ZXMnOwogICAgCiAgICBjb25zdCBrID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQiddOwogICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpOwogICAgCiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IGNyZWF0ZUV2ZW50ID0gKCkgPT4gewogICAgaWYgKGZvcm0uaGFzX3BvbGwpIHsKICAgICAgICAvLyBWYWxpZGF0ZSBwb2xsIG9wdGlvbnMKICAgICAgICBpZiAoZm9ybS5wb2xsX29wdGlvbnMubGVuZ3RoIDwgMikgewogICAgICAgICAgICBhbGVydCgnUGxlYXNlIGFkZCBhdCBsZWFzdCB0d28gcG9sbCBvcHRpb25zJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3QgZHVwbGljYXRlT3B0aW9ucyA9IGZvcm0ucG9sbF9vcHRpb25zLmZpbHRlcigob3B0aW9uLCBpbmRleCkgPT4KICAgICAgICAgICAgZm9ybS5wb2xsX29wdGlvbnMuaW5kZXhPZihvcHRpb24pICE9PSBpbmRleAogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgaWYgKGR1cGxpY2F0ZU9wdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBhbGVydCgnUG9sbCBvcHRpb25zIG11c3QgYmUgdW5pcXVlJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIFNldCBjYXRlZ29yeV9pZCBhbmQgbG9kZ2VfaWQgaWYgbm90IGFscmVhZHkgc2V0CiAgICBpZiAoIWZvcm0uY2F0ZWdvcnlfaWQpIHsKICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHByb3BzLmNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LnNsdWcgPT09IHByb3BzLmNhdGVnb3J5KTsKICAgICAgICBpZiAoY2F0ZWdvcnkpIHsKICAgICAgICAgICAgZm9ybS5jYXRlZ29yeV9pZCA9IGNhdGVnb3J5LmlkOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKCFmb3JtLmxvZGdlX2lkICYmIHByb3BzLmxvZGdlKSB7CiAgICAgICAgZm9ybS5sb2RnZV9pZCA9IHByb3BzLmxvZGdlLmlkOwogICAgfQogICAgCiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgZm9ybURhdGEuYXBwZW5kKCd0aXRsZScsIGZvcm0udGl0bGUpOwogICAgZm9ybURhdGEuYXBwZW5kKCdkZXNjcmlwdGlvbicsIGZvcm0uZGVzY3JpcHRpb24pOwogICAgZm9ybURhdGEuYXBwZW5kKCdzdGFydF9kYXRlJywgZm9ybS5zdGFydF9kYXRlKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnbG9jYXRpb24nLCBmb3JtLmxvY2F0aW9uKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnaGFzX3BvbGwnLCBmb3JtLmhhc19wb2xsID8gJzEnIDogJzAnKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnY2F0ZWdvcnlfaWQnLCBmb3JtLmNhdGVnb3J5X2lkKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnbG9kZ2VfaWQnLCBmb3JtLmxvZGdlX2lkKTsKICAgIGZvcm1EYXRhLmFwcGVuZCgnbm90aWZ5X25vdycsIGZvcm0ubm90aWZ5X25vdyA/ICcxJyA6ICcwJyk7CiAgICBmb3JtRGF0YS5hcHBlbmQoJ25vdGlmeV8yNGhfYmVmb3JlJywgZm9ybS5ub3RpZnlfMjRoX2JlZm9yZSA/ICcxJyA6ICcwJyk7CiAgICBmb3JtRGF0YS5hcHBlbmQoJ2F1dGhvcl9pZCcsIHByb3BzLnVzZXIuaWQpOwogICAgCiAgICBpZiAoZm9ybS5oYXNfcG9sbCkgewogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncG9sbF9xdWVzdGlvbicsIGZvcm0ucG9sbF9xdWVzdGlvbik7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwb2xsX29wdGlvbnMnLCBKU09OLnN0cmluZ2lmeShmb3JtLnBvbGxfb3B0aW9ucykpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaXNfbXVsdGlwbGVfY2hvaWNlJywgZm9ybS5pc19tdWx0aXBsZV9jaG9pY2UgPyAnMScgOiAnMCcpOwogICAgfQogICAgCiAgICAvLyBBcHBlbmQgZmlsZXMgdG8gRm9ybURhdGEKICAgIGZvcm0uZmlsZXMuZm9yRWFjaCgoZmlsZSwgaW5kZXgpID0+IHsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYGZpbGVzWyR7aW5kZXh9XWAsIGZpbGUpOwogICAgfSk7CiAgICAKICAgIGZvcm0ucG9zdChyb3V0ZSgnbWVtYmVyLmV2ZW50cy5zdG9yZScpLCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsKICAgICAgICAgICAgZXZlbnRGaWxlTGlzdC52YWx1ZSA9IFtdOwogICAgICAgICAgICBlbWl0KCdldmVudC1jcmVhdGVkJyk7CiAgICAgICAgICAgIGVtaXQoJ2Nsb3NlJyk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiAoZXJyb3JzKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGV2ZW50OicsIGVycm9ycyk7CiAgICAgICAgfQogICAgfSk7Cn07Cgpjb25zdCBoYW5kbGVFdmVudEZpbGVVcGxvYWQgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbShldmVudC50YXJnZXQuZmlsZXMpOwogICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTsgLy8gT25seSB0YWtlIHRoZSBmaXJzdCBmaWxlCiAgICAKICAgIC8vIENoZWNrIGlmIGZpbGUgdHlwZSBpcyBhbGxvd2VkCiAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSBbJ2FwcGxpY2F0aW9uL3BkZicsICdhcHBsaWNhdGlvbi9tc3dvcmQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLCAndGV4dC9wbGFpbiddOwogICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkgewogICAgICAgIGFsZXJ0KCdPbmx5IFBERiwgRE9DLCBET0NYLCBhbmQgVFhUIGZpbGVzIGFyZSBhbGxvd2VkJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAvLyBDaGVjayBmaWxlIHNpemUgKDEwTUIgbWF4KQogICAgaWYgKGZpbGUuc2l6ZSA+IDEwICogMTAyNCAqIDEwMjQpIHsKICAgICAgICBhbGVydCgnRmlsZSBzaXplIG11c3QgYmUgbGVzcyB0aGFuIDEwTUInKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgZmlsZXMgd2l0aCB0aGUgbmV3IG9uZQogICAgZXZlbnRGaWxlTGlzdC52YWx1ZSA9IFtmaWxlXTsKICAgIGZvcm0uZmlsZXMgPSBbZmlsZV07Cn07Cgpjb25zdCByZW1vdmVFdmVudEZpbGUgPSAoaW5kZXgpID0+IHsKICAgIGV2ZW50RmlsZUxpc3QudmFsdWUuc3BsaWNlKGluZGV4LCAxKTsKICAgIGZvcm0uZmlsZXMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCmNvbnN0IGFkZFBvbGxPcHRpb24gPSAoKSA9PiB7CiAgICBmb3JtLnBvbGxfb3B0aW9ucy5wdXNoKCcnKTsKfTsKCmNvbnN0IHJlbW92ZVBvbGxPcHRpb24gPSAoaW5kZXgpID0+IHsKICAgIGZvcm0ucG9sbF9vcHRpb25zLnNwbGljZShpbmRleCwgMSk7Cn07Cgpjb25zdCB1cGRhdGVQb2xsT3B0aW9uID0gKGluZGV4LCB2YWx1ZSkgPT4gewogICAgZm9ybS5wb2xsX29wdGlvbnNbaW5kZXhdID0gdmFsdWU7Cn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPE1vZGFsIDpzaG93PSJzaG93IiBAY2xvc2U9ImVtaXQoJ2Nsb3NlJykiPgogICAgICAgIDxkaXYgY2xhc3M9InAtNiI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTQiPgogICAgICAgICAgICAgICAgQ3JlYXRlIEV2ZW50CiAgICAgICAgICAgIDwvaDI+CgogICAgICAgICAgICA8Zm9ybSBAc3VibWl0LnByZXZlbnQ9ImNyZWF0ZUV2ZW50Ij4KICAgICAgICAgICAgICAgIDwhLS0gRXZlbnQgRGV0YWlscyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJ0aXRsZSIgdmFsdWU9IkV2ZW50IFRpdGxlIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0idGl0bGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS50aXRsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIGNsYXNzPSJtdC0yIiA6bWVzc2FnZT0iZm9ybS5lcnJvcnMudGl0bGUiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZGVzY3JpcHRpb24iIHZhbHVlPSJEZXNjcmlwdGlvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGVzY3JpcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJmb3JtLmRlc2NyaXB0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRFcnJvciBjbGFzcz0ibXQtMiIgOm1lc3NhZ2U9ImZvcm0uZXJyb3JzLmRlc2NyaXB0aW9uIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9InN0YXJ0X2RhdGUiIHZhbHVlPSJEYXRlIGFuZCBUaW1lIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8RGF0ZXBpY2tlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5zdGFydF9kYXRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOmVuYWJsZS10aW1lLXBpY2tlcj0idHJ1ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmb3JtYXQ9Iid5eXl5LU1NLWRkIEhIOm1tJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIGNsYXNzPSJtdC0yIiA6bWVzc2FnZT0iZm9ybS5lcnJvcnMuc3RhcnRfZGF0ZSIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJsb2NhdGlvbiIgdmFsdWU9IkxvY2F0aW9uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ibG9jYXRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5sb2NhdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgY2xhc3M9Im10LTIiIDptZXNzYWdlPSJmb3JtLmVycm9ycy5sb2NhdGlvbiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBQb2xsIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9yZGVyLXQgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iaGFzX3BvbGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5oYXNfcG9sbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJoYXNfcG9sbCIgdmFsdWU9IkFkZCBQb2xsIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iZm9ybS5oYXNfcG9sbCIgY2xhc3M9Im10LTQgc3BhY2UteS00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJwb2xsX3F1ZXN0aW9uIiB2YWx1ZT0iUG9sbCBRdWVzdGlvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJwb2xsX3F1ZXN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImZvcm0ucG9sbF9xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnJlcXVpcmVkPSJmb3JtLmhhc19wb2xsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgY2xhc3M9Im10LTIiIDptZXNzYWdlPSJmb3JtLmVycm9ycy5wb2xsX3F1ZXN0aW9uIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCB2YWx1ZT0iUG9sbCBPcHRpb25zIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb24sIGluZGV4KSBpbiBmb3JtLnBvbGxfb3B0aW9ucyIgOmtleT0iaW5kZXgiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbXQtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleC0xIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5wb2xsX29wdGlvbnNbaW5kZXhdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnJlcXVpcmVkPSJmb3JtLmhhc19wb2xsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlucHV0PSIoZSkgPT4gdXBkYXRlUG9sbE9wdGlvbihpbmRleCwgZS50YXJnZXQudmFsdWUpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InJlbW92ZVBvbGxPcHRpb24oaW5kZXgpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJmb3JtLnBvbGxfb3B0aW9ucy5sZW5ndGggPiAyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYgMThMMTggNk02IDZsMTIgMTIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iYWRkUG9sbE9wdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgdGV4dC1zbSB0ZXh0LWluZGlnby02MDAgaG92ZXI6dGV4dC1pbmRpZ28tODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZGQgT3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImlzX211bHRpcGxlX2Nob2ljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5pc19tdWx0aXBsZV9jaG9pY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1pbmRpZ28tMzAwIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1pbmRpZ28tMjAwIGZvY3VzOnJpbmctb3BhY2l0eS01MCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iaXNfbXVsdGlwbGVfY2hvaWNlIiB2YWx1ZT0iQWxsb3cgTXVsdGlwbGUgQ2hvaWNlIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIE5vdGlmaWNhdGlvbiBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlci10IHB0LTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJub3RpZnlfbm93IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJmb3JtLm5vdGlmeV9ub3ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1pbmRpZ28tMzAwIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1pbmRpZ28tMjAwIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9Im5vdGlmeV9ub3ciIHZhbHVlPSJOb3RpZnkgdXNlcnMgbm93IGFib3V0IHRoaXMgZXZlbnQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5vdGlmeV8yNGhfYmVmb3JlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJmb3JtLm5vdGlmeV8yNGhfYmVmb3JlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLWluZGlnby0yMDAgZm9jdXM6cmluZy1vcGFjaXR5LTUwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJub3RpZnlfMjRoX2JlZm9yZSIgdmFsdWU9Ik5vdGlmeSB1c2VycyAyNCBob3VycyBiZWZvcmUgdGhlIGV2ZW50IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIEBjbGljaz0iZXZlbnRGaWxlSW5wdXQuY2xpY2soKSIgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGxlYWRpbmctNCBmb250LW1lZGl1bSByb3VuZGVkLW1kIHRleHQtZ3JheS03MDAgYmctZ3JheS0xMDAgaG92ZXI6YmctZ3JheS0yMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy00IGgtNCBtci0yIiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBGaWxlcwogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIHJlZj0iZXZlbnRGaWxlSW5wdXQiIEBjaGFuZ2U9ImhhbmRsZUV2ZW50RmlsZVVwbG9hZCIgbXVsdGlwbGUgYWNjZXB0PSIucGRmLC5kb2MsLmRvY3gsLnR4dCIgY2xhc3M9ImhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWxlIExpc3QgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJldmVudEZpbGVMaXN0Lmxlbmd0aCA+IDAiIGNsYXNzPSJtdC0yIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihmaWxlLCBpbmRleCkgaW4gZXZlbnRGaWxlTGlzdCIgOmtleT0iaW5kZXgiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYmctZ3JheS01MCBwLTIgcm91bmRlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNzAwIj57eyBmaWxlLm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgQGNsaWNrPSJyZW1vdmVFdmVudEZpbGUoaW5kZXgpIiBjbGFzcz0idGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy00IGgtNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiAxOEwxOCA2TTYgNmwxMiAxMiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gRm9vdGVyIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNiBmbGV4IGp1c3RpZnktZW5kIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZW1pdCgnY2xvc2UnKSIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC00IHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gdGV4dC1zbSBmb250LW1lZGl1bSByb3VuZGVkLW1kIHRleHQtZ3JheS03MDAgYmctd2hpdGUgaG92ZXI6YmctZ3JheS01MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1pbmRpZ28tNTAwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPFByaW1hcnlCdXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic3VibWl0IgogICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9ImZvcm0ucHJvY2Vzc2luZyIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBFdmVudAogICAgICAgICAgICAgICAgICAgIDwvUHJpbWFyeUJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CiAgICA8L01vZGFsPgo8L3RlbXBsYXRlPgoAAAAAAAAAALQ+AAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADsDQAAAAAAAOwNAAAAAAAAAAAAAAAA8L8"
				],
				[
					32,
					1,
					"insert",
					{
						"characters": "(optional"
					},
					"CQAAAAMbAAAAAAAABBsAAAAAAAAAAAAABBsAAAAAAAAFGwAAAAAAAAAAAAAFGwAAAAAAAAYbAAAAAAAAAAAAAAYbAAAAAAAABxsAAAAAAAAAAAAABxsAAAAAAAAIGwAAAAAAAAAAAAAIGwAAAAAAAAkbAAAAAAAAAAAAAAkbAAAAAAAAChsAAAAAAAAAAAAAChsAAAAAAAALGwAAAAAAAAAAAAALGwAAAAAAAAwbAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAADGwAAAAAAAAMbAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					1,
					"insert",
					{
						"characters": ")"
					},
					"AQAAAAwbAAAAAAAADRsAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAMGwAAAAAAAAwbAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Components/Member/BottomMenu.vue",
			"settings":
			{
				"buffer_size": 3643,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"paste",
					null,
					"AgAAALUHAAAAAAAAxAcAAAAAAAAAAAAAxAcAAAAAAADEBwAAAAAAAA8AAABtZW1iZXIucHJvamVjdHM",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADEBwAAAAAAALUHAAAAAAAAAAAAAAAA8L8"
				],
				[
					6,
					1,
					"paste",
					null,
					"AgAAAJ8LAAAAAAAApQsAAAAAAAAAAAAApQsAAAAAAAClCwAAAAAAAA0AAABtZW1iZXIuZXZlbnRz",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACsCwAAAAAAAJ8LAAAAAAAAAAAAAAAA8L8"
				],
				[
					7,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAA6DwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgTGluayB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICB9Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImZpeGVkIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGJnLXdoaXRlIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBsZzpoaWRkZW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1hcm91bmQgaXRlbXMtY2VudGVyIGgtMTYiPgogICAgICAgICAgICA8IS0tIE1lbWJlcnMgLS0+CiAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLm1lbWJlcnMnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWJsdWUtNjAwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTEyIDQuMzU0YTQgNCAwIDExMCA1LjI5Mk0xNSAyMUgzdi0xYTYgNiAwIDAxMTIgMHYxem0wIDBoNnYtMWE2IDYgMCAwMC05LTUuMTk3TTEzIDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAweiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPSJsb2RnZT8ubWVtYmVyc19jb3VudCIgY2xhc3M9ImFic29sdXRlIC10b3AtMSAtcmlnaHQtMiBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHRleHQtWzEwcHhdIGgtNCBtaW4tdy1bMTZweF0gcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTAuNSI+CiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvZGdlLm1lbWJlcnNfY291bnQgfX0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPk1lbWJyaTwvc3Bhbj4KICAgICAgICAgICAgPC9MaW5rPgoKICAgICAgICAgICAgPCEtLSBEb2N1bWVudHMgLS0+CiAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLmRvY3VtZW50cycpIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbCB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtYmx1ZS02MDAiPgogICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiIC8+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPkRvY3VtZW50ZTwvc3Bhbj4KICAgICAgICAgICAgPC9MaW5rPgoKICAgICAgICAgICAgPCEtLSBQcm9qZWN0cyAtLT4KICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdtZW1iZXIucHJvaWVjdGUnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWJsdWUtNjAwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgNUg3YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMmgxMGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMmgtMk05IDVhMiAyIDAgMDAyIDJoMmEyIDIgMCAwMDItMk05IDVhMiAyIDAgMDEyLTJoMmEyIDIgMCAwMTIgMiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPSJsb2RnZT8udW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCIgY2xhc3M9ImFic29sdXRlIC10b3AtMSAtcmlnaHQtMiBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHRleHQtWzEwcHhdIGgtNCBtaW4tdy1bMTZweF0gcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTAuNSI+CiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvZGdlLnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQgfX0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPlByb2llY3RlPC9zcGFuPgogICAgICAgICAgICA8L0xpbms+CgogICAgICAgICAgICA8IS0tIEV2ZW50cyAtLT4KICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdldmVudHMnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBoLWZ1bGwgdGV4dC1ncmF5LTYwMCBob3Zlcjp0ZXh0LWJsdWUtNjAwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTggN1YzbTggNFYzbS05IDhoMTBNNSAyMWgxNGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0ibG9kZ2U/LnVwY29taW5nX2V2ZW50c19jb3VudCIgY2xhc3M9ImFic29sdXRlIC10b3AtMSAtcmlnaHQtMiBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHRleHQtWzEwcHhdIGgtNCBtaW4tdy1bMTZweF0gcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTAuNSI+CiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvZGdlLnVwY29taW5nX2V2ZW50c19jb3VudCB9fQogICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgbXQtMSI+RXZlbmltZW50ZTwvc3Bhbj4KICAgICAgICAgICAgPC9MaW5rPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvdGVtcGxhdGU+IAAAAAAAAAAAOw4AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAClCwAAAAAAAKULAAAAAAAAAAAAAAAA8L8"
				],
				[
					8,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAAA7DgAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgTGluayB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICB9Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImZpeGVkIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGJnLXdoaXRlIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBsZzpoaWRkZW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1hcm91bmQgcC0yIj4KICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdtZW1iZXIubWVtYmVycycpIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTcgMjBoNXYtMmEzIDMgMCAwMC01LjM1Ni0xLjg1N00xNyAyMEg3bTEwIDB2LTJjMC0uNjU2LS4xMjYtMS4yODMtLjM1Ni0xLjg1N003IDIwSDJ2LTJhMyAzIDAgMDE1LjM1Ni0xLjg1N003IDIwdi0yYzAtLjY1Ni4xMjYtMS4yODMuMzU2LTEuODU3bTAgMGE1LjAwMiA1LjAwMiAwIDAxOS4yODggME0xNSA3YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHptNiAzYTIgMiAwIDExLTQgMCAyIDIgMCAwMTQgMHpNNyAxMGEyIDIgMCAxMS00IDAgMiAyIDAgMDE0IDB6IiAvPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibG9kZ2UiIGNsYXNzPSJhYnNvbHV0ZSAtdG9wLTEgLXJpZ2h0LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctWzE2cHhdIGgtNCBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHJvdW5kZWQtZnVsbCBweC0wLjUiPgogICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2RnZS5tZW1iZXJzX2NvdW50IH19CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPk1lbWJyaTwvc3Bhbj4KICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5kb2N1bWVudHMnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik05IDEyaDZtLTYgNGg2bTIgNUg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBtdC0xIj5Eb2N1bWVudGU8L3NwYW4+CiAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdtZW1iZXIucHJvaWVjdGUnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgM2ExIDEgMCAwMDAgMmg2YTEgMSAwIDEwMC0ySDd6TTQgN2ExIDEgMCAwMTEtMWgxMGExIDEgMCAxMTAgMkg1YTEgMSAwIDAxLTEtMXpNMiAxMWEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnY0YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMnYtNHoiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgLXRvcC0xIC1yaWdodC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LVsxNnB4XSBoLTQgYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCB0ZXh0LVsxMHB4XSBmb250LW1lZGl1bSByb3VuZGVkLWZ1bGwgcHgtMC41Ij4KICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9kZ2U/LnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQgfHwgMCB9fQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBtdC0xIj5Qcm9pZWN0ZTwvc3Bhbj4KICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ2V2ZW50cycpIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSAtdG9wLTEgLXJpZ2h0LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctWzE2cHhdIGgtNCBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHJvdW5kZWQtZnVsbCBweC0wLjUiPgogICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAgfX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgbXQtMSI+RXZlbmltZW50ZTwvc3Bhbj4KICAgICAgICAgICAgPC9MaW5rPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvdGVtcGxhdGU+IAAAAAAAAAAAOw4AAAAAAAAAAAAAAAAAAAAAAAA7DgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAClCwAAAAAAAKULAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Components/Member/LeftSidebar.vue",
			"settings":
			{
				"buffer_size": 6351,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			}
		},
		{
			"file": "resources/js/Pages/Member/MembersGrid.vue",
			"settings":
			{
				"buffer_size": 20438,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					66,
					1,
					"insert",
					{
						"characters": "i"
					},
					"AQAAAOUOAAAAAAAA5g4AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADlDgAAAAAAAOUOAAAAAAAAAAAAAAAA8L8"
				],
				[
					69,
					1,
					"left_delete",
					null,
					"AQAAAOoOAAAAAAAA6g4AAAAAAAABAAAAZQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADrDgAAAAAAAOsOAAAAAAAAAAAAAAAA8L8"
				],
				[
					70,
					1,
					"insert",
					{
						"characters": "i"
					},
					"AQAAAOoOAAAAAAAA6w4AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqDgAAAAAAAOoOAAAAAAAAAAAAAAAA8L8"
				],
				[
					74,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACJTwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UsIHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIG1lbWJlcnM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICBkZWZhdWx0OiBudWxsCiAgICB9LAogICAgY2FuU3dpdGNoVmlldzogewogICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBjdXJyZW50VmlldzogewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKY29uc3Qgc3RhdHMgPSBjb21wdXRlZCgoKSA9PiBbCiAgICB7CiAgICAgICAgbGFiZWw6ICdUb3RhbCBNZW1icmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmxlbmd0aAogICAgfSwKICAgIHsKICAgICAgICBsYWJlbDogJ01hZXN0cmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ21hZXN0cnUnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdDYWxmZScsCiAgICAgICAgdmFsdWU6IHByb3BzLm1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnY2FsZmEnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdVY2VuaWNpJywKICAgICAgICB2YWx1ZTogcHJvcHMubWVtYmVycy5maWx0ZXIobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnKS5sZW5ndGgKICAgIH0KXSk7Cgpjb25zdCBhY3Rpb25zID0gWwogICAgewogICAgICAgIGxhYmVsOiAnQWRhdWfEgyBNZW1icnUgTm91JywKICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhZGQgbWVtYmVyIGZ1bmN0aW9uYWxpdHkKICAgICAgICB9CiAgICB9Cl07Cgpjb25zdCBjb3B5UmVnaXN0cmF0aW9uVXJsID0gKHVybCkgPT4gewogICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodXJsKS50aGVuKCgpID0+IHsKICAgICAgICAvLyBZb3UgY2FuIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlIGlmIHlvdSB3YW50CiAgICAgICAgYWxlcnQoJ0xpbmstdWwgYSBmb3N0IGNvcGlhdCDDrm4gY2xpcGJvYXJkIScpOwogICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0ZXh0OiAnLCBlcnIpOwogICAgfSk7Cn07Cgpjb25zdCBnZXRSb2xlQ29sb3IgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCc7CiAgICB9Cn07Cgpjb25zdCBnZXRSb2xlTGFiZWwgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSc7CiAgICAgICAgY2FzZSAnY2FsZmEnOgogICAgICAgICAgICByZXR1cm4gJ0NhbGbEgyc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdVY2VuaWMnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgfQp9OwoKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChldmVudElkKSA9PiB7CiAgICAvLyBJbXBsZW1lbnQgdGhlIGxvZ2ljIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZQogICAgCn07Cgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKICAgIH0KfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8SGVhZCB0aXRsZT0iTWVtYnJpIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6bG9kZ2U9ImxvZGdlIgogICAgICAgICAgICAgICAgOnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQ9ImxvZGdlPy51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICA6dXBjb21pbmdfZXZlbnRzX2NvdW50PSJsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleC0xIHAtNCBwYi0yMCc6IGlzTW9iaWxlLCAnZmxleC0xIG1sLVszNjBweF0gbXItWzM2MHB4XSBwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+TWVtYnJpaSBMb2ppaTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImNhblN3aXRjaFZpZXciIGNsYXNzPSJmbGV4IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9InJvdXRlKCdtZW1iZXIubWVtYmVycycsIHsgdmlldzogJ2dyaWQnIH0pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHgtMyBweS0yIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJjdXJyZW50VmlldyA9PT0gJ2dyaWQnID8gJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6YmctZ3JheS0xMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAzYTIgMiAwIDAwLTIgMnYyYTIgMiAwIDAwMiAyaDJhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJINXpNNSAxMWEyIDIgMCAwMC0yIDJ2MmEyIDIgMCAwMDIgMmgyYTIgMiAwIDAwMi0ydi0yYTIgMiAwIDAwLTItMkg1ek0xMSA1YTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0yVjV6TTExIDEzYTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0ydi0yeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpocmVmPSJyb3V0ZSgnbWVtYmVyLm1lbWJlcnMnLCB7IHZpZXc6ICdsaXN0JyB9KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudFZpZXcgPT09ICdsaXN0JyA/ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJyA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOmJnLWdyYXktMTAwJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xem0wIDRhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6bTAgNGExIDEgMCAwMTEtMWgxMmExIDEgMCAxMTAgMkg0YTEgMSAwIDAxLTEtMXptMCA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFsb2RnZSIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBzdW50ZcibaSDDrm5yZWdpc3RyYXQgw65udHItbyBsb2rEgzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q29udGFjdGHIm2kgYWRtaW5pc3RyYXRvcnVsIHBlbnRydSBhIGZpIGFkxIN1Z2F0IMOubnRyLW8gbG9qxIMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPSJtZW1iZXJzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBleGlzdMSDIG1lbWJyaSDDrm4gbG9qxIM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS01MDAiPk1vbWVudGFuIG51IGV4aXN0xIMgYWzIm2kgbWVtYnJpIMOubiBsb2phIGR1bW5lYXZvYXN0csSDLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZSBjbGFzcz0ic3BhY2UteS04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFlc3RyaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICdtYWVzdHJ1JyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctcmVkLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZXN0cmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2dyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQnOiBpc01vYmlsZSwgJ2dyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTMgZ2FwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIG1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnbWFlc3RydScgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbGZlIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlcnMuc29tZShtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctb3JhbmdlLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIiA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieydiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0zJzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLnByb2ZpbGUnLCB7IHVzZXI6IG1lbWJlci51c2VyX2lkIH0pIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9Im1lbWJlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQobWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFsdD0ibWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9Insndy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBtYi0zIG9iamVjdC1jb3Zlcic6IGlzTW9iaWxlLCAndy0yNCBoLTI0IHJvdW5kZWQtZnVsbCBtYi00IG9iamVjdC1jb3Zlcic6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgOmNsYXNzPSJ7J3RleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgdGV4dC1jZW50ZXInOiBpc01vYmlsZSwgJ3RleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iZ2V0Um9sZUNvbG9yKG1lbWJlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvbGVMYWJlbChtZW1iZXIucm9sZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSB8fCBtZW1iZXIubWxucl9kaWduaXR5IiA6Y2xhc3M9InsnbXQtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTAuNSc6IGlzTW9iaWxlLCAnbXQtMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj5Mb2phOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IG1lbWJlci5sb2RnZV9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TUxOUjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubWxucl9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVWNlbmljaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnICYmIG0uc3RhdHVzID09PSAnYWN0aXZlJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCBmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3LTIgaC0yIHJvdW5kZWQtZnVsbCBiZy1ncmVlbi01MDAgbXItMiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVY2VuaWNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ3VjZW5pYycgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6ZXZlbnRzPSJldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtldmVudC5hdXRob3IuZmlyc3RfbmFtZX0gJHtldmVudC5hdXRob3IubGFzdF9uYW1lfWAKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZXZlbnQuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICB9KSkiCiAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKHsgb25seTogWydldmVudHMnXSB9KSIKICAgICAgICAgICAgLz4KCiAgICAgICAgICAgIDwhLS0gQm90dG9tIE1lbnUgLS0+CiAgICAgICAgICAgIDxCb3R0b21NZW51IHYtaWY9ImlzTW9iaWxlIiA6bG9kZ2U9ImxvZGdlIiAvPgogICAgICAgIDwvZGl2PgogICAgPC9NZW1iZXJMYXlvdXQ+CjwvdGVtcGxhdGU+Cgo8c3R5bGU+Cjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDhweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiAjQkNDMEM0OwogICAgYm9yZGVyLXJhZGl1czogNHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNBNEE3QUI7Cn0KPC9zdHlsZT4gAAAAAAAAAACJTwAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADsDgAAAAAAAN8OAAAAAAAAAAAAAAAA8L8"
				],
				[
					75,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACbTwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UsIHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIG1lbWJlcnM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICBkZWZhdWx0OiBudWxsCiAgICB9LAogICAgY2FuU3dpdGNoVmlldzogewogICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBjdXJyZW50VmlldzogewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKY29uc3Qgc3RhdHMgPSBjb21wdXRlZCgoKSA9PiBbCiAgICB7CiAgICAgICAgbGFiZWw6ICdUb3RhbCBNZW1icmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmxlbmd0aAogICAgfSwKICAgIHsKICAgICAgICBsYWJlbDogJ01hZXN0cmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ21hZXN0cnUnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdDYWxmZScsCiAgICAgICAgdmFsdWU6IHByb3BzLm1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnY2FsZmEnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdVY2VuaWNpJywKICAgICAgICB2YWx1ZTogcHJvcHMubWVtYmVycy5maWx0ZXIobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnKS5sZW5ndGgKICAgIH0KXSk7Cgpjb25zdCBhY3Rpb25zID0gWwogICAgewogICAgICAgIGxhYmVsOiAnQWRhdWfEgyBNZW1icnUgTm91JywKICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhZGQgbWVtYmVyIGZ1bmN0aW9uYWxpdHkKICAgICAgICB9CiAgICB9Cl07Cgpjb25zdCBjb3B5UmVnaXN0cmF0aW9uVXJsID0gKHVybCkgPT4gewogICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodXJsKS50aGVuKCgpID0+IHsKICAgICAgICAvLyBZb3UgY2FuIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlIGlmIHlvdSB3YW50CiAgICAgICAgYWxlcnQoJ0xpbmstdWwgYSBmb3N0IGNvcGlhdCDDrm4gY2xpcGJvYXJkIScpOwogICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0ZXh0OiAnLCBlcnIpOwogICAgfSk7Cn07Cgpjb25zdCBnZXRSb2xlQ29sb3IgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCc7CiAgICB9Cn07Cgpjb25zdCBnZXRSb2xlTGFiZWwgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSc7CiAgICAgICAgY2FzZSAnY2FsZmEnOgogICAgICAgICAgICByZXR1cm4gJ0NhbGbEgyc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdVY2VuaWMnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgfQp9OwoKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChldmVudElkKSA9PiB7CiAgICAvLyBJbXBsZW1lbnQgdGhlIGxvZ2ljIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZQogICAgCn07Cgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKICAgIH0KfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8SGVhZCB0aXRsZT0iTWVtYnJpIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6bG9kZ2U9ImxvZGdlIgogICAgICAgICAgICAgICAgOnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQ9ImxvZGdlPy51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICA6dXBjb21pbmdfZXZlbnRzX2NvdW50PSJsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleC0xIHAtNCBwYi0yMCc6IGlzTW9iaWxlLCAnZmxleC0xIG1sLVszNjBweF0gbXItWzM2MHB4XSBwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+TWVtYnJpaSBMb2ppaSB7eyBsb2RnZT8ubmFtZSB9fTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImNhblN3aXRjaFZpZXciIGNsYXNzPSJmbGV4IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9InJvdXRlKCdtZW1iZXIubWVtYmVycycsIHsgdmlldzogJ2dyaWQnIH0pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHgtMyBweS0yIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJjdXJyZW50VmlldyA9PT0gJ2dyaWQnID8gJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6YmctZ3JheS0xMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAzYTIgMiAwIDAwLTIgMnYyYTIgMiAwIDAwMiAyaDJhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJINXpNNSAxMWEyIDIgMCAwMC0yIDJ2MmEyIDIgMCAwMDIgMmgyYTIgMiAwIDAwMi0ydi0yYTIgMiAwIDAwLTItMkg1ek0xMSA1YTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0yVjV6TTExIDEzYTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0ydi0yeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpocmVmPSJyb3V0ZSgnbWVtYmVyLm1lbWJlcnMnLCB7IHZpZXc6ICdsaXN0JyB9KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudFZpZXcgPT09ICdsaXN0JyA/ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJyA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOmJnLWdyYXktMTAwJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xem0wIDRhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6bTAgNGExIDEgMCAwMTEtMWgxMmExIDEgMCAxMTAgMkg0YTEgMSAwIDAxLTEtMXptMCA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFsb2RnZSIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBzdW50ZcibaSDDrm5yZWdpc3RyYXQgw65udHItbyBsb2rEgzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q29udGFjdGHIm2kgYWRtaW5pc3RyYXRvcnVsIHBlbnRydSBhIGZpIGFkxIN1Z2F0IMOubnRyLW8gbG9qxIMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPSJtZW1iZXJzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBleGlzdMSDIG1lbWJyaSDDrm4gbG9qxIM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS01MDAiPk1vbWVudGFuIG51IGV4aXN0xIMgYWzIm2kgbWVtYnJpIMOubiBsb2phIGR1bW5lYXZvYXN0csSDLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZSBjbGFzcz0ic3BhY2UteS04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFlc3RyaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICdtYWVzdHJ1JyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctcmVkLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZXN0cmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2dyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQnOiBpc01vYmlsZSwgJ2dyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTMgZ2FwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIG1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnbWFlc3RydScgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbGZlIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlcnMuc29tZShtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctb3JhbmdlLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIiA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieydiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0zJzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLnByb2ZpbGUnLCB7IHVzZXI6IG1lbWJlci51c2VyX2lkIH0pIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9Im1lbWJlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQobWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFsdD0ibWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9Insndy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBtYi0zIG9iamVjdC1jb3Zlcic6IGlzTW9iaWxlLCAndy0yNCBoLTI0IHJvdW5kZWQtZnVsbCBtYi00IG9iamVjdC1jb3Zlcic6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgOmNsYXNzPSJ7J3RleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgdGV4dC1jZW50ZXInOiBpc01vYmlsZSwgJ3RleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iZ2V0Um9sZUNvbG9yKG1lbWJlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvbGVMYWJlbChtZW1iZXIucm9sZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSB8fCBtZW1iZXIubWxucl9kaWduaXR5IiA6Y2xhc3M9InsnbXQtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTAuNSc6IGlzTW9iaWxlLCAnbXQtMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj5Mb2phOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IG1lbWJlci5sb2RnZV9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TUxOUjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubWxucl9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVWNlbmljaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnICYmIG0uc3RhdHVzID09PSAnYWN0aXZlJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCBmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3LTIgaC0yIHJvdW5kZWQtZnVsbCBiZy1ncmVlbi01MDAgbXItMiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVY2VuaWNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ3VjZW5pYycgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6ZXZlbnRzPSJldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtldmVudC5hdXRob3IuZmlyc3RfbmFtZX0gJHtldmVudC5hdXRob3IubGFzdF9uYW1lfWAKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZXZlbnQuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICB9KSkiCiAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKHsgb25seTogWydldmVudHMnXSB9KSIKICAgICAgICAgICAgLz4KCiAgICAgICAgICAgIDwhLS0gQm90dG9tIE1lbnUgLS0+CiAgICAgICAgICAgIDxCb3R0b21NZW51IHYtaWY9ImlzTW9iaWxlIiA6bG9kZ2U9ImxvZGdlIiAvPgogICAgICAgIDwvZGl2PgogICAgPC9NZW1iZXJMYXlvdXQ+CjwvdGVtcGxhdGU+Cgo8c3R5bGU+Cjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDhweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiAjQkNDMEM0OwogICAgYm9yZGVyLXJhZGl1czogNHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNBNEE3QUI7Cn0KPC9zdHlsZT4gAAAAAAAAAAALXgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADsDgAAAAAAAN8OAAAAAAAAAAAAAAAA8L8"
				],
				[
					76,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAdXgAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UsIHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIG1lbWJlcnM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICBkZWZhdWx0OiBudWxsCiAgICB9LAogICAgY2FuU3dpdGNoVmlldzogewogICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBjdXJyZW50VmlldzogewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKY29uc3Qgc3RhdHMgPSBjb21wdXRlZCgoKSA9PiBbCiAgICB7CiAgICAgICAgbGFiZWw6ICdUb3RhbCBNZW1icmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmxlbmd0aAogICAgfSwKICAgIHsKICAgICAgICBsYWJlbDogJ01hZXN0cmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ21hZXN0cnUnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdDYWxmZScsCiAgICAgICAgdmFsdWU6IHByb3BzLm1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnY2FsZmEnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdVY2VuaWNpJywKICAgICAgICB2YWx1ZTogcHJvcHMubWVtYmVycy5maWx0ZXIobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnKS5sZW5ndGgKICAgIH0KXSk7Cgpjb25zdCBhY3Rpb25zID0gWwogICAgewogICAgICAgIGxhYmVsOiAnQWRhdWfEgyBNZW1icnUgTm91JywKICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhZGQgbWVtYmVyIGZ1bmN0aW9uYWxpdHkKICAgICAgICB9CiAgICB9Cl07Cgpjb25zdCBjb3B5UmVnaXN0cmF0aW9uVXJsID0gKHVybCkgPT4gewogICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodXJsKS50aGVuKCgpID0+IHsKICAgICAgICAvLyBZb3UgY2FuIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlIGlmIHlvdSB3YW50CiAgICAgICAgYWxlcnQoJ0xpbmstdWwgYSBmb3N0IGNvcGlhdCDDrm4gY2xpcGJvYXJkIScpOwogICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0ZXh0OiAnLCBlcnIpOwogICAgfSk7Cn07Cgpjb25zdCBnZXRSb2xlQ29sb3IgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCc7CiAgICB9Cn07Cgpjb25zdCBnZXRSb2xlTGFiZWwgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSc7CiAgICAgICAgY2FzZSAnY2FsZmEnOgogICAgICAgICAgICByZXR1cm4gJ0NhbGbEgyc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdVY2VuaWMnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgfQp9OwoKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChldmVudElkKSA9PiB7CiAgICAvLyBJbXBsZW1lbnQgdGhlIGxvZ2ljIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZQogICAgCn07Cgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKICAgIH0KfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8SGVhZCB0aXRsZT0iTWVtYnJpIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6bG9kZ2U9ImxvZGdlIgogICAgICAgICAgICAgICAgOnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQ9ImxvZGdlPy51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICA6dXBjb21pbmdfZXZlbnRzX2NvdW50PSJsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleC0xIHAtNCBwYi0yMCc6IGlzTW9iaWxlLCAnZmxleC0xIG1sLVszNjBweF0gbXItWzM2MHB4XSBwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+TWVtYnJpaSBMb2ppaSB7eyBsb2RnZT8ubmFtZSB9fTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImNhblN3aXRjaFZpZXciIGNsYXNzPSJmbGV4IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9InJvdXRlKCdtZW1iZXIubWVtYmVycycsIHsgdmlldzogJ2dyaWQnIH0pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHgtMyBweS0yIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJjdXJyZW50VmlldyA9PT0gJ2dyaWQnID8gJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6YmctZ3JheS0xMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAzYTIgMiAwIDAwLTIgMnYyYTIgMiAwIDAwMiAyaDJhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJINXpNNSAxMWEyIDIgMCAwMC0yIDJ2MmEyIDIgMCAwMDIgMmgyYTIgMiAwIDAwMi0ydi0yYTIgMiAwIDAwLTItMkg1ek0xMSA1YTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0yVjV6TTExIDEzYTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0ydi0yeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpocmVmPSJyb3V0ZSgnbWVtYmVyLm1lbWJlcnMnLCB7IHZpZXc6ICdsaXN0JyB9KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudFZpZXcgPT09ICdsaXN0JyA/ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJyA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOmJnLWdyYXktMTAwJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xem0wIDRhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6bTAgNGExIDEgMCAwMTEtMWgxMmExIDEgMCAxMTAgMkg0YTEgMSAwIDAxLTEtMXptMCA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFsb2RnZSIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBzdW50ZcibaSDDrm5yZWdpc3RyYXQgw65udHItbyBsb2rEgzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q29udGFjdGHIm2kgYWRtaW5pc3RyYXRvcnVsIHBlbnRydSBhIGZpIGFkxIN1Z2F0IMOubnRyLW8gbG9qxIMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPSJtZW1iZXJzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBleGlzdMSDIG1lbWJyaSDDrm4gbG9qxIM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS01MDAiPk1vbWVudGFuIG51IGV4aXN0xIMgYWzIm2kgbWVtYnJpIMOubiBsb2phIGR1bW5lYXZvYXN0csSDLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZSBjbGFzcz0ic3BhY2UteS04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVtbml0YXJpIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlcnMuc29tZShtID0+IChtLmxvZGdlX2RpZ25pdHkgfHwgbS5tbG5yX2RpZ25pdHkpICYmIG0uc3RhdHVzID09PSAnYWN0aXZlJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCBmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3LTIgaC0yIHJvdW5kZWQtZnVsbCBiZy1ibHVlLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbW5pdGFyaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCc6IGlzTW9iaWxlLCAnZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBtZDpncmlkLWNvbHMtMyBnYXAtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJtZW1iZXIgaW4gbWVtYmVycy5maWx0ZXIobSA9PiAobS5sb2RnZV9kaWduaXR5IHx8IG0ubWxucl9kaWduaXR5KSAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIiA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieydiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0zJzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLnByb2ZpbGUnLCB7IHVzZXI6IG1lbWJlci51c2VyX2lkIH0pIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9Im1lbWJlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQobWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFsdD0ibWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9Insndy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBtYi0zIG9iamVjdC1jb3Zlcic6IGlzTW9iaWxlLCAndy0yNCBoLTI0IHJvdW5kZWQtZnVsbCBtYi00IG9iamVjdC1jb3Zlcic6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgOmNsYXNzPSJ7J3RleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgdGV4dC1jZW50ZXInOiBpc01vYmlsZSwgJ3RleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iZ2V0Um9sZUNvbG9yKG1lbWJlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvbGVMYWJlbChtZW1iZXIucm9sZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSB8fCBtZW1iZXIubWxucl9kaWduaXR5IiA6Y2xhc3M9InsnbXQtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTAuNSc6IGlzTW9iaWxlLCAnbXQtMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj5Mb2phOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IG1lbWJlci5sb2RnZV9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TUxOUjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubWxucl9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFlc3RyaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICdtYWVzdHJ1JyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctcmVkLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZXN0cmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2dyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQnOiBpc01vYmlsZSwgJ2dyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTMgZ2FwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIG1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnbWFlc3RydScgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbGZlIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlcnMuc29tZShtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctb3JhbmdlLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIiA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieydiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0zJzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLnByb2ZpbGUnLCB7IHVzZXI6IG1lbWJlci51c2VyX2lkIH0pIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9Im1lbWJlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQobWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFsdD0ibWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9Insndy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBtYi0zIG9iamVjdC1jb3Zlcic6IGlzTW9iaWxlLCAndy0yNCBoLTI0IHJvdW5kZWQtZnVsbCBtYi00IG9iamVjdC1jb3Zlcic6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgOmNsYXNzPSJ7J3RleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgdGV4dC1jZW50ZXInOiBpc01vYmlsZSwgJ3RleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iZ2V0Um9sZUNvbG9yKG1lbWJlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvbGVMYWJlbChtZW1iZXIucm9sZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSB8fCBtZW1iZXIubWxucl9kaWduaXR5IiA6Y2xhc3M9InsnbXQtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTAuNSc6IGlzTW9iaWxlLCAnbXQtMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj5Mb2phOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IG1lbWJlci5sb2RnZV9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TUxOUjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubWxucl9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVWNlbmljaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnICYmIG0uc3RhdHVzID09PSAnYWN0aXZlJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCBmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3LTIgaC0yIHJvdW5kZWQtZnVsbCBiZy1ncmVlbi01MDAgbXItMiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVY2VuaWNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ3VjZW5pYycgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6ZXZlbnRzPSJldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtldmVudC5hdXRob3IuZmlyc3RfbmFtZX0gJHtldmVudC5hdXRob3IubGFzdF9uYW1lfWAKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZXZlbnQuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICB9KSkiCiAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKHsgb25seTogWydldmVudHMnXSB9KSIKICAgICAgICAgICAgLz4KCiAgICAgICAgICAgIDwhLS0gQm90dG9tIE1lbnUgLS0+CiAgICAgICAgICAgIDxCb3R0b21NZW51IHYtaWY9ImlzTW9iaWxlIiA6bG9kZ2U9ImxvZGdlIiAvPgogICAgICAgIDwvZGl2PgogICAgPC9NZW1iZXJMYXlvdXQ+CjwvdGVtcGxhdGU+Cgo8c3R5bGU+Cjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDhweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiAjQkNDMEM0OwogICAgYm9yZGVyLXJhZGl1czogNHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNBNEE3QUI7Cn0KPC9zdHlsZT4gAAAAAAAAAACJTwAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADsDgAAAAAAAN8OAAAAAAAAAAAAAAAA8L8"
				],
				[
					77,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAACbTwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UsIHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IGNvbXB1dGVkLCByZWYsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIG1lbWJlcnM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIGxvZGdlOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiBmYWxzZSwKICAgICAgICBkZWZhdWx0OiBudWxsCiAgICB9LAogICAgY2FuU3dpdGNoVmlldzogewogICAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBjdXJyZW50VmlldzogewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKY29uc3Qgc3RhdHMgPSBjb21wdXRlZCgoKSA9PiBbCiAgICB7CiAgICAgICAgbGFiZWw6ICdUb3RhbCBNZW1icmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmxlbmd0aAogICAgfSwKICAgIHsKICAgICAgICBsYWJlbDogJ01hZXN0cmknLAogICAgICAgIHZhbHVlOiBwcm9wcy5tZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ21hZXN0cnUnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdDYWxmZScsCiAgICAgICAgdmFsdWU6IHByb3BzLm1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnY2FsZmEnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdVY2VuaWNpJywKICAgICAgICB2YWx1ZTogcHJvcHMubWVtYmVycy5maWx0ZXIobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnKS5sZW5ndGgKICAgIH0KXSk7Cgpjb25zdCBhY3Rpb25zID0gWwogICAgewogICAgICAgIGxhYmVsOiAnQWRhdWfEgyBNZW1icnUgTm91JywKICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhZGQgbWVtYmVyIGZ1bmN0aW9uYWxpdHkKICAgICAgICB9CiAgICB9Cl07Cgpjb25zdCBjb3B5UmVnaXN0cmF0aW9uVXJsID0gKHVybCkgPT4gewogICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodXJsKS50aGVuKCgpID0+IHsKICAgICAgICAvLyBZb3UgY2FuIGFkZCBhIHRvYXN0IG5vdGlmaWNhdGlvbiBoZXJlIGlmIHlvdSB3YW50CiAgICAgICAgYWxlcnQoJ0xpbmstdWwgYSBmb3N0IGNvcGlhdCDDrm4gY2xpcGJvYXJkIScpOwogICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0ZXh0OiAnLCBlcnIpOwogICAgfSk7Cn07Cgpjb25zdCBnZXRSb2xlQ29sb3IgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCc7CiAgICB9Cn07Cgpjb25zdCBnZXRSb2xlTGFiZWwgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSc7CiAgICAgICAgY2FzZSAnY2FsZmEnOgogICAgICAgICAgICByZXR1cm4gJ0NhbGbEgyc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdVY2VuaWMnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgfQp9OwoKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChldmVudElkKSA9PiB7CiAgICAvLyBJbXBsZW1lbnQgdGhlIGxvZ2ljIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZQogICAgCn07Cgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKICAgIH0KfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8SGVhZCB0aXRsZT0iTWVtYnJpIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6bG9kZ2U9ImxvZGdlIgogICAgICAgICAgICAgICAgOnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQ9ImxvZGdlPy51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICA6dXBjb21pbmdfZXZlbnRzX2NvdW50PSJsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleC0xIHAtNCBwYi0yMCc6IGlzTW9iaWxlLCAnZmxleC0xIG1sLVszNjBweF0gbXItWzM2MHB4XSBwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+TWVtYnJpaSBMb2ppaSB7eyBsb2RnZT8ubmFtZSB9fTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImNhblN3aXRjaFZpZXciIGNsYXNzPSJmbGV4IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9InJvdXRlKCdtZW1iZXIubWVtYmVycycsIHsgdmlldzogJ2dyaWQnIH0pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHgtMyBweS0yIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJjdXJyZW50VmlldyA9PT0gJ2dyaWQnID8gJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6YmctZ3JheS0xMDAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAzYTIgMiAwIDAwLTIgMnYyYTIgMiAwIDAwMiAyaDJhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJINXpNNSAxMWEyIDIgMCAwMC0yIDJ2MmEyIDIgMCAwMDIgMmgyYTIgMiAwIDAwMi0ydi0yYTIgMiAwIDAwLTItMkg1ek0xMSA1YTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0yVjV6TTExIDEzYTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0ydi0yeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpocmVmPSJyb3V0ZSgnbWVtYmVyLm1lbWJlcnMnLCB7IHZpZXc6ICdsaXN0JyB9KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTMgcHktMiByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iY3VycmVudFZpZXcgPT09ICdsaXN0JyA/ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJyA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOmJnLWdyYXktMTAwJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xem0wIDRhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6bTAgNGExIDEgMCAwMTEtMWgxMmExIDEgMCAxMTAgMkg0YTEgMSAwIDAxLTEtMXptMCA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFsb2RnZSIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBzdW50ZcibaSDDrm5yZWdpc3RyYXQgw65udHItbyBsb2rEgzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q29udGFjdGHIm2kgYWRtaW5pc3RyYXRvcnVsIHBlbnRydSBhIGZpIGFkxIN1Z2F0IMOubnRyLW8gbG9qxIMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPSJtZW1iZXJzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBleGlzdMSDIG1lbWJyaSDDrm4gbG9qxIM8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS01MDAiPk1vbWVudGFuIG51IGV4aXN0xIMgYWzIm2kgbWVtYnJpIMOubiBsb2phIGR1bW5lYXZvYXN0csSDLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZSBjbGFzcz0ic3BhY2UteS04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFlc3RyaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICdtYWVzdHJ1JyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctcmVkLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZXN0cmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2dyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQnOiBpc01vYmlsZSwgJ2dyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTMgZ2FwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIG1lbWJlcnMuZmlsdGVyKG0gPT4gbS5yb2xlID09PSAnbWFlc3RydScgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbGZlIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlcnMuc29tZShtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQgZmxleCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idy0yIGgtMiByb3VuZGVkLWZ1bGwgYmctb3JhbmdlLTUwMCBtci0yIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ2NhbGZhJyAmJiBtLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIiA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieydiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0zJzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLnByb2ZpbGUnLCB7IHVzZXI6IG1lbWJlci51c2VyX2lkIH0pIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9Im1lbWJlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQobWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmFsdD0ibWVtYmVyLmZpcnN0X25hbWUgKyAnICcgKyBtZW1iZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9Insndy0xNiBoLTE2IHJvdW5kZWQtZnVsbCBtYi0zIG9iamVjdC1jb3Zlcic6IGlzTW9iaWxlLCAndy0yNCBoLTI0IHJvdW5kZWQtZnVsbCBtYi00IG9iamVjdC1jb3Zlcic6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgOmNsYXNzPSJ7J3RleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgdGV4dC1jZW50ZXInOiBpc01vYmlsZSwgJ3RleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iZ2V0Um9sZUNvbG9yKG1lbWJlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFJvbGVMYWJlbChtZW1iZXIucm9sZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSB8fCBtZW1iZXIubWxucl9kaWduaXR5IiA6Y2xhc3M9InsnbXQtMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTAuNSc6IGlzTW9iaWxlLCAnbXQtMiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubG9kZ2VfZGlnbml0eSIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj5Mb2phOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IG1lbWJlci5sb2RnZV9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im1lbWJlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TUxOUjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubWxucl9kaWduaXR5Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVWNlbmljaSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXJzLnNvbWUobSA9PiBtLnJvbGUgPT09ICd1Y2VuaWMnICYmIG0uc3RhdHVzID09PSAnYWN0aXZlJykiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCBmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3LTIgaC0yIHJvdW5kZWQtZnVsbCBiZy1ncmVlbi01MDAgbXItMiI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVY2VuaWNpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIG1kOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+IG0ucm9sZSA9PT0gJ3VjZW5pYycgJiYgbS5zdGF0dXMgPT09ICdhY3RpdmUnKSIgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9maWxlJywgeyB1c2VyOiBtZW1iZXIudXNlcl9pZCB9KSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJtZW1iZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9Im1lbWJlci5maXJzdF9uYW1lICsgJyAnICsgbWVtYmVyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J3ctMTYgaC0xNiByb3VuZGVkLWZ1bGwgbWItMyBvYmplY3QtY292ZXInOiBpc01vYmlsZSwgJ3ctMjQgaC0yNCByb3VuZGVkLWZ1bGwgbWItNCBvYmplY3QtY292ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIDpjbGFzcz0ieyd0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRleHQtY2VudGVyJzogaXNNb2JpbGUsICd0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlcic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9ImdldFJvbGVDb2xvcihtZW1iZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwobWVtYmVyLnJvbGUpIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkgfHwgbWVtYmVyLm1sbnJfZGlnbml0eSIgOmNsYXNzPSJ7J210LTEgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0wLjUnOiBpc01vYmlsZSwgJ210LTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgc3BhY2UteS0xJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibWVtYmVyLmxvZGdlX2RpZ25pdHkiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+TG9qYTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBtZW1iZXIubG9kZ2VfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJtZW1iZXIubWxucl9kaWduaXR5IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPk1MTlI6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgbWVtYmVyLm1sbnJfZGlnbml0eS5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6ZXZlbnRzPSJldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtldmVudC5hdXRob3IuZmlyc3RfbmFtZX0gJHtldmVudC5hdXRob3IubGFzdF9uYW1lfWAKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZXZlbnQuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICB9KSkiCiAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKHsgb25seTogWydldmVudHMnXSB9KSIKICAgICAgICAgICAgLz4KCiAgICAgICAgICAgIDwhLS0gQm90dG9tIE1lbnUgLS0+CiAgICAgICAgICAgIDxCb3R0b21NZW51IHYtaWY9ImlzTW9iaWxlIiA6bG9kZ2U9ImxvZGdlIiAvPgogICAgICAgIDwvZGl2PgogICAgPC9NZW1iZXJMYXlvdXQ+CjwvdGVtcGxhdGU+Cgo8c3R5bGU+Cjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDhweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiAjQkNDMEM0OwogICAgYm9yZGVyLXJhZGl1czogNHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNBNEE3QUI7Cn0KPC9zdHlsZT4gAAAAAAAAAADWTwAAAAAAAAAAAAAAAAAAAAAAANZPAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADsDgAAAAAAAN8OAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Pages/Member/Dashboard.vue",
			"settings":
			{
				"buffer_size": 37862,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					96,
					1,
					"left_delete",
					null,
					"AQAAALNgAAAAAAAAs2AAAAAAAAABAAAAdA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC0YAAAAAAAALRgAAAAAAAAAAAAAAAA8L8"
				],
				[
					99,
					1,
					"insert",
					{
						"characters": "flex"
					},
					"BAAAAMFgAAAAAAAAwmAAAAAAAAAAAAAAwmAAAAAAAADDYAAAAAAAAAAAAADDYAAAAAAAAMRgAAAAAAAAAAAAAMRgAAAAAAAAxWAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADBYAAAAAAAAMFgAAAAAAAAAAAAAAAA8L8"
				],
				[
					104,
					1,
					"left_delete",
					null,
					"AQAAAK9gAAAAAAAAr2AAAAAAAAAEAAAAZmxleA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACvYAAAAAAAALNgAAAAAAAAAAAAAAAA8L8"
				],
				[
					109,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"BgAAANBgAAAAAAAA0WAAAAAAAAAAAAAA0WAAAAAAAADhYAAAAAAAAAAAAADhYAAAAAAAAOVgAAAAAAAAAAAAAOVgAAAAAAAA5mAAAAAAAAAAAAAA5mAAAAAAAAD6YAAAAAAAAAAAAADRYAAAAAAAANFgAAAAAAAAFAAAACAgICAgICAgICAgICAgICAgICAg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADQYAAAAAAAANBgAAAAAAAAAAAAAAAA8L8"
				],
				[
					110,
					1,
					"paste",
					null,
					"AQAAAOZgAAAAAAAAs2YAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADmYAAAAAAAAOZgAAAAAAAAAAAAAAAA8L8"
				],
				[
					113,
					5,
					"unindent",
					null,
					"BQAAANJgAAAAAAAA0mAAAAAAAAAEAAAAICAgINJgAAAAAAAA0mAAAAAAAAAEAAAAICAgINJgAAAAAAAA0mAAAAAAAAAEAAAAICAgINJgAAAAAAAA0mAAAAAAAAAEAAAAICAgINJgAAAAAAAA0mAAAAAAAAAEAAAAICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD6YAAAAAAAAPpgAAAAAAAAAAAAAAAA8L8"
				],
				[
					118,
					1,
					"insert",
					{
						"characters": "MobileEven"
					},
					"CwAAAOdgAAAAAAAA6GAAAAAAAAAAAAAA6GAAAAAAAADoYAAAAAAAAAwAAABSaWdodFNpZGViYXLoYAAAAAAAAOlgAAAAAAAAAAAAAOlgAAAAAAAA6mAAAAAAAAAAAAAA6mAAAAAAAADrYAAAAAAAAAAAAADrYAAAAAAAAOxgAAAAAAAAAAAAAOxgAAAAAAAA7WAAAAAAAAAAAAAA7WAAAAAAAADuYAAAAAAAAAAAAADuYAAAAAAAAO9gAAAAAAAAAAAAAO9gAAAAAAAA8GAAAAAAAAAAAAAA8GAAAAAAAADxYAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADnYAAAAAAAAPNgAAAAAAAAAAAAAAAA8L8"
				],
				[
					119,
					1,
					"insert",
					{
						"characters": "t"
					},
					"AQAAAPFgAAAAAAAA8mAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADxYAAAAAAAAPFgAAAAAAAAAAAAAAAA8L8"
				],
				[
					124,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AQAAAIwEAAAAAAAAjQQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMBAAAAAAAAIwEAAAAAAAAAAAAAAAA8L8"
				],
				[
					125,
					1,
					"paste",
					null,
					"AQAAAI0EAAAAAAAAyQQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACNBAAAAAAAAI0EAAAAAAAAAAAAAAAA8L8"
				],
				[
					134,
					1,
					"insert",
					{
						"characters": "MobileEvent"
					},
					"GAAAALkEAAAAAAAAugQAAAAAAAAAAAAAugQAAAAAAAC6BAAAAAAAAAoAAABCb3R0b21NZW51lAQAAAAAAACVBAAAAAAAAAAAAACVBAAAAAAAAJUEAAAAAAAACgAAAEJvdHRvbU1lbnWxBAAAAAAAALIEAAAAAAAAAAAAAJUEAAAAAAAAlgQAAAAAAAAAAAAAswQAAAAAAAC0BAAAAAAAAAAAAACWBAAAAAAAAJcEAAAAAAAAAAAAALUEAAAAAAAAtgQAAAAAAAAAAAAAlwQAAAAAAACYBAAAAAAAAAAAAAC3BAAAAAAAALgEAAAAAAAAAAAAAJgEAAAAAAAAmQQAAAAAAAAAAAAAuQQAAAAAAAC6BAAAAAAAAAAAAACZBAAAAAAAAJoEAAAAAAAAAAAAALsEAAAAAAAAvAQAAAAAAAAAAAAAmgQAAAAAAACbBAAAAAAAAAAAAAC9BAAAAAAAAL4EAAAAAAAAAAAAAJsEAAAAAAAAnAQAAAAAAAAAAAAAvwQAAAAAAADABAAAAAAAAAAAAACcBAAAAAAAAJ0EAAAAAAAAAAAAAMEEAAAAAAAAwgQAAAAAAAAAAAAAnQQAAAAAAACeBAAAAAAAAAAAAADDBAAAAAAAAMQEAAAAAAAAAAAAAJ4EAAAAAAAAnwQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAIAAACUBAAAAAAAAJ4EAAAAAAAAAAAAAAAA8L+5BAAAAAAAAMMEAAAAAAAAAAAAAAAA8L8"
				],
				[
					139,
					1,
					"left_delete",
					null,
					"AQAAAFFhAAAAAAAAUWEAAAAAAAABAAAAIQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABSYQAAAAAAAFJhAAAAAAAAAAAAAAAA8L8"
				],
				[
					173,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAABLiwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IE1lbWJlckxheW91dCBmcm9tICdAL0xheW91dHMvTWVtYmVyTGF5b3V0LnZ1ZSc7CmltcG9ydCBMZWZ0U2lkZWJhciBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL0xlZnRTaWRlYmFyLnZ1ZSc7CmltcG9ydCBSaWdodFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9SaWdodFNpZGViYXIudnVlJzsKaW1wb3J0IEZlZWQgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9GZWVkLnZ1ZSc7CmltcG9ydCB7IEhlYWQgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgd2F0Y2gsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7CmltcG9ydCBNb2RhbCBmcm9tICdAL0NvbXBvbmVudHMvTW9kYWwudnVlJzsKaW1wb3J0IElucHV0TGFiZWwgZnJvbSAnQC9Db21wb25lbnRzL0lucHV0TGFiZWwudnVlJzsKaW1wb3J0IFRleHRJbnB1dCBmcm9tICdAL0NvbXBvbmVudHMvVGV4dElucHV0LnZ1ZSc7CmltcG9ydCBUZXh0YXJlYSBmcm9tICdAL0NvbXBvbmVudHMvVGV4dGFyZWEudnVlJzsKaW1wb3J0IElucHV0RXJyb3IgZnJvbSAnQC9Db21wb25lbnRzL0lucHV0RXJyb3IudnVlJzsKaW1wb3J0IFByaW1hcnlCdXR0b24gZnJvbSAnQC9Db21wb25lbnRzL1ByaW1hcnlCdXR0b24udnVlJzsKaW1wb3J0IHsgQ2FsZW5kYXJJY29uLCBNYXBQaW5JY29uIH0gZnJvbSAnQGhlcm9pY29ucy92dWUvMjQvb3V0bGluZSc7CmltcG9ydCBEYXRlcGlja2VyIGZyb20gJ0B2dWVwaWMvdnVlLWRhdGVwaWNrZXInOwppbXBvcnQgJ0B2dWVwaWMvdnVlLWRhdGVwaWNrZXIvZGlzdC9tYWluLmNzcyc7CmltcG9ydCBGQ01SZWdpc3RyYXRpb24gZnJvbSAnQC9Db21wb25lbnRzL0ZDTVJlZ2lzdHJhdGlvbi52dWUnOwppbXBvcnQgeyBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7CmltcG9ydCBNb2JpbGVFdmVudCBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL01vYmlsZUV2ZW50LnZ1ZSc7Cgpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGxvZGdlID0gcGFnZS5wcm9wcy5sb2RnZTsKCmNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBjb21wdXRlZCgoKSA9PiBpbXBvcnQubWV0YS5lbnYuTU9ERSA9PT0gJ2RldmVsb3BtZW50Jyk7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIHBvc3RzOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7IGRhdGE6IFtdIH0pCiAgICB9LAogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9LAogICAgY2F0ZWdvcnk6IHsKICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgZGVmYXVsdDogJ2FsbCcKICAgIH0sCiAgICBsb2RnZTogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogZmFsc2UsCiAgICAgICAgZGVmYXVsdDogKCkgPT4gbnVsbAogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKLy8gQ3JlYXRlIGEgcmVhY3RpdmUgY29weSBvZiB0aGUgcG9zdHMKY29uc3QgcG9zdHMgPSByZWYocHJvcHMucG9zdHMpOwpjb25zdCBldmVudHMgPSByZWYocHJvcHMuZXZlbnRzKTsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLnBvc3RzCndhdGNoKCgpID0+IHByb3BzLnBvc3RzLCAobmV3UG9zdHMpID0+IHsKICAgIHBvc3RzLnZhbHVlID0gbmV3UG9zdHM7Cn0sIHsgZGVlcDogdHJ1ZSB9KTsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLmV2ZW50cwp3YXRjaCgoKSA9PiBwcm9wcy5ldmVudHMsIChuZXdFdmVudHMpID0+IHsKICAgIGV2ZW50cy52YWx1ZSA9IG5ld0V2ZW50czsKfSwgeyBkZWVwOiB0cnVlIH0pOwoKLy8gTWVtb2l6ZSB0aGUgc2FmZVBvc3RzIGNvbXB1dGF0aW9uIHdpdGggYmV0dGVyIGVtcHR5IHN0YXRlIGhhbmRsaW5nCmNvbnN0IHNhZmVQb3N0cyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghcHJvcHMucG9zdHM/LmRhdGEpIHJldHVybiB7IGRhdGE6IFtdIH07CiAgICAKICAgIHJldHVybiB7CiAgICAgICAgZGF0YTogcHJvcHMucG9zdHMuZGF0YS5tYXAocG9zdCA9PiAoewogICAgICAgICAgICBpZDogcG9zdD8uaWQgfHwgJycsCiAgICAgICAgICAgIGF1dGhvcjogcG9zdD8uYXV0aG9yIHx8IHt9LAogICAgICAgICAgICBjb21tZW50czogQXJyYXkuaXNBcnJheShwb3N0Py5jb21tZW50cykgPyBwb3N0LmNvbW1lbnRzIDogW10sCiAgICAgICAgICAgIHJlYWN0aW9uczogQXJyYXkuaXNBcnJheShwb3N0Py5yZWFjdGlvbnMpID8gcG9zdC5yZWFjdGlvbnMgOiBbXSwKICAgICAgICAgICAgZXZlbnQ6IHBvc3Q/LmV2ZW50IHx8IG51bGwsCiAgICAgICAgICAgIHBvbGw6IHBvc3Q/LnBvbGwgfHwgbnVsbCwKICAgICAgICAgICAgaW1hZ2U6IHBvc3Q/LmltYWdlIHx8IG51bGwsCiAgICAgICAgICAgIGNvbnRlbnQ6IHBvc3Q/LmNvbnRlbnQgfHwgJycsCiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IHBvc3Q/LmNyZWF0ZWRfYXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpCiAgICAgICAgfSkpCiAgICB9Owp9KTsKCi8vIE1lbW9pemUgdGhlIHByb2ZpbGUgcGhvdG8gVVJMIHdpdGggYmV0dGVyIGZhbGxiYWNrCmNvbnN0IHByb2ZpbGVQaG90b1VybCA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghdXNlcikgcmV0dXJuICcnOwogICAgcmV0dXJuIHVzZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuZmlyc3RfbmFtZSArICcgJyArIHVzZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYDsKfSk7CgovLyBNZW1vaXplIHRoZSBuZXh0RXZlbnQgY29tcHV0YXRpb24KY29uc3QgbmV4dEV2ZW50ID0gY29tcHV0ZWQoKCkgPT4gewogICAgaWYgKCFwcm9wcy5ldmVudHM/Lmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAKICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7CiAgICByZXR1cm4gcHJvcHMuZXZlbnRzCiAgICAgICAgLmZpbHRlcihldmVudCA9PiB7CiAgICAgICAgICAgIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUpOwogICAgICAgICAgICByZXR1cm4gZXZlbnREYXRlID4gbm93OwogICAgICAgIH0pCiAgICAgICAgLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSkgLSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpKVswXTsKfSk7Cgpjb25zdCBzaG93UG9zdE1vZGFsID0gcmVmKGZhbHNlKTsKY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHJlZignJyk7Cgpjb25zdCBmb3JtID0gdXNlRm9ybSh7CiAgICBjb250ZW50OiAnJywKICAgIGltYWdlOiBudWxsLAogICAgY2F0ZWdvcnlfaWQ6IG51bGwsCiAgICBsb2RnZV9pZDogbnVsbCwKICAgIGNhdGVnb3J5OiBudWxsCn0pOwoKLy8gVXBkYXRlIGNhdGVnb3J5X2lkIHdoZW4gY29tcG9uZW50IG1vdW50cyBhbmQgd2hlbiBjYXRlZ29yeSBjaGFuZ2VzCndhdGNoKCgpID0+IHByb3BzLmNhdGVnb3J5LCAobmV3Q2F0ZWdvcnkpID0+IHsKICAgIGNvbnN0IGNhdGVnb3J5ID0gcHJvcHMuY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuc2x1ZyA9PT0gbmV3Q2F0ZWdvcnkpOwogICAgaWYgKGNhdGVnb3J5KSB7CiAgICAgICAgZm9ybS5jYXRlZ29yeV9pZCA9IGNhdGVnb3J5LmlkOwogICAgICAgIGZvcm0ubG9kZ2VfaWQgPSBsb2RnZS5pZDsKICAgICAgICBmb3JtLmNhdGVnb3J5ID0gbmV3Q2F0ZWdvcnk7CiAgICB9Cn0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pOwoKY29uc3Qgc2hvd0Vtb2ppUGlja2VyID0gcmVmKGZhbHNlKTsKY29uc3QgZmlsZUlucHV0ID0gcmVmKG51bGwpOwpjb25zdCBpbWFnZVByZXZpZXdVcmwgPSByZWYobnVsbCk7Cgpjb25zdCBjcmVhdGVQb3N0ID0gYXN5bmMgKCkgPT4gewogICAgLy8gRW5zdXJlIGNhdGVnb3J5X2lkIGFuZCBsb2RnZV9pZCBhcmUgc2V0IGJlZm9yZSBzdWJtaXNzaW9uCiAgICBpZiAoIWZvcm0uY2F0ZWdvcnlfaWQgJiYgcHJvcHMuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc3QgY3VycmVudENhdGVnb3J5ID0gcHJvcHMuY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuc2x1ZyA9PT0gcHJvcHMuY2F0ZWdvcnkpOwogICAgICAgIGZvcm0uY2F0ZWdvcnlfaWQgPSBjdXJyZW50Q2F0ZWdvcnkgPyBjdXJyZW50Q2F0ZWdvcnkuaWQgOiBwcm9wcy5jYXRlZ29yaWVzWzBdLmlkOwogICAgfQogICAgaWYgKCFmb3JtLmxvZGdlX2lkKSB7CiAgICAgICAgZm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgfQogICAgCiAgICAvLyBBZGQgdGhlIGN1cnJlbnQgY2F0ZWdvcnkgdG8gdGhlIGZvcm0gZGF0YQogICAgZm9ybS5jYXRlZ29yeSA9IHByb3BzLmNhdGVnb3J5OwogICAgCiAgICBmb3JtLnBvc3Qocm91dGUoJ21lbWJlci5wb3N0cy5zdG9yZScpLCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgLy8gUmVzZXQgZm9ybSBhbmQgaW1hZ2UgcHJldmlldwogICAgICAgICAgICBmb3JtLnJlc2V0KCk7CiAgICAgICAgICAgIGlmIChpbWFnZVByZXZpZXdVcmwudmFsdWUpIHsKICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1hZ2VQcmV2aWV3VXJsLnZhbHVlKTsKICAgICAgICAgICAgICAgIGltYWdlUHJldmlld1VybC52YWx1ZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2hvd1Bvc3RNb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICBzaG93RW1vamlQaWNrZXIudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgLy8gVXNlIHJvdXRlci52aXNpdCB0byBwcmVzZXJ2ZSB0aGUgY2F0ZWdvcnkgcGFyYW1ldGVyCiAgICAgICAgICAgIHJvdXRlci52aXNpdChyb3V0ZSgnZGFzaGJvYXJkJywgeyBjYXRlZ29yeTogcHJvcHMuY2F0ZWdvcnkgfSksIHsKICAgICAgICAgICAgICAgIHByZXNlcnZlU3RhdGU6IHRydWUsCiAgICAgICAgICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICAgICAgICAgIG9ubHk6IFsncG9zdHMnXQogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IChlcnJvcnMpID0+IHsKICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9ycyBzaWxlbnRseQogICAgICAgIH0KICAgIH0pOwp9OwoKLy8gQWRkIGEgd2F0Y2ggZm9yIHNob3dQb3N0TW9kYWwgdG8gcmVzZXQgaW1hZ2UgcHJldmlldyB3aGVuIG1vZGFsIGlzIGNsb3NlZAp3YXRjaChzaG93UG9zdE1vZGFsLCAobmV3VmFsdWUpID0+IHsKICAgIGlmICghbmV3VmFsdWUpIHsKICAgICAgICAvLyBSZXNldCBmb3JtIGFuZCBpbWFnZSBwcmV2aWV3IHdoZW4gbW9kYWwgaXMgY2xvc2VkCiAgICAgICAgZm9ybS5yZXNldCgpOwogICAgICAgIGlmIChpbWFnZVByZXZpZXdVcmwudmFsdWUpIHsKICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWFnZVByZXZpZXdVcmwudmFsdWUpOwogICAgICAgICAgICBpbWFnZVByZXZpZXdVcmwudmFsdWUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzaG93RW1vamlQaWNrZXIudmFsdWUgPSBmYWxzZTsKICAgIH0KfSk7Cgpjb25zdCBoYW5kbGVJbWFnZVVwbG9hZCA9IChldmVudCkgPT4gewogICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTsKICAgIGlmIChmaWxlKSB7CiAgICAgICAgZm9ybS5pbWFnZSA9IGZpbGU7CiAgICAgICAgaW1hZ2VQcmV2aWV3VXJsLnZhbHVlID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgIH0KfTsKCmNvbnN0IG9wZW5GaWxlSW5wdXQgPSAoKSA9PiB7CiAgICBmaWxlSW5wdXQudmFsdWUuY2xpY2soKTsKfTsKCmNvbnN0IHJlbW92ZUltYWdlID0gKCkgPT4gewogICAgZm9ybS5pbWFnZSA9IG51bGw7CiAgICBpZiAoaW1hZ2VQcmV2aWV3VXJsLnZhbHVlKSB7CiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWFnZVByZXZpZXdVcmwudmFsdWUpOwogICAgICAgIGltYWdlUHJldmlld1VybC52YWx1ZSA9IG51bGw7CiAgICB9Cn07Cgpjb25zdCBpbnNlcnRFbW9qaSA9IChlbW9qaSkgPT4gewogICAgZm9ybS5jb250ZW50ICs9IGVtb2ppOwogICAgc2hvd0Vtb2ppUGlja2VyLnZhbHVlID0gZmFsc2U7Cn07Cgpjb25zdCB3YWxscyA9IFsKICAgIHsgaWQ6ICdhbGwnLCBuYW1lOiAnVG9hdGUnLCBpY29uOiAnTTEwIDJhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDBWM2ExIDEgMCAwMTEtMXptNCA4YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLS40NjQgNC45NWwuNzA3LjcwN2ExIDEgMCAwMDEuNDE0LTEuNDE0bC0uNzA3LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTR6bTIuMTItMTAuNjA3YTEgMSAwIDAxMCAxLjQxNGwtLjcwNi43MDdhMSAxIDAgMTEtMS40MTQtMS40MTRsLjcwNy0uNzA3YTEgMSAwIDAxMS40MTQgMHpNMTcgMTFhMSAxIDAgMTAwLTJoLTFhMSAxIDAgMTAwIDJoMXptLTcgNGExIDEgMCAwMTEgMXYxYTEgMSAwIDExLTIgMHYtMWExIDEgMCAwMTEtMXpNNS4wNSA2LjQ2NEExIDEgMCAxMDYuNDY1IDUuMDVsLS43MDgtLjcwN2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwuNzA3LjcwN3ptMS40MTQgOC40ODZsLS43MDcuNzA3YTEgMSAwIDAxLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDEuNDE0ek00IDExYTEgMSAwIDEwMC0ySDNhMSAxIDAgMDAwIDJoMXonIH0sCiAgICB7IGlkOiAnZXZlbnRzJywgbmFtZTogJ0V2ZW5pbWVudGUnLCBpY29uOiAnTTggN1YzbTggNFYzbS05IDhoMTBNNSAyMWgxNGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMnonIH0sCiAgICB7IGlkOiAnYW5ub3VuY2VtZW50cycsIG5hbWU6ICdBbnVuyJt1cmknLCBpY29uOiAnTTExIDUuODgyVjE5LjI0YTEuNzYgMS43NiAwIDAxLTMuNDE3LjU5MmwtMi4xNDctNi4xNU0xOCAxM2EzIDMgMCAxMDAtNk01LjQzNiAxMy42ODNBNC4wMDEgNC4wMDEgMCAwMTcgNmgxLjgzMmM0LjEgMCA3LjYyNS0xLjIzNCA5LjE2OC0zdjE0Yy0xLjU0My0xLjc2Ni01LjA2Ny0zLTkuMTY4LTNIN2EzLjk4OCAzLjk4OCAwIDAxLTEuNTY0LS4zMTd6JyB9LAogICAgeyBpZDogJ2Rpc2N1c3Npb25zJywgbmFtZTogJ0Rpc2N1yJtpaScsIGljb246ICdNOCAxMmguMDFNMTIgMTJoLjAxTTE2IDEyaC4wMU0yMSAxMmMwIDQuNDE4LTQuMDMgOC05IDhhOS44NjMgOS44NjMgMCAwMS00LjI1NS0uOTQ5TDMgMjBsMS4zOTUtMy43MkMzLjUxMiAxNS4wNDIgMyAxMy41NzQgMyAxMmMwLTQuNDE4IDQuMDMtOCA5LThzOSAzLjU4MiA5IDh6JyB9Cl07Cgpjb25zdCBhY3RpdmVSZWFjdGlvblBvc3QgPSByZWYobnVsbCk7CmNvbnN0IGFjdGl2ZUNvbW1lbnRzUG9zdCA9IHJlZihudWxsKTsKY29uc3QgY29tbWVudEZvcm0gPSB1c2VGb3JtKHsKICAgIGNvbnRlbnQ6ICcnLAogICAgcG9zdF9pZDogbnVsbAp9KTsKCmNvbnN0IHNob3dDb21tZW50SW5wdXQgPSByZWYoZmFsc2UpOwpjb25zdCBuZXdDb21tZW50ID0gcmVmKCcnKTsKCmNvbnN0IHRvZ2dsZVJlYWN0aW9uUGlja2VyID0gKHBvc3RJZCkgPT4gewogICAgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID0gYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID09PSBwb3N0SWQgPyBudWxsIDogcG9zdElkOwp9OwoKY29uc3QgaGFuZGxlTGlrZUNsaWNrID0gYXN5bmMgKHBvc3QpID0+IHsKICAgIGNvbnN0IGV4aXN0aW5nUmVhY3Rpb24gPSBwb3N0LnJlYWN0aW9ucy5maW5kKHIgPT4gci51c2VyX2lkID09PSB1c2VyLmlkKTsKICAgIGlmIChleGlzdGluZ1JlYWN0aW9uKSB7CiAgICAgICAgYXdhaXQgYXhpb3MuZGVsZXRlKHJvdXRlKCdtZW1iZXIucG9zdHMucmVhY3Rpb25zLmRlc3Ryb3knLCBwb3N0LmlkKSk7CiAgICAgICAgYXdhaXQgcmVmcmVzaFBvc3RzKCk7CiAgICB9IGVsc2UgewogICAgICAgIHRvZ2dsZVJlYWN0aW9uUGlja2VyKHBvc3QuaWQpOwogICAgfQp9OwoKY29uc3QgcmVhY3RUb1Bvc3QgPSBhc3luYyAocG9zdCwgZW1vamkpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdSZWFjdGlvbiA9IHBvc3QucmVhY3Rpb25zLmZpbmQoCiAgICAgICAgICAgIHJlYWN0aW9uID0+IHJlYWN0aW9uLnVzZXJfaWQgPT09IHVzZXIuaWQgJiYgcmVhY3Rpb24uZW1vamkgPT09IGVtb2ppCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICBpZiAoZXhpc3RpbmdSZWFjdGlvbikgewogICAgICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5yZWFjdGlvbnMuZGVzdHJveScsIHBvc3QuaWQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMucmVhY3Rpb25zLnN0b3JlJywgcG9zdC5pZCksIHsgZW1vamkgfSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSA9IG51bGw7CiAgICAgICAgYXdhaXQgcmVmcmVzaFBvc3RzKCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MTkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0KICAgIH0KfTsKCi8vIEFkZCBoZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIHVzZXIgcmVhY3RlZCB3aXRoIHNwZWNpZmljIGVtb2ppCmNvbnN0IGhhc1JlYWN0ZWQgPSAocG9zdCwgZW1vamkpID0+IHsKICAgIGlmICghcG9zdD8ucmVhY3Rpb25zIHx8ICFBcnJheS5pc0FycmF5KHBvc3QucmVhY3Rpb25zKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHBvc3QucmVhY3Rpb25zLnNvbWUoCiAgICAgICAgcmVhY3Rpb24gPT4gcmVhY3Rpb24/LnVzZXJfaWQgPT09IHVzZXI/LmlkICYmIHJlYWN0aW9uPy5lbW9qaSA9PT0gZW1vamkKICAgICk7Cn07Cgpjb25zdCBkZWxldGVDb21tZW50ID0gYXN5bmMgKGNvbW1lbnQpID0+IHsKICAgIGlmICghY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbW1lbnQ/JykpIHJldHVybjsKICAgIAogICAgdHJ5IHsKICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5jb21tZW50cy5kZXN0cm95JywgY29tbWVudC5pZCkpOwogICAgICAgIGF3YWl0IHJlZnJlc2hQb3N0cygpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyBjb21tZW50OicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dDb21tZW50cyA9IChwb3N0KSA9PiB7CiAgICBhY3RpdmVDb21tZW50c1Bvc3QudmFsdWUgPSBhY3RpdmVDb21tZW50c1Bvc3QudmFsdWUgPT09IHBvc3QuaWQgPyBudWxsIDogcG9zdC5pZDsKICAgIGlmIChhY3RpdmVDb21tZW50c1Bvc3QudmFsdWUgPT09IHBvc3QuaWQpIHsKICAgICAgICBjb21tZW50Rm9ybS5wb3N0X2lkID0gcG9zdC5pZDsKICAgIH0KfTsKCmNvbnN0IGFkZENvbW1lbnQgPSAocG9zdCkgPT4gewogICAgaWYgKCFjb21tZW50Rm9ybS5jb250ZW50LnRyaW0oKSkgcmV0dXJuOwogICAgCiAgICBjb21tZW50Rm9ybS5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMuY29tbWVudHMuc3RvcmUnLCBwb3N0LmlkKSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICBjb21tZW50Rm9ybS5yZXNldCgpOwogICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSBwb3N0IHRvIGdldCB1cGRhdGVkIGNvbW1lbnRzCiAgICAgICAgICAgIHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ3Bvc3RzJ10gfSk7CiAgICAgICAgfQogICAgfSk7Cn07Cgpjb25zdCByZWZyZXNoUG9zdHMgPSBhc3luYyAoKSA9PiB7CiAgICBhd2FpdCByb3V0ZXIucmVsb2FkKHsgb25seTogWydwb3N0cyddIH0pOwp9OwoKY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50KSA9PiB7CiAgICAvLyBHZXQgYWxsIG9wZW4gZW1vamkgcGlja2VycwogICAgY29uc3QgZW1vamlQaWNrZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmVtb2ppLXBpY2tlcicpOwogICAgY29uc3QgbGlrZUJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGlrZS1idXR0b24nKTsKICAgIAogICAgLy8gQ2hlY2sgaWYgY2xpY2sgaXMgb3V0c2lkZSBib3RoIHRoZSBlbW9qaSBwaWNrZXIgYW5kIGxpa2UgYnV0dG9uCiAgICBjb25zdCBjbGlja2VkT3V0c2lkZSA9IEFycmF5LmZyb20oZW1vamlQaWNrZXJzKS5ldmVyeShwaWNrZXIgPT4gIXBpY2tlci5jb250YWlucyhldmVudC50YXJnZXQpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20obGlrZUJ1dHRvbnMpLmV2ZXJ5KGJ1dHRvbiA9PiAhYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpOwogICAgCiAgICBpZiAoY2xpY2tlZE91dHNpZGUgJiYgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID0gbnVsbDsKICAgIH0KfTsKCmNvbnN0IGtpID0gcmVmKG51bGwpOwoKY29uc3QgaGFuZGxlVXBkYXRlUG9zdHMgPSAodXBkYXRlRGF0YSkgPT4gewogICAgaWYgKCF1cGRhdGVEYXRhLnBvc3RJZCB8fCAhdXBkYXRlRGF0YS5wb3N0RGF0YSkgewogICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCB1cGRhdGUgZGF0YTonLCB1cGRhdGVEYXRhKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHBvc3QKICAgIGNvbnN0IHVwZGF0ZWRQb3N0cyA9IHBvc3RzLnZhbHVlLmRhdGEubWFwKHBvc3QgPT4gewogICAgICAgIGlmIChwb3N0LmlkID09PSB1cGRhdGVEYXRhLnBvc3RJZCkgewogICAgICAgICAgICAvLyBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhlIHVwZGF0ZWQgcG9zdCBkYXRhCiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh1cGRhdGVEYXRhLnBvc3REYXRhKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBQcmVzZXJ2ZSBhbnkgZXhpc3RpbmcgZGF0YSB0aGF0IG1pZ2h0IG5vdCBiZSBpbiB0aGUgdXBkYXRlCiAgICAgICAgICAgIGNvbnN0IGZpbmFsUG9zdCA9IHsKICAgICAgICAgICAgICAgIC4uLnBvc3QsCiAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdCwKICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQKICAgICAgICAgICAgICAgIHJlYWN0aW9uczogdXBkYXRlZFBvc3QucmVhY3Rpb25zIHx8IHBvc3QucmVhY3Rpb25zIHx8IFtdLAogICAgICAgICAgICAgICAgY29tbWVudHM6IHVwZGF0ZWRQb3N0LmNvbW1lbnRzIHx8IHBvc3QuY29tbWVudHMgfHwgW10sCiAgICAgICAgICAgICAgICB2aWV3czogdXBkYXRlZFBvc3Qudmlld3MgfHwgcG9zdC52aWV3cyB8fCBbXSwKICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGV2ZW50IGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgICAgICBldmVudDogdXBkYXRlZFBvc3QuZXZlbnQgPyB7CiAgICAgICAgICAgICAgICAgICAgLi4ucG9zdC5ldmVudCwKICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdC5ldmVudCwKICAgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBwb2xsIGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvc3QuZXZlbnQucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9zdC5ldmVudD8ucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZFBvc3QuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHZvdGUgZGF0YSBpcyBwcmVzZXJ2ZWQKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IHVwZGF0ZWRQb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgcG9zdC5ldmVudD8ucG9sbD8udm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB1cGRhdGVkUG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHBvc3QuZXZlbnQ/LnBvbGw/LnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgICAgICAgICAgfSA6IHBvc3QuZXZlbnQ/LnBvbGwKICAgICAgICAgICAgICAgIH0gOiBwb3N0LmV2ZW50LAogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvc3QucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAuLi5wb3N0LnBvbGwsCiAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZFBvc3QucG9sbCwKICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZSBkYXRhIGlzIHByZXNlcnZlZAogICAgICAgICAgICAgICAgICAgIHZvdGVzOiB1cGRhdGVkUG9zdC5wb2xsLnZvdGVzIHx8IHBvc3QucG9sbD8udm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHVwZGF0ZWRQb3N0LnBvbGwudm90ZV9jb3VudHMgfHwgcG9zdC5wb2xsPy52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgfSA6IHBvc3QucG9sbAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBldmVudCB1cGRhdGUsIHVwZGF0ZSB0aGUgZXZlbnRzIGFycmF5CiAgICAgICAgICAgIGlmIChmaW5hbFBvc3QuZXZlbnQpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBldmVudHMudmFsdWUuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gZmluYWxQb3N0LmV2ZW50LmlkKTsKICAgICAgICAgICAgICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBldmVudHMgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCBldmVudAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uZXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdID0gewogICAgICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdLAogICAgICAgICAgICAgICAgICAgICAgICAuLi5maW5hbFBvc3QuZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGw6IGZpbmFsUG9zdC5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZEV2ZW50c1tldmVudEluZGV4XT8ucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbmFsUG9zdC5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGZpbmFsUG9zdC5ldmVudC5wb2xsLnZvdGVzIHx8IHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0/LnBvbGw/LnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IGZpbmFsUG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0/LnBvbGw/LnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiB1cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdPy5wb2xsCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBldmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmluYWxQb3N0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcG9zdDsKICAgIH0pOwogICAgCiAgICAvLyBVcGRhdGUgdGhlIHBvc3RzIHdpdGggdGhlIG5ldyBkYXRhIHVzaW5nIGEgbmV3IG9iamVjdCByZWZlcmVuY2UKICAgIHBvc3RzLnZhbHVlID0gewogICAgICAgIC4uLnBvc3RzLnZhbHVlLAogICAgICAgIGRhdGE6IHVwZGF0ZWRQb3N0cwogICAgfTsKICAgIAogICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUgYnkgY3JlYXRpbmcgbmV3IG9iamVjdHMKICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAvLyBDcmVhdGUgbmV3IGFycmF5IHJlZmVyZW5jZXMgdG8gZm9yY2UgcmVhY3Rpdml0eQogICAgICAgIHBvc3RzLnZhbHVlID0gewogICAgICAgICAgICAuLi5wb3N0cy52YWx1ZSwKICAgICAgICAgICAgZGF0YTogWy4uLnBvc3RzLnZhbHVlLmRhdGFdCiAgICAgICAgfTsKICAgICAgICBldmVudHMudmFsdWUgPSBbLi4uZXZlbnRzLnZhbHVlXTsKICAgICAgICAKICAgICAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIG5vdGlmeSBjb21wb25lbnRzIG9mIHRoZSB1cGRhdGUKICAgICAgICByb3V0ZXIucmVsb2FkKHsgb25seTogWydwb3N0cycsICdldmVudHMnXSB9KTsKICAgIH0pOwp9OwoKLy8gQWRkIHdpbmRvdyBzaXplIGRldGVjdGlvbgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwp9KTsKCi8vIEFkZCB0aGlzIGhlbHBlciBmdW5jdGlvbiB0byBjb3VudCByZWFjdGlvbnMgYnkgZW1vamkKY29uc3QgZ2V0UmVhY3Rpb25Db3VudHMgPSAocmVhY3Rpb25zKSA9PiB7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVhY3Rpb25zKSkgcmV0dXJuIHt9OwogICAgcmV0dXJuIHJlYWN0aW9ucy5yZWR1Y2UoKGNvdW50cywgcmVhY3Rpb24pID0+IHsKICAgICAgICBpZiAocmVhY3Rpb24/LmVtb2ppKSB7CiAgICAgICAgY291bnRzW3JlYWN0aW9uLmVtb2ppXSA9IChjb3VudHNbcmVhY3Rpb24uZW1vamldIHx8IDApICsgMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvdW50czsKICAgIH0sIHt9KTsKfTsKCi8vIEFkZCBhIG1ldGhvZCB0byBoYW5kbGUgY2F0ZWdvcnkgY2hhbmdlcwpjb25zdCBoYW5kbGVDYXRlZ29yeUNoYW5nZSA9IChjYXRlZ29yeSkgPT4gewogICAgcm91dGVyLnZpc2l0KHJvdXRlKCdkYXNoYm9hcmQnLCB7IGNhdGVnb3J5IH0pLCB7CiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgIH0pOwp9OwoKLy8gQWRkIGEgZGF0ZSBmb3JtYXR0aW5nIGZ1bmN0aW9uCmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gJyc7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7CiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gZGF0ZVN0cmluZzsgLy8gUmV0dXJuIG9yaWdpbmFsIHN0cmluZyBpZiBpbnZhbGlkIGRhdGUKICAgIAogICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdyby1STycsIHsKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBtb250aDogJ2xvbmcnLAogICAgICAgIHllYXI6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pLmZvcm1hdChkYXRlKTsKfTsKCmNvbnN0IGZvcm1hdFBvc3RDb250ZW50ID0gKGNvbnRlbnQpID0+IHsKICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoL1xuL2csICc8YnI+Jyk7Cn07Cgpjb25zdCBmb3JtYXREYXRlVGltZSA9IChkYXRlVGltZVN0cmluZykgPT4gewogICAgaWYgKCFkYXRlVGltZVN0cmluZykgcmV0dXJuICcnOwogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lU3RyaW5nKTsKICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBkYXRlVGltZVN0cmluZzsgLy8gUmV0dXJuIG9yaWdpbmFsIHN0cmluZyBpZiBpbnZhbGlkIGRhdGUKICAgIAogICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgewogICAgICAgIHdlZWtkYXk6ICdsb25nJywKICAgICAgICB5ZWFyOiAnbnVtZXJpYycsCiAgICAgICAgbW9udGg6ICdsb25nJywKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pOwp9OwoKY29uc3Qgc2hvd0V2ZW50TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzaG93UG9sbE1vZGFsID0gcmVmKGZhbHNlKTsKY29uc3QgZXZlbnRGb3JtID0gdXNlRm9ybSh7CiAgICB0aXRsZTogJycsCiAgICBkZXNjcmlwdGlvbjogJycsCiAgICBzdGFydF9kYXRlOiAnJywKICAgIGxvY2F0aW9uOiAnJywKICAgIGNhdGVnb3J5X2lkOiBudWxsLAogICAgbG9kZ2VfaWQ6IG51bGwsCiAgICBoYXNfcG9sbDogZmFsc2UsCiAgICBwb2xsX3F1ZXN0aW9uOiAnJywKICAgIHBvbGxfb3B0aW9uczogWycnLCAnJ10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgbm90aWZ5X25vdzogZmFsc2UsCiAgICBub3RpZnlfMjRoX2JlZm9yZTogZmFsc2UKfSk7Cgpjb25zdCBwb2xsRm9ybSA9IHVzZUZvcm0oewogICAgcXVlc3Rpb246ICcnLAogICAgb3B0aW9uczogWycnLCAnJ10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgY2F0ZWdvcnlfaWQ6IG51bGwsCiAgICBsb2RnZV9pZDogbnVsbAp9KTsKCi8vIEFkZCBtZXRob2RzIGZvciBtYW5hZ2luZyBwb2xsIG9wdGlvbnMKY29uc3QgYWRkUG9sbE9wdGlvbiA9ICgpID0+IHsKICAgIGV2ZW50Rm9ybS5wb2xsX29wdGlvbnMucHVzaCgnJyk7Cn07Cgpjb25zdCByZW1vdmVQb2xsT3B0aW9uID0gKGluZGV4KSA9PiB7CiAgICBldmVudEZvcm0ucG9sbF9vcHRpb25zLnNwbGljZShpbmRleCwgMSk7Cn07Cgpjb25zdCB1cGRhdGVQb2xsT3B0aW9uID0gKGluZGV4LCB2YWx1ZSkgPT4gewogICAgZXZlbnRGb3JtLnBvbGxfb3B0aW9uc1tpbmRleF0gPSB2YWx1ZTsKfTsKCi8vIEFkZCBtZXRob2RzIGZvciBtYW5hZ2luZyBzdGFuZGFsb25lIHBvbGwgb3B0aW9ucwpjb25zdCBhZGRTdGFuZGFsb25lUG9sbE9wdGlvbiA9ICgpID0+IHsKICAgIHBvbGxGb3JtLm9wdGlvbnMucHVzaCgnJyk7Cn07Cgpjb25zdCByZW1vdmVTdGFuZGFsb25lUG9sbE9wdGlvbiA9IChpbmRleCkgPT4gewogICAgcG9sbEZvcm0ub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOwp9OwoKY29uc3QgdXBkYXRlU3RhbmRhbG9uZVBvbGxPcHRpb24gPSAoaW5kZXgsIHZhbHVlKSA9PiB7CiAgICBwb2xsRm9ybS5vcHRpb25zW2luZGV4XSA9IHZhbHVlOwp9OwoKLy8gVXBkYXRlIHRoZSBidXR0b24gY2xpY2sgaGFuZGxlciB0byBzZXQgY2F0ZWdvcnlfaWQgYW5kIGxvZGdlX2lkCmNvbnN0IGhhbmRsZUV2ZW50QnV0dG9uQ2xpY2sgPSAoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yeSA9IHByb3BzLmNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LnNsdWcgPT09IHByb3BzLmNhdGVnb3J5KTsKICAgIGlmIChjYXRlZ29yeSkgewogICAgICAgIGV2ZW50Rm9ybS5jYXRlZ29yeV9pZCA9IGNhdGVnb3J5LmlkOwogICAgfQogICAgZXZlbnRGb3JtLmxvZGdlX2lkID0gbG9kZ2UuaWQ7CiAgICBzaG93RXZlbnRNb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBoYW5kbGVQb2xsQnV0dG9uQ2xpY2sgPSAoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yeSA9IHByb3BzLmNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LnNsdWcgPT09IHByb3BzLmNhdGVnb3J5KTsKICAgIGlmIChjYXRlZ29yeSkgewogICAgICAgIHBvbGxGb3JtLmNhdGVnb3J5X2lkID0gY2F0ZWdvcnkuaWQ7CiAgICB9CiAgICBwb2xsRm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgc2hvd1BvbGxNb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBjcmVhdGVFdmVudCA9ICgpID0+IHsKICAgIC8vIE9ubHkgY2hlY2sgZm9yIGR1cGxpY2F0ZSBvcHRpb25zIGlmIGhhc19wb2xsIGlzIHRydWUKICAgIGlmIChldmVudEZvcm0uaGFzX3BvbGwpIHsKICAgICAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIG9wdGlvbnMKICAgICAgICBjb25zdCBkdXBsaWNhdGVPcHRpb25zID0gZXZlbnRGb3JtLnBvbGxfb3B0aW9ucy5maWx0ZXIoKG9wdGlvbiwgaW5kZXgpID0+IAogICAgICAgICAgICBldmVudEZvcm0ucG9sbF9vcHRpb25zLmluZGV4T2Yob3B0aW9uKSAhPT0gaW5kZXgKICAgICAgICApOwogICAgICAgIAogICAgICAgIGlmIChkdXBsaWNhdGVPcHRpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgYWxlcnQoJ1BsZWFzZSBlbnN1cmUgYWxsIHBvbGwgb3B0aW9ucyBoYXZlIHVuaXF1ZSBuYW1lcy4nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gRW5zdXJlIGxvZGdlX2lkIGlzIHNldCBiZWZvcmUgc3VibWlzc2lvbgogICAgaWYgKCFldmVudEZvcm0ubG9kZ2VfaWQpIHsKICAgICAgICBldmVudEZvcm0ubG9kZ2VfaWQgPSBsb2RnZS5pZDsKICAgIH0KICAgIAogICAgZXZlbnRGb3JtLnBvc3Qocm91dGUoJ21lbWJlci5ldmVudHMuc3RvcmUnKSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICBldmVudEZvcm0ucmVzZXQoKTsKICAgICAgICAgICAgc2hvd0V2ZW50TW9kYWwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBwYWdlIGRhdGEKICAgICAgICAgICAgcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsncG9zdHMnXSB9KTsKICAgICAgICB9CiAgICB9KTsKfTsKCmNvbnN0IGNyZWF0ZVBvbGwgPSAoKSA9PiB7CiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIG9wdGlvbnMKICAgIGNvbnN0IGR1cGxpY2F0ZU9wdGlvbnMgPSBwb2xsRm9ybS5vcHRpb25zLmZpbHRlcigob3B0aW9uLCBpbmRleCkgPT4gCiAgICAgICAgcG9sbEZvcm0ub3B0aW9ucy5pbmRleE9mKG9wdGlvbikgIT09IGluZGV4CiAgICApOwogICAgCiAgICBpZiAoZHVwbGljYXRlT3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgYWxlcnQoJ1BsZWFzZSBlbnN1cmUgYWxsIHBvbGwgb3B0aW9ucyBoYXZlIHVuaXF1ZSBuYW1lcy4nKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8vIEVuc3VyZSBsb2RnZV9pZCBpcyBzZXQgYmVmb3JlIHN1Ym1pc3Npb24KICAgIGlmICghcG9sbEZvcm0ubG9kZ2VfaWQpIHsKICAgICAgICBwb2xsRm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgfQogICAgCiAgICBwb2xsRm9ybS5wb3N0KHJvdXRlKCdwb2xscy5zdG9yZScpLCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIHBvbGxGb3JtLnJlc2V0KCk7CiAgICAgICAgICAgIHNob3dQb2xsTW9kYWwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBwYWdlIGRhdGEKICAgICAgICAgICAgcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsncG9zdHMnXSB9KTsKICAgICAgICB9CiAgICB9KTsKfTsKCi8vIEFkZCB0aGVzZSBuZXcgZnVuY3Rpb25zIGZvciBwb2xsIGhhbmRsaW5nCmNvbnN0IGhhbmRsZVZvdGUgPSBhc3luYyAocG9sbCwgc2VsZWN0ZWRPcHRpb25zKSA9PiB7CiAgICBpZiAoIXBvbGw/LmlkKSByZXR1cm47CiAgICAKICAgIHRyeSB7CiAgICAgICAgLy8gQWx3YXlzIHNlbmQgYW4gYXJyYXkgZm9yIHNlbGVjdGVkX29wdGlvbnMKICAgICAgICBsZXQgb3B0aW9uc1RvU3VibWl0ID0gc2VsZWN0ZWRPcHRpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRPcHRpb25zID09PSBudWxsIHx8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRPcHRpb25zKSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSA/IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9ucykgPyBzZWxlY3RlZE9wdGlvbnMgOiBbc2VsZWN0ZWRPcHRpb25zXSk7CiAgICAgICAgCiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdwb2xscy52b3RlJywgcG9sbC5pZCksIHsKICAgICAgICAgICAgc2VsZWN0ZWRfb3B0aW9uczogb3B0aW9uc1RvU3VibWl0CiAgICAgICAgfSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgaWYgKHJlc3BvbnNlPy5kYXRhPy5zdWNjZXNzKSB7CiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9sbCBkYXRhIGluIHRoZSBwb3N0cyBhcnJheQogICAgICAgICAgICBjb25zdCBwb3N0SW5kZXggPSBzYWZlUG9zdHMudmFsdWUuZGF0YS5maW5kSW5kZXgocCA9PiAKICAgICAgICAgICAgICAgIChwLmV2ZW50Py5wb2xsPy5pZCA9PT0gcG9sbC5pZCkgfHwgKHAucG9sbD8uaWQgPT09IHBvbGwuaWQpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocG9zdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7IC4uLnNhZmVQb3N0cy52YWx1ZS5kYXRhW3Bvc3RJbmRleF0gfTsKICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkUG9zdC5ldmVudD8ucG9sbD8uaWQgPT09IHBvbGwuaWQpIHsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdC5ldmVudC5wb2xsID0gcmVzcG9uc2UuZGF0YS5wb2xsOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkUG9zdC5wb2xsPy5pZCA9PT0gcG9sbC5pZCkgewogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQb3N0LnBvbGwgPSByZXNwb25zZS5kYXRhLnBvbGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHBvc3QKICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0cyA9IFsKICAgICAgICAgICAgICAgICAgICAuLi5zYWZlUG9zdHMudmFsdWUuZGF0YS5zbGljZSgwLCBwb3N0SW5kZXgpLAogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQb3N0LAogICAgICAgICAgICAgICAgICAgIC4uLnNhZmVQb3N0cy52YWx1ZS5kYXRhLnNsaWNlKHBvc3RJbmRleCArIDEpCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc3RzIHByb3AKICAgICAgICAgICAgICAgIHByb3BzLnBvc3RzLmRhdGEgPSB1cGRhdGVkUG9zdHM7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2UgaWYgdGhlIHNlcnZlciByZXR1cm5zIHN1Y2Nlc3M6IGZhbHNlCiAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc3VibWl0IHZvdGUnKTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIC8vIFNob3cgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlCiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHN1Ym1pdHRpbmcgeW91ciB2b3RlLiBQbGVhc2UgdHJ5IGFnYWluLic7CiAgICAgICAgYWxlcnQoZXJyb3JNZXNzYWdlKTsKICAgIH0KfTsKCmNvbnN0IGdldFNlbGVjdGVkT3B0aW9ucyA9IChwb2xsKSA9PiB7CiAgICBpZiAoIXBvbGwudm90ZXMpIHJldHVybiBbXTsKICAgIGNvbnN0IHVzZXJWb3RlID0gcG9sbC52b3Rlcy5maW5kKHZvdGUgPT4gdm90ZS51c2VyX2lkID09PSB1c2VyLmlkKTsKICAgIHJldHVybiB1c2VyVm90ZSA/IHVzZXJWb3RlLnNlbGVjdGVkX29wdGlvbnMgOiBbXTsKfTsKCmNvbnN0IGlzT3B0aW9uU2VsZWN0ZWQgPSAocG9sbCwgb3B0aW9uKSA9PiB7CiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBnZXRTZWxlY3RlZE9wdGlvbnMocG9sbCk7CiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmluY2x1ZGVzKG9wdGlvbik7Cn07Cgpjb25zdCBzaG93Vm90ZXJzTW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHJlZihudWxsKTsKY29uc3Qgdm90ZXJzID0gcmVmKHt9KTsKCmNvbnN0IHNob3dWb3RlcnMgPSBhc3luYyAocG9sbCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhbGxWb3RlcnMgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBwb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQocm91dGUoJ3BvbGxzLnZvdGVycycsIHsgcG9sbDogcG9sbC5pZCwgb3B0aW9uIH0pKTsKICAgICAgICAgICAgYWxsVm90ZXJzW29wdGlvbl0gPSByZXNwb25zZS5kYXRhLnZvdGVyczsKICAgICAgICB9CiAgICAgICAgdm90ZXJzLnZhbHVlID0gYWxsVm90ZXJzOwogICAgICAgIHNob3dWb3RlcnNNb2RhbC52YWx1ZSA9IHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZmV0Y2ggdm90ZXJzIGxpc3QnKTsKICAgIH0KfTsKCi8vIFVwZGF0ZSB0aGUgaGFuZGxlUG9sbFVwZGF0ZSBtZXRob2QgdG8gdXNlIHRoZSByZWYKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9ICh7IHBvbGxJZCwgcG9sbERhdGEgfSkgPT4gewogICAgLy8gVXBkYXRlIHBvc3RzIGFycmF5CiAgICBwb3N0cy52YWx1ZSA9IHsKICAgICAgICAuLi5wb3N0cy52YWx1ZSwKICAgICAgICBkYXRhOiBwb3N0cy52YWx1ZS5kYXRhLm1hcChwb3N0ID0+IHsKICAgICAgICAgICAgaWYgKHBvc3QuZXZlbnQ/LnBvbGw/LmlkID09PSBwb2xsSWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgLi4ucG9zdCwKICAgICAgICAgICAgICAgICAgICBldmVudDogewogICAgICAgICAgICAgICAgICAgICAgICAuLi5wb3N0LmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBwb2xsRGF0YQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zdC5wb2xsPy5pZCA9PT0gcG9sbElkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIC4uLnBvc3QsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogcG9sbERhdGEKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHBvc3Q7CiAgICAgICAgfSkKICAgIH07CgogICAgLy8gVXBkYXRlIGV2ZW50cyBhcnJheQogICAgZXZlbnRzLnZhbHVlID0gZXZlbnRzLnZhbHVlLm1hcChldmVudCA9PiB7CiAgICAgICAgaWYgKGV2ZW50LmV2ZW50Py5wb2xsPy5pZCA9PT0gcG9sbElkKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAuLi5ldmVudCwKICAgICAgICAgICAgICAgIGV2ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogcG9sbERhdGEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgfSk7CgogICAgLy8gVHJpZ2dlciBhIHJlZnJlc2ggb2YgYm90aCBjb21wb25lbnRzCiAgICByb3V0ZXIucmVsb2FkKHsgb25seTogWydwb3N0cycsICdldmVudHMnXSB9KTsKfTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8SGVhZCB0aXRsZT0iRGFzaGJvYXJkIiAvPgogICAgPEZDTVJlZ2lzdHJhdGlvbiAvPgogICAgPE1lbWJlckxheW91dCAKICAgICAgICA6Y2F0ZWdvcmllcz0icHJvcHMuY2F0ZWdvcmllcyIKICAgICAgICA6dW5zZWVuX3Bvc3RzX2NvdW50PSJwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCIKICAgID4KICAgICAgICA8ZGl2IDpjbGFzcz0ieydmbGV4IGZsZXgtY29sJzogaXNNb2JpbGUsICdmbGV4LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsncGItMTYnOiBpc01vYmlsZSwgJ3B0LTQgcHgtNCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdmbGV4JzogIWlzTW9iaWxlfSI+CgogICAgICAgICAgICAgICAgICAgIDxNb2JpbGVFdmVudCAKICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iaXNNb2JpbGUiCiAgICAgICAgICAgICAgICAgICAgICAgIDpldmVudHM9InByb3BzLmV2ZW50cy5tYXAoZXZlbnQgPT4gKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RhdGU6IGV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBldmVudC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7ZXZlbnQuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZXZlbnQuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aDogZXZlbnQuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiBldmVudC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGw6IGV2ZW50LmV2ZW50Py5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IGV2ZW50LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2ZW50LmV2ZW50LnBvbGwub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBldmVudC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBldmVudC5ldmVudC5wb2xsLnZvdGVfY291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgfSkpIgogICAgICAgICAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgICAgICAgICBAcmVmcmVzaC1ldmVudHM9IigpID0+IHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ2V2ZW50cyddIH0pIgogICAgICAgICAgICAgICAgICAgIC8+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gZml4ZWQgbWVudSBib3R0b20gLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJpc01vYmlsZSIgY2xhc3M9ImZpeGVkIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGJnLXdoaXRlIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCB6LTUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWFyb3VuZCBwLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdtZW1iZXIubWVtYmVycycpIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTcgMjBoNXYtMmEzIDMgMCAwMC01LjM1Ni0xLjg1N00xNyAyMEg3bTEwIDB2LTJjMC0uNjU2LS4xMjYtMS4yODMtLjM1Ni0xLjg1N003IDIwSDJ2LTJhMyAzIDAgMDE1LjM1Ni0xLjg1N003IDIwdi0yYzAtLjY1Ni4xMjYtMS4yODMuMzU2LTEuODU3bTAgMGE1LjAwMiA1LjAwMiAwIDAxOS4yODggME0xNSA3YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHptNiAzYTIgMiAwIDExLTQgMCAyIDIgMCAwMTQgMHpNNyAxMGEyIDIgMCAxMS00IDAgMiAyIDAgMDE0IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJsb2RnZSIgY2xhc3M9ImFic29sdXRlIC10b3AtMSAtcmlnaHQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4tdy1bMTZweF0gaC00IGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAgdGV4dC1bMTBweF0gZm9udC1tZWRpdW0gcm91bmRlZC1mdWxsIHB4LTAuNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2RnZS5tZW1iZXJzX2NvdW50IH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPk1lbWJyaTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLmRvY3VtZW50cycpIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOSAxMmg2bS02IDRoNm0yIDVIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg1LjU4NmExIDEgMCAwMS43MDcuMjkzbDUuNDE0IDUuNDE0YTEgMSAwIDAxLjI5My43MDdWMTlhMiAyIDAgMDEtMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBtdC0xIj5Eb2N1bWVudGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5wcm9pZWN0ZScpIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlbGF0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNyAzYTEgMSAwIDAwMCAyaDZhMSAxIDAgMTAwLTJIN3pNNCA3YTEgMSAwIDAxMS0xaDEwYTEgMSAwIDExMCAySDVhMSAxIDAgMDEtMS0xek0yIDExYTIgMiAwIDAxMi0yaDEyYTIgMiAwIDAxMiAydjRhMiAyIDAgMDEtMiAySDRhMiAyIDAgMDEtMi0ydi00eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFic29sdXRlIC10b3AtMSAtcmlnaHQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4tdy1bMTZweF0gaC00IGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAgdGV4dC1bMTBweF0gZm9udC1tZWRpdW0gcm91bmRlZC1mdWxsIHB4LTAuNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2RnZT8udW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCB8fCAwIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPlByb2llY3RlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdldmVudHMnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTggN1YzbTggNFYzbS05IDhoMTBNNSAyMWgxNGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSAtdG9wLTEgLXJpZ2h0LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctWzE2cHhdIGgtNCBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHJvdW5kZWQtZnVsbCBweC0wLjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9kZ2U/LnVwY29taW5nX2V2ZW50c19jb3VudCB8fCAwIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIG10LTEiPkV2ZW5pbWVudGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtIERlc2t0b3AgT25seSAtLT4KICAgICAgICAgICAgICAgICAgICA8TGVmdFNpZGViYXIgCiAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgOmxvZGdlPSJsb2RnZSIKICAgICAgICAgICAgICAgICAgICAgICAgOnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQ9ImxvZGdlPy51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICAgICAgICAgIDp1cGNvbWluZ19ldmVudHNfY291bnQ9ImxvZGdlPy51cGNvbWluZ19ldmVudHNfY291bnQgfHwgMCIKICAgICAgICAgICAgICAgICAgICAgICAgQGNhdGVnb3J5LWNoYW5nZT0iaGFuZGxlQ2F0ZWdvcnlDaGFuZ2UiCiAgICAgICAgICAgICAgICAgICAgLz4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLSBGZWVkIC0tPgogICAgICAgICAgICAgICAgICAgIDxGZWVkIAogICAgICAgICAgICAgICAgICAgICAgICA6cG9zdHM9InBvc3RzIgogICAgICAgICAgICAgICAgICAgICAgICA6Y2F0ZWdvcmllcz0icHJvcHMuY2F0ZWdvcmllcyIKICAgICAgICAgICAgICAgICAgICAgICAgOmNhdGVnb3J5PSJwcm9wcy5jYXRlZ29yeSIKICAgICAgICAgICAgICAgICAgICAgICAgOmxvZGdlPSJsb2RnZSIKICAgICAgICAgICAgICAgICAgICAgICAgOmV2ZW50cz0icHJvcHMuZXZlbnRzIgogICAgICAgICAgICAgICAgICAgICAgICA6aXMtZGVza3RvcD0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgICAgICAgICBAdXBkYXRlLXBvc3RzPSJoYW5kbGVVcGRhdGVQb3N0cyIKICAgICAgICAgICAgICAgICAgICAgICAgQHBvbGwtdXBkYXRlZD0iaGFuZGxlUG9sbFVwZGF0ZSIKICAgICAgICAgICAgICAgICAgICAvPgoKICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLSBEZXNrdG9wIE9ubHkgLS0+CiAgICAgICAgICAgICAgICAgICAgPFJpZ2h0U2lkZWJhciAKICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgICAgICAgICA6ZXZlbnRzPSJwcm9wcy5ldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQudGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kYXRlOiBldmVudC5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2V2ZW50LmF1dGhvci5maXJzdF9uYW1lfSAke2V2ZW50LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBldmVudC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZXZlbnQuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSIKICAgICAgICAgICAgICAgICAgICAgICAgQHBvbGwtdXBkYXRlZD0iaGFuZGxlUG9sbFVwZGF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKHsgb25seTogWydldmVudHMnXSB9KSIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEJvdHRvbSBNZW51IC0tPgogICAgICAgIDxCb3R0b21NZW51IDpsb2RnZT0ibG9kZ2UiIC8+CgogICAgICAgIDwhLS0gLi4uIHJlc3Qgb2YgdGhlIGV4aXN0aW5nIG1vZGFscyAuLi4gLS0+CiAgICA8L01lbWJlckxheW91dD4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6ICNCQ0MwQzQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogI0E0QTdBQjsKfQoKLyogQ3VzdG9tIGNoZWNrYm94IGFuZCByYWRpbyBidXR0b24gc3R5bGluZyAqLwpbdHlwZT0iY2hlY2tib3giXSwgW3R5cGU9InJhZGlvIl0gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogYm9yZGVyLWJveDsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBoZWlnaHQ6IDFyZW07CiAgICB3aWR0aDogMXJlbTsKICAgIGNvbG9yOiByZ2IoNzksIDcwLCAyMjkpOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogICAgLS10dy1zaGFkb3c6IDAgMCAjMDAwMDsKICAgIHBhZGRpbmc6IDBweDsKICAgIGJvcmRlci1jb2xvcjogcmdiKDIwOSwgMjEzLCAyMTkpOwogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDsKfQoKW3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSd3aGl0ZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTEyLjIwNyA0Ljc5M2ExIDEgMCAwMTAgMS40MTRsLTUgNWExIDEgMCAwMS0xLjQxNCAwbC0yLTJhMSAxIDAgMDExLjQxNC0xLjQxNEw2LjUgOS4wODZsNC4yOTMtNC4yOTNhMSAxIDAgMDExLjQxNCAweicvJTNlJTNjL3N2ZyUzZSIpOwp9CgpbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkLCBbdHlwZT0icmFkaW8iXTpjaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRjb2xvcjsKICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOwp9CgpbdHlwZT0iY2hlY2tib3giXTpmb2N1cywgW3R5cGU9InJhZGlvIl06Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKTsKfQoKLmRwX19vdXRlcl9tZW51X3dyYXAgewogICAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgICB0b3A6IDUwJSAhaW1wb3J0YW50OwogICAgbGVmdDogNTAlICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSAhaW1wb3J0YW50OwogICAgei1pbmRleDogOTk5OTk5ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKfQoKLmRwX19tZW51IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OwogICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Cn0KCi5kcF9fYWN0aW9uX3JvdyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlN2ViICFpbXBvcnRhbnQ7Cn0KCi5kcF9fYWN0aW9uX2J1dHRvbnMgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZ2FwOiA4cHggIWltcG9ydGFudDsKfQoKLmRwX19hY3Rpb25fYnV0dG9uIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50OwogICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7Cn0KCi5kcF9fYWN0aW9uX2J1dHRvbl9hcHBseSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2I4MmY2ICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQoKLmRwX19hY3Rpb25fYnV0dG9uX2NhbmNlbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmNGY2ICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogIzM3NDE1MSAhaW1wb3J0YW50Owp9Cjwvc3R5bGU+IAAAAAAAAAAA54sAAAAAAAAAAAAAAAAAAAAAAADniwAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAQawAAAAAAABJrAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAADpiwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IE1lbWJlckxheW91dCBmcm9tICdAL0xheW91dHMvTWVtYmVyTGF5b3V0LnZ1ZSc7CmltcG9ydCBMZWZ0U2lkZWJhciBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL0xlZnRTaWRlYmFyLnZ1ZSc7CmltcG9ydCBSaWdodFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9SaWdodFNpZGViYXIudnVlJzsKaW1wb3J0IEZlZWQgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9GZWVkLnZ1ZSc7CmltcG9ydCB7IEhlYWQgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyB1c2VQYWdlIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgd2F0Y2gsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7CmltcG9ydCBNb2RhbCBmcm9tICdAL0NvbXBvbmVudHMvTW9kYWwudnVlJzsKaW1wb3J0IElucHV0TGFiZWwgZnJvbSAnQC9Db21wb25lbnRzL0lucHV0TGFiZWwudnVlJzsKaW1wb3J0IFRleHRJbnB1dCBmcm9tICdAL0NvbXBvbmVudHMvVGV4dElucHV0LnZ1ZSc7CmltcG9ydCBUZXh0YXJlYSBmcm9tICdAL0NvbXBvbmVudHMvVGV4dGFyZWEudnVlJzsKaW1wb3J0IElucHV0RXJyb3IgZnJvbSAnQC9Db21wb25lbnRzL0lucHV0RXJyb3IudnVlJzsKaW1wb3J0IFByaW1hcnlCdXR0b24gZnJvbSAnQC9Db21wb25lbnRzL1ByaW1hcnlCdXR0b24udnVlJzsKaW1wb3J0IHsgQ2FsZW5kYXJJY29uLCBNYXBQaW5JY29uIH0gZnJvbSAnQGhlcm9pY29ucy92dWUvMjQvb3V0bGluZSc7CmltcG9ydCBEYXRlcGlja2VyIGZyb20gJ0B2dWVwaWMvdnVlLWRhdGVwaWNrZXInOwppbXBvcnQgJ0B2dWVwaWMvdnVlLWRhdGVwaWNrZXIvZGlzdC9tYWluLmNzcyc7CmltcG9ydCBGQ01SZWdpc3RyYXRpb24gZnJvbSAnQC9Db21wb25lbnRzL0ZDTVJlZ2lzdHJhdGlvbi52dWUnOwppbXBvcnQgeyBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7CmltcG9ydCBNb2JpbGVFdmVudCBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL01vYmlsZUV2ZW50LnZ1ZSc7Cgpjb25zdCBwYWdlID0gdXNlUGFnZSgpOwpjb25zdCB1c2VyID0gcGFnZS5wcm9wcy5hdXRoLnVzZXI7CmNvbnN0IGxvZGdlID0gcGFnZS5wcm9wcy5sb2RnZTsKCmNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBjb21wdXRlZCgoKSA9PiBpbXBvcnQubWV0YS5lbnYuTU9ERSA9PT0gJ2RldmVsb3BtZW50Jyk7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIHBvc3RzOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7IGRhdGE6IFtdIH0pCiAgICB9LAogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9LAogICAgY2F0ZWdvcnk6IHsKICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgZGVmYXVsdDogJ2FsbCcKICAgIH0sCiAgICBsb2RnZTogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogZmFsc2UsCiAgICAgICAgZGVmYXVsdDogKCkgPT4gbnVsbAogICAgfSwKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKLy8gQ3JlYXRlIGEgcmVhY3RpdmUgY29weSBvZiB0aGUgcG9zdHMKY29uc3QgcG9zdHMgPSByZWYocHJvcHMucG9zdHMpOwpjb25zdCBldmVudHMgPSByZWYocHJvcHMuZXZlbnRzKTsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLnBvc3RzCndhdGNoKCgpID0+IHByb3BzLnBvc3RzLCAobmV3UG9zdHMpID0+IHsKICAgIHBvc3RzLnZhbHVlID0gbmV3UG9zdHM7Cn0sIHsgZGVlcDogdHJ1ZSB9KTsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLmV2ZW50cwp3YXRjaCgoKSA9PiBwcm9wcy5ldmVudHMsIChuZXdFdmVudHMpID0+IHsKICAgIGV2ZW50cy52YWx1ZSA9IG5ld0V2ZW50czsKfSwgeyBkZWVwOiB0cnVlIH0pOwoKLy8gTWVtb2l6ZSB0aGUgc2FmZVBvc3RzIGNvbXB1dGF0aW9uIHdpdGggYmV0dGVyIGVtcHR5IHN0YXRlIGhhbmRsaW5nCmNvbnN0IHNhZmVQb3N0cyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghcHJvcHMucG9zdHM/LmRhdGEpIHJldHVybiB7IGRhdGE6IFtdIH07CiAgICAKICAgIHJldHVybiB7CiAgICAgICAgZGF0YTogcHJvcHMucG9zdHMuZGF0YS5tYXAocG9zdCA9PiAoewogICAgICAgICAgICBpZDogcG9zdD8uaWQgfHwgJycsCiAgICAgICAgICAgIGF1dGhvcjogcG9zdD8uYXV0aG9yIHx8IHt9LAogICAgICAgICAgICBjb21tZW50czogQXJyYXkuaXNBcnJheShwb3N0Py5jb21tZW50cykgPyBwb3N0LmNvbW1lbnRzIDogW10sCiAgICAgICAgICAgIHJlYWN0aW9uczogQXJyYXkuaXNBcnJheShwb3N0Py5yZWFjdGlvbnMpID8gcG9zdC5yZWFjdGlvbnMgOiBbXSwKICAgICAgICAgICAgZXZlbnQ6IHBvc3Q/LmV2ZW50IHx8IG51bGwsCiAgICAgICAgICAgIHBvbGw6IHBvc3Q/LnBvbGwgfHwgbnVsbCwKICAgICAgICAgICAgaW1hZ2U6IHBvc3Q/LmltYWdlIHx8IG51bGwsCiAgICAgICAgICAgIGNvbnRlbnQ6IHBvc3Q/LmNvbnRlbnQgfHwgJycsCiAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IHBvc3Q/LmNyZWF0ZWRfYXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpCiAgICAgICAgfSkpCiAgICB9Owp9KTsKCi8vIE1lbW9pemUgdGhlIHByb2ZpbGUgcGhvdG8gVVJMIHdpdGggYmV0dGVyIGZhbGxiYWNrCmNvbnN0IHByb2ZpbGVQaG90b1VybCA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghdXNlcikgcmV0dXJuICcnOwogICAgcmV0dXJuIHVzZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuZmlyc3RfbmFtZSArICcgJyArIHVzZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYDsKfSk7CgovLyBNZW1vaXplIHRoZSBuZXh0RXZlbnQgY29tcHV0YXRpb24KY29uc3QgbmV4dEV2ZW50ID0gY29tcHV0ZWQoKCkgPT4gewogICAgaWYgKCFwcm9wcy5ldmVudHM/Lmxlbmd0aCkgcmV0dXJuIG51bGw7CiAgICAKICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7CiAgICByZXR1cm4gcHJvcHMuZXZlbnRzCiAgICAgICAgLmZpbHRlcihldmVudCA9PiB7CiAgICAgICAgICAgIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUpOwogICAgICAgICAgICByZXR1cm4gZXZlbnREYXRlID4gbm93OwogICAgICAgIH0pCiAgICAgICAgLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSkgLSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpKVswXTsKfSk7Cgpjb25zdCBzaG93UG9zdE1vZGFsID0gcmVmKGZhbHNlKTsKY29uc3Qgc2VsZWN0ZWRDYXRlZ29yeSA9IHJlZignJyk7Cgpjb25zdCBmb3JtID0gdXNlRm9ybSh7CiAgICBjb250ZW50OiAnJywKICAgIGltYWdlOiBudWxsLAogICAgY2F0ZWdvcnlfaWQ6IG51bGwsCiAgICBsb2RnZV9pZDogbnVsbCwKICAgIGNhdGVnb3J5OiBudWxsCn0pOwoKLy8gVXBkYXRlIGNhdGVnb3J5X2lkIHdoZW4gY29tcG9uZW50IG1vdW50cyBhbmQgd2hlbiBjYXRlZ29yeSBjaGFuZ2VzCndhdGNoKCgpID0+IHByb3BzLmNhdGVnb3J5LCAobmV3Q2F0ZWdvcnkpID0+IHsKICAgIGNvbnN0IGNhdGVnb3J5ID0gcHJvcHMuY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuc2x1ZyA9PT0gbmV3Q2F0ZWdvcnkpOwogICAgaWYgKGNhdGVnb3J5KSB7CiAgICAgICAgZm9ybS5jYXRlZ29yeV9pZCA9IGNhdGVnb3J5LmlkOwogICAgICAgIGZvcm0ubG9kZ2VfaWQgPSBsb2RnZS5pZDsKICAgICAgICBmb3JtLmNhdGVnb3J5ID0gbmV3Q2F0ZWdvcnk7CiAgICB9Cn0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pOwoKY29uc3Qgc2hvd0Vtb2ppUGlja2VyID0gcmVmKGZhbHNlKTsKY29uc3QgZmlsZUlucHV0ID0gcmVmKG51bGwpOwpjb25zdCBpbWFnZVByZXZpZXdVcmwgPSByZWYobnVsbCk7Cgpjb25zdCBjcmVhdGVQb3N0ID0gYXN5bmMgKCkgPT4gewogICAgLy8gRW5zdXJlIGNhdGVnb3J5X2lkIGFuZCBsb2RnZV9pZCBhcmUgc2V0IGJlZm9yZSBzdWJtaXNzaW9uCiAgICBpZiAoIWZvcm0uY2F0ZWdvcnlfaWQgJiYgcHJvcHMuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgY29uc3QgY3VycmVudENhdGVnb3J5ID0gcHJvcHMuY2F0ZWdvcmllcy5maW5kKGNhdCA9PiBjYXQuc2x1ZyA9PT0gcHJvcHMuY2F0ZWdvcnkpOwogICAgICAgIGZvcm0uY2F0ZWdvcnlfaWQgPSBjdXJyZW50Q2F0ZWdvcnkgPyBjdXJyZW50Q2F0ZWdvcnkuaWQgOiBwcm9wcy5jYXRlZ29yaWVzWzBdLmlkOwogICAgfQogICAgaWYgKCFmb3JtLmxvZGdlX2lkKSB7CiAgICAgICAgZm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgfQogICAgCiAgICAvLyBBZGQgdGhlIGN1cnJlbnQgY2F0ZWdvcnkgdG8gdGhlIGZvcm0gZGF0YQogICAgZm9ybS5jYXRlZ29yeSA9IHByb3BzLmNhdGVnb3J5OwogICAgCiAgICBmb3JtLnBvc3Qocm91dGUoJ21lbWJlci5wb3N0cy5zdG9yZScpLCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgLy8gUmVzZXQgZm9ybSBhbmQgaW1hZ2UgcHJldmlldwogICAgICAgICAgICBmb3JtLnJlc2V0KCk7CiAgICAgICAgICAgIGlmIChpbWFnZVByZXZpZXdVcmwudmFsdWUpIHsKICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoaW1hZ2VQcmV2aWV3VXJsLnZhbHVlKTsKICAgICAgICAgICAgICAgIGltYWdlUHJldmlld1VybC52YWx1ZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2hvd1Bvc3RNb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICBzaG93RW1vamlQaWNrZXIudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgLy8gVXNlIHJvdXRlci52aXNpdCB0byBwcmVzZXJ2ZSB0aGUgY2F0ZWdvcnkgcGFyYW1ldGVyCiAgICAgICAgICAgIHJvdXRlci52aXNpdChyb3V0ZSgnZGFzaGJvYXJkJywgeyBjYXRlZ29yeTogcHJvcHMuY2F0ZWdvcnkgfSksIHsKICAgICAgICAgICAgICAgIHByZXNlcnZlU3RhdGU6IHRydWUsCiAgICAgICAgICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICAgICAgICAgIG9ubHk6IFsncG9zdHMnXQogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IChlcnJvcnMpID0+IHsKICAgICAgICAgICAgLy8gSGFuZGxlIGVycm9ycyBzaWxlbnRseQogICAgICAgIH0KICAgIH0pOwp9OwoKLy8gQWRkIGEgd2F0Y2ggZm9yIHNob3dQb3N0TW9kYWwgdG8gcmVzZXQgaW1hZ2UgcHJldmlldyB3aGVuIG1vZGFsIGlzIGNsb3NlZAp3YXRjaChzaG93UG9zdE1vZGFsLCAobmV3VmFsdWUpID0+IHsKICAgIGlmICghbmV3VmFsdWUpIHsKICAgICAgICAvLyBSZXNldCBmb3JtIGFuZCBpbWFnZSBwcmV2aWV3IHdoZW4gbW9kYWwgaXMgY2xvc2VkCiAgICAgICAgZm9ybS5yZXNldCgpOwogICAgICAgIGlmIChpbWFnZVByZXZpZXdVcmwudmFsdWUpIHsKICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWFnZVByZXZpZXdVcmwudmFsdWUpOwogICAgICAgICAgICBpbWFnZVByZXZpZXdVcmwudmFsdWUgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzaG93RW1vamlQaWNrZXIudmFsdWUgPSBmYWxzZTsKICAgIH0KfSk7Cgpjb25zdCBoYW5kbGVJbWFnZVVwbG9hZCA9IChldmVudCkgPT4gewogICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTsKICAgIGlmIChmaWxlKSB7CiAgICAgICAgZm9ybS5pbWFnZSA9IGZpbGU7CiAgICAgICAgaW1hZ2VQcmV2aWV3VXJsLnZhbHVlID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgIH0KfTsKCmNvbnN0IG9wZW5GaWxlSW5wdXQgPSAoKSA9PiB7CiAgICBmaWxlSW5wdXQudmFsdWUuY2xpY2soKTsKfTsKCmNvbnN0IHJlbW92ZUltYWdlID0gKCkgPT4gewogICAgZm9ybS5pbWFnZSA9IG51bGw7CiAgICBpZiAoaW1hZ2VQcmV2aWV3VXJsLnZhbHVlKSB7CiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChpbWFnZVByZXZpZXdVcmwudmFsdWUpOwogICAgICAgIGltYWdlUHJldmlld1VybC52YWx1ZSA9IG51bGw7CiAgICB9Cn07Cgpjb25zdCBpbnNlcnRFbW9qaSA9IChlbW9qaSkgPT4gewogICAgZm9ybS5jb250ZW50ICs9IGVtb2ppOwogICAgc2hvd0Vtb2ppUGlja2VyLnZhbHVlID0gZmFsc2U7Cn07Cgpjb25zdCB3YWxscyA9IFsKICAgIHsgaWQ6ICdhbGwnLCBuYW1lOiAnVG9hdGUnLCBpY29uOiAnTTEwIDJhMSAxIDAgMDExIDF2MWExIDEgMCAxMS0yIDBWM2ExIDEgMCAwMTEtMXptNCA4YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHptLS40NjQgNC45NWwuNzA3LjcwN2ExIDEgMCAwMDEuNDE0LTEuNDE0bC0uNzA3LS43MDdhMSAxIDAgMDAtMS40MTQgMS40MTR6bTIuMTItMTAuNjA3YTEgMSAwIDAxMCAxLjQxNGwtLjcwNi43MDdhMSAxIDAgMTEtMS40MTQtMS40MTRsLjcwNy0uNzA3YTEgMSAwIDAxMS40MTQgMHpNMTcgMTFhMSAxIDAgMTAwLTJoLTFhMSAxIDAgMTAwIDJoMXptLTcgNGExIDEgMCAwMTEgMXYxYTEgMSAwIDExLTIgMHYtMWExIDEgMCAwMTEtMXpNNS4wNSA2LjQ2NEExIDEgMCAxMDYuNDY1IDUuMDVsLS43MDgtLjcwN2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwuNzA3LjcwN3ptMS40MTQgOC40ODZsLS43MDcuNzA3YTEgMSAwIDAxLTEuNDE0LTEuNDE0bC43MDctLjcwN2ExIDEgMCAwMTEuNDE0IDEuNDE0ek00IDExYTEgMSAwIDEwMC0ySDNhMSAxIDAgMDAwIDJoMXonIH0sCiAgICB7IGlkOiAnZXZlbnRzJywgbmFtZTogJ0V2ZW5pbWVudGUnLCBpY29uOiAnTTggN1YzbTggNFYzbS05IDhoMTBNNSAyMWgxNGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMnonIH0sCiAgICB7IGlkOiAnYW5ub3VuY2VtZW50cycsIG5hbWU6ICdBbnVuyJt1cmknLCBpY29uOiAnTTExIDUuODgyVjE5LjI0YTEuNzYgMS43NiAwIDAxLTMuNDE3LjU5MmwtMi4xNDctNi4xNU0xOCAxM2EzIDMgMCAxMDAtNk01LjQzNiAxMy42ODNBNC4wMDEgNC4wMDEgMCAwMTcgNmgxLjgzMmM0LjEgMCA3LjYyNS0xLjIzNCA5LjE2OC0zdjE0Yy0xLjU0My0xLjc2Ni01LjA2Ny0zLTkuMTY4LTNIN2EzLjk4OCAzLjk4OCAwIDAxLTEuNTY0LS4zMTd6JyB9LAogICAgeyBpZDogJ2Rpc2N1c3Npb25zJywgbmFtZTogJ0Rpc2N1yJtpaScsIGljb246ICdNOCAxMmguMDFNMTIgMTJoLjAxTTE2IDEyaC4wMU0yMSAxMmMwIDQuNDE4LTQuMDMgOC05IDhhOS44NjMgOS44NjMgMCAwMS00LjI1NS0uOTQ5TDMgMjBsMS4zOTUtMy43MkMzLjUxMiAxNS4wNDIgMyAxMy41NzQgMyAxMmMwLTQuNDE4IDQuMDMtOCA5LThzOSAzLjU4MiA5IDh6JyB9Cl07Cgpjb25zdCBhY3RpdmVSZWFjdGlvblBvc3QgPSByZWYobnVsbCk7CmNvbnN0IGFjdGl2ZUNvbW1lbnRzUG9zdCA9IHJlZihudWxsKTsKY29uc3QgY29tbWVudEZvcm0gPSB1c2VGb3JtKHsKICAgIGNvbnRlbnQ6ICcnLAogICAgcG9zdF9pZDogbnVsbAp9KTsKCmNvbnN0IHNob3dDb21tZW50SW5wdXQgPSByZWYoZmFsc2UpOwpjb25zdCBuZXdDb21tZW50ID0gcmVmKCcnKTsKCmNvbnN0IHRvZ2dsZVJlYWN0aW9uUGlja2VyID0gKHBvc3RJZCkgPT4gewogICAgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID0gYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID09PSBwb3N0SWQgPyBudWxsIDogcG9zdElkOwp9OwoKY29uc3QgaGFuZGxlTGlrZUNsaWNrID0gYXN5bmMgKHBvc3QpID0+IHsKICAgIGNvbnN0IGV4aXN0aW5nUmVhY3Rpb24gPSBwb3N0LnJlYWN0aW9ucy5maW5kKHIgPT4gci51c2VyX2lkID09PSB1c2VyLmlkKTsKICAgIGlmIChleGlzdGluZ1JlYWN0aW9uKSB7CiAgICAgICAgYXdhaXQgYXhpb3MuZGVsZXRlKHJvdXRlKCdtZW1iZXIucG9zdHMucmVhY3Rpb25zLmRlc3Ryb3knLCBwb3N0LmlkKSk7CiAgICAgICAgYXdhaXQgcmVmcmVzaFBvc3RzKCk7CiAgICB9IGVsc2UgewogICAgICAgIHRvZ2dsZVJlYWN0aW9uUGlja2VyKHBvc3QuaWQpOwogICAgfQp9OwoKY29uc3QgcmVhY3RUb1Bvc3QgPSBhc3luYyAocG9zdCwgZW1vamkpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdSZWFjdGlvbiA9IHBvc3QucmVhY3Rpb25zLmZpbmQoCiAgICAgICAgICAgIHJlYWN0aW9uID0+IHJlYWN0aW9uLnVzZXJfaWQgPT09IHVzZXIuaWQgJiYgcmVhY3Rpb24uZW1vamkgPT09IGVtb2ppCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICBpZiAoZXhpc3RpbmdSZWFjdGlvbikgewogICAgICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5yZWFjdGlvbnMuZGVzdHJveScsIHBvc3QuaWQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMucmVhY3Rpb25zLnN0b3JlJywgcG9zdC5pZCksIHsgZW1vamkgfSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGFjdGl2ZVJlYWN0aW9uUG9zdC52YWx1ZSA9IG51bGw7CiAgICAgICAgYXdhaXQgcmVmcmVzaFBvc3RzKCk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MTkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0KICAgIH0KfTsKCi8vIEFkZCBoZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIHVzZXIgcmVhY3RlZCB3aXRoIHNwZWNpZmljIGVtb2ppCmNvbnN0IGhhc1JlYWN0ZWQgPSAocG9zdCwgZW1vamkpID0+IHsKICAgIGlmICghcG9zdD8ucmVhY3Rpb25zIHx8ICFBcnJheS5pc0FycmF5KHBvc3QucmVhY3Rpb25zKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHBvc3QucmVhY3Rpb25zLnNvbWUoCiAgICAgICAgcmVhY3Rpb24gPT4gcmVhY3Rpb24/LnVzZXJfaWQgPT09IHVzZXI/LmlkICYmIHJlYWN0aW9uPy5lbW9qaSA9PT0gZW1vamkKICAgICk7Cn07Cgpjb25zdCBkZWxldGVDb21tZW50ID0gYXN5bmMgKGNvbW1lbnQpID0+IHsKICAgIGlmICghY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbW1lbnQ/JykpIHJldHVybjsKICAgIAogICAgdHJ5IHsKICAgICAgICBhd2FpdCBheGlvcy5kZWxldGUocm91dGUoJ21lbWJlci5wb3N0cy5jb21tZW50cy5kZXN0cm95JywgY29tbWVudC5pZCkpOwogICAgICAgIGF3YWl0IHJlZnJlc2hQb3N0cygpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyBjb21tZW50OicsIGVycm9yKTsKICAgIH0KfTsKCmNvbnN0IHNob3dDb21tZW50cyA9IChwb3N0KSA9PiB7CiAgICBhY3RpdmVDb21tZW50c1Bvc3QudmFsdWUgPSBhY3RpdmVDb21tZW50c1Bvc3QudmFsdWUgPT09IHBvc3QuaWQgPyBudWxsIDogcG9zdC5pZDsKICAgIGlmIChhY3RpdmVDb21tZW50c1Bvc3QudmFsdWUgPT09IHBvc3QuaWQpIHsKICAgICAgICBjb21tZW50Rm9ybS5wb3N0X2lkID0gcG9zdC5pZDsKICAgIH0KfTsKCmNvbnN0IGFkZENvbW1lbnQgPSAocG9zdCkgPT4gewogICAgaWYgKCFjb21tZW50Rm9ybS5jb250ZW50LnRyaW0oKSkgcmV0dXJuOwogICAgCiAgICBjb21tZW50Rm9ybS5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMuY29tbWVudHMuc3RvcmUnLCBwb3N0LmlkKSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICBjb21tZW50Rm9ybS5yZXNldCgpOwogICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSBwb3N0IHRvIGdldCB1cGRhdGVkIGNvbW1lbnRzCiAgICAgICAgICAgIHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ3Bvc3RzJ10gfSk7CiAgICAgICAgfQogICAgfSk7Cn07Cgpjb25zdCByZWZyZXNoUG9zdHMgPSBhc3luYyAoKSA9PiB7CiAgICBhd2FpdCByb3V0ZXIucmVsb2FkKHsgb25seTogWydwb3N0cyddIH0pOwp9OwoKY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50KSA9PiB7CiAgICAvLyBHZXQgYWxsIG9wZW4gZW1vamkgcGlja2VycwogICAgY29uc3QgZW1vamlQaWNrZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmVtb2ppLXBpY2tlcicpOwogICAgY29uc3QgbGlrZUJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGlrZS1idXR0b24nKTsKICAgIAogICAgLy8gQ2hlY2sgaWYgY2xpY2sgaXMgb3V0c2lkZSBib3RoIHRoZSBlbW9qaSBwaWNrZXIgYW5kIGxpa2UgYnV0dG9uCiAgICBjb25zdCBjbGlja2VkT3V0c2lkZSA9IEFycmF5LmZyb20oZW1vamlQaWNrZXJzKS5ldmVyeShwaWNrZXIgPT4gIXBpY2tlci5jb250YWlucyhldmVudC50YXJnZXQpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20obGlrZUJ1dHRvbnMpLmV2ZXJ5KGJ1dHRvbiA9PiAhYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpOwogICAgCiAgICBpZiAoY2xpY2tlZE91dHNpZGUgJiYgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgYWN0aXZlUmVhY3Rpb25Qb3N0LnZhbHVlID0gbnVsbDsKICAgIH0KfTsKCmNvbnN0IGtpID0gcmVmKG51bGwpOwoKY29uc3QgaGFuZGxlVXBkYXRlUG9zdHMgPSAodXBkYXRlRGF0YSkgPT4gewogICAgaWYgKCF1cGRhdGVEYXRhLnBvc3RJZCB8fCAhdXBkYXRlRGF0YS5wb3N0RGF0YSkgewogICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCB1cGRhdGUgZGF0YTonLCB1cGRhdGVEYXRhKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHBvc3QKICAgIGNvbnN0IHVwZGF0ZWRQb3N0cyA9IHBvc3RzLnZhbHVlLmRhdGEubWFwKHBvc3QgPT4gewogICAgICAgIGlmIChwb3N0LmlkID09PSB1cGRhdGVEYXRhLnBvc3RJZCkgewogICAgICAgICAgICAvLyBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhlIHVwZGF0ZWQgcG9zdCBkYXRhCiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh1cGRhdGVEYXRhLnBvc3REYXRhKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBQcmVzZXJ2ZSBhbnkgZXhpc3RpbmcgZGF0YSB0aGF0IG1pZ2h0IG5vdCBiZSBpbiB0aGUgdXBkYXRlCiAgICAgICAgICAgIGNvbnN0IGZpbmFsUG9zdCA9IHsKICAgICAgICAgICAgICAgIC4uLnBvc3QsCiAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdCwKICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWQKICAgICAgICAgICAgICAgIHJlYWN0aW9uczogdXBkYXRlZFBvc3QucmVhY3Rpb25zIHx8IHBvc3QucmVhY3Rpb25zIHx8IFtdLAogICAgICAgICAgICAgICAgY29tbWVudHM6IHVwZGF0ZWRQb3N0LmNvbW1lbnRzIHx8IHBvc3QuY29tbWVudHMgfHwgW10sCiAgICAgICAgICAgICAgICB2aWV3czogdXBkYXRlZFBvc3Qudmlld3MgfHwgcG9zdC52aWV3cyB8fCBbXSwKICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGV2ZW50IGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgICAgICBldmVudDogdXBkYXRlZFBvc3QuZXZlbnQgPyB7CiAgICAgICAgICAgICAgICAgICAgLi4ucG9zdC5ldmVudCwKICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkUG9zdC5ldmVudCwKICAgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBwb2xsIGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvc3QuZXZlbnQucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgLi4ucG9zdC5ldmVudD8ucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZFBvc3QuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHZvdGUgZGF0YSBpcyBwcmVzZXJ2ZWQKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IHVwZGF0ZWRQb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgcG9zdC5ldmVudD8ucG9sbD8udm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB1cGRhdGVkUG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHBvc3QuZXZlbnQ/LnBvbGw/LnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgICAgICAgICAgfSA6IHBvc3QuZXZlbnQ/LnBvbGwKICAgICAgICAgICAgICAgIH0gOiBwb3N0LmV2ZW50LAogICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgcG9sbDogdXBkYXRlZFBvc3QucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAuLi5wb3N0LnBvbGwsCiAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZFBvc3QucG9sbCwKICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdm90ZSBkYXRhIGlzIHByZXNlcnZlZAogICAgICAgICAgICAgICAgICAgIHZvdGVzOiB1cGRhdGVkUG9zdC5wb2xsLnZvdGVzIHx8IHBvc3QucG9sbD8udm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHVwZGF0ZWRQb3N0LnBvbGwudm90ZV9jb3VudHMgfHwgcG9zdC5wb2xsPy52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgfSA6IHBvc3QucG9sbAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBldmVudCB1cGRhdGUsIHVwZGF0ZSB0aGUgZXZlbnRzIGFycmF5CiAgICAgICAgICAgIGlmIChmaW5hbFBvc3QuZXZlbnQpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBldmVudHMudmFsdWUuZmluZEluZGV4KGUgPT4gZS5pZCA9PT0gZmluYWxQb3N0LmV2ZW50LmlkKTsKICAgICAgICAgICAgICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBldmVudHMgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCBldmVudAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uZXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdID0gewogICAgICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdLAogICAgICAgICAgICAgICAgICAgICAgICAuLi5maW5hbFBvc3QuZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGw6IGZpbmFsUG9zdC5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udXBkYXRlZEV2ZW50c1tldmVudEluZGV4XT8ucG9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbmFsUG9zdC5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGZpbmFsUG9zdC5ldmVudC5wb2xsLnZvdGVzIHx8IHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0/LnBvbGw/LnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IGZpbmFsUG9zdC5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0/LnBvbGw/LnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiB1cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdPy5wb2xsCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBldmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmluYWxQb3N0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcG9zdDsKICAgIH0pOwogICAgCiAgICAvLyBVcGRhdGUgdGhlIHBvc3RzIHdpdGggdGhlIG5ldyBkYXRhIHVzaW5nIGEgbmV3IG9iamVjdCByZWZlcmVuY2UKICAgIHBvc3RzLnZhbHVlID0gewogICAgICAgIC4uLnBvc3RzLnZhbHVlLAogICAgICAgIGRhdGE6IHVwZGF0ZWRQb3N0cwogICAgfTsKICAgIAogICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUgYnkgY3JlYXRpbmcgbmV3IG9iamVjdHMKICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAvLyBDcmVhdGUgbmV3IGFycmF5IHJlZmVyZW5jZXMgdG8gZm9yY2UgcmVhY3Rpdml0eQogICAgICAgIHBvc3RzLnZhbHVlID0gewogICAgICAgICAgICAuLi5wb3N0cy52YWx1ZSwKICAgICAgICAgICAgZGF0YTogWy4uLnBvc3RzLnZhbHVlLmRhdGFdCiAgICAgICAgfTsKICAgICAgICBldmVudHMudmFsdWUgPSBbLi4uZXZlbnRzLnZhbHVlXTsKICAgICAgICAKICAgICAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIG5vdGlmeSBjb21wb25lbnRzIG9mIHRoZSB1cGRhdGUKICAgICAgICByb3V0ZXIucmVsb2FkKHsgb25seTogWydwb3N0cycsICdldmVudHMnXSB9KTsKICAgIH0pOwp9OwoKLy8gQWRkIHdpbmRvdyBzaXplIGRldGVjdGlvbgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwp9KTsKCi8vIEFkZCB0aGlzIGhlbHBlciBmdW5jdGlvbiB0byBjb3VudCByZWFjdGlvbnMgYnkgZW1vamkKY29uc3QgZ2V0UmVhY3Rpb25Db3VudHMgPSAocmVhY3Rpb25zKSA9PiB7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVhY3Rpb25zKSkgcmV0dXJuIHt9OwogICAgcmV0dXJuIHJlYWN0aW9ucy5yZWR1Y2UoKGNvdW50cywgcmVhY3Rpb24pID0+IHsKICAgICAgICBpZiAocmVhY3Rpb24/LmVtb2ppKSB7CiAgICAgICAgY291bnRzW3JlYWN0aW9uLmVtb2ppXSA9IChjb3VudHNbcmVhY3Rpb24uZW1vamldIHx8IDApICsgMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvdW50czsKICAgIH0sIHt9KTsKfTsKCi8vIEFkZCBhIG1ldGhvZCB0byBoYW5kbGUgY2F0ZWdvcnkgY2hhbmdlcwpjb25zdCBoYW5kbGVDYXRlZ29yeUNoYW5nZSA9IChjYXRlZ29yeSkgPT4gewogICAgcm91dGVyLnZpc2l0KHJvdXRlKCdkYXNoYm9hcmQnLCB7IGNhdGVnb3J5IH0pLCB7CiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgIH0pOwp9OwoKLy8gQWRkIGEgZGF0ZSBmb3JtYXR0aW5nIGZ1bmN0aW9uCmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gJyc7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7CiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gZGF0ZVN0cmluZzsgLy8gUmV0dXJuIG9yaWdpbmFsIHN0cmluZyBpZiBpbnZhbGlkIGRhdGUKICAgIAogICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdyby1STycsIHsKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBtb250aDogJ2xvbmcnLAogICAgICAgIHllYXI6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pLmZvcm1hdChkYXRlKTsKfTsKCmNvbnN0IGZvcm1hdFBvc3RDb250ZW50ID0gKGNvbnRlbnQpID0+IHsKICAgIHJldHVybiBjb250ZW50LnJlcGxhY2UoL1xuL2csICc8YnI+Jyk7Cn07Cgpjb25zdCBmb3JtYXREYXRlVGltZSA9IChkYXRlVGltZVN0cmluZykgPT4gewogICAgaWYgKCFkYXRlVGltZVN0cmluZykgcmV0dXJuICcnOwogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVUaW1lU3RyaW5nKTsKICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiBkYXRlVGltZVN0cmluZzsgLy8gUmV0dXJuIG9yaWdpbmFsIHN0cmluZyBpZiBpbnZhbGlkIGRhdGUKICAgIAogICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgewogICAgICAgIHdlZWtkYXk6ICdsb25nJywKICAgICAgICB5ZWFyOiAnbnVtZXJpYycsCiAgICAgICAgbW9udGg6ICdsb25nJywKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pOwp9OwoKY29uc3Qgc2hvd0V2ZW50TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzaG93UG9sbE1vZGFsID0gcmVmKGZhbHNlKTsKY29uc3QgZXZlbnRGb3JtID0gdXNlRm9ybSh7CiAgICB0aXRsZTogJycsCiAgICBkZXNjcmlwdGlvbjogJycsCiAgICBzdGFydF9kYXRlOiAnJywKICAgIGxvY2F0aW9uOiAnJywKICAgIGNhdGVnb3J5X2lkOiBudWxsLAogICAgbG9kZ2VfaWQ6IG51bGwsCiAgICBoYXNfcG9sbDogZmFsc2UsCiAgICBwb2xsX3F1ZXN0aW9uOiAnJywKICAgIHBvbGxfb3B0aW9uczogWycnLCAnJ10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgbm90aWZ5X25vdzogZmFsc2UsCiAgICBub3RpZnlfMjRoX2JlZm9yZTogZmFsc2UKfSk7Cgpjb25zdCBwb2xsRm9ybSA9IHVzZUZvcm0oewogICAgcXVlc3Rpb246ICcnLAogICAgb3B0aW9uczogWycnLCAnJ10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgY2F0ZWdvcnlfaWQ6IG51bGwsCiAgICBsb2RnZV9pZDogbnVsbAp9KTsKCi8vIEFkZCBtZXRob2RzIGZvciBtYW5hZ2luZyBwb2xsIG9wdGlvbnMKY29uc3QgYWRkUG9sbE9wdGlvbiA9ICgpID0+IHsKICAgIGV2ZW50Rm9ybS5wb2xsX29wdGlvbnMucHVzaCgnJyk7Cn07Cgpjb25zdCByZW1vdmVQb2xsT3B0aW9uID0gKGluZGV4KSA9PiB7CiAgICBldmVudEZvcm0ucG9sbF9vcHRpb25zLnNwbGljZShpbmRleCwgMSk7Cn07Cgpjb25zdCB1cGRhdGVQb2xsT3B0aW9uID0gKGluZGV4LCB2YWx1ZSkgPT4gewogICAgZXZlbnRGb3JtLnBvbGxfb3B0aW9uc1tpbmRleF0gPSB2YWx1ZTsKfTsKCi8vIEFkZCBtZXRob2RzIGZvciBtYW5hZ2luZyBzdGFuZGFsb25lIHBvbGwgb3B0aW9ucwpjb25zdCBhZGRTdGFuZGFsb25lUG9sbE9wdGlvbiA9ICgpID0+IHsKICAgIHBvbGxGb3JtLm9wdGlvbnMucHVzaCgnJyk7Cn07Cgpjb25zdCByZW1vdmVTdGFuZGFsb25lUG9sbE9wdGlvbiA9IChpbmRleCkgPT4gewogICAgcG9sbEZvcm0ub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpOwp9OwoKY29uc3QgdXBkYXRlU3RhbmRhbG9uZVBvbGxPcHRpb24gPSAoaW5kZXgsIHZhbHVlKSA9PiB7CiAgICBwb2xsRm9ybS5vcHRpb25zW2luZGV4XSA9IHZhbHVlOwp9OwoKLy8gVXBkYXRlIHRoZSBidXR0b24gY2xpY2sgaGFuZGxlciB0byBzZXQgY2F0ZWdvcnlfaWQgYW5kIGxvZGdlX2lkCmNvbnN0IGhhbmRsZUV2ZW50QnV0dG9uQ2xpY2sgPSAoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yeSA9IHByb3BzLmNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LnNsdWcgPT09IHByb3BzLmNhdGVnb3J5KTsKICAgIGlmIChjYXRlZ29yeSkgewogICAgICAgIGV2ZW50Rm9ybS5jYXRlZ29yeV9pZCA9IGNhdGVnb3J5LmlkOwogICAgfQogICAgZXZlbnRGb3JtLmxvZGdlX2lkID0gbG9kZ2UuaWQ7CiAgICBzaG93RXZlbnRNb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBoYW5kbGVQb2xsQnV0dG9uQ2xpY2sgPSAoKSA9PiB7CiAgICBjb25zdCBjYXRlZ29yeSA9IHByb3BzLmNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LnNsdWcgPT09IHByb3BzLmNhdGVnb3J5KTsKICAgIGlmIChjYXRlZ29yeSkgewogICAgICAgIHBvbGxGb3JtLmNhdGVnb3J5X2lkID0gY2F0ZWdvcnkuaWQ7CiAgICB9CiAgICBwb2xsRm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgc2hvd1BvbGxNb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBjcmVhdGVFdmVudCA9ICgpID0+IHsKICAgIC8vIE9ubHkgY2hlY2sgZm9yIGR1cGxpY2F0ZSBvcHRpb25zIGlmIGhhc19wb2xsIGlzIHRydWUKICAgIGlmIChldmVudEZvcm0uaGFzX3BvbGwpIHsKICAgICAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIG9wdGlvbnMKICAgICAgICBjb25zdCBkdXBsaWNhdGVPcHRpb25zID0gZXZlbnRGb3JtLnBvbGxfb3B0aW9ucy5maWx0ZXIoKG9wdGlvbiwgaW5kZXgpID0+IAogICAgICAgICAgICBldmVudEZvcm0ucG9sbF9vcHRpb25zLmluZGV4T2Yob3B0aW9uKSAhPT0gaW5kZXgKICAgICAgICApOwogICAgICAgIAogICAgICAgIGlmIChkdXBsaWNhdGVPcHRpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgYWxlcnQoJ1BsZWFzZSBlbnN1cmUgYWxsIHBvbGwgb3B0aW9ucyBoYXZlIHVuaXF1ZSBuYW1lcy4nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gRW5zdXJlIGxvZGdlX2lkIGlzIHNldCBiZWZvcmUgc3VibWlzc2lvbgogICAgaWYgKCFldmVudEZvcm0ubG9kZ2VfaWQpIHsKICAgICAgICBldmVudEZvcm0ubG9kZ2VfaWQgPSBsb2RnZS5pZDsKICAgIH0KICAgIAogICAgZXZlbnRGb3JtLnBvc3Qocm91dGUoJ21lbWJlci5ldmVudHMuc3RvcmUnKSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICBldmVudEZvcm0ucmVzZXQoKTsKICAgICAgICAgICAgc2hvd0V2ZW50TW9kYWwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBwYWdlIGRhdGEKICAgICAgICAgICAgcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsncG9zdHMnXSB9KTsKICAgICAgICB9CiAgICB9KTsKfTsKCmNvbnN0IGNyZWF0ZVBvbGwgPSAoKSA9PiB7CiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIG9wdGlvbnMKICAgIGNvbnN0IGR1cGxpY2F0ZU9wdGlvbnMgPSBwb2xsRm9ybS5vcHRpb25zLmZpbHRlcigob3B0aW9uLCBpbmRleCkgPT4gCiAgICAgICAgcG9sbEZvcm0ub3B0aW9ucy5pbmRleE9mKG9wdGlvbikgIT09IGluZGV4CiAgICApOwogICAgCiAgICBpZiAoZHVwbGljYXRlT3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgYWxlcnQoJ1BsZWFzZSBlbnN1cmUgYWxsIHBvbGwgb3B0aW9ucyBoYXZlIHVuaXF1ZSBuYW1lcy4nKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8vIEVuc3VyZSBsb2RnZV9pZCBpcyBzZXQgYmVmb3JlIHN1Ym1pc3Npb24KICAgIGlmICghcG9sbEZvcm0ubG9kZ2VfaWQpIHsKICAgICAgICBwb2xsRm9ybS5sb2RnZV9pZCA9IGxvZGdlLmlkOwogICAgfQogICAgCiAgICBwb2xsRm9ybS5wb3N0KHJvdXRlKCdwb2xscy5zdG9yZScpLCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIHBvbGxGb3JtLnJlc2V0KCk7CiAgICAgICAgICAgIHNob3dQb2xsTW9kYWwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgLy8gUmVsb2FkIHRoZSBwYWdlIGRhdGEKICAgICAgICAgICAgcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsncG9zdHMnXSB9KTsKICAgICAgICB9CiAgICB9KTsKfTsKCi8vIEFkZCB0aGVzZSBuZXcgZnVuY3Rpb25zIGZvciBwb2xsIGhhbmRsaW5nCmNvbnN0IGhhbmRsZVZvdGUgPSBhc3luYyAocG9sbCwgc2VsZWN0ZWRPcHRpb25zKSA9PiB7CiAgICBpZiAoIXBvbGw/LmlkKSByZXR1cm47CiAgICAKICAgIHRyeSB7CiAgICAgICAgLy8gQWx3YXlzIHNlbmQgYW4gYXJyYXkgZm9yIHNlbGVjdGVkX29wdGlvbnMKICAgICAgICBsZXQgb3B0aW9uc1RvU3VibWl0ID0gc2VsZWN0ZWRPcHRpb25zID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRPcHRpb25zID09PSBudWxsIHx8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRPcHRpb25zKSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwKSA/IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9ucykgPyBzZWxlY3RlZE9wdGlvbnMgOiBbc2VsZWN0ZWRPcHRpb25zXSk7CiAgICAgICAgCiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdwb2xscy52b3RlJywgcG9sbC5pZCksIHsKICAgICAgICAgICAgc2VsZWN0ZWRfb3B0aW9uczogb3B0aW9uc1RvU3VibWl0CiAgICAgICAgfSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgaWYgKHJlc3BvbnNlPy5kYXRhPy5zdWNjZXNzKSB7CiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9sbCBkYXRhIGluIHRoZSBwb3N0cyBhcnJheQogICAgICAgICAgICBjb25zdCBwb3N0SW5kZXggPSBzYWZlUG9zdHMudmFsdWUuZGF0YS5maW5kSW5kZXgocCA9PiAKICAgICAgICAgICAgICAgIChwLmV2ZW50Py5wb2xsPy5pZCA9PT0gcG9sbC5pZCkgfHwgKHAucG9sbD8uaWQgPT09IHBvbGwuaWQpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocG9zdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7IC4uLnNhZmVQb3N0cy52YWx1ZS5kYXRhW3Bvc3RJbmRleF0gfTsKICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkUG9zdC5ldmVudD8ucG9sbD8uaWQgPT09IHBvbGwuaWQpIHsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUG9zdC5ldmVudC5wb2xsID0gcmVzcG9uc2UuZGF0YS5wb2xsOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkUG9zdC5wb2xsPy5pZCA9PT0gcG9sbC5pZCkgewogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQb3N0LnBvbGwgPSByZXNwb25zZS5kYXRhLnBvbGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHBvc3QKICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0cyA9IFsKICAgICAgICAgICAgICAgICAgICAuLi5zYWZlUG9zdHMudmFsdWUuZGF0YS5zbGljZSgwLCBwb3N0SW5kZXgpLAogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQb3N0LAogICAgICAgICAgICAgICAgICAgIC4uLnNhZmVQb3N0cy52YWx1ZS5kYXRhLnNsaWNlKHBvc3RJbmRleCArIDEpCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvc3RzIHByb3AKICAgICAgICAgICAgICAgIHByb3BzLnBvc3RzLmRhdGEgPSB1cGRhdGVkUG9zdHM7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2UgaWYgdGhlIHNlcnZlciByZXR1cm5zIHN1Y2Nlc3M6IGZhbHNlCiAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc3VibWl0IHZvdGUnKTsKICAgICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIC8vIFNob3cgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlCiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHN1Ym1pdHRpbmcgeW91ciB2b3RlLiBQbGVhc2UgdHJ5IGFnYWluLic7CiAgICAgICAgYWxlcnQoZXJyb3JNZXNzYWdlKTsKICAgIH0KfTsKCmNvbnN0IGdldFNlbGVjdGVkT3B0aW9ucyA9IChwb2xsKSA9PiB7CiAgICBpZiAoIXBvbGwudm90ZXMpIHJldHVybiBbXTsKICAgIGNvbnN0IHVzZXJWb3RlID0gcG9sbC52b3Rlcy5maW5kKHZvdGUgPT4gdm90ZS51c2VyX2lkID09PSB1c2VyLmlkKTsKICAgIHJldHVybiB1c2VyVm90ZSA/IHVzZXJWb3RlLnNlbGVjdGVkX29wdGlvbnMgOiBbXTsKfTsKCmNvbnN0IGlzT3B0aW9uU2VsZWN0ZWQgPSAocG9sbCwgb3B0aW9uKSA9PiB7CiAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnMgPSBnZXRTZWxlY3RlZE9wdGlvbnMocG9sbCk7CiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmluY2x1ZGVzKG9wdGlvbik7Cn07Cgpjb25zdCBzaG93Vm90ZXJzTW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHJlZihudWxsKTsKY29uc3Qgdm90ZXJzID0gcmVmKHt9KTsKCmNvbnN0IHNob3dWb3RlcnMgPSBhc3luYyAocG9sbCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhbGxWb3RlcnMgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBwb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQocm91dGUoJ3BvbGxzLnZvdGVycycsIHsgcG9sbDogcG9sbC5pZCwgb3B0aW9uIH0pKTsKICAgICAgICAgICAgYWxsVm90ZXJzW29wdGlvbl0gPSByZXNwb25zZS5kYXRhLnZvdGVyczsKICAgICAgICB9CiAgICAgICAgdm90ZXJzLnZhbHVlID0gYWxsVm90ZXJzOwogICAgICAgIHNob3dWb3RlcnNNb2RhbC52YWx1ZSA9IHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZmV0Y2ggdm90ZXJzIGxpc3QnKTsKICAgIH0KfTsKCi8vIFVwZGF0ZSB0aGUgaGFuZGxlUG9sbFVwZGF0ZSBtZXRob2QgdG8gdXNlIHRoZSByZWYKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9ICh7IHBvbGxJZCwgcG9sbERhdGEgfSkgPT4gewogICAgLy8gVXBkYXRlIHBvc3RzIGFycmF5CiAgICBwb3N0cy52YWx1ZSA9IHsKICAgICAgICAuLi5wb3N0cy52YWx1ZSwKICAgICAgICBkYXRhOiBwb3N0cy52YWx1ZS5kYXRhLm1hcChwb3N0ID0+IHsKICAgICAgICAgICAgaWYgKHBvc3QuZXZlbnQ/LnBvbGw/LmlkID09PSBwb2xsSWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgLi4ucG9zdCwKICAgICAgICAgICAgICAgICAgICBldmVudDogewogICAgICAgICAgICAgICAgICAgICAgICAuLi5wb3N0LmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBwb2xsRGF0YQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zdC5wb2xsPy5pZCA9PT0gcG9sbElkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIC4uLnBvc3QsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogcG9sbERhdGEKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHBvc3Q7CiAgICAgICAgfSkKICAgIH07CgogICAgLy8gVXBkYXRlIGV2ZW50cyBhcnJheQogICAgZXZlbnRzLnZhbHVlID0gZXZlbnRzLnZhbHVlLm1hcChldmVudCA9PiB7CiAgICAgICAgaWYgKGV2ZW50LmV2ZW50Py5wb2xsPy5pZCA9PT0gcG9sbElkKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAuLi5ldmVudCwKICAgICAgICAgICAgICAgIGV2ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogcG9sbERhdGEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGV2ZW50OwogICAgfSk7CgogICAgLy8gVHJpZ2dlciBhIHJlZnJlc2ggb2YgYm90aCBjb21wb25lbnRzCiAgICByb3V0ZXIucmVsb2FkKHsgb25seTogWydwb3N0cycsICdldmVudHMnXSB9KTsKfTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8SGVhZCB0aXRsZT0iRGFzaGJvYXJkIiAvPgogICAgPEZDTVJlZ2lzdHJhdGlvbiAvPgogICAgPE1lbWJlckxheW91dCAKICAgICAgICA6Y2F0ZWdvcmllcz0icHJvcHMuY2F0ZWdvcmllcyIKICAgICAgICA6dW5zZWVuX3Bvc3RzX2NvdW50PSJwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCIKICAgID4KICAgICAgICA8ZGl2IDpjbGFzcz0ieydmbGV4IGZsZXgtY29sJzogaXNNb2JpbGUsICdmbGV4LTEnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsncGItMTYnOiBpc01vYmlsZSwgJ3B0LTQgcHgtNCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnJzogaXNNb2JpbGUsICdmbGV4JzogIWlzTW9iaWxlfSI+CgogICAgICAgICAgICAgICAgICAgIDxNb2JpbGVFdmVudCAKICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iaXNNb2JpbGUiCiAgICAgICAgICAgICAgICAgICAgICAgIDpldmVudHM9InByb3BzLmV2ZW50cy5tYXAoZXZlbnQgPT4gKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RhdGU6IGV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfZGF0ZTogZXZlbnQuZW5kX2RhdGUgfHwgZXZlbnQuZXZlbnQ/LmVuZF9kYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2V2ZW50LmF1dGhvci5maXJzdF9uYW1lfSAke2V2ZW50LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBldmVudC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZXZlbnQuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSIKICAgICAgICAgICAgICAgICAgICAgICAgQHBvbGwtdXBkYXRlZD0iaGFuZGxlUG9sbFVwZGF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKHsgb25seTogWydldmVudHMnXSB9KSIKICAgICAgICAgICAgICAgICAgICAvPgoKICAgICAgICAgICAgICAgICAgICA8IS0tIGZpeGVkIG1lbnUgYm90dG9tIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iaXNNb2JpbGUiIGNsYXNzPSJmaXhlZCBib3R0b20tMCBsZWZ0LTAgcmlnaHQtMCBiZy13aGl0ZSBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgei01MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1hcm91bmQgcC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnbWVtYmVyLm1lbWJlcnMnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE3IDIwaDV2LTJhMyAzIDAgMDAtNS4zNTYtMS44NTdNMTcgMjBIN20xMCAwdi0yYzAtLjY1Ni0uMTI2LTEuMjgzLS4zNTYtMS44NTdNNyAyMEgydi0yYTMgMyAwIDAxNS4zNTYtMS44NTdNNyAyMHYtMmMwLS42NTYuMTI2LTEuMjgzLjM1Ni0xLjg1N20wIDBhNS4wMDIgNS4wMDIgMCAwMTkuMjg4IDBNMTUgN2EzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6bTYgM2EyIDIgMCAxMS00IDAgMiAyIDAgMDE0IDB6TTcgMTBhMiAyIDAgMTEtNCAwIDIgMiAwIDAxNCAweiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibG9kZ2UiIGNsYXNzPSJhYnNvbHV0ZSAtdG9wLTEgLXJpZ2h0LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctWzE2cHhdIGgtNCBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHJvdW5kZWQtZnVsbCBweC0wLjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9kZ2UubWVtYmVyc19jb3VudCB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBtdC0xIj5NZW1icmk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayA6aHJlZj0icm91dGUoJ21lbWJlci5kb2N1bWVudHMnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgbXQtMSI+RG9jdW1lbnRlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgOmhyZWY9InJvdXRlKCdtZW1iZXIucHJvaWVjdGUnKSIgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTcgM2ExIDEgMCAwMDAgMmg2YTEgMSAwIDEwMC0ySDd6TTQgN2ExIDEgMCAwMTEtMWgxMGExIDEgMCAxMTAgMkg1YTEgMSAwIDAxLTEtMXpNMiAxMWEyIDIgMCAwMTItMmgxMmEyIDIgMCAwMTIgMnY0YTIgMiAwIDAxLTIgMkg0YTIgMiAwIDAxLTItMnYtNHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYnNvbHV0ZSAtdG9wLTEgLXJpZ2h0LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctWzE2cHhdIGgtNCBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIHJvdW5kZWQtZnVsbCBweC0wLjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9kZ2U/LnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQgfHwgMCB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBtdC0xIj5Qcm9pZWN0ZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIDpocmVmPSJyb3V0ZSgnZXZlbnRzJykiIGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVsYXRpdmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik04IDdWM204IDRWM20tOSA4aDEwTTUgMjFoMTRhMiAyIDAgMDAyLTJWN2EyIDIgMCAwMC0yLTJINWEyIDIgMCAwMC0yIDJ2MTJhMiAyIDAgMDAyIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWJzb2x1dGUgLXRvcC0xIC1yaWdodC0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LVsxNnB4XSBoLTQgYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCB0ZXh0LVsxMHB4XSBmb250LW1lZGl1bSByb3VuZGVkLWZ1bGwgcHgtMC41Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvZGdlPy51cGNvbWluZ19ldmVudHNfY291bnQgfHwgMCB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyBtdC0xIj5FdmVuaW1lbnRlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBMZWZ0IFNpZGViYXIgLSBEZXNrdG9wIE9ubHkgLS0+CiAgICAgICAgICAgICAgICAgICAgPExlZnRTaWRlYmFyIAogICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICAgICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgIDp1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50PSJsb2RnZT8udW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCB8fCAwIgogICAgICAgICAgICAgICAgICAgICAgICA6dXBjb21pbmdfZXZlbnRzX2NvdW50PSJsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXRlZ29yeS1jaGFuZ2U9ImhhbmRsZUNhdGVnb3J5Q2hhbmdlIgogICAgICAgICAgICAgICAgICAgIC8+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0gRmVlZCAtLT4KICAgICAgICAgICAgICAgICAgICA8RmVlZCAKICAgICAgICAgICAgICAgICAgICAgICAgOnBvc3RzPSJwb3N0cyIKICAgICAgICAgICAgICAgICAgICAgICAgOmNhdGVnb3JpZXM9InByb3BzLmNhdGVnb3JpZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIDpjYXRlZ29yeT0icHJvcHMuY2F0ZWdvcnkiCiAgICAgICAgICAgICAgICAgICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgIDpldmVudHM9InByb3BzLmV2ZW50cyIKICAgICAgICAgICAgICAgICAgICAgICAgOmlzLWRlc2t0b3A9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgQHVwZGF0ZS1wb3N0cz0iaGFuZGxlVXBkYXRlUG9zdHMiCiAgICAgICAgICAgICAgICAgICAgICAgIEBwb2xsLXVwZGF0ZWQ9ImhhbmRsZVBvbGxVcGRhdGUiCiAgICAgICAgICAgICAgICAgICAgLz4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBSaWdodCBTaWRlYmFyIC0gRGVza3RvcCBPbmx5IC0tPgogICAgICAgICAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgOmV2ZW50cz0icHJvcHMuZXZlbnRzLm1hcChldmVudCA9PiAoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBldmVudC5lbmRfZGF0ZSB8fCBldmVudC5ldmVudD8uZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBldmVudC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7ZXZlbnQuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZXZlbnQuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aDogZXZlbnQuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiBldmVudC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGw6IGV2ZW50LmV2ZW50Py5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IGV2ZW50LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2ZW50LmV2ZW50LnBvbGwub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBldmVudC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBldmVudC5ldmVudC5wb2xsLnZvdGVfY291bnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgfSkpIgogICAgICAgICAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgICAgICAgICBAcmVmcmVzaC1ldmVudHM9IigpID0+IHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ2V2ZW50cyddIH0pIgogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQm90dG9tIE1lbnUgLS0+CiAgICAgICAgPEJvdHRvbU1lbnUgOmxvZGdlPSJsb2RnZSIgLz4KCiAgICAgICAgPCEtLSAuLi4gcmVzdCBvZiB0aGUgZXhpc3RpbmcgbW9kYWxzIC4uLiAtLT4KICAgIDwvTWVtYmVyTGF5b3V0Pgo8L3RlbXBsYXRlPgoKPHN0eWxlPgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogI0JDQzBDNDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjQTRBN0FCOwp9CgovKiBDdXN0b20gY2hlY2tib3ggYW5kIHJhZGlvIGJ1dHRvbiBzdHlsaW5nICovClt0eXBlPSJjaGVja2JveCJdLCBbdHlwZT0icmFkaW8iXSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGJhY2tncm91bmQtb3JpZ2luOiBib3JkZXItYm94OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGhlaWdodDogMXJlbTsKICAgIHdpZHRoOiAxcmVtOwogICAgY29sb3I6IHJnYig3OSwgNzAsIDIyOSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7CiAgICAtLXR3LXNoYWRvdzogMCAwICMwMDAwOwogICAgcGFkZGluZzogMHB4OwogICAgYm9yZGVyLWNvbG9yOiByZ2IoMjA5LCAyMTMsIDIxOSk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5OXB4Owp9CgpbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J3doaXRlJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNMTIuMjA3IDQuNzkzYTEgMSAwIDAxMCAxLjQxNGwtNSA1YTEgMSAwIDAxLTEuNDE0IDBsLTItMmExIDEgMCAwMTEuNDE0LTEuNDE0TDYuNSA5LjA4Nmw0LjI5My00LjI5M2ExIDEgMCAwMTEuNDE0IDB6Jy8lM2UlM2Mvc3ZnJTNlIik7Cn0KClt0eXBlPSJjaGVja2JveCJdOmNoZWNrZWQsIFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudGNvbG9yOwogICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7Cn0KClt0eXBlPSJjaGVja2JveCJdOmZvY3VzLCBbdHlwZT0icmFkaW8iXTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoOTksIDEwMiwgMjQxLCAwLjIpOwp9CgouZHBfX291dGVyX21lbnVfd3JhcCB7CiAgICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDsKICAgIHRvcDogNTAlICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiA1MCUgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpICFpbXBvcnRhbnQ7CiAgICB6LWluZGV4OiA5OTk5OTkgIWltcG9ydGFudDsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50Owp9CgouZHBfX21lbnUgewogICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKfQoKLmRwX19hY3Rpb25fcm93IHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMTBweCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU3ZWIgIWltcG9ydGFudDsKfQoKLmRwX19hY3Rpb25fYnV0dG9ucyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBnYXA6IDhweCAhaW1wb3J0YW50Owp9CgouZHBfX2FjdGlvbl9idXR0b24gewogICAgcGFkZGluZzogNnB4IDEycHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXIgIWltcG9ydGFudDsKfQoKLmRwX19hY3Rpb25fYnV0dG9uX2FwcGx5IHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMzYjgyZjYgIWltcG9ydGFudDsKICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50Owp9CgouZHBfX2FjdGlvbl9idXR0b25fY2FuY2VsIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmM2Y0ZjYgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjMzc0MTUxICFpbXBvcnRhbnQ7Cn0KPC9zdHlsZT4gAAAAAAAAAADmkwAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAEGsAAAAAAAASawAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "resources/js/Pages/Member/Events.vue",
			"settings":
			{
				"buffer_size": 12835,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					9,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAADiMQAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHJlZiwgY29tcHV0ZWQsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ3YtY2FsZW5kYXInOwppbXBvcnQgJ3YtY2FsZW5kYXIvc3R5bGUuY3NzJzsKaW1wb3J0IHsgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgfSwKICAgIHVzZXI6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICB9LAogICAgbG9kZ2U6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgIGRlZmF1bHQ6IG51bGwKICAgIH0sCiAgICBtZW1iZXJzOiB7CiAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICB9Cn0pOwoKY29uc3Qgc2hvd0FsbExvZGdlcyA9IHJlZihmYWxzZSk7CgovLyBGaWx0ZXIgZXZlbnRzIGJhc2VkIG9uIHZpZXcgbW9kZQpjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghcHJvcHMubG9kZ2UpIHJldHVybiBbXTsKICAgIAogICAgcmV0dXJuIHByb3BzLmV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gewogICAgICAgIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUpOwogICAgICAgIGNvbnN0IGlzVXBjb21pbmcgPSBldmVudERhdGUgPiBuZXcgRGF0ZSgpOwogICAgICAgIGlmIChzaG93QWxsTG9kZ2VzLnZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiBpc1VwY29taW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBpc1VwY29taW5nICYmIGV2ZW50LmxvZGdlX2lkID09PSBwcm9wcy5sb2RnZS5pZDsKICAgICAgICB9CiAgICB9KS5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpIC0gbmV3IERhdGUoYi5zdGFydF9kYXRlKSk7Cn0pOwoKY29uc3Qgc2VsZWN0ZWREYXRlID0gcmVmKG5ldyBEYXRlKCkpOwpjb25zdCBhdHRyaWJ1dGVzID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIHByb3BzLmV2ZW50cy5tYXAoZXZlbnQgPT4gKHsKICAgICAgICBrZXk6IGV2ZW50LmlkLAogICAgICAgIGhpZ2hsaWdodDogewogICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICBmaWxsTW9kZTogJ3NvbGlkJywKICAgICAgICB9LAogICAgICAgIGRhdGVzOiBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlKSwKICAgICAgICBwb3BvdmVyOiB7CiAgICAgICAgICAgIGxhYmVsOiBldmVudC50aXRsZSwKICAgICAgICAgICAgdmlzaWJpbGl0eTogJ2hvdmVyJywKICAgICAgICB9LAogICAgICAgIGN1c3RvbURhdGE6IGV2ZW50CiAgICB9KSk7Cn0pOwoKY29uc3Qgc2VsZWN0ZWRFdmVudCA9IHJlZihudWxsKTsKCmNvbnN0IGhhbmRsZURhdGVDbGljayA9IChkYXRlKSA9PiB7CiAgICBjb25zdCBldmVudHNPbkRhdGUgPSBwcm9wcy5ldmVudHMuZmlsdGVyKGV2ZW50ID0+IHsKICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlKTsKICAgICAgICBjb25zdCBjbGlja2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZGF0ZSk7CiAgICAgICAgcmV0dXJuIGNsaWNrZWREYXRlLnRvRGF0ZVN0cmluZygpID09PSBzdGFydERhdGUudG9EYXRlU3RyaW5nKCk7CiAgICB9KTsKICAgIAogICAgaWYgKGV2ZW50c09uRGF0ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgc2VsZWN0ZWRFdmVudC52YWx1ZSA9IGV2ZW50c09uRGF0ZVswXTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2VsZWN0ZWRFdmVudC52YWx1ZSA9IG51bGw7CiAgICB9Cn07Cgpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKHVwZGF0ZWRFdmVudCkgPT4gewogICAgY29uc29sZS5sb2coJ1BvbGwgdXBkYXRlZCBmb3IgZXZlbnQ6JywgdXBkYXRlZEV2ZW50LmlkKTsKfTsKCmNvbnN0IGlzTW9iaWxlID0gcmVmKGZhbHNlKTsKCmNvbnN0IGNoZWNrV2luZG93U2l6ZSA9ICgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIGlzTW9iaWxlLnZhbHVlID0gd2luZG93LmlubmVyV2lkdGggPCAxMDI0OwogICAgfQp9OwoKb25Nb3VudGVkKCgpID0+IHsKICAgIGNoZWNrV2luZG93U2l6ZSgpOwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNoZWNrV2luZG93U2l6ZSk7CiAgICB9Cn0pOwoKb25Vbm1vdW50ZWQoKCkgPT4gewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNoZWNrV2luZG93U2l6ZSk7CiAgICB9Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxIZWFkIHRpdGxlPSJFdmVuaW1lbnRlIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyIAogICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgOmxvZGdlPSJsb2RnZSIKICAgICAgICAgICAgICAgIDp1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50PSJsb2RnZT8udW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCB8fCAwIgogICAgICAgICAgICAgICAgOnVwY29taW5nX2V2ZW50c19jb3VudD0ibG9kZ2U/LnVwY29taW5nX2V2ZW50c19jb3VudCB8fCAwIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2ZsZXgtMSBwLTQgcGItMjAnOiBpc01vYmlsZSwgJ2ZsZXgtMSBtbC1bMzYwcHhdIG1yLVszNjBweF0gcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsncC00JzogaXNNb2JpbGUsICdwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtc3RhcnQgc206aXRlbXMtY2VudGVyIG1iLTYgc3BhY2UteS00IHNtOnNwYWNlLXktMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+RXZlbmltZW50ZSBWaWl0b2FyZTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImxvZGdlIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBzcGFjZS15LTIgc206c3BhY2UteS0wIHNtOnNwYWNlLXgtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93QWxsTG9kZ2VzID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B4LTQgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgdy1mdWxsIHNtOnctYXV0bycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc2hvd0FsbExvZGdlcyA/ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJyA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOmJnLWdyYXktMTAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbmltZW50ZSBMb2rEgwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd0FsbExvZGdlcyA9IHRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B4LTQgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgdy1mdWxsIHNtOnctYXV0bycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QWxsTG9kZ2VzID8gJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6YmctZ3JheS0xMDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2F0ZSBFdmVuaW1lbnRlbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iIWxvZGdlIiBjbGFzcz0idGV4dC1jZW50ZXIgcHktMTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ncmF5LTUwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtMTYgdy0xNiBteC1hdXRvIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xMiA0LjM1NGE0IDQgMCAxMTAgNS4yOTJNMTUgMjFIM3YtMWE2IDYgMCAwMTEyIDB2MXptMCAwaDZ2LTFhNiA2IDAgMDAtOS01LjE5N00xMyA3YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTIiPk51IHN1bnRlyJtpIMOubnJlZ2lzdHJhdCDDrm50ci1vIGxvasSDPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWdyYXktNTAwIj5Db250YWN0YcibaSBhZG1pbmlzdHJhdG9ydWwgcGVudHJ1IGEgZmkgYWTEg3VnYXQgw65udHItbyBsb2rEgy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImZpbHRlcmVkRXZlbnRzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWdyYXktNTAwIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtMTYgdy0xNiBteC1hdXRvIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItMiI+TnUgZXhpc3TEgyBldmVuaW1lbnRlIHZpaXRvYXJlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q8OibmQgdm9yIGZpIGNyZWF0ZSBldmVuaW1lbnRlIG5vaSwgYWNlc3RlYSB2b3IgYXDEg3JlYSBhaWNpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iZXZlbnQgaW4gZmlsdGVyZWRFdmVudHMiIDprZXk9ImV2ZW50LmlkIiA6Y2xhc3M9InsnYmctd2hpdGUgYm9yZGVyIHJvdW5kZWQtbGcgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAgaC1mdWxsIGZsZXggZmxleC1jb2wnOiAhaXNNb2JpbGUsICdiZy13aGl0ZSBib3JkZXIgcm91bmRlZC1sZyBzaGFkb3ctc20gaC1mdWxsIGZsZXggZmxleC1jb2wnOiBpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNiBmbGV4LTEgZmxleCBmbGV4LWNvbCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItMiI+e3sgZXZlbnQudGl0bGUgfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTYwMCBsaW5lLWNsYW1wLTMiPnt7IGV2ZW50LmRlc2NyaXB0aW9uIH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LWF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC1zbSBmb250LW1lZGl1bSBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoJ3JvLVJPJywgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6ICdsb25nJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNob3dBbGxMb2RnZXMiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBtci0yIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyIDQuMzU0YTQgNCAwIDExMCA1LjI5Mk0xNSAyMUgzdi0xYTYgNiAwIDAxMTIgMHYxem0wIDBoNnYtMWE2IDYgMCAwMC05LTUuMTk3TTEzIDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAweiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGV2ZW50LmxvZGdlPy5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBtci0yIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuMDUgNC4wNWE3IDcgMCAxMTkuOSA5LjlMMTAgMTguOWwtNC45NS00Ljk1YTcgNyAwIDAxMC05Ljl6TTEwIDExYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGV2ZW50LmxvY2F0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBtci0yIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDlhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6bS03IDlhNyA3IDAgMTExNCAwSDN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q3JlYXQgZGU6IHt7IGV2ZW50LmNyZWF0b3I/Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6ZXZlbnRzPSJldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZXZlbnQuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtldmVudC5hdXRob3IuZmlyc3RfbmFtZX0gJHtldmVudC5hdXRob3IubGFzdF9uYW1lfWAKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGV2ZW50LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICBwb2xsOiBldmVudC5ldmVudD8ucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5ldmVudC5wb2xsLmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IGV2ZW50LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBldmVudC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGV2ZW50LmV2ZW50LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZXZlbnQuZXZlbnQucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgfSkpIgogICAgICAgICAgICAgICAgQHBvbGwtdXBkYXRlZD0iaGFuZGxlUG9sbFVwZGF0ZSIKICAgICAgICAgICAgICAgIEByZWZyZXNoLWV2ZW50cz0iKCkgPT4gcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsnZXZlbnRzJ10gfSkiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIEJvdHRvbSBNZW51IC0tPgogICAgICAgICAgICA8Qm90dG9tTWVudSB2LWlmPSJpc01vYmlsZSIgOmxvZGdlPSJsb2RnZSIgLz4KICAgICAgICA8L2Rpdj4KICAgIDwvTWVtYmVyTGF5b3V0Pgo8L3RlbXBsYXRlPiAAAAAAAAAAAAQyAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC8DAAAAAAAALwMAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAAAQMgAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHJlZiwgY29tcHV0ZWQsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ3YtY2FsZW5kYXInOwppbXBvcnQgJ3YtY2FsZW5kYXIvc3R5bGUuY3NzJzsKaW1wb3J0IHsgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgfSwKICAgIHVzZXI6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICB9LAogICAgbG9kZ2U6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLAogICAgICAgIGRlZmF1bHQ6IG51bGwKICAgIH0sCiAgICBtZW1iZXJzOiB7CiAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICB9Cn0pOwoKY29uc3Qgc2hvd0FsbExvZGdlcyA9IHJlZihmYWxzZSk7CgovLyBGaWx0ZXIgZXZlbnRzIGJhc2VkIG9uIHZpZXcgbW9kZQpjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghcHJvcHMubG9kZ2UpIHJldHVybiBbXTsKICAgIAogICAgcmV0dXJuIHByb3BzLmV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gewogICAgICAgIGNvbnN0IGV2ZW50RGF0ZSA9IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUpOwogICAgICAgIGNvbnN0IGlzVXBjb21pbmcgPSBldmVudERhdGUgPiBuZXcgRGF0ZSgpOwogICAgICAgIGlmIChzaG93QWxsTG9kZ2VzLnZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiBpc1VwY29taW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBpc1VwY29taW5nICYmIGV2ZW50LmxvZGdlX2lkID09PSBwcm9wcy5sb2RnZS5pZDsKICAgICAgICB9CiAgICB9KS5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpIC0gbmV3IERhdGUoYi5zdGFydF9kYXRlKSk7Cn0pOwoKY29uc3Qgc2VsZWN0ZWREYXRlID0gcmVmKG5ldyBEYXRlKCkpOwpjb25zdCBhdHRyaWJ1dGVzID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIHByb3BzLmV2ZW50cy5tYXAoZXZlbnQgPT4gKHsKICAgICAgICBrZXk6IGV2ZW50LmlkLAogICAgICAgIGhpZ2hsaWdodDogewogICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICBmaWxsTW9kZTogJ3NvbGlkJywKICAgICAgICB9LAogICAgICAgIGRhdGVzOiBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlKSwKICAgICAgICBwb3BvdmVyOiB7CiAgICAgICAgICAgIGxhYmVsOiBldmVudC50aXRsZSwKICAgICAgICAgICAgdmlzaWJpbGl0eTogJ2hvdmVyJywKICAgICAgICB9LAogICAgICAgIGN1c3RvbURhdGE6IGV2ZW50CiAgICB9KSk7Cn0pOwoKY29uc3Qgc2VsZWN0ZWRFdmVudCA9IHJlZihudWxsKTsKCmNvbnN0IGhhbmRsZURhdGVDbGljayA9IChkYXRlKSA9PiB7CiAgICBjb25zdCBldmVudHNPbkRhdGUgPSBwcm9wcy5ldmVudHMuZmlsdGVyKGV2ZW50ID0+IHsKICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlKTsKICAgICAgICBjb25zdCBjbGlja2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZGF0ZSk7CiAgICAgICAgcmV0dXJuIGNsaWNrZWREYXRlLnRvRGF0ZVN0cmluZygpID09PSBzdGFydERhdGUudG9EYXRlU3RyaW5nKCk7CiAgICB9KTsKICAgIAogICAgaWYgKGV2ZW50c09uRGF0ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgc2VsZWN0ZWRFdmVudC52YWx1ZSA9IGV2ZW50c09uRGF0ZVswXTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2VsZWN0ZWRFdmVudC52YWx1ZSA9IG51bGw7CiAgICB9Cn07Cgpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKHVwZGF0ZWRFdmVudCkgPT4gewogICAgY29uc29sZS5sb2coJ1BvbGwgdXBkYXRlZCBmb3IgZXZlbnQ6JywgdXBkYXRlZEV2ZW50LmlkKTsKfTsKCmNvbnN0IGlzTW9iaWxlID0gcmVmKGZhbHNlKTsKCmNvbnN0IGNoZWNrV2luZG93U2l6ZSA9ICgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIGlzTW9iaWxlLnZhbHVlID0gd2luZG93LmlubmVyV2lkdGggPCAxMDI0OwogICAgfQp9OwoKb25Nb3VudGVkKCgpID0+IHsKICAgIGNoZWNrV2luZG93U2l6ZSgpOwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNoZWNrV2luZG93U2l6ZSk7CiAgICB9Cn0pOwoKb25Vbm1vdW50ZWQoKCkgPT4gewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNoZWNrV2luZG93U2l6ZSk7CiAgICB9Cn0pOwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxIZWFkIHRpdGxlPSJFdmVuaW1lbnRlIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyIAogICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgOmxvZGdlPSJsb2RnZSIKICAgICAgICAgICAgICAgIDp1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50PSJsb2RnZT8udW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCB8fCAwIgogICAgICAgICAgICAgICAgOnVwY29taW5nX2V2ZW50c19jb3VudD0ibG9kZ2U/LnVwY29taW5nX2V2ZW50c19jb3VudCB8fCAwIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2ZsZXgtMSBwLTQgcGItMjAnOiBpc01vYmlsZSwgJ2ZsZXgtMSBtbC1bMzYwcHhdIG1yLVszNjBweF0gcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsncC00JzogaXNNb2JpbGUsICdwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtc3RhcnQgc206aXRlbXMtY2VudGVyIG1iLTYgc3BhY2UteS00IHNtOnNwYWNlLXktMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+RXZlbmltZW50ZSBWaWl0b2FyZTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImxvZGdlIiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBzcGFjZS15LTIgc206c3BhY2UteS0wIHNtOnNwYWNlLXgtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93QWxsTG9kZ2VzID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B4LTQgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgdy1mdWxsIHNtOnctYXV0bycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhc2hvd0FsbExvZGdlcyA/ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJyA6ICd0ZXh0LWdyYXktNjAwIGhvdmVyOmJnLWdyYXktMTAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbmltZW50ZSBMb2rEgwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd0FsbExvZGdlcyA9IHRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B4LTQgcHktMiByb3VuZGVkLWxnIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgdy1mdWxsIHNtOnctYXV0bycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QWxsTG9kZ2VzID8gJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnIDogJ3RleHQtZ3JheS02MDAgaG92ZXI6YmctZ3JheS0xMDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb2F0ZSBFdmVuaW1lbnRlbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iIWxvZGdlIiBjbGFzcz0idGV4dC1jZW50ZXIgcHktMTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ncmF5LTUwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtMTYgdy0xNiBteC1hdXRvIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xMiA0LjM1NGE0IDQgMCAxMTAgNS4yOTJNMTUgMjFIM3YtMWE2IDYgMCAwMTEyIDB2MXptMCAwaDZ2LTFhNiA2IDAgMDAtOS01LjE5N00xMyA3YTQgNCAwIDExLTggMCA0IDQgMCAwMTggMHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTIiPk51IHN1bnRlyJtpIMOubnJlZ2lzdHJhdCDDrm50ci1vIGxvasSDPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWdyYXktNTAwIj5Db250YWN0YcibaSBhZG1pbmlzdHJhdG9ydWwgcGVudHJ1IGEgZmkgYWTEg3VnYXQgw65udHItbyBsb2rEgy48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImZpbHRlcmVkRXZlbnRzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWdyYXktNTAwIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtMTYgdy0xNiBteC1hdXRvIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItMiI+TnUgZXhpc3TEgyBldmVuaW1lbnRlIHZpaXRvYXJlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q8OibmQgdm9yIGZpIGNyZWF0ZSBldmVuaW1lbnRlIG5vaSwgYWNlc3RlYSB2b3IgYXDEg3JlYSBhaWNpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iZXZlbnQgaW4gZmlsdGVyZWRFdmVudHMiIDprZXk9ImV2ZW50LmlkIiA6Y2xhc3M9InsnYmctd2hpdGUgYm9yZGVyIHJvdW5kZWQtbGcgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAgaC1mdWxsIGZsZXggZmxleC1jb2wnOiAhaXNNb2JpbGUsICdiZy13aGl0ZSBib3JkZXIgcm91bmRlZC1sZyBzaGFkb3ctc20gaC1mdWxsIGZsZXggZmxleC1jb2wnOiBpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNiBmbGV4LTEgZmxleCBmbGV4LWNvbCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItMiI+e3sgZXZlbnQudGl0bGUgfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTYwMCBsaW5lLWNsYW1wLTMiPnt7IGV2ZW50LmRlc2NyaXB0aW9uIH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LWF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC1zbSBmb250LW1lZGl1bSBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXcgRGF0ZShldmVudC5zdGFydF9kYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoJ3JvLVJPJywgeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6ICdsb25nJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNob3dBbGxMb2RnZXMiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBtci0yIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyIDQuMzU0YTQgNCAwIDExMCA1LjI5Mk0xNSAyMUgzdi0xYTYgNiAwIDAxMTIgMHYxem0wIDBoNnYtMWE2IDYgMCAwMC05LTUuMTk3TTEzIDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAweiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGV2ZW50LmxvZGdlPy5uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBtci0yIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuMDUgNC4wNWE3IDcgMCAxMTkuOSA5LjlMMTAgMTguOWwtNC45NS00Ljk1YTcgNyAwIDAxMC05Ljl6TTEwIDExYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGV2ZW50LmxvY2F0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBtci0yIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDlhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6bS03IDlhNyA3IDAgMTExNCAwSDN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q3JlYXQgZGU6IHt7IGV2ZW50LmNyZWF0b3I/Lm5hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFJpZ2h0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxSaWdodFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6ZXZlbnRzPSJldmVudHMubWFwKGV2ZW50ID0+ICh7CiAgICAgICAgICAgICAgICAgICAgaWQ6IGV2ZW50LmlkLAogICAgICAgICAgICAgICAgICAgIHRpdGxlOiBldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBlbmRfZGF0ZTogZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGV2ZW50LmF1dGhvciA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7ZXZlbnQuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZXZlbnQuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBldmVudC5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiBldmVudC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBldmVudC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogZXZlbnQuZXZlbnQ/LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZXZlbnQuZXZlbnQucG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBldmVudC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZV9jb3VudHMKICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgIH0pKSIKICAgICAgICAgICAgICAgIEBwb2xsLXVwZGF0ZWQ9ImhhbmRsZVBvbGxVcGRhdGUiCiAgICAgICAgICAgICAgICBAcmVmcmVzaC1ldmVudHM9IigpID0+IHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ2V2ZW50cyddIH0pIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBCb3R0b20gTWVudSAtLT4KICAgICAgICAgICAgPEJvdHRvbU1lbnUgdi1pZj0iaXNNb2JpbGUiIDpsb2RnZT0ibG9kZ2UiIC8+CiAgICAgICAgPC9kaXY+CiAgICA8L01lbWJlckxheW91dD4KPC90ZW1wbGF0ZT4gAAAAAAAAAAAjMgAAAAAAAAAAAAAAAAAAAAAAACMyAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC8DAAAAAAAALwMAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Pages/Member/Members.vue",
			"redo_stack":
			[
				[
					4,
					1,
					"paste",
					null,
					"AQAAAJYAAAAAAAAAlgAAAAAAAAA8AAAAaW1wb3J0IEJvdHRvbU1lbnUgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9Cb3R0b21NZW51LnZ1ZSc7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADSAAAAAAAAANIAAAAAAAAAAAAAAAAA8L8"
				],
				[
					3,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AQAAAJUAAAAAAAAAlQAAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWAAAAAAAAAJYAAAAAAAAAAAAAAAAA8L8"
				]
			],
			"settings":
			{
				"buffer_size": 6647,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			}
		},
		{
			"file": "resources/js/Pages/Member/Documents.vue",
			"settings":
			{
				"buffer_size": 71450,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACRFwEAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCwgTGluayB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyBjb21wdXRlZCwgcmVmLCBuZXh0VGljaywgb25Nb3VudGVkLCBvblVubW91bnRlZCB9IGZyb20gJ3Z1ZSc7CmltcG9ydCB7IHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IHVzZUZvcm0gfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgTW9kYWwgZnJvbSAnQC9Db21wb25lbnRzL01vZGFsLnZ1ZSc7CmltcG9ydCBJbnB1dExhYmVsIGZyb20gJ0AvQ29tcG9uZW50cy9JbnB1dExhYmVsLnZ1ZSc7CmltcG9ydCBUZXh0SW5wdXQgZnJvbSAnQC9Db21wb25lbnRzL1RleHRJbnB1dC52dWUnOwppbXBvcnQgSW5wdXRFcnJvciBmcm9tICdAL0NvbXBvbmVudHMvSW5wdXRFcnJvci52dWUnOwppbXBvcnQgU2Vjb25kYXJ5QnV0dG9uIGZyb20gJ0AvQ29tcG9uZW50cy9TZWNvbmRhcnlCdXR0b24udnVlJzsKaW1wb3J0IFByaW1hcnlCdXR0b24gZnJvbSAnQC9Db21wb25lbnRzL1ByaW1hcnlCdXR0b24udnVlJzsKaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICd2dWUtdG9hc3RpZmljYXRpb24nOwppbXBvcnQgQm90dG9tTWVudSBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL0JvdHRvbU1lbnUudnVlJzsKaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKCmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHMoewogICAgZG9jdW1lbnRzOiB7CiAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICB9LAogICAgY2F0ZWdvcmllczogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgfSwKICAgIGNvbGxlY3Rpb25zOiB7CiAgICAgICAgdHlwZTogQXJyYXksCiAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICB9LAogICAgdXNlcjogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgIH0sCiAgICBsb2RnZTogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogZmFsc2UsCiAgICAgICAgZGVmYXVsdDogbnVsbAogICAgfSwKICAgIG1lbWJlcnM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgIH0sCiAgICBldmVudHM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfQp9KTsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7Cgpjb25zdCBpc01vYmlsZSA9IHJlZihmYWxzZSk7Cgpjb25zdCBjaGVja1dpbmRvd1NpemUgPSAoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpc01vYmlsZS52YWx1ZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNDsKICAgIH0KfTsKCm9uTW91bnRlZCgoKSA9PiB7CiAgICBjaGVja1dpbmRvd1NpemUoKTsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKCm9uVW5tb3VudGVkKCgpID0+IHsKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1dpbmRvd1NpemUpOwogICAgfQp9KTsKCmNvbnN0IHN0YXRzID0gY29tcHV0ZWQoKCkgPT4gWwogICAgewogICAgICAgIGxhYmVsOiAnVG90YWwgRG9jdW1lbnRlJywKICAgICAgICB2YWx1ZTogcHJvcHMuZG9jdW1lbnRzLmxlbmd0aAogICAgfSwKICAgIHsKICAgICAgICBsYWJlbDogJ0RvY3VtZW50ZSBPZmljaWFsZScsCiAgICAgICAgdmFsdWU6IHByb3BzLmRvY3VtZW50cy5maWx0ZXIoZCA9PiBkLmNhdGVnb3J5LnNsdWcgPT09ICdkb2N1bWVudGUtb2ZpY2lhbGUnKS5sZW5ndGgKICAgIH0sCiAgICB7CiAgICAgICAgbGFiZWw6ICdQbGFuc2UnLAogICAgICAgIHZhbHVlOiBwcm9wcy5kb2N1bWVudHMuZmlsdGVyKGQgPT4gZC5jYXRlZ29yeS5zbHVnID09PSAncGxhbnNlJykubGVuZ3RoCiAgICB9LAogICAgewogICAgICAgIGxhYmVsOiAnQWx0ZWxlJywKICAgICAgICB2YWx1ZTogcHJvcHMuZG9jdW1lbnRzLmZpbHRlcihkID0+IGQuY2F0ZWdvcnkuc2x1ZyA9PT0gJ2FsdGVsZScpLmxlbmd0aAogICAgfQpdKTsKCmNvbnN0IGFjdGlvbnMgPSBbCiAgICB7CiAgICAgICAgbGFiZWw6ICdBZGF1Z8SDIERvY3VtZW50IE5vdScsCiAgICAgICAgb25DbGljazogKCkgPT4gewogICAgICAgICAgICBzaG93aW5nQWRkRG9jdW1lbnRNb2RhbC52YWx1ZSA9IHRydWU7CiAgICAgICAgfQogICAgfQpdOwoKY29uc3Qgc2hvd2luZ0FkZERvY3VtZW50TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzaG93aW5nRWRpdERvY3VtZW50TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gcmVmKCdhbGwnKTsKY29uc3Qgc2VsZWN0ZWRBY2Nlc3NUeXBlID0gcmVmKCdhbGwnKTsKY29uc3Qgc2VsZWN0ZWRDb2xsZWN0aW9uID0gcmVmKG51bGwpOwpjb25zdCBzZWFyY2hRdWVyeSA9IHJlZignJyk7CmNvbnN0IHZpZXdNb2RlID0gcmVmKCdncmlkJyk7CmNvbnN0IHNlbGVjdGVkQ29sbGVjdGlvbkZvclZpZXcgPSByZWYobnVsbCk7Cgpjb25zdCBmb3JtID0gdXNlRm9ybSh7CiAgICB0aXRsZTogJycsCiAgICBkZXNjcmlwdGlvbjogJycsCiAgICBmaWxlOiBudWxsLAogICAgY2F0ZWdvcnlfaWQ6ICcnLAogICAgYWNjZXNzX3R5cGU6ICdhbGwnLAogICAgaXNfcmVzdHJpY3RlZDogZmFsc2UsCiAgICBjcmVhdG9yX2lkOiBudWxsLAogICAgY29sbGVjdGlvbl9pZDogbnVsbAp9KTsKCmNvbnN0IGVkaXRGb3JtID0gdXNlRm9ybSh7CiAgICBpZDogbnVsbCwKICAgIHRpdGxlOiAnJywKICAgIGRlc2NyaXB0aW9uOiAnJywKICAgIGNhdGVnb3J5X2lkOiAnJywKICAgIGFjY2Vzc190eXBlOiAnYWxsJywKICAgIGlzX3Jlc3RyaWN0ZWQ6IGZhbHNlLAogICAgY3JlYXRvcl9pZDogbnVsbCwKICAgIGNvbGxlY3Rpb25faWQ6IG51bGwKfSk7Cgpjb25zdCBjb2xsZWN0aW9uRm9ybSA9IHVzZUZvcm0oewogICAgbmFtZTogJycsCiAgICBkZXNjcmlwdGlvbjogJycsCiAgICBjYXRlZ29yeTogJycKfSk7Cgpjb25zdCBlZGl0Q29sbGVjdGlvbkZvcm0gPSB1c2VGb3JtKHsKICAgIGlkOiBudWxsLAogICAgbmFtZTogJycsCiAgICBkZXNjcmlwdGlvbjogJycsCiAgICBjYXRlZ29yeTogJycKfSk7Cgpjb25zdCBzaG93aW5nQWRkQ29sbGVjdGlvbk1vZGFsID0gcmVmKGZhbHNlKTsKY29uc3Qgc2hvd2luZ0VkaXRDb2xsZWN0aW9uTW9kYWwgPSByZWYoZmFsc2UpOwoKY29uc3QgdG9hc3QgPSB1c2VUb2FzdCgpOwpjb25zdCBmaWxlSW5wdXQgPSByZWYobnVsbCk7CmNvbnN0IGlzRHJhZ2dpbmcgPSByZWYoZmFsc2UpOwpjb25zdCBwcmV2aWV3VXJsID0gcmVmKG51bGwpOwoKY29uc3QgaGFuZGxlRHJhZ092ZXIgPSAoZSkgPT4gewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaXNEcmFnZ2luZy52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSAoZSkgPT4gewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaXNEcmFnZ2luZy52YWx1ZSA9IGZhbHNlOwp9OwoKY29uc3QgaGFuZGxlRHJvcCA9IChlKSA9PiB7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBpc0RyYWdnaW5nLnZhbHVlID0gZmFsc2U7CiAgICAKICAgIGNvbnN0IGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7CiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGhhbmRsZUZpbGVTZWxlY3QoZmlsZXNbMF0pOwogICAgfQp9OwoKY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChmaWxlKSA9PiB7CiAgICBpZiAoZmlsZSkgewogICAgICAgIGZvcm0uZmlsZSA9IGZpbGU7CiAgICAgICAgCiAgICAgICAgLy8gQ3JlYXRlIHByZXZpZXcgVVJMIGZvciBpbWFnZXMKICAgICAgICBpZiAoZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7CiAgICAgICAgICAgIHByZXZpZXdVcmwudmFsdWUgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByZXZpZXdVcmwudmFsdWUgPSBudWxsOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IHJlbW92ZUZpbGUgPSAoKSA9PiB7CiAgICBmb3JtLmZpbGUgPSBudWxsOwogICAgcHJldmlld1VybC52YWx1ZSA9IG51bGw7Cn07Cgpjb25zdCBmaWx0ZXJlZERvY3VtZW50cyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGxldCBkb2N1bWVudHMgPSBwcm9wcy5kb2N1bWVudHMuZmlsdGVyKGRvY3VtZW50ID0+IHsKICAgICAgICBjb25zdCBtYXRjaGVzQ2F0ZWdvcnkgPSBzZWxlY3RlZENhdGVnb3J5LnZhbHVlID09PSAnYWxsJyB8fCBkb2N1bWVudC5jYXRlZ29yeS5zbHVnID09PSBzZWxlY3RlZENhdGVnb3J5LnZhbHVlOwogICAgICAgIGNvbnN0IG1hdGNoZXNBY2Nlc3NUeXBlID0gc2VsZWN0ZWRBY2Nlc3NUeXBlLnZhbHVlID09PSAnYWxsJyB8fCBkb2N1bWVudC5hY2Nlc3NfdHlwZSA9PT0gc2VsZWN0ZWRBY2Nlc3NUeXBlLnZhbHVlOwogICAgICAgIGNvbnN0IG1hdGNoZXNDb2xsZWN0aW9uID0gIXNlbGVjdGVkQ29sbGVjdGlvbi52YWx1ZSB8fCBkb2N1bWVudC5jb2xsZWN0aW9uX2lkID09PSBzZWxlY3RlZENvbGxlY3Rpb24udmFsdWU7CiAgICAgICAgY29uc3QgbWF0Y2hlc1NlYXJjaCA9ICFzZWFyY2hRdWVyeS52YWx1ZSB8fCAKICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hRdWVyeS52YWx1ZS50b0xvd2VyQ2FzZSgpKSB8fAogICAgICAgICAgICBkb2N1bWVudC5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFF1ZXJ5LnZhbHVlLnRvTG93ZXJDYXNlKCkpOwoKICAgICAgICByZXR1cm4gbWF0Y2hlc0NhdGVnb3J5ICYmIG1hdGNoZXNBY2Nlc3NUeXBlICYmIG1hdGNoZXNDb2xsZWN0aW9uICYmIG1hdGNoZXNTZWFyY2g7CiAgICB9KTsKCiAgICAvLyBJZiBhIGNvbGxlY3Rpb24gaXMgc2VsZWN0ZWQgZm9yIHZpZXdpbmcsIGZpbHRlciBkb2N1bWVudHMgdG8gc2hvdyBvbmx5IHRob3NlIGZyb20gdGhhdCBjb2xsZWN0aW9uCiAgICBpZiAoc2VsZWN0ZWRDb2xsZWN0aW9uRm9yVmlldy52YWx1ZSkgewogICAgICAgIGRvY3VtZW50cyA9IGRvY3VtZW50cy5maWx0ZXIoZG9jdW1lbnQgPT4gZG9jdW1lbnQuY29sbGVjdGlvbl9pZCA9PT0gc2VsZWN0ZWRDb2xsZWN0aW9uRm9yVmlldy52YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIElmIG5vdCB2aWV3aW5nIGEgc3BlY2lmaWMgY29sbGVjdGlvbiwgZXhjbHVkZSBkb2N1bWVudHMgdGhhdCBiZWxvbmcgdG8gY29sbGVjdGlvbnMKICAgICAgICBkb2N1bWVudHMgPSBkb2N1bWVudHMuZmlsdGVyKGRvY3VtZW50ID0+ICFkb2N1bWVudC5jb2xsZWN0aW9uX2lkKTsKICAgIH0KCiAgICByZXR1cm4gZG9jdW1lbnRzOwp9KTsKCmNvbnN0IGZpbHRlcmVkQ29sbGVjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBpZiAoc2VsZWN0ZWRDYXRlZ29yeS52YWx1ZSA9PT0gJ2FsbCcpIHsKICAgICAgICByZXR1cm4gcHJvcHMuY29sbGVjdGlvbnM7CiAgICB9CiAgICByZXR1cm4gcHJvcHMuY29sbGVjdGlvbnMuZmlsdGVyKGNvbGxlY3Rpb24gPT4gY29sbGVjdGlvbi5jYXRlZ29yeSA9PT0gc2VsZWN0ZWRDYXRlZ29yeS52YWx1ZSk7Cn0pOwoKY29uc3QgYXZhaWxhYmxlQ29sbGVjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBpZiAoc2VsZWN0ZWRDYXRlZ29yeS52YWx1ZSA9PT0gJ2FsbCcpIHsKICAgICAgICByZXR1cm4gcHJvcHMuY29sbGVjdGlvbnM7CiAgICB9CiAgICByZXR1cm4gcHJvcHMuY29sbGVjdGlvbnMuZmlsdGVyKGNvbGxlY3Rpb24gPT4gewogICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gQXJyYXkuaXNBcnJheShwcm9wcy5jYXRlZ29yaWVzKSA/IHByb3BzLmNhdGVnb3JpZXMuZmluZChjID0+IGMuc2x1ZyA9PT0gc2VsZWN0ZWRDYXRlZ29yeS52YWx1ZSkgOiBudWxsOwogICAgICAgIHJldHVybiBjYXRlZ29yeSAmJiAoY2F0ZWdvcnkuc2x1ZyA9PT0gJ3N0dWRpdS1tYXNvbmljJyB8fCBjYXRlZ29yeS5zbHVnID09PSAnZGl2ZXJzZScpOwogICAgfSk7Cn0pOwoKY29uc3QgZWRpdEZvcm1BdmFpbGFibGVDb2xsZWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghZWRpdEZvcm0uY2F0ZWdvcnlfaWQpIHsKICAgICAgICByZXR1cm4gW107CiAgICB9CiAgICBjb25zdCBjYXRlZ29yeSA9IEFycmF5LmlzQXJyYXkocHJvcHMuY2F0ZWdvcmllcykgPyBwcm9wcy5jYXRlZ29yaWVzLmZpbmQoYyA9PiBjLmlkID09PSBlZGl0Rm9ybS5jYXRlZ29yeV9pZCkgOiBudWxsOwogICAgaWYgKCFjYXRlZ29yeSB8fCAoY2F0ZWdvcnkuc2x1ZyAhPT0gJ3N0dWRpdS1tYXNvbmljJyAmJiBjYXRlZ29yeS5zbHVnICE9PSAnZGl2ZXJzZScpKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgcmV0dXJuIHByb3BzLmNvbGxlY3Rpb25zLmZpbHRlcihjb2xsZWN0aW9uID0+IGNvbGxlY3Rpb24uY2F0ZWdvcnkgPT09IGNhdGVnb3J5LnNsdWcpOwp9KTsKCmNvbnN0IGNhbkFjY2Vzc1Jlc3RyaWN0ZWRDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGNvbnN0IGxvZGdlRGlnbml0eSA9IHByb3BzLnVzZXIubG9kZ2VfbWVtYmVyPy5sb2RnZV9kaWduaXR5OwogICAgcmV0dXJuIGxvZGdlRGlnbml0eSAmJiAKICAgICAgICAobG9kZ2VEaWduaXR5Lm5hbWUgPT09ICdTZWNyZXRhcicgfHwgbG9kZ2VEaWduaXR5Lm5hbWUgPT09ICdNYWVzdHJ1IFZlbmVyYWJpbCcpOwp9KTsKCmNvbnN0IHZpc2libGVDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4gewogICAgLy8gRW5zdXJlIGNhdGVnb3JpZXMgaXMgYW4gYXJyYXkKICAgIGNvbnN0IGNhdGVnb3JpZXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcHMuY2F0ZWdvcmllcykgPyBwcm9wcy5jYXRlZ29yaWVzIDogW107CiAgICAKICAgIHJldHVybiBjYXRlZ29yaWVzQXJyYXkuZmlsdGVyKGNhdGVnb3J5ID0+IHsKICAgICAgICAvLyBPbmx5IHJlc3RyaWN0ICJEb2N1bWVudGUgT2ZpY2lhbGUiIGNhdGVnb3J5CiAgICAgICAgaWYgKGNhdGVnb3J5Lm5hbWUgPT09ICdEb2N1bWVudGUgT2ZpY2lhbGUnICYmIGNhdGVnb3J5LmlzX3Jlc3RyaWN0ZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGNhbkFjY2Vzc1Jlc3RyaWN0ZWRDYXRlZ29yeS52YWx1ZTsKICAgICAgICB9CiAgICAgICAgLy8gQWxsIG90aGVyIGNhdGVnb3JpZXMgYXJlIHZpc2libGUgdG8gZXZlcnlvbmUKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwp9KTsKCmNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnlEYXRhID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocHJvcHMuY2F0ZWdvcmllcykgPyBwcm9wcy5jYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZm9ybS5jYXRlZ29yeV9pZCkgOiBudWxsOwp9KTsKCmNvbnN0IGVkaXRGb3JtQ2F0ZWdvcnlEYXRhID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocHJvcHMuY2F0ZWdvcmllcykgPyBwcm9wcy5jYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5pZCA9PT0gZWRpdEZvcm0uY2F0ZWdvcnlfaWQpIDogbnVsbDsKfSk7Cgpjb25zdCBpc09mZmljaWFsRG9jdW1lbnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gc2VsZWN0ZWRDYXRlZ29yeURhdGEudmFsdWU/Lm5hbWUgPT09ICdEb2N1bWVudGUgT2ZpY2lhbGUnOwp9KTsKCmNvbnN0IGlzUGxhbnNlQ2F0ZWdvcnkgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gc2VsZWN0ZWRDYXRlZ29yeURhdGEudmFsdWU/LnNsdWcgPT09ICdwbGFuc2UnOwp9KTsKCmNvbnN0IGlzRWRpdEZvcm1QbGFuc2VDYXRlZ29yeSA9IGNvbXB1dGVkKCgpID0+IHsKICAgIHJldHVybiBlZGl0Rm9ybUNhdGVnb3J5RGF0YS52YWx1ZT8uc2x1ZyA9PT0gJ3BsYW5zZSc7Cn0pOwoKY29uc3QgY2FuRWRpdEFueURvY3VtZW50ID0gY29tcHV0ZWQoKCkgPT4gewogICAgY29uc3QgbG9kZ2VEaWduaXR5ID0gcHJvcHMudXNlci5sb2RnZV9tZW1iZXI/LmxvZGdlX2RpZ25pdHk7CiAgICByZXR1cm4gbG9kZ2VEaWduaXR5ICYmIAogICAgICAgIChsb2RnZURpZ25pdHkubmFtZSA9PT0gJ1NlY3JldGFyJyB8fCBsb2RnZURpZ25pdHkubmFtZSA9PT0gJ01hZXN0cnUgVmVuZXJhYmlsJyk7Cn0pOwoKY29uc3QgYWNjZXNzVHlwZXMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zdCBiYXNlVHlwZXMgPSBbCiAgICAgICAgeyB2YWx1ZTogJ2FsbCcsIGxhYmVsOiAnVG/Im2kgbWVtYnJpaScgfQogICAgXTsKCiAgICBpZiAocHJvcHMudXNlci5yb2xlID09PSAnbWFlc3RydScpIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAuLi5iYXNlVHlwZXMsCiAgICAgICAgICAgIHsgdmFsdWU6ICdtYWVzdHJ1JywgbGFiZWw6ICdNYWVzdHJ1JyB9LAogICAgICAgICAgICB7IHZhbHVlOiAnY2FsZmEnLCBsYWJlbDogJ0NhbGZhJyB9LAogICAgICAgICAgICB7IHZhbHVlOiAndWNlbmljJywgbGFiZWw6ICdVY2VuaWMnIH0KICAgICAgICBdOwogICAgfSBlbHNlIGlmIChwcm9wcy51c2VyLnJvbGUgPT09ICdjYWxmYScpIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAuLi5iYXNlVHlwZXMsCiAgICAgICAgICAgIHsgdmFsdWU6ICdjYWxmYScsIGxhYmVsOiAnQ2FsZmEnIH0sCiAgICAgICAgICAgIHsgdmFsdWU6ICd1Y2VuaWMnLCBsYWJlbDogJ1VjZW5pYycgfQogICAgICAgIF07CiAgICB9IGVsc2UgaWYgKHByb3BzLnVzZXIucm9sZSA9PT0gJ3VjZW5pYycpIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAuLi5iYXNlVHlwZXMsCiAgICAgICAgICAgIHsgdmFsdWU6ICd1Y2VuaWMnLCBsYWJlbDogJ1VjZW5pYycgfQogICAgICAgIF07CiAgICB9CgogICAgcmV0dXJuIGJhc2VUeXBlczsKfSk7Cgpjb25zdCBzaG93QWRkRG9jdW1lbnRNb2RhbCA9ICgpID0+IHsKICAgIHNob3dpbmdBZGREb2N1bWVudE1vZGFsLnZhbHVlID0gdHJ1ZTsKfTsKCmNvbnN0IGNsb3NlTW9kYWwgPSAoKSA9PiB7CiAgICBzaG93aW5nQWRkRG9jdW1lbnRNb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgZm9ybS5yZXNldCgpOwp9OwoKY29uc3Qgc3VibWl0ID0gKCkgPT4gewogICAgZm9ybS5wb3N0KHJvdXRlKCdtZW1iZXIuZG9jdW1lbnRzLnN0b3JlJyksIHsKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVN0YXRlOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjbG9zZU1vZGFsKCk7CiAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0RvY3VtZW50dWwgYSBmb3N0IGFkxIN1Z2F0IGN1IHN1Y2NlcyEnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIFJlbG9hZCBkb2N1bWVudHMKICAgICAgICAgICAgcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsnZG9jdW1lbnRzJ10gfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBGZXRjaCBhbmQgdXBkYXRlIHVuc2VlbiBwb3N0cyBjb3VudCBkaXJlY3RseQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQocm91dGUoJ21lbWJlci5wb3N0cy51bnNlZW4tY291bnQnKSk7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8udW5zZWVuX3Bvc3RzX2NvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwYWdlIHByb3BzIGRpcmVjdGx5CiAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSByZXNwb25zZS5kYXRhLnVuc2Vlbl9wb3N0c19jb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHVuc2VlbiBwb3N0cyBjb3VudDonLCBlcnJvcik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IChlcnJvcnMpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignU3VibWl0IGZhaWxlZDonLCBlcnJvcnMpOwogICAgICAgIH0KICAgIH0pOwp9OwoKY29uc3Qgc2hvd0VkaXREb2N1bWVudE1vZGFsID0gKGRvY3VtZW50KSA9PiB7CiAgICBlZGl0Rm9ybS5pZCA9IGRvY3VtZW50LmlkOwogICAgZWRpdEZvcm0udGl0bGUgPSBkb2N1bWVudC50aXRsZTsKICAgIGVkaXRGb3JtLmRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZGVzY3JpcHRpb247CiAgICBlZGl0Rm9ybS5jYXRlZ29yeV9pZCA9IGRvY3VtZW50LmNhdGVnb3J5LmlkOwogICAgZWRpdEZvcm0uYWNjZXNzX3R5cGUgPSBkb2N1bWVudC5hY2Nlc3NfdHlwZTsKICAgIGVkaXRGb3JtLmlzX3Jlc3RyaWN0ZWQgPSBkb2N1bWVudC5jYXRlZ29yeS5pc19yZXN0cmljdGVkOwogICAgZWRpdEZvcm0uY3JlYXRvcl9pZCA9IGRvY3VtZW50LmNyZWF0b3JfaWQ7CiAgICBlZGl0Rm9ybS5jb2xsZWN0aW9uX2lkID0gZG9jdW1lbnQuY29sbGVjdGlvbl9pZDsKICAgIHNob3dpbmdFZGl0RG9jdW1lbnRNb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBjbG9zZUVkaXRNb2RhbCA9ICgpID0+IHsKICAgIHNob3dpbmdFZGl0RG9jdW1lbnRNb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgZWRpdEZvcm0ucmVzZXQoKTsKfTsKCmNvbnN0IHN1Ym1pdEVkaXQgPSAoKSA9PiB7CiAgICBlZGl0Rm9ybS5wYXRjaChyb3V0ZSgnbWVtYmVyLmRvY3VtZW50cy51cGRhdGUnLCBlZGl0Rm9ybS5pZCksIHsKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBwcmVzZXJ2ZVN0YXRlOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICBjbG9zZUVkaXRNb2RhbCgpOwogICAgICAgICAgICB0b2FzdC5zdWNjZXNzKCdEb2N1bWVudHVsIGEgZm9zdCBhY3R1YWxpemF0IGN1IHN1Y2NlcyEnKTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IChlcnJvcnMpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBkYXRlIGZhaWxlZDonLCBlcnJvcnMpOwogICAgICAgIH0KICAgIH0pOwp9OwoKY29uc3QgZGVsZXRlRG9jdW1lbnQgPSAoZG9jdW1lbnQpID0+IHsKICAgIGlmIChjb25maXJtKCdTdW50ZcibaSBzaWd1ciBjxIMgZG9yacibaSBzxIMgyJl0ZXJnZcibaSBhY2VzdCBkb2N1bWVudD8nKSkgewogICAgICAgIHJvdXRlci5kZWxldGUocm91dGUoJ21lbWJlci5kb2N1bWVudHMuZGVzdHJveScsIGRvY3VtZW50LmlkKSwgewogICAgICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgICAgICB0b2FzdC5zdWNjZXNzKCdEb2N1bWVudHVsIGEgZm9zdCDImXRlcnMgY3Ugc3VjY2VzIScpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkVycm9yOiAoZXJyb3JzKSA9PiB7CiAgICAgICAgICAgICAgICB0b2FzdC5lcnJvcignQSBhcMSDcnV0IG8gZXJvYXJlIGxhIMiZdGVyZ2VyZWEgZG9jdW1lbnR1bHVpLicpOwogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGVsZXRlIGZhaWxlZDonLCBlcnJvcnMpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn07Cgpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKGRhdGEpID0+IHsKICAgIGNvbnNvbGUubG9nKCdEb2N1bWVudHM6IFJlY2VpdmVkIHBvbGwgdXBkYXRlIGV2ZW50OicsIGRhdGEpOwogICAgY29uc29sZS5sb2coJ0RvY3VtZW50czogQ3VycmVudCBldmVudHMgYmVmb3JlIHVwZGF0ZTonLCBwcm9wcy5ldmVudHMpOwogICAgCiAgICAvLyBVcGRhdGUgdGhlIGV2ZW50cyBhcnJheSB3aXRoIHRoZSBuZXcgcG9sbCBkYXRhCiAgICBjb25zdCBldmVudEluZGV4ID0gcHJvcHMuZXZlbnRzLmZpbmRJbmRleChldmVudCA9PiBldmVudC5pZCA9PT0gZGF0YS5ldmVudF9pZCk7CiAgICBjb25zb2xlLmxvZygnRG9jdW1lbnRzOiBGb3VuZCBldmVudCBpbmRleDonLCBldmVudEluZGV4KTsKICAgIAogICAgaWYgKGV2ZW50SW5kZXggIT09IC0xKSB7CiAgICAgICAgY29uc29sZS5sb2coJ0RvY3VtZW50czogVXBkYXRpbmcgZXZlbnQgcG9sbCBkYXRhOicsIHsKICAgICAgICAgICAgYmVmb3JlOiBwcm9wcy5ldmVudHNbZXZlbnRJbmRleF0uZXZlbnQucG9sbCwKICAgICAgICAgICAgYWZ0ZXI6IHsKICAgICAgICAgICAgICAgIC4uLnByb3BzLmV2ZW50c1tldmVudEluZGV4XS5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgdm90ZXM6IGRhdGEudm90ZXMsCiAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZGF0YS52b3RlX2NvdW50cwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcHJvcHMuZXZlbnRzW2V2ZW50SW5kZXhdLmV2ZW50LnBvbGwgPSB7CiAgICAgICAgICAgIC4uLnByb3BzLmV2ZW50c1tldmVudEluZGV4XS5ldmVudC5wb2xsLAogICAgICAgICAgICB2b3RlczogZGF0YS52b3RlcywKICAgICAgICAgICAgdm90ZV9jb3VudHM6IGRhdGEudm90ZV9jb3VudHMKICAgICAgICB9OwogICAgICAgIAogICAgICAgIGNvbnNvbGUubG9nKCdEb2N1bWVudHM6IEV2ZW50cyBhZnRlciB1cGRhdGU6JywgcHJvcHMuZXZlbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS53YXJuKCdEb2N1bWVudHM6IENvdWxkIG5vdCBmaW5kIGV2ZW50IHdpdGggSUQ6JywgZGF0YS5ldmVudF9pZCk7CiAgICB9Cn07Cgpjb25zdCBzaG93QWRkQ29sbGVjdGlvbk1vZGFsID0gKCkgPT4gewogICAgY29sbGVjdGlvbkZvcm0uY2F0ZWdvcnkgPSBzZWxlY3RlZENhdGVnb3J5LnZhbHVlOwogICAgc2hvd2luZ0FkZENvbGxlY3Rpb25Nb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBjbG9zZUNvbGxlY3Rpb25Nb2RhbCA9ICgpID0+IHsKICAgIHNob3dpbmdBZGRDb2xsZWN0aW9uTW9kYWwudmFsdWUgPSBmYWxzZTsKICAgIGNvbGxlY3Rpb25Gb3JtLnJlc2V0KCk7CiAgICBjb2xsZWN0aW9uRm9ybS5jYXRlZ29yeSA9ICcnOwp9OwoKY29uc3Qgc2hvd0VkaXRDb2xsZWN0aW9uTW9kYWwgPSAoY29sbGVjdGlvbikgPT4gewogICAgZWRpdENvbGxlY3Rpb25Gb3JtLmlkID0gY29sbGVjdGlvbi5pZDsKICAgIGVkaXRDb2xsZWN0aW9uRm9ybS5uYW1lID0gY29sbGVjdGlvbi5uYW1lOwogICAgZWRpdENvbGxlY3Rpb25Gb3JtLmRlc2NyaXB0aW9uID0gY29sbGVjdGlvbi5kZXNjcmlwdGlvbjsKICAgIGVkaXRDb2xsZWN0aW9uRm9ybS5jYXRlZ29yeSA9IGNvbGxlY3Rpb24uY2F0ZWdvcnk7CiAgICBzaG93aW5nRWRpdENvbGxlY3Rpb25Nb2RhbC52YWx1ZSA9IHRydWU7Cn07Cgpjb25zdCBjbG9zZUVkaXRDb2xsZWN0aW9uTW9kYWwgPSAoKSA9PiB7CiAgICBzaG93aW5nRWRpdENvbGxlY3Rpb25Nb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgZWRpdENvbGxlY3Rpb25Gb3JtLnJlc2V0KCk7CiAgICBlZGl0Q29sbGVjdGlvbkZvcm0uY2F0ZWdvcnkgPSAnJzsKfTsKCmNvbnN0IHN1Ym1pdENvbGxlY3Rpb24gPSAoKSA9PiB7CiAgICBjb2xsZWN0aW9uRm9ybS5wb3N0KHJvdXRlKCdtZW1iZXIuY29sbGVjdGlvbnMuc3RvcmUnKSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIHByZXNlcnZlU3RhdGU6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIGNsb3NlQ29sbGVjdGlvbk1vZGFsKCk7CiAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0NvbGVjyJtpYSBhIGZvc3QgY3JlYXTEgyBjdSBzdWNjZXMhJyk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiAoZXJyb3JzKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvbGxlY3Rpb24gY3JlYXRpb24gZmFpbGVkOicsIGVycm9ycyk7CiAgICAgICAgfQogICAgfSk7Cn07Cgpjb25zdCBzdWJtaXRFZGl0Q29sbGVjdGlvbiA9ICgpID0+IHsKICAgIGVkaXRDb2xsZWN0aW9uRm9ybS5wdXQocm91dGUoJ21lbWJlci5jb2xsZWN0aW9ucy51cGRhdGUnLCBlZGl0Q29sbGVjdGlvbkZvcm0uaWQpLCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgcHJlc2VydmVTdGF0ZTogdHJ1ZSwKICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgY2xvc2VFZGl0Q29sbGVjdGlvbk1vZGFsKCk7CiAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0NvbGVjyJtpYSBhIGZvc3QgYWN0dWFsaXphdMSDIGN1IHN1Y2NlcyEnKTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IChlcnJvcnMpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ29sbGVjdGlvbiB1cGRhdGUgZmFpbGVkOicsIGVycm9ycyk7CiAgICAgICAgfQogICAgfSk7Cn07Cgpjb25zdCBkZWxldGVDb2xsZWN0aW9uID0gKGNvbGxlY3Rpb24pID0+IHsKICAgIGlmIChjb25maXJtKCdTdW50ZcibaSBzaWd1ciBjxIMgZG9yacibaSBzxIMgyJl0ZXJnZcibaSBhY2Vhc3TEgyBjb2xlY8ibaWU/JykpIHsKICAgICAgICByb3V0ZXIuZGVsZXRlKHJvdXRlKCdtZW1iZXIuY29sbGVjdGlvbnMuZGVzdHJveScsIGNvbGxlY3Rpb24uaWQpLCB7CiAgICAgICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0NvbGVjyJtpYSBhIGZvc3QgyJl0ZWFyc8SDIGN1IHN1Y2NlcyEnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25FcnJvcjogKGVycm9ycykgPT4gewogICAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoJ0EgYXDEg3J1dCBvIGVyb2FyZSBsYSDImXRlcmdlcmVhIGNvbGVjyJtpZWkuJyk7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb2xsZWN0aW9uIGRlbGV0aW9uIGZhaWxlZDonLCBlcnJvcnMpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn07Cgpjb25zdCBjYW5FZGl0Q29sbGVjdGlvbiA9IChjb2xsZWN0aW9uKSA9PiB7CiAgICByZXR1cm4gY29sbGVjdGlvbi51c2VyX2lkID09PSBwcm9wcy51c2VyLmlkIHx8IGNhbkVkaXRBbnlEb2N1bWVudC52YWx1ZTsKfTsKCmNvbnN0IHNlbGVjdENvbGxlY3Rpb25Gb3JWaWV3ID0gKGNvbGxlY3Rpb24pID0+IHsKICAgIHNlbGVjdGVkQ29sbGVjdGlvbkZvclZpZXcudmFsdWUgPSBjb2xsZWN0aW9uLmlkOwp9OwoKY29uc3QgY2xlYXJDb2xsZWN0aW9uVmlldyA9ICgpID0+IHsKICAgIHNlbGVjdGVkQ29sbGVjdGlvbkZvclZpZXcudmFsdWUgPSBudWxsOwp9Owo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxIZWFkIHRpdGxlPSJEb2N1bWVudGUiIC8+CgogICAgPE1lbWJlckxheW91dD4KICAgICAgICA8ZGl2IDpjbGFzcz0ieydmbGV4IGZsZXgtY29sJzogaXNNb2JpbGUsICdmbGV4JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgIDwhLS0gTGVmdCBTaWRlYmFyIC0tPgogICAgICAgICAgICA8TGVmdFNpZGViYXIgCiAgICAgICAgICAgICAgICB2LWlmPSIhaXNNb2JpbGUiCiAgICAgICAgICAgICAgICA6bG9kZ2U9ImxvZGdlIgogICAgICAgICAgICAgICAgOnVuZmluaXNoZWRfcHJvamVjdHNfY291bnQ9ImxvZGdlPy51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IHx8IDAiCiAgICAgICAgICAgICAgICA6dXBjb21pbmdfZXZlbnRzX2NvdW50PSJsb2RnZT8udXBjb21pbmdfZXZlbnRzX2NvdW50IHx8IDAiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT4KICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleC0xIHAtNCBwYi0yMCc6IGlzTW9iaWxlLCAnZmxleC0xIG1sLVszNjBweF0gbXItWzM2MHB4XSBwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydwLTQnOiBpc01vYmlsZSwgJ3AtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydCBzbTppdGVtcy1jZW50ZXIgbWItNiBzcGFjZS15LTQgc206c3BhY2UteS0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC0yeGwgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIj5Eb2N1bWVudGVsZSBMb2plaTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IGl0ZW1zLXN0YXJ0IHNtOml0ZW1zLWNlbnRlciBzcGFjZS15LTIgc206c3BhY2UteS0wIHNtOnNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJ2aWV3TW9kZSA9ICdncmlkJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSAnZ3JpZCcgPyAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTYwMCcgOiAndGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncC0yIHJvdW5kZWQtbWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAzYTIgMiAwIDAwLTIgMnYyYTIgMiAwIDAwMiAyaDJhMiAyIDAgMDAyLTJWNWEyIDIgMCAwMC0yLTJINXpNNSAxMWEyIDIgMCAwMC0yIDJ2MmEyIDIgMCAwMDIgMmgyYTIgMiAwIDAwMi0ydi0yYTIgMiAwIDAwLTItMkg1ek0xMSA1YTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0yVjV6TTExIDEzYTIgMiAwIDAxMi0yaDJhMiAyIDAgMDEyIDJ2MmEyIDIgMCAwMS0yIDJoLTJhMiAyIDAgMDEtMi0ydi0yeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJ2aWV3TW9kZSA9ICdsaXN0JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlID09PSAnbGlzdCcgPyAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTYwMCcgOiAndGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncC0yIHJvdW5kZWQtbWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zIDRhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6bTAgNGExIDEgMCAwMTEtMWgxMmExIDEgMCAxMTAgMkg0YTEgMSAwIDAxLTEtMXptMCA0YTEgMSAwIDAxMS0xaDEyYTEgMSAwIDExMCAySDRhMSAxIDAgMDEtMS0xem0wIDRhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dBZGREb2N1bWVudE1vZGFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQtbWQgaG92ZXI6YmctYmx1ZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOnJpbmctb2Zmc2V0LTIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXVnxIMgRG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9InNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdzdHVkaXUtbWFzb25pYycgfHwgc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RpdmVyc2UnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93QWRkQ29sbGVjdGlvbk1vZGFsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ncmVlbi02MDAgdGV4dC13aGl0ZSByb3VuZGVkLW1kIGhvdmVyOmJnLWdyZWVuLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctZ3JlZW4tNTAwIGZvY3VzOnJpbmctb2Zmc2V0LTIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXVnxIMgQ29sZWPIm2llCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYW5kIENhdGVnb3J5IFRhYnMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC00IG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9InNlYXJjaFF1ZXJ5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3LWZ1bGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iQ2F1dMSDIGRvY3VtZW50ZS4uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2F0ZWdvcnkgVGFicyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBvdmVyZmxvdy14LWF1dG8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYXYgY2xhc3M9Ii1tYi1weCBmbGV4IHNwYWNlLXgtOCBtaW4tdy1tYXgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9IigpID0+IHsgc2VsZWN0ZWRDYXRlZ29yeSA9ICdhbGwnOyBjbGVhckNvbGxlY3Rpb25WaWV3KCk7IH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9IlsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItYmx1ZS01MDAgdGV4dC1ibHVlLTYwMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGl0ZXNwYWNlLW5vd3JhcCBweS00IHB4LTEgYm9yZGVyLWItMiBmb250LW1lZGl1bSB0ZXh0LXNtJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9hdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPSJjYXRlZ29yeSBpbiB2aXNpYmxlQ2F0ZWdvcmllcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdGVnb3J5LmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIoKSA9PiB7IHNlbGVjdGVkQ2F0ZWdvcnkgPSBjYXRlZ29yeS5zbHVnOyBjbGVhckNvbGxlY3Rpb25WaWV3KCk7IH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9IlsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5ID09PSBjYXRlZ29yeS5zbHVnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1ibHVlLTUwMCB0ZXh0LWJsdWUtNjAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItdHJhbnNwYXJlbnQgdGV4dC1ncmF5LTUwMCBob3Zlcjp0ZXh0LWdyYXktNzAwIGhvdmVyOmJvcmRlci1ncmF5LTMwMCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaXRlc3BhY2Utbm93cmFwIHB5LTQgcHgtMSBib3JkZXItYi0yIGZvbnQtbWVkaXVtIHRleHQtc20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeS5uYW1lID09PSAnUGxhbnNlJyA/ICdQbGFuyJllJyA6IGNhdGVnb3J5Lm5hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uYXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFsb2RnZSIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTE2IHctMTYgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgNC4zNTRhNCA0IDAgMTEwIDUuMjkyTTE1IDIxSDN2LTFhNiA2IDAgMDExMiAwdjF6bTAgMGg2di0xYTYgNiAwIDAwLTktNS4xOTdNMTMgN2E0IDQgMCAxMS04IDAgNCA0IDAgMDE4IDB6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBzdW50ZcibaSDDrm5yZWdpc3RyYXQgw65udHItbyBsb2rEgzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+Q29udGFjdGHIm2kgYWRtaW5pc3RyYXRvcnVsIHBlbnRydSBhIGZpIGFkxIN1Z2F0IMOubnRyLW8gbG9qxIMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlLWlmPSJmaWx0ZXJlZERvY3VtZW50cy5sZW5ndGggPT09IDAgJiYgZmlsdGVyZWRDb2xsZWN0aW9ucy5sZW5ndGggPT09IDAiIGNsYXNzPSJ0ZXh0LWNlbnRlciBweS0xMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWdyYXktNTAwIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC0xNiB3LTE2IG14LWF1dG8iIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTIiPk51IGV4aXN0xIMgZG9jdW1lbnRlIMOubiBsb2rEgzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ncmF5LTUwMCI+TW9tZW50YW4gbnUgZXhpc3TEgyBkb2N1bWVudGUgw65uIGxvamEgZHVtbmVhdm9hc3RyxIMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gR3JpZCBWaWV3IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj0idmlld01vZGUgPT09ICdncmlkJyIgOmNsYXNzPSJ7J2dyaWQgZ3JpZC1jb2xzLTEgZ2FwLTQnOiBpc01vYmlsZSwgJ2dyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTMgZ2FwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQmFjayBidXR0b24gaWYgdmlld2luZyBhIGNvbGxlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNlbGVjdGVkQ29sbGVjdGlvbkZvclZpZXciIGNsYXNzPSJjb2wtc3Bhbi1mdWxsIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJjbGVhckNvbGxlY3Rpb25WaWV3IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTEwIDE5bC03LTdtMCAwbDctN20tNyA3aDE4IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+w45uYXBvaSBsYSB0b2F0ZSBkb2N1bWVudGVsZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sbGVjdGlvbnMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj0iZmlsdGVyZWRDb2xsZWN0aW9ucy5sZW5ndGggPiAwICYmICFzZWxlY3RlZENvbGxlY3Rpb25Gb3JWaWV3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJjb2xsZWN0aW9uIGluIGZpbHRlcmVkQ29sbGVjdGlvbnMiIDprZXk9ImNvbGxlY3Rpb24uaWQiIGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAgY3Vyc29yLXBvaW50ZXIiIEBjbGljaz0ic2VsZWN0Q29sbGVjdGlvbkZvclZpZXcoY29sbGVjdGlvbikiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LTE2IGgtMTYgcm91bmRlZC1sZyBiZy1ncmFkaWVudC10by1yIGZyb20tcHVycGxlLTUwMCB0by1wdXJwbGUtNjAwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC04IHctOCB0ZXh0LXdoaXRlIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xOSAxMUg1bTE0IDBhMiAyIDAgMDEyIDJ2NmEyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJ2LTZhMiAyIDAgMDEyLTJtMTQgMFY5YTIgMiAwIDAwLTItMk01IDExVjlhMiAyIDAgMDEyLTJtMCAwVjVhMiAyIDAgMDEyLTJoNmEyIDIgMCAwMTIgMnYyTTcgN2gxMCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlciBtYi0yIj57eyBjb2xsZWN0aW9uLm5hbWUgfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS02MDAgdGV4dC1jZW50ZXIgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi5kZXNjcmlwdGlvbiB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJibG9jayB0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0IGRlIHt7IGNvbGxlY3Rpb24udXNlci5maXJzdF9uYW1lIH19IHt7IGNvbGxlY3Rpb24udXNlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sZWPIm2llCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iY2FuRWRpdENvbGxlY3Rpb24oY29sbGVjdGlvbikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dFZGl0Q29sbGVjdGlvbk1vZGFsKGNvbGxlY3Rpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTExIDVINmEyIDIgMCAwMC0yIDJ2MTFhMiAyIDAgMDAyIDJoMTFhMiAyIDAgMDAyLTJ2LTVtLTEuNDE0LTkuNDE0YTIgMiAwIDExMi44MjggMi44MjhMMTEuODI4IDE1SDl2LTIuODI4bDguNTg2LTguNTg2eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iY2FuRWRpdENvbGxlY3Rpb24oY29sbGVjdGlvbikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImRlbGV0ZUNvbGxlY3Rpb24oY29sbGVjdGlvbikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTYgdy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE5IDdsLS44NjcgMTIuMTQyQTIgMiAwIDAxMTYuMTM4IDIxSDcuODYyYTIgMiAwIDAxLTEuOTk1LTEuODU4TDUgN201IDR2Nm00LTZ2Nm0xLTEwVjRhMSAxIDAgMDAtMS0xaC00YTEgMSAwIDAwLTEgMXYzTTQgN2gxNiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEb2N1bWVudHMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJkb2N1bWVudCBpbiBmaWx0ZXJlZERvY3VtZW50cyIgOmtleT0iZG9jdW1lbnQuaWQiIGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC00IGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idy0xNiBoLTE2IHJvdW5kZWQtbGcgYmctZ3JhZGllbnQtdG8tciBmcm9tLWJsdWUtNTAwIHRvLWJsdWUtNjAwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTggdy04IHRleHQtd2hpdGUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOSAxMmg2bS02IDRoNm0yIDVIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg1LjU4NmExIDEgMCAwMS43MDcuMjkzbDUuNDE0IDUuNDE0YTEgMSAwIDAxLjI5My43MDdWMTlhMiAyIDAgMDEtMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCB0ZXh0LWNlbnRlciBtYi0yIj57eyBkb2N1bWVudC50aXRsZSB9fTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIHRleHQtY2VudGVyIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZG9jdW1lbnQuZGVzY3JpcHRpb24gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9ImRvY3VtZW50LmNhdGVnb3J5LnNsdWcgPT09ICdwbGFuc2UnICYmIGRvY3VtZW50LmNyZWF0b3IiIGNsYXNzPSJibG9jayB0ZXh0LXNtIHRleHQtZ3JheS01MDAgbXQtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGUge3sgZG9jdW1lbnQuY3JlYXRvci5maXJzdF9uYW1lIH19IHt7IGRvY3VtZW50LmNyZWF0b3IubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkb2N1bWVudC5jYXRlZ29yeS5uYW1lID09PSAnUGxhbnNlJyA/ICdQbGFuyJllJyA6IGRvY3VtZW50LmNhdGVnb3J5Lm5hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImRvY3VtZW50LnVzZXJfaWQgPT09IHVzZXIuaWQgfHwgY2FuRWRpdEFueURvY3VtZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dFZGl0RG9jdW1lbnRNb2RhbChkb2N1bWVudCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xMSA1SDZhMiAyIDAgMDAtMiAydjExYTIgMiAwIDAwMiAyaDExYTIgMiAwIDAwMi0ydi01bS0xLjQxNC05LjQxNGEyIDIgMCAxMTIuODI4IDIuODI4TDExLjgyOCAxNUg5di0yLjgyOGw4LjU4Ni04LjU4NnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iZG9jdW1lbnQudXNlcl9pZCA9PT0gdXNlci5pZCB8fCBjYW5FZGl0QW55RG9jdW1lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZGVsZXRlRG9jdW1lbnQoZG9jdW1lbnQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE5IDdsLS44NjcgMTIuMTQyQTIgMiAwIDAxMTYuMTM4IDIxSDcuODYyYTIgMiAwIDAxLTEuOTk1LTEuODU4TDUgN201IDR2Nm00LTZ2Nm0xLTEwVjRhMSAxIDAgMDAtMS0xaC00YTEgMSAwIDAwLTEgMXYzTTQgN2gxNiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9ImRvY3VtZW50LmZpbGVfdXJsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC02IHctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTQgMTZ2MWEzIDMgMCAwMDMgM2gxMGEzIDMgMCAwMDMtM3YtMW0tNC00bC00IDRtMCAwbC00LTRtNCA0VjQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGlzdCBWaWV3IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZSBjbGFzcz0ic3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQmFjayBidXR0b24gaWYgdmlld2luZyBhIGNvbGxlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNlbGVjdGVkQ29sbGVjdGlvbkZvclZpZXciIGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iY2xlYXJDb2xsZWN0aW9uVmlldyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xMCAxOWwtNy03bTAgMGw3LTdtLTcgN2gxOCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPsOObmFwb2kgbGEgdG9hdGUgZG9jdW1lbnRlbGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbGxlY3Rpb25zIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9ImZpbHRlcmVkQ29sbGVjdGlvbnMubGVuZ3RoID4gMCAmJiAhc2VsZWN0ZWRDb2xsZWN0aW9uRm9yVmlldyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iY29sbGVjdGlvbiBpbiBmaWx0ZXJlZENvbGxlY3Rpb25zIiA6a2V5PSJjb2xsZWN0aW9uLmlkIiBjbGFzcz0iYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMyBob3ZlcjpzaGFkb3ctbWQgdHJhbnNpdGlvbi1zaGFkb3cgZHVyYXRpb24tMjAwIGN1cnNvci1wb2ludGVyIiBAY2xpY2s9InNlbGVjdENvbGxlY3Rpb25Gb3JWaWV3KGNvbGxlY3Rpb24pIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMTAgaC0xMCByb3VuZGVkLWxnIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1wdXJwbGUtNTAwIHRvLXB1cnBsZS02MDAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1zaHJpbmstMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHRleHQtd2hpdGUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE5IDExSDVtMTQgMGEyIDIgMCAwMTIgMnY2YTIgMiAwIDAxLTIgMkg1YTIgMiAwIDAxLTItMnYtNmEyIDIgMCAwMTItMm0xNCAwVjlhMiAyIDAgMDAtMi0yTTUgMTFWOWEyIDIgMCAwMTItMm0wIDBWNWEyIDIgMCAwMTItMmg2YTIgMiAwIDAxMiAydjJNNyA3aDEwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgbWluLXctMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRydW5jYXRlIj57eyBjb2xsZWN0aW9uLm5hbWUgfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIGJnLXB1cnBsZS0xMDAgcHgtMiBweS0wLjUgcm91bmRlZC1mdWxsIj5Db2xlY8ibaWU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uZGVzY3JpcHRpb24gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCBtdC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXQgZGUge3sgY29sbGVjdGlvbi51c2VyLmZpcnN0X25hbWUgfX0ge3sgY29sbGVjdGlvbi51c2VyLmxhc3RfbmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImNhbkVkaXRDb2xsZWN0aW9uKGNvbGxlY3Rpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dFZGl0Q29sbGVjdGlvbk1vZGFsKGNvbGxlY3Rpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTEgNUg2YTIgMiAwIDAwLTIgMnYxMWEyIDIgMCAwMDIgMmgxMWEyIDIgMCAwMDItMnYtNW0tMS40MTQtOS40MTRhMiAyIDAgMTEyLjgyOCAyLjgyOEwxMS44MjggMTVIOXYtMi44MjhsOC41ODYtOC41ODZ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImNhbkVkaXRDb2xsZWN0aW9uKGNvbGxlY3Rpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImRlbGV0ZUNvbGxlY3Rpb24oY29sbGVjdGlvbikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXJlZC02MDAgaG92ZXI6dGV4dC1yZWQtODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTkgN2wtLjg2NyAxMi4xNDJBMiAyIDAgMDExNi4xMzggMjFINy44NjJhMiAyIDAgMDEtMS45OTUtMS44NThMNSA3bTUgNHY2bTQtNnY2bTEtMTBWNGExIDEgMCAwMC0xLTFoLTRhMSAxIDAgMDAtMSAxdjNNNCA3aDE2IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEb2N1bWVudHMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJkb2N1bWVudCBpbiBmaWx0ZXJlZERvY3VtZW50cyIgOmtleT0iZG9jdW1lbnQuaWQiIGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0zIGhvdmVyOnNoYWRvdy1tZCB0cmFuc2l0aW9uLXNoYWRvdyBkdXJhdGlvbi0yMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InctMTAgaC0xMCByb3VuZGVkLWxnIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1ibHVlLTUwMCB0by1ibHVlLTYwMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LXNocmluay0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LXdoaXRlIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSBtaW4tdy0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIHRydW5jYXRlIj57eyBkb2N1bWVudC50aXRsZSB9fTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCBiZy1ncmF5LTEwMCBweC0yIHB5LTAuNSByb3VuZGVkLWZ1bGwiPnt7IGRvY3VtZW50LmNhdGVnb3J5Lm5hbWUgPT09ICdQbGFuc2UnID8gJ1BsYW7ImWUnIDogZG9jdW1lbnQuY2F0ZWdvcnkubmFtZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZG9jdW1lbnQuZGVzY3JpcHRpb24gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTIgZmxleCBmbGV4LXdyYXAgZ2FwLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBiZy1ibHVlLTUwIHB4LTIgcHktMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS03MDAgcmluZy0xIHJpbmctaW5zZXQgcmluZy1ibHVlLTcwMC8xMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRvY3VtZW50LmNhdGVnb3J5Lm5hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLW1kIGJnLWdyZWVuLTUwIHB4LTIgcHktMSB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JlZW4tNzAwIHJpbmctMSByaW5nLWluc2V0IHJpbmctZ3JlZW4tNzAwLzEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZG9jdW1lbnQuYWNjZXNzX3R5cGUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0iZG9jdW1lbnQuY29sbGVjdGlvbiIgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLW1kIGJnLXB1cnBsZS01MCBweC0yIHB5LTEgdGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LXB1cnBsZS03MDAgcmluZy0xIHJpbmctaW5zZXQgcmluZy1wdXJwbGUtNzAwLzEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZG9jdW1lbnQuY29sbGVjdGlvbi5uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImRvY3VtZW50LnVzZXJfaWQgPT09IHVzZXIuaWQgfHwgY2FuRWRpdEFueURvY3VtZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd0VkaXREb2N1bWVudE1vZGFsKGRvY3VtZW50KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTEgNUg2YTIgMiAwIDAwLTIgMnYxMWEyIDIgMCAwMDIgMmgxMWEyIDIgMCAwMDItMnYtNW0tMS40MTQtOS40MTRhMiAyIDAgMTEyLjgyOCAyLjgyOEwxMS44MjggMTVIOXYtMi44MjhsOC41ODYtOC41ODZ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iZG9jdW1lbnQudXNlcl9pZCA9PT0gdXNlci5pZCB8fCBjYW5FZGl0QW55RG9jdW1lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJkZWxldGVEb2N1bWVudChkb2N1bWVudCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xOSA3bC0uODY3IDEyLjE0MkEyIDIgMCAwMTE2LjEzOCAyMUg3Ljg2MmEyIDIgMCAwMS0xLjk5NS0xLjg1OEw1IDdtNSA0djZtNC02djZtMS0xMFY0YTEgMSAwIDAwLTEtMWgtNGExIDEgMCAwMC0xIDF2M000IDdoMTYiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmhyZWY9ImRvY3VtZW50LmZpbGVfdXJsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik00IDE2djFhMyAzIDAgMDAzIDNoMTBhMyAzIDAgMDAzLTN2LTFtLTQtNGwtNCA0bTAgMGwtNC00bTQgNFY0IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUmlnaHQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPFJpZ2h0U2lkZWJhciAKICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgIDpldmVudHM9InByb3BzLmV2ZW50cy5tYXAoZXZlbnQgPT4gKHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICBzdGFydF9kYXRlOiBldmVudC5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBldmVudC5lbmRfZGF0ZSB8fCBldmVudC5ldmVudD8uZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGV2ZW50LmF1dGhvciA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7ZXZlbnQuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZXZlbnQuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBldmVudC5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiBldmVudC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBldmVudC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogZXZlbnQuZXZlbnQ/LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5ldmVudC5wb2xsLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogZXZlbnQuZXZlbnQucG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZXZlbnQuZXZlbnQucG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGV2ZW50LmV2ZW50LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogZXZlbnQuZXZlbnQucG9sbC52b3RlcywKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZV9jb3VudHMKICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgfSkpIgogICAgICAgICAgICAgICAgQHBvbGwtdXBkYXRlZD0iaGFuZGxlUG9sbFVwZGF0ZSIKICAgICAgICAgICAgICAgIEByZWZyZXNoLWV2ZW50cz0iKCkgPT4gcm91dGVyLnJlbG9hZCh7IG9ubHk6IFsnZXZlbnRzJ10gfSkiCiAgICAgICAgICAgIC8+CgogICAgICAgICAgICA8IS0tIEJvdHRvbSBNZW51IC0tPgogICAgICAgICAgICA8Qm90dG9tTWVudSB2LWlmPSJpc01vYmlsZSIgOmxvZGdlPSJsb2RnZSIgLz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBBZGQgRG9jdW1lbnQgTW9kYWwgLS0+CiAgICAgICAgPE1vZGFsIDpzaG93PSJzaG93aW5nQWRkRG9jdW1lbnRNb2RhbCIgQGNsb3NlPSJjbG9zZU1vZGFsIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC02Ij4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTQiPgogICAgICAgICAgICAgICAgICAgIEFkYXVnxIMgRG9jdW1lbnQgTm91CiAgICAgICAgICAgICAgICA8L2gyPgoKICAgICAgICAgICAgICAgIDxmb3JtIEBzdWJtaXQucHJldmVudD0ic3VibWl0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJ0aXRsZSIgdmFsdWU9IlRpdGx1IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0idGl0bGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJmb3JtLnRpdGxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIDptZXNzYWdlPSJmb3JtLmVycm9ycy50aXRsZSIgY2xhc3M9Im10LTIiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImRlc2NyaXB0aW9uIiB2YWx1ZT0iRGVzY3JpZXJlIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJkZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImZvcm0uZGVzY3JpcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXItMCBweS0xLjUgdGV4dC1ncmF5LTkwMCBzaGFkb3ctc20gcmluZy0xIHJpbmctaW5zZXQgcmluZy1ncmF5LTMwMCBwbGFjZWhvbGRlcjp0ZXh0LWdyYXktNDAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWluc2V0IGZvY3VzOnJpbmctaW5kaWdvLTYwMCBzbTp0ZXh0LXNtIHNtOmxlYWRpbmctNiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9IjQiCiAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRFcnJvciA6bWVzc2FnZT0iZm9ybS5lcnJvcnMuZGVzY3JpcHRpb24iIGNsYXNzPSJtdC0yIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJjYXRlZ29yeSIgdmFsdWU9IkNhdGVnb3JpZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImNhdGVnb3J5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5jYXRlZ29yeV9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCBib3JkZXItZ3JheS0zMDAgZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAgcm91bmRlZC1tZCBzaGFkb3ctc20iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iZm9ybS5hY2Nlc3NfdHlwZSA9ICdhbGwnIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdGVhesSDIG8gY2F0ZWdvcmllPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImNhdGVnb3J5IGluIHZpc2libGVDYXRlZ29yaWVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdGVnb3J5LmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT0iY2F0ZWdvcnkuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkubmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRFcnJvciA6bWVzc2FnZT0iZm9ybS5lcnJvcnMuY2F0ZWdvcnlfaWQiIGNsYXNzPSJtdC0yIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImZvcm0uY2F0ZWdvcnlfaWQgJiYgIWlzT2ZmaWNpYWxEb2N1bWVudCIgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImFjY2Vzc190eXBlIiB2YWx1ZT0iVGlwIEFjY2VzIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iYWNjZXNzX3R5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJmb3JtLmFjY2Vzc190eXBlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIGJvcmRlci1ncmF5LTMwMCBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCByb3VuZGVkLW1kIHNoYWRvdy1zbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9InR5cGUgaW4gYWNjZXNzVHlwZXMiIDprZXk9InR5cGUudmFsdWUiIDp2YWx1ZT0idHlwZS52YWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdHlwZS5sYWJlbCB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMSB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0YcibaSBuaXZlbHVsIG1pbmltIGRlIGFjY2VzIG5lY2VzYXIgcGVudHJ1IGFjZXN0IGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIDptZXNzYWdlPSJmb3JtLmVycm9ycy5hY2Nlc3NfdHlwZSIgY2xhc3M9Im10LTIiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iaXNQbGFuc2VDYXRlZ29yeSIgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCB2YWx1ZT0iQ3JlYXRvciIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZm9ybS5jcmVhdG9yX2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTUwMCBmb2N1czpyaW5nLWluZGlnby01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+U2VsZWN0YcibaSBjcmVhdG9ydWw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzIiA6a2V5PSJtZW1iZXIuaWQiIDp2YWx1ZT0ibWVtYmVyLmlkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19ICh7eyBtZW1iZXIucm9sZSB9fSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im10LTEgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGHIm2kgbWVtYnJ1IGNhcmUgYSBjcmVhdCBwbGFuyJlhLgogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iKHNlbGVjdGVkQ2F0ZWdvcnlEYXRhPy5zbHVnID09PSAnc3R1ZGl1LW1hc29uaWMnIHx8IHNlbGVjdGVkQ2F0ZWdvcnlEYXRhPy5zbHVnID09PSAnZGl2ZXJzZScpICYmIGNvbGxlY3Rpb25zLmxlbmd0aCA+IDAiIGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJjb2xsZWN0aW9uIiB2YWx1ZT0iQ29sZWPIm2llIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iY29sbGVjdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImZvcm0uY29sbGVjdGlvbl9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlci0wIHB5LTEuNSB0ZXh0LWdyYXktOTAwIHNoYWRvdy1zbSByaW5nLTEgcmluZy1pbnNldCByaW5nLWdyYXktMzAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWluc2V0IGZvY3VzOnJpbmctaW5kaWdvLTYwMCBzbTp0ZXh0LXNtIHNtOmxlYWRpbmctNiIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3RlYXrEgyBjb2xlY8ibaWU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9ImNvbGxlY3Rpb24gaW4gYXZhaWxhYmxlQ29sbGVjdGlvbnMiIDprZXk9ImNvbGxlY3Rpb24uaWQiIDp2YWx1ZT0iY29sbGVjdGlvbi5pZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sbGVjdGlvbi5uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIDptZXNzYWdlPSJmb3JtLmVycm9ycy5jb2xsZWN0aW9uX2lkIiBjbGFzcz0ibXQtMiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIHZhbHVlPSJGaciZaWVyIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXI9ImhhbmRsZURyYWdPdmVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdsZWF2ZT0iaGFuZGxlRHJhZ0xlYXZlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRyb3A9ImhhbmRsZURyb3AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9IlsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXQtMSBmbGV4IGp1c3RpZnktY2VudGVyIHB4LTYgcHQtNSBwYi02IGJvcmRlci0yIGJvcmRlci1kYXNoZWQgcm91bmRlZC1sZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEcmFnZ2luZyA/ICdib3JkZXItYmx1ZS01MDAgYmctYmx1ZS01MCcgOiAnYm9yZGVyLWdyYXktMzAwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbGUgPyAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi01MCcgOiAnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS0xIHRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj0iIWZvcm0uZmlsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJteC1hdXRvIGgtMTIgdy0xMiB0ZXh0LWdyYXktNDAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPSJub25lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDQ4IDQ4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49InRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTI4IDhIMTJhNCA0IDAgMDAtNCA0djIwbTMyLTEydjhtMCAwdjhhNCA0IDAgMDEtNCA0SDEyYTQgNCAwIDAxLTQtNHYtNG0zMi00bC0zLjE3Mi0zLjE3MmE0IDQgMCAwMC01LjY1NiAwTDI4IDI4TTggMzJsOS4xNzItOS4xNzJhNCA0IDAgMDE1LjY1NiAwTDI4IDI4bTAgMGw0IDRtNC0yNGg4bS00LTR2OG0tMTIgNGguMDIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPSIyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggdGV4dC1zbSB0ZXh0LWdyYXktNjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj0iZmlsZS11cGxvYWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJlbGF0aXZlIGN1cnNvci1wb2ludGVyIGJnLXdoaXRlIHJvdW5kZWQtbWQgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtNTAwIGZvY3VzLXdpdGhpbjpvdXRsaW5lLW5vbmUgZm9jdXMtd2l0aGluOnJpbmctMiBmb2N1cy13aXRoaW46cmluZy1vZmZzZXQtMiBmb2N1cy13aXRoaW46cmluZy1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj7Djm5jYXJjxIMgdW4gZmnImWllcjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImZpbGUtdXBsb2FkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9ImZpbGVJbnB1dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNyLW9ubHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9IihlKSA9PiBoYW5kbGVGaWxlU2VsZWN0KGUudGFyZ2V0LmZpbGVzWzBdKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwbC0xIj5zYXUgdHJhZ2UgyJlpIHBsYXNlYXrEgzwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE5HLCBKUEcsIFBERiwgRE9DLCBET0NYIHDDom7EgyBsYSAxMDBNQgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj0icHJldmlld1VybCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJwcmV2aWV3VXJsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaC0zMiB3LTMyIG9iamVjdC1jb3ZlciByb3VuZGVkLWxnIG1iLTIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0iUHJldmlldyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC0zMiB3LTMyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWdyYXktMTAwIHJvdW5kZWQtbGcgbWItMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTEyIHctMTIgdGV4dC1ncmF5LTQwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9Im5vbmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9ImN1cnJlbnRDb2xvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9IjIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS02MDAgdHJ1bmNhdGUgbWF4LXcteHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtLmZpbGUubmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJyZW1vdmVGaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTUgdy01IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0ibm9uZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT0iY3VycmVudENvbG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49InJvdW5kIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNNiAxOEwxOCA2TTYgNmwxMiAxMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIDptZXNzYWdlPSJmb3JtLmVycm9ycy5maWxlIiBjbGFzcz0ibXQtMiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWVuZCBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8U2Vjb25kYXJ5QnV0dG9uIEBjbGljaz0iY2xvc2VNb2RhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnVsZWF6xIMKICAgICAgICAgICAgICAgICAgICAgICAgPC9TZWNvbmRhcnlCdXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxQcmltYXJ5QnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJzdWJtaXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9ImZvcm0ucHJvY2Vzc2luZyIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgyBEb2N1bWVudAogICAgICAgICAgICAgICAgICAgICAgICA8L1ByaW1hcnlCdXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvTW9kYWw+CgogICAgICAgIDwhLS0gRWRpdCBEb2N1bWVudCBNb2RhbCAtLT4KICAgICAgICA8TW9kYWwgOnNob3c9InNob3dpbmdFZGl0RG9jdW1lbnRNb2RhbCIgQGNsb3NlPSJjbG9zZUVkaXRNb2RhbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtNiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICBFZGl0ZWF6xIMgRG9jdW1lbnQKICAgICAgICAgICAgICAgIDwvaDI+CgogICAgICAgICAgICAgICAgPGZvcm0gQHN1Ym1pdC5wcmV2ZW50PSJzdWJtaXRFZGl0Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJlZGl0X3RpdGxlIiB2YWx1ZT0iVGl0bHUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJlZGl0X3RpdGxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdEZvcm0udGl0bGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImVkaXRGb3JtLmVycm9ycy50aXRsZSIgY2xhc3M9Im10LTIiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImVkaXRfZGVzY3JpcHRpb24iIHZhbHVlPSJEZXNjcmllcmUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImVkaXRfZGVzY3JpcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS5kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlci0wIHB5LTEuNSB0ZXh0LWdyYXktOTAwIHNoYWRvdy1zbSByaW5nLTEgcmluZy1pbnNldCByaW5nLWdyYXktMzAwIHBsYWNlaG9sZGVyOnRleHQtZ3JheS00MDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctaW5zZXQgZm9jdXM6cmluZy1pbmRpZ28tNjAwIHNtOnRleHQtc20gc206bGVhZGluZy02IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz0iNCIKICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dEVycm9yIDptZXNzYWdlPSJlZGl0Rm9ybS5lcnJvcnMuZGVzY3JpcHRpb24iIGNsYXNzPSJtdC0yIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJlZGl0X2NhdGVnb3J5IiB2YWx1ZT0iQ2F0ZWdvcmllIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iZWRpdF9jYXRlZ29yeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLmNhdGVnb3J5X2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIGJvcmRlci1ncmF5LTMwMCBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCByb3VuZGVkLW1kIHNoYWRvdy1zbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSJlZGl0Rm9ybS5hY2Nlc3NfdHlwZSA9ICdhbGwnIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlNlbGVjdGVhesSDIG8gY2F0ZWdvcmllPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImNhdGVnb3J5IGluIHZpc2libGVDYXRlZ29yaWVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9ImNhdGVnb3J5LmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT0iY2F0ZWdvcnkuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkubmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRFcnJvciA6bWVzc2FnZT0iZWRpdEZvcm0uZXJyb3JzLmNhdGVnb3J5X2lkIiBjbGFzcz0ibXQtMiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJlZGl0Rm9ybS5jYXRlZ29yeV9pZCAmJiAhZWRpdEZvcm0uaXNfcmVzdHJpY3RlZCIgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImVkaXRfYWNjZXNzX3R5cGUiIHZhbHVlPSJUaXAgQWNjZXMiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJlZGl0X2FjY2Vzc190eXBlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdEZvcm0uYWNjZXNzX3R5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwgYm9yZGVyLWdyYXktMzAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBmb2N1czpyaW5nLWJsdWUtNTAwIHJvdW5kZWQtbWQgc2hhZG93LXNtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj0idHlwZSBpbiBhY2Nlc3NUeXBlcyIgOmtleT0idHlwZS52YWx1ZSIgOnZhbHVlPSJ0eXBlLnZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0eXBlLmxhYmVsIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtdC0xIHRleHQtc20gdGV4dC1ncmF5LTUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3RhyJtpIG5pdmVsdWwgbWluaW0gZGUgYWNjZXMgbmVjZXNhciBwZW50cnUgYWNlc3QgZG9jdW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImVkaXRGb3JtLmVycm9ycy5hY2Nlc3NfdHlwZSIgY2xhc3M9Im10LTIiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iZWRpdEZvcm0uY2F0ZWdvcnlfaWQgJiYgaXNPZmZpY2lhbERvY3VtZW50IiBjbGFzcz0ibWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWJsdWUtNTAgYm9yZGVyIGJvcmRlci1ibHVlLTIwMCByb3VuZGVkLW1kIHAtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LXNocmluay0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaC01IHctNSB0ZXh0LWJsdWUtNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTctNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTkgOWExIDEgMCAwMDAgMnYzYTEgMSAwIDAwMSAxaDFhMSAxIDAgMTAwLTJ2LTNhMSAxIDAgMDAtMS0xSDl6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1sLTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcyBSZXN0cmljyJtpb25hdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHRleHQtc20gdGV4dC1ibHVlLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGVsZSBvZmljaWFsZSBzdW50IGFjY2VzaWJpbGUgZG9hciBwZW50cnUgU2VjcmV0YXIgyJlpIE1hZXN0cnUgVmVuZXJhYmlsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJpc0VkaXRGb3JtUGxhbnNlQ2F0ZWdvcnkiIGNsYXNzPSJtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgdmFsdWU9IkNyZWF0b3IiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLmNyZWF0b3JfaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1pbmRpZ28tNTAwIGZvY3VzOnJpbmctaW5kaWdvLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3RhyJtpIGNyZWF0b3J1bDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj0ibWVtYmVyIGluIG1lbWJlcnMiIDprZXk9Im1lbWJlci5pZCIgOnZhbHVlPSJtZW1iZXIuaWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0gKHt7IG1lbWJlci5yb2xlIH19KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMSB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0YcibaSBtZW1icnUgY2FyZSBhIGNyZWF0IHBsYW7ImWEuCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIoZWRpdEZvcm0uY2F0ZWdvcnlfaWQgJiYgKGVkaXRGb3JtQ2F0ZWdvcnlEYXRhPy5zbHVnID09PSAnc3R1ZGl1LW1hc29uaWMnIHx8IGVkaXRGb3JtQ2F0ZWdvcnlEYXRhPy5zbHVnID09PSAnZGl2ZXJzZScpKSAmJiBjb2xsZWN0aW9ucy5sZW5ndGggPiAwIiBjbGFzcz0ibWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZWRpdF9jb2xsZWN0aW9uIiB2YWx1ZT0iQ29sZWPIm2llIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iZWRpdF9jb2xsZWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdEZvcm0uY29sbGVjdGlvbl9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlci0wIHB5LTEuNSB0ZXh0LWdyYXktOTAwIHNoYWRvdy1zbSByaW5nLTEgcmluZy1pbnNldCByaW5nLWdyYXktMzAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLWluc2V0IGZvY3VzOnJpbmctaW5kaWdvLTYwMCBzbTp0ZXh0LXNtIHNtOmxlYWRpbmctNiIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5TZWxlY3RlYXrEgyBjb2xlY8ibaWU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9ImNvbGxlY3Rpb24gaW4gZWRpdEZvcm1BdmFpbGFibGVDb2xsZWN0aW9ucyIgOmtleT0iY29sbGVjdGlvbi5pZCIgOnZhbHVlPSJjb2xsZWN0aW9uLmlkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2xsZWN0aW9uLm5hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImVkaXRGb3JtLmVycm9ycy5jb2xsZWN0aW9uX2lkIiBjbGFzcz0ibXQtMiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWVuZCBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8U2Vjb25kYXJ5QnV0dG9uIEBjbGljaz0iY2xvc2VFZGl0TW9kYWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQW51bGVhesSDCiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2Vjb25kYXJ5QnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8UHJpbWFyeUJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic3VibWl0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPSJlZGl0Rm9ybS5wcm9jZXNzaW5nIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWx2ZWF6xIMgTW9kaWZpY8SDcmlsZQogICAgICAgICAgICAgICAgICAgICAgICA8L1ByaW1hcnlCdXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvTW9kYWw+CgogICAgICAgIDwhLS0gQWRkIENvbGxlY3Rpb24gTW9kYWwgLS0+CiAgICAgICAgPE1vZGFsIDpzaG93PSJzaG93aW5nQWRkQ29sbGVjdGlvbk1vZGFsIiBAY2xvc2U9ImNsb3NlQ29sbGVjdGlvbk1vZGFsIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC02Ij4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTQiPgogICAgICAgICAgICAgICAgICAgIEFkYXVnxIMgQ29sZWPIm2llIE5vdcSDCiAgICAgICAgICAgICAgICA8L2gyPgoKICAgICAgICAgICAgICAgIDxmb3JtIEBzdWJtaXQucHJldmVudD0ic3VibWl0Q29sbGVjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iY29sbGVjdGlvbl9uYW1lIiB2YWx1ZT0iTnVtZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImNvbGxlY3Rpb25fbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImNvbGxlY3Rpb25Gb3JtLm5hbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImNvbGxlY3Rpb25Gb3JtLmVycm9ycy5uYW1lIiBjbGFzcz0ibXQtMiIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iY29sbGVjdGlvbl9kZXNjcmlwdGlvbiIgdmFsdWU9IkRlc2NyaWVyZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iY29sbGVjdGlvbl9kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImNvbGxlY3Rpb25Gb3JtLmRlc2NyaXB0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLTAgcHktMS41IHRleHQtZ3JheS05MDAgc2hhZG93LXNtIHJpbmctMSByaW5nLWluc2V0IHJpbmctZ3JheS0zMDAgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTQwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1pbnNldCBmb2N1czpyaW5nLWluZGlnby02MDAgc206dGV4dC1zbSBzbTpsZWFkaW5nLTYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSI0IgogICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImNvbGxlY3Rpb25Gb3JtLmVycm9ycy5kZXNjcmlwdGlvbiIgY2xhc3M9Im10LTIiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1lbmQgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPFNlY29uZGFyeUJ1dHRvbiBAY2xpY2s9ImNsb3NlQ29sbGVjdGlvbk1vZGFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFudWxlYXrEgwogICAgICAgICAgICAgICAgICAgICAgICA8L1NlY29uZGFyeUJ1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPFByaW1hcnlCdXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InN1Ym1pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD0iY29sbGVjdGlvbkZvcm0ucHJvY2Vzc2luZyIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgyBDb2xlY8ibaWUKICAgICAgICAgICAgICAgICAgICAgICAgPC9QcmltYXJ5QnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L01vZGFsPgoKICAgICAgICA8IS0tIEVkaXQgQ29sbGVjdGlvbiBNb2RhbCAtLT4KICAgICAgICA8TW9kYWwgOnNob3c9InNob3dpbmdFZGl0Q29sbGVjdGlvbk1vZGFsIiBAY2xvc2U9ImNsb3NlRWRpdENvbGxlY3Rpb25Nb2RhbCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtNiI+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICBFZGl0ZWF6xIMgQ29sZWPIm2llCiAgICAgICAgICAgICAgICA8L2gyPgoKICAgICAgICAgICAgICAgIDxmb3JtIEBzdWJtaXQucHJldmVudD0ic3VibWl0RWRpdENvbGxlY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImVkaXRfY29sbGVjdGlvbl9uYW1lIiB2YWx1ZT0iTnVtZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImVkaXRfY29sbGVjdGlvbl9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdENvbGxlY3Rpb25Gb3JtLm5hbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImVkaXRDb2xsZWN0aW9uRm9ybS5lcnJvcnMubmFtZSIgY2xhc3M9Im10LTIiIC8+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImVkaXRfY29sbGVjdGlvbl9kZXNjcmlwdGlvbiIgdmFsdWU9IkRlc2NyaWVyZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iZWRpdF9jb2xsZWN0aW9uX2Rlc2NyaXB0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdENvbGxlY3Rpb25Gb3JtLmRlc2NyaXB0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLTAgcHktMS41IHRleHQtZ3JheS05MDAgc2hhZG93LXNtIHJpbmctMSByaW5nLWluc2V0IHJpbmctZ3JheS0zMDAgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTQwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1pbnNldCBmb2N1czpyaW5nLWluZGlnby02MDAgc206dGV4dC1zbSBzbTpsZWFkaW5nLTYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSI0IgogICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0RXJyb3IgOm1lc3NhZ2U9ImVkaXRDb2xsZWN0aW9uRm9ybS5lcnJvcnMuZGVzY3JpcHRpb24iIGNsYXNzPSJtdC0yIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktZW5kIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWNvbmRhcnlCdXR0b24gQGNsaWNrPSJjbG9zZUVkaXRDb2xsZWN0aW9uTW9kYWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQW51bGVhesSDCiAgICAgICAgICAgICAgICAgICAgICAgIDwvU2Vjb25kYXJ5QnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8UHJpbWFyeUJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic3VibWl0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPSJlZGl0Q29sbGVjdGlvbkZvcm0ucHJvY2Vzc2luZyIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2FsdmVhesSDIE1vZGlmaWPEg3JpbGUKICAgICAgICAgICAgICAgICAgICAgICAgPC9QcmltYXJ5QnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L01vZGFsPgogICAgPC9NZW1iZXJMYXlvdXQ+CjwvdGVtcGxhdGU+IAAAAAAAAAAAGhcBAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAASQsAAAAAAABJCwAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "app/Console/Commands/ImportDocumentsToCollection.php",
			"settings":
			{
				"buffer_size": 5336,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"insert",
					{
						"characters": "1"
					},
					"AQAAAKEEAAAAAAAAogQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAChBAAAAAAAAKEEAAAAAAAAAAAAAAAA8L8"
				],
				[
					4,
					2,
					"left_delete",
					null,
					"AgAAAKEEAAAAAAAAoQQAAAAAAAABAAAAMaAEAAAAAAAAoAQAAAAAAAABAAAAMw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiBAAAAAAAAKIEAAAAAAAAAAAAAAAA8L8"
				],
				[
					5,
					1,
					"insert",
					{
						"characters": "1"
					},
					"AQAAAKAEAAAAAAAAoQQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACgBAAAAAAAAKAEAAAAAAAAAAAAAAAA8L8"
				],
				[
					8,
					1,
					"left_delete",
					null,
					"AQAAAJgFAAAAAAAAmAUAAAAAAAABAAAAOA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACZBQAAAAAAAJkFAAAAAAAAAAAAAAAA8L8"
				],
				[
					9,
					1,
					"insert",
					{
						"characters": "5"
					},
					"AQAAAJgFAAAAAAAAmQUAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACYBQAAAAAAAJgFAAAAAAAAAAAAAAAA8L8"
				],
				[
					12,
					1,
					"left_delete",
					null,
					"AQAAAAcNAAAAAAAABw0AAAAAAAABAAAAMw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAIDQAAAAAAAAgNAAAAAAAAAAAAAAAA8L8"
				],
				[
					13,
					1,
					"insert",
					{
						"characters": "1"
					},
					"AQAAAAcNAAAAAAAACA0AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAHDQAAAAAAAAcNAAAAAAAAAAAAAAAA8L8"
				],
				[
					16,
					1,
					"left_delete",
					null,
					"AQAAAJkOAAAAAAAAmQ4AAAAAAAABAAAAMw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACaDgAAAAAAAJoOAAAAAAAAAAAAAAAA8L8"
				],
				[
					17,
					1,
					"insert",
					{
						"characters": "1"
					},
					"AQAAAJkOAAAAAAAAmg4AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACZDgAAAAAAAJkOAAAAAAAAAAAAAAAA8L8"
				],
				[
					20,
					1,
					"left_delete",
					null,
					"AQAAAAUSAAAAAAAABRIAAAAAAAABAAAAMw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAGEgAAAAAAAAYSAAAAAAAAAAAAAAAA8L8"
				],
				[
					21,
					1,
					"insert",
					{
						"characters": "1"
					},
					"AQAAAAUSAAAAAAAABhIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAFEgAAAAAAAAUSAAAAAAAAAAAAAAAA8L8"
				],
				[
					24,
					1,
					"left_delete",
					null,
					"AQAAAJYSAAAAAAAAlhIAAAAAAAABAAAAOA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACXEgAAAAAAAJcSAAAAAAAAAAAAAAAA8L8"
				],
				[
					25,
					1,
					"insert",
					{
						"characters": "5"
					},
					"AQAAAJYSAAAAAAAAlxIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWEgAAAAAAAJYSAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Pages/Member/Proiecte.vue",
			"settings":
			{
				"buffer_size": 68315,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					103,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAAARCQEAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2sgfSBmcm9tICd2dWUnOwppbXBvcnQgeyBIZWFkLCBMaW5rIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1lbWJlckxheW91dCBmcm9tICdAL0xheW91dHMvTWVtYmVyTGF5b3V0LnZ1ZSc7CmltcG9ydCBMZWZ0U2lkZWJhciBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL0xlZnRTaWRlYmFyLnZ1ZSc7CmltcG9ydCBSaWdodFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9SaWdodFNpZGViYXIudnVlJzsKaW1wb3J0IHsgdXNlUGFnZSB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IHJvdXRlciB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7CmltcG9ydCBCb3R0b21NZW51IGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvQm90dG9tTWVudS52dWUnOwppbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICd2dWUtdG9hc3RpZmljYXRpb24nOwoKY29uc3QgcGFnZSA9IHVzZVBhZ2UoKTsKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBsb2RnZTogT2JqZWN0LAogICAgcHJvamVjdHM6IEFycmF5LAogICAgbWVtYmVyczogQXJyYXksCiAgICBldmVudHM6IEFycmF5LAp9KTsKCmNvbnN0IHVzZXIgPSBjb21wdXRlZCgoKSA9PiBwYWdlLnByb3BzLmF1dGgudXNlcik7Cgpjb25zdCBnZXREaWduaXR5TmFtZSA9IChkaWduaXR5SWQpID0+IHsKICAgIHN3aXRjaChkaWduaXR5SWQpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSBWZW5lcmFiaWwnOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgcmV0dXJuICdQcmltIFN1cHJhdmVnaGV0b3InOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgcmV0dXJuICdBbCBkb2lsZWEgc3VwcmF2ZWdoZXRvcic7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgICByZXR1cm4gJ09yYXRvcic7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgICByZXR1cm4gJ1RyZXpvcmllcic7CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgICByZXR1cm4gJ1NlY3JldGFyJzsKICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgIHJldHVybiAnRXhwZXJ0JzsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSBkZSBjZXJlbW9uaWknOwogICAgICAgIGNhc2UgOToKICAgICAgICAgICAgcmV0dXJuICdBY29wZXJpdG9yJzsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfTsKCmNvbnN0IGlzRGlnbml0YXJ5ID0gY29tcHV0ZWQoKCkgPT4gewogICAgY29uc3QgdXNlck9iaiA9IHVzZXIudmFsdWU7CiAgICBjb25zdCBkaWduaXR5SWQgPSB1c2VyT2JqPy5sb2RnZV9tZW1iZXI/LmxvZGdlX2RpZ25pdHlfaWQ7CiAgICBjb25zdCBkaWduaXR5TmFtZSA9IGdldERpZ25pdHlOYW1lKGRpZ25pdHlJZCk7CiAgICAvLyBPbmx5IE1hZXN0cnUgVmVuZXJhYmlsICgxKSBhbmQgU2VjcmVhdGFyICg2KSBoYXZlIGZ1bGwgcGVybWlzc2lvbnMKICAgIHJldHVybiBkaWduaXR5SWQgPT09IDEgfHwgZGlnbml0eUlkID09PSA2Owp9KTsKCmNvbnN0IGNhbkVkaXRQcm9qZWN0ID0gKHByb2plY3QpID0+IHsKICAgIGNvbnN0IHVzZXJPYmogPSB1c2VyLnZhbHVlOwogICAgY29uc3QgaXNSZXNwb25zaWJsZSA9IHByb2plY3QucmVzcG9uc2libGVfcGVyc29uPy5pZCA9PT0gdXNlck9iaj8uaWQ7CiAgICBjb25zdCBjYW5FZGl0ID0gaXNEaWduaXRhcnkudmFsdWUgfHwgaXNSZXNwb25zaWJsZTsKICAgIHJldHVybiBjYW5FZGl0Owp9OwoKY29uc3QgY2FuRWRpdFN1YnRhc2sgPSAoc3VidGFzaykgPT4gewogICAgY29uc3QgdXNlck9iaiA9IHVzZXIudmFsdWU7CiAgICBjb25zdCBpc0Fzc2lnbmVkID0gc3VidGFzay5hc3NpZ25lZF90byA9PT0gdXNlck9iaj8uaWQ7CiAgICBjb25zdCBpc1Jlc3BvbnNpYmxlTWVtYmVyID0gc3VidGFzay5yZXNwb25zaWJsZV9tZW1iZXJzPy5zb21lKG1lbWJlciA9PiBtZW1iZXIuaWQgPT09IHVzZXJPYmo/LmlkKTsKICAgIGNvbnN0IGlzQ3JlYXRvciA9IHN1YnRhc2sucHJvamVjdD8uY3JlYXRlZF9ieSA9PT0gdXNlck9iaj8uaWQ7CiAgICBjb25zdCBoYXNEaWduaXR5ID0gaXNEaWduaXRhcnkudmFsdWU7CgogICAgcmV0dXJuIGlzQXNzaWduZWQgfHwgaXNSZXNwb25zaWJsZU1lbWJlciB8fCBpc0NyZWF0b3IgfHwgaGFzRGlnbml0eTsKfTsKCmNvbnN0IHNob3dOZXdQcm9qZWN0TW9kYWwgPSByZWYoZmFsc2UpOwpjb25zdCBzaG93RWRpdFByb2plY3RNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IHNob3dFZGl0U3VidGFza01vZGFsID0gcmVmKGZhbHNlKTsKY29uc3Qgc2hvd05ld1N1YnRhc2tNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IG5ld1Byb2plY3RUaXRsZSA9IHJlZignJyk7CmNvbnN0IG5ld1Byb2plY3REZXNjcmlwdGlvbiA9IHJlZignJyk7CmNvbnN0IG5ld1N1YnRhc2tUaXRsZSA9IHJlZignJyk7CmNvbnN0IG5ld1N1YnRhc2tEZXNjcmlwdGlvbiA9IHJlZignJyk7CmNvbnN0IHNlbGVjdGVkQXNzaWduZWUgPSByZWYoJycpOwpjb25zdCBzZWxlY3RlZFByb2plY3QgPSByZWYobnVsbCk7CmNvbnN0IGVkaXRpbmdTdWJ0YXNrID0gcmVmKG51bGwpOwpjb25zdCBlZGl0aW5nUHJvamVjdCA9IHJlZihudWxsKTsKY29uc3Qgc2VsZWN0ZWRSZXNwb25zaWJsZU1lbWJlcnMgPSByZWYoW10pOwpjb25zdCBuZXdSZXNwb25zaWJsZU1lbWJlciA9IHJlZignJyk7CmNvbnN0IHNlbGVjdGVkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVycyA9IHJlZihbXSk7CmNvbnN0IG5ld1N1YnRhc2tSZXNwb25zaWJsZU1lbWJlciA9IHJlZignJyk7Cgpjb25zdCBzb3J0ZWRTdWJ0YXNrcyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghc2VsZWN0ZWRQcm9qZWN0LnZhbHVlKSByZXR1cm4gW107CiAgICByZXR1cm4gWy4uLnNlbGVjdGVkUHJvamVjdC52YWx1ZS5zdWJ0YXNrc10uc29ydCgoYSwgYikgPT4gewogICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgJiYgYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKSByZXR1cm4gMTsKICAgICAgICBpZiAoYS5zdGF0dXMgIT09ICdjb21wbGV0ZWQnICYmIGIuc3RhdHVzID09PSAnY29tcGxldGVkJykgcmV0dXJuIC0xOwogICAgICAgIHJldHVybiAwOwogICAgfSk7Cn0pOwoKY29uc3QgaW5Qcm9ncmVzc1Byb2plY3RzID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIHByb3BzLnByb2plY3RzLmZpbHRlcihwID0+IHAuc3RhdHVzID09PSAnaW5fcHJvZ3Jlc3MnKTsKfSk7Cgpjb25zdCBjb21wbGV0ZWRQcm9qZWN0cyA9IGNvbXB1dGVkKCgpID0+IHsKICAgIHJldHVybiBwcm9wcy5wcm9qZWN0cy5maWx0ZXIocCA9PiBwLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpOwp9KTsKCmNvbnN0IGdldFVuZmluaXNoZWRTdWJ0YXNrc0NvdW50ID0gKHByb2plY3QpID0+IHsKICAgIHJldHVybiBwcm9qZWN0LnN1YnRhc2tzLmZpbHRlcihzdWJ0YXNrID0+IHN1YnRhc2suc3RhdHVzICE9PSAnY29tcGxldGVkJykubGVuZ3RoOwp9OwoKY29uc3QgY3JlYXRlUHJvamVjdCA9ICgpID0+IHsKICAgIHJvdXRlci5wb3N0KHJvdXRlKCdtZW1iZXIucHJvamVjdHMuc3RvcmUnKSwgewogICAgICAgIHRpdGxlOiBuZXdQcm9qZWN0VGl0bGUudmFsdWUsCiAgICAgICAgZGVzY3JpcHRpb246IG5ld1Byb2plY3REZXNjcmlwdGlvbi52YWx1ZSwKICAgICAgICBsb2RnZV9pZDogcHJvcHMubG9kZ2UuaWQsCiAgICAgICAgcmVzcG9uc2libGVfbWVtYmVyczogc2VsZWN0ZWRSZXNwb25zaWJsZU1lbWJlcnMudmFsdWUubWFwKG1lbWJlciA9PiBtZW1iZXIuaWQpLAogICAgfSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIG9uU3VjY2VzczogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBuZXdQcm9qZWN0VGl0bGUudmFsdWUgPSAnJzsKICAgICAgICAgICAgbmV3UHJvamVjdERlc2NyaXB0aW9uLnZhbHVlID0gJyc7CiAgICAgICAgICAgIHNlbGVjdGVkUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlID0gW107CiAgICAgICAgICAgIG5ld1Jlc3BvbnNpYmxlTWVtYmVyLnZhbHVlID0gJyc7CiAgICAgICAgICAgIHNob3dOZXdQcm9qZWN0TW9kYWwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZldGNoIGFuZCB1cGRhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGRpcmVjdGx5CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVuc2Vlbi1jb3VudCcpKTsKICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy51bnNlZW5fcG9zdHNfY291bnQpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gcGFnZS5wcm9wcy5hdXRoLnVzZXIuaWQ7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlc3BvbnNlIGlzIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybWF0IChub3QgbmVzdGVkIGJ5IHVzZXIgSUQpCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEudW5zZWVuX3Bvc3RzX2NvdW50LmNvbXVuaWNhcmkgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBwYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCA9IHsgLi4ucmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnQgfTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbmVzdGVkIGJ5IHVzZXIgSUQKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlclVuc2VlbkNvdW50ID0gcmVzcG9uc2UuZGF0YS51bnNlZW5fcG9zdHNfY291bnRbY3VycmVudFVzZXJJZF0gfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIGNvdW50cyBmb3Igb3RoZXIgY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NvdW50cyA9IHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50IHx8IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgbmV3IGNvdW50cyB3aXRoIGV4aXN0aW5nIG9uZXMKICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5wcm9wcy51bnNlZW5fcG9zdHNfY291bnQgPSB7IC4uLmV4aXN0aW5nQ291bnRzLCAuLi51c2VyVW5zZWVuQ291bnQgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UucHJvcHMudW5zZWVuX3Bvc3RzX2NvdW50ID0geyAuLi5wYWdlLnByb3BzLnVuc2Vlbl9wb3N0c19jb3VudCB9OwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgdW5zZWVuIHBvc3RzIGNvdW50OicsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwp9OwoKY29uc3QgY3JlYXRlU3VidGFzayA9ICgpID0+IHsKICAgIHJvdXRlci5wb3N0KHJvdXRlKCdtZW1iZXIuc3VidGFza3Muc3RvcmUnKSwgewogICAgICAgIHRpdGxlOiBuZXdTdWJ0YXNrVGl0bGUudmFsdWUsCiAgICAgICAgZGVzY3JpcHRpb246IG5ld1N1YnRhc2tEZXNjcmlwdGlvbi52YWx1ZSwKICAgICAgICBwcm9qZWN0X2lkOiBzZWxlY3RlZFByb2plY3QudmFsdWUuaWQsCiAgICAgICAgcmVzcG9uc2libGVfbWVtYmVyczogc2VsZWN0ZWRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlLm1hcChtZW1iZXIgPT4gbWVtYmVyLmlkKSwKICAgIH0sIHsKICAgICAgICBwcmVzZXJ2ZVNjcm9sbDogdHJ1ZSwKICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHsKICAgICAgICAgICAgbmV3U3VidGFza1RpdGxlLnZhbHVlID0gJyc7CiAgICAgICAgICAgIG5ld1N1YnRhc2tEZXNjcmlwdGlvbi52YWx1ZSA9ICcnOwogICAgICAgICAgICBzZWxlY3RlZFN1YnRhc2tSZXNwb25zaWJsZU1lbWJlcnMudmFsdWUgPSBbXTsKICAgICAgICAgICAgbmV3U3VidGFza1Jlc3BvbnNpYmxlTWVtYmVyLnZhbHVlID0gJyc7CiAgICAgICAgICAgIHNob3dOZXdTdWJ0YXNrTW9kYWwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgcm91dGVyLnJlbG9hZCh7IAogICAgICAgICAgICAgICAgb25seTogWydwcm9qZWN0cyddLAogICAgICAgICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRQcm9qZWN0LnZhbHVlID0gcHJvcHMucHJvamVjdHMuZmluZChwID0+IHAuaWQgPT09IHNlbGVjdGVkUHJvamVjdC52YWx1ZS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pOwp9OwoKY29uc3QgdG9nZ2xlUHJvamVjdFN0YXR1cyA9IChwcm9qZWN0KSA9PiB7ICAgIAogICAgaWYgKCFjYW5FZGl0UHJvamVjdChwcm9qZWN0KSkgewogICAgICAgIGFsZXJ0KCdOdSBhdmXIm2kgcGVybWlzaXVuZWEgZGUgYSBtb2RpZmljYSBhY2VzdCBwcm9pZWN0LicpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICByb3V0ZXIucHV0KHJvdXRlKCdtZW1iZXIucHJvamVjdHMudXBkYXRlJywgcHJvamVjdC5pZCksIHsKICAgICAgICB0aXRsZTogcHJvamVjdC50aXRsZSwKICAgICAgICBkZXNjcmlwdGlvbjogcHJvamVjdC5kZXNjcmlwdGlvbiwKICAgICAgICBzdGF0dXM6IHByb2plY3Quc3RhdHVzID09PSAnaW5fcHJvZ3Jlc3MnID8gJ2NvbXBsZXRlZCcgOiAnaW5fcHJvZ3Jlc3MnLAogICAgICAgIHJlc3BvbnNpYmxlX21lbWJlcnM6IHByb2plY3QucmVzcG9uc2libGVfbWVtYmVycz8ubWFwKG1lbWJlciA9PiBtZW1iZXIuaWQpIHx8IFtdLAogICAgfSwgewogICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgfSk7Cn07Cgpjb25zdCB0b2dnbGVTdWJ0YXNrU3RhdHVzID0gKHN1YnRhc2spID0+IHsKICAgIHJvdXRlci5wdXQocm91dGUoJ21lbWJlci5zdWJ0YXNrcy51cGRhdGUnLCBzdWJ0YXNrLmlkKSwgewogICAgICAgIHN0YXR1czogc3VidGFzay5zdGF0dXMgPT09ICdpbl9wcm9ncmVzcycgPyAnY29tcGxldGVkJyA6ICdpbl9wcm9ncmVzcycsCiAgICB9LCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIHJvdXRlci5yZWxvYWQoeyAKICAgICAgICAgICAgICAgIG9ubHk6IFsncHJvamVjdHMnXSwKICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvamVjdC52YWx1ZSA9IHByb3BzLnByb2plY3RzLmZpbmQocCA9PiBwLmlkID09PSBzZWxlY3RlZFByb2plY3QudmFsdWUuaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKfTsKCmNvbnN0IGRlbGV0ZVByb2plY3QgPSAocHJvamVjdCkgPT4gewogICAgaWYgKGNvbmZpcm0oJ1NpZ3VyIGRvcmnIm2kgc8SDIMiZdGVyZ2XIm2kgYWNlc3QgcHJvaWVjdD8nKSkgewogICAgICAgIHJvdXRlci5kZWxldGUocm91dGUoJ21lbWJlci5wcm9qZWN0cy5kZXN0cm95JywgcHJvamVjdC5pZCksIHsKICAgICAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgfSk7CiAgICB9Cn07Cgpjb25zdCBkZWxldGVTdWJ0YXNrID0gKHN1YnRhc2spID0+IHsKICAgIGlmIChjb25maXJtKCdTaWd1ciBkb3JpyJtpIHPEgyDImXRlcmdlyJtpIGFjZWFzdMSDIHN1YnRhc2s/JykpIHsKICAgICAgICByb3V0ZXIuZGVsZXRlKHJvdXRlKCdtZW1iZXIuc3VidGFza3MuZGVzdHJveScsIHN1YnRhc2suaWQpLCB7CiAgICAgICAgICAgIHByZXNlcnZlU2Nyb2xsOiB0cnVlLAogICAgICAgIH0pOwogICAgfQp9OwoKY29uc3Qgc2VsZWN0UHJvamVjdCA9IChwcm9qZWN0KSA9PiB7CiAgICBzZWxlY3RlZFByb2plY3QudmFsdWUgPSBwcm9qZWN0Owp9OwoKY29uc3QgZ29CYWNrVG9MaXN0ID0gKCkgPT4gewogICAgc2VsZWN0ZWRQcm9qZWN0LnZhbHVlID0gbnVsbDsKfTsKCmNvbnN0IGVkaXRTdWJ0YXNrID0gKHN1YnRhc2spID0+IHsKICAgIGVkaXRpbmdTdWJ0YXNrLnZhbHVlID0gc3VidGFzazsKICAgIG5ld1N1YnRhc2tUaXRsZS52YWx1ZSA9IHN1YnRhc2sudGl0bGU7CiAgICBuZXdTdWJ0YXNrRGVzY3JpcHRpb24udmFsdWUgPSBzdWJ0YXNrLmRlc2NyaXB0aW9uOwogICAgc2VsZWN0ZWRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlID0gc3VidGFzay5yZXNwb25zaWJsZV9tZW1iZXJzID8gWy4uLnN1YnRhc2sucmVzcG9uc2libGVfbWVtYmVyc10gOiBbXTsKICAgIHNob3dFZGl0U3VidGFza01vZGFsLnZhbHVlID0gdHJ1ZTsKfTsKCmNvbnN0IHVwZGF0ZVN1YnRhc2sgPSAoKSA9PiB7CiAgICByb3V0ZXIucHV0KHJvdXRlKCdtZW1iZXIuc3VidGFza3MudXBkYXRlJywgZWRpdGluZ1N1YnRhc2sudmFsdWUuaWQpLCB7CiAgICAgICAgdGl0bGU6IG5ld1N1YnRhc2tUaXRsZS52YWx1ZSwKICAgICAgICBkZXNjcmlwdGlvbjogbmV3U3VidGFza0Rlc2NyaXB0aW9uLnZhbHVlLAogICAgICAgIHJlc3BvbnNpYmxlX21lbWJlcnM6IHNlbGVjdGVkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVycy52YWx1ZS5tYXAobWVtYmVyID0+IG1lbWJlci5pZCksCiAgICB9LCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIG5ld1N1YnRhc2tUaXRsZS52YWx1ZSA9ICcnOwogICAgICAgICAgICBuZXdTdWJ0YXNrRGVzY3JpcHRpb24udmFsdWUgPSAnJzsKICAgICAgICAgICAgc2VsZWN0ZWRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlID0gW107CiAgICAgICAgICAgIG5ld1N1YnRhc2tSZXNwb25zaWJsZU1lbWJlci52YWx1ZSA9ICcnOwogICAgICAgICAgICBzaG93RWRpdFN1YnRhc2tNb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICBlZGl0aW5nU3VidGFzay52YWx1ZSA9IG51bGw7CiAgICAgICAgICAgIHJvdXRlci5yZWxvYWQoeyAKICAgICAgICAgICAgICAgIG9ubHk6IFsncHJvamVjdHMnXSwKICAgICAgICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gewogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJvamVjdC52YWx1ZSA9IHByb3BzLnByb2plY3RzLmZpbmQocCA9PiBwLmlkID09PSBzZWxlY3RlZFByb2plY3QudmFsdWUuaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKfTsKCmNvbnN0IGVkaXRQcm9qZWN0ID0gKHByb2plY3QpID0+IHsKICAgIGVkaXRpbmdQcm9qZWN0LnZhbHVlID0gcHJvamVjdDsKICAgIG5ld1Byb2plY3RUaXRsZS52YWx1ZSA9IHByb2plY3QudGl0bGU7CiAgICBuZXdQcm9qZWN0RGVzY3JpcHRpb24udmFsdWUgPSBwcm9qZWN0LmRlc2NyaXB0aW9uOwogICAgc2VsZWN0ZWRBc3NpZ25lZS52YWx1ZSA9IHByb2plY3QucmVzcG9uc2libGVfcGVyc29uOwogICAgc2VsZWN0ZWRSZXNwb25zaWJsZU1lbWJlcnMudmFsdWUgPSBwcm9qZWN0LnJlc3BvbnNpYmxlX21lbWJlcnMgPyBbLi4ucHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzXSA6IFtdOwogICAgc2hvd0VkaXRQcm9qZWN0TW9kYWwudmFsdWUgPSB0cnVlOwp9OwoKY29uc3QgYWRkUmVzcG9uc2libGVNZW1iZXIgPSAoKSA9PiB7CiAgICBpZiAobmV3UmVzcG9uc2libGVNZW1iZXIudmFsdWUgJiYgIXNlbGVjdGVkUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlLnNvbWUobWVtYmVyID0+IG1lbWJlci5pZCA9PT0gbmV3UmVzcG9uc2libGVNZW1iZXIudmFsdWUpKSB7CiAgICAgICAgY29uc3QgbWVtYmVyVG9BZGQgPSBwcm9wcy5tZW1iZXJzLmZpbmQobSA9PiBtLmlkID09PSBuZXdSZXNwb25zaWJsZU1lbWJlci52YWx1ZSk7CiAgICAgICAgaWYgKG1lbWJlclRvQWRkKSB7CiAgICAgICAgICAgIHNlbGVjdGVkUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlLnB1c2gobWVtYmVyVG9BZGQpOwogICAgICAgICAgICBuZXdSZXNwb25zaWJsZU1lbWJlci52YWx1ZSA9ICcnOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IHJlbW92ZVJlc3BvbnNpYmxlTWVtYmVyID0gKG1lbWJlcklkKSA9PiB7CiAgICBzZWxlY3RlZFJlc3BvbnNpYmxlTWVtYmVycy52YWx1ZSA9IHNlbGVjdGVkUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlLmZpbHRlcihtZW1iZXIgPT4gbWVtYmVyLmlkICE9PSBtZW1iZXJJZCk7Cn07Cgpjb25zdCB1cGRhdGVQcm9qZWN0ID0gKCkgPT4gewogICAgcm91dGVyLnB1dChyb3V0ZSgnbWVtYmVyLnByb2plY3RzLnVwZGF0ZScsIGVkaXRpbmdQcm9qZWN0LnZhbHVlLmlkKSwgewogICAgICAgIHRpdGxlOiBuZXdQcm9qZWN0VGl0bGUudmFsdWUsCiAgICAgICAgZGVzY3JpcHRpb246IG5ld1Byb2plY3REZXNjcmlwdGlvbi52YWx1ZSwKICAgICAgICBzdGF0dXM6IGVkaXRpbmdQcm9qZWN0LnZhbHVlLnN0YXR1cywKICAgICAgICByZXNwb25zaWJsZV9tZW1iZXJzOiBzZWxlY3RlZFJlc3BvbnNpYmxlTWVtYmVycy52YWx1ZS5tYXAobWVtYmVyID0+IG1lbWJlci5pZCksCiAgICB9LCB7CiAgICAgICAgcHJlc2VydmVTY3JvbGw6IHRydWUsCiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7CiAgICAgICAgICAgIGVkaXRpbmdQcm9qZWN0LnZhbHVlID0gbnVsbDsKICAgICAgICAgICAgbmV3UHJvamVjdFRpdGxlLnZhbHVlID0gJyc7CiAgICAgICAgICAgIG5ld1Byb2plY3REZXNjcmlwdGlvbi52YWx1ZSA9ICcnOwogICAgICAgICAgICBzZWxlY3RlZFJlc3BvbnNpYmxlTWVtYmVycy52YWx1ZSA9IFtdOwogICAgICAgICAgICBuZXdSZXNwb25zaWJsZU1lbWJlci52YWx1ZSA9ICcnOwogICAgICAgICAgICBzaG93RWRpdFByb2plY3RNb2RhbC52YWx1ZSA9IGZhbHNlOwogICAgICAgIH0KICAgIH0pOwp9OwoKY29uc3QgYWRkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVyID0gKCkgPT4gewogICAgaWYgKG5ld1N1YnRhc2tSZXNwb25zaWJsZU1lbWJlci52YWx1ZSAmJiAhc2VsZWN0ZWRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlLnNvbWUobWVtYmVyID0+IG1lbWJlci5pZCA9PT0gbmV3U3VidGFza1Jlc3BvbnNpYmxlTWVtYmVyLnZhbHVlKSkgewogICAgICAgIGNvbnN0IG1lbWJlclRvQWRkID0gcHJvcHMubWVtYmVycy5maW5kKG0gPT4gbS5pZCA9PT0gbmV3U3VidGFza1Jlc3BvbnNpYmxlTWVtYmVyLnZhbHVlKTsKICAgICAgICBpZiAobWVtYmVyVG9BZGQpIHsKICAgICAgICAgICAgc2VsZWN0ZWRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXJzLnZhbHVlLnB1c2gobWVtYmVyVG9BZGQpOwogICAgICAgICAgICBuZXdTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXIudmFsdWUgPSAnJzsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCByZW1vdmVTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXIgPSAobWVtYmVySWQpID0+IHsKICAgIHNlbGVjdGVkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVycy52YWx1ZSA9IHNlbGVjdGVkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVycy52YWx1ZS5maWx0ZXIobWVtYmVyID0+IG1lbWJlci5pZCAhPT0gbWVtYmVySWQpOwp9OwoKY29uc3QgaXNNb2JpbGUgPSByZWYoZmFsc2UpOwoKY29uc3QgY2hlY2tXaW5kb3dTaXplID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaXNNb2JpbGUudmFsdWUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7CgpvblVubW91bnRlZCgoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPEhlYWQgdGl0bGU9IlByb2llY3RlIiAvPgoKICAgIDxNZW1iZXJMYXlvdXQ+CiAgICAgICAgPGRpdiA6Y2xhc3M9InsnZmxleCBmbGV4LWNvbCc6IGlzTW9iaWxlLCAnZmxleCc6ICFpc01vYmlsZX0iPgogICAgICAgICAgICA8IS0tIExlZnQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyIAogICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgOmxvZGdlPSJsb2RnZSIKICAgICAgICAgICAgICAgIDp1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50PSJsb2RnZT8udW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCB8fCAwIgogICAgICAgICAgICAgICAgOnVwY29taW5nX2V2ZW50c19jb3VudD0ibG9kZ2U/LnVwY29taW5nX2V2ZW50c19jb3VudCB8fCAwIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J2ZsZXgtMSBwLTQgcGItMjAnOiBpc01vYmlsZSwgJ2ZsZXgtMSBtbC1bMzYwcHhdIG1yLVszNjBweF0gcC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiA6Y2xhc3M9InsncC00JzogaXNNb2JpbGUsICdwLTYnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtc3RhcnQgc206aXRlbXMtY2VudGVyIG1iLTYgc3BhY2UteS00IHNtOnNwYWNlLXktMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+UHJvaWVjdGU8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImlzRGlnbml0YXJ5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd05ld1Byb2plY3RNb2RhbCA9IHRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBzbTp3LWF1dG8gcHgtNCBweS0yIGJnLWJsdWUtNjAwIHRleHQtd2hpdGUgcm91bmRlZC1tZCBob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6cmluZy1vZmZzZXQtMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgaW5saW5lLWJsb2NrIG1yLTIiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgM2ExIDEgMCAwMTEgMXY1aDVhMSAxIDAgMTEwIDJoLTV2NWExIDEgMCAxMS0yIDB2LTVINGExIDEgMCAxMTAtMmg1VjRhMSAxIDAgMDExLTF6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvaWVjdCBOb3UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUHJvamVjdHMgTGlzdCBWaWV3IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFzZWxlY3RlZFByb2plY3QiIGNsYXNzPSJzcGFjZS15LTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbiBQcm9ncmVzcyBQcm9qZWN0cyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0iaW5Qcm9ncmVzc1Byb2plY3RzLmxlbmd0aCA+IDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIG1iLTQiPlByb2llY3RlIMOubiBEZXNmxIPImXVyYXJlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9InByb2plY3QgaW4gaW5Qcm9ncmVzc1Byb2plY3RzIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9InByb2plY3QuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJ7J2JnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93IHAtNCc6IGlzTW9iaWxlLCAnYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3cgcC02IGhvdmVyOmJnLWdyYXktNTAgY3Vyc29yLXBvaW50ZXInOiAhaXNNb2JpbGV9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzZWxlY3RQcm9qZWN0KHByb2plY3QpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIj57eyBwcm9qZWN0LnRpdGxlIH19PC9oND4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9ImdldFVuZmluaXNoZWRTdWJ0YXNrc0NvdW50KHByb2plY3QpID4gMCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBzbTptdC0wIHNtOm1sLTIgcHgtNCBweS0xIHRleHQteHMgZm9udC1zZW1pYm9sZCByb3VuZGVkLWZ1bGwgYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0VW5maW5pc2hlZFN1YnRhc2tzQ291bnQocHJvamVjdCkgfX0gc3VidGFzay11cmkgbmV0ZXJtaW5hdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIG10LTEiPnt7IHByb2plY3QuZGVzY3JpcHRpb24gfX08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFzc2lnbmVkIE1lbWJlcnMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0icHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzICYmIHByb2plY3QucmVzcG9uc2libGVfbWVtYmVycy5sZW5ndGggPiAwIiBjbGFzcz0ibXQtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCB0ZXh0LWdyYXktNTAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xNyA2YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpNMTIuOTMgMTdjLjA0Ni0uMzI3LjA3LS42Ni4wNy0xYTYuOTcgNi45NyAwIDAwLTEuNS00LjMzQTUgNSAwIDAxMTkgMTZ2MWgtNi4wN3pNNiAxMWE1IDUgMCAwMTUgNXYxSDF2LTFhNSA1IDAgMDE1LTV6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlJlc3BvbnNhYmlsaTo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LXdyYXAgZ2FwLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWZvcj0ibWVtYmVyIGluIHByb2plY3QucmVzcG9uc2libGVfbWVtYmVycyIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9Im1lbWJlci5pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0yLjUgcHktMC41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJnLWdyYXktMTAwIHRleHQtZ3JheS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVtYmVyLmZpcnN0X25hbWUgfX0ge3sgbWVtYmVyLmxhc3RfbmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJpc0RpZ25pdGFyeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljay5zdG9wPSJlZGl0UHJvamVjdChwcm9qZWN0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iRWRpdGVhesSDIHByb2llY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSBzbTpoLTYgc206dy02IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTExIDVINmEyIDIgMCAwMC0yIDJ2MTFhMiAyIDAgMDAyIDJoMTFhMiAyIDAgMDAyLTJ2LTVtLTEuNDE0LTkuNDE0YTIgMiAwIDExMi44MjggMi44MjhMMTEuODI4IDE1SDl2LTIuODI4bDguNTg2LTguNTg2eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iY2FuRWRpdFByb2plY3QocHJvamVjdCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2suc3RvcD0idG9nZ2xlUHJvamVjdFN0YXR1cyhwcm9qZWN0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LWdyZWVuLTYwMCBob3Zlcjp0ZXh0LWdyZWVuLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJNYXJjaGVhesSDIGNhIGZpbmFsaXphdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHNtOmgtNiBzbTp3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNSAxM2w0IDRMMTkgNyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iaXNEaWduaXRhcnkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2suc3RvcD0iZGVsZXRlUHJvamVjdChwcm9qZWN0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXJlZC02MDAgaG92ZXI6dGV4dC1yZWQtODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IsiYdGVyZ2UgcHJvaWVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHNtOmgtNiBzbTp3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTkgN2wtLjg2NyAxMi4xNDJBMiAyIDAgMDExNi4xMzggMjFINy44NjJhMiAyIDAgMDEtMS45OTUtMS44NThMNSA3bTUgNHY2bTQtNnY2bTEtMTBWNGExIDEgMCAwMC0xLTFoLTRhMSAxIDAgMDAtMSAxdjNNNCA3aDE2IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb21wbGV0ZWQgUHJvamVjdHMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImNvbXBsZXRlZFByb2plY3RzLmxlbmd0aCA+IDAiIGNsYXNzPSJtdC04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCBtYi00Ij5Qcm9pZWN0ZSBGaW5hbGl6YXRlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9InByb2plY3QgaW4gY29tcGxldGVkUHJvamVjdHMiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0icHJvamVjdC5pZCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9InsnYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3cgcC00JzogaXNNb2JpbGUsICdiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyBwLTYgaG92ZXI6YmctZ3JheS01MCBjdXJzb3ItcG9pbnRlcic6ICFpc01vYmlsZX0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNlbGVjdFByb2plY3QocHJvamVjdCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCBsaW5lLXRocm91Z2giPnt7IHByb2plY3QudGl0bGUgfX08L2g0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0iZ2V0VW5maW5pc2hlZFN1YnRhc2tzQ291bnQocHJvamVjdCkgPiAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0yIHNtOm10LTAgc206bWwtMiBweC0yIHB5LTEgdGV4dC14cyBmb250LXNlbWlib2xkIHJvdW5kZWQtZnVsbCBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRVbmZpbmlzaGVkU3VidGFza3NDb3VudChwcm9qZWN0KSB9fSBzdWJ0YXNrLXVyaSBuZXRlcm1pbmF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtZ3JheS00MDAgbXQtMSI+e3sgcHJvamVjdC5kZXNjcmlwdGlvbiB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQXNzaWduZWQgTWVtYmVycyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJwcm9qZWN0LnJlc3BvbnNpYmxlX21lbWJlcnMgJiYgcHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzLmxlbmd0aCA+IDAiIGNsYXNzPSJtdC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IHRleHQtZ3JheS01MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkgNmEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6TTE3IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xMi45MyAxN2MuMDQ2LS4zMjcuMDctLjY2LjA3LTFhNi45NyA2Ljk3IDAgMDAtMS41LTQuMzNBNSA1IDAgMDExOSAxNnYxaC02LjA3ek02IDExYTUgNSAwIDAxNSA1djFIMXYtMWE1IDUgMCAwMTUtNXoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+UmVzcG9uc2FiaWxpOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtd3JhcCBnYXAtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZm9yPSJtZW1iZXIgaW4gcHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0ibWVtYmVyLmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTIuNSBweS0wLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImlzRGlnbml0YXJ5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrLnN0b3A9ImVkaXRQcm9qZWN0KHByb2plY3QpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJFZGl0ZWF6xIMgcHJvaWVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHNtOmgtNiBzbTp3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTEgNUg2YTIgMiAwIDAwLTIgMnYxMWEyIDIgMCAwMDIgMmgxMWEyIDIgMCAwMDItMnYtNW0tMS40MTQtOS40MTRhMiAyIDAgMTEyLjgyOCAyLjgyOEwxMS44MjggMTVIOXYtMi44MjhsOC41ODYtOC41ODZ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJjYW5FZGl0UHJvamVjdChwcm9qZWN0KSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljay5zdG9wPSJ0b2dnbGVQcm9qZWN0U3RhdHVzKHByb2plY3QpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJNYXJjaGVhesSDIGNhIMOubiBkZXNmxIPImXVyYXJlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgc206aC02IHNtOnctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik00IDR2NWguNTgybTE1LjM1NiAyQTguMDAxIDguMDAxIDAgMDA0LjU4MiA5bTAgMEg5bTExIDExdi01aC0uNTgxbTAgMGE4LjAwMyA4LjAwMyAwIDAxLTE1LjM1Ny0ybTE1LjM1NyAySDE1IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJpc0RpZ25pdGFyeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljay5zdG9wPSJkZWxldGVQcm9qZWN0KHByb2plY3QpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iyJh0ZXJnZSBwcm9pZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgc206aC02IHNtOnctNiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xOSA3bC0uODY3IDEyLjE0MkEyIDIgMCAwMTE2LjEzOCAyMUg3Ljg2MmEyIDIgMCAwMS0xLjk5NS0xLjg1OEw1IDdtNSA0djZtNC02djZtMS0xMFY0YTEgMSAwIDAwLTEtMWgtNGExIDEgMCAwMC0xIDF2M000IDdoMTYiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIFByb2plY3RzIE1lc3NhZ2UgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InByb2plY3RzLmxlbmd0aCA9PT0gMCIgY2xhc3M9InRleHQtY2VudGVyIHB5LTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9Im14LWF1dG8gaC0xMiB3LTEyIHRleHQtZ3JheS00MDAiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgNUg3YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMmgxMGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMmgtMk05IDVhMiAyIDAgMDAyIDJoMmEyIDIgMCAwMDItMk05IDVhMiAyIDAgMDEyLTJoMmEyIDIgMCAwMTIgMiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9Im10LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIj5OdSBleGlzdMSDIHByb2llY3RlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMSB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPsOObmNlcGUgcHJpbiBhIGNyZWEgdW4gcHJvaWVjdCBub3UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcm9qZWN0IERldGFpbHMgVmlldyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9InNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBtYi02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZ29CYWNrVG9MaXN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXItNCB0ZXh0LWdyYXktNjAwIGhvdmVyOnRleHQtZ3JheS05MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNiB3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xMCAxOWwtNy03bTAgMGw3LTdtLTcgN2gxOCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAiPnt7IHNlbGVjdGVkUHJvamVjdC50aXRsZSB9fTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyBwLTQgc206cC02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1zdGFydCBzbTppdGVtcy1jZW50ZXIgbWItNiBzcGFjZS15LTQgc206c3BhY2UteS0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBzZWxlY3RlZFByb2plY3QuZGVzY3JpcHRpb24gfX08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQXNzaWduZWQgTWVtYmVycyBpbiBEZXRhaWxzIFZpZXcgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNlbGVjdGVkUHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzICYmIHNlbGVjdGVkUHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzLmxlbmd0aCA+IDAiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTUwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkgNmEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6TTE3IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xMi45MyAxN2MuMDQ2LS4zMjcuMDctLjY2LjA3LTFhNi45NyA2Ljk3IDAgMDAtMS41LTQuMzNBNSA1IDAgMDExOSAxNnYxaC02LjA3ek02IDExYTUgNSAwIDAxNSA1djFIMXYtMWE1IDUgMCAwMTUtNXoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj5SZXNwb25zYWJpbGk6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTIgZmxleCBmbGV4LXdyYXAgZ2FwLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWZvcj0ibWVtYmVyIGluIHNlbGVjdGVkUHJvamVjdC5yZXNwb25zaWJsZV9tZW1iZXJzIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0ibWVtYmVyLmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMSByb3VuZGVkLWZ1bGwgdGV4dC1zbSBmb250LW1lZGl1bSBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJpc0RpZ25pdGFyeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd05ld1N1YnRhc2tNb2RhbCA9IHRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idy1mdWxsIHNtOnctYXV0byBweC00IHB5LTIgYmctYmx1ZS02MDAgdGV4dC13aGl0ZSByb3VuZGVkLW1kIGhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpyaW5nLW9mZnNldC0yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgaW5saW5lLWJsb2NrIG1yLTIiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAzYTEgMSAwIDAxMSAxdjVoNWExIDEgMCAxMTAgMmgtNXY1YTEgMSAwIDExLTIgMHYtNUg0YTEgMSAwIDExMC0yaDVWNGExIDEgMCAwMTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VidGFzayBOb3UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3VidGFza3MgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ic3VidGFzayBpbiBzb3J0ZWRTdWJ0YXNrcyIgOmtleT0ic3VidGFzay5pZCIgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBwLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtc3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjaGVja2VkPSJzdWJ0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0idG9nZ2xlU3VidGFza1N0YXR1cyhzdWJ0YXNrKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9IiFjYW5FZGl0U3VidGFzayhzdWJ0YXNrKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9IlsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gtNCB3LTQgdGV4dC1ibHVlLTYwMCBmb2N1czpyaW5nLWJsdWUtNTAwIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNhbkVkaXRTdWJ0YXNrKHN1YnRhc2spID8gJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCA6Y2xhc3M9InsnbWwtMyB0ZXh0LWxnIGZvbnQtbWVkaXVtIGxpbmUtdGhyb3VnaCB0ZXh0LWdyYXktNTAwJzogc3VidGFzay5zdGF0dXMgPT09ICdjb21wbGV0ZWQnLCAnbWwtMyB0ZXh0LWxnIGZvbnQtbWVkaXVtJzogc3VidGFzay5zdGF0dXMgIT09ICdjb21wbGV0ZWQnfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VidGFzay50aXRsZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIDpjbGFzcz0ieydtdC0xIHRleHQtZ3JheS00MDAnOiBzdWJ0YXNrLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcsICdtdC0xIHRleHQtZ3JheS02MDAnOiBzdWJ0YXNrLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCd9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1YnRhc2suZGVzY3JpcHRpb24gfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBc3NpZ25lZCBNZW1iZXJzIGZvciBTdWJ0YXNrIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InN1YnRhc2sucmVzcG9uc2libGVfbWVtYmVycyAmJiBzdWJ0YXNrLnJlc3BvbnNpYmxlX21lbWJlcnMubGVuZ3RoID4gMCIgY2xhc3M9Im10LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNCB3LTQgdGV4dC1ncmF5LTUwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOSA2YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpNMTcgNmEzIDMgMCAxMS02IDAgMyAzIDAgMDE2IDB6TTEyLjkzIDE3Yy4wNDYtLjMyNy4wNy0uNjYuMDctMWE2Ljk3IDYuOTcgMCAwMC0xLjUtNC4zM0E1IDUgMCAwMTE5IDE2djFoLTYuMDd6TTYgMTFhNSA1IDAgMDE1IDV2MUgxdi0xYTUgNSAwIDAxNS01eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5SZXNwb25zYWJpbGk6PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC13cmFwIGdhcC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1mb3I9Im1lbWJlciBpbiBzdWJ0YXNrLnJlc3BvbnNpYmxlX21lbWJlcnMiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PSJtZW1iZXIuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0iY2FuRWRpdFN1YnRhc2soc3VidGFzaykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImVkaXRTdWJ0YXNrKHN1YnRhc2spIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJFZGl0ZWF6xIMgc3VidGFzayIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHNtOmgtNiBzbTp3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTEgNUg2YTIgMiAwIDAwLTIgMnYxMWEyIDIgMCAwMDIgMmgxMWEyIDIgMCAwMDItMnYtNW0tMS40MTQtOS40MTRhMiAyIDAgMTEyLjgyOCAyLjgyOEwxMS44MjggMTVIOXYtMi44MjhsOC41ODYtOC41ODZ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWlmPSJpc0RpZ25pdGFyeSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZGVsZXRlU3VidGFzayhzdWJ0YXNrKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXJlZC02MDAgaG92ZXI6dGV4dC1yZWQtODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IsiYdGVyZ2Ugc3VidGFzayIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHNtOmgtNiBzbTp3LTYiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTkgN2wtLjg2NyAxMi4xNDJBMiAyIDAgMDExNi4xMzggMjFINy44NjJhMiAyIDAgMDEtMS45OTUtMS44NThMNSA3bTUgNHY2bTQtNnY2bTEtMTBWNGExIDEgMCAwMC0xLTFoLTRhMSAxIDAgMDAtMSAxdjNNNCA3aDE2IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBSaWdodCBTaWRlYmFyIC0tPgogICAgICAgICAgICA8UmlnaHRTaWRlYmFyIAogICAgICAgICAgICAgICAgdi1pZj0iIWlzTW9iaWxlIgogICAgICAgICAgICAgICAgOmV2ZW50cz0icHJvcHMuZXZlbnRzLm1hcChldmVudCA9PiAoewogICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5pZCwKICAgICAgICAgICAgICAgICAgICB0aXRsZTogZXZlbnQudGl0bGUsCiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RhdGU6IGV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGU6IGV2ZW50LmVuZF9kYXRlLAogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBldmVudC5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBldmVudC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2V2ZW50LmF1dGhvci5maXJzdF9uYW1lfSAke2V2ZW50LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aDogZXZlbnQuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZXZlbnQuZmlsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZTogZXZlbnQuZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IGV2ZW50LmV2ZW50Py5wb2xsID8gewogICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IGV2ZW50LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2ZW50LmV2ZW50LnBvbGwub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBldmVudC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBldmVudC5ldmVudC5wb2xsLnZvdGVfY291bnRzCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgIH0pKSIKICAgICAgICAgICAgICAgIEBwb2xsLXVwZGF0ZWQ9ImhhbmRsZVBvbGxVcGRhdGUiCiAgICAgICAgICAgICAgICBAcmVmcmVzaC1ldmVudHM9IigpID0+IHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ2V2ZW50cyddIH0pIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBCb3R0b20gTWVudSAtLT4KICAgICAgICAgICAgPEJvdHRvbU1lbnUgdi1pZj0iaXNNb2JpbGUiIDpsb2RnZT0ibG9kZ2UiIC8+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gTmV3IFByb2plY3QgTW9kYWwgLS0+CiAgICAgICAgPGRpdiB2LWlmPSJzaG93TmV3UHJvamVjdE1vZGFsIiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBvdmVyZmxvdy15LWF1dG8iIGFyaWEtbGFiZWxsZWRieT0ibW9kYWwtdGl0bGUiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtZW5kIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBwdC00IHB4LTQgcGItMjAgdGV4dC1jZW50ZXIgc206YmxvY2sgc206cC0wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkIGluc2V0LTAgYmctZ3JheS01MDAgYmctb3BhY2l0eS03NSB0cmFuc2l0aW9uLW9wYWNpdHkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gc206aW5saW5lLWJsb2NrIHNtOmFsaWduLW1pZGRsZSBzbTpoLXNjcmVlbiIgYXJpYS1oaWRkZW49InRydWUiPiYjODIwMzs8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtYmxvY2sgYWxpZ24tYm90dG9tIGJnLXdoaXRlIHJvdW5kZWQtbGcgdGV4dC1sZWZ0IG92ZXJmbG93LWhpZGRlbiBzaGFkb3cteGwgdHJhbnNmb3JtIHRyYW5zaXRpb24tYWxsIHNtOm15LTggc206YWxpZ24tbWlkZGxlIHNtOm1heC13LWxnIHNtOnctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcHgtNCBwdC01IHBiLTQgc206cC02IHNtOnBiLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbTpmbGV4IHNtOml0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgdGV4dC1jZW50ZXIgc206bXQtMCBzbTp0ZXh0LWxlZnQgdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgbGVhZGluZy02IGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiIGlkPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2llY3QgTm91CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+VGl0bHU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3UHJvamVjdFRpdGxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+RGVzY3JpZXJlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9Im5ld1Byb2plY3REZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSIzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+TWVtYnJpIFJlc3BvbnNhYmlsaTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIHNlbGVjdGVkUmVzcG9uc2libGVNZW1iZXJzIiA6a2V5PSJtZW1iZXIuaWQiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYmctZ3JheS01MCBwLTIgcm91bmRlZC1tZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0icmVtb3ZlUmVzcG9uc2libGVNZW1iZXIobWVtYmVyLmlkKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXJlZC02MDAgaG92ZXI6dGV4dC1yZWQtODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjI5MyA0LjI5M2ExIDEgMCAwMTEuNDE0IDBMMTAgOC41ODZsNC4yOTMtNC4yOTNhMSAxIDAgMTExLjQxNCAxLjQxNEwxMS40MTQgMTBsNC4yOTMgNC4yOTNhMSAxIDAgMDEtMS40MTQgMS40MTRMMTAgMTEuNDE0bC00LjI5MyA0LjI5M2ExIDEgMCAwMS0xLjQxNC0xLjQxNEw4LjU4NiAxMCA0LjI5MyA1LjcwN2ExIDEgMCAwMTAtMS40MTR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBzcGFjZS15LTIgc206c3BhY2UteS0wIHNtOnNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9Im5ld1Jlc3BvbnNpYmxlTWVtYmVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCByb3VuZGVkLW1kIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+QWRhdWfEgyByZXNwb25zYWJpbCBub3U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+ICFzZWxlY3RlZFJlc3BvbnNpYmxlTWVtYmVycy5zb21lKHNlbGVjdGVkID0+IHNlbGVjdGVkLmlkID09PSBtLmlkKSkiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9Im1lbWJlci5pZCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnZhbHVlPSJtZW1iZXIuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVtYmVyLmZpcnN0X25hbWUgfX0ge3sgbWVtYmVyLmxhc3RfbmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImFkZFJlc3BvbnNpYmxlTWVtYmVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBzbTp3LWF1dG8gcHgtMyBweS0yIGJnLWJsdWUtNjAwIHRleHQtd2hpdGUgcm91bmRlZC1tZCBob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6cmluZy1vZmZzZXQtMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy1ncmF5LTUwIHB4LTQgcHktMyBzbTpweC02IHNtOmZsZXggc206ZmxleC1yb3ctcmV2ZXJzZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iY3JlYXRlUHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3LWZ1bGwgaW5saW5lLWZsZXgganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHNoYWRvdy1zbSBweC00IHB5LTIgYmctYmx1ZS02MDAgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6YmctYmx1ZS03MDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctYmx1ZS01MDAgc206bWwtMyBzbTp3LWF1dG8gc206dGV4dC1zbSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgyBQcm9pZWN0CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dOZXdQcm9qZWN0TW9kYWwgPSBmYWxzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0zIHctZnVsbCBpbmxpbmUtZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS0zMDAgc2hhZG93LXNtIHB4LTQgcHktMiBiZy13aGl0ZSB0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBob3ZlcjpiZy1ncmF5LTUwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpyaW5nLWJsdWUtNTAwIHNtOm10LTAgc206bWwtMyBzbTp3LWF1dG8gc206dGV4dC1zbSIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQW51bGVhesSDCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEVkaXQgU3VidGFzayBNb2RhbCAtLT4KICAgICAgICA8ZGl2IHYtaWY9InNob3dFZGl0U3VidGFza01vZGFsIiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBvdmVyZmxvdy15LWF1dG8iIGFyaWEtbGFiZWxsZWRieT0ibW9kYWwtdGl0bGUiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtZW5kIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBwdC00IHB4LTQgcGItMjAgdGV4dC1jZW50ZXIgc206YmxvY2sgc206cC0wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkIGluc2V0LTAgYmctZ3JheS01MDAgYmctb3BhY2l0eS03NSB0cmFuc2l0aW9uLW9wYWNpdHkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gc206aW5saW5lLWJsb2NrIHNtOmFsaWduLW1pZGRsZSBzbTpoLXNjcmVlbiIgYXJpYS1oaWRkZW49InRydWUiPiYjODIwMzs8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtYmxvY2sgYWxpZ24tYm90dG9tIGJnLXdoaXRlIHJvdW5kZWQtbGcgdGV4dC1sZWZ0IG92ZXJmbG93LWhpZGRlbiBzaGFkb3cteGwgdHJhbnNmb3JtIHRyYW5zaXRpb24tYWxsIHNtOm15LTggc206YWxpZ24tbWlkZGxlIHNtOm1heC13LWxnIHNtOnctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcHgtNCBwdC01IHBiLTQgc206cC02IHNtOnBiLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbTpmbGV4IHNtOml0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgdGV4dC1jZW50ZXIgc206bXQtMCBzbTp0ZXh0LWxlZnQgdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgbGVhZGluZy02IGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiIGlkPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRlYXrEgyBTdWJ0YXNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+VGl0bHU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3U3VidGFza1RpdGxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+RGVzY3JpZXJlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9Im5ld1N1YnRhc2tEZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSIzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+TWVtYnJpIFJlc3BvbnNhYmlsaTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIHNlbGVjdGVkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVycyIgOmtleT0ibWVtYmVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJnLWdyYXktNTAgcC0yIHJvdW5kZWQtbWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InJlbW92ZVN1YnRhc2tSZXNwb25zaWJsZU1lbWJlcihtZW1iZXIuaWQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQuMjkzIDQuMjkzYTEgMSAwIDAxMS40MTQgMEwxMCA4LjU4Nmw0LjI5My00LjI5M2ExIDEgMCAxMTEuNDE0IDEuNDE0TDExLjQxNCAxMGw0LjI5MyA0LjI5M2ExIDEgMCAwMS0xLjQxNCAxLjQxNEwxMCAxMS40MTRsLTQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0LTEuNDE0TDguNTg2IDEwIDQuMjkzIDUuNzA3YTEgMSAwIDAxMC0xLjQxNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IHNwYWNlLXktMiBzbTpzcGFjZS15LTAgc206c3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3U3VidGFza1Jlc3BvbnNpYmxlTWVtYmVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCByb3VuZGVkLW1kIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+QWRhdWfEgyByZXNwb25zYWJpbCBub3U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+ICFzZWxlY3RlZFN1YnRhc2tSZXNwb25zaWJsZU1lbWJlcnMuc29tZShzZWxlY3RlZCA9PiBzZWxlY3RlZC5pZCA9PT0gbS5pZCkpIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT0ibWVtYmVyLmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJhZGRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idy1mdWxsIHNtOnctYXV0byBweC0zIHB5LTIgYmctYmx1ZS02MDAgdGV4dC13aGl0ZSByb3VuZGVkLW1kIGhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpyaW5nLW9mZnNldC0yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGF1Z8SDCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWdyYXktNTAgcHgtNCBweS0zIHNtOnB4LTYgc206ZmxleCBzbTpmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJ1cGRhdGVTdWJ0YXNrIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBpbmxpbmUtZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgc2hhZG93LXNtIHB4LTQgcHktMiBiZy1ibHVlLTYwMCB0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1ibHVlLTUwMCBzbTptbC0zIHNtOnctYXV0byBzbTp0ZXh0LXNtIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWx2ZWF6xIMgTW9kaWZpY8SDcmlsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93RWRpdFN1YnRhc2tNb2RhbCA9IGZhbHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTMgdy1mdWxsIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gcHgtNCBweS0yIGJnLXdoaXRlIHRleHQtYmFzZSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGhvdmVyOmJnLWdyYXktNTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctYmx1ZS01MDAgc206bXQtMCBzbTptbC0zIHNtOnctYXV0byBzbTp0ZXh0LXNtIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnVsZWF6xIMKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gRWRpdCBQcm9qZWN0IE1vZGFsIC0tPgogICAgICAgIDxkaXYgdi1pZj0ic2hvd0VkaXRQcm9qZWN0TW9kYWwiIGNsYXNzPSJmaXhlZCBpbnNldC0wIG92ZXJmbG93LXktYXV0byIgYXJpYS1sYWJlbGxlZGJ5PSJtb2RhbC10aXRsZSIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1lbmQganVzdGlmeS1jZW50ZXIgbWluLWgtc2NyZWVuIHB0LTQgcHgtNCBwYi0yMCB0ZXh0LWNlbnRlciBzbTpibG9jayBzbTpwLTAiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBiZy1ncmF5LTUwMCBiZy1vcGFjaXR5LTc1IHRyYW5zaXRpb24tb3BhY2l0eSIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImhpZGRlbiBzbTppbmxpbmUtYmxvY2sgc206YWxpZ24tbWlkZGxlIHNtOmgtc2NyZWVuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+JiM4MjAzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1ibG9jayBhbGlnbi1ib3R0b20gYmctd2hpdGUgcm91bmRlZC1sZyB0ZXh0LWxlZnQgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy14bCB0cmFuc2Zvcm0gdHJhbnNpdGlvbi1hbGwgc206bXktOCBzbTphbGlnbi1taWRkbGUgc206bWF4LXctbGcgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBweC00IHB0LTUgcGItNCBzbTpwLTYgc206cGItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNtOmZsZXggc206aXRlbXMtc3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyB0ZXh0LWNlbnRlciBzbTptdC0wIHNtOnRleHQtbGVmdCB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBsZWFkaW5nLTYgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCIgaWQ9Im1vZGFsLXRpdGxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdGVhesSDIFByb2llY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgc3BhY2UteS00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj5UaXRsdTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJuZXdQcm9qZWN0VGl0bGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXItZ3JheS0zMDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBmb2N1czpyaW5nLWJsdWUtNTAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj5EZXNjcmllcmU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3UHJvamVjdERlc2NyaXB0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9IjMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj5NZW1icmkgUmVzcG9uc2FiaWxpPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTIgc3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJtZW1iZXIgaW4gc2VsZWN0ZWRSZXNwb25zaWJsZU1lbWJlcnMiIDprZXk9Im1lbWJlci5pZCIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ncmF5LTUwIHAtMiByb3VuZGVkLW1kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbWVtYmVyLmZpcnN0X25hbWUgfX0ge3sgbWVtYmVyLmxhc3RfbmFtZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJyZW1vdmVSZXNwb25zaWJsZU1lbWJlcihtZW1iZXIuaWQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQuMjkzIDQuMjkzYTEgMSAwIDAxMS40MTQgMEwxMCA4LjU4Nmw0LjI5My00LjI5M2ExIDEgMCAxMTEuNDE0IDEuNDE0TDExLjQxNCAxMGw0LjI5MyA0LjI5M2ExIDEgMCAwMS0xLjQxNCAxLjQxNEwxMCAxMS40MTRsLTQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0LTEuNDE0TDguNTg2IDEwIDQuMjkzIDUuNzA3YTEgMSAwIDAxMC0xLjQxNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IHNwYWNlLXktMiBzbTpzcGFjZS15LTAgc206c3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3UmVzcG9uc2libGVNZW1iZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5BZGF1Z8SDIHJlc3BvbnNhYmlsIG5vdTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj0ibWVtYmVyIGluIG1lbWJlcnMuZmlsdGVyKG0gPT4gIXNlbGVjdGVkUmVzcG9uc2libGVNZW1iZXJzLnNvbWUoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQuaWQgPT09IG0uaWQpKSIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0ibWVtYmVyLmlkIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dmFsdWU9Im1lbWJlci5pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iYWRkUmVzcG9uc2libGVNZW1iZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idy1mdWxsIHNtOnctYXV0byBweC0zIHB5LTIgYmctYmx1ZS02MDAgdGV4dC13aGl0ZSByb3VuZGVkLW1kIGhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpyaW5nLW9mZnNldC0yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGF1Z8SDCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWdyYXktNTAgcHgtNCBweS0zIHNtOnB4LTYgc206ZmxleCBzbTpmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJ1cGRhdGVQcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBpbmxpbmUtZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgc2hhZG93LXNtIHB4LTQgcHktMiBiZy1ibHVlLTYwMCB0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1ibHVlLTUwMCBzbTptbC0zIHNtOnctYXV0byBzbTp0ZXh0LXNtIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWx2ZWF6xIMgTW9kaWZpY8SDcmlsZQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93RWRpdFByb2plY3RNb2RhbCA9IGZhbHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTMgdy1mdWxsIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gcHgtNCBweS0yIGJnLXdoaXRlIHRleHQtYmFzZSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGhvdmVyOmJnLWdyYXktNTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctYmx1ZS01MDAgc206bXQtMCBzbTptbC0zIHNtOnctYXV0byBzbTp0ZXh0LXNtIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnVsZWF6xIMKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gTmV3IFN1YnRhc2sgTW9kYWwgLS0+CiAgICAgICAgPGRpdiB2LWlmPSJzaG93TmV3U3VidGFza01vZGFsIiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBvdmVyZmxvdy15LWF1dG8iIGFyaWEtbGFiZWxsZWRieT0ibW9kYWwtdGl0bGUiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtZW5kIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBwdC00IHB4LTQgcGItMjAgdGV4dC1jZW50ZXIgc206YmxvY2sgc206cC0wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkIGluc2V0LTAgYmctZ3JheS01MDAgYmctb3BhY2l0eS03NSB0cmFuc2l0aW9uLW9wYWNpdHkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gc206aW5saW5lLWJsb2NrIHNtOmFsaWduLW1pZGRsZSBzbTpoLXNjcmVlbiIgYXJpYS1oaWRkZW49InRydWUiPiYjODIwMzs8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtYmxvY2sgYWxpZ24tYm90dG9tIGJnLXdoaXRlIHJvdW5kZWQtbGcgdGV4dC1sZWZ0IG92ZXJmbG93LWhpZGRlbiBzaGFkb3cteGwgdHJhbnNmb3JtIHRyYW5zaXRpb24tYWxsIHNtOm15LTggc206YWxpZ24tbWlkZGxlIHNtOm1heC13LWxnIHNtOnctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcHgtNCBwdC01IHBiLTQgc206cC02IHNtOnBiLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbTpmbGV4IHNtOml0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgdGV4dC1jZW50ZXIgc206bXQtMCBzbTp0ZXh0LWxlZnQgdy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgbGVhZGluZy02IGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiIGlkPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnRhc2sgTm91CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+VGl0bHU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3U3VidGFza1RpdGxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItYmx1ZS01MDAgZm9jdXM6cmluZy1ibHVlLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+RGVzY3JpZXJlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9Im5ld1N1YnRhc2tEZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSIzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+TWVtYnJpIFJlc3BvbnNhYmlsaTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0ibWVtYmVyIGluIHNlbGVjdGVkU3VidGFza1Jlc3BvbnNpYmxlTWVtYmVycyIgOmtleT0ibWVtYmVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJnLWdyYXktNTAgcC0yIHJvdW5kZWQtbWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBtZW1iZXIuZmlyc3RfbmFtZSB9fSB7eyBtZW1iZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InJlbW92ZVN1YnRhc2tSZXNwb25zaWJsZU1lbWJlcihtZW1iZXIuaWQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQuMjkzIDQuMjkzYTEgMSAwIDAxMS40MTQgMEwxMCA4LjU4Nmw0LjI5My00LjI5M2ExIDEgMCAxMTEuNDE0IDEuNDE0TDExLjQxNCAxMGw0LjI5MyA0LjI5M2ExIDEgMCAwMS0xLjQxNCAxLjQxNEwxMCAxMS40MTRsLTQuMjkzIDQuMjkzYTEgMSAwIDAxLTEuNDE0LTEuNDE0TDguNTg2IDEwIDQuMjkzIDUuNzA3YTEgMSAwIDAxMC0xLjQxNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIHNtOmZsZXgtcm93IHNwYWNlLXktMiBzbTpzcGFjZS15LTAgc206c3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibmV3U3VidGFza1Jlc3BvbnNpYmxlTWVtYmVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCByb3VuZGVkLW1kIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIGZvY3VzOnJpbmctYmx1ZS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+QWRhdWfEgyByZXNwb25zYWJpbCBub3U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9Im1lbWJlciBpbiBtZW1iZXJzLmZpbHRlcihtID0+ICFzZWxlY3RlZFN1YnRhc2tSZXNwb25zaWJsZU1lbWJlcnMuc29tZShzZWxlY3RlZCA9PiBzZWxlY3RlZC5pZCA9PT0gbS5pZCkpIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PSJtZW1iZXIuaWQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT0ibWVtYmVyLmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lbWJlci5maXJzdF9uYW1lIH19IHt7IG1lbWJlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJhZGRTdWJ0YXNrUmVzcG9uc2libGVNZW1iZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idy1mdWxsIHNtOnctYXV0byBweC0zIHB5LTIgYmctYmx1ZS02MDAgdGV4dC13aGl0ZSByb3VuZGVkLW1kIGhvdmVyOmJnLWJsdWUtNzAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpyaW5nLW9mZnNldC0yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGF1Z8SDCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWdyYXktNTAgcHgtNCBweS0zIHNtOnB4LTYgc206ZmxleCBzbTpmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJjcmVhdGVTdWJ0YXNrIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InctZnVsbCBpbmxpbmUtZmxleCBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgc2hhZG93LXNtIHB4LTQgcHktMiBiZy1ibHVlLTYwMCB0ZXh0LWJhc2UgZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBob3ZlcjpiZy1ibHVlLTcwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1ibHVlLTUwMCBzbTptbC0zIHNtOnctYXV0byBzbTp0ZXh0LXNtIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGF1Z8SDIFN1YnRhc2sKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd05ld1N1YnRhc2tNb2RhbCA9IGZhbHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTMgdy1mdWxsIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gcHgtNCBweS0yIGJnLXdoaXRlIHRleHQtYmFzZSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGhvdmVyOmJnLWdyYXktNTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctYmx1ZS01MDAgc206bXQtMCBzbTptbC0zIHNtOnctYXV0byBzbTp0ZXh0LXNtIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnVsZWF6xIMKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L01lbWJlckxheW91dD4KPC90ZW1wbGF0ZT4gAAAAAAAAAADbCgEAAAAAAAAAAAAAAAAAAAAAANsKAQAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABupAAAAAAAAHWkAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Pages/Member/Profile.vue",
			"settings":
			{
				"buffer_size": 19897,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAURQAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7CmltcG9ydCB7IExpbmsgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQC9VdGlscy9kYXRlJzsKaW1wb3J0IHsgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7CmNvbnN0IHVzZXIgPSBwYWdlLnByb3BzLnVzZXI7CmNvbnN0IGxvZGdlID0gcGFnZS5wcm9wcy5sb2RnZTsKY29uc3QgZXZlbnRzID0gcGFnZS5wcm9wcy5ldmVudHM7CmNvbnN0IHBvc2l0aW9ucyA9IHBhZ2UucHJvcHMucG9zaXRpb25zOwoKY29uc3QgZ2V0Um9sZUNvbG9yID0gKHJvbGUpID0+IHsKICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgIGNhc2UgJ21hZXN0cnUnOgogICAgICAgICAgICByZXR1cm4gJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJzsKICAgICAgICBjYXNlICdjYWxmYSc6CiAgICAgICAgICAgIHJldHVybiAnYmctb3JhbmdlLTEwMCB0ZXh0LW9yYW5nZS04MDAnOwogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJzsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnOwogICAgfQp9OwoKY29uc3QgZ2V0Um9sZUxhYmVsID0gKHJvbGUpID0+IHsKICAgIHN3aXRjaCAocm9sZSkgewogICAgICAgIGNhc2UgJ21hZXN0cnUnOgogICAgICAgICAgICByZXR1cm4gJ01hZXN0cnUnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdDYWxmxIMnOwogICAgICAgIGNhc2UgJ3VjZW5pYyc6CiAgICAgICAgICAgIHJldHVybiAnVWNlbmljJzsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcm9sZTsKICAgIH0KfTsKCmNvbnN0IGNhbGN1bGF0ZUFnZSA9IChiaXJ0aERhdGUpID0+IHsKICAgIGlmICghYmlydGhEYXRlKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTsKICAgIGNvbnN0IGJpcnRoID0gbmV3IERhdGUoYmlydGhEYXRlKTsKICAgIGxldCBhZ2UgPSB0b2RheS5nZXRGdWxsWWVhcigpIC0gYmlydGguZ2V0RnVsbFllYXIoKTsKICAgIGNvbnN0IG1vbnRoRGlmZiA9IHRvZGF5LmdldE1vbnRoKCkgLSBiaXJ0aC5nZXRNb250aCgpOwogICAgaWYgKG1vbnRoRGlmZiA8IDAgfHwgKG1vbnRoRGlmZiA9PT0gMCAmJiB0b2RheS5nZXREYXRlKCkgPCBiaXJ0aC5nZXREYXRlKCkpKSB7CiAgICAgICAgYWdlLS07CiAgICB9CiAgICByZXR1cm4gYWdlOwp9OwoKY29uc3QgcHJvZmlsZVBob3RvVXJsID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIHVzZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuZmlyc3RfbmFtZSArICcgJyArIHVzZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYDsKfSk7Cgpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKCkgPT4gewogICAgLy8gSW1wbGVtZW50YXRpb24gb2YgaGFuZGxlUG9sbFVwZGF0ZSBmdW5jdGlvbgp9Owo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxIZWFkIDp0aXRsZT0idXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUiIC8+CgogICAgPE1lbWJlckxheW91dD4KICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4Ij4KICAgICAgICAgICAgPCEtLSBMZWZ0IFNpZGViYXIgLSBGaXhlZCAtLT4KICAgICAgICAgICAgPExlZnRTaWRlYmFyIAogICAgICAgICAgICAgICAgOmxvZGdlPSJsb2RnZSIKICAgICAgICAgICAgICAgIDp1bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50PSJsb2RnZS51bmZpbmlzaGVkX3Byb2plY3RzX2NvdW50IgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLSBDZW50ZXIgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSBtbC1bMzYwcHhdIG1yLVszNjBweF0gcC02Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9InByb2ZpbGVQaG90b1VybCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJ1c2VyLmZpcnN0X25hbWUgKyAnICcgKyB1c2VyLmxhc3RfbmFtZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idy0zMiBoLTMyIHJvdW5kZWQtZnVsbCBtYi00IG9iamVjdC1jb3ZlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtMnhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlci5maXJzdF9uYW1lIH19IHt7IHVzZXIubGFzdF9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgcHgtMyBweS0xIHJvdW5kZWQtZnVsbCB0ZXh0LXNtIGZvbnQtbWVkaXVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0iZ2V0Um9sZUNvbG9yKHVzZXIucm9sZSkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0Um9sZUxhYmVsKHVzZXIucm9sZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0idXNlci5sb2RnZV9kaWduaXR5IHx8IHVzZXIubWxucl9kaWduaXR5IiBjbGFzcz0ibXQtNCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkRlbW5pdGF0ZSBMb2rEgzo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IHVzZXIubG9kZ2VfZGlnbml0eT8ubmFtZSB8fCAnTnUgYXJlJyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5EZW1uaXRhdGUgTUxOUjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IHVzZXIubWxucl9kaWduaXR5Py5uYW1lIHx8ICdOdSBhcmUnIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtOCBzcGFjZS15LTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTQiPkluZm9ybWHIm2lpIHBlcnNvbmFsZTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDlhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6bS03IDlhNyA3IDAgMTExNCAwSDN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlByZW51bWU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgOWEzIDMgMCAxMDAtNiAzIDMgMCAwMDAgNnptLTcgOWE3IDcgMCAxMTE0IDBIM3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+TnVtZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5sYXN0X25hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDNhMSAxIDAgMDExLTFoMi4xNTNhMSAxIDAgMDEuOTg2LjgzNmwuNzQgNC40MzVhMSAxIDAgMDEtLjU0IDEuMDZsLTEuNTQ4Ljc3M2ExMS4wMzcgMTEuMDM3IDAgMDA2LjEwNSA2LjEwNWwuNzc0LTEuNTQ4YTEgMSAwIDAxMS4wNTktLjU0bDQuNDM1Ljc0YTEgMSAwIDAxLjgzNi45ODZWMTdhMSAxIDAgMDEtMSAxaC0yQzcuODIgMTggMiAxMi4xOCAyIDVWM3oiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlRlbGVmb248L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIucGhvbmUgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLjAwMyA1Ljg4NEwxMCA5Ljg4Mmw3Ljk5Ny0zLjk5OEEyIDIgMCAwMDE2IDRINGEyIDIgMCAwMC0xLjk5NyAxLjg4NHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE4IDguMTE4bC04IDQtOC00VjE0YTIgMiAwIDAwMiAyaDEyYTIgMiAwIDAwMi0yVjguMTE4eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+RW1haWw8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuZW1haWwgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlbDonJzdMSDPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBjYWxjdWxhdGVBZ2UodXNlci5iaXJ0aF9kYXRlKSA/IGNhbGN1bGF0ZUFnZSh1c2VyLmJpcnRoX2RhdGUpICsgJyBhbmknIDogJ051IGVzdGUgc3BlY2lmaWNhdMSDJyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkxvY3VsIG5hyJl0ZXJpaTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5iaXJ0aF9wbGFjZSB8fCAnTnUgZXN0ZSBzcGVjaWZpY2F0JyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkFkcmVzYSBkb21pY2lsaXU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuYWRkcmVzcyB8fCAnTnUgZXN0ZSBzcGVjaWZpY2F0xIMnIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHRleHQtZ3JheS00MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDZWNWEzIDMgMCAwMTMtM2gyYTMgMyAwIDAxMyAzdjFoMmEyIDIgMCAwMTIgMnYzLjU3QTIyLjk1MiAyMi45NTIgMCAwMTEwIDEzYTIyLjk1IDIyLjk1IDAgMDEtOC0xLjQzVjhhMiAyIDAgMDEyLTJoMnptMi0xYTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2MUg4VjV6bTEgNWExIDEgMCAwMTEtMWguMDFhMSAxIDAgMTEwIDJIMTBhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDEzLjY5MlYxNmEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMnYtMi4zMDhBMjQuOTc0IDI0Ljk3NCAwIDAxMTAgMTVjLTIuNzk2IDAtNS40ODctLjQ2LTgtMS4zMDh6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5Qcm9mZXNpYTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5vY2N1cGF0aW9uIHx8ICdOdSBlc3RlIHNwZWNpZmljYXTEgycgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQgNGEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjEyYTEgMSAwIDAxLTEuNTgxLjgxNGwtNC40MTktMi45NS00LjQxOSAyLjk1QTEgMSAwIDAxNCAxNlY0em0yIDBoOHYxMGwtNC0yLjY2N0w2IDE0VjR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkxvY3VsIGRlIG11bmPEgzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci53b3JrcGxhY2UgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xNyA2YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpNMTIuOTMgMTdjLjA0Ni0uMzI3LjA3LS42Ni4wNy0xYTYuOTcgNi45NyAwIDAwLTEuNS00LjMzQTUgNSAwIDAxMTkgMTZ2MWgtNi4wN3pNNiAxMWE1IDUgMCAwMTUgNXYxSDF2LTFhNSA1IDAgMDE1LTV6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5HcmFkPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBnZXRSb2xlTGFiZWwodXNlci5yb2xlKSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSGlzdG9yeSBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC04Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIj5Jc3RvcmljPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgYmctd2hpdGUgc2hhZG93IG92ZXJmbG93LWhpZGRlbiBzbTpyb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgcm9sZT0ibGlzdCIgY2xhc3M9ImRpdmlkZS15IGRpdmlkZS1ncmF5LTIwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWZvcj0icG9zaXRpb24gaW4gcG9zaXRpb25zIiA6a2V5PSJwb3NpdGlvbi5pZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InB4LTQgcHktNCBzbTpweC02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LXNocmluay0wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPSJwb3NpdGlvbi5wb3NpdGlvbl90eXBlID09PSAnZGVncmVlJyIgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0yLjUgcHktMC41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZS1pZj0icG9zaXRpb24ucG9zaXRpb25fdHlwZSA9PT0gJ2xvZGdlX2RpZ25pdHknIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTIuNSBweS0wLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9qYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWVsc2UgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0yLjUgcHktMC41IHJvdW5kZWQtZnVsbCB0ZXh0LXhzIGZvbnQtbWVkaXVtIGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxOUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWwtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9InBvc2l0aW9uLnBvc2l0aW9uX3R5cGUgPT09ICdkZWdyZWUnIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZS1pZj0icG9zaXRpb24ucG9zaXRpb25fdHlwZSA9PT0gJ2xvZGdlX2RpZ25pdHknIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fSBhbCBMb2plaSB7eyBwb3NpdGlvbi5sb2RnZT8ubmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fSBhbCBNTE5SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocG9zaXRpb24uc3RhcnRfZGF0ZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0icG9zaXRpb24uZW5kX2RhdGUiPiAtIHt7IGZvcm1hdERhdGUocG9zaXRpb24uZW5kX2RhdGUpIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUmlnaHQgU2lkZWJhciAtIEZpeGVkIC0tPgogICAgICAgICAgICA8UmlnaHRTaWRlYmFyIAogICAgICAgICAgICAgICAgOmV2ZW50cz0iZXZlbnRzIgogICAgICAgICAgICAgICAgOnVzZXI9InVzZXIiCiAgICAgICAgICAgICAgICBAcG9sbC11cGRhdGVkPSJoYW5kbGVQb2xsVXBkYXRlIgogICAgICAgICAgICAgICAgQHJlZnJlc2gtZXZlbnRzPSIoKSA9PiByb3V0ZXIucmVsb2FkKCkiCiAgICAgICAgICAgIC8+CiAgICAgICAgPC9kaXY+CiAgICA8L01lbWJlckxheW91dD4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6ICNCQ0MwQzQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogI0E0QTdBQjsKfQo8L3N0eWxlPiAAAAAAAAAAAGxJAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
				],
				[
					2,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAB2SQAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyBjb21wdXRlZCwgcmVmLCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluayB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAL1V0aWxzL2RhdGUnOwppbXBvcnQgeyByb3V0ZXIgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgQm90dG9tTWVudSBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL0JvdHRvbU1lbnUudnVlJzsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7CmNvbnN0IHVzZXIgPSBwYWdlLnByb3BzLnVzZXI7CmNvbnN0IGxvZGdlID0gcGFnZS5wcm9wcy5sb2RnZTsKY29uc3QgZXZlbnRzID0gcGFnZS5wcm9wcy5ldmVudHM7CmNvbnN0IHBvc2l0aW9ucyA9IHBhZ2UucHJvcHMucG9zaXRpb25zOwoKY29uc3QgaXNNb2JpbGUgPSByZWYoZmFsc2UpOwoKY29uc3QgY2hlY2tXaW5kb3dTaXplID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaXNNb2JpbGUudmFsdWUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7CgpvblVubW91bnRlZCgoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7Cgpjb25zdCBnZXRSb2xlQ29sb3IgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCc7CiAgICB9Cn07Cgpjb25zdCBnZXRSb2xlTGFiZWwgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSc7CiAgICAgICAgY2FzZSAnY2FsZmEnOgogICAgICAgICAgICByZXR1cm4gJ0NhbGbEgyc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdVY2VuaWMnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgfQp9OwoKY29uc3QgY2FsY3VsYXRlQWdlID0gKGJpcnRoRGF0ZSkgPT4gewogICAgaWYgKCFiaXJ0aERhdGUpIHJldHVybiBudWxsOwogICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpOwogICAgY29uc3QgYmlydGggPSBuZXcgRGF0ZShiaXJ0aERhdGUpOwogICAgbGV0IGFnZSA9IHRvZGF5LmdldEZ1bGxZZWFyKCkgLSBiaXJ0aC5nZXRGdWxsWWVhcigpOwogICAgY29uc3QgbW9udGhEaWZmID0gdG9kYXkuZ2V0TW9udGgoKSAtIGJpcnRoLmdldE1vbnRoKCk7CiAgICBpZiAobW9udGhEaWZmIDwgMCB8fCAobW9udGhEaWZmID09PSAwICYmIHRvZGF5LmdldERhdGUoKSA8IGJpcnRoLmdldERhdGUoKSkpIHsKICAgICAgICBhZ2UtLTsKICAgIH0KICAgIHJldHVybiBhZ2U7Cn07Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IGhhbmRsZVBvbGxVcGRhdGUgPSAoKSA9PiB7CiAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBoYW5kbGVQb2xsVXBkYXRlIGZ1bmN0aW9uCn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPEhlYWQgOnRpdGxlPSJ1c2VyLmZpcnN0X25hbWUgKyAnICcgKyB1c2VyLmxhc3RfbmFtZSIgLz4KCiAgICA8TWVtYmVyTGF5b3V0PgogICAgICAgIDxkaXYgOmNsYXNzPSJ7J2ZsZXggZmxleC1jb2wnOiBpc01vYmlsZSwgJ2ZsZXgnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgPCEtLSBMZWZ0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxMZWZ0U2lkZWJhciAKICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgICAgICAgICA6dW5maW5pc2hlZF9wcm9qZWN0c19jb3VudD0ibG9kZ2UudW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCIKICAgICAgICAgICAgLz4KCiAgICAgICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPgogICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydmbGV4LTEgcC00IHBiLTIwJzogaXNNb2JpbGUsICdmbGV4LTEgbWwtWzM2MHB4XSBtci1bMzYwcHhdIHAtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J3AtNCc6IGlzTW9iaWxlLCAncC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0icHJvZmlsZVBob3RvVXJsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9InVzZXIuZmlyc3RfbmFtZSArICcgJyArIHVzZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieyd3LTI0IGgtMjQgcm91bmRlZC1mdWxsIG1iLTMgb2JqZWN0LWNvdmVyJzogaXNNb2JpbGUsICd3LTMyIGgtMzIgcm91bmRlZC1mdWxsIG1iLTQgb2JqZWN0LWNvdmVyJzogIWlzTW9iaWxlfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgOmNsYXNzPSJ7J3RleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwJzogaXNNb2JpbGUsICd0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyLmZpcnN0X25hbWUgfX0ge3sgdXNlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJnZXRSb2xlQ29sb3IodXNlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwodXNlci5yb2xlKSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJ1c2VyLmxvZGdlX2RpZ25pdHkgfHwgdXNlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJtdC00IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+RGVtbml0YXRlIExvasSDOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgdXNlci5sb2RnZV9kaWduaXR5Py5uYW1lIHx8ICdOdSBhcmUnIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkRlbW5pdGF0ZSBNTE5SOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgdXNlci5tbG5yX2RpZ25pdHk/Lm5hbWUgfHwgJ051IGFyZScgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC04IHNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCI+SW5mb3JtYcibaWkgcGVyc29uYWxlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDlhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6bS03IDlhNyA3IDAgMTExNCAwSDN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlByZW51bWU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgOWEzIDMgMCAxMDAtNiAzIDMgMCAwMDAgNnptLTcgOWE3IDcgMCAxMTE0IDBIM3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+TnVtZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5sYXN0X25hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDNhMSAxIDAgMDExLTFoMi4xNTNhMSAxIDAgMDEuOTg2LjgzNmwuNzQgNC40MzVhMSAxIDAgMDEtLjU0IDEuMDZsLTEuNTQ4Ljc3M2ExMS4wMzcgMTEuMDM3IDAgMDA2LjEwNSA2LjEwNWwuNzc0LTEuNTQ4YTEgMSAwIDAxMS4wNTktLjU0bDQuNDM1Ljc0YTEgMSAwIDAxLjgzNi45ODZWMTdhMSAxIDAgMDEtMSAxaC0yQzcuODIgMTggMiAxMi4xOCAyIDVWM3oiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlRlbGVmb248L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIucGhvbmUgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLjAwMyA1Ljg4NEwxMCA5Ljg4Mmw3Ljk5Ny0zLjk5OEEyIDIgMCAwMDE2IDRINGEyIDIgMCAwMC0xLjk5NyAxLjg4NHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE4IDguMTE4bC04IDQtOC00VjE0YTIgMiAwIDAwMiAyaDEyYTIgMiAwIDAwMi0yVjguMTE4eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+RW1haWw8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuZW1haWwgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlbDonJzdMSDPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBjYWxjdWxhdGVBZ2UodXNlci5iaXJ0aF9kYXRlKSA/IGNhbGN1bGF0ZUFnZSh1c2VyLmJpcnRoX2RhdGUpICsgJyBhbmknIDogJ051IGVzdGUgc3BlY2lmaWNhdMSDJyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkxvY3VsIG5hyJl0ZXJpaTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5iaXJ0aF9wbGFjZSB8fCAnTnUgZXN0ZSBzcGVjaWZpY2F0JyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkFkcmVzYSBkb21pY2lsaXU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuYWRkcmVzcyB8fCAnTnUgZXN0ZSBzcGVjaWZpY2F0xIMnIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHRleHQtZ3JheS00MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDZWNWEzIDMgMCAwMTMtM2gyYTMgMyAwIDAxMyAzdjFoMmEyIDIgMCAwMTIgMnYzLjU3QTIyLjk1MiAyMi45NTIgMCAwMTEwIDEzYTIyLjk1IDIyLjk1IDAgMDEtOC0xLjQzVjhhMiAyIDAgMDEyLTJoMnptMi0xYTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2MUg4VjV6bTEgNWExIDEgMCAwMTEtMWguMDFhMSAxIDAgMTEwIDJIMTBhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDEzLjY5MlYxNmEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMnYtMi4zMDhBMjQuOTc0IDI0Ljk3NCAwIDAxMTAgMTVjLTIuNzk2IDAtNS40ODctLjQ2LTgtMS4zMDh6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5Qcm9mZXNpYTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5vY2N1cGF0aW9uIHx8ICdOdSBlc3RlIHNwZWNpZmljYXTEgycgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQgNGEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjEyYTEgMSAwIDAxLTEuNTgxLjgxNGwtNC40MTktMi45NS00LjQxOSAyLjk1QTEgMSAwIDAxNCAxNlY0em0yIDBoOHYxMGwtNC0yLjY2N0w2IDE0VjR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkxvY3VsIGRlIG11bmPEgzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci53b3JrcGxhY2UgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xNyA2YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpNMTIuOTMgMTdjLjA0Ni0uMzI3LjA3LS42Ni4wNy0xYTYuOTcgNi45NyAwIDAwLTEuNS00LjMzQTUgNSAwIDAxMTkgMTZ2MWgtNi4wN3pNNiAxMWE1IDUgMCAwMTUgNXYxSDF2LTFhNSA1IDAgMDE1LTV6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5HcmFkPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBnZXRSb2xlTGFiZWwodXNlci5yb2xlKSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiPklzdG9yaWM8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBiZy13aGl0ZSBzaGFkb3cgb3ZlcmZsb3ctaGlkZGVuIHNtOnJvdW5kZWQtbGciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCByb2xlPSJsaXN0IiBjbGFzcz0iZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPSJwb3NpdGlvbiBpbiBwb3NpdGlvbnMiIDprZXk9InBvc2l0aW9uLmlkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA6Y2xhc3M9InsncHgtMyBweS0zJzogaXNNb2JpbGUsICdweC00IHB5LTQgc206cHgtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtc2hyaW5rLTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9InBvc2l0aW9uLnBvc2l0aW9uX3R5cGUgPT09ICdkZWdyZWUnIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTIuNSBweS0wLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlLWlmPSJwb3NpdGlvbi5wb3NpdGlvbl90eXBlID09PSAnbG9kZ2VfZGlnbml0eSciIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2phCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZSBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTIuNSBweS0wLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTE5SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydtbC0yJzogaXNNb2JpbGUsICdtbC0zJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgOmNsYXNzPSJ7J3RleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCc6IGlzTW9iaWxlLCAndGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9InBvc2l0aW9uLnBvc2l0aW9uX3R5cGUgPT09ICdkZWdyZWUnIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZS1pZj0icG9zaXRpb24ucG9zaXRpb25fdHlwZSA9PT0gJ2xvZGdlX2RpZ25pdHknIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fSBhbCBMb2plaSB7eyBwb3NpdGlvbi5sb2RnZT8ubmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fSBhbCBNTE5SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgOmNsYXNzPSJ7J3RleHQteHMgdGV4dC1ncmF5LTUwMCc6IGlzTW9iaWxlLCAndGV4dC1zbSB0ZXh0LWdyYXktNTAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocG9zaXRpb24uc3RhcnRfZGF0ZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0icG9zaXRpb24uZW5kX2RhdGUiPiAtIHt7IGZvcm1hdERhdGUocG9zaXRpb24uZW5kX2RhdGUpIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUmlnaHQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPFJpZ2h0U2lkZWJhciAKICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgIDpldmVudHM9ImV2ZW50cyIKICAgICAgICAgICAgICAgIDp1c2VyPSJ1c2VyIgogICAgICAgICAgICAgICAgQHBvbGwtdXBkYXRlZD0iaGFuZGxlUG9sbFVwZGF0ZSIKICAgICAgICAgICAgICAgIEByZWZyZXNoLWV2ZW50cz0iKCkgPT4gcm91dGVyLnJlbG9hZCgpIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBCb3R0b20gTWVudSAtLT4KICAgICAgICAgICAgPEJvdHRvbU1lbnUgdi1pZj0iaXNNb2JpbGUiIDpsb2RnZT0ibG9kZ2UiIC8+CiAgICAgICAgPC9kaXY+CiAgICA8L01lbWJlckxheW91dD4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6ICNCQ0MwQzQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogI0E0QTdBQjsKfQo8L3N0eWxlPiAAAAAAAAAAALlNAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
				],
				[
					3,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAADDTQAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgSGVhZCB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCBNZW1iZXJMYXlvdXQgZnJvbSAnQC9MYXlvdXRzL01lbWJlckxheW91dC52dWUnOwppbXBvcnQgTGVmdFNpZGViYXIgZnJvbSAnQC9Db21wb25lbnRzL01lbWJlci9MZWZ0U2lkZWJhci52dWUnOwppbXBvcnQgUmlnaHRTaWRlYmFyIGZyb20gJ0AvQ29tcG9uZW50cy9NZW1iZXIvUmlnaHRTaWRlYmFyLnZ1ZSc7CmltcG9ydCB7IHVzZVBhZ2UgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgeyBjb21wdXRlZCwgcmVmLCBvbk1vdW50ZWQsIG9uVW5tb3VudGVkIH0gZnJvbSAndnVlJzsKaW1wb3J0IHsgTGluayB9IGZyb20gJ0BpbmVydGlhanMvdnVlMyc7CmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAL1V0aWxzL2RhdGUnOwppbXBvcnQgeyByb3V0ZXIgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgQm90dG9tTWVudSBmcm9tICdAL0NvbXBvbmVudHMvTWVtYmVyL0JvdHRvbU1lbnUudnVlJzsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7CmNvbnN0IHVzZXIgPSBwYWdlLnByb3BzLnVzZXI7CmNvbnN0IGxvZGdlID0gcGFnZS5wcm9wcy5sb2RnZTsKY29uc3QgZXZlbnRzID0gcGFnZS5wcm9wcy5ldmVudHM7CmNvbnN0IHBvc2l0aW9ucyA9IHBhZ2UucHJvcHMucG9zaXRpb25zOwoKY29uc3QgaXNNb2JpbGUgPSByZWYoZmFsc2UpOwoKY29uc3QgY2hlY2tXaW5kb3dTaXplID0gKCkgPT4gewogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaXNNb2JpbGUudmFsdWUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQ7CiAgICB9Cn07Cgpvbk1vdW50ZWQoKCkgPT4gewogICAgY2hlY2tXaW5kb3dTaXplKCk7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7CgpvblVubW91bnRlZCgoKSA9PiB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tXaW5kb3dTaXplKTsKICAgIH0KfSk7Cgpjb25zdCBnZXRSb2xlQ29sb3IgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnOwogICAgICAgIGNhc2UgJ2NhbGZhJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCc7CiAgICB9Cn07Cgpjb25zdCBnZXRSb2xlTGFiZWwgPSAocm9sZSkgPT4gewogICAgc3dpdGNoIChyb2xlKSB7CiAgICAgICAgY2FzZSAnbWFlc3RydSc6CiAgICAgICAgICAgIHJldHVybiAnTWFlc3RydSc7CiAgICAgICAgY2FzZSAnY2FsZmEnOgogICAgICAgICAgICByZXR1cm4gJ0NhbGbEgyc7CiAgICAgICAgY2FzZSAndWNlbmljJzoKICAgICAgICAgICAgcmV0dXJuICdVY2VuaWMnOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiByb2xlOwogICAgfQp9OwoKY29uc3QgY2FsY3VsYXRlQWdlID0gKGJpcnRoRGF0ZSkgPT4gewogICAgaWYgKCFiaXJ0aERhdGUpIHJldHVybiBudWxsOwogICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpOwogICAgY29uc3QgYmlydGggPSBuZXcgRGF0ZShiaXJ0aERhdGUpOwogICAgbGV0IGFnZSA9IHRvZGF5LmdldEZ1bGxZZWFyKCkgLSBiaXJ0aC5nZXRGdWxsWWVhcigpOwogICAgY29uc3QgbW9udGhEaWZmID0gdG9kYXkuZ2V0TW9udGgoKSAtIGJpcnRoLmdldE1vbnRoKCk7CiAgICBpZiAobW9udGhEaWZmIDwgMCB8fCAobW9udGhEaWZmID09PSAwICYmIHRvZGF5LmdldERhdGUoKSA8IGJpcnRoLmdldERhdGUoKSkpIHsKICAgICAgICBhZ2UtLTsKICAgIH0KICAgIHJldHVybiBhZ2U7Cn07Cgpjb25zdCBwcm9maWxlUGhvdG9VcmwgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gdXNlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodXNlci5maXJzdF9uYW1lICsgJyAnICsgdXNlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgOwp9KTsKCmNvbnN0IGhhbmRsZVBvbGxVcGRhdGUgPSAoKSA9PiB7CiAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBoYW5kbGVQb2xsVXBkYXRlIGZ1bmN0aW9uCn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPEhlYWQgOnRpdGxlPSJ1c2VyLmZpcnN0X25hbWUgKyAnICcgKyB1c2VyLmxhc3RfbmFtZSIgLz4KCiAgICA8TWVtYmVyTGF5b3V0PgogICAgICAgIDxkaXYgOmNsYXNzPSJ7J2ZsZXggZmxleC1jb2wnOiBpc01vYmlsZSwgJ2ZsZXgnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgPCEtLSBMZWZ0IFNpZGViYXIgLS0+CiAgICAgICAgICAgIDxMZWZ0U2lkZWJhciAKICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgIDpsb2RnZT0ibG9kZ2UiCiAgICAgICAgICAgICAgICA6dW5maW5pc2hlZF9wcm9qZWN0c19jb3VudD0ibG9kZ2UudW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCIKICAgICAgICAgICAgLz4KCiAgICAgICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPgogICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydmbGV4LTEgcC00IHBiLTIwJzogaXNNb2JpbGUsICdmbGV4LTEgbWwtWzM2MHB4XSBtci1bMzYwcHhdIHAtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcm91bmRlZC1sZyBzaGFkb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPSJ7J3AtNCc6IGlzTW9iaWxlLCAncC02JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0icHJvZmlsZVBob3RvVXJsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9InVzZXIuZmlyc3RfbmFtZSArICcgJyArIHVzZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz0ieyd3LTI0IGgtMjQgcm91bmRlZC1mdWxsIG1iLTMgb2JqZWN0LWNvdmVyJzogaXNNb2JpbGUsICd3LTMyIGgtMzIgcm91bmRlZC1mdWxsIG1iLTQgb2JqZWN0LWNvdmVyJzogIWlzTW9iaWxlfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgOmNsYXNzPSJ7J3RleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwJzogaXNNb2JpbGUsICd0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAnOiAhaXNNb2JpbGV9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyLmZpcnN0X25hbWUgfX0ge3sgdXNlci5sYXN0X25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiBweC0zIHB5LTEgcm91bmRlZC1mdWxsIHRleHQtc20gZm9udC1tZWRpdW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPSJnZXRSb2xlQ29sb3IodXNlci5yb2xlKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRSb2xlTGFiZWwodXNlci5yb2xlKSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJ1c2VyLmxvZGdlX2RpZ25pdHkgfHwgdXNlci5tbG5yX2RpZ25pdHkiIGNsYXNzPSJtdC00IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+RGVtbml0YXRlIExvasSDOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgdXNlci5sb2RnZV9kaWduaXR5Py5uYW1lIHx8ICdOdSBhcmUnIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkRlbW5pdGF0ZSBNTE5SOjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgdXNlci5tbG5yX2RpZ25pdHk/Lm5hbWUgfHwgJ051IGFyZScgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC04IHNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItNCI+SW5mb3JtYcibaWkgcGVyc29uYWxlPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydncmlkIGdyaWQtY29scy0xIGdhcC00JzogaXNNb2JpbGUsICdncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00JzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDlhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6bS03IDlhNyA3IDAgMTExNCAwSDN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlByZW51bWU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgOWEzIDMgMCAxMDAtNiAzIDMgMCAwMDAgNnptLTcgOWE3IDcgMCAxMTE0IDBIM3oiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+TnVtZTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5sYXN0X25hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDNhMSAxIDAgMDExLTFoMi4xNTNhMSAxIDAgMDEuOTg2LjgzNmwuNzQgNC40MzVhMSAxIDAgMDEtLjU0IDEuMDZsLTEuNTQ4Ljc3M2ExMS4wMzcgMTEuMDM3IDAgMDA2LjEwNSA2LjEwNWwuNzc0LTEuNTQ4YTEgMSAwIDAxMS4wNTktLjU0bDQuNDM1Ljc0YTEgMSAwIDAxLjgzNi45ODZWMTdhMSAxIDAgMDEtMSAxaC0yQzcuODIgMTggMiAxMi4xOCAyIDVWM3oiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlRlbGVmb248L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIucGhvbmUgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLjAwMyA1Ljg4NEwxMCA5Ljg4Mmw3Ljk5Ny0zLjk5OEEyIDIgMCAwMDE2IDRINGEyIDIgMCAwMC0xLjk5NyAxLjg4NHoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE4IDguMTE4bC04IDQtOC00VjE0YTIgMiAwIDAwMiAyaDEyYTIgMiAwIDAwMi0yVjguMTE4eiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTUwMCI+RW1haWw8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuZW1haWwgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPlbDonJzdMSDPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBjYWxjdWxhdGVBZ2UodXNlci5iaXJ0aF9kYXRlKSA/IGNhbGN1bGF0ZUFnZSh1c2VyLmJpcnRoX2RhdGUpICsgJyBhbmknIDogJ051IGVzdGUgc3BlY2lmaWNhdMSDJyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkxvY3VsIG5hyJl0ZXJpaTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5iaXJ0aF9wbGFjZSB8fCAnTnUgZXN0ZSBzcGVjaWZpY2F0JyB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNDAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkFkcmVzYSBkb21pY2lsaXU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS02MDAiPnt7IHVzZXIuYWRkcmVzcyB8fCAnTnUgZXN0ZSBzcGVjaWZpY2F0xIMnIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IHRleHQtZ3JheS00MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDZWNWEzIDMgMCAwMTMtM2gyYTMgMyAwIDAxMyAzdjFoMmEyIDIgMCAwMTIgMnYzLjU3QTIyLjk1MiAyMi45NTIgMCAwMTEwIDEzYTIyLjk1IDIyLjk1IDAgMDEtOC0xLjQzVjhhMiAyIDAgMDEyLTJoMnptMi0xYTEgMSAwIDAxMS0xaDJhMSAxIDAgMDExIDF2MUg4VjV6bTEgNWExIDEgMCAwMTEtMWguMDFhMSAxIDAgMTEwIDJIMTBhMSAxIDAgMDEtMS0xeiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDEzLjY5MlYxNmEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMnYtMi4zMDhBMjQuOTc0IDI0Ljk3NCAwIDAxMTAgMTVjLTIuNzk2IDAtNS40ODctLjQ2LTgtMS4zMDh6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5Qcm9mZXNpYTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci5vY2N1cGF0aW9uIHx8ICdOdSBlc3RlIHNwZWNpZmljYXTEgycgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQgNGEyIDIgMCAwMTItMmg4YTIgMiAwIDAxMiAydjEyYTEgMSAwIDAxLTEuNTgxLjgxNGwtNC40MTktMi45NS00LjQxOSAyLjk1QTEgMSAwIDAxNCAxNlY0em0yIDBoOHYxMGwtNC0yLjY2N0w2IDE0VjR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC1jb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPkxvY3VsIGRlIG11bmPEgzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1ncmF5LTYwMCI+e3sgdXNlci53b3JrcGxhY2UgfHwgJ051IGVzdGUgc3BlY2lmaWNhdCcgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUgdGV4dC1ncmF5LTQwMCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05IDZhMyAzIDAgMTEtNiAwIDMgMyAwIDAxNiAwek0xNyA2YTMgMyAwIDExLTYgMCAzIDMgMCAwMTYgMHpNMTIuOTMgMTdjLjA0Ni0uMzI3LjA3LS42Ni4wNy0xYTYuOTcgNi45NyAwIDAwLTEuNS00LjMzQTUgNSAwIDAxMTkgMTZ2MWgtNi4wN3pNNiAxMWE1IDUgMCAwMTUgNXYxSDF2LTFhNSA1IDAgMDE1LTV6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGZsZXgtY29sIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj5HcmFkPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNjAwIj57eyBnZXRSb2xlTGFiZWwodXNlci5yb2xlKSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiPklzdG9yaWM8L2gyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBiZy13aGl0ZSBzaGFkb3cgb3ZlcmZsb3ctaGlkZGVuIHNtOnJvdW5kZWQtbGciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCByb2xlPSJsaXN0IiBjbGFzcz0iZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtZm9yPSJwb3NpdGlvbiBpbiBwb3NpdGlvbnMiIDprZXk9InBvc2l0aW9uLmlkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSA6Y2xhc3M9InsncHgtMyBweS0zJzogaXNNb2JpbGUsICdweC00IHB5LTQgc206cHgtNic6ICFpc01vYmlsZX0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtc2hyaW5rLTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9InBvc2l0aW9uLnBvc2l0aW9uX3R5cGUgPT09ICdkZWdyZWUnIiBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTIuNSBweS0wLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1lbHNlLWlmPSJwb3NpdGlvbi5wb3NpdGlvbl90eXBlID09PSAnbG9kZ2VfZGlnbml0eSciIGNsYXNzPSJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgcHgtMi41IHB5LTAuNSByb3VuZGVkLWZ1bGwgdGV4dC14cyBmb250LW1lZGl1bSBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2phCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZSBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTIuNSBweS0wLjUgcm91bmRlZC1mdWxsIHRleHQteHMgZm9udC1tZWRpdW0gYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTE5SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IDpjbGFzcz0ieydtbC0yJzogaXNNb2JpbGUsICdtbC0zJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgOmNsYXNzPSJ7J3RleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCc6IGlzTW9iaWxlLCAndGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9InBvc2l0aW9uLnBvc2l0aW9uX3R5cGUgPT09ICdkZWdyZWUnIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZS1pZj0icG9zaXRpb24ucG9zaXRpb25fdHlwZSA9PT0gJ2xvZGdlX2RpZ25pdHknIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fSBhbCBMb2plaSB7eyBwb3NpdGlvbi5sb2RnZT8ubmFtZSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZGV2ZW5pdCB7eyBwb3NpdGlvbi50aXRsZSB9fSBhbCBNTE5SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgOmNsYXNzPSJ7J3RleHQteHMgdGV4dC1ncmF5LTUwMCc6IGlzTW9iaWxlLCAndGV4dC1zbSB0ZXh0LWdyYXktNTAwJzogIWlzTW9iaWxlfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocG9zaXRpb24uc3RhcnRfZGF0ZSkgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj0icG9zaXRpb24uZW5kX2RhdGUiPiAtIHt7IGZvcm1hdERhdGUocG9zaXRpb24uZW5kX2RhdGUpIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUmlnaHQgU2lkZWJhciAtLT4KICAgICAgICAgICAgPFJpZ2h0U2lkZWJhciAKICAgICAgICAgICAgICAgIHYtaWY9IiFpc01vYmlsZSIKICAgICAgICAgICAgICAgIDpldmVudHM9ImV2ZW50cy5tYXAoZXZlbnQgPT4gKHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICBzdGFydF9kYXRlOiBldmVudC5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBldmVudC5lbmRfZGF0ZSB8fCBldmVudC5ldmVudD8uZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGV2ZW50LmF1dGhvciA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7ZXZlbnQuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZXZlbnQuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBldmVudC5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiBldmVudC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBldmVudC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogZXZlbnQuZXZlbnQ/LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBldmVudC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogZXZlbnQuZXZlbnQucG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBldmVudC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBldmVudC5ldmVudC5wb2xsLnZvdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IGV2ZW50LmV2ZW50LnBvbGwudm90ZV9jb3VudHMKICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgIH0pKSIKICAgICAgICAgICAgICAgIEBwb2xsLXVwZGF0ZWQ9ImhhbmRsZVBvbGxVcGRhdGUiCiAgICAgICAgICAgICAgICBAcmVmcmVzaC1ldmVudHM9IigpID0+IHJvdXRlci5yZWxvYWQoeyBvbmx5OiBbJ2V2ZW50cyddIH0pIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPCEtLSBCb3R0b20gTWVudSAtLT4KICAgICAgICAgICAgPEJvdHRvbU1lbnUgdi1pZj0iaXNNb2JpbGUiIDpsb2RnZT0ibG9kZ2UiIC8+CiAgICAgICAgPC9kaXY+CiAgICA8L01lbWJlckxheW91dD4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6ICNCQ0MwQzQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogI0E0QTdBQjsKfQo8L3N0eWxlPiAAAAAAAAAAALlNAAAAAAAAAAAAAAAAAAAAAAAAuU0AAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "resources/js/Utils/date.js",
			"settings":
			{
				"buffer_size": 2604,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					2,
					"left_delete",
					null,
					"AgAAACkAAAAAAAAAKQAAAAAAAAA8AAAAICAgIGNvbnNvbGUubG9nKCdmb3JtYXREYXRlIGNhbGxlZCB3aXRoOicsIGRhdGVTdHJpbmcpOwogICAgKAAAAAAAAAAoAAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABlAAAAAAAAACkAAAAAAAAAAAAAAAAA8L8"
				],
				[
					6,
					1,
					"left_delete",
					null,
					"AQAAABQEAAAAAAAAFAQAAAAAAAA4AAAACiAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3NmdWxseSBwYXJzZWQgZGF0ZTonLCBkYXRlKTs",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMBAAAAAAAABQEAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					1,
					"left_delete",
					null,
					"AQAAAG4FAAAAAAAAbgUAAAAAAABAAAAAICAgIGNvbnNvbGUubG9nKCdmb3JtYXREYXRlVGltZSBjYWxsZWQgd2l0aDonLCBkYXRlU3RyaW5nKTsKICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACuBQAAAAAAAG4FAAAAAAAAAAAAAAAA8L8"
				],
				[
					14,
					2,
					"left_delete",
					null,
					"AgAAAIgHAAAAAAAAiAcAAAAAAABrAAAAICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBdHRlbXB0aW5nIHRvIHBhcnNlIGRhdGV0aW1lIHdpdGggdGltZSBjb21wb25lbnQ6JywgZGF0ZVN0cmluZyArICdUMDA6MDA6MDAnKTuHBwAAAAAAAIcHAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADzBwAAAAAAAIgHAAAAAAAAAAAAAAAA8L8"
				],
				[
					17,
					2,
					"left_delete",
					null,
					"AgAAAOIHAAAAAAAA4gcAAAAAAABBAAAAICAgICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGRhdGV0aW1lIGZvcm1hdDonLCBkYXRlU3RyaW5nKTvhBwAAAAAAAOEHAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAjCAAAAAAAAOIHAAAAAAAAAAAAAAAA8L8"
				],
				[
					20,
					2,
					"left_delete",
					null,
					"AgAAALwIAAAAAAAAvAgAAAAAAAA8AAAACiAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3NmdWxseSBwYXJzZWQgZGF0ZXRpbWU6JywgZGF0ZSk7uwgAAAAAAAC7CAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD4CAAAAAAAALwIAAAAAAAAAAAAAAAA8L8"
				],
				[
					21,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AgAAALsIAAAAAAAAvAgAAAAAAAAAAAAAvAgAAAAAAADECAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC7CAAAAAAAALsIAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"contents": "Iubiti frati,\n\nAvem un update la aplicatia Ashlar:\n- Notificari prin email catre toti membrii la crearea evenimentelor in functie de tipul de notificare setat de creatorul evenimentului.\n- Un nou buton “Add to calendar” atat in aplicatie la posturile de tip eveniment, dar si in emailurile de notificare, care permite adaugarea evenimentului in calendarul propriu, atat pe google calendar cat si pe Apple calendar.\n- O noua categorie de comunicare numita \"Demnitari\", la care au acces doar cei cu o demnitate in loja.\n- Posibilitatea ca toti membrii sa creeze proiecte si subtask-uri, si sa poata marca proiectele sau subtask-urile din proiect ca si completatea doar daca le-a creat sau ii sunt asignate.\n\n",
			"settings":
			{
				"buffer_size": 706,
				"line_ending": "Unix",
				"name": "Iubiti frati,"
			},
			"undo_stack":
			[
				[
					1,
					1,
					"paste",
					null,
					"AQAAAAAAAAAAAAAAKwEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
				],
				[
					4,
					1,
					"left_delete",
					null,
					"AQAAADMAAAAAAAAAMwAAAAAAAAADAAAA4oGg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA0AAAAAAAAADMAAAAAAAAAAAAAAAAA8L8"
				],
				[
					7,
					1,
					"left_delete",
					null,
					"AQAAACcBAAAAAAAAJwEAAAAAAAAFAAAALSDigaA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAqAQAAAAAAACcBAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					1,
					"insert",
					{
						"characters": "-"
					},
					"AQAAADMAAAAAAAAANAAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAzAAAAAAAAADMAAAAAAAAAAAAAAAAA8L8"
				],
				[
					11,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAADQAAAAAAAAANQAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA0AAAAAAAAADQAAAAAAAAAAAAAAAAA8L8"
				],
				[
					18,
					1,
					"insert",
					{
						"characters": "atat"
					},
					"BQAAAN0AAAAAAAAA3gAAAAAAAAAAAAAA3gAAAAAAAADeAAAAAAAAAA0AAABsYSBldmVuaW1lbnRl3gAAAAAAAADfAAAAAAAAAAAAAADfAAAAAAAAAOAAAAAAAAAAAAAAAOAAAAAAAAAA4QAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqAAAAAAAAAN0AAAAAAAAAAAAAAAAA8L8"
				],
				[
					19,
					1,
					"insert",
					{
						"characters": " in"
					},
					"AwAAAOEAAAAAAAAA4gAAAAAAAAAAAAAA4gAAAAAAAADjAAAAAAAAAAAAAADjAAAAAAAAAOQAAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADhAAAAAAAAAOEAAAAAAAAAAAAAAAAA8L8"
				],
				[
					20,
					1,
					"insert",
					{
						"characters": " aplicatie"
					},
					"CgAAAOQAAAAAAAAA5QAAAAAAAAAAAAAA5QAAAAAAAADmAAAAAAAAAAAAAADmAAAAAAAAAOcAAAAAAAAAAAAAAOcAAAAAAAAA6AAAAAAAAAAAAAAA6AAAAAAAAADpAAAAAAAAAAAAAADpAAAAAAAAAOoAAAAAAAAAAAAAAOoAAAAAAAAA6wAAAAAAAAAAAAAA6wAAAAAAAADsAAAAAAAAAAAAAADsAAAAAAAAAO0AAAAAAAAAAAAAAO0AAAAAAAAA7gAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADkAAAAAAAAAOQAAAAAAAAAAAAAAAAA8L8"
				],
				[
					21,
					1,
					"insert",
					{
						"characters": " la"
					},
					"AwAAAO4AAAAAAAAA7wAAAAAAAAAAAAAA7wAAAAAAAADwAAAAAAAAAAAAAADwAAAAAAAAAPEAAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADuAAAAAAAAAO4AAAAAAAAAAAAAAAAA8L8"
				],
				[
					22,
					1,
					"insert",
					{
						"characters": " pos"
					},
					"BAAAAPEAAAAAAAAA8gAAAAAAAAAAAAAA8gAAAAAAAADzAAAAAAAAAAAAAADzAAAAAAAAAPQAAAAAAAAAAAAAAPQAAAAAAAAA9QAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADxAAAAAAAAAPEAAAAAAAAAAAAAAAAA8L8"
				],
				[
					23,
					1,
					"insert",
					{
						"characters": "turile"
					},
					"BgAAAPUAAAAAAAAA9gAAAAAAAAAAAAAA9gAAAAAAAAD3AAAAAAAAAAAAAAD3AAAAAAAAAPgAAAAAAAAAAAAAAPgAAAAAAAAA+QAAAAAAAAAAAAAA+QAAAAAAAAD6AAAAAAAAAAAAAAD6AAAAAAAAAPsAAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD1AAAAAAAAAPUAAAAAAAAAAAAAAAAA8L8"
				],
				[
					24,
					1,
					"insert",
					{
						"characters": " de"
					},
					"AwAAAPsAAAAAAAAA/AAAAAAAAAAAAAAA/AAAAAAAAAD9AAAAAAAAAAAAAAD9AAAAAAAAAP4AAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD7AAAAAAAAAPsAAAAAAAAAAAAAAAAA8L8"
				],
				[
					25,
					1,
					"insert",
					{
						"characters": " tio"
					},
					"BAAAAP4AAAAAAAAA/wAAAAAAAAAAAAAA/wAAAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAEBAAAAAAAAAAAAAAEBAAAAAAAAAgEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD+AAAAAAAAAP4AAAAAAAAAAAAAAAAA8L8"
				],
				[
					26,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAAIBAAAAAAAAAwEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAACAQAAAAAAAAIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					27,
					2,
					"left_delete",
					null,
					"AgAAAAIBAAAAAAAAAgEAAAAAAAABAAAAIAEBAAAAAAAAAQEAAAAAAAABAAAAbw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAADAQAAAAAAAAMBAAAAAAAAAAAAAAAA8L8"
				],
				[
					28,
					1,
					"insert",
					{
						"characters": "p"
					},
					"AQAAAAEBAAAAAAAAAgEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAABAQAAAAAAAAEBAAAAAAAAAAAAAAAA8L8"
				],
				[
					29,
					1,
					"insert",
					{
						"characters": " eveniment,"
					},
					"CwAAAAIBAAAAAAAAAwEAAAAAAAAAAAAAAwEAAAAAAAAEAQAAAAAAAAAAAAAEAQAAAAAAAAUBAAAAAAAAAAAAAAUBAAAAAAAABgEAAAAAAAAAAAAABgEAAAAAAAAHAQAAAAAAAAAAAAAHAQAAAAAAAAgBAAAAAAAAAAAAAAgBAAAAAAAACQEAAAAAAAAAAAAACQEAAAAAAAAKAQAAAAAAAAAAAAAKAQAAAAAAAAsBAAAAAAAAAAAAAAsBAAAAAAAADAEAAAAAAAAAAAAADAEAAAAAAAANAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAACAQAAAAAAAAIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					30,
					1,
					"insert",
					{
						"characters": " dar"
					},
					"BAAAAA0BAAAAAAAADgEAAAAAAAAAAAAADgEAAAAAAAAPAQAAAAAAAAAAAAAPAQAAAAAAABABAAAAAAAAAAAAABABAAAAAAAAEQEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANAQAAAAAAAA0BAAAAAAAAAAAAAAAA8L8"
				],
				[
					31,
					1,
					"insert",
					{
						"characters": " si"
					},
					"AwAAABEBAAAAAAAAEgEAAAAAAAAAAAAAEgEAAAAAAAATAQAAAAAAAAAAAAATAQAAAAAAABQBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAARAQAAAAAAABEBAAAAAAAAAAAAAAAA8L8"
				],
				[
					32,
					1,
					"insert",
					{
						"characters": " in"
					},
					"AwAAABQBAAAAAAAAFQEAAAAAAAAAAAAAFQEAAAAAAAAWAQAAAAAAAAAAAAAWAQAAAAAAABcBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAUAQAAAAAAABQBAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					1,
					"insert",
					{
						"characters": " emailurile"
					},
					"CwAAABcBAAAAAAAAGAEAAAAAAAAAAAAAGAEAAAAAAAAZAQAAAAAAAAAAAAAZAQAAAAAAABoBAAAAAAAAAAAAABoBAAAAAAAAGwEAAAAAAAAAAAAAGwEAAAAAAAAcAQAAAAAAAAAAAAAcAQAAAAAAAB0BAAAAAAAAAAAAAB0BAAAAAAAAHgEAAAAAAAAAAAAAHgEAAAAAAAAfAQAAAAAAAAAAAAAfAQAAAAAAACABAAAAAAAAAAAAACABAAAAAAAAIQEAAAAAAAAAAAAAIQEAAAAAAAAiAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAXAQAAAAAAABcBAAAAAAAAAAAAAAAA8L8"
				],
				[
					34,
					1,
					"insert",
					{
						"characters": " de"
					},
					"AwAAACIBAAAAAAAAIwEAAAAAAAAAAAAAIwEAAAAAAAAkAQAAAAAAAAAAAAAkAQAAAAAAACUBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAiAQAAAAAAACIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					35,
					1,
					"insert",
					{
						"characters": " notificare"
					},
					"CwAAACUBAAAAAAAAJgEAAAAAAAAAAAAAJgEAAAAAAAAnAQAAAAAAAAAAAAAnAQAAAAAAACgBAAAAAAAAAAAAACgBAAAAAAAAKQEAAAAAAAAAAAAAKQEAAAAAAAAqAQAAAAAAAAAAAAAqAQAAAAAAACsBAAAAAAAAAAAAACsBAAAAAAAALAEAAAAAAAAAAAAALAEAAAAAAAAtAQAAAAAAAAAAAAAtAQAAAAAAAC4BAAAAAAAAAAAAAC4BAAAAAAAALwEAAAAAAAAAAAAALwEAAAAAAAAwAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAlAQAAAAAAACUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					40,
					1,
					"insert",
					{
						"characters": ","
					},
					"AQAAAGwBAAAAAAAAbQEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABsAQAAAAAAAGwBAAAAAAAAAAAAAAAA8L8"
				],
				[
					41,
					1,
					"insert",
					{
						"characters": " atat"
					},
					"BQAAAG0BAAAAAAAAbgEAAAAAAAAAAAAAbgEAAAAAAABvAQAAAAAAAAAAAABvAQAAAAAAAHABAAAAAAAAAAAAAHABAAAAAAAAcQEAAAAAAAAAAAAAcQEAAAAAAAByAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtAQAAAAAAAG0BAAAAAAAAAAAAAAAA8L8"
				],
				[
					42,
					1,
					"insert",
					{
						"characters": " pe"
					},
					"AwAAAHIBAAAAAAAAcwEAAAAAAAAAAAAAcwEAAAAAAAB0AQAAAAAAAAAAAAB0AQAAAAAAAHUBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAByAQAAAAAAAHIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					43,
					1,
					"insert",
					{
						"characters": " google"
					},
					"BwAAAHUBAAAAAAAAdgEAAAAAAAAAAAAAdgEAAAAAAAB3AQAAAAAAAAAAAAB3AQAAAAAAAHgBAAAAAAAAAAAAAHgBAAAAAAAAeQEAAAAAAAAAAAAAeQEAAAAAAAB6AQAAAAAAAAAAAAB6AQAAAAAAAHsBAAAAAAAAAAAAAHsBAAAAAAAAfAEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB1AQAAAAAAAHUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					44,
					1,
					"insert",
					{
						"characters": " calendar"
					},
					"CQAAAHwBAAAAAAAAfQEAAAAAAAAAAAAAfQEAAAAAAAB+AQAAAAAAAAAAAAB+AQAAAAAAAH8BAAAAAAAAAAAAAH8BAAAAAAAAgAEAAAAAAAAAAAAAgAEAAAAAAACBAQAAAAAAAAAAAACBAQAAAAAAAIIBAAAAAAAAAAAAAIIBAAAAAAAAgwEAAAAAAAAAAAAAgwEAAAAAAACEAQAAAAAAAAAAAACEAQAAAAAAAIUBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB8AQAAAAAAAHwBAAAAAAAAAAAAAAAA8L8"
				],
				[
					45,
					1,
					"insert",
					{
						"characters": " cat"
					},
					"BAAAAIUBAAAAAAAAhgEAAAAAAAAAAAAAhgEAAAAAAACHAQAAAAAAAAAAAACHAQAAAAAAAIgBAAAAAAAAAAAAAIgBAAAAAAAAiQEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACFAQAAAAAAAIUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					46,
					1,
					"insert",
					{
						"characters": " si"
					},
					"AwAAAIkBAAAAAAAAigEAAAAAAAAAAAAAigEAAAAAAACLAQAAAAAAAAAAAACLAQAAAAAAAIwBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACJAQAAAAAAAIkBAAAAAAAAAAAAAAAA8L8"
				],
				[
					47,
					1,
					"insert",
					{
						"characters": " pe"
					},
					"AwAAAIwBAAAAAAAAjQEAAAAAAAAAAAAAjQEAAAAAAACOAQAAAAAAAAAAAACOAQAAAAAAAI8BAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMAQAAAAAAAIwBAAAAAAAAAAAAAAAA8L8"
				],
				[
					48,
					1,
					"insert",
					{
						"characters": " Apple"
					},
					"BgAAAI8BAAAAAAAAkAEAAAAAAAAAAAAAkAEAAAAAAACRAQAAAAAAAAAAAACRAQAAAAAAAJIBAAAAAAAAAAAAAJIBAAAAAAAAkwEAAAAAAAAAAAAAkwEAAAAAAACUAQAAAAAAAAAAAACUAQAAAAAAAJUBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACPAQAAAAAAAI8BAAAAAAAAAAAAAAAA8L8"
				],
				[
					49,
					1,
					"insert",
					{
						"characters": " calendar."
					},
					"CgAAAJUBAAAAAAAAlgEAAAAAAAAAAAAAlgEAAAAAAACXAQAAAAAAAAAAAACXAQAAAAAAAJgBAAAAAAAAAAAAAJgBAAAAAAAAmQEAAAAAAAAAAAAAmQEAAAAAAACaAQAAAAAAAAAAAACaAQAAAAAAAJsBAAAAAAAAAAAAAJsBAAAAAAAAnAEAAAAAAAAAAAAAnAEAAAAAAACdAQAAAAAAAAAAAACdAQAAAAAAAJ4BAAAAAAAAAAAAAJ4BAAAAAAAAnwEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACVAQAAAAAAAJUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					50,
					1,
					"left_delete",
					null,
					"AQAAAJ4BAAAAAAAAngEAAAAAAAABAAAALg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACfAQAAAAAAAJ8BAAAAAAAAAAAAAAAA8L8"
				],
				[
					52,
					1,
					"insert",
					{
						"characters": "\n0"
					},
					"AgAAAJ8BAAAAAAAAoAEAAAAAAAAAAAAAoAEAAAAAAAChAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACfAQAAAAAAAJ8BAAAAAAAAAAAAAAAA8L8"
				],
				[
					53,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAKEBAAAAAAAAogEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAChAQAAAAAAAKEBAAAAAAAAAAAAAAAA8L8"
				],
				[
					54,
					2,
					"left_delete",
					null,
					"AgAAAKEBAAAAAAAAoQEAAAAAAAABAAAAIKABAAAAAAAAoAEAAAAAAAABAAAAMA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiAQAAAAAAAKIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					55,
					1,
					"insert",
					{
						"characters": "-"
					},
					"AQAAAKABAAAAAAAAoQEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACgAQAAAAAAAKABAAAAAAAAAAAAAAAA8L8"
				],
				[
					56,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAKEBAAAAAAAAogEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAChAQAAAAAAAKEBAAAAAAAAAAAAAAAA8L8"
				],
				[
					57,
					1,
					"insert",
					{
						"characters": "O"
					},
					"AQAAAKIBAAAAAAAAowEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiAQAAAAAAAKIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					58,
					1,
					"insert",
					{
						"characters": " noua"
					},
					"BQAAAKMBAAAAAAAApAEAAAAAAAAAAAAApAEAAAAAAAClAQAAAAAAAAAAAAClAQAAAAAAAKYBAAAAAAAAAAAAAKYBAAAAAAAApwEAAAAAAAAAAAAApwEAAAAAAACoAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACjAQAAAAAAAKMBAAAAAAAAAAAAAAAA8L8"
				],
				[
					59,
					1,
					"insert",
					{
						"characters": " categorie"
					},
					"CgAAAKgBAAAAAAAAqQEAAAAAAAAAAAAAqQEAAAAAAACqAQAAAAAAAAAAAACqAQAAAAAAAKsBAAAAAAAAAAAAAKsBAAAAAAAArAEAAAAAAAAAAAAArAEAAAAAAACtAQAAAAAAAAAAAACtAQAAAAAAAK4BAAAAAAAAAAAAAK4BAAAAAAAArwEAAAAAAAAAAAAArwEAAAAAAACwAQAAAAAAAAAAAACwAQAAAAAAALEBAAAAAAAAAAAAALEBAAAAAAAAsgEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACoAQAAAAAAAKgBAAAAAAAAAAAAAAAA8L8"
				],
				[
					60,
					1,
					"insert",
					{
						"characters": " de"
					},
					"AwAAALIBAAAAAAAAswEAAAAAAAAAAAAAswEAAAAAAAC0AQAAAAAAAAAAAAC0AQAAAAAAALUBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACyAQAAAAAAALIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					61,
					1,
					"insert",
					{
						"characters": " comunic"
					},
					"CAAAALUBAAAAAAAAtgEAAAAAAAAAAAAAtgEAAAAAAAC3AQAAAAAAAAAAAAC3AQAAAAAAALgBAAAAAAAAAAAAALgBAAAAAAAAuQEAAAAAAAAAAAAAuQEAAAAAAAC6AQAAAAAAAAAAAAC6AQAAAAAAALsBAAAAAAAAAAAAALsBAAAAAAAAvAEAAAAAAAAAAAAAvAEAAAAAAAC9AQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC1AQAAAAAAALUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					62,
					1,
					"insert",
					{
						"characters": "are"
					},
					"AwAAAL0BAAAAAAAAvgEAAAAAAAAAAAAAvgEAAAAAAAC/AQAAAAAAAAAAAAC/AQAAAAAAAMABAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC9AQAAAAAAAL0BAAAAAAAAAAAAAAAA8L8"
				],
				[
					63,
					1,
					"insert",
					{
						"characters": " numita"
					},
					"BwAAAMABAAAAAAAAwQEAAAAAAAAAAAAAwQEAAAAAAADCAQAAAAAAAAAAAADCAQAAAAAAAMMBAAAAAAAAAAAAAMMBAAAAAAAAxAEAAAAAAAAAAAAAxAEAAAAAAADFAQAAAAAAAAAAAADFAQAAAAAAAMYBAAAAAAAAAAAAAMYBAAAAAAAAxwEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADAAQAAAAAAAMABAAAAAAAAAAAAAAAA8L8"
				],
				[
					64,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAMcBAAAAAAAAyAEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADHAQAAAAAAAMcBAAAAAAAAAAAAAAAA8L8"
				],
				[
					65,
					1,
					"insert_snippet",
					{
						"contents": "\"$0\""
					},
					"AQAAAMgBAAAAAAAAygEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIAQAAAAAAAMgBAAAAAAAAAAAAAAAA8L8"
				],
				[
					66,
					1,
					"insert",
					{
						"characters": "Demnitari"
					},
					"CQAAAMkBAAAAAAAAygEAAAAAAAAAAAAAygEAAAAAAADLAQAAAAAAAAAAAADLAQAAAAAAAMwBAAAAAAAAAAAAAMwBAAAAAAAAzQEAAAAAAAAAAAAAzQEAAAAAAADOAQAAAAAAAAAAAADOAQAAAAAAAM8BAAAAAAAAAAAAAM8BAAAAAAAA0AEAAAAAAAAAAAAA0AEAAAAAAADRAQAAAAAAAAAAAADRAQAAAAAAANIBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADJAQAAAAAAAMkBAAAAAAAAAAAAAAAA8L8"
				],
				[
					68,
					1,
					"insert",
					{
						"characters": ","
					},
					"AQAAANMBAAAAAAAA1AEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADTAQAAAAAAANMBAAAAAAAAAAAAAAAA8L8"
				],
				[
					69,
					1,
					"insert",
					{
						"characters": " i"
					},
					"AgAAANQBAAAAAAAA1QEAAAAAAAAAAAAA1QEAAAAAAADWAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADUAQAAAAAAANQBAAAAAAAAAAAAAAAA8L8"
				],
				[
					70,
					1,
					"left_delete",
					null,
					"AQAAANUBAAAAAAAA1QEAAAAAAAABAAAAaQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADWAQAAAAAAANYBAAAAAAAAAAAAAAAA8L8"
				],
				[
					71,
					1,
					"insert",
					{
						"characters": "la"
					},
					"AgAAANUBAAAAAAAA1gEAAAAAAAAAAAAA1gEAAAAAAADXAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADVAQAAAAAAANUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					72,
					1,
					"insert",
					{
						"characters": " care"
					},
					"BQAAANcBAAAAAAAA2AEAAAAAAAAAAAAA2AEAAAAAAADZAQAAAAAAAAAAAADZAQAAAAAAANoBAAAAAAAAAAAAANoBAAAAAAAA2wEAAAAAAAAAAAAA2wEAAAAAAADcAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADXAQAAAAAAANcBAAAAAAAAAAAAAAAA8L8"
				],
				[
					73,
					1,
					"insert",
					{
						"characters": " au"
					},
					"AwAAANwBAAAAAAAA3QEAAAAAAAAAAAAA3QEAAAAAAADeAQAAAAAAAAAAAADeAQAAAAAAAN8BAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADcAQAAAAAAANwBAAAAAAAAAAAAAAAA8L8"
				],
				[
					74,
					1,
					"insert",
					{
						"characters": " acces"
					},
					"BgAAAN8BAAAAAAAA4AEAAAAAAAAAAAAA4AEAAAAAAADhAQAAAAAAAAAAAADhAQAAAAAAAOIBAAAAAAAAAAAAAOIBAAAAAAAA4wEAAAAAAAAAAAAA4wEAAAAAAADkAQAAAAAAAAAAAADkAQAAAAAAAOUBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADfAQAAAAAAAN8BAAAAAAAAAAAAAAAA8L8"
				],
				[
					75,
					1,
					"insert",
					{
						"characters": " doar"
					},
					"BQAAAOUBAAAAAAAA5gEAAAAAAAAAAAAA5gEAAAAAAADnAQAAAAAAAAAAAADnAQAAAAAAAOgBAAAAAAAAAAAAAOgBAAAAAAAA6QEAAAAAAAAAAAAA6QEAAAAAAADqAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADlAQAAAAAAAOUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					76,
					1,
					"insert",
					{
						"characters": " cei"
					},
					"BAAAAOoBAAAAAAAA6wEAAAAAAAAAAAAA6wEAAAAAAADsAQAAAAAAAAAAAADsAQAAAAAAAO0BAAAAAAAAAAAAAO0BAAAAAAAA7gEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADqAQAAAAAAAOoBAAAAAAAAAAAAAAAA8L8"
				],
				[
					77,
					1,
					"insert",
					{
						"characters": " cu"
					},
					"AwAAAO4BAAAAAAAA7wEAAAAAAAAAAAAA7wEAAAAAAADwAQAAAAAAAAAAAADwAQAAAAAAAPEBAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADuAQAAAAAAAO4BAAAAAAAAAAAAAAAA8L8"
				],
				[
					78,
					1,
					"insert",
					{
						"characters": " o"
					},
					"AgAAAPEBAAAAAAAA8gEAAAAAAAAAAAAA8gEAAAAAAADzAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADxAQAAAAAAAPEBAAAAAAAAAAAAAAAA8L8"
				],
				[
					79,
					1,
					"left_delete",
					null,
					"AQAAAPIBAAAAAAAA8gEAAAAAAAABAAAAbw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADzAQAAAAAAAPMBAAAAAAAAAAAAAAAA8L8"
				],
				[
					80,
					1,
					"insert",
					{
						"characters": "o"
					},
					"AQAAAPIBAAAAAAAA8wEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADyAQAAAAAAAPIBAAAAAAAAAAAAAAAA8L8"
				],
				[
					81,
					1,
					"insert",
					{
						"characters": " demnita"
					},
					"CAAAAPMBAAAAAAAA9AEAAAAAAAAAAAAA9AEAAAAAAAD1AQAAAAAAAAAAAAD1AQAAAAAAAPYBAAAAAAAAAAAAAPYBAAAAAAAA9wEAAAAAAAAAAAAA9wEAAAAAAAD4AQAAAAAAAAAAAAD4AQAAAAAAAPkBAAAAAAAAAAAAAPkBAAAAAAAA+gEAAAAAAAAAAAAA+gEAAAAAAAD7AQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADzAQAAAAAAAPMBAAAAAAAAAAAAAAAA8L8"
				],
				[
					82,
					1,
					"insert",
					{
						"characters": "te"
					},
					"AgAAAPsBAAAAAAAA/AEAAAAAAAAAAAAA/AEAAAAAAAD9AQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD7AQAAAAAAAPsBAAAAAAAAAAAAAAAA8L8"
				],
				[
					83,
					1,
					"insert",
					{
						"characters": " in"
					},
					"AwAAAP0BAAAAAAAA/gEAAAAAAAAAAAAA/gEAAAAAAAD/AQAAAAAAAAAAAAD/AQAAAAAAAAACAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD9AQAAAAAAAP0BAAAAAAAAAAAAAAAA8L8"
				],
				[
					84,
					1,
					"insert",
					{
						"characters": " loja."
					},
					"BgAAAAACAAAAAAAAAQIAAAAAAAAAAAAAAQIAAAAAAAACAgAAAAAAAAAAAAACAgAAAAAAAAMCAAAAAAAAAAAAAAMCAAAAAAAABAIAAAAAAAAAAAAABAIAAAAAAAAFAgAAAAAAAAAAAAAFAgAAAAAAAAYCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAA8L8"
				],
				[
					85,
					1,
					"insert",
					{
						"characters": "\n-"
					},
					"AgAAAAYCAAAAAAAABwIAAAAAAAAAAAAABwIAAAAAAAAIAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAGAgAAAAAAAAYCAAAAAAAAAAAAAAAA8L8"
				],
				[
					86,
					1,
					"insert",
					{
						"characters": " Posibilitatea"
					},
					"DgAAAAgCAAAAAAAACQIAAAAAAAAAAAAACQIAAAAAAAAKAgAAAAAAAAAAAAAKAgAAAAAAAAsCAAAAAAAAAAAAAAsCAAAAAAAADAIAAAAAAAAAAAAADAIAAAAAAAANAgAAAAAAAAAAAAANAgAAAAAAAA4CAAAAAAAAAAAAAA4CAAAAAAAADwIAAAAAAAAAAAAADwIAAAAAAAAQAgAAAAAAAAAAAAAQAgAAAAAAABECAAAAAAAAAAAAABECAAAAAAAAEgIAAAAAAAAAAAAAEgIAAAAAAAATAgAAAAAAAAAAAAATAgAAAAAAABQCAAAAAAAAAAAAABQCAAAAAAAAFQIAAAAAAAAAAAAAFQIAAAAAAAAWAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAIAgAAAAAAAAgCAAAAAAAAAAAAAAAA8L8"
				],
				[
					87,
					1,
					"insert",
					{
						"characters": " ca"
					},
					"AwAAABYCAAAAAAAAFwIAAAAAAAAAAAAAFwIAAAAAAAAYAgAAAAAAAAAAAAAYAgAAAAAAABkCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAWAgAAAAAAABYCAAAAAAAAAAAAAAAA8L8"
				],
				[
					88,
					1,
					"insert",
					{
						"characters": " toti"
					},
					"BQAAABkCAAAAAAAAGgIAAAAAAAAAAAAAGgIAAAAAAAAbAgAAAAAAAAAAAAAbAgAAAAAAABwCAAAAAAAAAAAAABwCAAAAAAAAHQIAAAAAAAAAAAAAHQIAAAAAAAAeAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAZAgAAAAAAABkCAAAAAAAAAAAAAAAA8L8"
				],
				[
					89,
					1,
					"insert",
					{
						"characters": " membrii"
					},
					"CAAAAB4CAAAAAAAAHwIAAAAAAAAAAAAAHwIAAAAAAAAgAgAAAAAAAAAAAAAgAgAAAAAAACECAAAAAAAAAAAAACECAAAAAAAAIgIAAAAAAAAAAAAAIgIAAAAAAAAjAgAAAAAAAAAAAAAjAgAAAAAAACQCAAAAAAAAAAAAACQCAAAAAAAAJQIAAAAAAAAAAAAAJQIAAAAAAAAmAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAeAgAAAAAAAB4CAAAAAAAAAAAAAAAA8L8"
				],
				[
					90,
					1,
					"insert",
					{
						"characters": " sa"
					},
					"AwAAACYCAAAAAAAAJwIAAAAAAAAAAAAAJwIAAAAAAAAoAgAAAAAAAAAAAAAoAgAAAAAAACkCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAmAgAAAAAAACYCAAAAAAAAAAAAAAAA8L8"
				],
				[
					91,
					1,
					"insert",
					{
						"characters": " creeze"
					},
					"BwAAACkCAAAAAAAAKgIAAAAAAAAAAAAAKgIAAAAAAAArAgAAAAAAAAAAAAArAgAAAAAAACwCAAAAAAAAAAAAACwCAAAAAAAALQIAAAAAAAAAAAAALQIAAAAAAAAuAgAAAAAAAAAAAAAuAgAAAAAAAC8CAAAAAAAAAAAAAC8CAAAAAAAAMAIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAApAgAAAAAAACkCAAAAAAAAAAAAAAAA8L8"
				],
				[
					92,
					1,
					"insert",
					{
						"characters": " proiecte,"
					},
					"CgAAADACAAAAAAAAMQIAAAAAAAAAAAAAMQIAAAAAAAAyAgAAAAAAAAAAAAAyAgAAAAAAADMCAAAAAAAAAAAAADMCAAAAAAAANAIAAAAAAAAAAAAANAIAAAAAAAA1AgAAAAAAAAAAAAA1AgAAAAAAADYCAAAAAAAAAAAAADYCAAAAAAAANwIAAAAAAAAAAAAANwIAAAAAAAA4AgAAAAAAAAAAAAA4AgAAAAAAADkCAAAAAAAAAAAAADkCAAAAAAAAOgIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAwAgAAAAAAADACAAAAAAAAAAAAAAAA8L8"
				],
				[
					93,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAADoCAAAAAAAAOwIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA6AgAAAAAAADoCAAAAAAAAAAAAAAAA8L8"
				],
				[
					94,
					1,
					"insert",
					{
						"characters": "si"
					},
					"AgAAADsCAAAAAAAAPAIAAAAAAAAAAAAAPAIAAAAAAAA9AgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA7AgAAAAAAADsCAAAAAAAAAAAAAAAA8L8"
				],
				[
					95,
					1,
					"insert",
					{
						"characters": " sa"
					},
					"AwAAAD0CAAAAAAAAPgIAAAAAAAAAAAAAPgIAAAAAAAA/AgAAAAAAAAAAAAA/AgAAAAAAAEACAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA9AgAAAAAAAD0CAAAAAAAAAAAAAAAA8L8"
				],
				[
					96,
					1,
					"insert",
					{
						"characters": " p"
					},
					"AgAAAEACAAAAAAAAQQIAAAAAAAAAAAAAQQIAAAAAAABCAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABAAgAAAAAAAEACAAAAAAAAAAAAAAAA8L8"
				],
				[
					97,
					1,
					"insert",
					{
						"characters": "oata"
					},
					"BAAAAEICAAAAAAAAQwIAAAAAAAAAAAAAQwIAAAAAAABEAgAAAAAAAAAAAABEAgAAAAAAAEUCAAAAAAAAAAAAAEUCAAAAAAAARgIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABCAgAAAAAAAEICAAAAAAAAAAAAAAAA8L8"
				],
				[
					98,
					1,
					"insert",
					{
						"characters": " marca"
					},
					"BgAAAEYCAAAAAAAARwIAAAAAAAAAAAAARwIAAAAAAABIAgAAAAAAAAAAAABIAgAAAAAAAEkCAAAAAAAAAAAAAEkCAAAAAAAASgIAAAAAAAAAAAAASgIAAAAAAABLAgAAAAAAAAAAAABLAgAAAAAAAEwCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABGAgAAAAAAAEYCAAAAAAAAAAAAAAAA8L8"
				],
				[
					99,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAEwCAAAAAAAATQIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMAgAAAAAAAEwCAAAAAAAAAAAAAAAA8L8"
				],
				[
					100,
					1,
					"insert",
					{
						"characters": "proiectele"
					},
					"CgAAAE0CAAAAAAAATgIAAAAAAAAAAAAATgIAAAAAAABPAgAAAAAAAAAAAABPAgAAAAAAAFACAAAAAAAAAAAAAFACAAAAAAAAUQIAAAAAAAAAAAAAUQIAAAAAAABSAgAAAAAAAAAAAABSAgAAAAAAAFMCAAAAAAAAAAAAAFMCAAAAAAAAVAIAAAAAAAAAAAAAVAIAAAAAAABVAgAAAAAAAAAAAABVAgAAAAAAAFYCAAAAAAAAAAAAAFYCAAAAAAAAVwIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABNAgAAAAAAAE0CAAAAAAAAAAAAAAAA8L8"
				],
				[
					101,
					1,
					"insert",
					{
						"characters": " ca"
					},
					"AwAAAFcCAAAAAAAAWAIAAAAAAAAAAAAAWAIAAAAAAABZAgAAAAAAAAAAAABZAgAAAAAAAFoCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABXAgAAAAAAAFcCAAAAAAAAAAAAAAAA8L8"
				],
				[
					102,
					13,
					"left_delete",
					null,
					"DQAAAFkCAAAAAAAAWQIAAAAAAAABAAAAYVgCAAAAAAAAWAIAAAAAAAABAAAAY1cCAAAAAAAAVwIAAAAAAAABAAAAIFYCAAAAAAAAVgIAAAAAAAABAAAAZVUCAAAAAAAAVQIAAAAAAAABAAAAbFQCAAAAAAAAVAIAAAAAAAABAAAAZVMCAAAAAAAAUwIAAAAAAAABAAAAdFICAAAAAAAAUgIAAAAAAAABAAAAY1ECAAAAAAAAUQIAAAAAAAABAAAAZVACAAAAAAAAUAIAAAAAAAABAAAAaU8CAAAAAAAATwIAAAAAAAABAAAAb04CAAAAAAAATgIAAAAAAAABAAAAck0CAAAAAAAATQIAAAAAAAABAAAAcA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABaAgAAAAAAAFoCAAAAAAAAAAAAAAAA8L8"
				],
				[
					103,
					1,
					"insert",
					{
						"characters": "proiectele"
					},
					"CgAAAE0CAAAAAAAATgIAAAAAAAAAAAAATgIAAAAAAABPAgAAAAAAAAAAAABPAgAAAAAAAFACAAAAAAAAAAAAAFACAAAAAAAAUQIAAAAAAAAAAAAAUQIAAAAAAABSAgAAAAAAAAAAAABSAgAAAAAAAFMCAAAAAAAAAAAAAFMCAAAAAAAAVAIAAAAAAAAAAAAAVAIAAAAAAABVAgAAAAAAAAAAAABVAgAAAAAAAFYCAAAAAAAAAAAAAFYCAAAAAAAAVwIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABNAgAAAAAAAE0CAAAAAAAAAAAAAAAA8L8"
				],
				[
					104,
					1,
					"insert",
					{
						"characters": " sau"
					},
					"BAAAAFcCAAAAAAAAWAIAAAAAAAAAAAAAWAIAAAAAAABZAgAAAAAAAAAAAABZAgAAAAAAAFoCAAAAAAAAAAAAAFoCAAAAAAAAWwIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABXAgAAAAAAAFcCAAAAAAAAAAAAAAAA8L8"
				],
				[
					105,
					1,
					"insert",
					{
						"characters": " subtask-uri"
					},
					"DAAAAFsCAAAAAAAAXAIAAAAAAAAAAAAAXAIAAAAAAABdAgAAAAAAAAAAAABdAgAAAAAAAF4CAAAAAAAAAAAAAF4CAAAAAAAAXwIAAAAAAAAAAAAAXwIAAAAAAABgAgAAAAAAAAAAAABgAgAAAAAAAGECAAAAAAAAAAAAAGECAAAAAAAAYgIAAAAAAAAAAAAAYgIAAAAAAABjAgAAAAAAAAAAAABjAgAAAAAAAGQCAAAAAAAAAAAAAGQCAAAAAAAAZQIAAAAAAAAAAAAAZQIAAAAAAABmAgAAAAAAAAAAAABmAgAAAAAAAGcCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABbAgAAAAAAAFsCAAAAAAAAAAAAAAAA8L8"
				],
				[
					106,
					1,
					"insert",
					{
						"characters": " "
					},
					"AQAAAGcCAAAAAAAAaAIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABnAgAAAAAAAGcCAAAAAAAAAAAAAAAA8L8"
				],
				[
					107,
					1,
					"left_delete",
					null,
					"AQAAAGcCAAAAAAAAZwIAAAAAAAABAAAAIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABoAgAAAAAAAGgCAAAAAAAAAAAAAAAA8L8"
				],
				[
					108,
					1,
					"insert",
					{
						"characters": "le"
					},
					"AgAAAGcCAAAAAAAAaAIAAAAAAAAAAAAAaAIAAAAAAABpAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABnAgAAAAAAAGcCAAAAAAAAAAAAAAAA8L8"
				],
				[
					109,
					1,
					"insert",
					{
						"characters": " din"
					},
					"BAAAAGkCAAAAAAAAagIAAAAAAAAAAAAAagIAAAAAAABrAgAAAAAAAAAAAABrAgAAAAAAAGwCAAAAAAAAAAAAAGwCAAAAAAAAbQIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABpAgAAAAAAAGkCAAAAAAAAAAAAAAAA8L8"
				],
				[
					110,
					1,
					"insert",
					{
						"characters": " proiect"
					},
					"CAAAAG0CAAAAAAAAbgIAAAAAAAAAAAAAbgIAAAAAAABvAgAAAAAAAAAAAABvAgAAAAAAAHACAAAAAAAAAAAAAHACAAAAAAAAcQIAAAAAAAAAAAAAcQIAAAAAAAByAgAAAAAAAAAAAAByAgAAAAAAAHMCAAAAAAAAAAAAAHMCAAAAAAAAdAIAAAAAAAAAAAAAdAIAAAAAAAB1AgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABtAgAAAAAAAG0CAAAAAAAAAAAAAAAA8L8"
				],
				[
					111,
					1,
					"insert",
					{
						"characters": " ca"
					},
					"AwAAAHUCAAAAAAAAdgIAAAAAAAAAAAAAdgIAAAAAAAB3AgAAAAAAAAAAAAB3AgAAAAAAAHgCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB1AgAAAAAAAHUCAAAAAAAAAAAAAAAA8L8"
				],
				[
					112,
					1,
					"insert",
					{
						"characters": " si"
					},
					"AwAAAHgCAAAAAAAAeQIAAAAAAAAAAAAAeQIAAAAAAAB6AgAAAAAAAAAAAAB6AgAAAAAAAHsCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB4AgAAAAAAAHgCAAAAAAAAAAAAAAAA8L8"
				],
				[
					113,
					1,
					"insert",
					{
						"characters": " completatea"
					},
					"DAAAAHsCAAAAAAAAfAIAAAAAAAAAAAAAfAIAAAAAAAB9AgAAAAAAAAAAAAB9AgAAAAAAAH4CAAAAAAAAAAAAAH4CAAAAAAAAfwIAAAAAAAAAAAAAfwIAAAAAAACAAgAAAAAAAAAAAACAAgAAAAAAAIECAAAAAAAAAAAAAIECAAAAAAAAggIAAAAAAAAAAAAAggIAAAAAAACDAgAAAAAAAAAAAACDAgAAAAAAAIQCAAAAAAAAAAAAAIQCAAAAAAAAhQIAAAAAAAAAAAAAhQIAAAAAAACGAgAAAAAAAAAAAACGAgAAAAAAAIcCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB7AgAAAAAAAHsCAAAAAAAAAAAAAAAA8L8"
				],
				[
					114,
					1,
					"insert",
					{
						"characters": " doar"
					},
					"BQAAAIcCAAAAAAAAiAIAAAAAAAAAAAAAiAIAAAAAAACJAgAAAAAAAAAAAACJAgAAAAAAAIoCAAAAAAAAAAAAAIoCAAAAAAAAiwIAAAAAAAAAAAAAiwIAAAAAAACMAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACHAgAAAAAAAIcCAAAAAAAAAAAAAAAA8L8"
				],
				[
					115,
					1,
					"insert",
					{
						"characters": " daca"
					},
					"BQAAAIwCAAAAAAAAjQIAAAAAAAAAAAAAjQIAAAAAAACOAgAAAAAAAAAAAACOAgAAAAAAAI8CAAAAAAAAAAAAAI8CAAAAAAAAkAIAAAAAAAAAAAAAkAIAAAAAAACRAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMAgAAAAAAAIwCAAAAAAAAAAAAAAAA8L8"
				],
				[
					116,
					1,
					"insert",
					{
						"characters": " le-a"
					},
					"BQAAAJECAAAAAAAAkgIAAAAAAAAAAAAAkgIAAAAAAACTAgAAAAAAAAAAAACTAgAAAAAAAJQCAAAAAAAAAAAAAJQCAAAAAAAAlQIAAAAAAAAAAAAAlQIAAAAAAACWAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACRAgAAAAAAAJECAAAAAAAAAAAAAAAA8L8"
				],
				[
					117,
					1,
					"insert",
					{
						"characters": " creat"
					},
					"BgAAAJYCAAAAAAAAlwIAAAAAAAAAAAAAlwIAAAAAAACYAgAAAAAAAAAAAACYAgAAAAAAAJkCAAAAAAAAAAAAAJkCAAAAAAAAmgIAAAAAAAAAAAAAmgIAAAAAAACbAgAAAAAAAAAAAACbAgAAAAAAAJwCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWAgAAAAAAAJYCAAAAAAAAAAAAAAAA8L8"
				],
				[
					118,
					1,
					"insert",
					{
						"characters": " sau"
					},
					"BAAAAJwCAAAAAAAAnQIAAAAAAAAAAAAAnQIAAAAAAACeAgAAAAAAAAAAAACeAgAAAAAAAJ8CAAAAAAAAAAAAAJ8CAAAAAAAAoAIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACcAgAAAAAAAJwCAAAAAAAAAAAAAAAA8L8"
				],
				[
					119,
					1,
					"insert",
					{
						"characters": " ii"
					},
					"AwAAAKACAAAAAAAAoQIAAAAAAAAAAAAAoQIAAAAAAACiAgAAAAAAAAAAAACiAgAAAAAAAKMCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACgAgAAAAAAAKACAAAAAAAAAAAAAAAA8L8"
				],
				[
					120,
					1,
					"insert",
					{
						"characters": " sunt"
					},
					"BQAAAKMCAAAAAAAApAIAAAAAAAAAAAAApAIAAAAAAAClAgAAAAAAAAAAAAClAgAAAAAAAKYCAAAAAAAAAAAAAKYCAAAAAAAApwIAAAAAAAAAAAAApwIAAAAAAACoAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACjAgAAAAAAAKMCAAAAAAAAAAAAAAAA8L8"
				],
				[
					121,
					1,
					"insert",
					{
						"characters": " asignate."
					},
					"CgAAAKgCAAAAAAAAqQIAAAAAAAAAAAAAqQIAAAAAAACqAgAAAAAAAAAAAACqAgAAAAAAAKsCAAAAAAAAAAAAAKsCAAAAAAAArAIAAAAAAAAAAAAArAIAAAAAAACtAgAAAAAAAAAAAACtAgAAAAAAAK4CAAAAAAAAAAAAAK4CAAAAAAAArwIAAAAAAAAAAAAArwIAAAAAAACwAgAAAAAAAAAAAACwAgAAAAAAALECAAAAAAAAAAAAALECAAAAAAAAsgIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACoAgAAAAAAAKgCAAAAAAAAAAAAAAAA8L8"
				],
				[
					124,
					1,
					"left_delete",
					null,
					"AQAAAKkAAAAAAAAAqQAAAAAAAAABAAAAbw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACqAAAAAAAAAKoAAAAAAAAAAAAAAAAA8L8"
				],
				[
					127,
					1,
					"insert",
					{
						"characters": " si"
					},
					"AwAAADgCAAAAAAAAOQIAAAAAAAAAAAAAOQIAAAAAAAA6AgAAAAAAAAAAAAA6AgAAAAAAADsCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA4AgAAAAAAADgCAAAAAAAAAAAAAAAA8L8"
				],
				[
					128,
					1,
					"insert",
					{
						"characters": " subtat"
					},
					"BwAAADsCAAAAAAAAPAIAAAAAAAAAAAAAPAIAAAAAAAA9AgAAAAAAAAAAAAA9AgAAAAAAAD4CAAAAAAAAAAAAAD4CAAAAAAAAPwIAAAAAAAAAAAAAPwIAAAAAAABAAgAAAAAAAAAAAABAAgAAAAAAAEECAAAAAAAAAAAAAEECAAAAAAAAQgIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA7AgAAAAAAADsCAAAAAAAAAAAAAAAA8L8"
				],
				[
					129,
					1,
					"left_delete",
					null,
					"AQAAAEECAAAAAAAAQQIAAAAAAAABAAAAdA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABCAgAAAAAAAEICAAAAAAAAAAAAAAAA8L8"
				],
				[
					130,
					1,
					"insert",
					{
						"characters": "sk-uri"
					},
					"BgAAAEECAAAAAAAAQgIAAAAAAAAAAAAAQgIAAAAAAABDAgAAAAAAAAAAAABDAgAAAAAAAEQCAAAAAAAAAAAAAEQCAAAAAAAARQIAAAAAAAAAAAAARQIAAAAAAABGAgAAAAAAAAAAAABGAgAAAAAAAEcCAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABBAgAAAAAAAEECAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Models/Event.php",
			"settings":
			{
				"buffer_size": 1224,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					4,
					2,
					"left_delete",
					null,
					"AgAAANoCAAAAAAAA2gIAAAAAAADGAAAAICAgICAgICBcTG9nOjppbmZvKCdBY2Nlc3NpbmcgZW5kX2RhdGUgYXR0cmlidXRlOicsIFsKICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkdmFsdWUsCiAgICAgICAgICAgICdldmVudF9pZCcgPT4gJHRoaXMtPmlkLAogICAgICAgICAgICAncmF3X3ZhbHVlJyA9PiAkdGhpcy0+YXR0cmlidXRlc1snZW5kX2RhdGUnXSA/PyBudWxsCiAgICAgICAgXSk72QIAAAAAAADZAgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACgAwAAAAAAANoCAAAAAAAAAAAAAAAA8L8"
				],
				[
					5,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAADIBAAAPD9waHAKCm5hbWVzcGFjZSBBcHBcTW9kZWxzOwoKdXNlIElsbHVtaW5hdGVcRGF0YWJhc2VcRWxvcXVlbnRcTW9kZWw7CnVzZSBJbGx1bWluYXRlXERhdGFiYXNlXEVsb3F1ZW50XEZhY3Rvcmllc1xIYXNGYWN0b3J5OwoKY2xhc3MgRXZlbnQgZXh0ZW5kcyBNb2RlbAp7CiAgICB1c2UgSGFzRmFjdG9yeTsKCiAgICBwcm90ZWN0ZWQgJGZpbGxhYmxlID0gWwogICAgICAgICdwb3N0X2lkJywKICAgICAgICAndGl0bGUnLAogICAgICAgICdkZXNjcmlwdGlvbicsCiAgICAgICAgJ3N0YXJ0X2RhdGUnLAogICAgICAgICdlbmRfZGF0ZScsCiAgICAgICAgJ2xvY2F0aW9uJywKICAgICAgICAnbm90aWZ5X25vdycsCiAgICAgICAgJ25vdGlmeV8yNGhfYmVmb3JlJywKICAgICAgICAnbm90aWZpZWRfMjRoX2JlZm9yZScKICAgIF07CgogICAgcHJvdGVjdGVkICRjYXN0cyA9IFsKICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJ2RhdGV0aW1lJywKICAgICAgICAnZW5kX2RhdGUnID0+ICdkYXRldGltZScsCiAgICAgICAgJ25vdGlmeV9ub3cnID0+ICdib29sZWFuJywKICAgICAgICAnbm90aWZ5XzI0aF9iZWZvcmUnID0+ICdib29sZWFuJywKICAgICAgICAnbm90aWZpZWRfMjRoX2JlZm9yZScgPT4gJ2Jvb2xlYW4nCiAgICBdOwoKICAgIHByb3RlY3RlZCAkYXBwZW5kcyA9IFsnZW5kX2RhdGUnXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RW5kRGF0ZUF0dHJpYnV0ZSgkdmFsdWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRyaWJ1dGVzWydlbmRfZGF0ZSddID8/IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBvc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YmVsb25nc1RvKFBvc3Q6OmNsYXNzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXNPbmUoUG9sbDo6Y2xhc3MpOwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gYm9vdCgpCiAgICB7CiAgICAgICAgcGFyZW50Ojpib290KCk7CgogICAgICAgIHN0YXRpYzo6ZGVsZXRpbmcoZnVuY3Rpb24gKCRldmVudCkgewogICAgICAgICAgICAvLyBEZWxldGUgcmVsYXRlZCBwb2xsIGlmIGV4aXN0cwogICAgICAgICAgICBpZiAoJGV2ZW50LT5wb2xsKSB7CiAgICAgICAgICAgICAgICAkZXZlbnQtPnBvbGwtPmRlbGV0ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0KAAAAAAAAAADIBAAAAAAAAAAAAAAAAAAAAAAAAMgEAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADZAgAAAAAAANkCAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Http/Controllers/Member/PostController.php",
			"settings":
			{
				"buffer_size": 16241,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					10,
					2,
					"left_delete",
					null,
					"AgAAAJBXAAAAAAAAkFcAAAAAAACrAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ1JldHVybmluZyB1bnNlZW4gcG9zdHMgY291bnQnLCBbCiAgICAgICAgICAgICAgICAndW5zZWVuX3Bvc3RzX2NvdW50JyA9PiAkdW5zZWVuUG9zdHNDb3VudCwKICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICAgICAgXSk7j1cAAAAAAACPVwAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA7WAAAAAAAAJBXAAAAAAAAAAAAAAAA8L8"
				],
				[
					16,
					2,
					"left_delete",
					null,
					"AgAAANQFAAAAAAAA1AUAAAAAAACaAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnQ3JlYXRpbmcgbmV3IHBvc3QnLCBbCiAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gYXV0aCgpLT5pZCgpLAogICAgICAgICAgICAgICAgJ3JlcXVlc3RfZGF0YScgPT4gJHJlcXVlc3QtPmFsbCgpCiAgICAgICAgICAgIF0pO9MFAAAAAAAA0wUAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABuBgAAAAAAANQFAAAAAAAAAAAAAAAA8L8"
				],
				[
					18,
					1,
					"left_delete",
					null,
					"AQAAANMFAAAAAAAA0wUAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADUBQAAAAAAANQFAAAAAAAAAAAAAAAAWkA"
				],
				[
					23,
					2,
					"left_delete",
					null,
					"AgAAAEUKAAAAAAAARQoAAAAAAABFAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1Bvc3QgaW1hZ2UgdXBsb2FkZWQnLCBbJ3BhdGgnID0+ICRwYXRoXSk7RAoAAAAAAABECgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACKCgAAAAAAAEUKAAAAAAAAAAAAAAAA8L8"
				],
				[
					27,
					2,
					"left_delete",
					null,
					"AgAAACoMAAAAAAAAKgwAAAAAAAAqAQAAICAgICAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdQb3N0IGZpbGUgdXBsb2FkZWQnLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICRmaWxlLT5nZXRDbGllbnRPcmlnaW5hbE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnID0+ICRmaWxlLT5nZXRDbGllbnRNaW1lVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gJGZpbGUtPmdldFNpemUoKQogICAgICAgICAgICAgICAgICAgIF0pOykMAAAAAAAAKQwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABUDQAAAAAAACoMAAAAAAAAAAAAAAAA8L8"
				],
				[
					31,
					1,
					"left_delete",
					null,
					"AQAAANoNAAAAAAAA2g0AAAAAAAAVAQAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1Bvc3RDb250cm9sbGVyQHN0b3JlIC0gQnJvYWRjYXN0aW5nIGV2ZW50JywgWwogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ2NoYW5uZWwnID0+ICdwb3N0cycsCiAgICAgICAgICAgICAgICAgICAgJ2V2ZW50JyA9PiAnUG9zdENyZWF0ZWQnLAogICAgICAgICAgICAgICAgICAgICdwb3N0X2RhdGEnID0+ICRwb3N0LT50b0FycmF5KCkKICAgICAgICAgICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADvDgAAAAAAANoNAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					2,
					"left_delete",
					null,
					"AgAAANoNAAAAAAAA2g0AAAAAAAABAAAACtkNAAAAAAAA2Q0AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADbDQAAAAAAANsNAAAAAAAAAAAAAAAAAAA"
				],
				[
					37,
					2,
					"left_delete",
					null,
					"AgAAAFESAAAAAAAAURIAAAAAAACLAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdQb3N0Q29udHJvbGxlckBzdG9yZSAtIEJyb2FkY2FzdCBzdWNjZXNzZnVsJywgWwogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgICAgIF0pO1ASAAAAAAAAUBIAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADcEgAAAAAAAFESAAAAAAAAAAAAAAAA8L8"
				],
				[
					41,
					1,
					"left_delete",
					null,
					"AQAAAHUTAAAAAAAAdRMAAAAAAABoAAAAICAgICAgICAgICAgCiAgICAgICAgICAgIFxMb2c6OmluZm8oJ1Bvc3QgY3JlYXRlZCBzdWNjZXNzZnVsbHknLCBbJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZF0pOwogICAgICAgICAgICA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADdEwAAAAAAAHUTAAAAAAAAAAAAAAAA8L8"
				],
				[
					46,
					2,
					"left_delete",
					null,
					"AgAAAAQXAAAAAAAABBcAAAAAAABTAQAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdQb3N0IHVwZGF0ZSByZXF1ZXN0IHJlY2VpdmVkJywgWwogICAgICAgICAgICAncmVxdWVzdF9kYXRhJyA9PiAkcmVxdWVzdC0+YWxsKCksCiAgICAgICAgICAgICdmaWxlcycgPT4gJHJlcXVlc3QtPmZpbGVzLT5hbGwoKSwKICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgJ3VzZXJfaWQnID0+IGF1dGgoKS0+aWQoKSwKICAgICAgICAgICAgJ2N1cnJlbnRfaW1hZ2UnID0+ICRwb3N0LT5pbWFnZSwKICAgICAgICAgICAgJ2N1cnJlbnRfZmlsZV9wYXRoJyA9PiAkcG9zdC0+ZmlsZV9wYXRoCiAgICAgICAgXSk7AxcAAAAAAAADFwAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABXGAAAAAAAAAQXAAAAAAAAAAAAAAAA8L8"
				],
				[
					49,
					2,
					"left_delete",
					null,
					"AgAAABsYAAAAAAAAGxgAAAAAAACSAQAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdWYWxpZGF0aW9uIHBhc3NlZCwgdXBkYXRpbmcgcG9zdCcsIFsKICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICRyZXF1ZXN0LT5jb250ZW50LAogICAgICAgICAgICAnY2F0ZWdvcnlfaWQnID0+ICRyZXF1ZXN0LT5jYXRlZ29yeV9pZCwKICAgICAgICAgICAgJ2hhc19maWxlcycgPT4gJHJlcXVlc3QtPmhhc0ZpbGUoJ2ZpbGVzJyksCiAgICAgICAgICAgICdoYXNfaW1hZ2UnID0+ICRyZXF1ZXN0LT5oYXNGaWxlKCdpbWFnZScpLAogICAgICAgICAgICAncmVtb3ZlX2ltYWdlJyA9PiAkcmVxdWVzdC0+aGFzKCdyZW1vdmVfaW1hZ2UnKSwKICAgICAgICAgICAgJ3JlbW92ZV9maWxlJyA9PiAkcmVxdWVzdC0+aGFzKCdyZW1vdmVfZmlsZScpCiAgICAgICAgXSk7GhgAAAAAAAAaGAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACtGQAAAAAAABsYAAAAAAAAAAAAAAAA8L8"
				],
				[
					53,
					2,
					"left_delete",
					null,
					"AgAAAPwYAAAAAAAA/BgAAAAAAACgAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnUmVtb3ZpbmcgZXhpc3RpbmcgaW1hZ2UnLCBbCiAgICAgICAgICAgICAgICAnY3VycmVudF9pbWFnZV9wYXRoJyA9PiAkcG9zdC0+aW1hZ2UsCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkCiAgICAgICAgICAgIF0pO/sYAAAAAAAA+xgAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACcGQAAAAAAAPwYAAAAAAAAAAAAAAAA8L8"
				],
				[
					56,
					2,
					"left_delete",
					null,
					"AgAAAJcZAAAAAAAAlxkAAAAAAACmAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0ltYWdlIGRlbGV0ZWQgZnJvbSBzdG9yYWdlJywgWwogICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkb2xkSW1hZ2VQYXRoLAogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgICAgIF0pO5YZAAAAAAAAlhkAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA9GgAAAAAAAJcZAAAAAAAAAAAAAAAA8L8"
				],
				[
					60,
					2,
					"left_delete",
					null,
					"AgAAACYaAAAAAAAAJhoAAAAAAAAYAQAAICAgICAgICAgICAgXExvZzo6aW5mbygnTmV3IGltYWdlIHJlY2VpdmVkJywgWwogICAgICAgICAgICAgICAgJ2ZpbGVfbmFtZScgPT4gJHJlcXVlc3QtPmZpbGUoJ2ltYWdlJyktPmdldENsaWVudE9yaWdpbmFsTmFtZSgpLAogICAgICAgICAgICAgICAgJ2ZpbGVfc2l6ZScgPT4gJHJlcXVlc3QtPmZpbGUoJ2ltYWdlJyktPmdldFNpemUoKSwKICAgICAgICAgICAgICAgICdtaW1lX3R5cGUnID0+ICRyZXF1ZXN0LT5maWxlKCdpbWFnZScpLT5nZXRNaW1lVHlwZSgpCiAgICAgICAgICAgIF0pOyUaAAAAAAAAJRoAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA+GwAAAAAAACYaAAAAAAAAAAAAAAAA8L8"
				],
				[
					62,
					4,
					"left_delete",
					null,
					"BAAAAC4aAAAAAAAALhoAAAAAAAAEAAAAICAgICoaAAAAAAAAKhoAAAAAAAAEAAAAICAgICYaAAAAAAAAJhoAAAAAAAAEAAAAICAgICUaAAAAAAAAJRoAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAyGgAAAAAAADIaAAAAAAAAAAAAAACAdEA"
				],
				[
					65,
					2,
					"left_delete",
					null,
					"AgAAAJUaAAAAAAAAlRoAAAAAAACEAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnTmV3IGltYWdlIHN0b3JlZCcsIFsKICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkcGF0aCwKICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgXSk7lBoAAAAAAACUGgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAZGwAAAAAAAJUaAAAAAAAAAAAAAAAA8L8"
				],
				[
					68,
					2,
					"left_delete",
					null,
					"AgAAABQbAAAAAAAAFBsAAAAAAADoAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnUmVtb3ZpbmcgZXhpc3RpbmcgZmlsZScsIFsKICAgICAgICAgICAgICAgICdjdXJyZW50X2ZpbGVfcGF0aCcgPT4gJHBvc3QtPmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICdjdXJyZW50X2ZpbGVfbmFtZScgPT4gJHBvc3QtPmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIBMbAAAAAAAAExsAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD8GwAAAAAAABQbAAAAAAAAAAAAAAAA8L8"
				],
				[
					71,
					2,
					"left_delete",
					null,
					"AgAAAK0bAAAAAAAArRsAAAAAAACkAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0ZpbGUgZGVsZXRlZCBmcm9tIHN0b3JhZ2UnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3BhdGgnID0+ICRvbGRGaWxlUGF0aCwKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkCiAgICAgICAgICAgICAgICBdKTusGwAAAAAAAKwbAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABRHAAAAAAAAK0bAAAAAAAAAAAAAAAA8L8"
				],
				[
					74,
					1,
					"left_delete",
					null,
					"AQAAAK4cAAAAAAAArhwAAAAAAAClAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnTmV3IGZpbGVzIHJlY2VpdmVkJywgWwogICAgICAgICAgICAgICAgJ2ZpbGVfY291bnQnID0+IGNvdW50KCRyZXF1ZXN0LT5maWxlKCdmaWxlcycpKSwKICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQKICAgICAgICAgICAgXSk7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABTHQAAAAAAAK4cAAAAAAAAAAAAAAAA8L8"
				],
				[
					76,
					2,
					"left_delete",
					null,
					"AgAAAK4cAAAAAAAArhwAAAAAAAABAAAACq0cAAAAAAAArRwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACvHAAAAAAAAK8cAAAAAAAAAAAAAAAAAAA"
				],
				[
					79,
					2,
					"left_delete",
					null,
					"AgAAAKIeAAAAAAAAoh4AAAAAAACTAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ05ldyBmaWxlIHN0b3JlZCcsIFsKICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJHBhdGgsCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZAogICAgICAgICAgICAgICAgXSk7oR4AAAAAAAChHgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA1HwAAAAAAAKIeAAAAAAAAAAAAAAAA8L8"
				],
				[
					82,
					2,
					"left_delete",
					null,
					"AgAAANoeAAAAAAAA2h4AAAAAAAD4AAAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdQb3N0IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5JywgWwogICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAndXBkYXRlZF9maWVsZHMnID0+ICRwb3N0LT5nZXRDaGFuZ2VzKCksCiAgICAgICAgICAgICduZXdfaW1hZ2UnID0+ICRwb3N0LT5pbWFnZSwKICAgICAgICAgICAgJ25ld19maWxlX3BhdGgnID0+ICRwb3N0LT5maWxlX3BhdGgKICAgICAgICBdKTvZHgAAAAAAANkeAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADSHwAAAAAAANoeAAAAAAAAAAAAAAAA8L8"
				],
				[
					85,
					2,
					"left_delete",
					null,
					"AgAAAGQfAAAAAAAAZB8AAAAAAABwAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnUG9zdFVwZGF0ZWQgZXZlbnQgYnJvYWRjYXN0ZWQnLCBbCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkCiAgICAgICAgICAgIF0pO2MfAAAAAAAAYx8AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADUHwAAAAAAAGQfAAAAAAAAAAAAAAAA8L8"
				],
				[
					90,
					2,
					"left_delete",
					null,
					"AgAAAEgiAAAAAAAASCIAAAAAAADVAAAAICAgICAgICAgICAgCiAgICAgICAgICAgIFxMb2c6OmluZm8oJ0F0dGVtcHRpbmcgdG8gZGVsZXRlIHBvc3QnLCBbCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgJ2F1dGhvcl9pZCcgPT4gJHBvc3QtPmF1dGhvcl9pZCwKICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiBhdXRoKCktPmlkKCkKICAgICAgICAgICAgXSk7RyIAAAAAAABHIgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAdIwAAAAAAAEgiAAAAAAAAAAAAAAAA8L8"
				],
				[
					93,
					2,
					"left_delete",
					null,
					"AgAAAKkiAAAAAAAAqSIAAAAAAADjAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1Bvc3RDb250cm9sbGVyQGRlc3Ryb3kgLSBCcm9hZGNhc3RpbmcgZXZlbnQnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAnY2hhbm5lbCcgPT4gJ3Bvc3RzJywKICAgICAgICAgICAgICAgICAgICAnZXZlbnQnID0+ICdQb3N0RGVsZXRlZCcKICAgICAgICAgICAgICAgIF0pOwqoIgAAAAAAAKgiAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACMIwAAAAAAAKkiAAAAAAAAAAAAAAAA8L8"
				],
				[
					96,
					2,
					"left_delete",
					null,
					"AgAAAOwiAAAAAAAA7CIAAAAAAACNAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdQb3N0Q29udHJvbGxlckBkZXN0cm95IC0gQnJvYWRjYXN0IHN1Y2Nlc3NmdWwnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZAogICAgICAgICAgICAgICAgXSk76yIAAAAAAADrIgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5IwAAAAAAAOwiAAAAAAAAAAAAAAAA8L8"
				],
				[
					102,
					2,
					"left_delete",
					null,
					"AgAAANQoAAAAAAAA1CgAAAAAAAAVAQAAICAgICAgICAgICAgCiAgICAgICAgICAgIFxMb2c6OmluZm8oJ01hcmtpbmcgcG9zdCBhcyBzZWVuIC0gU3RhcnRpbmcnLCBbCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICR1c2VyLT5pZCwKICAgICAgICAgICAgICAgICdwb3N0X2NhdGVnb3J5JyA9PiAkcG9zdC0+Y2F0ZWdvcnktPnNsdWcsCiAgICAgICAgICAgICAgICAncG9zdF9sb2RnZV9pZCcgPT4gJHBvc3QtPmxvZGdlX2lkCiAgICAgICAgICAgIF0pO9MoAAAAAAAA0ygAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADpKQAAAAAAANQoAAAAAAAAAAAAAAAA8L8"
				],
				[
					106,
					2,
					"left_delete",
					null,
					"AgAAAAAqAAAAAAAAACoAAAAAAACjAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0NyZWF0aW5nIG5ldyB2aWV3IHJlY29yZCcsIFsKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICAgICAgICAgIF0pO/8pAAAAAAAA/ykAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACjKgAAAAAAAAAqAAAAAAAAAAAAAAAA8L8"
				],
				[
					108,
					1,
					"left_delete",
					null,
					"AQAAAP8pAAAAAAAA/ykAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAKgAAAAAAAAAqAAAAAAAAAAAAAACAcEA"
				],
				[
					111,
					2,
					"left_delete",
					null,
					"AgAAAJQqAAAAAAAAlCoAAAAAAADFAAAAICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgXExvZzo6aW5mbygnUG9zdCBtYXJrZWQgYXMgc2VlbiAtIFZpZXcgcmVjb3JkIGNyZWF0ZWQnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkCiAgICAgICAgICAgICAgICBdKTuTKgAAAAAAAJMqAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABZKwAAAAAAAJQqAAAAAAAAAAAAAAAA8L8"
				],
				[
					116,
					2,
					"left_delete",
					null,
					"AgAAAKgtAAAAAAAAqC0AAAAAAADzAAAACiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnVW5zZWVuIHBvc3RzIGNvdW50IGNhbGN1bGF0ZWQgZm9yIGNhdGVnb3J5JywgWwogICAgICAgICAgICAgICAgICAgICAgICAnY2F0ZWdvcnknID0+ICRjYXQtPnNsdWcsCiAgICAgICAgICAgICAgICAgICAgICAgICdjb3VudCcgPT4gJGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkCiAgICAgICAgICAgICAgICAgICAgXSk7py0AAAAAAACnLQAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACbLgAAAAAAAKgtAAAAAAAAAAAAAAAAAAA"
				],
				[
					119,
					2,
					"left_delete",
					null,
					"AgAAALotAAAAAAAAui0AAAAAAAD1AAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdCcm9hZGNhc3RpbmcgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQgZXZlbnQnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3Vuc2Vlbl9wb3N0c19jb3VudCcgPT4gJHVuc2VlblBvc3RzQ291bnQsCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICR1c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkCiAgICAgICAgICAgICAgICBdKTu5LQAAAAAAALktAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACvLgAAAAAAALotAAAAAAAAAAAAAAAA8L8"
				],
				[
					122,
					2,
					"left_delete",
					null,
					"AgAAAE4uAAAAAAAATi4AAAAAAACfAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdCcm9hZGNhc3QgY29tcGxldGVkJywgWwogICAgICAgICAgICAgICAgICAgICdwb3N0X2lkJyA9PiAkcG9zdC0+aWQsCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICR1c2VyLT5pZAogICAgICAgICAgICAgICAgXSk7TS4AAAAAAABNLgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADtLgAAAAAAAE4uAAAAAAAAAAAAAAAA8L8"
				],
				[
					125,
					2,
					"left_delete",
					null,
					"AgAAAGMuAAAAAAAAYy4AAAAAAACmAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1Bvc3QgYWxyZWFkeSBtYXJrZWQgYXMgc2VlbicsIFsKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICAgICAgICAgIF0pO2IuAAAAAAAAYi4AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAJLwAAAAAAAGMuAAAAAAAAAAAAAAAA8L8"
				],
				[
					127,
					5,
					"left_delete",
					null,
					"BQAAAG8uAAAAAAAAby4AAAAAAAAEAAAAICAgIGsuAAAAAAAAay4AAAAAAAAEAAAAICAgIGcuAAAAAAAAZy4AAAAAAAAEAAAAICAgIGMuAAAAAAAAYy4AAAAAAAAEAAAAICAgIGIuAAAAAAAAYi4AAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABzLgAAAAAAAHMuAAAAAAAAAAAAAAAAZEA"
				],
				[
					132,
					1,
					"left_delete",
					null,
					"AQAAAEc3AAAAAAAARzcAAAAAAABtAAAAICAgICAgICAgICAgXExvZzo6aW5mbygnU3RhcnRpbmcgZ2V0VW5zZWVuQ291bnQnLCBbCiAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gYXV0aCgpLT5pZCgpCiAgICAgICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC0NwAAAAAAAEc3AAAAAAAAAAAAAAAA8L8"
				],
				[
					134,
					2,
					"left_delete",
					null,
					"AgAAAEc3AAAAAAAARzcAAAAAAAABAAAACkY3AAAAAAAARjcAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABINwAAAAAAAEg3AAAAAAAAAAAAAAAAAAA"
				],
				[
					137,
					2,
					"left_delete",
					null,
					"AgAAAJ03AAAAAAAAnTcAAAAAAADSAAAACiAgICAgICAgICAgIFxMb2c6OmluZm8oJ1VzZXIgYW5kIGxvZGdlIGluZm8nLCBbCiAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJHVzZXItPmlkLAogICAgICAgICAgICAgICAgJ2hhc19sb2RnZScgPT4gIWlzX251bGwoJGxvZGdlKSwKICAgICAgICAgICAgICAgICdsb2RnZV9pZCcgPT4gJGxvZGdlID8gJGxvZGdlLT5pZCA6IG51bGwKICAgICAgICAgICAgXSk7nDcAAAAAAACcNwAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABvOAAAAAAAAJ03AAAAAAAAAAAAAAAA8L8"
				],
				[
					143,
					2,
					"left_delete",
					null,
					"AgAAANU4AAAAAAAA1TgAAAAAAADNAAAAICAgICAgICAgICAgCiAgICAgICAgICAgIFxMb2c6OmluZm8oJ1JldHJpZXZlZCBjYXRlZ29yaWVzJywgWwogICAgICAgICAgICAgICAgJ2NhdGVnb3J5X2NvdW50JyA9PiAkY2F0ZWdvcmllcy0+Y291bnQoKSwKICAgICAgICAgICAgICAgICdjYXRlZ29yaWVzJyA9PiAkY2F0ZWdvcmllcy0+cGx1Y2soJ3NsdWcnKS0+dG9BcnJheSgpCiAgICAgICAgICAgIF0pO9Q4AAAAAAAA1DgAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiOQAAAAAAANU4AAAAAAAAAAAAAAAA8L8"
				],
				[
					146,
					2,
					"left_delete",
					null,
					"AgAAACA6AAAAAAAAIDoAAAAAAADMAAAAICAgICAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdTa2lwcGluZyBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXInLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICdjYXRlZ29yeScgPT4gJGNhdGVnb3J5LT5zbHVnCiAgICAgICAgICAgICAgICAgICAgXSk7HzoAAAAAAAAfOgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADsOgAAAAAAACA6AAAAAAAAAAAAAAAA8L8"
				],
				[
					150,
					2,
					"left_delete",
					null,
					"AgAAAPo7AAAAAAAA+jsAAAAAAAD4AAAACiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnVW5zZWVuIHBvc3RzIGNvdW50IGNhbGN1bGF0ZWQgZm9yIGNhdGVnb3J5JywgWwogICAgICAgICAgICAgICAgICAgICAgICAnY2F0ZWdvcnknID0+ICRjYXRlZ29yeS0+c2x1ZywKICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdW50JyA9PiAkY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICAgICAgICAgICAgICBdKTv5OwAAAAAAAPk7AAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADyPAAAAAAAAPo7AAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAABsPwAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyc1xNZW1iZXI7Cgp1c2UgQXBwXEh0dHBcQ29udHJvbGxlcnNcQ29udHJvbGxlcjsKdXNlIEFwcFxNb2RlbHNcUG9zdDsKdXNlIEFwcFxNb2RlbHNcUG9zdENhdGVnb3J5Owp1c2UgSWxsdW1pbmF0ZVxIdHRwXFJlcXVlc3Q7CnVzZSBJbmVydGlhXEluZXJ0aWE7CnVzZSBJbGx1bWluYXRlXEZvdW5kYXRpb25cQXV0aFxBY2Nlc3NcQXV0aG9yaXplc1JlcXVlc3RzOwp1c2UgQXBwXEV2ZW50c1xQb3N0UmVhY3Rpb25VcGRhdGVkOwp1c2UgQXBwXEV2ZW50c1xQb3N0Q3JlYXRlZDsKdXNlIEFwcFxFdmVudHNcUG9zdERlbGV0ZWQ7CnVzZSBBcHBcRXZlbnRzXFVucmVhZFBvc3RzQ291bnRVcGRhdGVkOwp1c2UgQXBwXE1vZGVsc1xQb3N0VmlldzsKCmNsYXNzIFBvc3RDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlcgp7CiAgICB1c2UgQXV0aG9yaXplc1JlcXVlc3RzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleCgpCiAgICB7CiAgICAgICAgJHVzZXIgPSBhdXRoKCktPnVzZXIoKTsKICAgICAgICAkbG9kZ2UgPSAkdXNlci0+bG9kZ2U7CiAgICAgICAgCiAgICAgICAgLy8gSW5pdGlhbGl6ZSBwb3N0cyBhbmQgY2F0ZWdvcmllcwogICAgICAgICRwb3N0cyA9IGNvbGxlY3QoKTsKICAgICAgICAkY2F0ZWdvcmllcyA9IFBvc3RDYXRlZ29yeTo6YWxsKCk7CiAgICAgICAgCiAgICAgICAgLy8gT25seSBsb2FkIHByb2plY3RzIGNvdW50IGlmIHVzZXIgaGFzIGEgbG9kZ2UKICAgICAgICBpZiAoJGxvZGdlKSB7CiAgICAgICAgICAgICRsb2RnZS0+bG9hZENvdW50KFsncHJvamVjdHMgYXMgdW5maW5pc2hlZF9wcm9qZWN0c19jb3VudCcgPT4gZnVuY3Rpb24oJHF1ZXJ5KSB7CiAgICAgICAgICAgICAgICAkcXVlcnktPndoZXJlKCdzdGF0dXMnLCAnaW5fcHJvZ3Jlc3MnKTsKICAgICAgICAgICAgfV0pOwogICAgICAgICAgICAKICAgICAgICAgICAgJHBvc3RzID0gUG9zdDo6d2l0aChbJ2F1dGhvcicsICdjYXRlZ29yeSddKQogICAgICAgICAgICAgICAgLT53aGVyZSgnbG9kZ2VfaWQnLCAkbG9kZ2UtPmlkKQogICAgICAgICAgICAgICAgLT5sYXRlc3QoKQogICAgICAgICAgICAgICAgLT5nZXQoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL1Bvc3RzJywgWwogICAgICAgICAgICAncG9zdHMnID0+ICRwb3N0cywKICAgICAgICAgICAgJ2NhdGVnb3JpZXMnID0+ICRjYXRlZ29yaWVzLAogICAgICAgICAgICAnbG9kZ2UnID0+ICRsb2RnZSwKICAgICAgICAgICAgJ3VzZXInID0+ICR1c2VyCiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTWVtYmVyL1Bvc3RzL0NyZWF0ZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9yZShSZXF1ZXN0ICRyZXF1ZXN0KQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRyZXF1ZXN0LT52YWxpZGF0ZShbCiAgICAgICAgICAgICAgICAnY29udGVudCcgPT4gJ3JlcXVpcmVkfHN0cmluZycsCiAgICAgICAgICAgICAgICAnY2F0ZWdvcnlfaWQnID0+ICdyZXF1aXJlZHxleGlzdHM6cG9zdF9jYXRlZ29yaWVzLGlkJywKICAgICAgICAgICAgICAgICdmaWxlcycgPT4gJ251bGxhYmxlfGFycmF5JywKICAgICAgICAgICAgICAgICdmaWxlcy4qJyA9PiAnZmlsZXxtaW1lczpwZGYsZG9jLGRvY3gsdHh0fG1heDoxMDI0MCcgLy8gMTBNQiBtYXgKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkdXNlciA9IGF1dGgoKS0+dXNlcigpOwogICAgICAgICAgICAkbG9kZ2VNZW1iZXIgPSAkdXNlci0+bG9kZ2VfbWVtYmVyOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCEkbG9kZ2VNZW1iZXIpIHsKICAgICAgICAgICAgICAgIFxMb2c6OmVycm9yKCdVc2VyIGF0dGVtcHRlZCB0byBjcmVhdGUgcG9zdCB3aXRob3V0IGxvZGdlIG1lbWJlcnNoaXAnLCBbCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICR1c2VyLT5pZAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gYmFjaygpLT53aXRoKCdlcnJvcicsICdZb3UgbXVzdCBiZSBhIG1lbWJlciBvZiBhIGxvZGdlIHRvIGNyZWF0ZSBwb3N0cy4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHBvc3QgPSBuZXcgUG9zdChbCiAgICAgICAgICAgICAgICAnY29udGVudCcgPT4gJHJlcXVlc3QtPmNvbnRlbnQsCiAgICAgICAgICAgICAgICAnY2F0ZWdvcnlfaWQnID0+ICRyZXF1ZXN0LT5jYXRlZ29yeV9pZCwKICAgICAgICAgICAgICAgICdsb2RnZV9pZCcgPT4gJGxvZGdlTWVtYmVyLT5sb2RnZV9pZCwKICAgICAgICAgICAgICAgICdhdXRob3JfaWQnID0+ICR1c2VyLT5pZAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgkcmVxdWVzdC0+aGFzRmlsZSgnaW1hZ2UnKSkgewogICAgICAgICAgICAgICAgJHBhdGggPSAkcmVxdWVzdC0+ZmlsZSgnaW1hZ2UnKS0+c3RvcmUoJ3Bvc3QtaW1hZ2VzJywgJ3B1YmxpYycpOwogICAgICAgICAgICAgICAgJHBvc3QtPmltYWdlID0gJHBhdGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEhhbmRsZSBmaWxlIHVwbG9hZHMKICAgICAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNGaWxlKCdmaWxlcycpKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcmVxdWVzdC0+ZmlsZSgnZmlsZXMnKSBhcyAkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICRwYXRoID0gJGZpbGUtPnN0b3JlKCdwb3N0cy8nIC4gJGxvZGdlTWVtYmVyLT5sb2RnZV9pZCwgJ3B1YmxpYycpOwogICAgICAgICAgICAgICAgICAgICRwb3N0LT5maWxlX3BhdGggPSAkcGF0aDsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+ZmlsZV9uYW1lID0gJGZpbGUtPmdldENsaWVudE9yaWdpbmFsTmFtZSgpOwogICAgICAgICAgICAgICAgICAgICRwb3N0LT5maWxlX3R5cGUgPSAkZmlsZS0+Z2V0Q2xpZW50TWltZVR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAkcG9zdC0+ZmlsZV9zaXplID0gJGZpbGUtPmdldFNpemUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHBvc3QtPnNhdmUoKTsKCiAgICAgICAgICAgIC8vIExvYWQgdGhlIHBvc3Qgd2l0aCBhbGwgcmVsYXRpb25zaGlwcwogICAgICAgICAgICAkcG9zdC0+bG9hZChbCiAgICAgICAgICAgICAgICAncmVhY3Rpb25zJywKICAgICAgICAgICAgICAgICdhdXRob3InLAogICAgICAgICAgICAgICAgJ2NhdGVnb3J5JywKICAgICAgICAgICAgICAgICdjb21tZW50cy5hdXRob3InLAogICAgICAgICAgICAgICAgJ2V2ZW50LnBvbGwudm90ZXMnLAogICAgICAgICAgICAgICAgJ3BvbGwudm90ZXMnLAogICAgICAgICAgICAgICAgJ3ZpZXdzJwogICAgICAgICAgICBdKTsKCiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgbmV3IHBvc3QKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGJyb2FkY2FzdChuZXcgUG9zdENyZWF0ZWQoJHBvc3QpKS0+dG9PdGhlcnMoKTsKCiAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdW5zZWVuIHBvc3RzIGNvdW50IGZvciBhbGwgdXNlcnMgaW4gdGhlIGxvZGdlCiAgICAgICAgICAgICAgICAkdXNlcnMgPSAkcG9zdC0+bG9kZ2UtPnVzZXJzOwogICAgICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJzIGFzICR1c2VyKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBtaWF6YS16aSBjYXRlZ29yeSBmb3IgdWNlbmljIHVzZXJzCiAgICAgICAgICAgICAgICAgICAgaWYgKCR1c2VyLT5yb2xlID09PSAndWNlbmljJyAmJiAkcG9zdC0+Y2F0ZWdvcnktPnNsdWcgPT09ICdtaWF6YS16aScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkY291bnQgPSBQb3N0Ojp3aGVyZSgnbG9kZ2VfaWQnLCAkcG9zdC0+bG9kZ2VfaWQpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+d2hlcmUoJ2NhdGVnb3J5X2lkJywgJHBvc3QtPmNhdGVnb3J5X2lkKQogICAgICAgICAgICAgICAgICAgICAgICAtPndoZXJlRG9lc250SGF2ZSgndmlld3MnLCBmdW5jdGlvbigkcXVlcnkpIHVzZSAoJHVzZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAtPmNvdW50KCk7CgogICAgICAgICAgICAgICAgICAgICR1bnNlZW5Qb3N0c0NvdW50WyR1c2VyLT5pZF0gPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICRwb3N0LT5jYXRlZ29yeS0+c2x1ZyA9PiAkY291bnQKICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgdXBkYXRlZCB1bnNlZW4gcG9zdHMgY291bnQKICAgICAgICAgICAgICAgIGJyb2FkY2FzdChuZXcgVW5yZWFkUG9zdHNDb3VudFVwZGF0ZWQoJHVuc2VlblBvc3RzQ291bnQpKS0+dG9PdGhlcnMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ1Bvc3RDb250cm9sbGVyQHN0b3JlIC0gQnJvYWRjYXN0IGZhaWxlZCcsIFsKICAgICAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCwKICAgICAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY2F0ZWdvcnkgc2x1ZyBmcm9tIHRoZSByZXF1ZXN0CiAgICAgICAgICAgICRjdXJyZW50Q2F0ZWdvcnkgPSAkcmVxdWVzdC0+aW5wdXQoJ2NhdGVnb3J5JywgJ2NvbXVuaWNhcmknKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgnZGFzaGJvYXJkJywgWydjYXRlZ29yeScgPT4gJGN1cnJlbnRDYXRlZ29yeV0pCiAgICAgICAgICAgICAgICAtPndpdGgoJ3N1Y2Nlc3MnLCAnUG9zdCBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4nKTsKICAgICAgICAgICAgICAgIAogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgcG9zdCcsIFsKICAgICAgICAgICAgICAgICdlcnJvcicgPT4gJGUtPmdldE1lc3NhZ2UoKSwKICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGJhY2soKS0+d2l0aCgnZXJyb3InLCAnRmFpbGVkIHRvIGNyZWF0ZSBwb3N0OiAnIC4gJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlZGl0KFBvc3QgJHBvc3QpCiAgICB7CiAgICAgICAgJHRoaXMtPmF1dGhvcml6ZSgndXBkYXRlJywgJHBvc3QpOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdNZW1iZXIvUG9zdHMvRWRpdCcsIFsKICAgICAgICAgICAgJ3Bvc3QnID0+ICRwb3N0CiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZShSZXF1ZXN0ICRyZXF1ZXN0LCBQb3N0ICRwb3N0KQogICAgewogICAgICAgICR0aGlzLT5hdXRob3JpemUoJ3VwZGF0ZScsICRwb3N0KTsKICAgICAgICAKICAgICAgICAkcmVxdWVzdC0+dmFsaWRhdGUoWwogICAgICAgICAgICAnY29udGVudCcgPT4gJ3JlcXVpcmVkfHN0cmluZycsCiAgICAgICAgICAgICdjYXRlZ29yeV9pZCcgPT4gJ3JlcXVpcmVkfGV4aXN0czpwb3N0X2NhdGVnb3JpZXMsaWQnLAogICAgICAgICAgICAnZmlsZXMnID0+ICdudWxsYWJsZXxhcnJheScsCiAgICAgICAgICAgICdmaWxlcy4qJyA9PiAnZmlsZXxtaW1lczpwZGYsZG9jLGRvY3gsdHh0fG1heDoxMDI0MCcgLy8gMTBNQiBtYXgKICAgICAgICBdKTsKICAgICAgICAKICAgICAgICAkcG9zdC0+Y29udGVudCA9ICRyZXF1ZXN0LT5jb250ZW50OwogICAgICAgICRwb3N0LT5jYXRlZ29yeV9pZCA9ICRyZXF1ZXN0LT5jYXRlZ29yeV9pZDsKICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgaW1hZ2UgcmVtb3ZhbAogICAgICAgIGlmICgkcmVxdWVzdC0+aGFzKCdyZW1vdmVfaW1hZ2UnKSAmJiAkcmVxdWVzdC0+cmVtb3ZlX2ltYWdlID09PSAnMScpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgkcG9zdC0+aW1hZ2UpIHsKICAgICAgICAgICAgICAgICRvbGRJbWFnZVBhdGggPSAkcG9zdC0+aW1hZ2U7CiAgICAgICAgICAgICAgICBcU3RvcmFnZTo6ZGlzaygncHVibGljJyktPmRlbGV0ZSgkcG9zdC0+aW1hZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwb3N0LT5pbWFnZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBuZXcgaW1hZ2UgdXBsb2FkCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNGaWxlKCdpbWFnZScpKSB7CiAgICAgICAgICAgICRwYXRoID0gJHJlcXVlc3QtPmZpbGUoJ2ltYWdlJyktPnN0b3JlKCdwb3N0LWltYWdlcycsICdwdWJsaWMnKTsKICAgICAgICAgICAgJHBvc3QtPmltYWdlID0gJHBhdGg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBmaWxlIHJlbW92YWwKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhcygncmVtb3ZlX2ZpbGUnKSAmJiAkcmVxdWVzdC0+cmVtb3ZlX2ZpbGUgPT09ICcxJykgewogICAgICAgICAgICBpZiAoJHBvc3QtPmZpbGVfcGF0aCkgewogICAgICAgICAgICAgICAgJG9sZEZpbGVQYXRoID0gJHBvc3QtPmZpbGVfcGF0aDsKICAgICAgICAgICAgICAgIFxTdG9yYWdlOjpkaXNrKCdwdWJsaWMnKS0+ZGVsZXRlKCRwb3N0LT5maWxlX3BhdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwb3N0LT5maWxlX3BhdGggPSBudWxsOwogICAgICAgICAgICAkcG9zdC0+ZmlsZV9uYW1lID0gbnVsbDsKICAgICAgICAgICAgJHBvc3QtPmZpbGVfdHlwZSA9IG51bGw7CiAgICAgICAgICAgICRwb3N0LT5maWxlX3NpemUgPSBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgbmV3IGZpbGUgdXBsb2FkCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5oYXNGaWxlKCdmaWxlcycpKSB7ICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEdldCB0aGUgZmlyc3QgZmlsZSBmcm9tIHRoZSBhcnJheQogICAgICAgICAgICAkZmlsZXMgPSAkcmVxdWVzdC0+ZmlsZSgnZmlsZXMnKTsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykgJiYgY291bnQoJGZpbGVzKSA+IDApIHsKICAgICAgICAgICAgICAgICRmaWxlID0gJGZpbGVzWzBdOwogICAgICAgICAgICAgICAgJHBhdGggPSAkZmlsZS0+c3RvcmUoJ3Bvc3RzLycgLiAkcG9zdC0+bG9kZ2VfaWQsICdwdWJsaWMnKTsKICAgICAgICAgICAgICAgICRwb3N0LT5maWxlX3BhdGggPSAkcGF0aDsKICAgICAgICAgICAgICAgICRwb3N0LT5maWxlX25hbWUgPSAkZmlsZS0+Z2V0Q2xpZW50T3JpZ2luYWxOYW1lKCk7CiAgICAgICAgICAgICAgICAkcG9zdC0+ZmlsZV90eXBlID0gJGZpbGUtPmdldENsaWVudE1pbWVUeXBlKCk7CiAgICAgICAgICAgICAgICAkcG9zdC0+ZmlsZV9zaXplID0gJGZpbGUtPmdldFNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAkcG9zdC0+c2F2ZSgpOwoKICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIHBvc3QgdXBkYXRlIGV2ZW50CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYnJvYWRjYXN0KG5ldyBcQXBwXEV2ZW50c1xQb3N0VXBkYXRlZCgkcG9zdC0+ZnJlc2goKSkpLT50b090aGVycygpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0ZhaWxlZCB0byBicm9hZGNhc3QgUG9zdFVwZGF0ZWQgZXZlbnQnLCBbCiAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgJ3RyYWNlJyA9PiAkZS0+Z2V0VHJhY2VBc1N0cmluZygpCiAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJHJlcXVlc3QtPndhbnRzSnNvbigpKSB7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiB0cnVlLAogICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdQb3N0IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicsCiAgICAgICAgICAgICAgICAncG9zdCcgPT4gJHBvc3QtPmZyZXNoKCkKICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgnbWVtYmVyLnBvc3RzJykKICAgICAgICAgICAgLT53aXRoKCdzdWNjZXNzJywgJ1Bvc3QgdXBkYXRlZCBzdWNjZXNzZnVsbHkuJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlc3Ryb3koUG9zdCAkcG9zdCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+YXV0aG9yaXplKCdkZWxldGUnLCAkcG9zdCk7CgogICAgICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIGRlbGV0aW9uIGV2ZW50IGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgcG9zdAogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgYnJvYWRjYXN0KG5ldyBQb3N0RGVsZXRlZCgkcG9zdC0+aWQpKS0+dG9PdGhlcnMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ1Bvc3RDb250cm9sbGVyQGRlc3Ryb3kgLSBCcm9hZGNhc3QgZmFpbGVkJywgWwogICAgICAgICAgICAgICAgICAgICdlcnJvcicgPT4gJGUtPmdldE1lc3NhZ2UoKSwKICAgICAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkLAogICAgICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKQogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICRwb3N0LT5kZWxldGUoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyZXF1ZXN0KCktPndhbnRzSnNvbigpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdQb3N0IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LicKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ21lbWJlci5wb3N0cycpCiAgICAgICAgICAgICAgICAtPndpdGgoJ3N1Y2Nlc3MnLCAnUG9zdCBkZWxldGVkIHN1Y2Nlc3NmdWxseS4nKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHBvc3QnLCBbCiAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCksCiAgICAgICAgICAgICAgICAncG9zdF9pZCcgPT4gJHBvc3QtPmlkID8/IG51bGwsCiAgICAgICAgICAgICAgICAnYXV0aG9yX2lkJyA9PiAkcG9zdC0+YXV0aG9yX2lkID8/IG51bGwsCiAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gYXV0aCgpLT5pZCgpCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJlcXVlc3QoKS0+d2FudHNKc29uKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICdGYWlsZWQgdG8gZGVsZXRlIHBvc3Q6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpCiAgICAgICAgICAgICAgICBdLCA1MDApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gYmFjaygpLT53aXRoKCdlcnJvcicsICdGYWlsZWQgdG8gZGVsZXRlIHBvc3Q6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG1hcmtTZWVuKFBvc3QgJHBvc3QpCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHVzZXIgPSBhdXRoKCktPnVzZXIoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdW5zZWVuUG9zdHNDb3VudCBhcnJheQogICAgICAgICAgICAkdW5zZWVuUG9zdHNDb3VudCA9IFtdOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIGFscmVhZHkgc2VlbiB0aGlzIHBvc3QKICAgICAgICAgICAgJGV4aXN0aW5nVmlldyA9ICRwb3N0LT52aWV3cygpLT53aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCktPmZpcnN0KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoISRleGlzdGluZ1ZpZXcpIHsKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyB2aWV3IHJlY29yZAogICAgICAgICAgICAgICAgJHBvc3QtPnZpZXdzKCktPmNyZWF0ZShbCiAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICR1c2VyLT5pZAogICAgICAgICAgICAgICAgXSk7CgogICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBjYXRlZ29yaWVzCiAgICAgICAgICAgICAgICAkY2F0ZWdvcmllcyA9IFBvc3RDYXRlZ29yeTo6YWxsKCk7CgogICAgICAgICAgICAgICAgLy8gQ291bnQgdW5zZWVuIHBvc3RzIHBlciBjYXRlZ29yeQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNhdGVnb3JpZXMgYXMgJGNhdCkgewogICAgICAgICAgICAgICAgICAgIC8vIFNraXAgbWlhemEtemkgY2F0ZWdvcnkgZm9yIHVjZW5pYyB1c2VycwogICAgICAgICAgICAgICAgICAgIGlmICgkdXNlci0+cm9sZSA9PT0gJ3VjZW5pYycgJiYgJGNhdC0+c2x1ZyA9PT0gJ21pYXphLXppJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRjb3VudCA9IFBvc3Q6OndoZXJlKCdsb2RnZV9pZCcsICRwb3N0LT5sb2RnZV9pZCkKICAgICAgICAgICAgICAgICAgICAgICAgLT53aGVyZSgnY2F0ZWdvcnlfaWQnLCAkY2F0LT5pZCkKICAgICAgICAgICAgICAgICAgICAgICAgLT53aGVyZURvZXNudEhhdmUoJ3ZpZXdzJywgZnVuY3Rpb24oJHF1ZXJ5KSB1c2UgKCR1c2VyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnktPndoZXJlKCd1c2VyX2lkJywgJHVzZXItPmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAgICAgICAgICAgICAkdW5zZWVuUG9zdHNDb3VudFskY2F0LT5zbHVnXSA9ICRjb3VudDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBCcm9hZGNhc3QgdGhlIHVwZGF0ZWQgdW5zZWVuIHBvc3RzIGNvdW50CiAgICAgICAgICAgICAgICBicm9hZGNhc3QobmV3IFVucmVhZFBvc3RzQ291bnRVcGRhdGVkKCR1bnNlZW5Qb3N0c0NvdW50KSktPnRvT3RoZXJzKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBFdmVuIGlmIHRoZSBwb3N0IHdhcyBhbHJlYWR5IHNlZW4sIHdlIHNob3VsZCBzdGlsbCByZXR1cm4gdGhlIGN1cnJlbnQgdW5zZWVuIGNvdW50cwogICAgICAgICAgICAgICAgJGNhdGVnb3JpZXMgPSBQb3N0Q2F0ZWdvcnk6OmFsbCgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNhdGVnb3JpZXMgYXMgJGNhdCkgewogICAgICAgICAgICAgICAgICAgIGlmICgkdXNlci0+cm9sZSA9PT0gJ3VjZW5pYycgJiYgJGNhdC0+c2x1ZyA9PT0gJ21pYXphLXppJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRjb3VudCA9IFBvc3Q6OndoZXJlKCdsb2RnZV9pZCcsICRwb3N0LT5sb2RnZV9pZCkKICAgICAgICAgICAgICAgICAgICAgICAgLT53aGVyZSgnY2F0ZWdvcnlfaWQnLCAkY2F0LT5pZCkKICAgICAgICAgICAgICAgICAgICAgICAgLT53aGVyZURvZXNudEhhdmUoJ3ZpZXdzJywgZnVuY3Rpb24oJHF1ZXJ5KSB1c2UgKCR1c2VyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnktPndoZXJlKCd1c2VyX2lkJywgJHVzZXItPmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgLT5jb3VudCgpOwoKICAgICAgICAgICAgICAgICAgICAkdW5zZWVuUG9zdHNDb3VudFskY2F0LT5zbHVnXSA9ICRjb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlKCktPmpzb24oWwogICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ1Bvc3QgbWFya2VkIGFzIHNlZW4nLAogICAgICAgICAgICAgICAgJ3Vuc2Vlbl9wb3N0c19jb3VudCcgPT4gJHVuc2VlblBvc3RzQ291bnQKICAgICAgICAgICAgXSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICBcTG9nOjplcnJvcignRmFpbGVkIHRvIG1hcmsgcG9zdCBhcyBzZWVuJywgWwogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgJ3RyYWNlJyA9PiAkZS0+Z2V0VHJhY2VBc1N0cmluZygpLAogICAgICAgICAgICAgICAgJ3Bvc3RfaWQnID0+ICRwb3N0LT5pZCA/PyBudWxsLAogICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+IGF1dGgoKS0+aWQoKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnRmFpbGVkIHRvIG1hcmsgcG9zdCBhcyBzZWVuOiAnIC4gJGUtPmdldE1lc3NhZ2UoKQogICAgICAgICAgICBdLCA1MDApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcmVSZWFjdGlvbihSZXF1ZXN0ICRyZXF1ZXN0LCBQb3N0ICRwb3N0KQogICAgewogICAgICAgICRyZXF1ZXN0LT52YWxpZGF0ZShbCiAgICAgICAgICAgICdlbW9qaScgPT4gJ3JlcXVpcmVkfHN0cmluZycsCiAgICAgICAgXSk7CgogICAgICAgICRyZWFjdGlvbiA9ICRwb3N0LT5yZWFjdGlvbnMoKS0+Y3JlYXRlKFsKICAgICAgICAgICAgJ3VzZXJfaWQnID0+IGF1dGgoKS0+aWQoKSwKICAgICAgICAgICAgJ2Vtb2ppJyA9PiAkcmVxdWVzdC0+ZW1vamksCiAgICAgICAgXSk7CgogICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgdXBkYXRlZCBwb3N0CiAgICAgICAgYnJvYWRjYXN0KG5ldyBQb3N0UmVhY3Rpb25VcGRhdGVkKCRwb3N0KSktPnRvT3RoZXJzKCk7CgogICAgICAgIHJldHVybiByZXNwb25zZSgpLT5qc29uKFsKICAgICAgICAgICAgJ3JlYWN0aW9uJyA9PiAkcmVhY3Rpb24sCiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlc3Ryb3lSZWFjdGlvbihQb3N0ICRwb3N0LCBSZWFjdGlvbiAkcmVhY3Rpb24pCiAgICB7CiAgICAgICAgJHJlYWN0aW9uLT5kZWxldGUoKTsKCiAgICAgICAgLy8gQnJvYWRjYXN0IHRoZSB1cGRhdGVkIHBvc3QKICAgICAgICBicm9hZGNhc3QobmV3IFBvc3RSZWFjdGlvblVwZGF0ZWQoJHBvc3QpKS0+dG9PdGhlcnMoKTsKCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlKCktPm5vQ29udGVudCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVbnNlZW5Db3VudCgpCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHVzZXIgPSBhdXRoKCktPnVzZXIoKTsKICAgICAgICAgICAgJGxvZGdlID0gJHVzZXItPmxvZGdlX21lbWJlcj8tPmxvZGdlOwoKICAgICAgICAgICAgaWYgKCEkbG9kZ2UpIHsKICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ05vIGxvZGdlIGZvdW5kIGZvciB1c2VyLCByZXR1cm5pbmcgZW1wdHkgY291bnRzJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbCiAgICAgICAgICAgICAgICAgICAgJ3Vuc2Vlbl9wb3N0c19jb3VudCcgPT4gW10KICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBHZXQgYWxsIGNhdGVnb3JpZXMKICAgICAgICAgICAgJGNhdGVnb3JpZXMgPSBQb3N0Q2F0ZWdvcnk6OmFsbCgpOwoKICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB1bnNlZW4gcG9zdHMgY291bnQgYXJyYXkKICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnQgPSBbXTsKCiAgICAgICAgICAgIC8vIENvdW50IHVuc2VlbiBwb3N0cyBmb3IgZWFjaCBjYXRlZ29yeQogICAgICAgICAgICBmb3JlYWNoICgkY2F0ZWdvcmllcyBhcyAkY2F0ZWdvcnkpIHsKICAgICAgICAgICAgICAgIC8vIFNraXAgbWlhemEtemkgY2F0ZWdvcnkgZm9yIHVjZW5pYyB1c2VycwogICAgICAgICAgICAgICAgaWYgKCR1c2VyLT5yb2xlID09PSAndWNlbmljJyAmJiAkY2F0ZWdvcnktPnNsdWcgPT09ICdtaWF6YS16aScpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICRjb3VudCA9IFBvc3Q6OndoZXJlKCdsb2RnZV9pZCcsICRsb2RnZS0+aWQpCiAgICAgICAgICAgICAgICAgICAgICAgIC0+d2hlcmUoJ2NhdGVnb3J5X2lkJywgJGNhdGVnb3J5LT5pZCkKICAgICAgICAgICAgICAgICAgICAgICAgLT53aGVyZURvZXNudEhhdmUoJ3ZpZXdzJywgZnVuY3Rpb24gKCRxdWVyeSkgdXNlICgkdXNlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5LT53aGVyZSgndXNlcl9pZCcsICR1c2VyLT5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIC0+Y291bnQoKTsKCiAgICAgICAgICAgICAgICAgICAgJHVuc2VlblBvc3RzQ291bnRbJGNhdGVnb3J5LT5zbHVnXSA9ICRjb3VudDsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICBcTG9nOjplcnJvcignRXJyb3IgY2FsY3VsYXRpbmcgdW5zZWVuIHBvc3RzIGNvdW50IGZvciBjYXRlZ29yeScsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAnY2F0ZWdvcnknID0+ICRjYXRlZ29yeS0+c2x1ZywKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICR1c2VyLT5pZAogICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgICR1bnNlZW5Qb3N0c0NvdW50WyRjYXRlZ29yeS0+c2x1Z10gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbCiAgICAgICAgICAgICAgICAndW5zZWVuX3Bvc3RzX2NvdW50JyA9PiAkdW5zZWVuUG9zdHNDb3VudAogICAgICAgICAgICBdKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIFxMb2c6OmVycm9yKCdFcnJvciBpbiBnZXRVbnNlZW5Db3VudCcsIFsKICAgICAgICAgICAgICAgICdlcnJvcicgPT4gJGUtPmdldE1lc3NhZ2UoKSwKICAgICAgICAgICAgICAgICd0cmFjZScgPT4gJGUtPmdldFRyYWNlQXNTdHJpbmcoKSwKICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiBhdXRoKCktPmlkKCkKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UoKS0+anNvbihbCiAgICAgICAgICAgICAgICAndW5zZWVuX3Bvc3RzX2NvdW50JyA9PiBbXQogICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICB9Cn0gAAAAAAAAAABxPwAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAhxIAAAAAAACNEgAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "resources/js/firebase.js",
			"settings":
			{
				"buffer_size": 2409,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					6,
					2,
					"left_delete",
					null,
					"AgAAAAoIAAAAAAAACggAAAAAAAAvAAAAICAgIGNvbnNvbGUubG9nKCdNZXNzYWdlIHJlY2VpdmVkLiAnLCBwYXlsb2FkKTsJCAAAAAAAAAkIAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA5CAAAAAAAAAoIAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Console/Commands/SendEventReminders.php",
			"settings":
			{
				"buffer_size": 10969,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					6,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAC0IwAAPD9waHAKCm5hbWVzcGFjZSBBcHBcQ29uc29sZVxDb21tYW5kczsKCnVzZSBJbGx1bWluYXRlXENvbnNvbGVcQ29tbWFuZDsKdXNlIEFwcFxNb2RlbHNcRXZlbnQ7CnVzZSBDYXJib25cQ2FyYm9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcSHR0cDsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXExvZzsKdXNlIEFwcFxOb3RpZmljYXRpb25zXEV2ZW50Tm90aWZpY2F0aW9uOwoKY2xhc3MgU2VuZEV2ZW50UmVtaW5kZXJzIGV4dGVuZHMgQ29tbWFuZAp7CiAgICBwcm90ZWN0ZWQgJHNpZ25hdHVyZSA9ICdldmVudHM6c2VuZC1yZW1pbmRlcnMnOwogICAgcHJvdGVjdGVkICRkZXNjcmlwdGlvbiA9ICdTZW5kIHJlbWluZGVycyBmb3IgdXBjb21pbmcgZXZlbnRzJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlKCkKICAgIHsKICAgICAgICAkdGhpcy0+aW5mbygnQ2hlY2tpbmcgZm9yIGV2ZW50cyB0aGF0IG5lZWQgcmVtaW5kZXJzLi4uJyk7CiAgICAgICAgCiAgICAgICAgJGV2ZW50cyA9IEV2ZW50Ojp3aGVyZSgnbm90aWZ5XzI0aF9iZWZvcmUnLCB0cnVlKQogICAgICAgICAgICAtPndoZXJlKCdub3RpZmllZF8yNGhfYmVmb3JlJywgZmFsc2UpCiAgICAgICAgICAgIC0+d2hlcmUoJ3N0YXJ0X2RhdGUnLCAnPicsIG5vdygpKQogICAgICAgICAgICAtPndoZXJlKCdzdGFydF9kYXRlJywgJzwnLCBub3coKS0+YWRkRGF5KCkpCiAgICAgICAgICAgIC0+Z2V0KCk7CgogICAgICAgICRldmVudENvdW50ID0gJGV2ZW50cy0+Y291bnQoKTsKICAgICAgICAkdGhpcy0+aW5mbygiRm91bmQgeyRldmVudENvdW50fSBldmVudHMgdGhhdCBuZWVkIHJlbWluZGVycy4iKTsKCiAgICAgICAgaWYgKCRldmVudENvdW50ID09PSAwKSB7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCdObyBldmVudHMgZm91bmQgdGhhdCBuZWVkIHJlbWluZGVycy4nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGV2ZW50cyBhcyAkZXZlbnQpIHsKICAgICAgICAgICAgJHRoaXMtPmluZm8oIlByb2Nlc3NpbmcgZXZlbnQ6IHskZXZlbnQtPnRpdGxlfSAoSUQ6IHskZXZlbnQtPmlkfSkiKTsKICAgICAgICAgICAgJHRoaXMtPmluZm8oIlN0YXJ0IGRhdGU6IHskZXZlbnQtPnN0YXJ0X2RhdGV9Iik7CgogICAgICAgICAgICBMb2c6OmluZm8oJ1NlbmRpbmcgMjRoIHJlbWluZGVyIGZvciBldmVudCcsIFsKICAgICAgICAgICAgICAgICdldmVudF9pZCcgPT4gJGV2ZW50LT5pZCwKICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJGV2ZW50LT50aXRsZSwKICAgICAgICAgICAgICAgICdzdGFydF9kYXRlJyA9PiAkZXZlbnQtPnN0YXJ0X2RhdGUKICAgICAgICAgICAgXSk7CgogICAgICAgICAgICAkbG9kZ2UgPSAkZXZlbnQtPnBvc3QtPmxvZGdlOwogICAgICAgICAgICAkbWVtYmVycyA9ICRsb2RnZS0+bWVtYmVycygpCiAgICAgICAgICAgICAgICAtPndoZXJlSGFzKCd1c2VyJywgZnVuY3Rpb24gKCRxdWVyeSkgewogICAgICAgICAgICAgICAgICAgICRxdWVyeS0+d2hlcmVJbigncm9sZScsIFsnbWFlc3RydScsICdjYWxmYScsICd1Y2VuaWMnXSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLT53aXRoKCd1c2VyJykKICAgICAgICAgICAgICAgIC0+Z2V0KCk7CgogICAgICAgICAgICAkbWVtYmVyQ291bnQgPSAkbWVtYmVycy0+Y291bnQoKTsKICAgICAgICAgICAgJHRoaXMtPmluZm8oIkZvdW5kIHskbWVtYmVyQ291bnR9IG1lbWJlcnMgdG8gbm90aWZ5IGZvciB0aGlzIGV2ZW50LiIpOwoKICAgICAgICAgICAgJG1lc3NhZ2UgPSAiUmVtaW5kZXI6IEV2ZW50IHskZXZlbnQtPnRpdGxlfSBzdGFydHMgaW4gMjQgaG91cnMiOwoKICAgICAgICAgICAgJG5vdGlmaWNhdGlvbnNTZW50ID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoJG1lbWJlcnMgYXMgJG1lbWJlcikgewogICAgICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXItPmZjbV90b2tlbikgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5pbmZvKCJTZW5kaW5nIG5vdGlmaWNhdGlvbiB0byB1c2VyOiB7JG1lbWJlci0+dXNlci0+Zmlyc3RfbmFtZX0geyRtZW1iZXItPnVzZXItPmxhc3RfbmFtZX0iKTsKCiAgICAgICAgICAgICAgICAgICAgTG9nOjppbmZvKCdTZW5kaW5nIEZDTSBub3RpZmljYXRpb24gdG8gdXNlcicsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnZmNtX3Rva2VuJyA9PiAkbWVtYmVyLT51c2VyLT5mY21fdG9rZW4KICAgICAgICAgICAgICAgICAgICBdKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gU2VuZCBwdXNoIG5vdGlmaWNhdGlvbiB1c2luZyBGQ00KICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnNlbmRGQ01Ob3RpZmljYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICRtZW1iZXItPnVzZXItPmZjbV90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmVudF9pZCcgPT4gJGV2ZW50LT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnZXZlbnRfbm90aWZpY2F0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZScgPT4gJGV2ZW50LT50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydF9kYXRlJyA9PiAkZXZlbnQtPnN0YXJ0X2RhdGUtPnRvSXNvODYwMVN0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkZXZlbnQtPmxvY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAkbm90aWZpY2F0aW9uc1NlbnQrKzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIExvZzo6aW5mbygnRkNNIG5vdGlmaWNhdGlvbiByZXN1bHQnLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+ICRyZXN1bHQKICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmluZm8oIlVzZXIgeyRtZW1iZXItPnVzZXItPmZpcnN0X25hbWV9IHskbWVtYmVyLT51c2VyLT5sYXN0X25hbWV9IGhhcyBubyBGQ00gdG9rZW4iKTsKICAgICAgICAgICAgICAgICAgICBMb2c6OmluZm8oJ1VzZXIgaGFzIG5vIEZDTSB0b2tlbicsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkCiAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJTdWNjZXNzZnVsbHkgc2VudCB7JG5vdGlmaWNhdGlvbnNTZW50fSBub3RpZmljYXRpb25zIGZvciB0aGlzIGV2ZW50LiIpOwoKICAgICAgICAgICAgJGV2ZW50LT51cGRhdGUoWydub3RpZmllZF8yNGhfYmVmb3JlJyA9PiB0cnVlXSk7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJNYXJrZWQgZXZlbnQgYXMgbm90aWZpZWQuIik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aW5mbygnRXZlbnQgcmVtaW5kZXJzIHByb2Nlc3NpbmcgY29tcGxldGVkLicpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2VuZEZDTU5vdGlmaWNhdGlvbigkdG9rZW4sICRtZXNzYWdlLCAkZGF0YSA9IFtdKQogICAgewogICAgICAgIExvZzo6aW5mbygnUHJlcGFyaW5nIEZDTSBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICd0b2tlbicgPT4gJHRva2VuLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJG1lc3NhZ2UsCiAgICAgICAgICAgICdkYXRhJyA9PiAkZGF0YQogICAgICAgIF0pOwoKICAgICAgICAkcHJvamVjdElkID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJvamVjdF9pZCcpOwogICAgICAgICRjbGllbnRFbWFpbCA9IGNvbmZpZygnc2VydmljZXMuZmNtLmNsaWVudF9lbWFpbCcpOwogICAgICAgICRwcml2YXRlS2V5ID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJpdmF0ZV9rZXknKTsKICAgICAgICAKICAgICAgICBMb2c6OmluZm8oJ0ZDTSBDb25maWd1cmF0aW9uJywgWwogICAgICAgICAgICAncHJvamVjdF9pZCcgPT4gJHByb2plY3RJZCwKICAgICAgICAgICAgJ2NsaWVudF9lbWFpbCcgPT4gJGNsaWVudEVtYWlsLAogICAgICAgICAgICAnaGFzX3ByaXZhdGVfa2V5JyA9PiAhZW1wdHkoJHByaXZhdGVLZXkpCiAgICAgICAgXSk7CiAgICAgICAgCiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICAkZXhwaXJlcyA9ICRub3cgKyAzNjAwOyAvLyBUb2tlbiBleHBpcmVzIGluIDEgaG91cgogICAgICAgIAogICAgICAgICRoZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdSUzI1NicsCiAgICAgICAgICAgICd0eXAnID0+ICdKV1QnCiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAkcGF5bG9hZCA9IFsKICAgICAgICAgICAgJ2lzcycgPT4gJGNsaWVudEVtYWlsLAogICAgICAgICAgICAnc2NvcGUnID0+ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2ZpcmViYXNlLm1lc3NhZ2luZycsCiAgICAgICAgICAgICdhdWQnID0+ICdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsCiAgICAgICAgICAgICdleHAnID0+ICRleHBpcmVzLAogICAgICAgICAgICAnaWF0JyA9PiAkbm93CiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAkaGVhZGVyQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkaGVhZGVyKSksICcrLycsICctXycpLCAnPScpOwogICAgICAgICRwYXlsb2FkQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkcGF5bG9hZCkpLCAnKy8nLCAnLV8nKSwgJz0nKTsKICAgICAgICAKICAgICAgICAvLyBDcmVhdGUgdGhlIHNpZ25hdHVyZSB1c2luZyBPcGVuU1NMCiAgICAgICAgJHByaXZhdGVLZXkgPSBzdHJfcmVwbGFjZShbJ1xuJywgJ1xyJ10sICcnLCAkcHJpdmF0ZUtleSk7CiAgICAgICAgCiAgICAgICAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGhhdmUgUEVNIGhlYWRlcnMsIGFkZCB0aGVtCiAgICAgICAgaWYgKCFzdHJfY29udGFpbnMoJHByaXZhdGVLZXksICctLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0nKSkgewogICAgICAgICAgICAkcHJpdmF0ZUtleSA9ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiIgLiAKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmR3cmFwKCRwcml2YXRlS2V5LCA2NCwgIlxuIiwgdHJ1ZSkgLiAKICAgICAgICAgICAgICAgICAgICAgICAgICJcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBMb2c6OmluZm8oJ1ByaXZhdGUga2V5IGZvcm1hdCcsIFsKICAgICAgICAgICAgJ2tleScgPT4gc3Vic3RyKCRwcml2YXRlS2V5LCAwLCA1MCkgLiAnLi4uJyAvLyBMb2cgZmlyc3QgNTAgY2hhcnMgZm9yIGRlYnVnZ2luZwogICAgICAgIF0pOwoKICAgICAgICAkc2lnbmF0dXJlID0gJyc7CiAgICAgICAgb3BlbnNzbF9zaWduKAogICAgICAgICAgICAkaGVhZGVyQmFzZTY0IC4gJy4nIC4gJHBheWxvYWRCYXNlNjQsCiAgICAgICAgICAgICRzaWduYXR1cmUsCiAgICAgICAgICAgICRwcml2YXRlS2V5LAogICAgICAgICAgICBPUEVOU1NMX0FMR09fU0hBMjU2CiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAkc2lnbmF0dXJlQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZSgkc2lnbmF0dXJlKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgCiAgICAgICAgJGp3dCA9ICRoZWFkZXJCYXNlNjQgLiAnLicgLiAkcGF5bG9hZEJhc2U2NCAuICcuJyAuICRzaWduYXR1cmVCYXNlNjQ7CiAgICAgICAgCiAgICAgICAgLy8gR2V0IGFjY2VzcyB0b2tlbgogICAgICAgICRyZXNwb25zZSA9IEh0dHA6OmFzRm9ybSgpLT5wb3N0KCdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsIFsKICAgICAgICAgICAgJ2dyYW50X3R5cGUnID0+ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpqd3QtYmVhcmVyJywKICAgICAgICAgICAgJ2Fzc2VydGlvbicgPT4gJGp3dAogICAgICAgIF0pOwogICAgICAgIAogICAgICAgIGlmICghJHJlc3BvbnNlLT5zdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgTG9nOjplcnJvcignRmFpbGVkIHRvIGdldCBGQ00gYWNjZXNzIHRva2VuJywgWwogICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkcmVzcG9uc2UtPmpzb24oKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkYWNjZXNzVG9rZW4gPSAkcmVzcG9uc2UtPmpzb24oKVsnYWNjZXNzX3Rva2VuJ107CiAgICAgICAgCiAgICAgICAgLy8gRW5zdXJlIGFsbCBkYXRhIHZhbHVlcyBhcmUgc3RyaW5ncwogICAgICAgICRzdHJpbmdEYXRhID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0sICRkYXRhKTsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgdGhlIGRhdGUgaW4gUm9tYW5pYW4KICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJGRhdGFbJ3N0YXJ0X2RhdGUnXSk7CiAgICAgICAgJGRheSA9ICRkYXRlLT5mb3JtYXQoJ2QnKTsKICAgICAgICAkbW9udGggPSAkdGhpcy0+Z2V0Um9tYW5pYW5Nb250aCgkZGF0ZS0+Zm9ybWF0KCdGJykpOwogICAgICAgICR5ZWFyID0gJGRhdGUtPmZvcm1hdCgnWScpOwogICAgICAgICR0aW1lID0gJGRhdGUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgJGZvcm1hdHRlZERhdGUgPSAieyRkYXl9IHskbW9udGh9IHskeWVhcn0geyR0aW1lfSI7CiAgICAgICAgCiAgICAgICAgLy8gU2VuZCBtZXNzYWdlIHVzaW5nIHRoZSBjb3JyZWN0IEZDTSBlbmRwb2ludAogICAgICAgICRmY21FbmRwb2ludCA9ICJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy97JHByb2plY3RJZH0vbWVzc2FnZXM6c2VuZCI7CiAgICAgICAgCiAgICAgICAgJG1lc3NhZ2VSZXNwb25zZSA9IEh0dHA6OndpdGhIZWFkZXJzKFsKICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICRhY2Nlc3NUb2tlbiwKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0pLT5wb3N0KCRmY21FbmRwb2ludCwgWwogICAgICAgICAgICAnbWVzc2FnZScgPT4gWwogICAgICAgICAgICAgICAgJ3Rva2VuJyA9PiAkdG9rZW4sCiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAnRXZlbmltZW50IG5vdScsCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknID0+ICRkYXRhWydsb2NhdGlvbiddID8gCiAgICAgICAgICAgICAgICAgICAgICAgICJ7JGRhdGFbJ3RpdGxlJ119IC0geyRkYXRhWydsb2NhdGlvbiddfVxueyRmb3JtYXR0ZWREYXRlfSIgOgogICAgICAgICAgICAgICAgICAgICAgICAieyRkYXRhWyd0aXRsZSddfVxueyRmb3JtYXR0ZWREYXRlfSIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ2RhdGEnID0+ICRzdHJpbmdEYXRhLAogICAgICAgICAgICAgICAgJ2FuZHJvaWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAncHJpb3JpdHknID0+ICdoaWdoJywKICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICdzb3VuZCcgPT4gJ2RlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdhcG5zJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdW5kJyA9PiAnZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgXQogICAgICAgIF0pOwoKICAgICAgICBMb2c6OmluZm8oJ0ZDTSBtZXNzYWdlIHJlc3BvbnNlJywgWwogICAgICAgICAgICAnc3VjY2VzcycgPT4gJG1lc3NhZ2VSZXNwb25zZS0+c3VjY2Vzc2Z1bCgpLAogICAgICAgICAgICAnc3RhdHVzJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5zdGF0dXMoKSwKICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5qc29uKCksCiAgICAgICAgICAgICdlbmRwb2ludCcgPT4gJGZjbUVuZHBvaW50LAogICAgICAgICAgICAnZGF0YScgPT4gJHN0cmluZ0RhdGEKICAgICAgICBdKTsKCiAgICAgICAgcmV0dXJuICRtZXNzYWdlUmVzcG9uc2UtPnN1Y2Nlc3NmdWwoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJG1vbnRoKQogICAgewogICAgICAgICRtb250aHMgPSBbCiAgICAgICAgICAgICdKYW51YXJ5JyA9PiAnSWFudWFyaWUnLAogICAgICAgICAgICAnRmVicnVhcnknID0+ICdGZWJydWFyaWUnLAogICAgICAgICAgICAnTWFyY2gnID0+ICdNYXJ0aWUnLAogICAgICAgICAgICAnQXByaWwnID0+ICdBcHJpbGllJywKICAgICAgICAgICAgJ01heScgPT4gJ01haScsCiAgICAgICAgICAgICdKdW5lJyA9PiAnSXVuaWUnLAogICAgICAgICAgICAnSnVseScgPT4gJ0l1bGllJywKICAgICAgICAgICAgJ0F1Z3VzdCcgPT4gJ0F1Z3VzdCcsCiAgICAgICAgICAgICdTZXB0ZW1iZXInID0+ICdTZXB0ZW1icmllJywKICAgICAgICAgICAgJ09jdG9iZXInID0+ICdPY3RvbWJyaWUnLAogICAgICAgICAgICAnTm92ZW1iZXInID0+ICdOb2llbWJyaWUnLAogICAgICAgICAgICAnRGVjZW1iZXInID0+ICdEZWNlbWJyaWUnCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuICRtb250aHNbJG1vbnRoXSA/PyAkbW9udGg7CiAgICB9Cn0AAAAAAAAAAJIqAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABAAQAAAAAAACsBAAAAAAAAAAAAAAAA8L8"
				],
				[
					7,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAACSKgAAPD9waHAKCm5hbWVzcGFjZSBBcHBcQ29uc29sZVxDb21tYW5kczsKCnVzZSBJbGx1bWluYXRlXENvbnNvbGVcQ29tbWFuZDsKdXNlIEFwcFxNb2RlbHNcRXZlbnQ7CnVzZSBDYXJib25cQ2FyYm9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcSHR0cDsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXExvZzsKdXNlIEFwcFxOb3RpZmljYXRpb25zXEV2ZW50Tm90aWZpY2F0aW9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcTWFpbDsKdXNlIEFwcFxNYWlsXEV2ZW50Tm90aWZpY2F0aW9uTWFpbDsKCmNsYXNzIFNlbmRFdmVudFJlbWluZGVycyBleHRlbmRzIENvbW1hbmQKewogICAgcHJvdGVjdGVkICRzaWduYXR1cmUgPSAnZXZlbnRzOnNlbmQtcmVtaW5kZXJzJzsKICAgIHByb3RlY3RlZCAkZGVzY3JpcHRpb24gPSAnU2VuZCByZW1pbmRlcnMgZm9yIHVwY29taW5nIGV2ZW50cyc7CgogICAgcHVibGljIGZ1bmN0aW9uIGhhbmRsZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmluZm8oJ0NoZWNraW5nIGZvciBldmVudHMgdGhhdCBuZWVkIHJlbWluZGVycy4uLicpOwogICAgICAgIAogICAgICAgICRldmVudHMgPSBFdmVudDo6d2hlcmUoJ25vdGlmeV8yNGhfYmVmb3JlJywgdHJ1ZSkKICAgICAgICAgICAgLT53aGVyZSgnbm90aWZpZWRfMjRoX2JlZm9yZScsIGZhbHNlKQogICAgICAgICAgICAtPndoZXJlKCdzdGFydF9kYXRlJywgJz4nLCBub3coKSkKICAgICAgICAgICAgLT53aGVyZSgnc3RhcnRfZGF0ZScsICc8Jywgbm93KCktPmFkZERheSgpKQogICAgICAgICAgICAtPmdldCgpOwoKICAgICAgICAkZXZlbnRDb3VudCA9ICRldmVudHMtPmNvdW50KCk7CiAgICAgICAgJHRoaXMtPmluZm8oIkZvdW5kIHskZXZlbnRDb3VudH0gZXZlbnRzIHRoYXQgbmVlZCByZW1pbmRlcnMuIik7CgogICAgICAgIGlmICgkZXZlbnRDb3VudCA9PT0gMCkgewogICAgICAgICAgICAkdGhpcy0+aW5mbygnTm8gZXZlbnRzIGZvdW5kIHRoYXQgbmVlZCByZW1pbmRlcnMuJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRldmVudHMgYXMgJGV2ZW50KSB7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJQcm9jZXNzaW5nIGV2ZW50OiB7JGV2ZW50LT50aXRsZX0gKElEOiB7JGV2ZW50LT5pZH0pIik7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJTdGFydCBkYXRlOiB7JGV2ZW50LT5zdGFydF9kYXRlfSIpOwoKICAgICAgICAgICAgTG9nOjppbmZvKCdTZW5kaW5nIDI0aCByZW1pbmRlciBmb3IgZXZlbnQnLCBbCiAgICAgICAgICAgICAgICAnZXZlbnRfaWQnID0+ICRldmVudC0+aWQsCiAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRldmVudC0+dGl0bGUsCiAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJGV2ZW50LT5zdGFydF9kYXRlCiAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgJGxvZGdlID0gJGV2ZW50LT5wb3N0LT5sb2RnZTsKICAgICAgICAgICAgJG1lbWJlcnMgPSAkbG9kZ2UtPm1lbWJlcnMoKQogICAgICAgICAgICAgICAgLT53aGVyZUhhcygndXNlcicsIGZ1bmN0aW9uICgkcXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAkcXVlcnktPndoZXJlSW4oJ3JvbGUnLCBbJ21hZXN0cnUnLCAnY2FsZmEnLCAndWNlbmljJ10pOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC0+d2l0aCgndXNlcicpCiAgICAgICAgICAgICAgICAtPmdldCgpOwoKICAgICAgICAgICAgJG1lbWJlckNvdW50ID0gJG1lbWJlcnMtPmNvdW50KCk7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJGb3VuZCB7JG1lbWJlckNvdW50fSBtZW1iZXJzIHRvIG5vdGlmeSBmb3IgdGhpcyBldmVudC4iKTsKCiAgICAgICAgICAgICRtZXNzYWdlID0gIlJlbWluZGVyOiBFdmVudCB7JGV2ZW50LT50aXRsZX0gc3RhcnRzIGluIDI0IGhvdXJzIjsKCiAgICAgICAgICAgICRub3RpZmljYXRpb25zU2VudCA9IDA7CiAgICAgICAgICAgIGZvcmVhY2ggKCRtZW1iZXJzIGFzICRtZW1iZXIpIHsKICAgICAgICAgICAgICAgIC8vIFNlbmQgRkNNIG5vdGlmaWNhdGlvbiBpZiB0b2tlbiBleGlzdHMKICAgICAgICAgICAgICAgIGlmICgkbWVtYmVyLT51c2VyLT5mY21fdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW5mbygiU2VuZGluZyBGQ00gbm90aWZpY2F0aW9uIHRvIHVzZXI6IHskbWVtYmVyLT51c2VyLT5maXJzdF9uYW1lfSB7JG1lbWJlci0+dXNlci0+bGFzdF9uYW1lfSIpOwoKICAgICAgICAgICAgICAgICAgICBMb2c6OmluZm8oJ1NlbmRpbmcgRkNNIG5vdGlmaWNhdGlvbiB0byB1c2VyJywgWwogICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICdmY21fdG9rZW4nID0+ICRtZW1iZXItPnVzZXItPmZjbV90b2tlbgogICAgICAgICAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIHB1c2ggbm90aWZpY2F0aW9uIHVzaW5nIEZDTQogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c2VuZEZDTU5vdGlmaWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJG1lbWJlci0+dXNlci0+ZmNtX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdldmVudF9ub3RpZmljYXRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X2RhdGUnID0+ICRldmVudC0+c3RhcnRfZGF0ZS0+dG9Jc284NjAxU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYXRpb24nID0+ICRldmVudC0+bG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRub3RpZmljYXRpb25zU2VudCsrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgTG9nOjppbmZvKCdGQ00gbm90aWZpY2F0aW9uIHJlc3VsdCcsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gJHJlc3VsdAogICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNlbmQgZW1haWwgbm90aWZpY2F0aW9uIGlmIHVzZXIgaGFzIGVuYWJsZWQgZW1haWwgbm90aWZpY2F0aW9ucwogICAgICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXItPmVtYWlsX25vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW5mbygiU2VuZGluZyBlbWFpbCBub3RpZmljYXRpb24gdG8gdXNlcjogeyRtZW1iZXItPnVzZXItPmZpcnN0X25hbWV9IHskbWVtYmVyLT51c2VyLT5sYXN0X25hbWV9Iik7CgogICAgICAgICAgICAgICAgICAgIExvZzo6aW5mbygnQXR0ZW1wdGluZyB0byBzZW5kIGVtYWlsIG5vdGlmaWNhdGlvbicsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnID0+ICRtZW1iZXItPnVzZXItPmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICAnZW1haWxfbm90aWZpY2F0aW9ucycgPT4gJG1lbWJlci0+dXNlci0+ZW1haWxfbm90aWZpY2F0aW9ucwogICAgICAgICAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBNYWlsOjp0bygkbWVtYmVyLT51c2VyLT5lbWFpbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+c2VuZChuZXcgRXZlbnROb3RpZmljYXRpb25NYWlsKCRldmVudCwgJ3JlbWluZGVyJywgJG1lbWJlci0+dXNlcikpOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgJG5vdGlmaWNhdGlvbnNTZW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBMb2c6OmluZm8oJ0VtYWlsIG5vdGlmaWNhdGlvbiBzZW50IHN1Y2Nlc3NmdWxseScsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJG1lbWJlci0+dXNlci0+ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uX3R5cGUnID0+ICdyZW1pbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICBMb2c6OmVycm9yKCdGYWlsZWQgdG8gc2VuZCBlbWFpbCBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnID0+ICRtZW1iZXItPnVzZXItPmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlJyA9PiAkZS0+Z2V0VHJhY2VBc1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgTG9nOjppbmZvKCdTa2lwcGluZyBlbWFpbCBub3RpZmljYXRpb24gLSB1c2VyIGhhcyBkaXNhYmxlZCBub3RpZmljYXRpb25zJywgWwogICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJG1lbWJlci0+dXNlci0+ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbF9ub3RpZmljYXRpb25zJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbF9ub3RpZmljYXRpb25zCiAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJTdWNjZXNzZnVsbHkgc2VudCB7JG5vdGlmaWNhdGlvbnNTZW50fSBub3RpZmljYXRpb25zIGZvciB0aGlzIGV2ZW50LiIpOwoKICAgICAgICAgICAgJGV2ZW50LT51cGRhdGUoWydub3RpZmllZF8yNGhfYmVmb3JlJyA9PiB0cnVlXSk7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJNYXJrZWQgZXZlbnQgYXMgbm90aWZpZWQuIik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aW5mbygnRXZlbnQgcmVtaW5kZXJzIHByb2Nlc3NpbmcgY29tcGxldGVkLicpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2VuZEZDTU5vdGlmaWNhdGlvbigkdG9rZW4sICRtZXNzYWdlLCAkZGF0YSA9IFtdKQogICAgewogICAgICAgIExvZzo6aW5mbygnUHJlcGFyaW5nIEZDTSBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICd0b2tlbicgPT4gJHRva2VuLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJG1lc3NhZ2UsCiAgICAgICAgICAgICdkYXRhJyA9PiAkZGF0YQogICAgICAgIF0pOwoKICAgICAgICAkcHJvamVjdElkID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJvamVjdF9pZCcpOwogICAgICAgICRjbGllbnRFbWFpbCA9IGNvbmZpZygnc2VydmljZXMuZmNtLmNsaWVudF9lbWFpbCcpOwogICAgICAgICRwcml2YXRlS2V5ID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJpdmF0ZV9rZXknKTsKICAgICAgICAKICAgICAgICBMb2c6OmluZm8oJ0ZDTSBDb25maWd1cmF0aW9uJywgWwogICAgICAgICAgICAncHJvamVjdF9pZCcgPT4gJHByb2plY3RJZCwKICAgICAgICAgICAgJ2NsaWVudF9lbWFpbCcgPT4gJGNsaWVudEVtYWlsLAogICAgICAgICAgICAnaGFzX3ByaXZhdGVfa2V5JyA9PiAhZW1wdHkoJHByaXZhdGVLZXkpCiAgICAgICAgXSk7CiAgICAgICAgCiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICAkZXhwaXJlcyA9ICRub3cgKyAzNjAwOyAvLyBUb2tlbiBleHBpcmVzIGluIDEgaG91cgogICAgICAgIAogICAgICAgICRoZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdSUzI1NicsCiAgICAgICAgICAgICd0eXAnID0+ICdKV1QnCiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAkcGF5bG9hZCA9IFsKICAgICAgICAgICAgJ2lzcycgPT4gJGNsaWVudEVtYWlsLAogICAgICAgICAgICAnc2NvcGUnID0+ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2ZpcmViYXNlLm1lc3NhZ2luZycsCiAgICAgICAgICAgICdhdWQnID0+ICdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsCiAgICAgICAgICAgICdleHAnID0+ICRleHBpcmVzLAogICAgICAgICAgICAnaWF0JyA9PiAkbm93CiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAkaGVhZGVyQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkaGVhZGVyKSksICcrLycsICctXycpLCAnPScpOwogICAgICAgICRwYXlsb2FkQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkcGF5bG9hZCkpLCAnKy8nLCAnLV8nKSwgJz0nKTsKICAgICAgICAKICAgICAgICAvLyBDcmVhdGUgdGhlIHNpZ25hdHVyZSB1c2luZyBPcGVuU1NMCiAgICAgICAgJHByaXZhdGVLZXkgPSBzdHJfcmVwbGFjZShbJ1xuJywgJ1xyJ10sICcnLCAkcHJpdmF0ZUtleSk7CiAgICAgICAgCiAgICAgICAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGhhdmUgUEVNIGhlYWRlcnMsIGFkZCB0aGVtCiAgICAgICAgaWYgKCFzdHJfY29udGFpbnMoJHByaXZhdGVLZXksICctLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0nKSkgewogICAgICAgICAgICAkcHJpdmF0ZUtleSA9ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiIgLiAKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmR3cmFwKCRwcml2YXRlS2V5LCA2NCwgIlxuIiwgdHJ1ZSkgLiAKICAgICAgICAgICAgICAgICAgICAgICAgICJcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBMb2c6OmluZm8oJ1ByaXZhdGUga2V5IGZvcm1hdCcsIFsKICAgICAgICAgICAgJ2tleScgPT4gc3Vic3RyKCRwcml2YXRlS2V5LCAwLCA1MCkgLiAnLi4uJyAvLyBMb2cgZmlyc3QgNTAgY2hhcnMgZm9yIGRlYnVnZ2luZwogICAgICAgIF0pOwoKICAgICAgICAkc2lnbmF0dXJlID0gJyc7CiAgICAgICAgb3BlbnNzbF9zaWduKAogICAgICAgICAgICAkaGVhZGVyQmFzZTY0IC4gJy4nIC4gJHBheWxvYWRCYXNlNjQsCiAgICAgICAgICAgICRzaWduYXR1cmUsCiAgICAgICAgICAgICRwcml2YXRlS2V5LAogICAgICAgICAgICBPUEVOU1NMX0FMR09fU0hBMjU2CiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAkc2lnbmF0dXJlQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZSgkc2lnbmF0dXJlKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgCiAgICAgICAgJGp3dCA9ICRoZWFkZXJCYXNlNjQgLiAnLicgLiAkcGF5bG9hZEJhc2U2NCAuICcuJyAuICRzaWduYXR1cmVCYXNlNjQ7CiAgICAgICAgCiAgICAgICAgLy8gR2V0IGFjY2VzcyB0b2tlbgogICAgICAgICRyZXNwb25zZSA9IEh0dHA6OmFzRm9ybSgpLT5wb3N0KCdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsIFsKICAgICAgICAgICAgJ2dyYW50X3R5cGUnID0+ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpqd3QtYmVhcmVyJywKICAgICAgICAgICAgJ2Fzc2VydGlvbicgPT4gJGp3dAogICAgICAgIF0pOwogICAgICAgIAogICAgICAgIGlmICghJHJlc3BvbnNlLT5zdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgTG9nOjplcnJvcignRmFpbGVkIHRvIGdldCBGQ00gYWNjZXNzIHRva2VuJywgWwogICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkcmVzcG9uc2UtPmpzb24oKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkYWNjZXNzVG9rZW4gPSAkcmVzcG9uc2UtPmpzb24oKVsnYWNjZXNzX3Rva2VuJ107CiAgICAgICAgCiAgICAgICAgLy8gRW5zdXJlIGFsbCBkYXRhIHZhbHVlcyBhcmUgc3RyaW5ncwogICAgICAgICRzdHJpbmdEYXRhID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0sICRkYXRhKTsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgdGhlIGRhdGUgaW4gUm9tYW5pYW4KICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJGRhdGFbJ3N0YXJ0X2RhdGUnXSk7CiAgICAgICAgJGRheSA9ICRkYXRlLT5mb3JtYXQoJ2QnKTsKICAgICAgICAkbW9udGggPSAkdGhpcy0+Z2V0Um9tYW5pYW5Nb250aCgkZGF0ZS0+Zm9ybWF0KCdGJykpOwogICAgICAgICR5ZWFyID0gJGRhdGUtPmZvcm1hdCgnWScpOwogICAgICAgICR0aW1lID0gJGRhdGUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgJGZvcm1hdHRlZERhdGUgPSAieyRkYXl9IHskbW9udGh9IHskeWVhcn0geyR0aW1lfSI7CiAgICAgICAgCiAgICAgICAgLy8gU2VuZCBtZXNzYWdlIHVzaW5nIHRoZSBjb3JyZWN0IEZDTSBlbmRwb2ludAogICAgICAgICRmY21FbmRwb2ludCA9ICJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy97JHByb2plY3RJZH0vbWVzc2FnZXM6c2VuZCI7CiAgICAgICAgCiAgICAgICAgJG1lc3NhZ2VSZXNwb25zZSA9IEh0dHA6OndpdGhIZWFkZXJzKFsKICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICRhY2Nlc3NUb2tlbiwKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0pLT5wb3N0KCRmY21FbmRwb2ludCwgWwogICAgICAgICAgICAnbWVzc2FnZScgPT4gWwogICAgICAgICAgICAgICAgJ3Rva2VuJyA9PiAkdG9rZW4sCiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAnRXZlbmltZW50IG5vdScsCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknID0+ICRkYXRhWydsb2NhdGlvbiddID8gCiAgICAgICAgICAgICAgICAgICAgICAgICJ7JGRhdGFbJ3RpdGxlJ119IC0geyRkYXRhWydsb2NhdGlvbiddfVxueyRmb3JtYXR0ZWREYXRlfSIgOgogICAgICAgICAgICAgICAgICAgICAgICAieyRkYXRhWyd0aXRsZSddfVxueyRmb3JtYXR0ZWREYXRlfSIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ2RhdGEnID0+ICRzdHJpbmdEYXRhLAogICAgICAgICAgICAgICAgJ2FuZHJvaWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAncHJpb3JpdHknID0+ICdoaWdoJywKICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICdzb3VuZCcgPT4gJ2RlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdhcG5zJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdW5kJyA9PiAnZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgXQogICAgICAgIF0pOwoKICAgICAgICBMb2c6OmluZm8oJ0ZDTSBtZXNzYWdlIHJlc3BvbnNlJywgWwogICAgICAgICAgICAnc3VjY2VzcycgPT4gJG1lc3NhZ2VSZXNwb25zZS0+c3VjY2Vzc2Z1bCgpLAogICAgICAgICAgICAnc3RhdHVzJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5zdGF0dXMoKSwKICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5qc29uKCksCiAgICAgICAgICAgICdlbmRwb2ludCcgPT4gJGZjbUVuZHBvaW50LAogICAgICAgICAgICAnZGF0YScgPT4gJHN0cmluZ0RhdGEKICAgICAgICBdKTsKCiAgICAgICAgcmV0dXJuICRtZXNzYWdlUmVzcG9uc2UtPnN1Y2Nlc3NmdWwoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJG1vbnRoKQogICAgewogICAgICAgICRtb250aHMgPSBbCiAgICAgICAgICAgICdKYW51YXJ5JyA9PiAnSWFudWFyaWUnLAogICAgICAgICAgICAnRmVicnVhcnknID0+ICdGZWJydWFyaWUnLAogICAgICAgICAgICAnTWFyY2gnID0+ICdNYXJ0aWUnLAogICAgICAgICAgICAnQXByaWwnID0+ICdBcHJpbGllJywKICAgICAgICAgICAgJ01heScgPT4gJ01haScsCiAgICAgICAgICAgICdKdW5lJyA9PiAnSXVuaWUnLAogICAgICAgICAgICAnSnVseScgPT4gJ0l1bGllJywKICAgICAgICAgICAgJ0F1Z3VzdCcgPT4gJ0F1Z3VzdCcsCiAgICAgICAgICAgICdTZXB0ZW1iZXInID0+ICdTZXB0ZW1icmllJywKICAgICAgICAgICAgJ09jdG9iZXInID0+ICdPY3RvbWJyaWUnLAogICAgICAgICAgICAnTm92ZW1iZXInID0+ICdOb2llbWJyaWUnLAogICAgICAgICAgICAnRGVjZW1iZXInID0+ICdEZWNlbWJyaWUnCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuICRtb250aHNbJG1vbnRoXSA/PyAkbW9udGg7CiAgICB9Cn0AAAAAAAAAAJIqAAAAAAAAAAAAAAAAAAAAAAAAkioAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABAAQAAAAAAACsBAAAAAAAAAAAAAAAA8L8"
				],
				[
					4,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACSKgAAPD9waHAKCm5hbWVzcGFjZSBBcHBcQ29uc29sZVxDb21tYW5kczsKCnVzZSBJbGx1bWluYXRlXENvbnNvbGVcQ29tbWFuZDsKdXNlIEFwcFxNb2RlbHNcRXZlbnQ7CnVzZSBDYXJib25cQ2FyYm9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcSHR0cDsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXExvZzsKdXNlIEFwcFxOb3RpZmljYXRpb25zXEV2ZW50Tm90aWZpY2F0aW9uOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcTWFpbDsKdXNlIEFwcFxNYWlsXEV2ZW50Tm90aWZpY2F0aW9uTWFpbDsKCmNsYXNzIFNlbmRFdmVudFJlbWluZGVycyBleHRlbmRzIENvbW1hbmQKewogICAgcHJvdGVjdGVkICRzaWduYXR1cmUgPSAnZXZlbnRzOnNlbmQtcmVtaW5kZXJzJzsKICAgIHByb3RlY3RlZCAkZGVzY3JpcHRpb24gPSAnU2VuZCByZW1pbmRlcnMgZm9yIHVwY29taW5nIGV2ZW50cyc7CgogICAgcHVibGljIGZ1bmN0aW9uIGhhbmRsZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmluZm8oJ0NoZWNraW5nIGZvciBldmVudHMgdGhhdCBuZWVkIHJlbWluZGVycy4uLicpOwogICAgICAgIAogICAgICAgICRldmVudHMgPSBFdmVudDo6d2hlcmUoJ25vdGlmeV8yNGhfYmVmb3JlJywgdHJ1ZSkKICAgICAgICAgICAgLT53aGVyZSgnbm90aWZpZWRfMjRoX2JlZm9yZScsIGZhbHNlKQogICAgICAgICAgICAtPndoZXJlKCdzdGFydF9kYXRlJywgJz4nLCBub3coKSkKICAgICAgICAgICAgLT53aGVyZSgnc3RhcnRfZGF0ZScsICc8Jywgbm93KCktPmFkZERheSgpKQogICAgICAgICAgICAtPmdldCgpOwoKICAgICAgICAkZXZlbnRDb3VudCA9ICRldmVudHMtPmNvdW50KCk7CiAgICAgICAgJHRoaXMtPmluZm8oIkZvdW5kIHskZXZlbnRDb3VudH0gZXZlbnRzIHRoYXQgbmVlZCByZW1pbmRlcnMuIik7CgogICAgICAgIGlmICgkZXZlbnRDb3VudCA9PT0gMCkgewogICAgICAgICAgICAkdGhpcy0+aW5mbygnTm8gZXZlbnRzIGZvdW5kIHRoYXQgbmVlZCByZW1pbmRlcnMuJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRldmVudHMgYXMgJGV2ZW50KSB7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJQcm9jZXNzaW5nIGV2ZW50OiB7JGV2ZW50LT50aXRsZX0gKElEOiB7JGV2ZW50LT5pZH0pIik7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJTdGFydCBkYXRlOiB7JGV2ZW50LT5zdGFydF9kYXRlfSIpOwoKICAgICAgICAgICAgTG9nOjppbmZvKCdTZW5kaW5nIDI0aCByZW1pbmRlciBmb3IgZXZlbnQnLCBbCiAgICAgICAgICAgICAgICAnZXZlbnRfaWQnID0+ICRldmVudC0+aWQsCiAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRldmVudC0+dGl0bGUsCiAgICAgICAgICAgICAgICAnc3RhcnRfZGF0ZScgPT4gJGV2ZW50LT5zdGFydF9kYXRlCiAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgJGxvZGdlID0gJGV2ZW50LT5wb3N0LT5sb2RnZTsKICAgICAgICAgICAgJG1lbWJlcnMgPSAkbG9kZ2UtPm1lbWJlcnMoKQogICAgICAgICAgICAgICAgLT53aGVyZUhhcygndXNlcicsIGZ1bmN0aW9uICgkcXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAkcXVlcnktPndoZXJlSW4oJ3JvbGUnLCBbJ21hZXN0cnUnLCAnY2FsZmEnLCAndWNlbmljJ10pOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC0+d2l0aCgndXNlcicpCiAgICAgICAgICAgICAgICAtPmdldCgpOwoKICAgICAgICAgICAgJG1lbWJlckNvdW50ID0gJG1lbWJlcnMtPmNvdW50KCk7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJGb3VuZCB7JG1lbWJlckNvdW50fSBtZW1iZXJzIHRvIG5vdGlmeSBmb3IgdGhpcyBldmVudC4iKTsKCiAgICAgICAgICAgICRtZXNzYWdlID0gIlJlbWluZGVyOiBFdmVudCB7JGV2ZW50LT50aXRsZX0gc3RhcnRzIGluIDI0IGhvdXJzIjsKCiAgICAgICAgICAgICRub3RpZmljYXRpb25zU2VudCA9IDA7CiAgICAgICAgICAgIGZvcmVhY2ggKCRtZW1iZXJzIGFzICRtZW1iZXIpIHsKICAgICAgICAgICAgICAgIC8vIFNlbmQgRkNNIG5vdGlmaWNhdGlvbiBpZiB0b2tlbiBleGlzdHMKICAgICAgICAgICAgICAgIGlmICgkbWVtYmVyLT51c2VyLT5mY21fdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW5mbygiU2VuZGluZyBGQ00gbm90aWZpY2F0aW9uIHRvIHVzZXI6IHskbWVtYmVyLT51c2VyLT5maXJzdF9uYW1lfSB7JG1lbWJlci0+dXNlci0+bGFzdF9uYW1lfSIpOwoKICAgICAgICAgICAgICAgICAgICBMb2c6OmluZm8oJ1NlbmRpbmcgRkNNIG5vdGlmaWNhdGlvbiB0byB1c2VyJywgWwogICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICdmY21fdG9rZW4nID0+ICRtZW1iZXItPnVzZXItPmZjbV90b2tlbgogICAgICAgICAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgICAgICAgICAvLyBTZW5kIHB1c2ggbm90aWZpY2F0aW9uIHVzaW5nIEZDTQogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+c2VuZEZDTU5vdGlmaWNhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJG1lbWJlci0+dXNlci0+ZmNtX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdldmVudF9ub3RpZmljYXRpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAkZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X2RhdGUnID0+ICRldmVudC0+c3RhcnRfZGF0ZS0+dG9Jc284NjAxU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jYXRpb24nID0+ICRldmVudC0+bG9jYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRub3RpZmljYXRpb25zU2VudCsrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgTG9nOjppbmZvKCdGQ00gbm90aWZpY2F0aW9uIHJlc3VsdCcsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gJHJlc3VsdAogICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFNlbmQgZW1haWwgbm90aWZpY2F0aW9uIGlmIHVzZXIgaGFzIGVuYWJsZWQgZW1haWwgbm90aWZpY2F0aW9ucwogICAgICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXItPmVtYWlsX25vdGlmaWNhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aW5mbygiU2VuZGluZyBlbWFpbCBub3RpZmljYXRpb24gdG8gdXNlcjogeyRtZW1iZXItPnVzZXItPmZpcnN0X25hbWV9IHskbWVtYmVyLT51c2VyLT5sYXN0X25hbWV9Iik7CgogICAgICAgICAgICAgICAgICAgIExvZzo6aW5mbygnQXR0ZW1wdGluZyB0byBzZW5kIGVtYWlsIG5vdGlmaWNhdGlvbicsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnID0+ICRtZW1iZXItPnVzZXItPmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICAnZW1haWxfbm90aWZpY2F0aW9ucycgPT4gJG1lbWJlci0+dXNlci0+ZW1haWxfbm90aWZpY2F0aW9ucwogICAgICAgICAgICAgICAgICAgIF0pOwoKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICBNYWlsOjp0bygkbWVtYmVyLT51c2VyLT5lbWFpbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+c2VuZChuZXcgRXZlbnROb3RpZmljYXRpb25NYWlsKCRldmVudCwgJ3JlbWluZGVyJywgJG1lbWJlci0+dXNlcikpOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgJG5vdGlmaWNhdGlvbnNTZW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBMb2c6OmluZm8oJ0VtYWlsIG5vdGlmaWNhdGlvbiBzZW50IHN1Y2Nlc3NmdWxseScsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJG1lbWJlci0+dXNlci0+ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uX3R5cGUnID0+ICdyZW1pbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICAgICBMb2c6OmVycm9yKCdGYWlsZWQgdG8gc2VuZCBlbWFpbCBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnID0+ICRtZW1iZXItPnVzZXItPmVtYWlsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAkZS0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlJyA9PiAkZS0+Z2V0VHJhY2VBc1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgTG9nOjppbmZvKCdTa2lwcGluZyBlbWFpbCBub3RpZmljYXRpb24gLSB1c2VyIGhhcyBkaXNhYmxlZCBub3RpZmljYXRpb25zJywgWwogICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlci0+aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJG1lbWJlci0+dXNlci0+ZW1haWwsCiAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbF9ub3RpZmljYXRpb25zJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbF9ub3RpZmljYXRpb25zCiAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJTdWNjZXNzZnVsbHkgc2VudCB7JG5vdGlmaWNhdGlvbnNTZW50fSBub3RpZmljYXRpb25zIGZvciB0aGlzIGV2ZW50LiIpOwoKICAgICAgICAgICAgJGV2ZW50LT51cGRhdGUoWydub3RpZmllZF8yNGhfYmVmb3JlJyA9PiB0cnVlXSk7CiAgICAgICAgICAgICR0aGlzLT5pbmZvKCJNYXJrZWQgZXZlbnQgYXMgbm90aWZpZWQuIik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+aW5mbygnRXZlbnQgcmVtaW5kZXJzIHByb2Nlc3NpbmcgY29tcGxldGVkLicpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2VuZEZDTU5vdGlmaWNhdGlvbigkdG9rZW4sICRtZXNzYWdlLCAkZGF0YSA9IFtdKQogICAgewogICAgICAgIExvZzo6aW5mbygnUHJlcGFyaW5nIEZDTSBub3RpZmljYXRpb24nLCBbCiAgICAgICAgICAgICd0b2tlbicgPT4gJHRva2VuLAogICAgICAgICAgICAnbWVzc2FnZScgPT4gJG1lc3NhZ2UsCiAgICAgICAgICAgICdkYXRhJyA9PiAkZGF0YQogICAgICAgIF0pOwoKICAgICAgICAkcHJvamVjdElkID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJvamVjdF9pZCcpOwogICAgICAgICRjbGllbnRFbWFpbCA9IGNvbmZpZygnc2VydmljZXMuZmNtLmNsaWVudF9lbWFpbCcpOwogICAgICAgICRwcml2YXRlS2V5ID0gY29uZmlnKCdzZXJ2aWNlcy5mY20ucHJpdmF0ZV9rZXknKTsKICAgICAgICAKICAgICAgICBMb2c6OmluZm8oJ0ZDTSBDb25maWd1cmF0aW9uJywgWwogICAgICAgICAgICAncHJvamVjdF9pZCcgPT4gJHByb2plY3RJZCwKICAgICAgICAgICAgJ2NsaWVudF9lbWFpbCcgPT4gJGNsaWVudEVtYWlsLAogICAgICAgICAgICAnaGFzX3ByaXZhdGVfa2V5JyA9PiAhZW1wdHkoJHByaXZhdGVLZXkpCiAgICAgICAgXSk7CiAgICAgICAgCiAgICAgICAgJG5vdyA9IHRpbWUoKTsKICAgICAgICAkZXhwaXJlcyA9ICRub3cgKyAzNjAwOyAvLyBUb2tlbiBleHBpcmVzIGluIDEgaG91cgogICAgICAgIAogICAgICAgICRoZWFkZXIgPSBbCiAgICAgICAgICAgICdhbGcnID0+ICdSUzI1NicsCiAgICAgICAgICAgICd0eXAnID0+ICdKV1QnCiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAkcGF5bG9hZCA9IFsKICAgICAgICAgICAgJ2lzcycgPT4gJGNsaWVudEVtYWlsLAogICAgICAgICAgICAnc2NvcGUnID0+ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL2ZpcmViYXNlLm1lc3NhZ2luZycsCiAgICAgICAgICAgICdhdWQnID0+ICdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsCiAgICAgICAgICAgICdleHAnID0+ICRleHBpcmVzLAogICAgICAgICAgICAnaWF0JyA9PiAkbm93CiAgICAgICAgXTsKICAgICAgICAKICAgICAgICAkaGVhZGVyQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkaGVhZGVyKSksICcrLycsICctXycpLCAnPScpOwogICAgICAgICRwYXlsb2FkQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkcGF5bG9hZCkpLCAnKy8nLCAnLV8nKSwgJz0nKTsKICAgICAgICAKICAgICAgICAvLyBDcmVhdGUgdGhlIHNpZ25hdHVyZSB1c2luZyBPcGVuU1NMCiAgICAgICAgJHByaXZhdGVLZXkgPSBzdHJfcmVwbGFjZShbJ1xuJywgJ1xyJ10sICcnLCAkcHJpdmF0ZUtleSk7CiAgICAgICAgCiAgICAgICAgLy8gSWYgdGhlIGtleSBkb2Vzbid0IGhhdmUgUEVNIGhlYWRlcnMsIGFkZCB0aGVtCiAgICAgICAgaWYgKCFzdHJfY29udGFpbnMoJHByaXZhdGVLZXksICctLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0nKSkgewogICAgICAgICAgICAkcHJpdmF0ZUtleSA9ICItLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiIgLiAKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmR3cmFwKCRwcml2YXRlS2V5LCA2NCwgIlxuIiwgdHJ1ZSkgLiAKICAgICAgICAgICAgICAgICAgICAgICAgICJcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0iOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBMb2c6OmluZm8oJ1ByaXZhdGUga2V5IGZvcm1hdCcsIFsKICAgICAgICAgICAgJ2tleScgPT4gc3Vic3RyKCRwcml2YXRlS2V5LCAwLCA1MCkgLiAnLi4uJyAvLyBMb2cgZmlyc3QgNTAgY2hhcnMgZm9yIGRlYnVnZ2luZwogICAgICAgIF0pOwoKICAgICAgICAkc2lnbmF0dXJlID0gJyc7CiAgICAgICAgb3BlbnNzbF9zaWduKAogICAgICAgICAgICAkaGVhZGVyQmFzZTY0IC4gJy4nIC4gJHBheWxvYWRCYXNlNjQsCiAgICAgICAgICAgICRzaWduYXR1cmUsCiAgICAgICAgICAgICRwcml2YXRlS2V5LAogICAgICAgICAgICBPUEVOU1NMX0FMR09fU0hBMjU2CiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAkc2lnbmF0dXJlQmFzZTY0ID0gcnRyaW0oc3RydHIoYmFzZTY0X2VuY29kZSgkc2lnbmF0dXJlKSwgJysvJywgJy1fJyksICc9Jyk7CiAgICAgICAgCiAgICAgICAgJGp3dCA9ICRoZWFkZXJCYXNlNjQgLiAnLicgLiAkcGF5bG9hZEJhc2U2NCAuICcuJyAuICRzaWduYXR1cmVCYXNlNjQ7CiAgICAgICAgCiAgICAgICAgLy8gR2V0IGFjY2VzcyB0b2tlbgogICAgICAgICRyZXNwb25zZSA9IEh0dHA6OmFzRm9ybSgpLT5wb3N0KCdodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbicsIFsKICAgICAgICAgICAgJ2dyYW50X3R5cGUnID0+ICd1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTpqd3QtYmVhcmVyJywKICAgICAgICAgICAgJ2Fzc2VydGlvbicgPT4gJGp3dAogICAgICAgIF0pOwogICAgICAgIAogICAgICAgIGlmICghJHJlc3BvbnNlLT5zdWNjZXNzZnVsKCkpIHsKICAgICAgICAgICAgTG9nOjplcnJvcignRmFpbGVkIHRvIGdldCBGQ00gYWNjZXNzIHRva2VuJywgWwogICAgICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkcmVzcG9uc2UtPmpzb24oKQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkYWNjZXNzVG9rZW4gPSAkcmVzcG9uc2UtPmpzb24oKVsnYWNjZXNzX3Rva2VuJ107CiAgICAgICAgCiAgICAgICAgLy8gRW5zdXJlIGFsbCBkYXRhIHZhbHVlcyBhcmUgc3RyaW5ncwogICAgICAgICRzdHJpbmdEYXRhID0gYXJyYXlfbWFwKGZ1bmN0aW9uKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgJHZhbHVlOwogICAgICAgIH0sICRkYXRhKTsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgdGhlIGRhdGUgaW4gUm9tYW5pYW4KICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJGRhdGFbJ3N0YXJ0X2RhdGUnXSk7CiAgICAgICAgJGRheSA9ICRkYXRlLT5mb3JtYXQoJ2QnKTsKICAgICAgICAkbW9udGggPSAkdGhpcy0+Z2V0Um9tYW5pYW5Nb250aCgkZGF0ZS0+Zm9ybWF0KCdGJykpOwogICAgICAgICR5ZWFyID0gJGRhdGUtPmZvcm1hdCgnWScpOwogICAgICAgICR0aW1lID0gJGRhdGUtPmZvcm1hdCgnSDppJyk7CiAgICAgICAgJGZvcm1hdHRlZERhdGUgPSAieyRkYXl9IHskbW9udGh9IHskeWVhcn0geyR0aW1lfSI7CiAgICAgICAgCiAgICAgICAgLy8gU2VuZCBtZXNzYWdlIHVzaW5nIHRoZSBjb3JyZWN0IEZDTSBlbmRwb2ludAogICAgICAgICRmY21FbmRwb2ludCA9ICJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbS92MS9wcm9qZWN0cy97JHByb2plY3RJZH0vbWVzc2FnZXM6c2VuZCI7CiAgICAgICAgCiAgICAgICAgJG1lc3NhZ2VSZXNwb25zZSA9IEh0dHA6OndpdGhIZWFkZXJzKFsKICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nID0+ICdCZWFyZXIgJyAuICRhY2Nlc3NUb2tlbiwKICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgIF0pLT5wb3N0KCRmY21FbmRwb2ludCwgWwogICAgICAgICAgICAnbWVzc2FnZScgPT4gWwogICAgICAgICAgICAgICAgJ3Rva2VuJyA9PiAkdG9rZW4sCiAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJyA9PiAnRXZlbmltZW50IG5vdScsCiAgICAgICAgICAgICAgICAgICAgJ2JvZHknID0+ICRkYXRhWydsb2NhdGlvbiddID8gCiAgICAgICAgICAgICAgICAgICAgICAgICJ7JGRhdGFbJ3RpdGxlJ119IC0geyRkYXRhWydsb2NhdGlvbiddfVxueyRmb3JtYXR0ZWREYXRlfSIgOgogICAgICAgICAgICAgICAgICAgICAgICAieyRkYXRhWyd0aXRsZSddfVxueyRmb3JtYXR0ZWREYXRlfSIsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ2RhdGEnID0+ICRzdHJpbmdEYXRhLAogICAgICAgICAgICAgICAgJ2FuZHJvaWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAncHJpb3JpdHknID0+ICdoaWdoJywKICAgICAgICAgICAgICAgICAgICAnbm90aWZpY2F0aW9uJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICdzb3VuZCcgPT4gJ2RlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdhcG5zJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnID0+IFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcycgPT4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdW5kJyA9PiAnZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgXQogICAgICAgIF0pOwoKICAgICAgICBMb2c6OmluZm8oJ0ZDTSBtZXNzYWdlIHJlc3BvbnNlJywgWwogICAgICAgICAgICAnc3VjY2VzcycgPT4gJG1lc3NhZ2VSZXNwb25zZS0+c3VjY2Vzc2Z1bCgpLAogICAgICAgICAgICAnc3RhdHVzJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5zdGF0dXMoKSwKICAgICAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkbWVzc2FnZVJlc3BvbnNlLT5qc29uKCksCiAgICAgICAgICAgICdlbmRwb2ludCcgPT4gJGZjbUVuZHBvaW50LAogICAgICAgICAgICAnZGF0YScgPT4gJHN0cmluZ0RhdGEKICAgICAgICBdKTsKCiAgICAgICAgcmV0dXJuICRtZXNzYWdlUmVzcG9uc2UtPnN1Y2Nlc3NmdWwoKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJG1vbnRoKQogICAgewogICAgICAgICRtb250aHMgPSBbCiAgICAgICAgICAgICdKYW51YXJ5JyA9PiAnSWFudWFyaWUnLAogICAgICAgICAgICAnRmVicnVhcnknID0+ICdGZWJydWFyaWUnLAogICAgICAgICAgICAnTWFyY2gnID0+ICdNYXJ0aWUnLAogICAgICAgICAgICAnQXByaWwnID0+ICdBcHJpbGllJywKICAgICAgICAgICAgJ01heScgPT4gJ01haScsCiAgICAgICAgICAgICdKdW5lJyA9PiAnSXVuaWUnLAogICAgICAgICAgICAnSnVseScgPT4gJ0l1bGllJywKICAgICAgICAgICAgJ0F1Z3VzdCcgPT4gJ0F1Z3VzdCcsCiAgICAgICAgICAgICdTZXB0ZW1iZXInID0+ICdTZXB0ZW1icmllJywKICAgICAgICAgICAgJ09jdG9iZXInID0+ICdPY3RvbWJyaWUnLAogICAgICAgICAgICAnTm92ZW1iZXInID0+ICdOb2llbWJyaWUnLAogICAgICAgICAgICAnRGVjZW1iZXInID0+ICdEZWNlbWJyaWUnCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuICRtb250aHNbJG1vbnRoXSA/PyAkbW9udGg7CiAgICB9Cn0AAAAAAAAAANkqAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAJgMAAAAAAAAmAwAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "resources/js/Components/Member/RightSidebar.vue",
			"settings":
			{
				"buffer_size": 40826,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					532,
					2,
					"left_delete",
					null,
					"AgAAAPZLAAAAAAAA9ksAAAAAAAA1AAAAICAgIGNvbnNvbGUubG9nKCdbQWRkVG9DYWxlbmRhcl0gUmF3IGV2ZW50OicsIGV2ZW50KTv1SwAAAAAAAPVLAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAArTAAAAAAAAPZLAAAAAAAAAAAAAAAA8L8"
				],
				[
					535,
					2,
					"left_delete",
					null,
					"AgAAANJMAAAAAAAA0kwAAAAAAACdAAAAICAgIGNvbnNvbGUubG9nKCdbQWRkVG9DYWxlbmRhcl0gQ29tcHV0ZWQgc3RhcnREYXRlOicsIHN0YXJ0RGF0ZS50b0lTT1N0cmluZygpKTsKICAgIGNvbnNvbGUubG9nKCdbQWRkVG9DYWxlbmRhcl0gQ29tcHV0ZWQgZW5kRGF0ZTonLCBlbmREYXRlLnRvSVNPU3RyaW5nKCkpO9FMAAAAAAAA0UwAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABvTQAAAAAAANJMAAAAAAAAAAAAAAAA8L8"
				],
				[
					583,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAAAtkgAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgd2F0Y2gsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKaW1wb3J0IHsgdXNlUGFnZSwgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1vZGFsIGZyb20gJ0AvQ29tcG9uZW50cy9Nb2RhbC52dWUnOwppbXBvcnQgRWNobyBmcm9tICdsYXJhdmVsLWVjaG8nOwoKY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsncG9sbC11cGRhdGVkJywgJ3JlZnJlc2gtZXZlbnRzJ10pOwoKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBldmVudHM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIHVzZXI6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBsb2RnZTogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogZmFsc2UsCiAgICAgICAgZGVmYXVsdDogbnVsbAogICAgfQp9KTsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7CmNvbnN0IHVzZXIgPSBwYWdlLnByb3BzLmF1dGgudXNlcjsKCi8vIENyZWF0ZSBhIHJlYWN0aXZlIHJlZmVyZW5jZSBmb3IgZXZlbnRzCmNvbnN0IGxvY2FsRXZlbnRzID0gcmVmKFsuLi5wcm9wcy5ldmVudHNdKTsKCi8vIEluaXRpYWxpemUgRWNobwpsZXQgZWNobyA9IG51bGw7CgovLyBXYXRjaCBmb3IgY2hhbmdlcyBpbiBwcm9wcy5ldmVudHMKd2F0Y2goKCkgPT4gcHJvcHMuZXZlbnRzLCAobmV3RXZlbnRzKSA9PiB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdFdmVudHMpICYmIG5ld0V2ZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gTWVyZ2UgbmV3IGV2ZW50cyB3aXRoIGV4aXN0aW5nIG9uZXMsIGF2b2lkaW5nIGR1cGxpY2F0ZXMKICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQobG9jYWxFdmVudHMudmFsdWUubWFwKGUgPT4gZS5pZCkpOwogICAgICAgIGNvbnN0IHVuaXF1ZU5ld0V2ZW50cyA9IG5ld0V2ZW50cy5maWx0ZXIoZSA9PiAhZXhpc3RpbmdJZHMuaGFzKGUuaWQpKTsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgLi4udW5pcXVlTmV3RXZlbnRzXTsKICAgIH0KfSwgeyBkZWVwOiB0cnVlIH0pOwoKLy8gQWRkIGEgY29tcHV0ZWQgcHJvcGVydHkgdG8gZW5zdXJlIGV2ZW50cyBoYXZlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZQpjb25zdCBwcm9jZXNzZWRFdmVudHMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gcHJvcHMuZXZlbnRzLm1hcChldmVudCA9PiAoewogICAgICAgIC4uLmV2ZW50LAogICAgICAgIGVuZF9kYXRlOiBldmVudC5lbmRfZGF0ZSB8fCBldmVudC5ldmVudD8uZW5kX2RhdGUgfHwgbnVsbAogICAgfSkpOwp9KTsKCi8vIFVwZGF0ZSB0aGUgbmV4dEV2ZW50IGNvbXB1dGVkIHByb3BlcnR5IHRvIHVzZSBwcm9jZXNzZWRFdmVudHMKY29uc3QgbmV4dEV2ZW50ID0gY29tcHV0ZWQoKCkgPT4gewogICAgaWYgKCFwcm9jZXNzZWRFdmVudHMudmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIAogICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTsKICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHMudmFsdWUKICAgICAgICAuZmlsdGVyKGV2ZW50ID0+IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUpID4gbm93KQogICAgICAgIC5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpIC0gbmV3IERhdGUoYi5zdGFydF9kYXRlKSlbMF07Cn0pOwoKY29uc3QgaW5pdGlhbGl6ZUVjaG8zID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIHBvc3RzIGNoYW5uZWwKICAgICAgICBjb25zdCBjaGFubmVsID0gd2luZG93LkVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAKICAgICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzIC0gb25seSBsaXN0ZW4gdG8gb25lIHZlcnNpb24gb2YgdGhlIGV2ZW50CiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJ1BvbGxWb3RlVXBkYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhLnBvbGwpIHsKICAgICAgICAgICAgICAgIC8vIERlYm91bmNlIHRoZSB1cGRhdGUgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZwogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5wb2xsVXBkYXRlVGltZW91dCkgewogICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh3aW5kb3cucG9sbFVwZGF0ZVRpbWVvdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2luZG93LnBvbGxVcGRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaGFuZGxlUG9sbFVwZGF0ZShkYXRhKTsKICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBQb3N0RGVsZXRlZCBldmVudAogICAgICAgIGNoYW5uZWwubGlzdGVuKCcuUG9zdERlbGV0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3Bvc3RfaWQnIGluIGRhdGEpIHsKICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgZnJvbSBsb2NhbEV2ZW50cyBieSBtYXRjaGluZyBlaXRoZXIgcG9zdF9pZCBvciBpZAogICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBsb2NhbEV2ZW50cy52YWx1ZS5maWx0ZXIoZXZlbnQgPT4gCiAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgIT09IGRhdGEucG9zdF9pZCAmJiBldmVudC5wb3N0X2lkICE9PSBkYXRhLnBvc3RfaWQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIHJlYWN0aXZlIHVwZGF0ZQogICAgICAgICAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIExpc3RlbiBmb3IgcG9sbC11cGRhdGVkIGV2ZW50cyBmcm9tIHRoZSBGZWVkIGNvbXBvbmVudAogICAgICAgIGNoYW5uZWwubGlzdGVuKCdwb2xsLXVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YS5wb2xsSWQgJiYgZGF0YS5wb2xsRGF0YSkgewogICAgICAgICAgICAgICAgaGFuZGxlUG9sbFVwZGF0ZSh7CiAgICAgICAgICAgICAgICAgICAgcG9sbDogewogICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5wb2xsSWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEucG9sbERhdGEKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIEV2ZW50Q3JlYXRlZCB0byB1cGRhdGUgZXZlbnRzIGluIHJlYWwgdGltZQogICAgICAgIGNoYW5uZWwubGlzdGVuKCcuRXZlbnRDcmVhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0ICYmIGRhdGEucG9zdC5ldmVudCkgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZXZlbnQgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IGxvY2FsRXZlbnRzLnZhbHVlLnNvbWUoZXYgPT4gCiAgICAgICAgICAgICAgICAgICAgZXYuaWQgPT09IGRhdGEucG9zdC5ldmVudC5pZCB8fCAKICAgICAgICAgICAgICAgICAgICBldi5wb3N0X2lkID09PSBkYXRhLnBvc3QuaWQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IHRoZSBldmVudCBhcyBuZWVkZWQgZm9yIHlvdXIgc2lkZWJhciAobWF0Y2ggdGhlIHN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEucG9zdC5ldmVudC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9pZDogZGF0YS5wb3N0LmlkLAogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5wb3N0LmV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5wb3N0LmV2ZW50LmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGU6IGRhdGEucG9zdC5ldmVudC5lbmRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGRhdGEucG9zdC5ldmVudC5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZGF0YS5wb3N0LmF1dGhvciA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2RhdGEucG9zdC5hdXRob3IuZmlyc3RfbmFtZX0gJHtkYXRhLnBvc3QuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGRhdGEucG9zdC5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZGF0YS5wb3N0LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBkYXRhLnBvc3QuZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBkYXRhLnBvc3QuZXZlbnQucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGRhdGEucG9zdC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGRhdGEucG9zdC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBkYXRhLnBvc3QuZXZlbnQucG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBkYXRhLnBvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGFuZCBzb3J0IGJ5IHN0YXJ0X2RhdGUKICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlLCBuZXdFdmVudF0uc29ydCgoYSwgYikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUoYi5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tSaWdodFNpZGViYXJdIEludmFsaWQgZXZlbnQgZGF0YSByZWNlaXZlZDonLCBkYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIEV2ZW50VXBkYXRlZCB0byB1cGRhdGUgZXZlbnRzIGluIHJlYWwgdGltZQogICAgICAgIGNoYW5uZWwubGlzdGVuKCdFdmVudFVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBvc3QgJiYgZGF0YS5wb3N0LmV2ZW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGV2ZW50IElEIGZyb20gdGhlIHBvc3QncyBldmVudCBvYmplY3QKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SWQgPSBkYXRhLnBvc3QuZXZlbnQuaWQ7CiAgICAgICAgICAgICAgICBjb25zdCBwb3N0SWQgPSBkYXRhLnBvc3QuaWQ7CgogICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgaW4gbG9jYWxFdmVudHMgYnkgcG9zdCBJRCBmaXJzdAogICAgICAgICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbmRJbmRleChldiA9PiB7CiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGJ5IHBvc3QgSUQgZmlyc3QKICAgICAgICAgICAgICAgICAgICBpZiAoZXYucG9zdF9pZCA9PT0gcG9zdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIHRyeSB0byBtYXRjaCBieSBldmVudCBJRAogICAgICAgICAgICAgICAgICAgIGlmIChldi5pZCA9PT0gZXZlbnRJZCB8fCBldi5pZCA9PT0gcG9zdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGV2ZW50IGRhdGEgaWYgZm91bmQKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSBldmVudEluZGV4ICE9PSAtMSA/IGxvY2FsRXZlbnRzLnZhbHVlW2V2ZW50SW5kZXhdIDogbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgbGV0IHBvbGxEYXRhID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvc3QuZXZlbnQucG9sbCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUG9sbCA9IGV4aXN0aW5nRXZlbnQ/LnBvbGw7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UG9sbCA9IGRhdGEucG9zdC5ldmVudC5wb2xsOwoKICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBtYXBwaW5nIG9mIG9sZCBvcHRpb25zIHRvIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTWFwcGluZyA9IHt9OwogICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1BvbGw/Lm9wdGlvbnMgJiYgbmV3UG9sbC5vcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUG9sbC5vcHRpb25zLmZvckVhY2goKG9sZE9wdGlvbiwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQb2xsLm9wdGlvbnNbaW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTWFwcGluZ1tvbGRPcHRpb25dID0gbmV3UG9sbC5vcHRpb25zW2luZGV4XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNYXAgdm90ZSBjb3VudHMgdG8gbmV3IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWb3RlQ291bnRzID0ge307CiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nUG9sbD8udm90ZV9jb3VudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXhpc3RpbmdQb2xsLnZvdGVfY291bnRzKS5mb3JFYWNoKChbb2xkT3B0aW9uLCBjb3VudF0pID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbiA9IG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdPcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWb3RlQ291bnRzW25ld09wdGlvbl0gPSBjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNYXAgdm90ZXMgdG8gbmV3IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWb3RlcyA9IGV4aXN0aW5nUG9sbD8udm90ZXM/Lm1hcCh2b3RlID0+ICh7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZvdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX29wdGlvbnM6IHZvdGUuc2VsZWN0ZWRfb3B0aW9ucy5tYXAob2xkT3B0aW9uID0+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTWFwcGluZ1tvbGRPcHRpb25dIHx8IG9sZE9wdGlvbgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgfSkpIHx8IFtdOwoKICAgICAgICAgICAgICAgICAgICBwb2xsRGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5ld1BvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBuZXdQb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBuZXdQb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogbmV3UG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBuZXdWb3RlcywKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IG5ld1ZvdGVDb3VudHMKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZvcm1hdCB0aGUgdXBkYXRlZCBldmVudAogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50ID0gewogICAgICAgICAgICAgICAgICAgIGlkOiBldmVudElkLAogICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IHBvc3RJZCwKICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5wb3N0LmV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLnBvc3QuZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZGF0YS5wb3N0LmV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGU6IGRhdGEucG9zdC5ldmVudC5lbmRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZGF0YS5wb3N0LmV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGRhdGEucG9zdC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2RhdGEucG9zdC5hdXRob3IuZmlyc3RfbmFtZX0gJHtkYXRhLnBvc3QuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBkYXRhLnBvc3QuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZGF0YS5wb3N0LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGRhdGEucG9zdC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogcG9sbERhdGEKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZXZlbnQgaW4gdGhlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50c1tldmVudEluZGV4XSA9IHVwZGF0ZWRFdmVudDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBTb3J0IGJ5IHN0YXJ0X2RhdGUKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRXZlbnRzLnNvcnQoKGEsIGIpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBsb2NhbEV2ZW50cyB3aXRoIHRoZSBuZXcgYXJyYXkKICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXZlbnQgbm90IGZvdW5kLCBhZGQgaXQgdG8gdGhlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgdXBkYXRlZEV2ZW50XS5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUEgLSBkYXRlQjsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignW1JpZ2h0U2lkZWJhcl0gRXJyb3IgaW5pdGlhbGl6aW5nIEVjaG86JywgZXJyb3IpOwogICAgfQp9CgovLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHBvbGwgdXBkYXRlcwpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKGRhdGEpID0+IHsKICAgIC8vIEZpbmQgdGhlIGV2ZW50IHRoYXQgY29udGFpbnMgdGhpcyBwb2xsCiAgICBjb25zdCBldmVudEluZGV4ID0gbG9jYWxFdmVudHMudmFsdWUuZmluZEluZGV4KGV2ZW50ID0+IAogICAgICAgIGV2ZW50LnBvbGwgJiYgZXZlbnQucG9sbC5pZCA9PT0gZGF0YS5wb2xsLmlkCiAgICApOwoKICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgIC8vIENhbGN1bGF0ZSB2b3RlIGNvdW50cyBmcm9tIHZvdGVzIGFycmF5CiAgICAgICAgY29uc3Qgdm90ZUNvdW50cyA9IHt9OwogICAgICAgIGlmIChkYXRhLnBvbGwub3B0aW9ucykgewogICAgICAgICAgICBkYXRhLnBvbGwub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7CiAgICAgICAgICAgICAgICB2b3RlQ291bnRzW29wdGlvbl0gPSBkYXRhLnBvbGwudm90ZXMuZmlsdGVyKHZvdGUgPT4gCiAgICAgICAgICAgICAgICAgICAgdm90ZS5zZWxlY3RlZF9vcHRpb25zLmluY2x1ZGVzKG9wdGlvbikKICAgICAgICAgICAgICAgICkubGVuZ3RoOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVXBkYXRlIHRoZSBwb2xsIGRhdGEKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XS5wb2xsID0gewogICAgICAgICAgICAuLi5sb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XS5wb2xsLAogICAgICAgICAgICB2b3RlczogZGF0YS5wb2xsLnZvdGVzLAogICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAvLyBFbWl0IHRoZSBwb2xsIHVwZGF0ZSB0byB0aGUgRGFzaGJvYXJkCiAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICBwb2xsSWQ6IGRhdGEucG9sbC5pZCwKICAgICAgICAgICAgcG9sbERhdGE6IHsKICAgICAgICAgICAgICAgIC4uLmRhdGEucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB2b3RlQ291bnRzCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS53YXJuKCdSaWdodFNpZGViYXI6IENvdWxkIG5vdCBmaW5kIGV2ZW50IHdpdGggcG9sbCBJRDonLCBkYXRhLnBvbGwuaWQpOwogICAgICAgIGNvbnNvbGUubG9nKCdSaWdodFNpZGViYXI6IEF2YWlsYWJsZSBldmVudHM6JywgbG9jYWxFdmVudHMudmFsdWUpOwogICAgfQp9OwoKY29uc3QgaGFuZGxlRXZlbnRVcGRhdGUgPSAoeyBwb3N0SWQsIHBvc3REYXRhIH0pID0+IHsKICAgIC8vIElmIHBvc3REYXRhIGlzIG51bGwsIHRoaXMgaXMgYSBkZWxldGlvbiBldmVudAogICAgaWYgKCFwb3N0RGF0YSkgewogICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgZnJvbSBsb2NhbEV2ZW50cyBieSBtYXRjaGluZyBlaXRoZXIgcG9zdF9pZCBvciBpZAogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gbG9jYWxFdmVudHMudmFsdWUuZmlsdGVyKGV2ZW50ID0+IAogICAgICAgICAgICBldmVudC5pZCAhPT0gcG9zdElkICYmIGV2ZW50LnBvc3RfaWQgIT09IHBvc3RJZAogICAgICAgICk7CiAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gQ2hlY2sgaWYgdGhlIHBvc3QgaGFzIGV2ZW50IGRhdGEKICAgIGlmICghcG9zdERhdGEuZXZlbnQpIHsKICAgICAgICBjb25zb2xlLmxvZygnW1JpZ2h0U2lkZWJhcl0gTm8gZXZlbnQgZGF0YSBpbiBwb3N0IHVwZGF0ZScpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZXZlbnQgaW4gbG9jYWxFdmVudHMgYnkgbWF0Y2hpbmcgZWl0aGVyIHBvc3RfaWQgb3IgaWQKICAgIGNvbnN0IGV2ZW50SW5kZXggPSBsb2NhbEV2ZW50cy52YWx1ZS5maW5kSW5kZXgoZXZlbnQgPT4gCiAgICAgICAgZXZlbnQuaWQgPT09IHBvc3RJZCB8fCAKICAgICAgICBldmVudC5pZCA9PT0gcG9zdERhdGEuZXZlbnQuaWQgfHwgCiAgICAgICAgZXZlbnQucG9zdF9pZCA9PT0gcG9zdElkCiAgICApOwoKICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBldmVudAogICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IGxvY2FsRXZlbnRzLnZhbHVlW2V2ZW50SW5kZXhdOwogICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudCA9IHsKICAgICAgICAgICAgLi4ucG9zdERhdGEuZXZlbnQsCiAgICAgICAgICAgIC8vIFByZXNlcnZlIGFkZGl0aW9uYWwgZmllbGRzCiAgICAgICAgICAgIGNyZWF0b3I6IGN1cnJlbnRFdmVudC5jcmVhdG9yLAogICAgICAgICAgICBmaWxlX25hbWU6IGN1cnJlbnRFdmVudC5maWxlX25hbWUsCiAgICAgICAgICAgIGZpbGVfcGF0aDogY3VycmVudEV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgZmlsZV9zaXplOiBjdXJyZW50RXZlbnQuZmlsZV9zaXplLAogICAgICAgICAgICAvLyBQcmVzZXJ2ZSBwb2xsIGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgIHBvbGw6IHBvc3REYXRhLmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAuLi5wb3N0RGF0YS5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHBvc3REYXRhLmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICB9OwoKICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IGluIHRoZSBhcnJheQogICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgICAgIHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0gPSB1cGRhdGVkRXZlbnQ7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBBZGQgbmV3IGV2ZW50CiAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7CiAgICAgICAgICAgIC4uLnBvc3REYXRhLmV2ZW50LAogICAgICAgICAgICBjcmVhdG9yOiBwb3N0RGF0YS5hdXRob3IsCiAgICAgICAgICAgIGZpbGVfbmFtZTogcG9zdERhdGEuZmlsZV9uYW1lLAogICAgICAgICAgICBmaWxlX3BhdGg6IHBvc3REYXRhLmZpbGVfcGF0aCwKICAgICAgICAgICAgZmlsZV9zaXplOiBwb3N0RGF0YS5maWxlX3NpemUsCiAgICAgICAgICAgIHBvbGw6IHBvc3REYXRhLmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAuLi5wb3N0RGF0YS5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHBvc3REYXRhLmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICB9OwogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlLCBuZXdFdmVudF07CiAgICB9CgogICAgLy8gU29ydCBldmVudHMgYnkgc3RhcnRfZGF0ZQogICAgbG9jYWxFdmVudHMudmFsdWUuc29ydCgoYSwgYikgPT4gbmV3IERhdGUoYS5zdGFydF9kYXRlKSAtIG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSkpOwoKICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgfSk7Cn07CgovLyBTZXR1cCBFY2hvIGFuZCBldmVudCBsaXN0ZW5lcnMKb25Nb3VudGVkKCgpID0+IHsKICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzLmV2ZW50cykgJiYgcHJvcHMuZXZlbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5wcm9wcy5ldmVudHNdOwogICAgfQogICAgCiAgICAvLyBMaXN0ZW4gZm9yIGN1c3RvbSBwb2xsLXVwZGF0ZWQgZXZlbnRzCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9sbC11cGRhdGVkJywgKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5wb2xsSWQgJiYgZXZlbnQuZGV0YWlsLnBvbGxEYXRhKSB7CiAgICAgICAgICAgIGhhbmRsZVBvbGxVcGRhdGUoewogICAgICAgICAgICAgICAgcG9sbDogewogICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5kZXRhaWwucG9sbElkLAogICAgICAgICAgICAgICAgICAgIC4uLmV2ZW50LmRldGFpbC5wb2xsRGF0YQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBMaXN0ZW4gZm9yIGN1c3RvbSBldmVudC11cGRhdGVkIGV2ZW50cwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2V2ZW50LXVwZGF0ZWQnLCAoZXZlbnQpID0+IHsKICAgICAgICBoYW5kbGVFdmVudFVwZGF0ZShldmVudC5kZXRhaWwpOwogICAgfSk7CiAgICAKICAgIC8vIEluaXRpYWxpemUgRWNobwogICAgY29uc3Qgd2FpdEZvckVjaG8gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuRWNobyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh3YWl0Rm9yRWNobyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpbml0aWFsaXplRWNobzMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sIDEwMCk7IC8vIGNoZWNrIGV2ZXJ5IDEwMG1zCn0pOwoKLy8gQ2xlYW51cCBvbiB1bm1vdW50Cm9uVW5tb3VudGVkKCgpID0+IHsKICAgIC8vIFJlbW92ZSBjdXN0b20gZXZlbnQgbGlzdGVuZXJzCiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9sbC11cGRhdGVkJywgKCkgPT4ge30pOwogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2V2ZW50LXVwZGF0ZWQnLCAoZXZlbnQpID0+IHsKICAgICAgICBoYW5kbGVFdmVudFVwZGF0ZShldmVudC5kZXRhaWwpOwogICAgfSk7CiAgICAKICAgIGlmIChlY2hvKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IGVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWwuc3RvcExpc3RlbmluZygnUG9sbFZvdGVVcGRhdGVkJyk7CiAgICAgICAgICAgICAgICBlY2hvLmxlYXZlKCdwb3N0cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgLy8gU2lsZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgfQogICAgfQp9KTsKCi8vIEZvcm1hdCBmaWxlIHNpemUgZnVuY3Rpb24KY29uc3QgZm9ybWF0RmlsZVNpemUgPSAoYnl0ZXMpID0+IHsKICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJzsKICAgIGNvbnN0IGsgPSAxMDI0OwogICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107CiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7CiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHNob3dWb3RlcnNNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IHZvdGVycyA9IHJlZih7fSk7Cgpjb25zdCBoYW5kbGVWb3RlID0gYXN5bmMgKGV2ZW50SWQsIHBvbGxJZCwgb3B0aW9uSWQpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIuZXZlbnRzLnZvdGUnLCB7IGV2ZW50OiBldmVudElkLCBwb2xsOiBwb2xsSWQgfSksIHsKICAgICAgICAgICAgb3B0aW9uX2lkOiBvcHRpb25JZAogICAgICAgIH0pOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdSaWdodFNpZGViYXI6IEVycm9yIHZvdGluZzonLCBlcnJvcik7CiAgICAgICAgdG9hc3QuZXJyb3IoJ0EgYXDEg3J1dCBvIGVyb2FyZSBsYSDDrm5yZWdpc3RyYXJlYSB2b3R1bHVpLicpOwogICAgfQp9OwoKY29uc3QgZ2V0U2VsZWN0ZWRPcHRpb25zID0gKHBvbGwpID0+IHsKICAgIGlmICghcG9sbC52b3RlcykgcmV0dXJuIFtdOwogICAgY29uc3QgdXNlclZvdGUgPSBwb2xsLnZvdGVzLmZpbmQodm90ZSA9PiB2b3RlLnVzZXJfaWQgPT09IHVzZXIuaWQpOwogICAgcmV0dXJuIHVzZXJWb3RlID8gdXNlclZvdGUuc2VsZWN0ZWRfb3B0aW9ucyA6IFtdOwp9OwoKY29uc3QgaXNPcHRpb25TZWxlY3RlZCA9IChwb2xsLCBvcHRpb24pID0+IHsKICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IGdldFNlbGVjdGVkT3B0aW9ucyhwb2xsKTsKICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKTsKfTsKCmNvbnN0IGhhbmRsZUNoZWNrYm94Q2hhbmdlID0gKHBvbGwsIG9wdGlvbiwgaXNDaGVja2VkKSA9PiB7CiAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSBnZXRTZWxlY3RlZE9wdGlvbnMocG9sbCk7CiAgICBsZXQgbmV3U2VsZWN0ZWQ7CiAgICAKICAgIGlmIChwb2xsLmlzX211bHRpcGxlX2Nob2ljZSkgewogICAgICAgIGlmIChpc0NoZWNrZWQpIHsKICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBbLi4uY3VycmVudFNlbGVjdGVkLCBvcHRpb25dOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld1NlbGVjdGVkID0gY3VycmVudFNlbGVjdGVkLmZpbHRlcihvID0+IG8gIT09IG9wdGlvbik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBuZXdTZWxlY3RlZCA9IGlzQ2hlY2tlZCA/IFtvcHRpb25dIDogW107CiAgICB9CiAgICAKICAgIGhhbmRsZVZvdGUocG9sbC5pZCwgcG9sbC5pZCwgb3B0aW9uKTsKfTsKCmNvbnN0IHNob3dWb3RlcnMgPSBhc3luYyAocG9sbCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhbGxWb3RlcnMgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBwb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQocm91dGUoJ21lbWJlci5wb2xscy52b3RlcnMnLCB7IHBvbGw6IHBvbGwuaWQsIG9wdGlvbiB9KSwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LnZvdGVycykgewogICAgICAgICAgICAgICAgYWxsVm90ZXJzW29wdGlvbl0gPSByZXNwb25zZS5kYXRhLnZvdGVyczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2b3RlcnMudmFsdWUgPSBhbGxWb3RlcnM7CiAgICAgICAgc2hvd1ZvdGVyc01vZGFsLnZhbHVlID0gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQxOSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBmZXRjaCB2b3RlcnMgbGlzdC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBlbnN1cmVVVEMgPSAoZGF0ZVN0cmluZykgPT4gewogICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gZGF0ZVN0cmluZzsKICAgIC8vIElmIGFscmVhZHkgaGFzIFogb3IgdGltZXpvbmUgb2Zmc2V0LCByZXR1cm4gYXMgaXMKICAgIGlmIChkYXRlU3RyaW5nLmVuZHNXaXRoKCdaJykgfHwgL1srLV1cZHsyfTo/XGR7Mn0kLy50ZXN0KGRhdGVTdHJpbmcpKSByZXR1cm4gZGF0ZVN0cmluZzsKICAgIHJldHVybiBkYXRlU3RyaW5nICsgJ1onOwp9OwoKY29uc3QgYWRkVG9DYWxlbmRhciA9IChldmVudCkgPT4gewogICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZW5zdXJlVVRDKGV2ZW50LnN0YXJ0X2RhdGUpKTsKICAgIGNvbnN0IGVuZERhdGUgPSBldmVudC5lbmRfZGF0ZSA/IG5ldyBEYXRlKGVuc3VyZVVUQyhldmVudC5lbmRfZGF0ZSkpIDogbmV3IERhdGUoc3RhcnREYXRlLmdldFRpbWUoKSArIDYwICogNjAgKiAxMDAwKTsgLy8gRGVmYXVsdCB0byAxIGhvdXIgaWYgbm8gZW5kIGRhdGUKICAgIAogICAgLy8gRm9ybWF0IGRhdGVzIGZvciBjYWxlbmRhcgogICAgY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlKSA9PiB7CiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKC8tfDp8XC5cZCsvZywgJycpOwogICAgfTsKICAgIAogICAgLy8gQ3JlYXRlIGNhbGVuZGFyIGV2ZW50IGRhdGEKICAgIGNvbnN0IGNhbGVuZGFyRGF0YSA9IHsKICAgICAgICB0aXRsZTogZXZlbnQudGl0bGUsCiAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uIHx8ICcnLAogICAgICAgIGxvY2F0aW9uOiBldmVudC5sb2NhdGlvbiB8fCAnJywKICAgICAgICBzdGFydFRpbWU6IGZvcm1hdERhdGUoc3RhcnREYXRlKSwKICAgICAgICBlbmRUaW1lOiBmb3JtYXREYXRlKGVuZERhdGUpCiAgICB9OwogICAgCiAgICAvLyBDcmVhdGUgR29vZ2xlIENhbGVuZGFyIFVSTCB3aXRoIHByb3BlciBkYXRlIGZvcm1hdHRpbmcKICAgIGNvbnN0IGdvb2dsZUNhbGVuZGFyVXJsID0gYGh0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhci9yZW5kZXI/YWN0aW9uPVRFTVBMQVRFJnRleHQ9JHtlbmNvZGVVUklDb21wb25lbnQoY2FsZW5kYXJEYXRhLnRpdGxlKX0mZGF0ZXM9JHtjYWxlbmRhckRhdGEuc3RhcnRUaW1lfS8ke2NhbGVuZGFyRGF0YS5lbmRUaW1lfSZkZXRhaWxzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGVuZGFyRGF0YS5kZXNjcmlwdGlvbil9JmxvY2F0aW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGVuZGFyRGF0YS5sb2NhdGlvbil9YDsKICAgIAogICAgLy8gQ3JlYXRlIEFwcGxlIENhbGVuZGFyIFVSTCB3aXRoIHByb3BlciAuaWNzIGZvcm1hdAogICAgY29uc3QgaWNzQ29udGVudCA9IFsKICAgICAgICAnQkVHSU46VkNBTEVOREFSJywKICAgICAgICAnVkVSU0lPTjoyLjAnLAogICAgICAgICdQUk9ESUQ6LS8vaGFja3N3L2hhbmRjYWwvL05PTlNHTUwgdjEuMC8vRU4nLAogICAgICAgICdDQUxTQ0FMRTpHUkVHT1JJQU4nLAogICAgICAgICdCRUdJTjpWRVZFTlQnLAogICAgICAgIGBEVFNUQVJUOiR7Y2FsZW5kYXJEYXRhLnN0YXJ0VGltZX1gLAogICAgICAgIGBEVEVORDoke2NhbGVuZGFyRGF0YS5lbmRUaW1lfWAsCiAgICAgICAgYFNVTU1BUlk6JHtjYWxlbmRhckRhdGEudGl0bGUucmVwbGFjZSgvLC9nLCAnXFwsJyl9YCwKICAgICAgICBgREVTQ1JJUFRJT046JHtjYWxlbmRhckRhdGEuZGVzY3JpcHRpb24ucmVwbGFjZSgvLC9nLCAnXFwsJykucmVwbGFjZSgvXG4vZywgJ1xcbicpfWAsCiAgICAgICAgYExPQ0FUSU9OOiR7Y2FsZW5kYXJEYXRhLmxvY2F0aW9uLnJlcGxhY2UoLywvZywgJ1xcLCcpfWAsCiAgICAgICAgJ0VORDpWRVZFTlQnLAogICAgICAgICdFTkQ6VkNBTEVOREFSJwogICAgXS5qb2luKCdcclxuJyk7CiAgICAKICAgIGNvbnN0IGFwcGxlQ2FsZW5kYXJVcmwgPSBgZGF0YTp0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoaWNzQ29udGVudCl9YDsKICAgIAogICAgLy8gT3BlbiBjYWxlbmRhciBvcHRpb25zIGluIGEgbW9kYWwKICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBtb2RhbC5jbGFzc05hbWUgPSAnZml4ZWQgaW5zZXQtMCB6LTUwIG92ZXJmbG93LXktYXV0byc7CiAgICBtb2RhbC5pbm5lckhUTUwgPSBgCiAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLWgtc2NyZWVuIHB0LTQgcHgtNCBwYi0yMCB0ZXh0LWNlbnRlciBzbTpibG9jayBzbTpwLTAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIGJnLWdyYXktNTAwIGJnLW9wYWNpdHktNzUgdHJhbnNpdGlvbi1vcGFjaXR5Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWJsb2NrIGFsaWduLWJvdHRvbSBiZy13aGl0ZSByb3VuZGVkLWxnIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXhsIHRyYW5zZm9ybSB0cmFuc2l0aW9uLWFsbCBzbTpteS04IHNtOmFsaWduLW1pZGRsZSBzbTptYXgtdy1sZyBzbTp3LWZ1bGwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcHgtNCBwdC01IHBiLTQgc206cC02IHNtOnBiLTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNtOmZsZXggc206aXRlbXMtc3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0zIHRleHQtY2VudGVyIHNtOm10LTAgc206dGV4dC1sZWZ0IHctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgbGVhZGluZy02IGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiPkFkZCB0byBDYWxlbmRhcjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJHtnb29nbGVDYWxlbmRhclVybH0iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTQgcHktMiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1tZCB0ZXh0LXdoaXRlIGJnLWJsdWUtNjAwIGhvdmVyOmJnLWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy01IGgtNSBtci0yIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIgMEM1LjM3MiAwIDAgNS4zNzIgMCAxMnM1LjM3MiAxMiAxMiAxMiAxMi01LjM3MiAxMi0xMlMxOC42MjggMCAxMiAwem0wIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTBTMiAxNy41MTQgMiAxMiA2LjQ4NiAyIDEyIDJ6bTAgM2MtMy44NjYgMC03IDMuMTM0LTcgN3MzLjEzNCA3IDcgNyA3LTMuMTM0IDctNy0zLjEzNC03LTctN3ptMCAyYzIuNzYxIDAgNSAyLjIzOSA1IDVzLTIuMjM5IDUtNSA1LTUtMi4yMzktNS01IDIuMjM5LTUgNS01eiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEdvb2dsZSBDYWxlbmRhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIke2FwcGxlQ2FsZW5kYXJVcmx9IiBkb3dubG9hZD0iZXZlbnQuaWNzIiBjbGFzcz0idy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTQgcHktMiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1tZCB0ZXh0LXdoaXRlIGJnLWdyYXktNjAwIGhvdmVyOmJnLWdyYXktNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy01IGgtNSBtci0yIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTguNzEgMTkuNWMtLjgzIDEuMjQtMS43MSAyLjQ1LTMuMDUgMi40Ny0xLjM0LjAzLTEuNzctLjc5LTMuMjktLjc5LTEuNTMgMC0yIC43Ny0zLjI3LjgyLTEuMzEuMDUtMi4zLTEuMzItMy4xNC0yLjUzQzQuMjUgMTcgMi45NCAxMi40NSA0LjcgOS4zOWMuODctMS41MiAyLjQzLTIuNDggNC4xMi0yLjUxIDEuMjgtLjAyIDIuNS44NyAzLjI5Ljg3Ljc4IDAgMi4yNi0xLjA3IDMuODEtLjkxLjY1LjAzIDIuNDcuMjYgMy42NCAxLjk4LS4wOS4wNi0yLjE3IDEuMjgtMi4xNSAzLjgxLjAzIDMuMDIgMi42NSA0LjAzIDIuNjggNC4wNC0uMDMuMDctLjQyIDEuNDQtMS4zOCAyLjgzTTEzIDMuNWMuNzMtLjgzIDEuOTQtMS40NiAyLjk0LTEuNS4xMyAxLjE3LS4zNCAyLjM1LTEuMDQgMy4xOS0uNjkuODUtMS44MyAxLjUxLTIuOTUgMS40Mi0uMTUtMS4xNS40MS0yLjM1IDEuMDUtMy4xMXoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBBcHBsZSBDYWxlbmRhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctZ3JheS01MCBweC00IHB5LTMgc206cHgtNiBzbTpmbGV4IHNtOmZsZXgtcm93LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibXQtMyB3LWZ1bGwgaW5saW5lLWZsZXgganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBweC00IHB5LTIgYmctd2hpdGUgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgaG92ZXI6YmctZ3JheS01MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1pbmRpZ28tNTAwIHNtOm10LTAgc206bWwtMyBzbTp3LWF1dG8gc206dGV4dC1zbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlCiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICBgOwogICAgCiAgICAvLyBBZGQgY2xpY2sgaGFuZGxlciB0byBjbG9zZSBidXR0b24KICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gbW9kYWwucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7CiAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1vZGFsKTsKICAgIH0pOwogICAgCiAgICAvLyBBZGQgY2xpY2sgaGFuZGxlciB0byBiYWNrZ3JvdW5kCiAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBtb2RhbCkgewogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1vZGFsKTsKICAgICAgICB9CiAgICB9KTsKICAgIAogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7Cn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iZml4ZWQgcmlnaHQtMCB0b3AtMTQgdy1bMzYwcHhdIGgtW2NhbGMoMTAwdmgtMy41cmVtKV0gb3ZlcmZsb3cteS1hdXRvIHAtNCB6LTMiPgogICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93IHAtNCI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIG1iLTQiPlVybcSDdG9ydWwgRXZlbmltZW50PC9oMj4KICAgICAgICAgICAgPGRpdiB2LWlmPSJuZXh0RXZlbnQiIGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctYmx1ZS01MCByb3VuZGVkLWxnIHAtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtYmx1ZS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1tZWRpdW0iPnt7IG5leHRFdmVudC50aXRsZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHRleHQtc20gdGV4dC1ibHVlLTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNCB3LTQiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0xLTEyYTEgMSAwIDEwLTIgMHY0YTEgMSAwIDAwLjI5My43MDdsMi44MjggMi44MjlhMSAxIDAgMTAxLjQxNS0xLjQxNUwxMSA5LjU4NlY2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBuZXcgRGF0ZShuZXh0RXZlbnQuc3RhcnRfZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdyby1STycsIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoOiAnbG9uZycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibmV4dEV2ZW50LmxvY2F0aW9uIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIG10LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5leHRFdmVudC5sb2NhdGlvbiB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibmV4dEV2ZW50LmRlc2NyaXB0aW9uIiBjbGFzcz0ibXQtMiB0ZXh0LWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5kZXNjcmlwdGlvbiB9fQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIHRvIENhbGVuZGFyIEJ1dHRvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0iYWRkVG9DYWxlbmRhcihuZXh0RXZlbnQpIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ3LTUgaC01IG1yLTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjQgMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTggN1YzbTggNFYzbS05IDhoMTBNNSAyMWgxNGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIENhbGVuZGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgRGlzcGxheSBmb3IgRXZlbnRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5maWxlX3BhdGgiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPSJyb3V0ZSgnZmlsZXMuZG93bmxvYWQnLCBuZXh0RXZlbnQuaWQpIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNiBoLTYgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgMTB2Nm0wIDBsLTMtM20zIDNsMy0zbTIgOEg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5maWxlX25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWwtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPih7eyBmb3JtYXRGaWxlU2l6ZShuZXh0RXZlbnQuZmlsZV9zaXplKSB9fSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gUG9sbCBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5wb2xsIiBjbGFzcz0ibXQtNCBib3JkZXItdCBib3JkZXItYmx1ZS0yMDAgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LWJsdWUtNzAwIG1iLTMiPnt7IG5leHRFdmVudC5wb2xsLnF1ZXN0aW9uIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iKG9wdGlvbiwgaW5kZXgpIGluIG5leHRFdmVudC5wb2xsLm9wdGlvbnMiIDprZXk9ImluZGV4IiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJlbGF0aXZlIGdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0eXBlPSJuZXh0RXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UgPyAnY2hlY2tib3gnIDogJ3JhZGlvJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpuYW1lPSIncG9sbF8nICsgbmV4dEV2ZW50LnBvbGwuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dmFsdWU9Im9wdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjaGVja2VkPSJpc09wdGlvblNlbGVjdGVkKG5leHRFdmVudC5wb2xsLCBvcHRpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iKGUpID0+IGhhbmRsZUNoZWNrYm94Q2hhbmdlKG5leHRFdmVudC5wb2xsLCBvcHRpb24sIGUudGFyZ2V0LmNoZWNrZWQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJvdW5kZWQtZnVsbCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIHx8IDAgfX0gdm90ZXMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPih7eyBNYXRoLnJvdW5kKChuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIC8gT2JqZWN0LnZhbHVlcyhuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwIH19JSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTIgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC1mdWxsIGJnLWluZGlnby01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9Insgd2lkdGg6IGAke01hdGgucm91bmQoKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gLyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSkgKiAxMDApIHx8IDB9JWAgfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSB9fSB2b3RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVycyhuZXh0RXZlbnQucG9sbCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPSJ0ZXh0LWNlbnRlciBweS04Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTEyIHctMTIgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItMiI+TnUgZXhpc3TEgyBldmVuaW1lbnRlIHZpaXRvYXJlPC9oMz4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPkPDom5kIHZvciBmaSBjcmVhdGUgZXZlbmltZW50ZSBub2ksIGFjZXN0ZWEgdm9yIGFwxINyZWEgYWljaS48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZvdGVycyBNb2RhbCAtLT4KICAgICAgICA8ZGl2IHYtaWY9InNob3dWb3RlcnNNb2RhbCIgY2xhc3M9ImZpeGVkIGluc2V0LTAgei1bOTk5OV0gb3ZlcmZsb3cteS1hdXRvIiBhcmlhLWxhYmVsbGVkYnk9Im1vZGFsLXRpdGxlIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1zY3JlZW4gcHQtNCBweC00IHBiLTIwIHRleHQtY2VudGVyIHNtOmJsb2NrIHNtOnAtMCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIGJnLWJsYWNrIGJnLW9wYWNpdHktNTAgdHJhbnNpdGlvbi1vcGFjaXR5IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGlkZGVuIHNtOmlubGluZS1ibG9jayBzbTphbGlnbi1taWRkbGUgc206aC1zY3JlZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj4mIzgyMDM7PC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWJsb2NrIGFsaWduLWJvdHRvbSBiZy13aGl0ZSByb3VuZGVkLWxnIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXhsIHRyYW5zZm9ybSB0cmFuc2l0aW9uLWFsbCBzbTpteS04IHNtOmFsaWduLW1pZGRsZSBzbTptYXgtdy0yeGwgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvbGwgVm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIob3B0aW9uVm90ZXJzLCBvcHRpb24pIGluIHZvdGVycyIgOmtleT0ib3B0aW9uIiBjbGFzcz0ic3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJ2b3RlciBpbiBvcHRpb25Wb3RlcnMiIDprZXk9InZvdGVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0idm90ZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZvdGVyLmZpcnN0X25hbWUgKyAnICcgKyB2b3Rlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJ2b3Rlci5maXJzdF9uYW1lICsgJyAnICsgdm90ZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS03MDAiPnt7IHZvdGVyLmZpcnN0X25hbWUgfX0ge3sgdm90ZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJvcHRpb25Wb3RlcnMubGVuZ3RoID09PSAwIiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHZvdGVycyB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTYgZmxleCBqdXN0aWZ5LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVyc01vZGFsID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JheS0yMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L3RlbXBsYXRlPgoKPHN0eWxlPgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogI0JDQzBDNDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjQTRBN0FCOwp9CgovKiBDdXN0b20gY2hlY2tib3ggc3R5bGluZyAqLwpbdHlwZT0iY2hlY2tib3giXSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGJhY2tncm91bmQtb3JpZ2luOiBib3JkZXItYm94OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGhlaWdodDogMXJlbTsKICAgIHdpZHRoOiAxcmVtOwogICAgY29sb3I6IHJnYig3OSwgNzAsIDIyOSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7CiAgICAtLXR3LXNoYWRvdzogMCAwICMwMDAwOwogICAgcGFkZGluZzogMHB4OwogICAgYm9yZGVyLWNvbG9yOiByZ2IoMjA5LCAyMTMsIDIxOSk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5OXB4Owp9CgpbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J3doaXRlJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNMTIuMjA3IDQuNzkzYTEgMSAwIDAxMCAxLjQxNGwtNSA1YTEgMSAwIDAxLTEuNDE0IDBsLTItMmExIDEgMCAwMTEuNDE0LTEuNDE0TDYuNSA5LjA4Nmw0LjI5My00LjI5M2ExIDEgMCAwMTEuNDE0IDB6Jy8lM2UlM2Mvc3ZnJTNlIik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKfQoKW3R5cGU9ImNoZWNrYm94Il06Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKTsKfQo8L3N0eWxlPiAAAAAAAAAAACeSAAAAAAAAAAAAAAAAAAAAAAAAJ5IAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADXFgAAAAAAAOIWAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAtkgAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgd2F0Y2gsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKaW1wb3J0IHsgdXNlUGFnZSwgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1vZGFsIGZyb20gJ0AvQ29tcG9uZW50cy9Nb2RhbC52dWUnOwppbXBvcnQgRWNobyBmcm9tICdsYXJhdmVsLWVjaG8nOwoKY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsncG9sbC11cGRhdGVkJywgJ3JlZnJlc2gtZXZlbnRzJ10pOwoKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBldmVudHM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIHVzZXI6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICBsb2RnZTogewogICAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgICByZXF1aXJlZDogZmFsc2UsCiAgICAgICAgZGVmYXVsdDogbnVsbAogICAgfQp9KTsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7CmNvbnN0IHVzZXIgPSBwYWdlLnByb3BzLmF1dGgudXNlcjsKCi8vIENyZWF0ZSBhIHJlYWN0aXZlIHJlZmVyZW5jZSBmb3IgZXZlbnRzCmNvbnN0IGxvY2FsRXZlbnRzID0gcmVmKFsuLi5wcm9wcy5ldmVudHNdKTsKCi8vIEluaXRpYWxpemUgRWNobwpsZXQgZWNobyA9IG51bGw7CgovLyBXYXRjaCBmb3IgY2hhbmdlcyBpbiBwcm9wcy5ldmVudHMKd2F0Y2goKCkgPT4gcHJvcHMuZXZlbnRzLCAobmV3RXZlbnRzKSA9PiB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdFdmVudHMpICYmIG5ld0V2ZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gTWVyZ2UgbmV3IGV2ZW50cyB3aXRoIGV4aXN0aW5nIG9uZXMsIGF2b2lkaW5nIGR1cGxpY2F0ZXMKICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQobG9jYWxFdmVudHMudmFsdWUubWFwKGUgPT4gZS5pZCkpOwogICAgICAgIGNvbnN0IHVuaXF1ZU5ld0V2ZW50cyA9IG5ld0V2ZW50cy5maWx0ZXIoZSA9PiAhZXhpc3RpbmdJZHMuaGFzKGUuaWQpKTsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgLi4udW5pcXVlTmV3RXZlbnRzXTsKICAgIH0KfSwgeyBkZWVwOiB0cnVlIH0pOwoKLy8gQWRkIGEgY29tcHV0ZWQgcHJvcGVydHkgdG8gZW5zdXJlIGV2ZW50cyBoYXZlIHRoZSBjb3JyZWN0IHN0cnVjdHVyZQpjb25zdCBwcm9jZXNzZWRFdmVudHMgPSBjb21wdXRlZCgoKSA9PiB7CiAgICByZXR1cm4gcHJvcHMuZXZlbnRzLm1hcChldmVudCA9PiAoewogICAgICAgIC4uLmV2ZW50LAogICAgICAgIGVuZF9kYXRlOiBldmVudC5lbmRfZGF0ZSB8fCBldmVudC5ldmVudD8uZW5kX2RhdGUgfHwgbnVsbAogICAgfSkpOwp9KTsKCi8vIFVwZGF0ZSB0aGUgbmV4dEV2ZW50IGNvbXB1dGVkIHByb3BlcnR5IHRvIHVzZSBwcm9jZXNzZWRFdmVudHMKY29uc3QgbmV4dEV2ZW50ID0gY29tcHV0ZWQoKCkgPT4gewogICAgaWYgKCFwcm9jZXNzZWRFdmVudHMudmFsdWUubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIAogICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTsKICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHMudmFsdWUKICAgICAgICAuZmlsdGVyKGV2ZW50ID0+IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUpID4gbm93KQogICAgICAgIC5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpIC0gbmV3IERhdGUoYi5zdGFydF9kYXRlKSlbMF07Cn0pOwoKY29uc3QgaW5pdGlhbGl6ZUVjaG8zID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBTdWJzY3JpYmUgdG8gdGhlIHBvc3RzIGNoYW5uZWwKICAgICAgICBjb25zdCBjaGFubmVsID0gd2luZG93LkVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAKICAgICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzIC0gb25seSBsaXN0ZW4gdG8gb25lIHZlcnNpb24gb2YgdGhlIGV2ZW50CiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJ1BvbGxWb3RlVXBkYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhLnBvbGwpIHsKICAgICAgICAgICAgICAgIC8vIERlYm91bmNlIHRoZSB1cGRhdGUgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZwogICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5wb2xsVXBkYXRlVGltZW91dCkgewogICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh3aW5kb3cucG9sbFVwZGF0ZVRpbWVvdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2luZG93LnBvbGxVcGRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgaGFuZGxlUG9sbFVwZGF0ZShkYXRhKTsKICAgICAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBQb3N0RGVsZXRlZCBldmVudAogICAgICAgIGNoYW5uZWwubGlzdGVuKCcuUG9zdERlbGV0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3Bvc3RfaWQnIGluIGRhdGEpIHsKICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgZnJvbSBsb2NhbEV2ZW50cyBieSBtYXRjaGluZyBlaXRoZXIgcG9zdF9pZCBvciBpZAogICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBsb2NhbEV2ZW50cy52YWx1ZS5maWx0ZXIoZXZlbnQgPT4gCiAgICAgICAgICAgICAgICAgICAgZXZlbnQuaWQgIT09IGRhdGEucG9zdF9pZCAmJiBldmVudC5wb3N0X2lkICE9PSBkYXRhLnBvc3RfaWQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIHJlYWN0aXZlIHVwZGF0ZQogICAgICAgICAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIExpc3RlbiBmb3IgcG9sbC11cGRhdGVkIGV2ZW50cyBmcm9tIHRoZSBGZWVkIGNvbXBvbmVudAogICAgICAgIGNoYW5uZWwubGlzdGVuKCdwb2xsLXVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YS5wb2xsSWQgJiYgZGF0YS5wb2xsRGF0YSkgewogICAgICAgICAgICAgICAgaGFuZGxlUG9sbFVwZGF0ZSh7CiAgICAgICAgICAgICAgICAgICAgcG9sbDogewogICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5wb2xsSWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEucG9sbERhdGEKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIEV2ZW50Q3JlYXRlZCB0byB1cGRhdGUgZXZlbnRzIGluIHJlYWwgdGltZQogICAgICAgIGNoYW5uZWwubGlzdGVuKCcuRXZlbnRDcmVhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0ICYmIGRhdGEucG9zdC5ldmVudCkgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZXZlbnQgYWxyZWFkeSBleGlzdHMKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IGxvY2FsRXZlbnRzLnZhbHVlLnNvbWUoZXYgPT4gCiAgICAgICAgICAgICAgICAgICAgZXYuaWQgPT09IGRhdGEucG9zdC5ldmVudC5pZCB8fCAKICAgICAgICAgICAgICAgICAgICBldi5wb3N0X2lkID09PSBkYXRhLnBvc3QuaWQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IHRoZSBldmVudCBhcyBuZWVkZWQgZm9yIHlvdXIgc2lkZWJhciAobWF0Y2ggdGhlIHN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEucG9zdC5ldmVudC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9pZDogZGF0YS5wb3N0LmlkLAogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5wb3N0LmV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5wb3N0LmV2ZW50LmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuc3RhcnRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGU6IGRhdGEucG9zdC5ldmVudC5lbmRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGRhdGEucG9zdC5ldmVudC5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRvcjogZGF0YS5wb3N0LmF1dGhvciA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2RhdGEucG9zdC5hdXRob3IuZmlyc3RfbmFtZX0gJHtkYXRhLnBvc3QuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhdGg6IGRhdGEucG9zdC5maWxlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZGF0YS5wb3N0LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBkYXRhLnBvc3QuZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICBwb2xsOiBkYXRhLnBvc3QuZXZlbnQucG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGRhdGEucG9zdC5ldmVudC5wb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGRhdGEucG9zdC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBkYXRhLnBvc3QuZXZlbnQucG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBkYXRhLnBvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbAogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGFuZCBzb3J0IGJ5IHN0YXJ0X2RhdGUKICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlLCBuZXdFdmVudF0uc29ydCgoYSwgYikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUoYi5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tSaWdodFNpZGViYXJdIEludmFsaWQgZXZlbnQgZGF0YSByZWNlaXZlZDonLCBkYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIEV2ZW50VXBkYXRlZCB0byB1cGRhdGUgZXZlbnRzIGluIHJlYWwgdGltZQogICAgICAgIGNoYW5uZWwubGlzdGVuKCdFdmVudFVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBvc3QgJiYgZGF0YS5wb3N0LmV2ZW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGV2ZW50IElEIGZyb20gdGhlIHBvc3QncyBldmVudCBvYmplY3QKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SWQgPSBkYXRhLnBvc3QuZXZlbnQuaWQ7CiAgICAgICAgICAgICAgICBjb25zdCBwb3N0SWQgPSBkYXRhLnBvc3QuaWQ7CgogICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgaW4gbG9jYWxFdmVudHMgYnkgcG9zdCBJRCBmaXJzdAogICAgICAgICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbmRJbmRleChldiA9PiB7CiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGJ5IHBvc3QgSUQgZmlyc3QKICAgICAgICAgICAgICAgICAgICBpZiAoZXYucG9zdF9pZCA9PT0gcG9zdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIHRyeSB0byBtYXRjaCBieSBldmVudCBJRAogICAgICAgICAgICAgICAgICAgIGlmIChldi5pZCA9PT0gZXZlbnRJZCB8fCBldi5pZCA9PT0gcG9zdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGV2ZW50IGRhdGEgaWYgZm91bmQKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSBldmVudEluZGV4ICE9PSAtMSA/IGxvY2FsRXZlbnRzLnZhbHVlW2V2ZW50SW5kZXhdIDogbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgbGV0IHBvbGxEYXRhID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvc3QuZXZlbnQucG9sbCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUG9sbCA9IGV4aXN0aW5nRXZlbnQ/LnBvbGw7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UG9sbCA9IGRhdGEucG9zdC5ldmVudC5wb2xsOwoKICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBtYXBwaW5nIG9mIG9sZCBvcHRpb25zIHRvIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTWFwcGluZyA9IHt9OwogICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1BvbGw/Lm9wdGlvbnMgJiYgbmV3UG9sbC5vcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUG9sbC5vcHRpb25zLmZvckVhY2goKG9sZE9wdGlvbiwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQb2xsLm9wdGlvbnNbaW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTWFwcGluZ1tvbGRPcHRpb25dID0gbmV3UG9sbC5vcHRpb25zW2luZGV4XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNYXAgdm90ZSBjb3VudHMgdG8gbmV3IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWb3RlQ291bnRzID0ge307CiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nUG9sbD8udm90ZV9jb3VudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXhpc3RpbmdQb2xsLnZvdGVfY291bnRzKS5mb3JFYWNoKChbb2xkT3B0aW9uLCBjb3VudF0pID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbiA9IG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdPcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWb3RlQ291bnRzW25ld09wdGlvbl0gPSBjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNYXAgdm90ZXMgdG8gbmV3IG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWb3RlcyA9IGV4aXN0aW5nUG9sbD8udm90ZXM/Lm1hcCh2b3RlID0+ICh7CiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZvdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX29wdGlvbnM6IHZvdGUuc2VsZWN0ZWRfb3B0aW9ucy5tYXAob2xkT3B0aW9uID0+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uTWFwcGluZ1tvbGRPcHRpb25dIHx8IG9sZE9wdGlvbgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgfSkpIHx8IFtdOwoKICAgICAgICAgICAgICAgICAgICBwb2xsRGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5ld1BvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBuZXdQb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBuZXdQb2xsLm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogbmV3UG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVzOiBuZXdWb3RlcywKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IG5ld1ZvdGVDb3VudHMKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZvcm1hdCB0aGUgdXBkYXRlZCBldmVudAogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50ID0gewogICAgICAgICAgICAgICAgICAgIGlkOiBldmVudElkLAogICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IHBvc3RJZCwKICAgICAgICAgICAgICAgICAgICB0aXRsZTogZGF0YS5wb3N0LmV2ZW50LnRpdGxlLAogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLnBvc3QuZXZlbnQuZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZGF0YS5wb3N0LmV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgZW5kX2RhdGU6IGRhdGEucG9zdC5ldmVudC5lbmRfZGF0ZSwKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZGF0YS5wb3N0LmV2ZW50LmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGRhdGEucG9zdC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke2RhdGEucG9zdC5hdXRob3IuZmlyc3RfbmFtZX0gJHtkYXRhLnBvc3QuYXV0aG9yLmxhc3RfbmFtZX1gCiAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBkYXRhLnBvc3QuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZGF0YS5wb3N0LmZpbGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGRhdGEucG9zdC5maWxlX3NpemUsCiAgICAgICAgICAgICAgICAgICAgcG9sbDogcG9sbERhdGEKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZXZlbnQgaW4gdGhlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50c1tldmVudEluZGV4XSA9IHVwZGF0ZWRFdmVudDsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBTb3J0IGJ5IHN0YXJ0X2RhdGUKICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRXZlbnRzLnNvcnQoKGEsIGIpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBsb2NhbEV2ZW50cyB3aXRoIHRoZSBuZXcgYXJyYXkKICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZXZlbnQgbm90IGZvdW5kLCBhZGQgaXQgdG8gdGhlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgdXBkYXRlZEV2ZW50XS5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUEgLSBkYXRlQjsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignW1JpZ2h0U2lkZWJhcl0gRXJyb3IgaW5pdGlhbGl6aW5nIEVjaG86JywgZXJyb3IpOwogICAgfQp9CgovLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHBvbGwgdXBkYXRlcwpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKGRhdGEpID0+IHsKICAgIC8vIEZpbmQgdGhlIGV2ZW50IHRoYXQgY29udGFpbnMgdGhpcyBwb2xsCiAgICBjb25zdCBldmVudEluZGV4ID0gbG9jYWxFdmVudHMudmFsdWUuZmluZEluZGV4KGV2ZW50ID0+IAogICAgICAgIGV2ZW50LnBvbGwgJiYgZXZlbnQucG9sbC5pZCA9PT0gZGF0YS5wb2xsLmlkCiAgICApOwoKICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgIC8vIENhbGN1bGF0ZSB2b3RlIGNvdW50cyBmcm9tIHZvdGVzIGFycmF5CiAgICAgICAgY29uc3Qgdm90ZUNvdW50cyA9IHt9OwogICAgICAgIGlmIChkYXRhLnBvbGwub3B0aW9ucykgewogICAgICAgICAgICBkYXRhLnBvbGwub3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7CiAgICAgICAgICAgICAgICB2b3RlQ291bnRzW29wdGlvbl0gPSBkYXRhLnBvbGwudm90ZXMuZmlsdGVyKHZvdGUgPT4gCiAgICAgICAgICAgICAgICAgICAgdm90ZS5zZWxlY3RlZF9vcHRpb25zLmluY2x1ZGVzKG9wdGlvbikKICAgICAgICAgICAgICAgICkubGVuZ3RoOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVXBkYXRlIHRoZSBwb2xsIGRhdGEKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XS5wb2xsID0gewogICAgICAgICAgICAuLi5sb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XS5wb2xsLAogICAgICAgICAgICB2b3RlczogZGF0YS5wb2xsLnZvdGVzLAogICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAvLyBFbWl0IHRoZSBwb2xsIHVwZGF0ZSB0byB0aGUgRGFzaGJvYXJkCiAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICBwb2xsSWQ6IGRhdGEucG9sbC5pZCwKICAgICAgICAgICAgcG9sbERhdGE6IHsKICAgICAgICAgICAgICAgIC4uLmRhdGEucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB2b3RlQ291bnRzCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS53YXJuKCdSaWdodFNpZGViYXI6IENvdWxkIG5vdCBmaW5kIGV2ZW50IHdpdGggcG9sbCBJRDonLCBkYXRhLnBvbGwuaWQpOwogICAgICAgIGNvbnNvbGUubG9nKCdSaWdodFNpZGViYXI6IEF2YWlsYWJsZSBldmVudHM6JywgbG9jYWxFdmVudHMudmFsdWUpOwogICAgfQp9OwoKY29uc3QgaGFuZGxlRXZlbnRVcGRhdGUgPSAoeyBwb3N0SWQsIHBvc3REYXRhIH0pID0+IHsKICAgIC8vIElmIHBvc3REYXRhIGlzIG51bGwsIHRoaXMgaXMgYSBkZWxldGlvbiBldmVudAogICAgaWYgKCFwb3N0RGF0YSkgewogICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgZnJvbSBsb2NhbEV2ZW50cyBieSBtYXRjaGluZyBlaXRoZXIgcG9zdF9pZCBvciBpZAogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gbG9jYWxFdmVudHMudmFsdWUuZmlsdGVyKGV2ZW50ID0+IAogICAgICAgICAgICBldmVudC5pZCAhPT0gcG9zdElkICYmIGV2ZW50LnBvc3RfaWQgIT09IHBvc3RJZAogICAgICAgICk7CiAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gQ2hlY2sgaWYgdGhlIHBvc3QgaGFzIGV2ZW50IGRhdGEKICAgIGlmICghcG9zdERhdGEuZXZlbnQpIHsKICAgICAgICBjb25zb2xlLmxvZygnW1JpZ2h0U2lkZWJhcl0gTm8gZXZlbnQgZGF0YSBpbiBwb3N0IHVwZGF0ZScpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZXZlbnQgaW4gbG9jYWxFdmVudHMgYnkgbWF0Y2hpbmcgZWl0aGVyIHBvc3RfaWQgb3IgaWQKICAgIGNvbnN0IGV2ZW50SW5kZXggPSBsb2NhbEV2ZW50cy52YWx1ZS5maW5kSW5kZXgoZXZlbnQgPT4gCiAgICAgICAgZXZlbnQuaWQgPT09IHBvc3RJZCB8fCAKICAgICAgICBldmVudC5pZCA9PT0gcG9zdERhdGEuZXZlbnQuaWQgfHwgCiAgICAgICAgZXZlbnQucG9zdF9pZCA9PT0gcG9zdElkCiAgICApOwoKICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBldmVudAogICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IGxvY2FsRXZlbnRzLnZhbHVlW2V2ZW50SW5kZXhdOwogICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudCA9IHsKICAgICAgICAgICAgLi4ucG9zdERhdGEuZXZlbnQsCiAgICAgICAgICAgIC8vIFByZXNlcnZlIGFkZGl0aW9uYWwgZmllbGRzCiAgICAgICAgICAgIGNyZWF0b3I6IGN1cnJlbnRFdmVudC5jcmVhdG9yLAogICAgICAgICAgICBmaWxlX25hbWU6IGN1cnJlbnRFdmVudC5maWxlX25hbWUsCiAgICAgICAgICAgIGZpbGVfcGF0aDogY3VycmVudEV2ZW50LmZpbGVfcGF0aCwKICAgICAgICAgICAgZmlsZV9zaXplOiBjdXJyZW50RXZlbnQuZmlsZV9zaXplLAogICAgICAgICAgICAvLyBQcmVzZXJ2ZSBwb2xsIGRhdGEgaWYgaXQgZXhpc3RzCiAgICAgICAgICAgIHBvbGw6IHBvc3REYXRhLmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAuLi5wb3N0RGF0YS5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHBvc3REYXRhLmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICB9OwoKICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IGluIHRoZSBhcnJheQogICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgICAgIHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0gPSB1cGRhdGVkRXZlbnQ7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBBZGQgbmV3IGV2ZW50CiAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7CiAgICAgICAgICAgIC4uLnBvc3REYXRhLmV2ZW50LAogICAgICAgICAgICBjcmVhdG9yOiBwb3N0RGF0YS5hdXRob3IsCiAgICAgICAgICAgIGZpbGVfbmFtZTogcG9zdERhdGEuZmlsZV9uYW1lLAogICAgICAgICAgICBmaWxlX3BhdGg6IHBvc3REYXRhLmZpbGVfcGF0aCwKICAgICAgICAgICAgZmlsZV9zaXplOiBwb3N0RGF0YS5maWxlX3NpemUsCiAgICAgICAgICAgIHBvbGw6IHBvc3REYXRhLmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAuLi5wb3N0RGF0YS5ldmVudC5wb2xsLAogICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHBvc3REYXRhLmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICB9OwogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlLCBuZXdFdmVudF07CiAgICB9CgogICAgLy8gU29ydCBldmVudHMgYnkgc3RhcnRfZGF0ZQogICAgbG9jYWxFdmVudHMudmFsdWUuc29ydCgoYSwgYikgPT4gbmV3IERhdGUoYS5zdGFydF9kYXRlKSAtIG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSkpOwoKICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgfSk7Cn07CgovLyBTZXR1cCBFY2hvIGFuZCBldmVudCBsaXN0ZW5lcnMKb25Nb3VudGVkKCgpID0+IHsKICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzLmV2ZW50cykgJiYgcHJvcHMuZXZlbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5wcm9wcy5ldmVudHNdOwogICAgfQogICAgCiAgICAvLyBMaXN0ZW4gZm9yIGN1c3RvbSBwb2xsLXVwZGF0ZWQgZXZlbnRzCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9sbC11cGRhdGVkJywgKGV2ZW50KSA9PiB7CiAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5wb2xsSWQgJiYgZXZlbnQuZGV0YWlsLnBvbGxEYXRhKSB7CiAgICAgICAgICAgIGhhbmRsZVBvbGxVcGRhdGUoewogICAgICAgICAgICAgICAgcG9sbDogewogICAgICAgICAgICAgICAgICAgIGlkOiBldmVudC5kZXRhaWwucG9sbElkLAogICAgICAgICAgICAgICAgICAgIC4uLmV2ZW50LmRldGFpbC5wb2xsRGF0YQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKCiAgICAvLyBMaXN0ZW4gZm9yIGN1c3RvbSBldmVudC11cGRhdGVkIGV2ZW50cwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2V2ZW50LXVwZGF0ZWQnLCAoZXZlbnQpID0+IHsKICAgICAgICBoYW5kbGVFdmVudFVwZGF0ZShldmVudC5kZXRhaWwpOwogICAgfSk7CiAgICAKICAgIC8vIEluaXRpYWxpemUgRWNobwogICAgY29uc3Qgd2FpdEZvckVjaG8gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuRWNobyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh3YWl0Rm9yRWNobyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpbml0aWFsaXplRWNobzMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sIDEwMCk7IC8vIGNoZWNrIGV2ZXJ5IDEwMG1zCn0pOwoKLy8gQ2xlYW51cCBvbiB1bm1vdW50Cm9uVW5tb3VudGVkKCgpID0+IHsKICAgIC8vIFJlbW92ZSBjdXN0b20gZXZlbnQgbGlzdGVuZXJzCiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9sbC11cGRhdGVkJywgKCkgPT4ge30pOwogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2V2ZW50LXVwZGF0ZWQnLCAoZXZlbnQpID0+IHsKICAgICAgICBoYW5kbGVFdmVudFVwZGF0ZShldmVudC5kZXRhaWwpOwogICAgfSk7CiAgICAKICAgIGlmIChlY2hvKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IGVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWwuc3RvcExpc3RlbmluZygnUG9sbFZvdGVVcGRhdGVkJyk7CiAgICAgICAgICAgICAgICBlY2hvLmxlYXZlKCdwb3N0cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgLy8gU2lsZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgfQogICAgfQp9KTsKCi8vIEZvcm1hdCBmaWxlIHNpemUgZnVuY3Rpb24KY29uc3QgZm9ybWF0RmlsZVNpemUgPSAoYnl0ZXMpID0+IHsKICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJzsKICAgIGNvbnN0IGsgPSAxMDI0OwogICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107CiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7CiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHNob3dWb3RlcnNNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IHZvdGVycyA9IHJlZih7fSk7Cgpjb25zdCBoYW5kbGVWb3RlID0gYXN5bmMgKGV2ZW50SWQsIHBvbGxJZCwgb3B0aW9uSWQpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIuZXZlbnRzLnZvdGUnLCB7IGV2ZW50OiBldmVudElkLCBwb2xsOiBwb2xsSWQgfSksIHsKICAgICAgICAgICAgb3B0aW9uX2lkOiBvcHRpb25JZAogICAgICAgIH0pOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdSaWdodFNpZGViYXI6IEVycm9yIHZvdGluZzonLCBlcnJvcik7CiAgICAgICAgdG9hc3QuZXJyb3IoJ0EgYXDEg3J1dCBvIGVyb2FyZSBsYSDDrm5yZWdpc3RyYXJlYSB2b3R1bHVpLicpOwogICAgfQp9OwoKY29uc3QgZ2V0U2VsZWN0ZWRPcHRpb25zID0gKHBvbGwpID0+IHsKICAgIGlmICghcG9sbC52b3RlcykgcmV0dXJuIFtdOwogICAgY29uc3QgdXNlclZvdGUgPSBwb2xsLnZvdGVzLmZpbmQodm90ZSA9PiB2b3RlLnVzZXJfaWQgPT09IHVzZXIuaWQpOwogICAgcmV0dXJuIHVzZXJWb3RlID8gdXNlclZvdGUuc2VsZWN0ZWRfb3B0aW9ucyA6IFtdOwp9OwoKY29uc3QgaXNPcHRpb25TZWxlY3RlZCA9IChwb2xsLCBvcHRpb24pID0+IHsKICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IGdldFNlbGVjdGVkT3B0aW9ucyhwb2xsKTsKICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuaW5jbHVkZXMob3B0aW9uKTsKfTsKCmNvbnN0IGhhbmRsZUNoZWNrYm94Q2hhbmdlID0gKHBvbGwsIG9wdGlvbiwgaXNDaGVja2VkKSA9PiB7CiAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSBnZXRTZWxlY3RlZE9wdGlvbnMocG9sbCk7CiAgICBsZXQgbmV3U2VsZWN0ZWQ7CiAgICAKICAgIGlmIChwb2xsLmlzX211bHRpcGxlX2Nob2ljZSkgewogICAgICAgIGlmIChpc0NoZWNrZWQpIHsKICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBbLi4uY3VycmVudFNlbGVjdGVkLCBvcHRpb25dOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld1NlbGVjdGVkID0gY3VycmVudFNlbGVjdGVkLmZpbHRlcihvID0+IG8gIT09IG9wdGlvbik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBuZXdTZWxlY3RlZCA9IGlzQ2hlY2tlZCA/IFtvcHRpb25dIDogW107CiAgICB9CiAgICAKICAgIGhhbmRsZVZvdGUocG9sbC5pZCwgcG9sbC5pZCwgb3B0aW9uKTsKfTsKCmNvbnN0IHNob3dWb3RlcnMgPSBhc3luYyAocG9sbCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBhbGxWb3RlcnMgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBwb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQocm91dGUoJ21lbWJlci5wb2xscy52b3RlcnMnLCB7IHBvbGw6IHBvbGwuaWQsIG9wdGlvbiB9KSwgewogICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LnZvdGVycykgewogICAgICAgICAgICAgICAgYWxsVm90ZXJzW29wdGlvbl0gPSByZXNwb25zZS5kYXRhLnZvdGVyczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2b3RlcnMudmFsdWUgPSBhbGxWb3RlcnM7CiAgICAgICAgc2hvd1ZvdGVyc01vZGFsLnZhbHVlID0gdHJ1ZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQxOSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0ZhaWxlZCB0byBmZXRjaCB2b3RlcnMgbGlzdC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBlbnN1cmVVVEMgPSAoZGF0ZVN0cmluZykgPT4gewogICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gZGF0ZVN0cmluZzsKICAgIC8vIElmIGFscmVhZHkgaGFzIFogb3IgdGltZXpvbmUgb2Zmc2V0LCByZXR1cm4gYXMgaXMKICAgIGlmIChkYXRlU3RyaW5nLmVuZHNXaXRoKCdaJykgfHwgL1srLV1cZHsyfTo/XGR7Mn0kLy50ZXN0KGRhdGVTdHJpbmcpKSByZXR1cm4gZGF0ZVN0cmluZzsKICAgIHJldHVybiBkYXRlU3RyaW5nICsgJ1onOwp9OwoKY29uc3QgYWRkVG9DYWxlbmRhciA9IChldmVudCkgPT4gewogICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZW5zdXJlVVRDKGV2ZW50LnN0YXJ0X2RhdGUpKTsKICAgIGNvbnN0IGVuZERhdGUgPSBldmVudC5lbmRfZGF0ZSA/IG5ldyBEYXRlKGVuc3VyZVVUQyhldmVudC5lbmRfZGF0ZSkpIDogbmV3IERhdGUoc3RhcnREYXRlLmdldFRpbWUoKSArIDYwICogNjAgKiAxMDAwKTsgLy8gRGVmYXVsdCB0byAxIGhvdXIgaWYgbm8gZW5kIGRhdGUKICAgIAogICAgLy8gRm9ybWF0IGRhdGVzIGZvciBjYWxlbmRhcgogICAgY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlKSA9PiB7CiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKC8tfDp8XC5cZCsvZywgJycpOwogICAgfTsKICAgIAogICAgLy8gQ3JlYXRlIGNhbGVuZGFyIGV2ZW50IGRhdGEKICAgIGNvbnN0IGNhbGVuZGFyRGF0YSA9IHsKICAgICAgICB0aXRsZTogZXZlbnQudGl0bGUsCiAgICAgICAgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uIHx8ICcnLAogICAgICAgIGxvY2F0aW9uOiBldmVudC5sb2NhdGlvbiB8fCAnJywKICAgICAgICBzdGFydFRpbWU6IGZvcm1hdERhdGUoc3RhcnREYXRlKSwKICAgICAgICBlbmRUaW1lOiBmb3JtYXREYXRlKGVuZERhdGUpCiAgICB9OwogICAgCiAgICAvLyBDcmVhdGUgR29vZ2xlIENhbGVuZGFyIFVSTCB3aXRoIHByb3BlciBkYXRlIGZvcm1hdHRpbmcKICAgIGNvbnN0IGdvb2dsZUNhbGVuZGFyVXJsID0gYGh0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhci9yZW5kZXI/YWN0aW9uPVRFTVBMQVRFJnRleHQ9JHtlbmNvZGVVUklDb21wb25lbnQoY2FsZW5kYXJEYXRhLnRpdGxlKX0mZGF0ZXM9JHtjYWxlbmRhckRhdGEuc3RhcnRUaW1lfS8ke2NhbGVuZGFyRGF0YS5lbmRUaW1lfSZkZXRhaWxzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGVuZGFyRGF0YS5kZXNjcmlwdGlvbil9JmxvY2F0aW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGVuZGFyRGF0YS5sb2NhdGlvbil9YDsKICAgIAogICAgLy8gQ3JlYXRlIEFwcGxlIENhbGVuZGFyIFVSTCB3aXRoIHByb3BlciAuaWNzIGZvcm1hdAogICAgY29uc3QgaWNzQ29udGVudCA9IFsKICAgICAgICAnQkVHSU46VkNBTEVOREFSJywKICAgICAgICAnVkVSU0lPTjoyLjAnLAogICAgICAgICdQUk9ESUQ6LS8vaGFja3N3L2hhbmRjYWwvL05PTlNHTUwgdjEuMC8vRU4nLAogICAgICAgICdDQUxTQ0FMRTpHUkVHT1JJQU4nLAogICAgICAgICdCRUdJTjpWRVZFTlQnLAogICAgICAgIGBEVFNUQVJUOiR7Y2FsZW5kYXJEYXRhLnN0YXJ0VGltZX1gLAogICAgICAgIGBEVEVORDoke2NhbGVuZGFyRGF0YS5lbmRUaW1lfWAsCiAgICAgICAgYFNVTU1BUlk6JHtjYWxlbmRhckRhdGEudGl0bGUucmVwbGFjZSgvLC9nLCAnXFwsJyl9YCwKICAgICAgICBgREVTQ1JJUFRJT046JHtjYWxlbmRhckRhdGEuZGVzY3JpcHRpb24ucmVwbGFjZSgvLC9nLCAnXFwsJykucmVwbGFjZSgvXG4vZywgJ1xcbicpfWAsCiAgICAgICAgYExPQ0FUSU9OOiR7Y2FsZW5kYXJEYXRhLmxvY2F0aW9uLnJlcGxhY2UoLywvZywgJ1xcLCcpfWAsCiAgICAgICAgJ0VORDpWRVZFTlQnLAogICAgICAgICdFTkQ6VkNBTEVOREFSJwogICAgXS5qb2luKCdcclxuJyk7CiAgICAKICAgIGNvbnN0IGFwcGxlQ2FsZW5kYXJVcmwgPSBgZGF0YTp0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoaWNzQ29udGVudCl9YDsKICAgIAogICAgLy8gT3BlbiBjYWxlbmRhciBvcHRpb25zIGluIGEgbW9kYWwKICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBtb2RhbC5jbGFzc05hbWUgPSAnZml4ZWQgaW5zZXQtMCB6LTUwIG92ZXJmbG93LXktYXV0byc7CiAgICBtb2RhbC5pbm5lckhUTUwgPSBgCiAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLWgtc2NyZWVuIHB0LTQgcHgtNCBwYi0yMCB0ZXh0LWNlbnRlciBzbTpibG9jayBzbTpwLTAiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIGJnLWdyYXktNTAwIGJnLW9wYWNpdHktNzUgdHJhbnNpdGlvbi1vcGFjaXR5Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWJsb2NrIGFsaWduLWJvdHRvbSBiZy13aGl0ZSByb3VuZGVkLWxnIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXhsIHRyYW5zZm9ybSB0cmFuc2l0aW9uLWFsbCBzbTpteS04IHNtOmFsaWduLW1pZGRsZSBzbTptYXgtdy1sZyBzbTp3LWZ1bGwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgcHgtNCBwdC01IHBiLTQgc206cC02IHNtOnBiLTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNtOmZsZXggc206aXRlbXMtc3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0zIHRleHQtY2VudGVyIHNtOm10LTAgc206dGV4dC1sZWZ0IHctZnVsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgbGVhZGluZy02IGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiPkFkZCB0byBDYWxlbmRhcjwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJHtnb29nbGVDYWxlbmRhclVybH0iIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTQgcHktMiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1tZCB0ZXh0LXdoaXRlIGJnLWJsdWUtNjAwIGhvdmVyOmJnLWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy01IGgtNSBtci0yIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIgMEM1LjM3MiAwIDAgNS4zNzIgMCAxMnM1LjM3MiAxMiAxMiAxMiAxMi01LjM3MiAxMi0xMlMxOC42MjggMCAxMiAwem0wIDJjNS41MTQgMCAxMCA0LjQ4NiAxMCAxMHMtNC40ODYgMTAtMTAgMTBTMiAxNy41MTQgMiAxMiA2LjQ4NiAyIDEyIDJ6bTAgM2MtMy44NjYgMC03IDMuMTM0LTcgN3MzLjEzNCA3IDcgNyA3LTMuMTM0IDctNy0zLjEzNC03LTctN3ptMCAyYzIuNzYxIDAgNSAyLjIzOSA1IDVzLTIuMjM5IDUtNSA1LTUtMi4yMzktNS01IDIuMjM5LTUgNS01eiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIEdvb2dsZSBDYWxlbmRhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIke2FwcGxlQ2FsZW5kYXJVcmx9IiBkb3dubG9hZD0iZXZlbnQuaWNzIiBjbGFzcz0idy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTQgcHktMiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtc20gZm9udC1tZWRpdW0gcm91bmRlZC1tZCB0ZXh0LXdoaXRlIGJnLWdyYXktNjAwIGhvdmVyOmJnLWdyYXktNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy01IGgtNSBtci0yIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTguNzEgMTkuNWMtLjgzIDEuMjQtMS43MSAyLjQ1LTMuMDUgMi40Ny0xLjM0LjAzLTEuNzctLjc5LTMuMjktLjc5LTEuNTMgMC0yIC43Ny0zLjI3LjgyLTEuMzEuMDUtMi4zLTEuMzItMy4xNC0yLjUzQzQuMjUgMTcgMi45NCAxMi40NSA0LjcgOS4zOWMuODctMS41MiAyLjQzLTIuNDggNC4xMi0yLjUxIDEuMjgtLjAyIDIuNS44NyAzLjI5Ljg3Ljc4IDAgMi4yNi0xLjA3IDMuODEtLjkxLjY1LjAzIDIuNDcuMjYgMy42NCAxLjk4LS4wOS4wNi0yLjE3IDEuMjgtMi4xNSAzLjgxLjAzIDMuMDIgMi42NSA0LjAzIDIuNjggNC4wNC0uMDMuMDctLjQyIDEuNDQtMS4zOCAyLjgzTTEzIDMuNWMuNzMtLjgzIDEuOTQtMS40NiAyLjk0LTEuNS4xMyAxLjE3LS4zNCAyLjM1LTEuMDQgMy4xOS0uNjkuODUtMS44MyAxLjUxLTIuOTUgMS40Mi0uMTUtMS4xNS40MS0yLjM1IDEuMDUtMy4xMXoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBBcHBsZSBDYWxlbmRhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctZ3JheS01MCBweC00IHB5LTMgc206cHgtNiBzbTpmbGV4IHNtOmZsZXgtcm93LXJldmVyc2UiPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibXQtMyB3LWZ1bGwgaW5saW5lLWZsZXgganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBweC00IHB5LTIgYmctd2hpdGUgdGV4dC1iYXNlIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgaG92ZXI6YmctZ3JheS01MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1pbmRpZ28tNTAwIHNtOm10LTAgc206bWwtMyBzbTp3LWF1dG8gc206dGV4dC1zbSI+CiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlCiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICBgOwogICAgCiAgICAvLyBBZGQgY2xpY2sgaGFuZGxlciB0byBjbG9zZSBidXR0b24KICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gbW9kYWwucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7CiAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1vZGFsKTsKICAgIH0pOwogICAgCiAgICAvLyBBZGQgY2xpY2sgaGFuZGxlciB0byBiYWNrZ3JvdW5kCiAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBtb2RhbCkgewogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG1vZGFsKTsKICAgICAgICB9CiAgICB9KTsKICAgIAogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbCk7Cn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0iZml4ZWQgcmlnaHQtMCB0b3AtMTQgdy1bMzYwcHhdIGgtW2NhbGMoMTAwdmgtMy41cmVtKV0gb3ZlcmZsb3cteS1hdXRvIHAtNCB6LTMiPgogICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHJvdW5kZWQtbGcgc2hhZG93IHAtNCI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LXNlbWlib2xkIG1iLTQiPlVybcSDdG9ydWwgRXZlbmltZW50PC9oMj4KICAgICAgICAgICAgPGRpdiB2LWlmPSJuZXh0RXZlbnQiIGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmctYmx1ZS01MCByb3VuZGVkLWxnIHAtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtYmx1ZS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1tZWRpdW0iPnt7IG5leHRFdmVudC50aXRsZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0yIHRleHQtc20gdGV4dC1ibHVlLTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNCB3LTQiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0xLTEyYTEgMSAwIDEwLTIgMHY0YTEgMSAwIDAwLjI5My43MDdsMi44MjggMi44MjlhMSAxIDAgMTAxLjQxNS0xLjQxNUwxMSA5LjU4NlY2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBuZXcgRGF0ZShuZXh0RXZlbnQuc3RhcnRfZGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdyby1STycsIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla2RheTogJ2xvbmcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoOiAnbG9uZycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheTogJ251bWVyaWMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibmV4dEV2ZW50LmxvY2F0aW9uIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIG10LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5leHRFdmVudC5sb2NhdGlvbiB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibmV4dEV2ZW50LmRlc2NyaXB0aW9uIiBjbGFzcz0ibXQtMiB0ZXh0LWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5kZXNjcmlwdGlvbiB9fQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIHRvIENhbGVuZGFyIEJ1dHRvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0iYWRkVG9DYWxlbmRhcihuZXh0RXZlbnQpIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ3LTUgaC01IG1yLTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjQgMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTggN1YzbTggNFYzbS05IDhoMTBNNSAyMWgxNGEyIDIgMCAwMDItMlY3YTIgMiAwIDAwLTItMkg1YTIgMiAwIDAwLTIgMnYxMmEyIDIgMCAwMDIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIENhbGVuZGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgRGlzcGxheSBmb3IgRXZlbnRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5maWxlX3BhdGgiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPSJyb3V0ZSgnZmlsZXMuZG93bmxvYWQnLCBuZXh0RXZlbnQuaWQpIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNiBoLTYgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgMTB2Nm0wIDBsLTMtM20zIDNsMy0zbTIgOEg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5maWxlX25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWwtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPih7eyBmb3JtYXRGaWxlU2l6ZShuZXh0RXZlbnQuZmlsZV9zaXplKSB9fSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gUG9sbCBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5wb2xsIiBjbGFzcz0ibXQtNCBib3JkZXItdCBib3JkZXItYmx1ZS0yMDAgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LWJsdWUtNzAwIG1iLTMiPnt7IG5leHRFdmVudC5wb2xsLnF1ZXN0aW9uIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iKG9wdGlvbiwgaW5kZXgpIGluIG5leHRFdmVudC5wb2xsLm9wdGlvbnMiIDprZXk9ImluZGV4IiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJlbGF0aXZlIGdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0eXBlPSJuZXh0RXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UgPyAnY2hlY2tib3gnIDogJ3JhZGlvJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpuYW1lPSIncG9sbF8nICsgbmV4dEV2ZW50LnBvbGwuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dmFsdWU9Im9wdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjaGVja2VkPSJpc09wdGlvblNlbGVjdGVkKG5leHRFdmVudC5wb2xsLCBvcHRpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iKGUpID0+IGhhbmRsZUNoZWNrYm94Q2hhbmdlKG5leHRFdmVudC5wb2xsLCBvcHRpb24sIGUudGFyZ2V0LmNoZWNrZWQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJvdW5kZWQtZnVsbCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIHx8IDAgfX0gdm90ZXMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPih7eyBNYXRoLnJvdW5kKChuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIC8gT2JqZWN0LnZhbHVlcyhuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwIH19JSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTIgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC1mdWxsIGJnLWluZGlnby01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9Insgd2lkdGg6IGAke01hdGgucm91bmQoKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gLyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSkgKiAxMDApIHx8IDB9JWAgfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSB9fSB2b3RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVycyhuZXh0RXZlbnQucG9sbCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPSJ0ZXh0LWNlbnRlciBweS04Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTEyIHctMTIgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItMiI+TnUgZXhpc3TEgyBldmVuaW1lbnRlIHZpaXRvYXJlPC9oMz4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPkPDom5kIHZvciBmaSBjcmVhdGUgZXZlbmltZW50ZSBub2ksIGFjZXN0ZWEgdm9yIGFwxINyZWEgYWljaS48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZvdGVycyBNb2RhbCAtLT4KICAgICAgICA8ZGl2IHYtaWY9InNob3dWb3RlcnNNb2RhbCIgY2xhc3M9ImZpeGVkIGluc2V0LTAgei1bOTk5OV0gb3ZlcmZsb3cteS1hdXRvIiBhcmlhLWxhYmVsbGVkYnk9Im1vZGFsLXRpdGxlIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1zY3JlZW4gcHQtNCBweC00IHBiLTIwIHRleHQtY2VudGVyIHNtOmJsb2NrIHNtOnAtMCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIGJnLWJsYWNrIGJnLW9wYWNpdHktNTAgdHJhbnNpdGlvbi1vcGFjaXR5IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGlkZGVuIHNtOmlubGluZS1ibG9jayBzbTphbGlnbi1taWRkbGUgc206aC1zY3JlZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj4mIzgyMDM7PC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWJsb2NrIGFsaWduLWJvdHRvbSBiZy13aGl0ZSByb3VuZGVkLWxnIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXhsIHRyYW5zZm9ybSB0cmFuc2l0aW9uLWFsbCBzbTpteS04IHNtOmFsaWduLW1pZGRsZSBzbTptYXgtdy0yeGwgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvbGwgVm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIob3B0aW9uVm90ZXJzLCBvcHRpb24pIGluIHZvdGVycyIgOmtleT0ib3B0aW9uIiBjbGFzcz0ic3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJ2b3RlciBpbiBvcHRpb25Wb3RlcnMiIDprZXk9InZvdGVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0idm90ZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZvdGVyLmZpcnN0X25hbWUgKyAnICcgKyB2b3Rlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJ2b3Rlci5maXJzdF9uYW1lICsgJyAnICsgdm90ZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS03MDAiPnt7IHZvdGVyLmZpcnN0X25hbWUgfX0ge3sgdm90ZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJvcHRpb25Wb3RlcnMubGVuZ3RoID09PSAwIiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHZvdGVycyB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTYgZmxleCBqdXN0aWZ5LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVyc01vZGFsID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JheS0yMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L3RlbXBsYXRlPgoKPHN0eWxlPgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogI0JDQzBDNDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjQTRBN0FCOwp9CgovKiBDdXN0b20gY2hlY2tib3ggc3R5bGluZyAqLwpbdHlwZT0iY2hlY2tib3giXSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGJhY2tncm91bmQtb3JpZ2luOiBib3JkZXItYm94OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGhlaWdodDogMXJlbTsKICAgIHdpZHRoOiAxcmVtOwogICAgY29sb3I6IHJnYig3OSwgNzAsIDIyOSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7CiAgICAtLXR3LXNoYWRvdzogMCAwICMwMDAwOwogICAgcGFkZGluZzogMHB4OwogICAgYm9yZGVyLWNvbG9yOiByZ2IoMjA5LCAyMTMsIDIxOSk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5OXB4Owp9CgpbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J3doaXRlJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNMTIuMjA3IDQuNzkzYTEgMSAwIDAxMCAxLjQxNGwtNSA1YTEgMSAwIDAxLTEuNDE0IDBsLTItMmExIDEgMCAwMTEuNDE0LTEuNDE0TDYuNSA5LjA4Nmw0LjI5My00LjI5M2ExIDEgMCAwMTEuNDE0IDB6Jy8lM2UlM2Mvc3ZnJTNlIik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKfQoKW3R5cGU9ImNoZWNrYm94Il06Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKTsKfQo8L3N0eWxlPiAAAAAAAAAAAHqfAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAA1xYAAAAAAADiFgAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "resources/js/Components/Member/MobileEvent.vue",
			"settings":
			{
				"buffer_size": 43617,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					40,
					2,
					"left_delete",
					null,
					"AgAAAEAIAAAAAAAAQAgAAAAAAABEAAAAICAgICAgICAgICAgY29uc29sZS5sb2coJ01vYmlsZUV2ZW50OiBSYXcgcG9sbCB1cGRhdGUgZGF0YTonLCBkYXRhKTs/CAAAAAAAAD8IAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACECAAAAAAAAEAIAAAAAAAAAAAAAAAA8L8"
				],
				[
					46,
					2,
					"left_delete",
					null,
					"AgAAABwtAAAAAAAAHC0AAAAAAACWAAAAICAgIGNvbnNvbGUubG9nKCdNb2JpbGVFdmVudDogUmVjZWl2ZWQgcG9sbCB1cGRhdGUgZXZlbnQ6JywgZGF0YSk7CiAgICBjb25zb2xlLmxvZygnTW9iaWxlRXZlbnQ6IEN1cnJlbnQgZXZlbnQgYmVmb3JlIHVwZGF0ZTonLCBuZXh0RXZlbnQudmFsdWUpOwogICAgGy0AAAAAAAAbLQAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACyLQAAAAAAABwtAAAAAAAAAAAAAAAA8L8"
				],
				[
					49,
					3,
					"left_delete",
					null,
					"AwAAANQuAAAAAAAA1C4AAAAAAAALAQAAICAgICAgICBjb25zb2xlLmxvZygnTW9iaWxlRXZlbnQ6IFVwZGF0aW5nIHBvbGwgZGF0YTonLCB7CiAgICAgICAgICAgIGJlZm9yZTogbmV4dEV2ZW50LnZhbHVlLnBvbGwsCiAgICAgICAgICAgIGFmdGVyOiB7CiAgICAgICAgICAgICAgICAuLi5uZXh0RXZlbnQudmFsdWUucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVzOiBkYXRhLnBvbGwudm90ZXMsCiAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgICAgICB9CiAgICAgICAgfSk70y4AAAAAAADTLgAAAAAAAAEAAAAK0i4AAAAAAADSLgAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADfLwAAAAAAANQuAAAAAAAAAAAAAAAA8L8"
				],
				[
					52,
					2,
					"left_delete",
					null,
					"AgAAABwwAAAAAAAAHDAAAAAAAABTAAAAICAgICAgICAKICAgICAgICBjb25zb2xlLmxvZygnTW9iaWxlRXZlbnQ6IEV2ZW50IGFmdGVyIHVwZGF0ZTonLCBuZXh0RXZlbnQudmFsdWUpOwobMAAAAAAAABswAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABvMAAAAAAAABwwAAAAAAAAAAAAAAAA8L8"
				],
				[
					59,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAyjwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgd2F0Y2gsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKaW1wb3J0IHsgdXNlUGFnZSwgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1vZGFsIGZyb20gJ0AvQ29tcG9uZW50cy9Nb2RhbC52dWUnOwppbXBvcnQgRWNobyBmcm9tICdsYXJhdmVsLWVjaG8nOwoKY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsncG9sbC11cGRhdGVkJywgJ3JlZnJlc2gtZXZlbnRzJ10pOwoKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBldmVudHM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfQp9KTsKCmNvbnN0IHBhZ2UgPSB1c2VQYWdlKCk7CmNvbnN0IHVzZXIgPSBwYWdlLnByb3BzLmF1dGgudXNlcjsKCi8vIENyZWF0ZSBhIHJlYWN0aXZlIHJlZmVyZW5jZSBmb3IgZXZlbnRzCmNvbnN0IGxvY2FsRXZlbnRzID0gcmVmKFsuLi5wcm9wcy5ldmVudHNdKTsKCi8vIEluaXRpYWxpemUgRWNobwpsZXQgZWNobyA9IG51bGw7CgovLyBXYXRjaCBmb3IgY2hhbmdlcyBpbiBwcm9wcy5ldmVudHMKd2F0Y2goKCkgPT4gcHJvcHMuZXZlbnRzLCAobmV3RXZlbnRzKSA9PiB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdFdmVudHMpICYmIG5ld0V2ZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gTWVyZ2UgbmV3IGV2ZW50cyB3aXRoIGV4aXN0aW5nIG9uZXMsIGF2b2lkaW5nIGR1cGxpY2F0ZXMKICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQobG9jYWxFdmVudHMudmFsdWUubWFwKGUgPT4gZS5pZCkpOwogICAgICAgIGNvbnN0IHVuaXF1ZU5ld0V2ZW50cyA9IG5ld0V2ZW50cy5maWx0ZXIoZSA9PiAhZXhpc3RpbmdJZHMuaGFzKGUuaWQpKTsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgLi4udW5pcXVlTmV3RXZlbnRzXTsKICAgIH0KfSwgeyBkZWVwOiB0cnVlIH0pOwoKLy8gVXBkYXRlIG5leHRFdmVudCBjb21wdXRlZCB0byB1c2UgbG9jYWxFdmVudHMgaW5zdGVhZCBvZiBwcm9wcwpjb25zdCBuZXh0RXZlbnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBpZiAoIWxvY2FsRXZlbnRzLnZhbHVlPy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTsKICAgIAogICAgY29uc3QgZmlsdGVyZWRFdmVudHMgPSBsb2NhbEV2ZW50cy52YWx1ZS5maWx0ZXIocG9zdCA9PiB7CiAgICAgICAgaWYgKCFwb3N0Py5zdGFydF9kYXRlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZXZlbnREYXRlID0gbmV3IERhdGUocG9zdC5zdGFydF9kYXRlKTsKICAgICAgICByZXR1cm4gZXZlbnREYXRlID4gbm93OwogICAgfSk7CiAgICAKICAgIGlmIChmaWx0ZXJlZEV2ZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgY29uc3Qgc29ydGVkRXZlbnRzID0gZmlsdGVyZWRFdmVudHMuc29ydCgoYSwgYikgPT4gewogICAgICAgIGlmICghYT8uc3RhcnRfZGF0ZSB8fCAhYj8uc3RhcnRfZGF0ZSkgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSkgLSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpOwogICAgfSk7CiAgICAKICAgIGNvbnN0IG5leHRFdmVudCA9IHNvcnRlZEV2ZW50c1swXTsKICAgIHJldHVybiBuZXh0RXZlbnQ7Cn0pOwoKY29uc3QgaW5pdGlhbGl6ZUVjaG8gPSAoKSA9PiB7CiAgICB0cnkgewogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnMgLSBvbmx5IGxpc3RlbiB0byBvbmUgdmVyc2lvbiBvZiB0aGUgZXZlbnQKICAgICAgICBjaGFubmVsLmxpc3RlbignUG9sbFZvdGVVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEucG9sbCkgewogICAgICAgICAgICAgICAgLy8gRGVib3VuY2UgdGhlIHVwZGF0ZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBwcm9jZXNzaW5nCiAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1vYmlsZVBvbGxVcGRhdGVUaW1lb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdpbmRvdy5tb2JpbGVQb2xsVXBkYXRlVGltZW91dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aW5kb3cubW9iaWxlUG9sbFVwZGF0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKGRhdGEpOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBldmVudCB3aXRoIHRoZSBkb3QgcHJlZml4CiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJy5Qb2xsVm90ZVVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YS5wb2xsKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKGRhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIExpc3RlbiBmb3IgUG9zdERlbGV0ZWQgZXZlbnQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3REZWxldGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdwb3N0X2lkJyBpbiBkYXRhKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGZyb20gbG9jYWxFdmVudHMgYnkgbWF0Y2hpbmcgZWl0aGVyIHBvc3RfaWQgb3IgaWQKICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gbG9jYWxFdmVudHMudmFsdWUuZmlsdGVyKGV2ZW50ID0+IAogICAgICAgICAgICAgICAgICAgIGV2ZW50LmlkICE9PSBkYXRhLnBvc3RfaWQgJiYgZXZlbnQucG9zdF9pZCAhPT0gZGF0YS5wb3N0X2lkCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIHBvbGwtdXBkYXRlZCBldmVudHMgZnJvbSB0aGUgRmVlZCBjb21wb25lbnQKICAgICAgICBjaGFubmVsLmxpc3RlbigncG9sbC11cGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEucG9sbElkICYmIGRhdGEucG9sbERhdGEpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVBvbGxVcGRhdGUoewogICAgICAgICAgICAgICAgICAgIHBvbGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEucG9sbElkLAogICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLnBvbGxEYXRhCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBFdmVudENyZWF0ZWQgdG8gdXBkYXRlIGV2ZW50cyBpbiByZWFsIHRpbWUKICAgICAgICBjaGFubmVsLmxpc3RlbignLkV2ZW50Q3JlYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucG9zdCAmJiBkYXRhLnBvc3QuZXZlbnQpIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGV2ZW50IGFscmVhZHkgZXhpc3RzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSBsb2NhbEV2ZW50cy52YWx1ZS5zb21lKGV2ID0+IAogICAgICAgICAgICAgICAgICAgIGV2LmlkID09PSBkYXRhLnBvc3QuZXZlbnQuaWQgfHwgCiAgICAgICAgICAgICAgICAgICAgZXYucG9zdF9pZCA9PT0gZGF0YS5wb3N0LmlkCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykgewogICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCB0aGUgZXZlbnQgYXMgbmVlZGVkIGZvciB5b3VyIHNpZGViYXIgKG1hdGNoIHRoZSBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLnBvc3QuZXZlbnQuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IGRhdGEucG9zdC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEucG9zdC5ldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEucG9zdC5ldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZGF0YS5wb3N0LmV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBkYXRhLnBvc3QuZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGRhdGEucG9zdC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtkYXRhLnBvc3QuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZGF0YS5wb3N0LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBkYXRhLnBvc3QuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGRhdGEucG9zdC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZTogZGF0YS5wb3N0LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9sbDogZGF0YS5wb3N0LmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5wb3N0LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogZGF0YS5wb3N0LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhbmQgc29ydCBieSBzdGFydF9kYXRlCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgbmV3RXZlbnRdLnNvcnQoKGEsIGIpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gdXBkYXRlZEV2ZW50czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbUmlnaHRTaWRlYmFyXSBJbnZhbGlkIGV2ZW50IGRhdGEgcmVjZWl2ZWQ6JywgZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBFdmVudFVwZGF0ZWQgdG8gdXBkYXRlIGV2ZW50cyBpbiByZWFsIHRpbWUKICAgICAgICBjaGFubmVsLmxpc3RlbignRXZlbnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0ICYmIGRhdGEucG9zdC5ldmVudCkgewogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBldmVudCBJRCBmcm9tIHRoZSBwb3N0J3MgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgICAgICBjb25zdCBldmVudElkID0gZGF0YS5wb3N0LmV2ZW50LmlkOwogICAgICAgICAgICAgICAgY29uc3QgcG9zdElkID0gZGF0YS5wb3N0LmlkOwoKICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGV2ZW50IGluIGxvY2FsRXZlbnRzIGJ5IHBvc3QgSUQgZmlyc3QKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBsb2NhbEV2ZW50cy52YWx1ZS5maW5kSW5kZXgoZXYgPT4gewogICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCBieSBwb3N0IElEIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgaWYgKGV2LnBvc3RfaWQgPT09IHBvc3RJZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiB0cnkgdG8gbWF0Y2ggYnkgZXZlbnQgSUQKICAgICAgICAgICAgICAgICAgICBpZiAoZXYuaWQgPT09IGV2ZW50SWQgfHwgZXYuaWQgPT09IHBvc3RJZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBldmVudCBkYXRhIGlmIGZvdW5kCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0V2ZW50ID0gZXZlbnRJbmRleCAhPT0gLTEgPyBsb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XSA6IG51bGw7CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIHBvbGwgZGF0YSBpZiBpdCBleGlzdHMKICAgICAgICAgICAgICAgIGxldCBwb2xsRGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb3N0LmV2ZW50LnBvbGwpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1BvbGwgPSBleGlzdGluZ0V2ZW50Py5wb2xsOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvbGwgPSBkYXRhLnBvc3QuZXZlbnQucG9sbDsKCiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbWFwcGluZyBvZiBvbGQgb3B0aW9ucyB0byBuZXcgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbk1hcHBpbmcgPSB7fTsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdQb2xsPy5vcHRpb25zICYmIG5ld1BvbGwub3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1BvbGwub3B0aW9ucy5mb3JFYWNoKChvbGRPcHRpb24sIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UG9sbC5vcHRpb25zW2luZGV4XSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXSA9IG5ld1BvbGwub3B0aW9uc1tpbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gTWFwIHZvdGUgY291bnRzIHRvIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Vm90ZUNvdW50cyA9IHt9OwogICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1BvbGw/LnZvdGVfY291bnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4aXN0aW5nUG9sbC52b3RlX2NvdW50cykuZm9yRWFjaCgoW29sZE9wdGlvbiwgY291bnRdKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb24gPSBvcHRpb25NYXBwaW5nW29sZE9wdGlvbl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3T3B0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Vm90ZUNvdW50c1tuZXdPcHRpb25dID0gY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gTWFwIHZvdGVzIHRvIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Vm90ZXMgPSBleGlzdGluZ1BvbGw/LnZvdGVzPy5tYXAodm90ZSA9PiAoewogICAgICAgICAgICAgICAgICAgICAgICAuLi52b3RlLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZF9vcHRpb25zOiB2b3RlLnNlbGVjdGVkX29wdGlvbnMubWFwKG9sZE9wdGlvbiA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXSB8fCBvbGRPcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIH0pKSB8fCBbXTsKCiAgICAgICAgICAgICAgICAgICAgcG9sbERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBuZXdQb2xsLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogbmV3UG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbmV3UG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IG5ld1BvbGwuaXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogbmV3Vm90ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBuZXdWb3RlQ291bnRzCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgdGhlIHVwZGF0ZWQgZXZlbnQKICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudCA9IHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnRJZCwKICAgICAgICAgICAgICAgICAgICBwb3N0X2lkOiBwb3N0SWQsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEucG9zdC5ldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5wb3N0LmV2ZW50LmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RhdGU6IGRhdGEucG9zdC5ldmVudC5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGRhdGEucG9zdC5ldmVudC5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBkYXRhLnBvc3QuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtkYXRhLnBvc3QuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZGF0YS5wb3N0LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aDogZGF0YS5wb3N0LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGRhdGEucG9zdC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBkYXRhLnBvc3QuZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IHBvbGxEYXRhCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoZXZlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IGluIHRoZSBhcnJheQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0gPSB1cGRhdGVkRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gU29ydCBieSBzdGFydF9kYXRlCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50cy5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUEgLSBkYXRlQjsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgbG9jYWxFdmVudHMgd2l0aCB0aGUgbmV3IGFycmF5CiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGV2ZW50IG5vdCBmb3VuZCwgYWRkIGl0IHRvIHRoZSBhcnJheQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWUsIHVwZGF0ZWRFdmVudF0uc29ydCgoYSwgYikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUoYi5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfQoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZXMKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChkYXRhKSA9PiB7CiAgICBpZiAobmV4dEV2ZW50LnZhbHVlICYmIG5leHRFdmVudC52YWx1ZS5wb2xsICYmIG5leHRFdmVudC52YWx1ZS5wb2xsLmlkID09PSBkYXRhLnBvbGwuaWQpIHsKICAgICAgICAvLyBDYWxjdWxhdGUgdm90ZSBjb3VudHMgZnJvbSB2b3RlcyBhcnJheQogICAgICAgIGNvbnN0IHZvdGVDb3VudHMgPSB7fTsKICAgICAgICBpZiAoZGF0YS5wb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgZGF0YS5wb2xsLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gewogICAgICAgICAgICAgICAgdm90ZUNvdW50c1tvcHRpb25dID0gZGF0YS5wb2xsLnZvdGVzLmZpbHRlcih2b3RlID0+IAogICAgICAgICAgICAgICAgICAgIHZvdGUuc2VsZWN0ZWRfb3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pCiAgICAgICAgICAgICAgICApLmxlbmd0aDsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9sbCBkYXRhCiAgICAgICAgbmV4dEV2ZW50LnZhbHVlLnBvbGwgPSB7CiAgICAgICAgICAgIC4uLm5leHRFdmVudC52YWx1ZS5wb2xsLAogICAgICAgICAgICB2b3RlczogZGF0YS5wb2xsLnZvdGVzLAogICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgIG5leHRFdmVudC52YWx1ZSA9IHsgLi4ubmV4dEV2ZW50LnZhbHVlIH07CiAgICAgICAgfSk7CiAgICAgICAgLy8gRW1pdCB0aGUgcG9sbCB1cGRhdGUgdG8gdGhlIHBhcmVudAogICAgICAgIGVtaXQoJ3BvbGwtdXBkYXRlZCcsIHsKICAgICAgICAgICAgcG9sbElkOiBkYXRhLnBvbGwuaWQsCiAgICAgICAgICAgIHBvbGxEYXRhOiB7CiAgICAgICAgICAgICAgICAuLi5kYXRhLnBvbGwsCiAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUud2FybignTW9iaWxlRXZlbnQ6IENvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIHBvbGw6JywgZGF0YS5wb2xsLmlkKTsKICAgICAgICBjb25zb2xlLmxvZygnTW9iaWxlRXZlbnQ6IEN1cnJlbnQgZXZlbnQ6JywgbmV4dEV2ZW50LnZhbHVlKTsKICAgIH0KfTsKCmNvbnN0IGhhbmRsZUV2ZW50VXBkYXRlID0gKHsgcG9zdElkLCBwb3N0RGF0YSB9KSA9PiB7CiAgICAvLyBJZiBwb3N0RGF0YSBpcyBudWxsLCB0aGlzIGlzIGEgZGVsZXRpb24gZXZlbnQKICAgIGlmICghcG9zdERhdGEpIHsKICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGZyb20gbG9jYWxFdmVudHMgYnkgbWF0Y2hpbmcgZWl0aGVyIHBvc3RfaWQgb3IgaWQKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbHRlcihldmVudCA9PiAKICAgICAgICAgICAgZXZlbnQuaWQgIT09IHBvc3RJZCAmJiBldmVudC5wb3N0X2lkICE9PSBwb3N0SWQKICAgICAgICApOwogICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIENoZWNrIGlmIHRoZSBwb3N0IGhhcyBldmVudCBkYXRhCiAgICBpZiAoIXBvc3REYXRhLmV2ZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coJ1tSaWdodFNpZGViYXJdIE5vIGV2ZW50IGRhdGEgaW4gcG9zdCB1cGRhdGUnKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGV2ZW50IGluIGxvY2FsRXZlbnRzIGJ5IG1hdGNoaW5nIGVpdGhlciBwb3N0X2lkIG9yIGlkCiAgICBjb25zdCBldmVudEluZGV4ID0gbG9jYWxFdmVudHMudmFsdWUuZmluZEluZGV4KGV2ZW50ID0+IAogICAgICAgIGV2ZW50LmlkID09PSBwb3N0SWQgfHwgCiAgICAgICAgZXZlbnQuaWQgPT09IHBvc3REYXRhLmV2ZW50LmlkIHx8IAogICAgICAgIGV2ZW50LnBvc3RfaWQgPT09IHBvc3RJZAogICAgKTsKCiAgICBpZiAoZXZlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgZXZlbnQKICAgICAgICBjb25zdCBjdXJyZW50RXZlbnQgPSBsb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XTsKICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnQgPSB7CiAgICAgICAgICAgIC4uLnBvc3REYXRhLmV2ZW50LAogICAgICAgICAgICAvLyBQcmVzZXJ2ZSBhZGRpdGlvbmFsIGZpZWxkcwogICAgICAgICAgICBjcmVhdG9yOiBjdXJyZW50RXZlbnQuY3JlYXRvciwKICAgICAgICAgICAgZmlsZV9uYW1lOiBjdXJyZW50RXZlbnQuZmlsZV9uYW1lLAogICAgICAgICAgICBmaWxlX3BhdGg6IGN1cnJlbnRFdmVudC5maWxlX3BhdGgsCiAgICAgICAgICAgIGZpbGVfc2l6ZTogY3VycmVudEV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgLy8gUHJlc2VydmUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICBwb2xsOiBwb3N0RGF0YS5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgLi4ucG9zdERhdGEuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBwb3N0RGF0YS5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgfTsKCiAgICAgICAgLy8gVXBkYXRlIHRoZSBldmVudCBpbiB0aGUgYXJyYXkKICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICB1cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdID0gdXBkYXRlZEV2ZW50OwogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gdXBkYXRlZEV2ZW50czsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWRkIG5ldyBldmVudAogICAgICAgIGNvbnN0IG5ld0V2ZW50ID0gewogICAgICAgICAgICAuLi5wb3N0RGF0YS5ldmVudCwKICAgICAgICAgICAgY3JlYXRvcjogcG9zdERhdGEuYXV0aG9yLAogICAgICAgICAgICBmaWxlX25hbWU6IHBvc3REYXRhLmZpbGVfbmFtZSwKICAgICAgICAgICAgZmlsZV9wYXRoOiBwb3N0RGF0YS5maWxlX3BhdGgsCiAgICAgICAgICAgIGZpbGVfc2l6ZTogcG9zdERhdGEuZmlsZV9zaXplLAogICAgICAgICAgICBwb2xsOiBwb3N0RGF0YS5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgLi4ucG9zdERhdGEuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBwb3N0RGF0YS5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgfTsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgbmV3RXZlbnRdOwogICAgfQoKICAgIC8vIFNvcnQgZXZlbnRzIGJ5IHN0YXJ0X2RhdGUKICAgIGxvY2FsRXZlbnRzLnZhbHVlLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSkgLSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpKTsKCiAgICAvLyBGb3JjZSBhIHJlYWN0aXZlIHVwZGF0ZQogICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgIH0pOwp9OwoKLy8gU2V0dXAgRWNobyBhbmQgZXZlbnQgbGlzdGVuZXJzCm9uTW91bnRlZCgoKSA9PiB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5ldmVudHMpICYmIHByb3BzLmV2ZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBbLi4ucHJvcHMuZXZlbnRzXTsKICAgIH0KICAgIAogICAgLy8gTGlzdGVuIGZvciBjdXN0b20gcG9sbC11cGRhdGVkIGV2ZW50cwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvbGwtdXBkYXRlZCcsIChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5kZXRhaWwucG9sbElkICYmIGV2ZW50LmRldGFpbC5wb2xsRGF0YSkgewogICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKHsKICAgICAgICAgICAgICAgIHBvbGw6IHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZGV0YWlsLnBvbGxJZCwKICAgICAgICAgICAgICAgICAgICAuLi5ldmVudC5kZXRhaWwucG9sbERhdGEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gTGlzdGVuIGZvciBjdXN0b20gZXZlbnQtdXBkYXRlZCBldmVudHMKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdldmVudC11cGRhdGVkJywgKGV2ZW50KSA9PiB7CiAgICAgICAgaGFuZGxlRXZlbnRVcGRhdGUoZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogICAgCiAgICAvLyBJbml0aWFsaXplIEVjaG8KICAgIGNvbnN0IHdhaXRGb3JFY2hvID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LkVjaG8gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2FpdEZvckVjaG8pOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUVjaG8oKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sIDEwMCk7IC8vIGNoZWNrIGV2ZXJ5IDEwMG1zCn0pOwoKLy8gQ2xlYW51cCBvbiB1bm1vdW50Cm9uVW5tb3VudGVkKCgpID0+IHsKICAgIC8vIFJlbW92ZSBjdXN0b20gZXZlbnQgbGlzdGVuZXJzCiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9sbC11cGRhdGVkJywgKCkgPT4ge30pOwogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2V2ZW50LXVwZGF0ZWQnLCAoZXZlbnQpID0+IHsKICAgICAgICBoYW5kbGVFdmVudFVwZGF0ZShldmVudC5kZXRhaWwpOwogICAgfSk7CiAgICAKICAgIGlmIChlY2hvKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IGVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWwuc3RvcExpc3RlbmluZygnUG9sbFZvdGVVcGRhdGVkJyk7CiAgICAgICAgICAgICAgICBlY2hvLmxlYXZlKCdwb3N0cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgLy8gU2lsZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgfQogICAgfQp9KTsKCi8vIEZvcm1hdCBmaWxlIHNpemUgZnVuY3Rpb24KY29uc3QgZm9ybWF0RmlsZVNpemUgPSAoYnl0ZXMpID0+IHsKICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJzsKICAgIGNvbnN0IGsgPSAxMDI0OwogICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107CiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7CiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHNob3dWb3RlcnNNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IHZvdGVycyA9IHJlZih7fSk7Cgpjb25zdCBoYW5kbGVWb3RlID0gYXN5bmMgKHBvbGwsIHNlbGVjdGVkT3B0aW9ucykgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBFbnN1cmUgc2VsZWN0ZWRPcHRpb25zIGlzIGFsd2F5cyBhbiBhcnJheQogICAgICAgIGxldCBvcHRpb25zVG9TdWJtaXQgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9ucykgPyBzZWxlY3RlZE9wdGlvbnMgOiBbc2VsZWN0ZWRPcHRpb25zXTsKICAgICAgICAKICAgICAgICAvLyBGaWx0ZXIgb3V0IGFueSB1bmRlZmluZWQgb3IgbnVsbCB2YWx1ZXMKICAgICAgICBvcHRpb25zVG9TdWJtaXQgPSBvcHRpb25zVG9TdWJtaXQuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24gIT09IHVuZGVmaW5lZCAmJiBvcHRpb24gIT09IG51bGwpOwogICAgICAgIAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvbGxzLnZvdGUnLCB7IHBvbGw6IHBvbGwuaWQgfSksIHsKICAgICAgICAgICAgc2VsZWN0ZWRfb3B0aW9uczogb3B0aW9uc1RvU3VibWl0CiAgICAgICAgfSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICdYLUluZXJ0aWEnOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LnN1Y2Nlc3MpIHsKICAgICAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgdGhhdCBjb250YWlucyB0aGlzIHBvbGwKICAgICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbmRJbmRleChldmVudCA9PiAKICAgICAgICAgICAgICAgIGV2ZW50LnBvbGwgJiYgZXZlbnQucG9sbC5pZCA9PT0gcG9sbC5pZAogICAgICAgICAgICApOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGV2ZW50SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgdG8gdHJpZ2dlciByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwb2xsIGRhdGEgd2l0aGluIHRoZSBldmVudAogICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50c1tldmVudEluZGV4XSA9IHsKICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbEV2ZW50cyByZWYgd2l0aCBhIG5ldyBhcnJheSB0byBmb3JjZSByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEVtaXQgdGhlIHBvbGwgdXBkYXRlIHRvIHRoZSBEYXNoYm9hcmQKICAgICAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICAgICAgcG9sbElkOiBwb2xsLmlkLAogICAgICAgICAgICAgICAgcG9sbERhdGE6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIGV2ZW50cyBkYXRhCiAgICAgICAgICAgIGVtaXQoJ3JlZnJlc2gtZXZlbnRzJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2hvdyBlcnJvciBtZXNzYWdlIGlmIHRoZSBzZXJ2ZXIgcmV0dXJucyBzdWNjZXNzOiBmYWxzZQogICAgICAgICAgICBhbGVydChyZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCB2b3RlJyk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxKSB7CiAgICAgICAgICAgIHJvdXRlci52aXNpdChyb3V0ZSgnbG9naW4nKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2hvdyB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc3VibWl0dGluZyB5b3VyIHZvdGUuIFBsZWFzZSB0cnkgYWdhaW4uJzsKICAgICAgICAgICAgYWxlcnQoZXJyb3JNZXNzYWdlKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBnZXRTZWxlY3RlZE9wdGlvbnMgPSAocG9sbCkgPT4gewogICAgaWYgKCFwb2xsLnZvdGVzKSByZXR1cm4gW107CiAgICBjb25zdCB1c2VyVm90ZSA9IHBvbGwudm90ZXMuZmluZCh2b3RlID0+IHZvdGUudXNlcl9pZCA9PT0gdXNlci5pZCk7CiAgICByZXR1cm4gdXNlclZvdGUgPyB1c2VyVm90ZS5zZWxlY3RlZF9vcHRpb25zIDogW107Cn07Cgpjb25zdCBpc09wdGlvblNlbGVjdGVkID0gKHBvbGwsIG9wdGlvbikgPT4gewogICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gZ2V0U2VsZWN0ZWRPcHRpb25zKHBvbGwpOwogICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pOwp9OwoKY29uc3QgaGFuZGxlQ2hlY2tib3hDaGFuZ2UgPSAocG9sbCwgb3B0aW9uLCBpc0NoZWNrZWQpID0+IHsKICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IGdldFNlbGVjdGVkT3B0aW9ucyhwb2xsKTsKICAgIGxldCBuZXdTZWxlY3RlZDsKICAgIAogICAgaWYgKHBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlKSB7CiAgICAgICAgaWYgKGlzQ2hlY2tlZCkgewogICAgICAgICAgICBuZXdTZWxlY3RlZCA9IFsuLi5jdXJyZW50U2VsZWN0ZWQsIG9wdGlvbl07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0ZWQuZmlsdGVyKG8gPT4gbyAhPT0gb3B0aW9uKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIG5ld1NlbGVjdGVkID0gaXNDaGVja2VkID8gW29wdGlvbl0gOiBbXTsKICAgIH0KICAgIAogICAgaGFuZGxlVm90ZShwb2xsLCBuZXdTZWxlY3RlZCk7Cn07Cgpjb25zdCBzaG93Vm90ZXJzID0gYXN5bmMgKHBvbGwpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgYWxsVm90ZXJzID0ge307CiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgcG9sbC5vcHRpb25zKSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9sbHMudm90ZXJzJywgeyBwb2xsOiBwb2xsLmlkLCBvcHRpb24gfSksIHsKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy52b3RlcnMpIHsKICAgICAgICAgICAgICAgIGFsbFZvdGVyc1tvcHRpb25dID0gcmVzcG9uc2UuZGF0YS52b3RlcnM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdm90ZXJzLnZhbHVlID0gYWxsVm90ZXJzOwogICAgICAgIHNob3dWb3RlcnNNb2RhbC52YWx1ZSA9IHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MTkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZmV0Y2ggdm90ZXJzIGxpc3QuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgICAgfQogICAgfQp9OwoKY29uc3QgaXNFeHBhbmRlZCA9IHJlZihmYWxzZSk7Cgpjb25zdCB0b2dnbGVFeHBhbmQgPSAoKSA9PiB7CiAgICBpc0V4cGFuZGVkLnZhbHVlID0gIWlzRXhwYW5kZWQudmFsdWU7Cn07Cgpjb25zdCBmb3JtYXRFdmVudERhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpOwogICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdyby1STycsIHsKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBtb250aDogJ2xvbmcnLAogICAgICAgIHllYXI6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pLmZvcm1hdChkYXRlKTsKfTsKPC9zY3JpcHQ+Cgo8dGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJwLTQgcGItMCI+CiAgICAgICAgPGRpdiBjbGFzcz0iYmctd2hpdGUgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy1zbSByb3VuZGVkLWxnIHBvc3QtY29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icC00Ij4KICAgICAgICAgICAgPGRpdiB2LWlmPSJuZXh0RXZlbnQiIGNsYXNzPSJzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2VkIFZpZXcgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSIhaXNFeHBhbmRlZCIgY2xhc3M9ImJnLWJsdWUtNTAgcm91bmRlZC1sZyBweS0yIHB4LTMiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJ0b2dnbGVFeHBhbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGN1cnNvci1wb2ludGVyIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCB0ZXh0LWJsdWUtNTAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleC0xIG1pbi13LTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNzAwIHRydW5jYXRlIj57eyBuZXh0RXZlbnQudGl0bGUgfX08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAiPnt7IGZvcm1hdEV2ZW50RGF0ZShuZXh0RXZlbnQuc3RhcnRfZGF0ZSkgfX08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCB0ZXh0LWJsdWUtNTAwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4yOTMgNy4yOTNhMSAxIDAgMDExLjQxNCAwTDEwIDEwLjU4NmwzLjI5My0zLjI5M2ExIDEgMCAxMTEuNDE0IDEuNDE0bC00IDRhMSAxIDAgMDEtMS40MTQgMGwtNC00YTEgMSAwIDAxMC0xLjQxNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPCEtLSBFeHBhbmRlZCBWaWV3IC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPSJiZy1ibHVlLTUwIHJvdW5kZWQtbGcgcC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS03MDAiPlVybcSDdG9ydWwgRXZlbmltZW50PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSJ0b2dnbGVFeHBhbmQiIGNsYXNzPSJ0ZXh0LWJsdWUtNTAwIGhvdmVyOnRleHQtYmx1ZS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC01IHctNSIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC43MDcgMTIuNzA3YTEgMSAwIDAxLTEuNDE0IDBMMTAgOS40MTRsLTMuMjkzIDMuMjkzYTEgMSAwIDAxLTEuNDE0LTEuNDE0bDQtNGExIDEgMCAwMTEuNDE0IDBsNCA0YTEgMSAwIDAxMCAxLjQxNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV2ZW50IFRpdGxlIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDJhMSAxIDAgMDAtMSAxdjFINGEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWNmEyIDIgMCAwMC0yLTJoLTFWM2ExIDEgMCAxMC0yIDB2MUg3VjNhMSAxIDAgMDAtMS0xem0wIDVhMSAxIDAgMDAwIDJoOGExIDEgMCAxMDAtMkg2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtbWVkaXVtIj57eyBuZXh0RXZlbnQudGl0bGUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFdmVudCBEZXRhaWxzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS0yIHRleHQtc20gdGV4dC1ibHVlLTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNCB3LTQiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0xLTEyYTEgMSAwIDEwLTIgMHY0YTEgMSAwIDAwLjI5My43MDdsMi44MjggMi44MjlhMSAxIDAgMTAxLjQxNS0xLjQxNUwxMSA5LjU4NlY2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZvcm1hdEV2ZW50RGF0ZShuZXh0RXZlbnQuc3RhcnRfZGF0ZSkgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJuZXh0RXZlbnQubG9jYXRpb24iIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNS4wNSA0LjA1YTcgNyAwIDExOS45IDkuOUwxMCAxOC45bC00Ljk1LTQuOTVhNyA3IDAgMDEwLTkuOXpNMTAgMTFhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5leHRFdmVudC5sb2NhdGlvbiB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV2ZW50IERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJuZXh0RXZlbnQuZGVzY3JpcHRpb24iIGNsYXNzPSJ0ZXh0LXNtIHRleHQtYmx1ZS02MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbmV4dEV2ZW50LmRlc2NyaXB0aW9uIH19CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBBdHRhY2htZW50IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5maWxlX3BhdGgiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPSJyb3V0ZSgnZmlsZXMuZG93bmxvYWQnLCBuZXh0RXZlbnQuaWQpIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ3LTUgaC01IG1yLTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjQgMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTEyIDEwdjZtMCAwbC0zLTNtMyAzbDMtM20yIDhIN2EyIDIgMCAwMS0yLTJWNWEyIDIgMCAwMTItMmg1LjU4NmExIDEgMCAwMS43MDcuMjkzbDUuNDE0IDUuNDE0YTEgMSAwIDAxLjI5My43MDdWMTlhMiAyIDAgMDEtMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXh0RXZlbnQuZmlsZV9uYW1lIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1sLTIgdGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4oe3sgZm9ybWF0RmlsZVNpemUobmV4dEV2ZW50LmZpbGVfc2l6ZSkgfX0pPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXZlbnQgUG9sbCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJuZXh0RXZlbnQucG9sbCIgY2xhc3M9Im10LTQgYm9yZGVyLXQgYm9yZGVyLWJsdWUtMjAwIHB0LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9udC1tZWRpdW0gdGV4dC1ibHVlLTcwMCBtYi0zIj57eyBuZXh0RXZlbnQucG9sbC5xdWVzdGlvbiB9fTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb24sIGluZGV4KSBpbiBuZXh0RXZlbnQucG9sbC5vcHRpb25zIiA6a2V5PSJpbmRleCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZWxhdGl2ZSBncm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm5hbWU9Iidwb2xsXycgKyBuZXh0RXZlbnQucG9sbC5pZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp2YWx1ZT0ib3B0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNoZWNrZWQ9ImlzT3B0aW9uU2VsZWN0ZWQobmV4dEV2ZW50LnBvbGwsIG9wdGlvbikiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9IihlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSBnZXRTZWxlY3RlZE9wdGlvbnMobmV4dEV2ZW50LnBvbGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFdmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZvdGUobmV4dEV2ZW50LnBvbGwsIFsuLi5jdXJyZW50U2VsZWN0ZWQsIG9wdGlvbl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkID0gY3VycmVudFNlbGVjdGVkLmZpbHRlcihvID0+IG8gIT09IG9wdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZvdGUobmV4dEV2ZW50LnBvbGwsIG5ld1NlbGVjdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZvdGUobmV4dEV2ZW50LnBvbGwsIGUudGFyZ2V0LmNoZWNrZWQgPyBbb3B0aW9uXSA6IFtdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkLWZ1bGwgYm9yZGVyLWdyYXktMzAwIHRleHQtaW5kaWdvLTYwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWluZGlnby0zMDAgZm9jdXM6cmluZyBmb2N1czpyaW5nLWluZGlnby0yMDAgZm9jdXM6cmluZy1vcGFjaXR5LTUwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIG1iLTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAiPnt7IG9wdGlvbiB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIH19IHZvdGVzIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4oe3sgTWF0aC5yb3VuZCgobmV4dEV2ZW50LnBvbGwudm90ZV9jb3VudHNbb3B0aW9uXSAvIE9iamVjdC52YWx1ZXMobmV4dEV2ZW50LnBvbGwudm90ZV9jb3VudHMpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApKSAqIDEwMCkgfHwgMCB9fSUpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC0yIGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImgtZnVsbCBiZy1pbmRpZ28tNTAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPSJ7IHdpZHRoOiBgJHtNYXRoLnJvdW5kKChuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIC8gT2JqZWN0LnZhbHVlcyhuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwfSVgIH0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0zIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgT2JqZWN0LnZhbHVlcyhuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgfX0gdm90ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InNob3dWb3RlcnMobmV4dEV2ZW50LnBvbGwpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQteHMgdGV4dC1pbmRpZ28tNjAwIGhvdmVyOnRleHQtaW5kaWdvLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPSJ0ZXh0LWNlbnRlciBweS04Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTEyIHctMTIgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItMiI+TnUgZXhpc3TEgyBldmVuaW1lbnRlIHZpaXRvYXJlPC9oMz4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPkPDom5kIHZvciBmaSBjcmVhdGUgZXZlbmltZW50ZSBub2ksIGFjZXN0ZWEgdm9yIGFwxINyZWEgYWljaS48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZvdGVycyBNb2RhbCAtLT4KICAgICAgICA8ZGl2IHYtaWY9InNob3dWb3RlcnNNb2RhbCIgY2xhc3M9ImZpeGVkIGluc2V0LTAgei1bOTk5OV0gb3ZlcmZsb3cteS1hdXRvIiBhcmlhLWxhYmVsbGVkYnk9Im1vZGFsLXRpdGxlIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1zY3JlZW4gcHQtNCBweC00IHBiLTIwIHRleHQtY2VudGVyIHNtOmJsb2NrIHNtOnAtMCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIGJnLWJsYWNrIGJnLW9wYWNpdHktNTAgdHJhbnNpdGlvbi1vcGFjaXR5IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGlkZGVuIHNtOmlubGluZS1ibG9jayBzbTphbGlnbi1taWRkbGUgc206aC1zY3JlZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj4mIzgyMDM7PC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWJsb2NrIGFsaWduLWJvdHRvbSBiZy13aGl0ZSByb3VuZGVkLWxnIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXhsIHRyYW5zZm9ybSB0cmFuc2l0aW9uLWFsbCBzbTpteS04IHNtOmFsaWduLW1pZGRsZSBzbTptYXgtdy0yeGwgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvbGwgVm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIob3B0aW9uVm90ZXJzLCBvcHRpb24pIGluIHZvdGVycyIgOmtleT0ib3B0aW9uIiBjbGFzcz0ic3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJ2b3RlciBpbiBvcHRpb25Wb3RlcnMiIDprZXk9InZvdGVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0idm90ZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZvdGVyLmZpcnN0X25hbWUgKyAnICcgKyB2b3Rlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJ2b3Rlci5maXJzdF9uYW1lICsgJyAnICsgdm90ZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS03MDAiPnt7IHZvdGVyLmZpcnN0X25hbWUgfX0ge3sgdm90ZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJvcHRpb25Wb3RlcnMubGVuZ3RoID09PSAwIiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHZvdGVycyB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTYgZmxleCBqdXN0aWZ5LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVyc01vZGFsID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JheS0yMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvdGVtcGxhdGU+Cgo8c3R5bGU+Cjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDhweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiAjQkNDMEM0OwogICAgYm9yZGVyLXJhZGl1czogNHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNBNEE3QUI7Cn0KCi8qIEN1c3RvbSBjaGVja2JveCBzdHlsaW5nICovClt0eXBlPSJjaGVja2JveCJdIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgYmFja2dyb3VuZC1vcmlnaW46IGJvcmRlci1ib3g7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgaGVpZ2h0OiAxcmVtOwogICAgd2lkdGg6IDFyZW07CiAgICBjb2xvcjogcmdiKDc5LCA3MCwgMjI5KTsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsKICAgIC0tdHctc2hhZG93OiAwIDAgIzAwMDA7CiAgICBwYWRkaW5nOiAwcHg7CiAgICBib3JkZXItY29sb3I6IHJnYigyMDksIDIxMywgMjE5KTsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7Cn0KClt0eXBlPSJjaGVja2JveCJdOmNoZWNrZWQgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nd2hpdGUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UlM2NwYXRoIGQ9J00xMi4yMDcgNC43OTNhMSAxIDAgMDEwIDEuNDE0bC01IDVhMSAxIDAgMDEtMS40MTQgMGwtMi0yYTEgMSAwIDAxMS40MTQtMS40MTRMNi41IDkuMDg2bDQuMjkzLTQuMjkzYTEgMSAwIDAxMS40MTQgMHonLyUzZSUzYy9zdmclM2UiKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGN1cnJlbnRjb2xvcjsKICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOwp9CgpbdHlwZT0iY2hlY2tib3giXTpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoOTksIDEwMiwgMjQxLCAwLjIpOwp9Cjwvc3R5bGU+IAAAAAAAAAAAcasAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACwFwAAAAAAALsXAAAAAAAAAAAAAAAA8L8"
				],
				[
					60,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAB1qwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgY29tcHV0ZWQsIHJlZiwgd2F0Y2gsIG9uTW91bnRlZCwgb25Vbm1vdW50ZWQsIG5leHRUaWNrIH0gZnJvbSAndnVlJzsKaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJzsKaW1wb3J0IHsgdXNlUGFnZSwgcm91dGVyIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1vZGFsIGZyb20gJ0AvQ29tcG9uZW50cy9Nb2RhbC52dWUnOwppbXBvcnQgRWNobyBmcm9tICdsYXJhdmVsLWVjaG8nOwoKY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsncG9sbC11cGRhdGVkJywgJ3JlZnJlc2gtZXZlbnRzJ10pOwoKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBldmVudHM6IHsKICAgICAgICB0eXBlOiBBcnJheSwKICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICBkZWZhdWx0OiAoKSA9PiBbXQogICAgfSwKICAgIGV2ZW50OiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICB9Cn0pOwoKY29uc3QgcGFnZSA9IHVzZVBhZ2UoKTsKY29uc3QgdXNlciA9IHBhZ2UucHJvcHMuYXV0aC51c2VyOwoKLy8gQ3JlYXRlIGEgcmVhY3RpdmUgcmVmZXJlbmNlIGZvciBldmVudHMKY29uc3QgbG9jYWxFdmVudHMgPSByZWYoWy4uLnByb3BzLmV2ZW50c10pOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLmV2ZW50cwp3YXRjaCgoKSA9PiBwcm9wcy5ldmVudHMsIChuZXdFdmVudHMpID0+IHsKICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0V2ZW50cykgJiYgbmV3RXZlbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAvLyBNZXJnZSBuZXcgZXZlbnRzIHdpdGggZXhpc3Rpbmcgb25lcywgYXZvaWRpbmcgZHVwbGljYXRlcwogICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChsb2NhbEV2ZW50cy52YWx1ZS5tYXAoZSA9PiBlLmlkKSk7CiAgICAgICAgY29uc3QgdW5pcXVlTmV3RXZlbnRzID0gbmV3RXZlbnRzLmZpbHRlcihlID0+ICFleGlzdGluZ0lkcy5oYXMoZS5pZCkpOwogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlLCAuLi51bmlxdWVOZXdFdmVudHNdOwogICAgfQp9LCB7IGRlZXA6IHRydWUgfSk7CgovLyBVcGRhdGUgbmV4dEV2ZW50IGNvbXB1dGVkIHRvIHVzZSBsb2NhbEV2ZW50cyBpbnN0ZWFkIG9mIHByb3BzCmNvbnN0IG5leHRFdmVudCA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghbG9jYWxFdmVudHMudmFsdWU/Lmxlbmd0aCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpOwogICAgCiAgICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbHRlcihwb3N0ID0+IHsKICAgICAgICBpZiAoIXBvc3Q/LnN0YXJ0X2RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb25zdCBldmVudERhdGUgPSBuZXcgRGF0ZShwb3N0LnN0YXJ0X2RhdGUpOwogICAgICAgIHJldHVybiBldmVudERhdGUgPiBub3c7CiAgICB9KTsKICAgIAogICAgaWYgKGZpbHRlcmVkRXZlbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBmaWx0ZXJlZEV2ZW50cy5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgaWYgKCFhPy5zdGFydF9kYXRlIHx8ICFiPy5zdGFydF9kYXRlKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5zdGFydF9kYXRlKSAtIG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICB9KTsKICAgIAogICAgY29uc3QgbmV4dEV2ZW50ID0gc29ydGVkRXZlbnRzWzBdOwogICAgcmV0dXJuIG5leHRFdmVudDsKfSk7CgovLyBBZGQgYSBjb21wdXRlZCBwcm9wZXJ0eSB0byBlbnN1cmUgdGhlIGV2ZW50IGhhcyB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUKY29uc3QgcHJvY2Vzc2VkRXZlbnQgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBjb25zb2xlLmxvZygnW01vYmlsZUV2ZW50XSBSYXcgZXZlbnQgcHJvcDonLCBwcm9wcy5ldmVudCk7CiAgICBjb25zdCBldmVudCA9IHsKICAgICAgICAuLi5wcm9wcy5ldmVudCwKICAgICAgICBlbmRfZGF0ZTogcHJvcHMuZXZlbnQuZW5kX2RhdGUgfHwgbnVsbAogICAgfTsKICAgIGNvbnNvbGUubG9nKCdbTW9iaWxlRXZlbnRdIFByb2Nlc3NlZCBldmVudDonLCBldmVudCk7CiAgICByZXR1cm4gZXZlbnQ7Cn0pOwoKY29uc3QgaW5pdGlhbGl6ZUVjaG8gPSAoKSA9PiB7CiAgICB0cnkgewogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnMgLSBvbmx5IGxpc3RlbiB0byBvbmUgdmVyc2lvbiBvZiB0aGUgZXZlbnQKICAgICAgICBjaGFubmVsLmxpc3RlbignUG9sbFZvdGVVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEucG9sbCkgewogICAgICAgICAgICAgICAgLy8gRGVib3VuY2UgdGhlIHVwZGF0ZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBwcm9jZXNzaW5nCiAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1vYmlsZVBvbGxVcGRhdGVUaW1lb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdpbmRvdy5tb2JpbGVQb2xsVXBkYXRlVGltZW91dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aW5kb3cubW9iaWxlUG9sbFVwZGF0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKGRhdGEpOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBldmVudCB3aXRoIHRoZSBkb3QgcHJlZml4CiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJy5Qb2xsVm90ZVVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YS5wb2xsKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKGRhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIExpc3RlbiBmb3IgUG9zdERlbGV0ZWQgZXZlbnQKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvc3REZWxldGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdwb3N0X2lkJyBpbiBkYXRhKSB7CiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGZyb20gbG9jYWxFdmVudHMgYnkgbWF0Y2hpbmcgZWl0aGVyIHBvc3RfaWQgb3IgaWQKICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gbG9jYWxFdmVudHMudmFsdWUuZmlsdGVyKGV2ZW50ID0+IAogICAgICAgICAgICAgICAgICAgIGV2ZW50LmlkICE9PSBkYXRhLnBvc3RfaWQgJiYgZXZlbnQucG9zdF9pZCAhPT0gZGF0YS5wb3N0X2lkCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICAgICAgICAgIG5leHRUaWNrKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBMaXN0ZW4gZm9yIHBvbGwtdXBkYXRlZCBldmVudHMgZnJvbSB0aGUgRmVlZCBjb21wb25lbnQKICAgICAgICBjaGFubmVsLmxpc3RlbigncG9sbC11cGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEucG9sbElkICYmIGRhdGEucG9sbERhdGEpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVBvbGxVcGRhdGUoewogICAgICAgICAgICAgICAgICAgIHBvbGw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEucG9sbElkLAogICAgICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLnBvbGxEYXRhCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBFdmVudENyZWF0ZWQgdG8gdXBkYXRlIGV2ZW50cyBpbiByZWFsIHRpbWUKICAgICAgICBjaGFubmVsLmxpc3RlbignLkV2ZW50Q3JlYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEucG9zdCAmJiBkYXRhLnBvc3QuZXZlbnQpIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGV2ZW50IGFscmVhZHkgZXhpc3RzCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSBsb2NhbEV2ZW50cy52YWx1ZS5zb21lKGV2ID0+IAogICAgICAgICAgICAgICAgICAgIGV2LmlkID09PSBkYXRhLnBvc3QuZXZlbnQuaWQgfHwgCiAgICAgICAgICAgICAgICAgICAgZXYucG9zdF9pZCA9PT0gZGF0YS5wb3N0LmlkCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cykgewogICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCB0aGUgZXZlbnQgYXMgbmVlZGVkIGZvciB5b3VyIHNpZGViYXIgKG1hdGNoIHRoZSBzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLnBvc3QuZXZlbnQuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IGRhdGEucG9zdC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEucG9zdC5ldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEucG9zdC5ldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZGF0YS5wb3N0LmV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBkYXRhLnBvc3QuZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGRhdGEucG9zdC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtkYXRhLnBvc3QuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZGF0YS5wb3N0LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBkYXRhLnBvc3QuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGRhdGEucG9zdC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZTogZGF0YS5wb3N0LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9sbDogZGF0YS5wb3N0LmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5wb3N0LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogZGF0YS5wb3N0LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhbmQgc29ydCBieSBzdGFydF9kYXRlCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgbmV3RXZlbnRdLnNvcnQoKGEsIGIpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gdXBkYXRlZEV2ZW50czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbUmlnaHRTaWRlYmFyXSBJbnZhbGlkIGV2ZW50IGRhdGEgcmVjZWl2ZWQ6JywgZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBFdmVudFVwZGF0ZWQgdG8gdXBkYXRlIGV2ZW50cyBpbiByZWFsIHRpbWUKICAgICAgICBjaGFubmVsLmxpc3RlbignRXZlbnRVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wb3N0ICYmIGRhdGEucG9zdC5ldmVudCkgewogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBldmVudCBJRCBmcm9tIHRoZSBwb3N0J3MgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgICAgICBjb25zdCBldmVudElkID0gZGF0YS5wb3N0LmV2ZW50LmlkOwogICAgICAgICAgICAgICAgY29uc3QgcG9zdElkID0gZGF0YS5wb3N0LmlkOwoKICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIGV2ZW50IGluIGxvY2FsRXZlbnRzIGJ5IHBvc3QgSUQgZmlyc3QKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBsb2NhbEV2ZW50cy52YWx1ZS5maW5kSW5kZXgoZXYgPT4gewogICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBtYXRjaCBieSBwb3N0IElEIGZpcnN0CiAgICAgICAgICAgICAgICAgICAgaWYgKGV2LnBvc3RfaWQgPT09IHBvc3RJZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gVGhlbiB0cnkgdG8gbWF0Y2ggYnkgZXZlbnQgSUQKICAgICAgICAgICAgICAgICAgICBpZiAoZXYuaWQgPT09IGV2ZW50SWQgfHwgZXYuaWQgPT09IHBvc3RJZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBldmVudCBkYXRhIGlmIGZvdW5kCiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0V2ZW50ID0gZXZlbnRJbmRleCAhPT0gLTEgPyBsb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XSA6IG51bGw7CgogICAgICAgICAgICAgICAgLy8gSGFuZGxlIHBvbGwgZGF0YSBpZiBpdCBleGlzdHMKICAgICAgICAgICAgICAgIGxldCBwb2xsRGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5wb3N0LmV2ZW50LnBvbGwpIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1BvbGwgPSBleGlzdGluZ0V2ZW50Py5wb2xsOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvbGwgPSBkYXRhLnBvc3QuZXZlbnQucG9sbDsKCiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbWFwcGluZyBvZiBvbGQgb3B0aW9ucyB0byBuZXcgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbk1hcHBpbmcgPSB7fTsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdQb2xsPy5vcHRpb25zICYmIG5ld1BvbGwub3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1BvbGwub3B0aW9ucy5mb3JFYWNoKChvbGRPcHRpb24sIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3UG9sbC5vcHRpb25zW2luZGV4XSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXSA9IG5ld1BvbGwub3B0aW9uc1tpbmRleF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gTWFwIHZvdGUgY291bnRzIHRvIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Vm90ZUNvdW50cyA9IHt9OwogICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1BvbGw/LnZvdGVfY291bnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGV4aXN0aW5nUG9sbC52b3RlX2NvdW50cykuZm9yRWFjaCgoW29sZE9wdGlvbiwgY291bnRdKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb24gPSBvcHRpb25NYXBwaW5nW29sZE9wdGlvbl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3T3B0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Vm90ZUNvdW50c1tuZXdPcHRpb25dID0gY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy8gTWFwIHZvdGVzIHRvIG5ldyBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Vm90ZXMgPSBleGlzdGluZ1BvbGw/LnZvdGVzPy5tYXAodm90ZSA9PiAoewogICAgICAgICAgICAgICAgICAgICAgICAuLi52b3RlLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZF9vcHRpb25zOiB2b3RlLnNlbGVjdGVkX29wdGlvbnMubWFwKG9sZE9wdGlvbiA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbk1hcHBpbmdbb2xkT3B0aW9uXSB8fCBvbGRPcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIH0pKSB8fCBbXTsKCiAgICAgICAgICAgICAgICAgICAgcG9sbERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBuZXdQb2xsLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogbmV3UG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbmV3UG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IG5ld1BvbGwuaXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogbmV3Vm90ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBuZXdWb3RlQ291bnRzCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgdGhlIHVwZGF0ZWQgZXZlbnQKICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudCA9IHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnRJZCwKICAgICAgICAgICAgICAgICAgICBwb3N0X2lkOiBwb3N0SWQsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEucG9zdC5ldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5wb3N0LmV2ZW50LmRlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RhdGU6IGRhdGEucG9zdC5ldmVudC5zdGFydF9kYXRlLAogICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGRhdGEucG9zdC5ldmVudC5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBkYXRhLnBvc3QuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtkYXRhLnBvc3QuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZGF0YS5wb3N0LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgIH0gOiBudWxsLAogICAgICAgICAgICAgICAgICAgIGZpbGVfcGF0aDogZGF0YS5wb3N0LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGRhdGEucG9zdC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplOiBkYXRhLnBvc3QuZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IHBvbGxEYXRhCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoZXZlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IGluIHRoZSBhcnJheQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0gPSB1cGRhdGVkRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gU29ydCBieSBzdGFydF9kYXRlCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50cy5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUEgLSBkYXRlQjsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgbG9jYWxFdmVudHMgd2l0aCB0aGUgbmV3IGFycmF5CiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGV2ZW50IG5vdCBmb3VuZCwgYWRkIGl0IHRvIHRoZSBhcnJheQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWUsIHVwZGF0ZWRFdmVudF0uc29ydCgoYSwgYikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUoYi5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgIH0KfQoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRsZSBwb2xsIHVwZGF0ZXMKY29uc3QgaGFuZGxlUG9sbFVwZGF0ZSA9IChkYXRhKSA9PiB7CiAgICBpZiAobmV4dEV2ZW50LnZhbHVlICYmIG5leHRFdmVudC52YWx1ZS5wb2xsICYmIG5leHRFdmVudC52YWx1ZS5wb2xsLmlkID09PSBkYXRhLnBvbGwuaWQpIHsKICAgICAgICAvLyBDYWxjdWxhdGUgdm90ZSBjb3VudHMgZnJvbSB2b3RlcyBhcnJheQogICAgICAgIGNvbnN0IHZvdGVDb3VudHMgPSB7fTsKICAgICAgICBpZiAoZGF0YS5wb2xsLm9wdGlvbnMpIHsKICAgICAgICAgICAgZGF0YS5wb2xsLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gewogICAgICAgICAgICAgICAgdm90ZUNvdW50c1tvcHRpb25dID0gZGF0YS5wb2xsLnZvdGVzLmZpbHRlcih2b3RlID0+IAogICAgICAgICAgICAgICAgICAgIHZvdGUuc2VsZWN0ZWRfb3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pCiAgICAgICAgICAgICAgICApLmxlbmd0aDsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9sbCBkYXRhCiAgICAgICAgbmV4dEV2ZW50LnZhbHVlLnBvbGwgPSB7CiAgICAgICAgICAgIC4uLm5leHRFdmVudC52YWx1ZS5wb2xsLAogICAgICAgICAgICB2b3RlczogZGF0YS5wb2xsLnZvdGVzLAogICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgLy8gRm9yY2UgYSByZWFjdGl2ZSB1cGRhdGUKICAgICAgICBuZXh0VGljaygoKSA9PiB7CiAgICAgICAgICAgIG5leHRFdmVudC52YWx1ZSA9IHsgLi4ubmV4dEV2ZW50LnZhbHVlIH07CiAgICAgICAgfSk7CiAgICAgICAgLy8gRW1pdCB0aGUgcG9sbCB1cGRhdGUgdG8gdGhlIHBhcmVudAogICAgICAgIGVtaXQoJ3BvbGwtdXBkYXRlZCcsIHsKICAgICAgICAgICAgcG9sbElkOiBkYXRhLnBvbGwuaWQsCiAgICAgICAgICAgIHBvbGxEYXRhOiB7CiAgICAgICAgICAgICAgICAuLi5kYXRhLnBvbGwsCiAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogdm90ZUNvdW50cwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUud2FybignTW9iaWxlRXZlbnQ6IENvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIHBvbGw6JywgZGF0YS5wb2xsLmlkKTsKICAgICAgICBjb25zb2xlLmxvZygnTW9iaWxlRXZlbnQ6IEN1cnJlbnQgZXZlbnQ6JywgbmV4dEV2ZW50LnZhbHVlKTsKICAgIH0KfTsKCmNvbnN0IGhhbmRsZUV2ZW50VXBkYXRlID0gKHsgcG9zdElkLCBwb3N0RGF0YSB9KSA9PiB7CiAgICAvLyBJZiBwb3N0RGF0YSBpcyBudWxsLCB0aGlzIGlzIGEgZGVsZXRpb24gZXZlbnQKICAgIGlmICghcG9zdERhdGEpIHsKICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGZyb20gbG9jYWxFdmVudHMgYnkgbWF0Y2hpbmcgZWl0aGVyIHBvc3RfaWQgb3IgaWQKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbHRlcihldmVudCA9PiAKICAgICAgICAgICAgZXZlbnQuaWQgIT09IHBvc3RJZCAmJiBldmVudC5wb3N0X2lkICE9PSBwb3N0SWQKICAgICAgICApOwogICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIENoZWNrIGlmIHRoZSBwb3N0IGhhcyBldmVudCBkYXRhCiAgICBpZiAoIXBvc3REYXRhLmV2ZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coJ1tSaWdodFNpZGViYXJdIE5vIGV2ZW50IGRhdGEgaW4gcG9zdCB1cGRhdGUnKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIGV2ZW50IGluIGxvY2FsRXZlbnRzIGJ5IG1hdGNoaW5nIGVpdGhlciBwb3N0X2lkIG9yIGlkCiAgICBjb25zdCBldmVudEluZGV4ID0gbG9jYWxFdmVudHMudmFsdWUuZmluZEluZGV4KGV2ZW50ID0+IAogICAgICAgIGV2ZW50LmlkID09PSBwb3N0SWQgfHwgCiAgICAgICAgZXZlbnQuaWQgPT09IHBvc3REYXRhLmV2ZW50LmlkIHx8IAogICAgICAgIGV2ZW50LnBvc3RfaWQgPT09IHBvc3RJZAogICAgKTsKCiAgICBpZiAoZXZlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgZXZlbnQKICAgICAgICBjb25zdCBjdXJyZW50RXZlbnQgPSBsb2NhbEV2ZW50cy52YWx1ZVtldmVudEluZGV4XTsKICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnQgPSB7CiAgICAgICAgICAgIC4uLnBvc3REYXRhLmV2ZW50LAogICAgICAgICAgICAvLyBQcmVzZXJ2ZSBhZGRpdGlvbmFsIGZpZWxkcwogICAgICAgICAgICBjcmVhdG9yOiBjdXJyZW50RXZlbnQuY3JlYXRvciwKICAgICAgICAgICAgZmlsZV9uYW1lOiBjdXJyZW50RXZlbnQuZmlsZV9uYW1lLAogICAgICAgICAgICBmaWxlX3BhdGg6IGN1cnJlbnRFdmVudC5maWxlX3BhdGgsCiAgICAgICAgICAgIGZpbGVfc2l6ZTogY3VycmVudEV2ZW50LmZpbGVfc2l6ZSwKICAgICAgICAgICAgLy8gUHJlc2VydmUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICBwb2xsOiBwb3N0RGF0YS5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgLi4ucG9zdERhdGEuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBwb3N0RGF0YS5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgfTsKCiAgICAgICAgLy8gVXBkYXRlIHRoZSBldmVudCBpbiB0aGUgYXJyYXkKICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICB1cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdID0gdXBkYXRlZEV2ZW50OwogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gdXBkYXRlZEV2ZW50czsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQWRkIG5ldyBldmVudAogICAgICAgIGNvbnN0IG5ld0V2ZW50ID0gewogICAgICAgICAgICAuLi5wb3N0RGF0YS5ldmVudCwKICAgICAgICAgICAgY3JlYXRvcjogcG9zdERhdGEuYXV0aG9yLAogICAgICAgICAgICBmaWxlX25hbWU6IHBvc3REYXRhLmZpbGVfbmFtZSwKICAgICAgICAgICAgZmlsZV9wYXRoOiBwb3N0RGF0YS5maWxlX3BhdGgsCiAgICAgICAgICAgIGZpbGVfc2l6ZTogcG9zdERhdGEuZmlsZV9zaXplLAogICAgICAgICAgICBwb2xsOiBwb3N0RGF0YS5ldmVudC5wb2xsID8gewogICAgICAgICAgICAgICAgLi4ucG9zdERhdGEuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBwb3N0RGF0YS5ldmVudC5wb2xsLnZvdGVfY291bnRzIHx8IHt9CiAgICAgICAgICAgIH0gOiBudWxsCiAgICAgICAgfTsKICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgbmV3RXZlbnRdOwogICAgfQoKICAgIC8vIFNvcnQgZXZlbnRzIGJ5IHN0YXJ0X2RhdGUKICAgIGxvY2FsRXZlbnRzLnZhbHVlLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSkgLSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpKTsKCiAgICAvLyBGb3JjZSBhIHJlYWN0aXZlIHVwZGF0ZQogICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgIH0pOwp9OwoKLy8gU2V0dXAgRWNobyBhbmQgZXZlbnQgbGlzdGVuZXJzCm9uTW91bnRlZCgoKSA9PiB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5ldmVudHMpICYmIHByb3BzLmV2ZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBbLi4ucHJvcHMuZXZlbnRzXTsKICAgIH0KICAgIAogICAgLy8gTGlzdGVuIGZvciBjdXN0b20gcG9sbC11cGRhdGVkIGV2ZW50cwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvbGwtdXBkYXRlZCcsIChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5kZXRhaWwucG9sbElkICYmIGV2ZW50LmRldGFpbC5wb2xsRGF0YSkgewogICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKHsKICAgICAgICAgICAgICAgIHBvbGw6IHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZGV0YWlsLnBvbGxJZCwKICAgICAgICAgICAgICAgICAgICAuLi5ldmVudC5kZXRhaWwucG9sbERhdGEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSk7CgogICAgLy8gTGlzdGVuIGZvciBjdXN0b20gZXZlbnQtdXBkYXRlZCBldmVudHMKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdldmVudC11cGRhdGVkJywgKGV2ZW50KSA9PiB7CiAgICAgICAgaGFuZGxlRXZlbnRVcGRhdGUoZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogICAgCiAgICAvLyBJbml0aWFsaXplIEVjaG8KICAgIGNvbnN0IHdhaXRGb3JFY2hvID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIGlmICh0eXBlb2Ygd2luZG93LkVjaG8gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2FpdEZvckVjaG8pOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUVjaG8oKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sIDEwMCk7IC8vIGNoZWNrIGV2ZXJ5IDEwMG1zCn0pOwoKLy8gQ2xlYW51cCBvbiB1bm1vdW50Cm9uVW5tb3VudGVkKCgpID0+IHsKICAgIC8vIFJlbW92ZSBjdXN0b20gZXZlbnQgbGlzdGVuZXJzCiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9sbC11cGRhdGVkJywgKCkgPT4ge30pOwogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2V2ZW50LXVwZGF0ZWQnLCAoZXZlbnQpID0+IHsKICAgICAgICBoYW5kbGVFdmVudFVwZGF0ZShldmVudC5kZXRhaWwpOwogICAgfSk7CiAgICAKICAgIGlmIChlY2hvKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IGVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWwuc3RvcExpc3RlbmluZygnUG9sbFZvdGVVcGRhdGVkJyk7CiAgICAgICAgICAgICAgICBlY2hvLmxlYXZlKCdwb3N0cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgLy8gU2lsZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgfQogICAgfQp9KTsKCi8vIEZvcm1hdCBmaWxlIHNpemUgZnVuY3Rpb24KY29uc3QgZm9ybWF0RmlsZVNpemUgPSAoYnl0ZXMpID0+IHsKICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJzsKICAgIGNvbnN0IGsgPSAxMDI0OwogICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107CiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7CiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHNob3dWb3RlcnNNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IHZvdGVycyA9IHJlZih7fSk7Cgpjb25zdCBoYW5kbGVWb3RlID0gYXN5bmMgKHBvbGwsIHNlbGVjdGVkT3B0aW9ucykgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBFbnN1cmUgc2VsZWN0ZWRPcHRpb25zIGlzIGFsd2F5cyBhbiBhcnJheQogICAgICAgIGxldCBvcHRpb25zVG9TdWJtaXQgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9ucykgPyBzZWxlY3RlZE9wdGlvbnMgOiBbc2VsZWN0ZWRPcHRpb25zXTsKICAgICAgICAKICAgICAgICAvLyBGaWx0ZXIgb3V0IGFueSB1bmRlZmluZWQgb3IgbnVsbCB2YWx1ZXMKICAgICAgICBvcHRpb25zVG9TdWJtaXQgPSBvcHRpb25zVG9TdWJtaXQuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24gIT09IHVuZGVmaW5lZCAmJiBvcHRpb24gIT09IG51bGwpOwogICAgICAgIAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvbGxzLnZvdGUnLCB7IHBvbGw6IHBvbGwuaWQgfSksIHsKICAgICAgICAgICAgc2VsZWN0ZWRfb3B0aW9uczogb3B0aW9uc1RvU3VibWl0CiAgICAgICAgfSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICdYLUluZXJ0aWEnOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LnN1Y2Nlc3MpIHsKICAgICAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgdGhhdCBjb250YWlucyB0aGlzIHBvbGwKICAgICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbmRJbmRleChldmVudCA9PiAKICAgICAgICAgICAgICAgIGV2ZW50LnBvbGwgJiYgZXZlbnQucG9sbC5pZCA9PT0gcG9sbC5pZAogICAgICAgICAgICApOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGV2ZW50SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgdG8gdHJpZ2dlciByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwb2xsIGRhdGEgd2l0aGluIHRoZSBldmVudAogICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50c1tldmVudEluZGV4XSA9IHsKICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbEV2ZW50cyByZWYgd2l0aCBhIG5ldyBhcnJheSB0byBmb3JjZSByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEVtaXQgdGhlIHBvbGwgdXBkYXRlIHRvIHRoZSBEYXNoYm9hcmQKICAgICAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICAgICAgcG9sbElkOiBwb2xsLmlkLAogICAgICAgICAgICAgICAgcG9sbERhdGE6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIGV2ZW50cyBkYXRhCiAgICAgICAgICAgIGVtaXQoJ3JlZnJlc2gtZXZlbnRzJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2hvdyBlcnJvciBtZXNzYWdlIGlmIHRoZSBzZXJ2ZXIgcmV0dXJucyBzdWNjZXNzOiBmYWxzZQogICAgICAgICAgICBhbGVydChyZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCB2b3RlJyk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxKSB7CiAgICAgICAgICAgIHJvdXRlci52aXNpdChyb3V0ZSgnbG9naW4nKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2hvdyB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc3VibWl0dGluZyB5b3VyIHZvdGUuIFBsZWFzZSB0cnkgYWdhaW4uJzsKICAgICAgICAgICAgYWxlcnQoZXJyb3JNZXNzYWdlKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBnZXRTZWxlY3RlZE9wdGlvbnMgPSAocG9sbCkgPT4gewogICAgaWYgKCFwb2xsLnZvdGVzKSByZXR1cm4gW107CiAgICBjb25zdCB1c2VyVm90ZSA9IHBvbGwudm90ZXMuZmluZCh2b3RlID0+IHZvdGUudXNlcl9pZCA9PT0gdXNlci5pZCk7CiAgICByZXR1cm4gdXNlclZvdGUgPyB1c2VyVm90ZS5zZWxlY3RlZF9vcHRpb25zIDogW107Cn07Cgpjb25zdCBpc09wdGlvblNlbGVjdGVkID0gKHBvbGwsIG9wdGlvbikgPT4gewogICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gZ2V0U2VsZWN0ZWRPcHRpb25zKHBvbGwpOwogICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pOwp9OwoKY29uc3QgaGFuZGxlQ2hlY2tib3hDaGFuZ2UgPSAocG9sbCwgb3B0aW9uLCBpc0NoZWNrZWQpID0+IHsKICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IGdldFNlbGVjdGVkT3B0aW9ucyhwb2xsKTsKICAgIGxldCBuZXdTZWxlY3RlZDsKICAgIAogICAgaWYgKHBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlKSB7CiAgICAgICAgaWYgKGlzQ2hlY2tlZCkgewogICAgICAgICAgICBuZXdTZWxlY3RlZCA9IFsuLi5jdXJyZW50U2VsZWN0ZWQsIG9wdGlvbl07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0ZWQuZmlsdGVyKG8gPT4gbyAhPT0gb3B0aW9uKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIG5ld1NlbGVjdGVkID0gaXNDaGVja2VkID8gW29wdGlvbl0gOiBbXTsKICAgIH0KICAgIAogICAgaGFuZGxlVm90ZShwb2xsLCBuZXdTZWxlY3RlZCk7Cn07Cgpjb25zdCBzaG93Vm90ZXJzID0gYXN5bmMgKHBvbGwpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgYWxsVm90ZXJzID0ge307CiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgcG9sbC5vcHRpb25zKSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9sbHMudm90ZXJzJywgeyBwb2xsOiBwb2xsLmlkLCBvcHRpb24gfSksIHsKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy52b3RlcnMpIHsKICAgICAgICAgICAgICAgIGFsbFZvdGVyc1tvcHRpb25dID0gcmVzcG9uc2UuZGF0YS52b3RlcnM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdm90ZXJzLnZhbHVlID0gYWxsVm90ZXJzOwogICAgICAgIHNob3dWb3RlcnNNb2RhbC52YWx1ZSA9IHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MTkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZmV0Y2ggdm90ZXJzIGxpc3QuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgICAgfQogICAgfQp9OwoKY29uc3QgaXNFeHBhbmRlZCA9IHJlZihmYWxzZSk7Cgpjb25zdCB0b2dnbGVFeHBhbmQgPSAoKSA9PiB7CiAgICBpc0V4cGFuZGVkLnZhbHVlID0gIWlzRXhwYW5kZWQudmFsdWU7Cn07Cgpjb25zdCBmb3JtYXRFdmVudERhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpOwogICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdyby1STycsIHsKICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICBtb250aDogJ2xvbmcnLAogICAgICAgIHllYXI6ICdudW1lcmljJywKICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgIH0pLmZvcm1hdChkYXRlKTsKfTsKCmNvbnN0IGVuc3VyZVVUQyA9IChkYXRlU3RyaW5nKSA9PiB7CiAgICBpZiAoIWRhdGVTdHJpbmcpIHJldHVybiBkYXRlU3RyaW5nOwogICAgLy8gSWYgYWxyZWFkeSBoYXMgWiBvciB0aW1lem9uZSBvZmZzZXQsIHJldHVybiBhcyBpcwogICAgaWYgKGRhdGVTdHJpbmcuZW5kc1dpdGgoJ1onKSB8fCAvWystXVxkezJ9Oj9cZHsyfSQvLnRlc3QoZGF0ZVN0cmluZykpIHJldHVybiBkYXRlU3RyaW5nOwogICAgcmV0dXJuIGRhdGVTdHJpbmcgKyAnWic7Cn07Cgpjb25zdCBhZGRUb0NhbGVuZGFyID0gKGV2ZW50KSA9PiB7CiAgICBjb25zb2xlLmxvZygnW0FkZFRvQ2FsZW5kYXJdIFJhdyBldmVudDonLCBwcm9jZXNzZWRFdmVudC52YWx1ZSk7CiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShlbnN1cmVVVEMocHJvY2Vzc2VkRXZlbnQudmFsdWUuc3RhcnRfZGF0ZSkpOwogICAgY29uc3QgZW5kRGF0ZSA9IHByb2Nlc3NlZEV2ZW50LnZhbHVlLmVuZF9kYXRlID8gbmV3IERhdGUoZW5zdXJlVVRDKHByb2Nlc3NlZEV2ZW50LnZhbHVlLmVuZF9kYXRlKSkgOiBuZXcgRGF0ZShzdGFydERhdGUuZ2V0VGltZSgpICsgNjAgKiA2MCAqIDEwMDApOyAvLyBEZWZhdWx0IHRvIDEgaG91ciBpZiBubyBlbmQgZGF0ZQogICAgY29uc29sZS5sb2coJ1tBZGRUb0NhbGVuZGFyXSBDb21wdXRlZCBzdGFydERhdGU6Jywgc3RhcnREYXRlLnRvSVNPU3RyaW5nKCkpOwogICAgY29uc29sZS5sb2coJ1tBZGRUb0NhbGVuZGFyXSBDb21wdXRlZCBlbmREYXRlOicsIGVuZERhdGUudG9JU09TdHJpbmcoKSk7CiAgICAKICAgIC8vIEZvcm1hdCBkYXRlcyBmb3IgY2FsZW5kYXIKICAgIGNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZSkgPT4gewogICAgICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvLXw6fFwuXGQrL2csICcnKTsKICAgIH07CiAgICAKICAgIC8vIENyZWF0ZSBjYWxlbmRhciBldmVudCBkYXRhCiAgICBjb25zdCBjYWxlbmRhckRhdGEgPSB7CiAgICAgICAgdGl0bGU6IGV2ZW50LnRpdGxlLAogICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbiB8fCAnJywKICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24gfHwgJycsCiAgICAgICAgc3RhcnRUaW1lOiBmb3JtYXREYXRlKHN0YXJ0RGF0ZSksCiAgICAgICAgZW5kVGltZTogZm9ybWF0RGF0ZShlbmREYXRlKQogICAgfTsKICAgIAogICAgLy8gQ3JlYXRlIEdvb2dsZSBDYWxlbmRhciBVUkwgd2l0aCBwcm9wZXIgZGF0ZSBmb3JtYXR0aW5nCiAgICBjb25zdCBnb29nbGVDYWxlbmRhclVybCA9IGBodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvcmVuZGVyP2FjdGlvbj1URU1QTEFURSZ0ZXh0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGVuZGFyRGF0YS50aXRsZSl9JmRhdGVzPSR7Y2FsZW5kYXJEYXRhLnN0YXJ0VGltZX0vJHtjYWxlbmRhckRhdGEuZW5kVGltZX0mZGV0YWlscz0ke2VuY29kZVVSSUNvbXBvbmVudChjYWxlbmRhckRhdGEuZGVzY3JpcHRpb24pfSZsb2NhdGlvbj0ke2VuY29kZVVSSUNvbXBvbmVudChjYWxlbmRhckRhdGEubG9jYXRpb24pfWA7CiAgICAKICAgIC8vIENyZWF0ZSBBcHBsZSBDYWxlbmRhciBVUkwgd2l0aCBwcm9wZXIgLmljcyBmb3JtYXQKICAgIGNvbnN0IGljc0NvbnRlbnQgPSBbCiAgICAgICAgJ0JFR0lOOlZDQUxFTkRBUicsCiAgICAgICAgJ1ZFUlNJT046Mi4wJywKICAgICAgICAnUFJPRElEOi0vL2hhY2tzdy9oYW5kY2FsLy9OT05TR01MIHYxLjAvL0VOJywKICAgICAgICAnQ0FMU0NBTEU6R1JFR09SSUFOJywKICAgICAgICAnQkVHSU46VkVWRU5UJywKICAgICAgICBgRFRTVEFSVDoke2NhbGVuZGFyRGF0YS5zdGFydFRpbWV9YCwKICAgICAgICBgRFRFTkQ6JHtjYWxlbmRhckRhdGEuZW5kVGltZX1gLAogICAgICAgIGBTVU1NQVJZOiR7Y2FsZW5kYXJEYXRhLnRpdGxlLnJlcGxhY2UoLywvZywgJ1xcLCcpfWAsCiAgICAgICAgYERFU0NSSVBUSU9OOiR7Y2FsZW5kYXJEYXRhLmRlc2NyaXB0aW9uLnJlcGxhY2UoLywvZywgJ1xcLCcpLnJlcGxhY2UoL1xuL2csICdcXG4nKX1gLAogICAgICAgIGBMT0NBVElPTjoke2NhbGVuZGFyRGF0YS5sb2NhdGlvbi5yZXBsYWNlKC8sL2csICdcXCwnKX1gLAogICAgICAgICdFTkQ6VkVWRU5UJywKICAgICAgICAnRU5EOlZDQUxFTkRBUicKICAgIF0uam9pbignXHJcbicpOwogICAgCiAgICBjb25zdCBhcHBsZUNhbGVuZGFyVXJsID0gYGRhdGE6dGV4dC9jYWxlbmRhcjtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KGljc0NvbnRlbnQpfWA7CiAgICAKICAgIC8vIE9wZW4gY2FsZW5kYXIgb3B0aW9ucyBpbiBhIG1vZGFsCiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgbW9kYWwuY2xhc3NOYW1lID0gJ2ZpeGVkIGluc2V0LTAgei01MCBvdmVyZmxvdy15LWF1dG8nOwogICAgbW9kYWwuaW5uZXJIVE1MID0gYAogICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBwdC00IHB4LTQgcGItMjAgdGV4dC1jZW50ZXIgc206YmxvY2sgc206cC0wIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBiZy1ncmF5LTUwMCBiZy1vcGFjaXR5LTc1IHRyYW5zaXRpb24tb3BhY2l0eSI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1ibG9jayBhbGlnbi1ib3R0b20gYmctd2hpdGUgcm91bmRlZC1sZyB0ZXh0LWxlZnQgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy14bCB0cmFuc2Zvcm0gdHJhbnNpdGlvbi1hbGwgc206bXktOCBzbTphbGlnbi1taWRkbGUgc206bWF4LXctbGcgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHB4LTQgcHQtNSBwYi00IHNtOnAtNiBzbTpwYi00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbTpmbGV4IHNtOml0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyB0ZXh0LWNlbnRlciBzbTptdC0wIHNtOnRleHQtbGVmdCB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGxlYWRpbmctNiBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIj5BZGQgdG8gQ2FsZW5kYXI8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7Z29vZ2xlQ2FsZW5kYXJVcmx9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBiZy1ibHVlLTYwMCBob3ZlcjpiZy1ibHVlLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEyIDBDNS4zNzIgMCAwIDUuMzcyIDAgMTJzNS4zNzIgMTIgMTIgMTIgMTItNS4zNzIgMTItMTJTMTguNjI4IDAgMTIgMHptMCAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwUzIgMTcuNTE0IDIgMTIgNi40ODYgMiAxMiAyem0wIDNjLTMuODY2IDAtNyAzLjEzNC03IDdzMy4xMzQgNyA3IDcgNy0zLjEzNCA3LTctMy4xMzQtNy03LTd6bTAgMmMyLjc2MSAwIDUgMi4yMzkgNSA1cy0yLjIzOSA1LTUgNS01LTIuMjM5LTUtNSAyLjIzOS01IDUtNXoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBHb29nbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJHthcHBsZUNhbGVuZGFyVXJsfSIgZG93bmxvYWQ9ImV2ZW50LmljcyIgY2xhc3M9InctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBiZy1ncmF5LTYwMCBob3ZlcjpiZy1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE4LjcxIDE5LjVjLS44MyAxLjI0LTEuNzEgMi40NS0zLjA1IDIuNDctMS4zNC4wMy0xLjc3LS43OS0zLjI5LS43OS0xLjUzIDAtMiAuNzctMy4yNy44Mi0xLjMxLjA1LTIuMy0xLjMyLTMuMTQtMi41M0M0LjI1IDE3IDIuOTQgMTIuNDUgNC43IDkuMzljLjg3LTEuNTIgMi40My0yLjQ4IDQuMTItMi41MSAxLjI4LS4wMiAyLjUuODcgMy4yOS44Ny43OCAwIDIuMjYtMS4wNyAzLjgxLS45MS42NS4wMyAyLjQ3LjI2IDMuNjQgMS45OC0uMDkuMDYtMi4xNyAxLjI4LTIuMTUgMy44MS4wMyAzLjAyIDIuNjUgNC4wMyAyLjY4IDQuMDQtLjAzLjA3LS40MiAxLjQ0LTEuMzggMi44M00xMyAzLjVjLjczLS44MyAxLjk0LTEuNDYgMi45NC0xLjUuMTMgMS4xNy0uMzQgMi4zNS0xLjA0IDMuMTktLjY5Ljg1LTEuODMgMS41MS0yLjk1IDEuNDItLjE1LTEuMTUuNDEtMi4zNSAxLjA1LTMuMTF6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQXBwbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWdyYXktNTAgcHgtNCBweS0zIHNtOnB4LTYgc206ZmxleCBzbTpmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im10LTMgdy1mdWxsIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gcHgtNCBweS0yIGJnLXdoaXRlIHRleHQtYmFzZSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGhvdmVyOmJnLWdyYXktNTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctaW5kaWdvLTUwMCBzbTptdC0wIHNtOm1sLTMgc206dy1hdXRvIHNtOnRleHQtc20iPgogICAgICAgICAgICAgICAgICAgICAgICBDbG9zZQogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgYDsKICAgIAogICAgLy8gQWRkIGNsaWNrIGhhbmRsZXIgdG8gY2xvc2UgYnV0dG9uCiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpOwogICAgY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtb2RhbCk7CiAgICB9KTsKICAgIAogICAgLy8gQWRkIGNsaWNrIGhhbmRsZXIgdG8gYmFja2dyb3VuZAogICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gewogICAgICAgIGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtb2RhbCk7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWwpOwp9Owo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9InAtNCBwYi0wIj4KICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXNtIHJvdW5kZWQtbGcgcG9zdC1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTQiPgogICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudCIgY2xhc3M9InNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICAgICAgPCEtLSBDb2xsYXBzZWQgVmlldyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9IiFpc0V4cGFuZGVkIiBjbGFzcz0iYmctYmx1ZS01MCByb3VuZGVkLWxnIHB5LTIgcHgtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9InRvZ2dsZUV4cGFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gY3Vyc29yLXBvaW50ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IHRleHQtYmx1ZS01MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNiAyYTEgMSAwIDAwLTEgMXYxSDRhMiAyIDAgMDAtMiAydjEwYTIgMiAwIDAwMiAyaDEyYTIgMiAwIDAwMi0yVjZhMiAyIDAgMDAtMi0yaC0xVjNhMSAxIDAgMTAtMiAwdjFIN1YzYTEgMSAwIDAwLTEtMXptMCA1YTEgMSAwIDAwMCAyaDhhMSAxIDAgMTAwLTJINnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4LTEgbWluLXctMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS03MDAgdHJ1bmNhdGUiPnt7IG5leHRFdmVudC50aXRsZSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQteHMgdGV4dC1ibHVlLTYwMCI+e3sgZm9ybWF0RXZlbnREYXRlKG5leHRFdmVudC5zdGFydF9kYXRlKSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IHRleHQtYmx1ZS01MDAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjI5MyA3LjI5M2ExIDEgMCAwMTEuNDE0IDBMMTAgMTAuNTg2bDMuMjkzLTMuMjkzYTEgMSAwIDExMS40MTQgMS40MTRsLTQgNGExIDEgMCAwMS0xLjQxNCAwbC00LTRhMSAxIDAgMDEwLTEuNDE0eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZGVkIFZpZXcgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9ImJnLWJsdWUtNTAgcm91bmRlZC1sZyBwLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTcwMCI+VXJtxIN0b3J1bCBFdmVuaW1lbnQ8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBAY2xpY2s9InRvZ2dsZUV4cGFuZCIgY2xhc3M9InRleHQtYmx1ZS01MDAgaG92ZXI6dGV4dC1ibHVlLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE0LjcwNyAxMi43MDdhMSAxIDAgMDEtMS40MTQgMEwxMCA5LjQxNGwtMy4yOTMgMy4yOTNhMSAxIDAgMDEtMS40MTQtMS40MTRsNC00YTEgMSAwIDAxMS40MTQgMGw0IDRhMSAxIDAgMDEwIDEuNDE0eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXZlbnQgVGl0bGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtYmx1ZS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNSB3LTUiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMmExIDEgMCAwMC0xIDF2MUg0YTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY2YTIgMiAwIDAwLTItMmgtMVYzYTEgMSAwIDEwLTIgMHYxSDdWM2ExIDEgMCAwMC0xLTF6bTAgNWExIDEgMCAwMDAgMmg4YTEgMSAwIDEwMC0ySDZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9udC1tZWRpdW0iPnt7IG5leHRFdmVudC50aXRsZSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV2ZW50IERldGFpbHMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIgdGV4dC1zbSB0ZXh0LWJsdWUtNjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTEtMTJhMSAxIDAgMTAtMiAwdjRhMSAxIDAgMDAuMjkzLjcwN2wyLjgyOCAyLjgyOWExIDEgMCAxMDEuNDE1LTEuNDE1TDExIDkuNTg2VjZ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZm9ybWF0RXZlbnREYXRlKG5leHRFdmVudC5zdGFydF9kYXRlKSB9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5sb2NhdGlvbiIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtNCB3LTQiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjA1IDQuMDVhNyA3IDAgMTE5LjkgOS45TDEwIDE4LjlsLTQuOTUtNC45NWE3IDcgMCAwMTAtOS45ek0xMCAxMWEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbmV4dEV2ZW50LmxvY2F0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXZlbnQgRGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5kZXNjcmlwdGlvbiIgY2xhc3M9InRleHQtc20gdGV4dC1ibHVlLTYwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbmV4dEV2ZW50LmRlc2NyaXB0aW9uIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCB0byBDYWxlbmRhciBCdXR0b24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0iYWRkVG9DYWxlbmRhcihuZXh0RXZlbnQpIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1ibHVlLTYwMCBob3Zlcjp0ZXh0LWJsdWUtODAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy01IGgtNSBtci0yIiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBDYWxlbmRhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWxlIEF0dGFjaG1lbnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj0ibmV4dEV2ZW50LmZpbGVfcGF0aCIgY2xhc3M9Im10LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9InJvdXRlKCdmaWxlcy5kb3dubG9hZCcsIG5leHRFdmVudC5pZCkiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgMTB2Nm0wIDBsLTMtM20zIDNsMy0zbTIgOEg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5maWxlX25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWwtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPih7eyBmb3JtYXRGaWxlU2l6ZShuZXh0RXZlbnQuZmlsZV9zaXplKSB9fSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFdmVudCBQb2xsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5wb2xsIiBjbGFzcz0ibXQtNCBib3JkZXItdCBib3JkZXItYmx1ZS0yMDAgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LWJsdWUtNzAwIG1iLTMiPnt7IG5leHRFdmVudC5wb2xsLnF1ZXN0aW9uIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iKG9wdGlvbiwgaW5kZXgpIGluIG5leHRFdmVudC5wb2xsLm9wdGlvbnMiIDprZXk9ImluZGV4IiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJlbGF0aXZlIGdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6bmFtZT0iJ3BvbGxfJyArIG5leHRFdmVudC5wb2xsLmlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnZhbHVlPSJvcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2hlY2tlZD0iaXNPcHRpb25TZWxlY3RlZChuZXh0RXZlbnQucG9sbCwgb3B0aW9uKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iKGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IGdldFNlbGVjdGVkT3B0aW9ucyhuZXh0RXZlbnQucG9sbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEV2ZW50LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmNoZWNrZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVm90ZShuZXh0RXZlbnQucG9sbCwgWy4uLmN1cnJlbnRTZWxlY3RlZCwgb3B0aW9uXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0ZWQuZmlsdGVyKG8gPT4gbyAhPT0gb3B0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVm90ZShuZXh0RXZlbnQucG9sbCwgbmV3U2VsZWN0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVm90ZShuZXh0RXZlbnQucG9sbCwgZS50YXJnZXQuY2hlY2tlZCA/IFtvcHRpb25dIDogW10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJvdW5kZWQtZnVsbCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gfX0gdm90ZXMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPih7eyBNYXRoLnJvdW5kKChuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIC8gT2JqZWN0LnZhbHVlcyhuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwIH19JSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTIgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC1mdWxsIGJnLWluZGlnby01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9Insgd2lkdGg6IGAke01hdGgucm91bmQoKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gLyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSkgKiAxMDApIHx8IDB9JWAgfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSB9fSB2b3RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVycyhuZXh0RXZlbnQucG9sbCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC14cyB0ZXh0LWluZGlnby02MDAgaG92ZXI6dGV4dC1pbmRpZ28tODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyB2b3RlcnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9InRleHQtY2VudGVyIHB5LTgiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ncmF5LTUwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9ImgtMTIgdy0xMiBteC1hdXRvIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik04IDdWM204IDRWM20tOSA4aDEwTTUgMjFoMTRhMiAyIDAgMDAyLTJWN2EyIDIgMCAwMC0yLTJINWEyIDIgMCAwMC0yIDJ2MTJhMiAyIDAgMDAyIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi0yIj5OdSBleGlzdMSDIGV2ZW5pbWVudGUgdmlpdG9hcmU8L2gzPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9InRleHQteHMgdGV4dC1ncmF5LTUwMCI+Q8OibmQgdm9yIGZpIGNyZWF0ZSBldmVuaW1lbnRlIG5vaSwgYWNlc3RlYSB2b3IgYXDEg3JlYSBhaWNpLjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVm90ZXJzIE1vZGFsIC0tPgogICAgICAgIDxkaXYgdi1pZj0ic2hvd1ZvdGVyc01vZGFsIiBjbGFzcz0iZml4ZWQgaW5zZXQtMCB6LVs5OTk5XSBvdmVyZmxvdy15LWF1dG8iIGFyaWEtbGFiZWxsZWRieT0ibW9kYWwtdGl0bGUiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBwdC00IHB4LTQgcGItMjAgdGV4dC1jZW50ZXIgc206YmxvY2sgc206cC0wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkIGluc2V0LTAgYmctYmxhY2sgYmctb3BhY2l0eS01MCB0cmFuc2l0aW9uLW9wYWNpdHkiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gc206aW5saW5lLWJsb2NrIHNtOmFsaWduLW1pZGRsZSBzbTpoLXNjcmVlbiIgYXJpYS1oaWRkZW49InRydWUiPiYjODIwMzs8L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtYmxvY2sgYWxpZ24tYm90dG9tIGJnLXdoaXRlIHJvdW5kZWQtbGcgdGV4dC1sZWZ0IG92ZXJmbG93LWhpZGRlbiBzaGFkb3cteGwgdHJhbnNmb3JtIHRyYW5zaXRpb24tYWxsIHNtOm15LTggc206YWxpZ24tbWlkZGxlIHNtOm1heC13LTJ4bCBzbTp3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InAtNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIG1iLTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9sbCBWb3RlcnMKICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2UteS02Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb25Wb3RlcnMsIG9wdGlvbikgaW4gdm90ZXJzIiA6a2V5PSJvcHRpb24iIGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0idGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj57eyBvcHRpb24gfX08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9InZvdGVyIGluIG9wdGlvblZvdGVycyIgOmtleT0idm90ZXIuaWQiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPSJ2b3Rlci5wcm9maWxlX3Bob3RvX3VybCB8fCBgaHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQodm90ZXIuZmlyc3RfbmFtZSArICcgJyArIHZvdGVyLmxhc3RfbmFtZSl9JmJhY2tncm91bmQ9MEQ5NDg4JmNvbG9yPWZmZmAiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDphbHQ9InZvdGVyLmZpcnN0X25hbWUgKyAnICcgKyB2b3Rlci5sYXN0X25hbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImgtOCB3LTggcm91bmRlZC1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTcwMCI+e3sgdm90ZXIuZmlyc3RfbmFtZSB9fSB7eyB2b3Rlci5sYXN0X25hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im9wdGlvblZvdGVycy5sZW5ndGggPT09IDAiIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gdm90ZXJzIHlldAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNiBmbGV4IGp1c3RpZnktZW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJzaG93Vm90ZXJzTW9kYWwgPSBmYWxzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHgtNCBweS0yIGJnLWdyYXktMTAwIHRleHQtZ3JheS03MDAgcm91bmRlZC1tZCBob3ZlcjpiZy1ncmF5LTIwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC90ZW1wbGF0ZT4KCjxzdHlsZT4KOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6ICNCQ0MwQzQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogI0E0QTdBQjsKfQoKLyogQ3VzdG9tIGNoZWNrYm94IHN0eWxpbmcgKi8KW3R5cGU9ImNoZWNrYm94Il0gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdDsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogYm9yZGVyLWJveDsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBoZWlnaHQ6IDFyZW07CiAgICB3aWR0aDogMXJlbTsKICAgIGNvbG9yOiByZ2IoNzksIDcwLCAyMjkpOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOwogICAgLS10dy1zaGFkb3c6IDAgMCAjMDAwMDsKICAgIHBhZGRpbmc6IDBweDsKICAgIGJvcmRlci1jb2xvcjogcmdiKDIwOSwgMjEzLCAyMTkpOwogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDsKfQoKW3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPSd3aGl0ZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSUzY3BhdGggZD0nTTEyLjIwNyA0Ljc5M2ExIDEgMCAwMTAgMS40MTRsLTUgNWExIDEgMCAwMS0xLjQxNCAwbC0yLTJhMSAxIDAgMDExLjQxNC0xLjQxNEw2LjUgOS4wODZsNC4yOTMtNC4yOTNhMSAxIDAgMDExLjQxNCAweicvJTNlJTNjL3N2ZyUzZSIpOwogICAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudGNvbG9yOwogICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7Cn0KClt0eXBlPSJjaGVja2JveCJdOmZvY3VzIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSg5OSwgMTAyLCAyNDEsIDAuMik7Cn0KPC9zdHlsZT4gAAAAAAAAAAA1qwAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACwFwAAAAAAALsXAAAAAAAAAAAAAAAA8L8"
				],
				[
					66,
					1,
					"paste",
					null,
					"AgAAAFNXAAAAAAAA9WwAAAAAAAAAAAAA9WwAAAAAAAD1bAAAAAAAAHYWAABjb25zdCBhZGRUb0NhbGVuZGFyID0gKGV2ZW50KSA9PiB7CiAgICBjb25zb2xlLmxvZygnW0FkZFRvQ2FsZW5kYXJdIFJhdyBldmVudDonLCBldmVudCk7CiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShlbnN1cmVVVEMoZXZlbnQuc3RhcnRfZGF0ZSkpOwogICAgY29uc3QgZW5kRGF0ZSA9IGV2ZW50LmVuZF9kYXRlID8gbmV3IERhdGUoZW5zdXJlVVRDKGV2ZW50LmVuZF9kYXRlKSkgOiBuZXcgRGF0ZShzdGFydERhdGUuZ2V0VGltZSgpICsgNjAgKiA2MCAqIDEwMDApOyAvLyBEZWZhdWx0IHRvIDEgaG91ciBpZiBubyBlbmQgZGF0ZQogICAgY29uc29sZS5sb2coJ1tBZGRUb0NhbGVuZGFyXSBDb21wdXRlZCBzdGFydERhdGU6Jywgc3RhcnREYXRlLnRvSVNPU3RyaW5nKCkpOwogICAgY29uc29sZS5sb2coJ1tBZGRUb0NhbGVuZGFyXSBDb21wdXRlZCBlbmREYXRlOicsIGVuZERhdGUudG9JU09TdHJpbmcoKSk7CiAgICAKICAgIC8vIEZvcm1hdCBkYXRlcyBmb3IgY2FsZW5kYXIKICAgIGNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZSkgPT4gewogICAgICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvLXw6fFwuXGQrL2csICcnKTsKICAgIH07CiAgICAKICAgIC8vIENyZWF0ZSBjYWxlbmRhciBldmVudCBkYXRhCiAgICBjb25zdCBjYWxlbmRhckRhdGEgPSB7CiAgICAgICAgdGl0bGU6IGV2ZW50LnRpdGxlLAogICAgICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbiB8fCAnJywKICAgICAgICBsb2NhdGlvbjogZXZlbnQubG9jYXRpb24gfHwgJycsCiAgICAgICAgc3RhcnRUaW1lOiBmb3JtYXREYXRlKHN0YXJ0RGF0ZSksCiAgICAgICAgZW5kVGltZTogZm9ybWF0RGF0ZShlbmREYXRlKQogICAgfTsKICAgIAogICAgLy8gQ3JlYXRlIEdvb2dsZSBDYWxlbmRhciBVUkwgd2l0aCBwcm9wZXIgZGF0ZSBmb3JtYXR0aW5nCiAgICBjb25zdCBnb29nbGVDYWxlbmRhclVybCA9IGBodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvcmVuZGVyP2FjdGlvbj1URU1QTEFURSZ0ZXh0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbGVuZGFyRGF0YS50aXRsZSl9JmRhdGVzPSR7Y2FsZW5kYXJEYXRhLnN0YXJ0VGltZX0vJHtjYWxlbmRhckRhdGEuZW5kVGltZX0mZGV0YWlscz0ke2VuY29kZVVSSUNvbXBvbmVudChjYWxlbmRhckRhdGEuZGVzY3JpcHRpb24pfSZsb2NhdGlvbj0ke2VuY29kZVVSSUNvbXBvbmVudChjYWxlbmRhckRhdGEubG9jYXRpb24pfWA7CiAgICAKICAgIC8vIENyZWF0ZSBBcHBsZSBDYWxlbmRhciBVUkwgd2l0aCBwcm9wZXIgLmljcyBmb3JtYXQKICAgIGNvbnN0IGljc0NvbnRlbnQgPSBbCiAgICAgICAgJ0JFR0lOOlZDQUxFTkRBUicsCiAgICAgICAgJ1ZFUlNJT046Mi4wJywKICAgICAgICAnUFJPRElEOi0vL2hhY2tzdy9oYW5kY2FsLy9OT05TR01MIHYxLjAvL0VOJywKICAgICAgICAnQ0FMU0NBTEU6R1JFR09SSUFOJywKICAgICAgICAnQkVHSU46VkVWRU5UJywKICAgICAgICBgRFRTVEFSVDoke2NhbGVuZGFyRGF0YS5zdGFydFRpbWV9YCwKICAgICAgICBgRFRFTkQ6JHtjYWxlbmRhckRhdGEuZW5kVGltZX1gLAogICAgICAgIGBTVU1NQVJZOiR7Y2FsZW5kYXJEYXRhLnRpdGxlLnJlcGxhY2UoLywvZywgJ1xcLCcpfWAsCiAgICAgICAgYERFU0NSSVBUSU9OOiR7Y2FsZW5kYXJEYXRhLmRlc2NyaXB0aW9uLnJlcGxhY2UoLywvZywgJ1xcLCcpLnJlcGxhY2UoL1xuL2csICdcXG4nKX1gLAogICAgICAgIGBMT0NBVElPTjoke2NhbGVuZGFyRGF0YS5sb2NhdGlvbi5yZXBsYWNlKC8sL2csICdcXCwnKX1gLAogICAgICAgICdFTkQ6VkVWRU5UJywKICAgICAgICAnRU5EOlZDQUxFTkRBUicKICAgIF0uam9pbignXHJcbicpOwogICAgCiAgICBjb25zdCBhcHBsZUNhbGVuZGFyVXJsID0gYGRhdGE6dGV4dC9jYWxlbmRhcjtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KGljc0NvbnRlbnQpfWA7CiAgICAKICAgIC8vIE9wZW4gY2FsZW5kYXIgb3B0aW9ucyBpbiBhIG1vZGFsCiAgICBjb25zdCBtb2RhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgbW9kYWwuY2xhc3NOYW1lID0gJ2ZpeGVkIGluc2V0LTAgei01MCBvdmVyZmxvdy15LWF1dG8nOwogICAgbW9kYWwuaW5uZXJIVE1MID0gYAogICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlbiBwdC00IHB4LTQgcGItMjAgdGV4dC1jZW50ZXIgc206YmxvY2sgc206cC0wIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQgaW5zZXQtMCBiZy1ncmF5LTUwMCBiZy1vcGFjaXR5LTc1IHRyYW5zaXRpb24tb3BhY2l0eSI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1ibG9jayBhbGlnbi1ib3R0b20gYmctd2hpdGUgcm91bmRlZC1sZyB0ZXh0LWxlZnQgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdy14bCB0cmFuc2Zvcm0gdHJhbnNpdGlvbi1hbGwgc206bXktOCBzbTphbGlnbi1taWRkbGUgc206bWF4LXctbGcgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLXdoaXRlIHB4LTQgcHQtNSBwYi00IHNtOnAtNiBzbTpwYi00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzbTpmbGV4IHNtOml0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyB0ZXh0LWNlbnRlciBzbTptdC0wIHNtOnRleHQtbGVmdCB3LWZ1bGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LWxnIGxlYWRpbmctNiBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIj5BZGQgdG8gQ2FsZW5kYXI8L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiR7Z29vZ2xlQ2FsZW5kYXJVcmx9IiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBiZy1ibHVlLTYwMCBob3ZlcjpiZy1ibHVlLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEyIDBDNS4zNzIgMCAwIDUuMzcyIDAgMTJzNS4zNzIgMTIgMTIgMTIgMTItNS4zNzIgMTItMTJTMTguNjI4IDAgMTIgMHptMCAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwUzIgMTcuNTE0IDIgMTIgNi40ODYgMiAxMiAyem0wIDNjLTMuODY2IDAtNyAzLjEzNC03IDdzMy4xMzQgNyA3IDcgNy0zLjEzNCA3LTctMy4xMzQtNy03LTd6bTAgMmMyLjc2MSAwIDUgMi4yMzkgNSA1cy0yLjIzOSA1LTUgNS01LTIuMjM5LTUtNSAyLjIzOS01IDUtNXoiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCB0byBHb29nbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJHthcHBsZUNhbGVuZGFyVXJsfSIgZG93bmxvYWQ9ImV2ZW50LmljcyIgY2xhc3M9InctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC00IHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBiZy1ncmF5LTYwMCBob3ZlcjpiZy1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNSBoLTUgbXItMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE4LjcxIDE5LjVjLS44MyAxLjI0LTEuNzEgMi40NS0zLjA1IDIuNDctMS4zNC4wMy0xLjc3LS43OS0zLjI5LS43OS0xLjUzIDAtMiAuNzctMy4yNy44Mi0xLjMxLjA1LTIuMy0xLjMyLTMuMTQtMi41M0M0LjI1IDE3IDIuOTQgMTIuNDUgNC43IDkuMzljLjg3LTEuNTIgMi40My0yLjQ4IDQuMTItMi41MSAxLjI4LS4wMiAyLjUuODcgMy4yOS44Ny43OCAwIDIuMjYtMS4wNyAzLjgxLS45MS42NS4wMyAyLjQ3LjI2IDMuNjQgMS45OC0uMDkuMDYtMi4xNyAxLjI4LTIuMTUgMy44MS4wMyAzLjAyIDIuNjUgNC4wMyAyLjY4IDQuMDQtLjAzLjA3LS40MiAxLjQ0LTEuMzggMi44M00xMyAzLjVjLjczLS44MyAxLjk0LTEuNDYgMi45NC0xLjUuMTMgMS4xNy0uMzQgMi4zNS0xLjA0IDMuMTktLjY5Ljg1LTEuODMgMS41MS0yLjk1IDEuNDItLjE1LTEuMTUuNDEtMi4zNSAxLjA1LTMuMTF6Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgdG8gQXBwbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWdyYXktNTAgcHgtNCBweS0zIHNtOnB4LTYgc206ZmxleCBzbTpmbGV4LXJvdy1yZXZlcnNlIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im10LTMgdy1mdWxsIGlubGluZS1mbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBzaGFkb3ctc20gcHgtNCBweS0yIGJnLXdoaXRlIHRleHQtYmFzZSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIGhvdmVyOmJnLWdyYXktNTAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctaW5kaWdvLTUwMCBzbTptdC0wIHNtOm1sLTMgc206dy1hdXRvIHNtOnRleHQtc20iPgogICAgICAgICAgICAgICAgICAgICAgICBDbG9zZQogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgYDsKICAgIAogICAgLy8gQWRkIGNsaWNrIGhhbmRsZXIgdG8gY2xvc2UgYnV0dG9uCiAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IG1vZGFsLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpOwogICAgY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtb2RhbCk7CiAgICB9KTsKICAgIAogICAgLy8gQWRkIGNsaWNrIGhhbmRsZXIgdG8gYmFja2dyb3VuZAogICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gewogICAgICAgIGlmIChlLnRhcmdldCA9PT0gbW9kYWwpIHsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtb2RhbCk7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobW9kYWwpOwp9Ow",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADJbQAAAAAAAFNXAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Http/Controllers/MemberController.php",
			"settings":
			{
				"buffer_size": 6935,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					5,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAArHwAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyczsKCnVzZSBBcHBcTW9kZWxzXExvZGdlOwp1c2UgQXBwXE1vZGVsc1xMb2RnZURpZ25pdHk7CnVzZSBBcHBcTW9kZWxzXE1MTlJEaWduaXR5Owp1c2UgQXBwXE1vZGVsc1xNZW1iZXI7CnVzZSBJbGx1bWluYXRlXEh0dHBcUmVxdWVzdDsKdXNlIEluZXJ0aWFcSW5lcnRpYTsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXERCOwp1c2UgQXBwXE1vZGVsc1xMb2RnZU1lbWJlcjsKCmNsYXNzIE1lbWJlckNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChMb2RnZSAkbG9kZ2UpCiAgICB7CiAgICAgICAgJG1lbWJlcnMgPSAkbG9kZ2UtPm1lbWJlcnMoKQogICAgICAgICAgICAtPndpdGgoWyd1c2VyJywgJ2xvZGdlX2RpZ25pdHknLCAnbWxucl9kaWduaXR5J10pCiAgICAgICAgICAgIC0+Z2V0KCkKICAgICAgICAgICAgLT5tYXAoZnVuY3Rpb24gKCRtZW1iZXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkbWVtYmVyLT5pZCwKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAnZmlyc3RfbmFtZScgPT4gJG1lbWJlci0+dXNlci0+Zmlyc3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnbGFzdF9uYW1lJyA9PiAkbWVtYmVyLT51c2VyLT5sYXN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAncm9sZScgPT4gJG1lbWJlci0+dXNlci0+cm9sZSwKICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyA9PiAkbWVtYmVyLT5zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgJ3Byb2ZpbGVfcGhvdG9fdXJsJyA9PiAkbWVtYmVyLT51c2VyLT5wcm9maWxlX3Bob3RvX3VybCwKICAgICAgICAgICAgICAgICAgICAnbG9kZ2VfZGlnbml0eScgPT4gJG1lbWJlci0+bG9kZ2VfZGlnbml0eSwKICAgICAgICAgICAgICAgICAgICAnbWxucl9kaWduaXR5JyA9PiAkbWVtYmVyLT5tbG5yX2RpZ25pdHksCiAgICAgICAgICAgICAgICAgICAgJ21hc29uaWNfZmlsZScgPT4gJG1lbWJlci0+bWFzb25pY19maWxlLAogICAgICAgICAgICAgICAgICAgICdhcHByZW50aWNlX2RhdGUnID0+ICRtZW1iZXItPmFwcHJlbnRpY2VfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAnYXBwcmVudGljZV9vYXRoJyA9PiAkbWVtYmVyLT5hcHByZW50aWNlX29hdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZlbGxvd2NyYWZ0X2RhdGUnID0+ICRtZW1iZXItPmZlbGxvd2NyYWZ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgJ2ZlbGxvd2NyYWZ0X29hdGgnID0+ICRtZW1iZXItPmZlbGxvd2NyYWZ0X29hdGgsCiAgICAgICAgICAgICAgICAgICAgJ21hc3Rlcl9kYXRlJyA9PiAkbWVtYmVyLT5tYXN0ZXJfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAnbWFzdGVyX29hdGgnID0+ICRtZW1iZXItPm1hc3Rlcl9vYXRoLAogICAgICAgICAgICAgICAgICAgICdtbG5yX3JlcXVlc3QnID0+ICRtZW1iZXItPm1sbnJfcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAnaXNfYWN0aXZlJyA9PiAkbWVtYmVyLT5pc19hY3RpdmUsCiAgICAgICAgICAgICAgICAgICAgJ2JpcnRoX2RhdGUnID0+ICRtZW1iZXItPmJpcnRoX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgJ2JpcnRoX3BsYWNlJyA9PiAkbWVtYmVyLT5iaXJ0aF9wbGFjZSwKICAgICAgICAgICAgICAgICAgICAncHJvZmVzc2lvbicgPT4gJG1lbWJlci0+cHJvZmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAnYWRkcmVzcycgPT4gJG1lbWJlci0+YWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRtZW1iZXItPnBob25lLAogICAgICAgICAgICAgICAgICAgICd3b3JrcGxhY2UnID0+ICRtZW1iZXItPndvcmtwbGFjZSwKICAgICAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+ICRtZW1iZXItPnBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICdjb21tZW50cycgPT4gJG1lbWJlci0+Y29tbWVudHMsCiAgICAgICAgICAgICAgICAgICAgJ2Rpc3BlbnNhJyA9PiAkbWVtYmVyLT5kaXNwZW5zYSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdMb2RnZS9NZW1iZXJzJywgWwogICAgICAgICAgICAnbG9kZ2UnID0+ICRsb2RnZSwKICAgICAgICAgICAgJ21lbWJlcnMnID0+ICRtZW1iZXJzLAogICAgICAgICAgICAnbG9kZ2VEaWduaXRpZXMnID0+IExvZGdlRGlnbml0eTo6YWxsKCksCiAgICAgICAgICAgICdtbG5yRGlnbml0aWVzJyA9PiBNTE5SRGlnbml0eTo6YWxsKCksCiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZURpZ25pdGllcyhSZXF1ZXN0ICRyZXF1ZXN0LCBNZW1iZXIgJG1lbWJlcikKICAgIHsKICAgICAgICAkcmVxdWVzdC0+dmFsaWRhdGUoWwogICAgICAgICAgICAnbG9kZ2VfZGlnbml0eV9pZCcgPT4gJ251bGxhYmxlfGV4aXN0czpsb2RnZV9kaWduaXRpZXMsaWQnLAogICAgICAgICAgICAnbWxucl9kaWduaXR5X2lkJyA9PiAnbnVsbGFibGV8ZXhpc3RzOm1sbnJfZGlnbml0aWVzLGlkJywKICAgICAgICBdKTsKCiAgICAgICAgJG1lbWJlci0+dXBkYXRlKFsKICAgICAgICAgICAgJ2xvZGdlX2RpZ25pdHlfaWQnID0+ICRyZXF1ZXN0LT5sb2RnZV9kaWduaXR5X2lkLAogICAgICAgICAgICAnbWxucl9kaWduaXR5X2lkJyA9PiAkcmVxdWVzdC0+bWxucl9kaWduaXR5X2lkLAogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gYmFjaygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoUmVxdWVzdCAkcmVxdWVzdCwgTWVtYmVyICRtZW1iZXIpCiAgICB7CiAgICAgICAgXExvZzo6aW5mbygnVXBkYXRlIHJlcXVlc3QgcmVjZWl2ZWQ6JywgJHJlcXVlc3QtPmFsbCgpKTsKICAgICAgICBcTG9nOjppbmZvKCdDdXJyZW50IG1lbWJlciBzdGF0ZTonLCBbCiAgICAgICAgICAgICdtZW1iZXJfaWQnID0+ICRtZW1iZXItPmlkLAogICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgJ2xvZGdlX2RpZ25pdHlfaWQnID0+ICRtZW1iZXItPmxvZGdlX21lbWJlcj8tPmxvZGdlX2RpZ25pdHlfaWQsCiAgICAgICAgICAgICdsb2RnZV9pZCcgPT4gJG1lbWJlci0+bG9kZ2VfaWQKICAgICAgICBdKTsKCiAgICAgICAgJHZhbGlkYXRlZCA9ICRyZXF1ZXN0LT52YWxpZGF0ZShbCiAgICAgICAgICAgICdtYXNvbmljX2ZpbGUnID0+ICdudWxsYWJsZXxib29sZWFuJywKICAgICAgICAgICAgJ2FwcHJlbnRpY2VfZGF0ZScgPT4gJ251bGxhYmxlfGRhdGUnLAogICAgICAgICAgICAnYXBwcmVudGljZV9vYXRoJyA9PiAnbnVsbGFibGV8Ym9vbGVhbicsCiAgICAgICAgICAgICdmZWxsb3djcmFmdF9kYXRlJyA9PiAnbnVsbGFibGV8ZGF0ZScsCiAgICAgICAgICAgICdmZWxsb3djcmFmdF9vYXRoJyA9PiAnbnVsbGFibGV8Ym9vbGVhbicsCiAgICAgICAgICAgICdtYXN0ZXJfZGF0ZScgPT4gJ251bGxhYmxlfGRhdGUnLAogICAgICAgICAgICAnbWFzdGVyX29hdGgnID0+ICdudWxsYWJsZXxib29sZWFuJywKICAgICAgICAgICAgJ21sbnJfcmVxdWVzdF9kYXRlJyA9PiAnbnVsbGFibGV8c3RyaW5nfGluOm5vbmUsc2ltcGF0aWFudCxhZGV6aXVuZScsCiAgICAgICAgICAgICdsb2RnZV9kaWduaXR5X2lkJyA9PiAnbnVsbGFibGV8ZXhpc3RzOmxvZGdlX2RpZ25pdGllcyxpZCcsCiAgICAgICAgICAgICdtbG5yX2RpZ25pdHlfaWQnID0+ICdudWxsYWJsZXxleGlzdHM6bWxucl9kaWduaXRpZXMsaWQnLAogICAgICAgICAgICAnZmlyc3RfbmFtZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2xhc3RfbmFtZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ3Byb2Zlc3Npb24nID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdiaXJ0aF9wbGFjZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2FkZHJlc3MnID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdwaG9uZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2VtYWlsJyA9PiAnbnVsbGFibGV8ZW1haWx8bWF4OjI1NScsCiAgICAgICAgICAgICd3b3JrcGxhY2UnID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdwb3NpdGlvbicgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2JpcnRoX2RhdGUnID0+ICdudWxsYWJsZXxkYXRlJywKICAgICAgICAgICAgJ2lzX2FjdGl2ZScgPT4gJ251bGxhYmxlfGJvb2xlYW4nLAogICAgICAgIF0pOwoKICAgICAgICBcTG9nOjppbmZvKCdWYWxpZGF0ZWQgZGF0YTonLCAkdmFsaWRhdGVkKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgREI6OmJlZ2luVHJhbnNhY3Rpb24oKTsKCiAgICAgICAgICAgIC8vIElmIGxvZGdlX2RpZ25pdHlfaWQgaXMgYmVpbmcgdXBkYXRlZCwgaGFuZGxlIGl0IGRpcmVjdGx5IGluIHRoZSBkYXRhYmFzZQogICAgICAgICAgICBpZiAoJHJlcXVlc3QtPmhhcygnbG9kZ2VfZGlnbml0eV9pZCcpKSB7CiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdVcGRhdGluZyBsb2RnZV9kaWduaXR5X2lkIGRpcmVjdGx5OicsIFsKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAnbG9kZ2VfaWQnID0+ICRtZW1iZXItPmxvZGdlX2lkLAogICAgICAgICAgICAgICAgICAgICduZXdfdmFsdWUnID0+ICRyZXF1ZXN0LT5sb2RnZV9kaWduaXR5X2lkCiAgICAgICAgICAgICAgICBdKTsKCiAgICAgICAgICAgICAgICAvLyBGaXJzdCwgZ2V0IHRoZSBjdXJyZW50IHN0YXRlCiAgICAgICAgICAgICAgICAkY3VycmVudFN0YXRlID0gREI6OnNlbGVjdCgiCiAgICAgICAgICAgICAgICAgICAgU0VMRUNUICogRlJPTSBsb2RnZV9tZW1iZXJzIAogICAgICAgICAgICAgICAgICAgIFdIRVJFIHVzZXJfaWQgPSA/IEFORCBsb2RnZV9pZCA9ID8KICAgICAgICAgICAgICAgICIsIFskbWVtYmVyLT51c2VyX2lkLCAkbWVtYmVyLT5sb2RnZV9pZF0pOwoKICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ0N1cnJlbnQgbG9kZ2VfbWVtYmVyIHN0YXRlOicsICRjdXJyZW50U3RhdGUpOwoKICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB1c2luZyByYXcgU1FMCiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gREI6OnN0YXRlbWVudCgiCiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIGxvZGdlX21lbWJlcnMgCiAgICAgICAgICAgICAgICAgICAgU0VUIGxvZGdlX2RpZ25pdHlfaWQgPSA/LCAKICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF9hdCA9IE5PVygpIAogICAgICAgICAgICAgICAgICAgIFdIRVJFIHVzZXJfaWQgPSA/IEFORCBsb2RnZV9pZCA9ID8KICAgICAgICAgICAgICAgICIsIFskcmVxdWVzdC0+bG9kZ2VfZGlnbml0eV9pZCwgJG1lbWJlci0+dXNlcl9pZCwgJG1lbWJlci0+bG9kZ2VfaWRdKTsKCiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdVcGRhdGUgcmVzdWx0OicsIFsKICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gJHJlc3VsdAogICAgICAgICAgICAgICAgXSk7CgogICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHRoZSB1cGRhdGUKICAgICAgICAgICAgICAgICR1cGRhdGVkU3RhdGUgPSBEQjo6c2VsZWN0KCIKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIGxvZGdlX21lbWJlcnMgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgdXNlcl9pZCA9ID8gQU5EIGxvZGdlX2lkID0gPwogICAgICAgICAgICAgICAgIiwgWyRtZW1iZXItPnVzZXJfaWQsICRtZW1iZXItPmxvZGdlX2lkXSk7CgogICAgICAgICAgICAgICAgXExvZzo6aW5mbygnVXBkYXRlZCBsb2RnZV9tZW1iZXIgc3RhdGU6JywgJHVwZGF0ZWRTdGF0ZSk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gcmVjb3JkIHdhcyB1cGRhdGVkLCBjcmVhdGUgb25lCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHVwZGF0ZWRTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdObyByZWNvcmQgZm91bmQsIGNyZWF0aW5nIG5ldyBsb2RnZV9tZW1iZXIgcmVjb3JkJyk7CiAgICAgICAgICAgICAgICAgICAgREI6OnN0YXRlbWVudCgiCiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIGxvZGdlX21lbWJlcnMgKHVzZXJfaWQsIGxvZGdlX2lkLCBsb2RnZV9kaWduaXR5X2lkLCBjcmVhdGVkX2F0LCB1cGRhdGVkX2F0KQogICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sID8sIE5PVygpLCBOT1coKSkKICAgICAgICAgICAgICAgICAgICAiLCBbJG1lbWJlci0+dXNlcl9pZCwgJG1lbWJlci0+bG9kZ2VfaWQsICRyZXF1ZXN0LT5sb2RnZV9kaWduaXR5X2lkXSk7CgogICAgICAgICAgICAgICAgICAgICRuZXdTdGF0ZSA9IERCOjpzZWxlY3QoIgogICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIGxvZGdlX21lbWJlcnMgCiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIHVzZXJfaWQgPSA/IEFORCBsb2RnZV9pZCA9ID8KICAgICAgICAgICAgICAgICAgICAiLCBbJG1lbWJlci0+dXNlcl9pZCwgJG1lbWJlci0+bG9kZ2VfaWRdKTsKCiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnTmV3IGxvZGdlX21lbWJlciBzdGF0ZTonLCAkbmV3U3RhdGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBVcGRhdGUgb3RoZXIgZmllbGRzCiAgICAgICAgICAgICRvdGhlckZpZWxkcyA9IGFycmF5X2RpZmZfa2V5KCR2YWxpZGF0ZWQsIFsnbG9kZ2VfZGlnbml0eV9pZCcgPT4gbnVsbF0pOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRvdGhlckZpZWxkcykpIHsKICAgICAgICAgICAgICAgICRtZW1iZXItPmZpbGwoJG90aGVyRmllbGRzKTsKICAgICAgICAgICAgICAgICRtZW1iZXItPnNhdmUoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgREI6OmNvbW1pdCgpOwoKICAgICAgICAgICAgLy8gSWYgdXNlci1yZWxhdGVkIGZpZWxkcyBhcmUgcHJlc2VudCwgdXBkYXRlIHRoZSB1c2VyIGFzIHdlbGwKICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXIgJiYgKCRyZXF1ZXN0LT5oYXMoJ2ZpcnN0X25hbWUnKSB8fCAkcmVxdWVzdC0+aGFzKCdsYXN0X25hbWUnKSB8fCAkcmVxdWVzdC0+aGFzKCdlbWFpbCcpKSkgewogICAgICAgICAgICAgICAgJHVzZXJEYXRhID0gYXJyYXlfaW50ZXJzZWN0X2tleSgkdmFsaWRhdGVkLCBhcnJheV9mbGlwKFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnLCAnZW1haWwnXSkpOwogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkdXNlckRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgJG1lbWJlci0+dXNlci0+dXBkYXRlKCR1c2VyRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnVXBkYXRlZCB1c2VyOicsICRtZW1iZXItPnVzZXItPnRvQXJyYXkoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICBEQjo6cm9sbEJhY2soKTsKICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIG1lbWJlcjonLCBbCiAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgIH0KICAgIH0KfSAAAAAAAAAAAC8fAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABsEgAAAAAAAEQSAAAAAAAAAAAAAAAA8L8"
				],
				[
					12,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AgAAAKsRAAAAAAAArBEAAAAAAAAAAAAArBEAAAAAAAC0EQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACrEQAAAAAAAKsRAAAAAAAAAAAAAAAA8L8"
				],
				[
					13,
					1,
					"paste",
					null,
					"AQAAALQRAAAAAAAA3hEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC0EQAAAAAAALQRAAAAAAAAAAAAAAAA8L8"
				],
				[
					16,
					1,
					"insert",
					{
						"characters": "Request"
					},
					"CAAAAMARAAAAAAAAwREAAAAAAAAAAAAAwREAAAAAAADBEQAAAAAAAA4AAABWYWxpZGF0ZWQgZGF0YcERAAAAAAAAwhEAAAAAAAAAAAAAwhEAAAAAAADDEQAAAAAAAAAAAADDEQAAAAAAAMQRAAAAAAAAAAAAAMQRAAAAAAAAxREAAAAAAAAAAAAAxREAAAAAAADGEQAAAAAAAAAAAADGEQAAAAAAAMcRAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADOEQAAAAAAAMARAAAAAAAAAAAAAAAA8L8"
				],
				[
					26,
					1,
					"paste",
					null,
					"AgAAAMsRAAAAAAAA2hEAAAAAAAAAAAAA2hEAAAAAAADaEQAAAAAAAAoAAAAkdmFsaWRhdGVk",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADLEQAAAAAAANURAAAAAAAAAAAAAAAA8L8"
				],
				[
					32,
					1,
					"insert",
					{
						"characters": "obe"
					},
					"BAAAAGkSAAAAAAAAahIAAAAAAAAAAAAAahIAAAAAAABqEgAAAAAAAAUAAABhcnJheWoSAAAAAAAAaxIAAAAAAAAAAAAAaxIAAAAAAABsEgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABuEgAAAAAAAGkSAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					1,
					"left_delete",
					null,
					"AQAAAGsSAAAAAAAAaxIAAAAAAAABAAAAZQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABsEgAAAAAAAGwSAAAAAAAAAAAAAAAA8L8"
				],
				[
					34,
					1,
					"insert",
					{
						"characters": "ject"
					},
					"BAAAAGsSAAAAAAAAbBIAAAAAAAAAAAAAbBIAAAAAAABtEgAAAAAAAAAAAABtEgAAAAAAAG4SAAAAAAAAAAAAAG4SAAAAAAAAbxIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABrEgAAAAAAAGsSAAAAAAAAAAAAAAAA8L8"
				],
				[
					39,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AgAAAKsRAAAAAAAArBEAAAAAAAAAAAAArBEAAAAAAAC0EQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACrEQAAAAAAAKsRAAAAAAAAAAAAAAAA8L8"
				],
				[
					42,
					2,
					"left_delete",
					null,
					"AgAAAKwRAAAAAAAArBEAAAAAAAA5AAAAICAgICAgICAKICAgICAgICBcTG9nOjppbmZvKCdSZXF1ZXN0OicsICRyZXF1ZXN0LT5hbGwoKSk7qxEAAAAAAACrEQAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADlEQAAAAAAAKwRAAAAAAAAAAAAAAAA8L8"
				],
				[
					47,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"BQAAAKsRAAAAAAAArBEAAAAAAAAAAAAArBEAAAAAAAC0EQAAAAAAAAAAAAC0EQAAAAAAALURAAAAAAAAAAAAALURAAAAAAAAvREAAAAAAAAAAAAArBEAAAAAAACsEQAAAAAAAAgAAAAgICAgICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACrEQAAAAAAAKsRAAAAAAAAAAAAAAAA8L8"
				],
				[
					49,
					1,
					"paste",
					null,
					"AgAAAK0RAAAAAAAA3xEAAAAAAAAAAAAA3xEAAAAAAADfEQAAAAAAAAgAAAAgICAgICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC1EQAAAAAAAK0RAAAAAAAAAAAAAAAAAAA"
				],
				[
					56,
					1,
					"insert",
					{
						"characters": "2"
					},
					"AQAAAM8RAAAAAAAA0BEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADPEQAAAAAAAM8RAAAAAAAAAAAAAAAA8L8"
				],
				[
					59,
					2,
					"left_delete",
					null,
					"AgAAAHgRAAAAAAAAeBEAAAAAAABoAAAACiAgICAgICAgXExvZzo6aW5mbygnVmFsaWRhdGVkIGRhdGE6JywgJHZhbGlkYXRlZCk7CgogICAgICAgIFxMb2c6OmluZm8oJ1ZhbGlkYXRlZCBkYXRhMjonLCAkdmFsaWRhdGVkKTt3EQAAAAAAAHcRAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADgEQAAAAAAAHgRAAAAAAAAAAAAAAAA8L8"
				],
				[
					66,
					1,
					"left_delete",
					null,
					"AQAAAIALAAAAAAAAgAsAAAAAAABFAQAAICAgICAgICBcTG9nOjppbmZvKCdVcGRhdGUgcmVxdWVzdCByZWNlaXZlZDonLCAkcmVxdWVzdC0+YWxsKCkpOwogICAgICAgIFxMb2c6OmluZm8oJ0N1cnJlbnQgbWVtYmVyIHN0YXRlOicsIFsKICAgICAgICAgICAgJ21lbWJlcl9pZCcgPT4gJG1lbWJlci0+aWQsCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyX2lkLAogICAgICAgICAgICAnbG9kZ2VfZGlnbml0eV9pZCcgPT4gJG1lbWJlci0+bG9kZ2VfbWVtYmVyPy0+bG9kZ2VfZGlnbml0eV9pZCwKICAgICAgICAgICAgJ2xvZGdlX2lkJyA9PiAkbWVtYmVyLT5sb2RnZV9pZAogICAgICAgIF0pOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADFDAAAAAAAAIALAAAAAAAAAAAAAAAA8L8"
				],
				[
					68,
					2,
					"left_delete",
					null,
					"AgAAAIALAAAAAAAAgAsAAAAAAAABAAAACn8LAAAAAAAAfwsAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACBCwAAAAAAAIELAAAAAAAAAAAAAAAAAAA"
				],
				[
					73,
					2,
					"left_delete",
					null,
					"AgAAAPcQAAAAAAAA9xAAAAAAAAD+AAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1VwZGF0aW5nIGxvZGdlX2RpZ25pdHlfaWQgZGlyZWN0bHk6JywgWwogICAgICAgICAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkbWVtYmVyLT51c2VyX2lkLAogICAgICAgICAgICAgICAgICAgICdsb2RnZV9pZCcgPT4gJG1lbWJlci0+bG9kZ2VfaWQsCiAgICAgICAgICAgICAgICAgICAgJ25ld192YWx1ZScgPT4gJHJlcXVlc3QtPmxvZGdlX2RpZ25pdHlfaWQKICAgICAgICAgICAgICAgIF0pOwr2EAAAAAAAAPYQAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD1EQAAAAAAAPcQAAAAAAAAAAAAAAAA8L8"
				],
				[
					76,
					1,
					"left_delete",
					null,
					"AQAAAPcRAAAAAAAA9xEAAAAAAABLAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdDdXJyZW50IGxvZGdlX21lbWJlciBzdGF0ZTonLCAkY3VycmVudFN0YXRlKTsK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABCEgAAAAAAAPcRAAAAAAAAAAAAAAAA8L8"
				],
				[
					79,
					2,
					"left_delete",
					null,
					"AgAAAF0TAAAAAAAAXRMAAAAAAABsAAAACiAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdVcGRhdGUgcmVzdWx0OicsIFsKICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycgPT4gJHJlc3VsdAogICAgICAgICAgICAgICAgXSk7XBMAAAAAAABcEwAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADJEwAAAAAAAF0TAAAAAAAAAAAAAAAA8L8"
				],
				[
					82,
					2,
					"left_delete",
					null,
					"AgAAAFQUAAAAAAAAVBQAAAAAAABKAAAAICAgICAgICAgICAgICAgIFxMb2c6OmluZm8oJ1VwZGF0ZWQgbG9kZ2VfbWVtYmVyIHN0YXRlOicsICR1cGRhdGVkU3RhdGUpOwpTFAAAAAAAAFMUAAAAAAAAAQAAAAo",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACeFAAAAAAAAFQUAAAAAAAAAAAAAAAA8L8"
				],
				[
					85,
					2,
					"left_delete",
					null,
					"AgAAALgUAAAAAAAAuBQAAAAAAABUAAAAICAgICAgICAgICAgICAgICAgICBcTG9nOjppbmZvKCdObyByZWNvcmQgZm91bmQsIGNyZWF0aW5nIG5ldyBsb2RnZV9tZW1iZXIgcmVjb3JkJyk7txQAAAAAAAC3FAAAAAAAAAEAAAAK",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAMFQAAAAAAALgUAAAAAAAAAAAAAAAA8L8"
				],
				[
					88,
					2,
					"left_delete",
					null,
					"AgAAALsWAAAAAAAAuxYAAAAAAABGAAAACiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnTmV3IGxvZGdlX21lbWJlciBzdGF0ZTonLCAkbmV3U3RhdGUpO7oWAAAAAAAAuhYAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAABFwAAAAAAALsWAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAXGwAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyczsKCnVzZSBBcHBcTW9kZWxzXExvZGdlOwp1c2UgQXBwXE1vZGVsc1xMb2RnZURpZ25pdHk7CnVzZSBBcHBcTW9kZWxzXE1MTlJEaWduaXR5Owp1c2UgQXBwXE1vZGVsc1xNZW1iZXI7CnVzZSBJbGx1bWluYXRlXEh0dHBcUmVxdWVzdDsKdXNlIEluZXJ0aWFcSW5lcnRpYTsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXERCOwp1c2UgQXBwXE1vZGVsc1xMb2RnZU1lbWJlcjsKCmNsYXNzIE1lbWJlckNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleChMb2RnZSAkbG9kZ2UpCiAgICB7CiAgICAgICAgJG1lbWJlcnMgPSAkbG9kZ2UtPm1lbWJlcnMoKQogICAgICAgICAgICAtPndpdGgoWyd1c2VyJywgJ2xvZGdlX2RpZ25pdHknLCAnbWxucl9kaWduaXR5J10pCiAgICAgICAgICAgIC0+Z2V0KCkKICAgICAgICAgICAgLT5tYXAoZnVuY3Rpb24gKCRtZW1iZXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgJ2lkJyA9PiAkbWVtYmVyLT5pZCwKICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAnZmlyc3RfbmFtZScgPT4gJG1lbWJlci0+dXNlci0+Zmlyc3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnbGFzdF9uYW1lJyA9PiAkbWVtYmVyLT51c2VyLT5sYXN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJyA9PiAkbWVtYmVyLT51c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAncm9sZScgPT4gJG1lbWJlci0+dXNlci0+cm9sZSwKICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyA9PiAkbWVtYmVyLT5zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgJ3Byb2ZpbGVfcGhvdG9fdXJsJyA9PiAkbWVtYmVyLT51c2VyLT5wcm9maWxlX3Bob3RvX3VybCwKICAgICAgICAgICAgICAgICAgICAnbG9kZ2VfZGlnbml0eScgPT4gJG1lbWJlci0+bG9kZ2VfZGlnbml0eSwKICAgICAgICAgICAgICAgICAgICAnbWxucl9kaWduaXR5JyA9PiAkbWVtYmVyLT5tbG5yX2RpZ25pdHksCiAgICAgICAgICAgICAgICAgICAgJ21hc29uaWNfZmlsZScgPT4gJG1lbWJlci0+bWFzb25pY19maWxlLAogICAgICAgICAgICAgICAgICAgICdhcHByZW50aWNlX2RhdGUnID0+ICRtZW1iZXItPmFwcHJlbnRpY2VfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAnYXBwcmVudGljZV9vYXRoJyA9PiAkbWVtYmVyLT5hcHByZW50aWNlX29hdGgsCiAgICAgICAgICAgICAgICAgICAgJ2ZlbGxvd2NyYWZ0X2RhdGUnID0+ICRtZW1iZXItPmZlbGxvd2NyYWZ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgJ2ZlbGxvd2NyYWZ0X29hdGgnID0+ICRtZW1iZXItPmZlbGxvd2NyYWZ0X29hdGgsCiAgICAgICAgICAgICAgICAgICAgJ21hc3Rlcl9kYXRlJyA9PiAkbWVtYmVyLT5tYXN0ZXJfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAnbWFzdGVyX29hdGgnID0+ICRtZW1iZXItPm1hc3Rlcl9vYXRoLAogICAgICAgICAgICAgICAgICAgICdtbG5yX3JlcXVlc3QnID0+ICRtZW1iZXItPm1sbnJfcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAnaXNfYWN0aXZlJyA9PiAkbWVtYmVyLT5pc19hY3RpdmUsCiAgICAgICAgICAgICAgICAgICAgJ2JpcnRoX2RhdGUnID0+ICRtZW1iZXItPmJpcnRoX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgJ2JpcnRoX3BsYWNlJyA9PiAkbWVtYmVyLT5iaXJ0aF9wbGFjZSwKICAgICAgICAgICAgICAgICAgICAncHJvZmVzc2lvbicgPT4gJG1lbWJlci0+cHJvZmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAnYWRkcmVzcycgPT4gJG1lbWJlci0+YWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAncGhvbmUnID0+ICRtZW1iZXItPnBob25lLAogICAgICAgICAgICAgICAgICAgICd3b3JrcGxhY2UnID0+ICRtZW1iZXItPndvcmtwbGFjZSwKICAgICAgICAgICAgICAgICAgICAncG9zaXRpb24nID0+ICRtZW1iZXItPnBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICdjb21tZW50cycgPT4gJG1lbWJlci0+Y29tbWVudHMsCiAgICAgICAgICAgICAgICAgICAgJ2Rpc3BlbnNhJyA9PiAkbWVtYmVyLT5kaXNwZW5zYSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdMb2RnZS9NZW1iZXJzJywgWwogICAgICAgICAgICAnbG9kZ2UnID0+ICRsb2RnZSwKICAgICAgICAgICAgJ21lbWJlcnMnID0+ICRtZW1iZXJzLAogICAgICAgICAgICAnbG9kZ2VEaWduaXRpZXMnID0+IExvZGdlRGlnbml0eTo6YWxsKCksCiAgICAgICAgICAgICdtbG5yRGlnbml0aWVzJyA9PiBNTE5SRGlnbml0eTo6YWxsKCksCiAgICAgICAgXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZURpZ25pdGllcyhSZXF1ZXN0ICRyZXF1ZXN0LCBNZW1iZXIgJG1lbWJlcikKICAgIHsKICAgICAgICAkcmVxdWVzdC0+dmFsaWRhdGUoWwogICAgICAgICAgICAnbG9kZ2VfZGlnbml0eV9pZCcgPT4gJ251bGxhYmxlfGV4aXN0czpsb2RnZV9kaWduaXRpZXMsaWQnLAogICAgICAgICAgICAnbWxucl9kaWduaXR5X2lkJyA9PiAnbnVsbGFibGV8ZXhpc3RzOm1sbnJfZGlnbml0aWVzLGlkJywKICAgICAgICBdKTsKCiAgICAgICAgJG1lbWJlci0+dXBkYXRlKFsKICAgICAgICAgICAgJ2xvZGdlX2RpZ25pdHlfaWQnID0+ICRyZXF1ZXN0LT5sb2RnZV9kaWduaXR5X2lkLAogICAgICAgICAgICAnbWxucl9kaWduaXR5X2lkJyA9PiAkcmVxdWVzdC0+bWxucl9kaWduaXR5X2lkLAogICAgICAgIF0pOwoKICAgICAgICByZXR1cm4gYmFjaygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoUmVxdWVzdCAkcmVxdWVzdCwgTWVtYmVyICRtZW1iZXIpCiAgICB7CiAgICAgICAgJHZhbGlkYXRlZCA9ICRyZXF1ZXN0LT52YWxpZGF0ZShbCiAgICAgICAgICAgICdtYXNvbmljX2ZpbGUnID0+ICdudWxsYWJsZXxib29sZWFuJywKICAgICAgICAgICAgJ2FwcHJlbnRpY2VfZGF0ZScgPT4gJ251bGxhYmxlfGRhdGUnLAogICAgICAgICAgICAnYXBwcmVudGljZV9vYXRoJyA9PiAnbnVsbGFibGV8Ym9vbGVhbicsCiAgICAgICAgICAgICdmZWxsb3djcmFmdF9kYXRlJyA9PiAnbnVsbGFibGV8ZGF0ZScsCiAgICAgICAgICAgICdmZWxsb3djcmFmdF9vYXRoJyA9PiAnbnVsbGFibGV8Ym9vbGVhbicsCiAgICAgICAgICAgICdtYXN0ZXJfZGF0ZScgPT4gJ251bGxhYmxlfGRhdGUnLAogICAgICAgICAgICAnbWFzdGVyX29hdGgnID0+ICdudWxsYWJsZXxib29sZWFuJywKICAgICAgICAgICAgJ21sbnJfcmVxdWVzdF9kYXRlJyA9PiAnbnVsbGFibGV8c3RyaW5nfGluOm5vbmUsc2ltcGF0aWFudCxhZGV6aXVuZScsCiAgICAgICAgICAgICdsb2RnZV9kaWduaXR5X2lkJyA9PiAnbnVsbGFibGV8ZXhpc3RzOmxvZGdlX2RpZ25pdGllcyxpZCcsCiAgICAgICAgICAgICdtbG5yX2RpZ25pdHlfaWQnID0+ICdudWxsYWJsZXxleGlzdHM6bWxucl9kaWduaXRpZXMsaWQnLAogICAgICAgICAgICAnZmlyc3RfbmFtZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2xhc3RfbmFtZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ3Byb2Zlc3Npb24nID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdiaXJ0aF9wbGFjZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2FkZHJlc3MnID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdwaG9uZScgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2VtYWlsJyA9PiAnbnVsbGFibGV8ZW1haWx8bWF4OjI1NScsCiAgICAgICAgICAgICd3b3JrcGxhY2UnID0+ICdudWxsYWJsZXxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdwb3NpdGlvbicgPT4gJ251bGxhYmxlfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2JpcnRoX2RhdGUnID0+ICdudWxsYWJsZXxkYXRlJywKICAgICAgICAgICAgJ2lzX2FjdGl2ZScgPT4gJ251bGxhYmxlfGJvb2xlYW4nLAogICAgICAgIF0pOwoKICAgICAgICB0cnkgewogICAgICAgICAgICBEQjo6YmVnaW5UcmFuc2FjdGlvbigpOwoKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbG9kZ2VfZGlnbml0eV9pZCBpcyBwcmVzZW50IGluIHRoZSByZXF1ZXN0IGRhdGEKICAgICAgICAgICAgaWYgKG9iamVjdF9rZXlfZXhpc3RzKCdsb2RnZV9kaWduaXR5X2lkJywgJHJlcXVlc3QtPmFsbCgpKSkgewogICAgICAgICAgICAgICAgLy8gRmlyc3QsIGdldCB0aGUgY3VycmVudCBzdGF0ZQogICAgICAgICAgICAgICAgJGN1cnJlbnRTdGF0ZSA9IERCOjpzZWxlY3QoIgogICAgICAgICAgICAgICAgICAgIFNFTEVDVCAqIEZST00gbG9kZ2VfbWVtYmVycyAKICAgICAgICAgICAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPyBBTkQgbG9kZ2VfaWQgPSA/CiAgICAgICAgICAgICAgICAiLCBbJG1lbWJlci0+dXNlcl9pZCwgJG1lbWJlci0+bG9kZ2VfaWRdKTsKCiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdXNpbmcgcmF3IFNRTAogICAgICAgICAgICAgICAgJHJlc3VsdCA9IERCOjpzdGF0ZW1lbnQoIgogICAgICAgICAgICAgICAgICAgIFVQREFURSBsb2RnZV9tZW1iZXJzIAogICAgICAgICAgICAgICAgICAgIFNFVCBsb2RnZV9kaWduaXR5X2lkID0gPywgCiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRfYXQgPSBOT1coKSAKICAgICAgICAgICAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPyBBTkQgbG9kZ2VfaWQgPSA/CiAgICAgICAgICAgICAgICAiLCBbJHJlcXVlc3QtPmxvZGdlX2RpZ25pdHlfaWQsICRtZW1iZXItPnVzZXJfaWQsICRtZW1iZXItPmxvZGdlX2lkXSk7CgogICAgICAgICAgICAgICAgLy8gVmVyaWZ5IHRoZSB1cGRhdGUKICAgICAgICAgICAgICAgICR1cGRhdGVkU3RhdGUgPSBEQjo6c2VsZWN0KCIKICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIGxvZGdlX21lbWJlcnMgCiAgICAgICAgICAgICAgICAgICAgV0hFUkUgdXNlcl9pZCA9ID8gQU5EIGxvZGdlX2lkID0gPwogICAgICAgICAgICAgICAgIiwgWyRtZW1iZXItPnVzZXJfaWQsICRtZW1iZXItPmxvZGdlX2lkXSk7CgogICAgICAgICAgICAgICAgLy8gSWYgbm8gcmVjb3JkIHdhcyB1cGRhdGVkLCBjcmVhdGUgb25lCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHVwZGF0ZWRTdGF0ZSkpIHsKICAgICAgICAgICAgICAgICAgICBEQjo6c3RhdGVtZW50KCIKICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gbG9kZ2VfbWVtYmVycyAodXNlcl9pZCwgbG9kZ2VfaWQsIGxvZGdlX2RpZ25pdHlfaWQsIGNyZWF0ZWRfYXQsIHVwZGF0ZWRfYXQpCiAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPywgTk9XKCksIE5PVygpKQogICAgICAgICAgICAgICAgICAgICIsIFskbWVtYmVyLT51c2VyX2lkLCAkbWVtYmVyLT5sb2RnZV9pZCwgJHJlcXVlc3QtPmxvZGdlX2RpZ25pdHlfaWRdKTsKCiAgICAgICAgICAgICAgICAgICAgJG5ld1N0YXRlID0gREI6OnNlbGVjdCgiCiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAqIEZST00gbG9kZ2VfbWVtYmVycyAKICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgdXNlcl9pZCA9ID8gQU5EIGxvZGdlX2lkID0gPwogICAgICAgICAgICAgICAgICAgICIsIFskbWVtYmVyLT51c2VyX2lkLCAkbWVtYmVyLT5sb2RnZV9pZF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBVcGRhdGUgb3RoZXIgZmllbGRzCiAgICAgICAgICAgICRvdGhlckZpZWxkcyA9IGFycmF5X2RpZmZfa2V5KCR2YWxpZGF0ZWQsIFsnbG9kZ2VfZGlnbml0eV9pZCcgPT4gbnVsbF0pOwogICAgICAgICAgICBpZiAoIWVtcHR5KCRvdGhlckZpZWxkcykpIHsKICAgICAgICAgICAgICAgICRtZW1iZXItPmZpbGwoJG90aGVyRmllbGRzKTsKICAgICAgICAgICAgICAgICRtZW1iZXItPnNhdmUoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgREI6OmNvbW1pdCgpOwoKICAgICAgICAgICAgLy8gSWYgdXNlci1yZWxhdGVkIGZpZWxkcyBhcmUgcHJlc2VudCwgdXBkYXRlIHRoZSB1c2VyIGFzIHdlbGwKICAgICAgICAgICAgaWYgKCRtZW1iZXItPnVzZXIgJiYgKCRyZXF1ZXN0LT5oYXMoJ2ZpcnN0X25hbWUnKSB8fCAkcmVxdWVzdC0+aGFzKCdsYXN0X25hbWUnKSB8fCAkcmVxdWVzdC0+aGFzKCdlbWFpbCcpKSkgewogICAgICAgICAgICAgICAgJHVzZXJEYXRhID0gYXJyYXlfaW50ZXJzZWN0X2tleSgkdmFsaWRhdGVkLCBhcnJheV9mbGlwKFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnLCAnZW1haWwnXSkpOwogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkdXNlckRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgJG1lbWJlci0+dXNlci0+dXBkYXRlKCR1c2VyRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgXExvZzo6aW5mbygnVXBkYXRlZCB1c2VyOicsICRtZW1iZXItPnVzZXItPnRvQXJyYXkoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBiYWNrKCk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICBEQjo6cm9sbEJhY2soKTsKICAgICAgICAgICAgXExvZzo6ZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIG1lbWJlcjonLCBbCiAgICAgICAgICAgICAgICAnZXJyb3InID0+ICRlLT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAndHJhY2UnID0+ICRlLT5nZXRUcmFjZUFzU3RyaW5nKCkKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgIH0KICAgIH0KfSAAAAAAAAAAABcbAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAmxkAAAAAAAChGQAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"contents": "<script setup>\nimport { computed, ref, watch, onMounted, onUnmounted, nextTick } from 'vue';\nimport axios from 'axios';\nimport { usePage, router } from '@inertiajs/vue3';\nimport Modal from '@/Components/Modal.vue';\nimport Echo from 'laravel-echo';\n\nconst emit = defineEmits(['poll-updated', 'refresh-events']);\n\nconst props = defineProps({\n    events: {\n        type: Array,\n        required: true,\n        default: () => []\n    }\n});\n\nconst page = usePage();\nconst user = page.props.auth.user;\n\n// Create a reactive reference for events\nconst localEvents = ref([...props.events]);\n\n// Initialize Echo\nlet echo = null;\n\n// Watch for changes in props.events\nwatch(() => props.events, (newEvents) => {\n    if (Array.isArray(newEvents) && newEvents.length > 0) {\n        // Merge new events with existing ones, avoiding duplicates\n        const existingIds = new Set(localEvents.value.map(e => e.id));\n        const uniqueNewEvents = newEvents.filter(e => !existingIds.has(e.id));\n        localEvents.value = [...localEvents.value, ...uniqueNewEvents];\n    }\n}, { deep: true });\n\n// Update nextEvent computed to use localEvents instead of props\nconst nextEvent = computed(() => {\n    if (!localEvents.value?.length) {\n        return null;\n    }\n    \n    const now = new Date();\n    \n    const filteredEvents = localEvents.value.filter(post => {\n        if (!post?.start_date) {\n            return false;\n        }\n        const eventDate = new Date(post.start_date);\n        return eventDate > now;\n    });\n    \n    if (filteredEvents.length === 0) {\n        return null;\n    }\n    \n    const sortedEvents = filteredEvents.sort((a, b) => {\n        if (!a?.start_date || !b?.start_date) return 0;\n        return new Date(a.start_date) - new Date(b.start_date);\n    });\n    \n    const nextEvent = sortedEvents[0];\n    return nextEvent;\n});\n\nconst initializeEcho3 = () => {\n    try {\n        // Subscribe to the posts channel\n        const channel = window.Echo.channel('posts');\n        \n        // Set up event listeners\n        channel.listen('PollVoteUpdated', (data) => {\n            if (data.poll) {\n                handlePollUpdate(data);\n            }\n        });\n\n        // Also listen for the event with the dot prefix\n        channel.listen('.PollVoteUpdated', (data) => {\n            if (data.poll) {\n                handlePollUpdate(data);\n            }\n        });\n\n        // Listen for poll-updated events from the Feed component\n        channel.listen('poll-updated', (data) => {\n            if (data.pollId && data.pollData) {\n                handlePollUpdate({\n                    poll: {\n                        id: data.pollId,\n                        ...data.pollData\n                    }\n                });\n            }\n        });\n\n        // Listen for EventCreated to update events in real time\n        channel.listen('.EventCreated', (data) => {\n            if (data && data.post && data.post.event) {\n                // Check if event already exists\n                const exists = localEvents.value.some(ev => \n                    ev.id === data.post.event.id || \n                    ev.post_id === data.post.id\n                );\n                \n                if (!exists) {\n                    // Format the event as needed for your sidebar (match the structure)\n                    const newEvent = {\n                        id: data.post.event.id,\n                        post_id: data.post.id,\n                        title: data.post.event.title,\n                        description: data.post.event.description,\n                        start_date: data.post.event.start_date,\n                        end_date: data.post.event.end_date,\n                        location: data.post.event.location,\n                        creator: data.post.author ? {\n                            name: `${data.post.author.first_name} ${data.post.author.last_name}`\n                        } : null,\n                        file_path: data.post.file_path,\n                        file_name: data.post.file_name,\n                        file_size: data.post.file_size,\n                        poll: data.post.event.poll ? {\n                            id: data.post.event.poll.id,\n                            question: data.post.event.poll.question,\n                            options: data.post.event.poll.options,\n                            is_multiple_choice: data.post.event.poll.is_multiple_choice,\n                            votes: data.post.event.poll.votes || [],\n                            vote_counts: data.post.event.poll.vote_counts || {}\n                        } : null\n                    };\n                    \n                    // Add and sort by start_date\n                    const updatedEvents = [...localEvents.value, newEvent].sort((a, b) => {\n                        const dateA = new Date(a.start_date);\n                        const dateB = new Date(b.start_date);\n                        return dateA - dateB;\n                    });\n                    \n                    localEvents.value = updatedEvents;\n                }\n            } else {\n                console.log('[RightSidebar] Invalid event data received:', data);\n            }\n        });\n\n        // Listen for EventUpdated to update events in real time\n        channel.listen('EventUpdated', (data) => {\n            if (data && data.post && data.post.event) {\n                // Get the event ID from the post's event object\n                const eventId = data.post.event.id;\n                const postId = data.post.id;\n\n                // Find the event in localEvents by post ID first\n                const eventIndex = localEvents.value.findIndex(ev => {\n                    // Try to match by post ID first\n                    if (ev.post_id === postId) {\n                        return true;\n                    }\n                    // Then try to match by event ID\n                    if (ev.id === eventId || ev.id === postId) {\n                        return true;\n                    }\n                    return false;\n                });\n\n                // Get the existing event data if found\n                const existingEvent = eventIndex !== -1 ? localEvents.value[eventIndex] : null;\n\n                // Handle poll data if it exists\n                let pollData = null;\n                if (data.post.event.poll) {\n                    const existingPoll = existingEvent?.poll;\n                    const newPoll = data.post.event.poll;\n\n                    // Create a mapping of old options to new options\n                    const optionMapping = {};\n                    if (existingPoll?.options && newPoll.options) {\n                        existingPoll.options.forEach((oldOption, index) => {\n                            if (newPoll.options[index]) {\n                                optionMapping[oldOption] = newPoll.options[index];\n                            }\n                        });\n                    }\n\n                    // Map vote counts to new options\n                    const newVoteCounts = {};\n                    if (existingPoll?.vote_counts) {\n                        Object.entries(existingPoll.vote_counts).forEach(([oldOption, count]) => {\n                            const newOption = optionMapping[oldOption];\n                            if (newOption) {\n                                newVoteCounts[newOption] = count;\n                            }\n                        });\n                    }\n\n                    // Map votes to new options\n                    const newVotes = existingPoll?.votes?.map(vote => ({\n                        ...vote,\n                        selected_options: vote.selected_options.map(oldOption => \n                            optionMapping[oldOption] || oldOption\n                        )\n                    })) || [];\n\n                    pollData = {\n                        id: newPoll.id,\n                        question: newPoll.question,\n                        options: newPoll.options,\n                        is_multiple_choice: newPoll.is_multiple_choice,\n                        votes: newVotes,\n                        vote_counts: newVoteCounts\n                    };\n                }\n\n                // Format the updated event\n                const updatedEvent = {\n                    id: eventId,\n                    post_id: postId,\n                    title: data.post.event.title,\n                    description: data.post.event.description,\n                    start_date: data.post.event.start_date,\n                    end_date: data.post.event.end_date,\n                    location: data.post.event.location,\n                    creator: data.post.author ? {\n                        name: `${data.post.author.first_name} ${data.post.author.last_name}`\n                    } : null,\n                    file_path: data.post.file_path,\n                    file_name: data.post.file_name,\n                    file_size: data.post.file_size,\n                    poll: pollData\n                };\n                \n                if (eventIndex !== -1) {\n                    // Update the event in the array\n                    const updatedEvents = [...localEvents.value];\n                    updatedEvents[eventIndex] = updatedEvent;\n                    \n                    // Sort by start_date\n                    updatedEvents.sort((a, b) => {\n                        const dateA = new Date(a.start_date);\n                        const dateB = new Date(b.start_date);\n                        return dateA - dateB;\n                    });\n                    \n                    // Update localEvents with the new array\n                    localEvents.value = updatedEvents;\n                    \n                    // Force a reactive update\n                    nextTick(() => {\n                        localEvents.value = [...localEvents.value];\n                    });\n                } else {\n                    // If event not found, add it to the array\n                    const updatedEvents = [...localEvents.value, updatedEvent].sort((a, b) => {\n                        const dateA = new Date(a.start_date);\n                        const dateB = new Date(b.start_date);\n                        return dateA - dateB;\n                    });\n                    \n                    localEvents.value = updatedEvents;\n                }\n            }\n        });\n    } catch (error) {\n        console.error('[RightSidebar] Error initializing Echo:', error);\n    }\n}\n\n// Helper function to handle poll updates\nconst handlePollUpdate = (data) => {\n    if (data.poll) {\n        const pollId = data.poll.id;\n        \n        // Find the event that contains this poll\n        const eventIndex = localEvents.value.findIndex(event => {\n            return event.poll && event.poll.id === pollId;\n        });\n        \n        if (eventIndex !== -1) {\n            // Create a new array to trigger reactivity\n            const updatedEvents = [...localEvents.value];\n            const currentEvent = updatedEvents[eventIndex];\n            \n            // Calculate vote counts\n            const voteCounts = {};\n            if (data.poll.options) {\n                data.poll.options.forEach(option => {\n                    // Use the vote counts from the data if available, otherwise calculate from votes\n                    if (data.poll.vote_counts && data.poll.vote_counts[option] !== undefined) {\n                        voteCounts[option] = data.poll.vote_counts[option];\n                    } else if (data.poll.votes) {\n                        voteCounts[option] = data.poll.votes.filter(vote => \n                            vote.selected_options.includes(option)\n                        ).length;\n                    } else {\n                        // If no new data, keep existing vote count\n                        voteCounts[option] = currentEvent.poll.vote_counts[option] || 0;\n                    }\n                });\n            }\n            \n            // Update the poll data within the event\n            const updatedPoll = {\n                ...currentEvent.poll, // Keep existing poll data\n                ...data.poll, // Override with new data\n                votes: data.poll.votes || currentEvent.poll.votes || [],\n                vote_counts: voteCounts\n            };\n            \n            // Update the event with the new poll data\n            updatedEvents[eventIndex] = {\n                ...currentEvent,\n                poll: updatedPoll\n            };\n\n            // Update the localEvents ref with a new array to force reactivity\n            localEvents.value = updatedEvents;\n\n            // Force a reactive update\n            nextTick(() => {\n                localEvents.value = [...localEvents.value];\n            });\n\n            // Emit the poll update to the Dashboard\n            emit('poll-updated', {\n                pollId: pollId,\n                pollData: updatedPoll\n            });\n        } else {\n            console.log('[RightSidebar] No event found with poll ID:', pollId);\n            console.log('[RightSidebar] Available events:', localEvents.value);\n        }\n    } else {\n        console.log('[RightSidebar] Invalid poll update data:', data);\n    }\n};\n\nconst handleEventUpdate = ({ postId, postData }) => {\n    console.log('[RightSidebar] Received event-updated event:', { postId, postData });\n    \n    if (!postData?.event) {\n        console.log('[RightSidebar] No event data in post');\n        return;\n    }\n\n    const eventData = postData.event;\n    console.log('[RightSidebar] Processing event update:', { eventData, postId });\n\n    // Find the event in localEvents\n    const eventIndex = localEvents.value.findIndex(event => {\n        // Compare both event.id and post_id to ensure correct matching\n        const matches = event.id === eventData.id || event.id === postId;\n        console.log('[RightSidebar] Checking event match:', { event, postId, eventId: eventData.id, matches });\n        return matches;\n    });\n\n    console.log('[RightSidebar] Found event at index:', eventIndex);\n\n    if (eventIndex !== -1) {\n        // Get the current event to preserve its data\n        const currentEvent = localEvents.value[eventIndex];\n        \n        // Update the existing event while preserving poll data\n        const updatedEvent = {\n            ...eventData,\n            // Preserve any additional fields from the current event\n            creator: currentEvent.creator,\n            file_name: postData.file_name,\n            file_path: postData.file_path,\n            file_size: postData.file_size,\n            // Preserve poll data if it exists\n            poll: eventData.poll ? {\n                ...eventData.poll,\n                // Preserve existing votes and vote counts if not provided in the update\n                votes: eventData.poll.votes || currentEvent.poll?.votes || [],\n                vote_counts: eventData.poll.vote_counts || currentEvent.poll?.vote_counts || {}\n            } : currentEvent.poll\n        };\n        \n        // Create a new array with the updated event\n        const updatedEvents = [...localEvents.value];\n        updatedEvents[eventIndex] = updatedEvent;\n        \n        // Sort by start_date\n        updatedEvents.sort((a, b) => {\n            const dateA = new Date(a.start_date);\n            const dateB = new Date(b.start_date);\n            return dateA - dateB;\n        });\n        \n        localEvents.value = updatedEvents;\n        \n        // Force a reactive update\n        nextTick(() => {\n            localEvents.value = [...localEvents.value];\n        });\n    } else {\n        console.log('[RightSidebar] Event not found in localEvents');\n        // If the event is not found, add it to the list\n        const newEvent = {\n            ...eventData,\n            creator: postData.author,\n            file_name: postData.file_name,\n            file_path: postData.file_path,\n            file_size: postData.file_size,\n            // Ensure poll data is properly structured for new events\n            poll: eventData.poll ? {\n                ...eventData.poll,\n                votes: eventData.poll.votes || [],\n                vote_counts: eventData.poll.vote_counts || {}\n            } : null\n        };\n        \n        // Add the new event and sort\n        const updatedEvents = [...localEvents.value, newEvent];\n        updatedEvents.sort((a, b) => {\n            const dateA = new Date(a.start_date);\n            const dateB = new Date(b.start_date);\n            return dateA - dateB;\n        });\n        \n        localEvents.value = updatedEvents;\n    }\n};\n\n// Setup Echo and event listeners\nonMounted(() => {\n    if (Array.isArray(props.events) && props.events.length > 0) {\n        localEvents.value = [...props.events];\n    }\n    \n    // Listen for custom poll-updated events\n    window.addEventListener('poll-updated', (event) => {\n        if (event.detail.pollId && event.detail.pollData) {\n            handlePollUpdate({\n                poll: {\n                    id: event.detail.pollId,\n                    ...event.detail.pollData\n                }\n            });\n        }\n    });\n\n    // Listen for custom event-updated events\n    window.addEventListener('event-updated', (event) => {\n        handleEventUpdate(event.detail);\n    });\n    \n    // Initialize Echo\n    const waitForEcho = setInterval(() => {\n        if (typeof window.Echo !== 'undefined') {\n            clearInterval(waitForEcho);\n            try {\n                initializeEcho3();\n            } catch (error) {\n                console.error('[RightSidebar] Error initializing Echo:', error);\n            }\n        }\n    }, 100); // check every 100ms\n});\n\n// Cleanup on unmount\nonUnmounted(() => {\n    // Remove custom event listeners\n    window.removeEventListener('poll-updated', () => {});\n    window.removeEventListener('event-updated', (event) => {\n        handleEventUpdate(event.detail);\n    });\n    \n    if (echo) {\n        try {\n            const channel = echo.channel('posts');\n            if (channel) {\n                channel.stopListening('PollVoteUpdated');\n                echo.leave('posts');\n            }\n        } catch (error) {\n            // Silent error handling\n        }\n    }\n});\n\n// Format file size function\nconst formatFileSize = (bytes) => {\n    if (bytes === 0) return '0 Bytes';\n    const k = 1024;\n    const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n    const i = Math.floor(Math.log(bytes) / Math.log(k));\n    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n};\n\nconst showVotersModal = ref(false);\nconst voters = ref({});\n\nconst handleVote = async (poll, selectedOptions) => {\n    try {\n        // Ensure selectedOptions is always an array\n        let optionsToSubmit = Array.isArray(selectedOptions) ? selectedOptions : [selectedOptions];\n        \n        // Filter out any undefined or null values\n        optionsToSubmit = optionsToSubmit.filter(option => option !== undefined && option !== null);\n        \n        const response = await axios.post(route('member.polls.vote', { poll: poll.id }), {\n            selected_options: optionsToSubmit\n        }, {\n            headers: {\n                'Content-Type': 'application/json',\n                'Accept': 'application/json',\n                'X-Inertia': true\n            }\n        });\n        \n        if (response?.data?.success) {\n            // Find the event that contains this poll\n            const eventIndex = localEvents.value.findIndex(event => \n                event.poll && event.poll.id === poll.id\n            );\n            \n            if (eventIndex !== -1) {\n                // Create a new array to trigger reactivity\n                const updatedEvents = [...localEvents.value];\n                \n                // Update the poll data within the event\n                updatedEvents[eventIndex] = {\n                    ...updatedEvents[eventIndex],\n                    poll: response.data.poll\n                };\n                \n                // Update the localEvents ref with a new array to force reactivity\n                localEvents.value = updatedEvents;\n            }\n            \n            // Emit the poll update to the Dashboard\n            emit('poll-updated', {\n                pollId: poll.id,\n                pollData: response.data.poll\n            });\n            \n            // Emit an event to request a refresh of the events data\n            emit('refresh-events');\n        } else {\n            // Show error message if the server returns success: false\n            alert(response?.data?.message || 'Failed to submit vote');\n        }\n    } catch (error) {\n        if (error.response?.status === 401) {\n            router.visit(route('login'));\n        } else {\n            // Show user-friendly error message\n            const errorMessage = error.response?.data?.message || \n                               error.response?.data?.error || \n                               'An error occurred while submitting your vote. Please try again.';\n            alert(errorMessage);\n        }\n    }\n};\n\nconst getSelectedOptions = (poll) => {\n    if (!poll.votes) return [];\n    const userVote = poll.votes.find(vote => vote.user_id === user.id);\n    return userVote ? userVote.selected_options : [];\n};\n\nconst isOptionSelected = (poll, option) => {\n    const selectedOptions = getSelectedOptions(poll);\n    return selectedOptions.includes(option);\n};\n\nconst handleCheckboxChange = (poll, option, isChecked) => {\n    const currentSelected = getSelectedOptions(poll);\n    let newSelected;\n    \n    if (poll.is_multiple_choice) {\n        if (isChecked) {\n            newSelected = [...currentSelected, option];\n        } else {\n            newSelected = currentSelected.filter(o => o !== option);\n        }\n    } else {\n        newSelected = isChecked ? [option] : [];\n    }\n    \n    handleVote(poll, newSelected);\n};\n\nconst showVoters = async (poll) => {\n    try {\n        const allVoters = {};\n        for (const option of poll.options) {\n            const response = await axios.get(route('member.polls.voters', { poll: poll.id, option }), {\n                headers: {\n                    'Accept': 'application/json',\n                    'Content-Type': 'application/json'\n                }\n            });\n            if (response.data?.voters) {\n                allVoters[option] = response.data.voters;\n            }\n        }\n        voters.value = allVoters;\n        showVotersModal.value = true;\n    } catch (error) {\n        if (error.response?.status === 419) {\n            window.location.reload();\n        } else {\n            alert('Failed to fetch voters list. Please try again.');\n        }\n    }\n};\n</script>\n\n<template>\n    <div class=\"fixed right-0 top-14 w-[360px] h-[calc(100vh-3.5rem)] overflow-y-auto p-4 z-3\">\n        <div class=\"bg-white rounded-lg shadow p-4\">\n            <h2 class=\"text-lg font-semibold mb-4\">Următorul Eveniment</h2>\n            <div v-if=\"nextEvent\" class=\"space-y-4\">\n                <div class=\"bg-blue-50 rounded-lg p-4\">\n                    <div class=\"flex items-center space-x-2 text-blue-700\">\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n                            <path fill-rule=\"evenodd\" d=\"M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z\" clip-rule=\"evenodd\" />\n                        </svg>\n                        <span class=\"font-medium\">{{ nextEvent.title }}</span>\n                    </div>\n                    <div class=\"mt-2 text-sm text-blue-600\">\n                        <div class=\"flex items-center space-x-2\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n                                <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z\" clip-rule=\"evenodd\" />\n                            </svg>\n                            <span>{{ new Date(nextEvent.start_date).toLocaleDateString('ro-RO', { \n                                weekday: 'long', \n                                year: 'numeric', \n                                month: 'long', \n                                day: 'numeric',\n                                hour: '2-digit',\n                                minute: '2-digit'\n                            }) }}</span>\n                    </div>\n                        <div v-if=\"nextEvent.location\" class=\"flex items-center space-x-2 mt-1\">\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n                                <path fill-rule=\"evenodd\" d=\"M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z\" clip-rule=\"evenodd\" />\n                            </svg>\n                            <span>{{ nextEvent.location }}</span>\n                        </div>\n                        <div v-if=\"nextEvent.description\" class=\"mt-2 text-blue-700\">\n                            {{ nextEvent.description }}\n                        </div>\n\n                        <!-- File Display for Events -->\n                        <div v-if=\"nextEvent.file_path\" class=\"mt-4\">\n                            <a :href=\"route('files.download', nextEvent.id)\" \n                               class=\"flex items-center text-blue-600 hover:text-blue-800\">\n                                <svg class=\"w-6 h-6 mr-2\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                                    <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n                                </svg>\n                                {{ nextEvent.file_name }}\n                                <span class=\"ml-2 text-sm text-gray-500\">({{ formatFileSize(nextEvent.file_size) }})</span>\n                            </a>\n                    </div>\n\n                    <!-- Poll Section -->\n                        <div v-if=\"nextEvent.poll\" class=\"mt-4 border-t border-blue-200 pt-4\">\n                            <div class=\"font-medium text-blue-700 mb-3\">{{ nextEvent.poll.question }}</div>\n                        <div class=\"space-y-3\">\n                                <div v-for=\"(option, index) in nextEvent.poll.options\" :key=\"index\" \n                                 class=\"relative group\">\n                                <div class=\"flex items-center space-x-3\">\n                                    <input\n                                        :type=\"nextEvent.poll.is_multiple_choice ? 'checkbox' : 'radio'\"\n                                        :name=\"'poll_' + nextEvent.poll.id\"\n                                        :value=\"option\"\n                                        :checked=\"isOptionSelected(nextEvent.poll, option)\"\n                                        @change=\"(e) => handleCheckboxChange(nextEvent.poll, option, e.target.checked)\"\n                                        class=\"rounded-full border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50\"\n                                    />\n                                    <div class=\"flex-1\">\n                                        <div class=\"flex justify-between items-center mb-1\">\n                                            <span class=\"text-sm font-medium text-gray-700\">{{ option }}</span>\n                                            <span class=\"text-xs text-gray-500\">\n                                                {{ nextEvent.poll.vote_counts[option] || 0 }} votes \n                                                <span>({{ Math.round((nextEvent.poll.vote_counts[option] / Object.values(nextEvent.poll.vote_counts).reduce((a, b) => a + b, 0)) * 100) || 0 }}%)</span>\n                                            </span>\n                                        </div>\n                                        <div class=\"h-2 bg-gray-200 rounded-full overflow-hidden\">\n                                            <div class=\"h-full bg-indigo-500 transition-all duration-300\" \n                                                     :style=\"{ width: `${Math.round((nextEvent.poll.vote_counts[option] / Object.values(nextEvent.poll.vote_counts).reduce((a, b) => a + b, 0)) * 100) || 0}%` }\">\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"mt-3 flex justify-between items-center\">\n                            <span class=\"text-xs text-gray-500\">\n                                    {{ Object.values(nextEvent.poll.vote_counts).reduce((a, b) => a + b, 0) }} votes\n                            </span>\n                                <button \n                                    @click=\"showVoters(nextEvent.poll)\"\n                                    class=\"text-xs text-blue-600 hover:text-blue-800\"\n                                >\n                                    View voters\n                                </button>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div v-else class=\"text-center py-8\">\n                <div class=\"text-gray-500 mb-4\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-12 w-12 mx-auto\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n                        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n                    </svg>\n                </div>\n                <h3 class=\"text-sm font-medium text-gray-900 mb-2\">Nu există evenimente viitoare</h3>\n                <p class=\"text-xs text-gray-500\">Când vor fi create evenimente noi, acestea vor apărea aici.</p>\n            </div>\n        </div>\n\n        <!-- Voters Modal -->\n        <div v-if=\"showVotersModal\" class=\"fixed inset-0 z-[9999] overflow-y-auto\" aria-labelledby=\"modal-title\" role=\"dialog\" aria-modal=\"true\">\n            <div class=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n                <div class=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\" aria-hidden=\"true\"></div>\n                <span class=\"hidden sm:inline-block sm:align-middle sm:h-screen\" aria-hidden=\"true\">&#8203;</span>\n                <div class=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full\">\n                    <div class=\"p-6\">\n                        <h2 class=\"text-lg font-medium text-gray-900 mb-4\">\n                            Poll Voters\n                        </h2>\n                        <div class=\"space-y-6\">\n                            <div v-for=\"(optionVoters, option) in voters\" :key=\"option\" class=\"space-y-2\">\n                                <h3 class=\"text-sm font-medium text-gray-700\">{{ option }}</h3>\n                                <div class=\"space-y-2\">\n                                    <div v-for=\"voter in optionVoters\" :key=\"voter.id\" class=\"flex items-center space-x-3\">\n                                        <img \n                                            :src=\"voter.profile_photo_url || `https://ui-avatars.com/api/?name=${encodeURIComponent(voter.first_name + ' ' + voter.last_name)}&background=0D9488&color=fff`\" \n                                            :alt=\"voter.first_name + ' ' + voter.last_name\"\n                                            class=\"h-8 w-8 rounded-full\"\n                                        >\n                                        <span class=\"text-sm text-gray-700\">{{ voter.first_name }} {{ voter.last_name }}</span>\n                                    </div>\n                                    <div v-if=\"optionVoters.length === 0\" class=\"text-sm text-gray-500\">\n                                        No voters yet\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"mt-6 flex justify-end\">\n                            <button \n                                @click=\"showVotersModal = false\"\n                                class=\"px-4 py-2 bg-gray-100 text-gray-700 rounded-md hover:bg-gray-200\"\n                            >\n                                Close\n                            </button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n\n<style>\n::-webkit-scrollbar {\n    width: 8px;\n}\n\n::-webkit-scrollbar-track {\n    background: transparent;\n}\n\n::-webkit-scrollbar-thumb {\n    background: #BCC0C4;\n    border-radius: 4px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background: #A4A7AB;\n}\n\n/* Custom checkbox styling */\n[type=\"checkbox\"] {\n    appearance: none;\n    -webkit-print-color-adjust: exact;\n    display: inline-block;\n    vertical-align: middle;\n    background-origin: border-box;\n    user-select: none;\n    flex-shrink: 0;\n    height: 1rem;\n    width: 1rem;\n    color: rgb(79, 70, 229);\n    background-color: rgb(255, 255, 255);\n    --tw-shadow: 0 0 #0000;\n    padding: 0px;\n    border-color: rgb(209, 213, 219);\n    border-width: 1px;\n    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n    border-radius: 9999px;\n}\n\n[type=\"checkbox\"]:checked {\n    background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n    background-color: currentcolor;\n    background-size: 100% 100%;\n    background-repeat: no-repeat;\n    border-color: transparent;\n    background-position: center center;\n}\n\n[type=\"checkbox\"]:focus {\n    outline: none;\n    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);\n}\n</style> ",
			"settings":
			{
				"buffer_size": 34476,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"paste",
					null,
					"AQAAAAAAAAAAAAAAQlcAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8"
				],
				[
					6,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"BQAAAMAKAAAAAAAAwQoAAAAAAAAAAAAAwQoAAAAAAADJCgAAAAAAAAAAAADJCgAAAAAAAMoKAAAAAAAAAAAAAMoKAAAAAAAA0goAAAAAAAAAAAAAwQoAAAAAAADBCgAAAAAAAAgAAAAgICAgICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADACgAAAAAAAMAKAAAAAAAAAAAAAAAA8L8"
				],
				[
					8,
					1,
					"paste",
					null,
					"AgAAAMIKAAAAAAAACBQAAAAAAAAAAAAACBQAAAAAAAAIFAAAAAAAAAgAAAAgICAgICAgIA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADKCgAAAAAAAMIKAAAAAAAAAAAAAAAAAAA"
				],
				[
					11,
					1,
					"insert",
					{
						"characters": "\t\t"
					},
					"AgAAAMIKAAAAAAAAxgoAAAAAAAAAAAAAxgoAAAAAAADKCgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADCCgAAAAAAAMIKAAAAAAAAAAAAAAAA8L8"
				],
				[
					16,
					1,
					"paste",
					null,
					"AgAAAAAAAAAAAAAAKoUAAAAAAAAAAAAAKoUAAAAAAAAqhQAAAAAAAJZgAAA8c2NyaXB0IHNldHVwPgppbXBvcnQgeyBjb21wdXRlZCwgcmVmLCB3YXRjaCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgbmV4dFRpY2sgfSBmcm9tICd2dWUnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwppbXBvcnQgeyB1c2VQYWdlLCByb3V0ZXIgfSBmcm9tICdAaW5lcnRpYWpzL3Z1ZTMnOwppbXBvcnQgTW9kYWwgZnJvbSAnQC9Db21wb25lbnRzL01vZGFsLnZ1ZSc7CmltcG9ydCBFY2hvIGZyb20gJ2xhcmF2ZWwtZWNobyc7Cgpjb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWydwb2xsLXVwZGF0ZWQnLCAncmVmcmVzaC1ldmVudHMnXSk7Cgpjb25zdCBwcm9wcyA9IGRlZmluZVByb3BzKHsKICAgIGV2ZW50czogewogICAgICAgIHR5cGU6IEFycmF5LAogICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdCiAgICB9Cn0pOwoKY29uc3QgcGFnZSA9IHVzZVBhZ2UoKTsKY29uc3QgdXNlciA9IHBhZ2UucHJvcHMuYXV0aC51c2VyOwoKLy8gQ3JlYXRlIGEgcmVhY3RpdmUgcmVmZXJlbmNlIGZvciBldmVudHMKY29uc3QgbG9jYWxFdmVudHMgPSByZWYoWy4uLnByb3BzLmV2ZW50c10pOwoKLy8gSW5pdGlhbGl6ZSBFY2hvCmxldCBlY2hvID0gbnVsbDsKCi8vIFdhdGNoIGZvciBjaGFuZ2VzIGluIHByb3BzLmV2ZW50cwp3YXRjaCgoKSA9PiBwcm9wcy5ldmVudHMsIChuZXdFdmVudHMpID0+IHsKICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0V2ZW50cykgJiYgbmV3RXZlbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAvLyBNZXJnZSBuZXcgZXZlbnRzIHdpdGggZXhpc3Rpbmcgb25lcywgYXZvaWRpbmcgZHVwbGljYXRlcwogICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChsb2NhbEV2ZW50cy52YWx1ZS5tYXAoZSA9PiBlLmlkKSk7CiAgICAgICAgY29uc3QgdW5pcXVlTmV3RXZlbnRzID0gbmV3RXZlbnRzLmZpbHRlcihlID0+ICFleGlzdGluZ0lkcy5oYXMoZS5pZCkpOwogICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlLCAuLi51bmlxdWVOZXdFdmVudHNdOwogICAgfQp9LCB7IGRlZXA6IHRydWUgfSk7CgovLyBVcGRhdGUgbmV4dEV2ZW50IGNvbXB1dGVkIHRvIHVzZSBsb2NhbEV2ZW50cyBpbnN0ZWFkIG9mIHByb3BzCmNvbnN0IG5leHRFdmVudCA9IGNvbXB1dGVkKCgpID0+IHsKICAgIGlmICghbG9jYWxFdmVudHMudmFsdWU/Lmxlbmd0aCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpOwogICAgCiAgICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbHRlcihwb3N0ID0+IHsKICAgICAgICBpZiAoIXBvc3Q/LnN0YXJ0X2RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb25zdCBldmVudERhdGUgPSBuZXcgRGF0ZShwb3N0LnN0YXJ0X2RhdGUpOwogICAgICAgIHJldHVybiBldmVudERhdGUgPiBub3c7CiAgICB9KTsKICAgIAogICAgaWYgKGZpbHRlcmVkRXZlbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBmaWx0ZXJlZEV2ZW50cy5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgaWYgKCFhPy5zdGFydF9kYXRlIHx8ICFiPy5zdGFydF9kYXRlKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gbmV3IERhdGUoYS5zdGFydF9kYXRlKSAtIG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICB9KTsKICAgIAogICAgY29uc3QgbmV4dEV2ZW50ID0gc29ydGVkRXZlbnRzWzBdOwogICAgcmV0dXJuIG5leHRFdmVudDsKfSk7Cgpjb25zdCBpbml0aWFsaXplRWNobzMgPSAoKSA9PiB7CiAgICB0cnkgewogICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgcG9zdHMgY2hhbm5lbAogICAgICAgIGNvbnN0IGNoYW5uZWwgPSB3aW5kb3cuRWNoby5jaGFubmVsKCdwb3N0cycpOwogICAgICAgIAogICAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnMKICAgICAgICBjaGFubmVsLmxpc3RlbignUG9sbFZvdGVVcGRhdGVkJywgKGRhdGEpID0+IHsKICAgICAgICAgICAgaWYgKGRhdGEucG9sbCkgewogICAgICAgICAgICAgICAgaGFuZGxlUG9sbFVwZGF0ZShkYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBBbHNvIGxpc3RlbiBmb3IgdGhlIGV2ZW50IHdpdGggdGhlIGRvdCBwcmVmaXgKICAgICAgICBjaGFubmVsLmxpc3RlbignLlBvbGxWb3RlVXBkYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhLnBvbGwpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVBvbGxVcGRhdGUoZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gTGlzdGVuIGZvciBwb2xsLXVwZGF0ZWQgZXZlbnRzIGZyb20gdGhlIEZlZWQgY29tcG9uZW50CiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJ3BvbGwtdXBkYXRlZCcsIChkYXRhKSA9PiB7CiAgICAgICAgICAgIGlmIChkYXRhLnBvbGxJZCAmJiBkYXRhLnBvbGxEYXRhKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKHsKICAgICAgICAgICAgICAgICAgICBwb2xsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLnBvbGxJZCwKICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YS5wb2xsRGF0YQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIExpc3RlbiBmb3IgRXZlbnRDcmVhdGVkIHRvIHVwZGF0ZSBldmVudHMgaW4gcmVhbCB0aW1lCiAgICAgICAgY2hhbm5lbC5saXN0ZW4oJy5FdmVudENyZWF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBvc3QgJiYgZGF0YS5wb3N0LmV2ZW50KSB7CiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBldmVudCBhbHJlYWR5IGV4aXN0cwogICAgICAgICAgICAgICAgY29uc3QgZXhpc3RzID0gbG9jYWxFdmVudHMudmFsdWUuc29tZShldiA9PiBldi5pZCA9PT0gZGF0YS5wb3N0LmV2ZW50LmlkKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCFleGlzdHMpIHsKICAgICAgICAgICAgICAgICAgICAvLyBMb2cgdGhlIHJhdyBldmVudCBkYXRhCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IHRoZSBldmVudCBhcyBuZWVkZWQgZm9yIHlvdXIgc2lkZWJhciAobWF0Y2ggdGhlIHN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEucG9zdC5ldmVudC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEucG9zdC5ldmVudC50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEucG9zdC5ldmVudC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGF0ZTogZGF0YS5wb3N0LmV2ZW50LnN0YXJ0X2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9kYXRlOiBkYXRhLnBvc3QuZXZlbnQuZW5kX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBkYXRhLnBvc3QuZXZlbnQubG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3I6IGRhdGEucG9zdC5hdXRob3IgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtkYXRhLnBvc3QuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZGF0YS5wb3N0LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgICAgICB9IDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBkYXRhLnBvc3QuZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IGRhdGEucG9zdC5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZTogZGF0YS5wb3N0LmZpbGVfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9sbDogZGF0YS5wb3N0LmV2ZW50LnBvbGwgPyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5wb3N0LmV2ZW50LnBvbGwuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogZGF0YS5wb3N0LmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBkYXRhLnBvc3QuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlczogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogZGF0YS5wb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhbmQgc29ydCBieSBzdGFydF9kYXRlCiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZSwgbmV3RXZlbnRdLnNvcnQoKGEsIGIpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gdXBkYXRlZEV2ZW50czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbUmlnaHRTaWRlYmFyXSBJbnZhbGlkIGV2ZW50IGRhdGEgcmVjZWl2ZWQ6JywgZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignW1JpZ2h0U2lkZWJhcl0gRXJyb3IgaW5pdGlhbGl6aW5nIEVjaG86JywgZXJyb3IpOwogICAgfQp9CgovLyBIZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHBvbGwgdXBkYXRlcwpjb25zdCBoYW5kbGVQb2xsVXBkYXRlID0gKGRhdGEpID0+IHsKICAgIGlmIChkYXRhLnBvbGwpIHsKICAgICAgICBjb25zdCBwb2xsSWQgPSBkYXRhLnBvbGwuaWQ7CiAgICAgICAgCiAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgdGhhdCBjb250YWlucyB0aGlzIHBvbGwKICAgICAgICBjb25zdCBldmVudEluZGV4ID0gbG9jYWxFdmVudHMudmFsdWUuZmluZEluZGV4KGV2ZW50ID0+IHsKICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnBvbGwgJiYgZXZlbnQucG9sbC5pZCA9PT0gcG9sbElkOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIGlmIChldmVudEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgdG8gdHJpZ2dlciByZWFjdGl2aXR5CiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHZvdGUgY291bnRzIGlmIG5lZWRlZAogICAgICAgICAgICBjb25zdCB2b3RlQ291bnRzID0ge307CiAgICAgICAgICAgIGlmIChkYXRhLnBvbGwub3B0aW9ucykgewogICAgICAgICAgICAgICAgZGF0YS5wb2xsLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gewogICAgICAgICAgICAgICAgICAgIHZvdGVDb3VudHNbb3B0aW9uXSA9IGRhdGEucG9sbC52b3Rlcy5maWx0ZXIodm90ZSA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZS5zZWxlY3RlZF9vcHRpb25zLmluY2x1ZGVzKG9wdGlvbikKICAgICAgICAgICAgICAgICAgICApLmxlbmd0aDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvbGwgZGF0YSB3aXRoaW4gdGhlIGV2ZW50CiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRQb2xsID0gewogICAgICAgICAgICAgICAgLi4uZGF0YS5wb2xsLAogICAgICAgICAgICAgICAgdm90ZXM6IGRhdGEucG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiB2b3RlQ291bnRzCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggdGhlIG5ldyBwb2xsIGRhdGEKICAgICAgICAgICAgdXBkYXRlZEV2ZW50c1tldmVudEluZGV4XSA9IHsKICAgICAgICAgICAgICAgIC4uLnVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0sCiAgICAgICAgICAgICAgICBwb2xsOiB1cGRhdGVkUG9sbAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbEV2ZW50cyByZWYgd2l0aCBhIG5ldyBhcnJheSB0byBmb3JjZSByZWFjdGl2aXR5CiAgICAgICAgICAgIGxvY2FsRXZlbnRzLnZhbHVlID0gdXBkYXRlZEV2ZW50czsKCiAgICAgICAgICAgIC8vIEVtaXQgdGhlIHBvbGwgdXBkYXRlIHRvIHRoZSBEYXNoYm9hcmQKICAgICAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICAgICAgcG9sbElkOiBwb2xsSWQsCiAgICAgICAgICAgICAgICBwb2xsRGF0YTogdXBkYXRlZFBvbGwKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc29sZS5sb2coJ1tSaWdodFNpZGViYXJdIE5vIGV2ZW50IGZvdW5kIHdpdGggcG9sbCBJRDonLCBwb2xsSWQpOwogICAgICAgICAgICBjb25zb2xlLmxvZygnW1JpZ2h0U2lkZWJhcl0gQXZhaWxhYmxlIGV2ZW50czonLCBsb2NhbEV2ZW50cy52YWx1ZSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLmxvZygnW1JpZ2h0U2lkZWJhcl0gSW52YWxpZCBwb2xsIHVwZGF0ZSBkYXRhOicsIGRhdGEpOwogICAgfQp9OwoKLy8gU2V0dXAgRWNobyBhbmQgZXZlbnQgbGlzdGVuZXJzCm9uTW91bnRlZCgoKSA9PiB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcy5ldmVudHMpICYmIHByb3BzLmV2ZW50cy5sZW5ndGggPiAwKSB7CiAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSBbLi4ucHJvcHMuZXZlbnRzXTsKICAgIH0KICAgIAogICAgLy8gTGlzdGVuIGZvciBjdXN0b20gcG9sbC11cGRhdGVkIGV2ZW50cwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvbGwtdXBkYXRlZCcsIChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5kZXRhaWwucG9sbElkICYmIGV2ZW50LmRldGFpbC5wb2xsRGF0YSkgewogICAgICAgICAgICBoYW5kbGVQb2xsVXBkYXRlKHsKICAgICAgICAgICAgICAgIHBvbGw6IHsKICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuZGV0YWlsLnBvbGxJZCwKICAgICAgICAgICAgICAgICAgICAuLi5ldmVudC5kZXRhaWwucG9sbERhdGEKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIC8vIEluaXRpYWxpemUgRWNobwogICAgY29uc3Qgd2FpdEZvckVjaG8gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuRWNobyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh3YWl0Rm9yRWNobyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpbml0aWFsaXplRWNobzMoKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tSaWdodFNpZGViYXJdIEVycm9yIGluaXRpYWxpemluZyBFY2hvOicsIGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sIDEwMCk7IC8vIGNoZWNrIGV2ZXJ5IDEwMG1zCn0pOwoKLy8gQ2xlYW51cCBvbiB1bm1vdW50Cm9uVW5tb3VudGVkKCgpID0+IHsKICAgIC8vIFJlbW92ZSBjdXN0b20gZXZlbnQgbGlzdGVuZXIKICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2xsLXVwZGF0ZWQnLCAoKSA9PiB7fSk7CiAgICAKICAgIGlmIChlY2hvKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY2hhbm5lbCA9IGVjaG8uY2hhbm5lbCgncG9zdHMnKTsKICAgICAgICAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWwuc3RvcExpc3RlbmluZygnUG9sbFZvdGVVcGRhdGVkJyk7CiAgICAgICAgICAgICAgICBlY2hvLmxlYXZlKCdwb3N0cycpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgLy8gU2lsZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgfQogICAgfQp9KTsKCi8vIEZvcm1hdCBmaWxlIHNpemUgZnVuY3Rpb24KY29uc3QgZm9ybWF0RmlsZVNpemUgPSAoYnl0ZXMpID0+IHsKICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJzsKICAgIGNvbnN0IGsgPSAxMDI0OwogICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107CiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7CiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHNob3dWb3RlcnNNb2RhbCA9IHJlZihmYWxzZSk7CmNvbnN0IHZvdGVycyA9IHJlZih7fSk7Cgpjb25zdCBoYW5kbGVWb3RlID0gYXN5bmMgKHBvbGwsIHNlbGVjdGVkT3B0aW9ucykgPT4gewogICAgdHJ5IHsKICAgICAgICAvLyBFbnN1cmUgc2VsZWN0ZWRPcHRpb25zIGlzIGFsd2F5cyBhbiBhcnJheQogICAgICAgIGxldCBvcHRpb25zVG9TdWJtaXQgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkT3B0aW9ucykgPyBzZWxlY3RlZE9wdGlvbnMgOiBbc2VsZWN0ZWRPcHRpb25zXTsKICAgICAgICAKICAgICAgICAvLyBGaWx0ZXIgb3V0IGFueSB1bmRlZmluZWQgb3IgbnVsbCB2YWx1ZXMKICAgICAgICBvcHRpb25zVG9TdWJtaXQgPSBvcHRpb25zVG9TdWJtaXQuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24gIT09IHVuZGVmaW5lZCAmJiBvcHRpb24gIT09IG51bGwpOwogICAgICAgIAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvbGxzLnZvdGUnLCB7IHBvbGw6IHBvbGwuaWQgfSksIHsKICAgICAgICAgICAgc2VsZWN0ZWRfb3B0aW9uczogb3B0aW9uc1RvU3VibWl0CiAgICAgICAgfSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgICAgICdYLUluZXJ0aWEnOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LnN1Y2Nlc3MpIHsKICAgICAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgdGhhdCBjb250YWlucyB0aGlzIHBvbGwKICAgICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbmRJbmRleChldmVudCA9PiAKICAgICAgICAgICAgICAgIGV2ZW50LnBvbGwgJiYgZXZlbnQucG9sbC5pZCA9PT0gcG9sbC5pZAogICAgICAgICAgICApOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGV2ZW50SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgdG8gdHJpZ2dlciByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmxvY2FsRXZlbnRzLnZhbHVlXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwb2xsIGRhdGEgd2l0aGluIHRoZSBldmVudAogICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50c1tldmVudEluZGV4XSA9IHsKICAgICAgICAgICAgICAgICAgICAuLi51cGRhdGVkRXZlbnRzW2V2ZW50SW5kZXhdLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbEV2ZW50cyByZWYgd2l0aCBhIG5ldyBhcnJheSB0byBmb3JjZSByZWFjdGl2aXR5CiAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IHVwZGF0ZWRFdmVudHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEVtaXQgdGhlIHBvbGwgdXBkYXRlIHRvIHRoZSBEYXNoYm9hcmQKICAgICAgICAgICAgZW1pdCgncG9sbC11cGRhdGVkJywgewogICAgICAgICAgICAgICAgcG9sbElkOiBwb2xsLmlkLAogICAgICAgICAgICAgICAgcG9sbERhdGE6IHJlc3BvbnNlLmRhdGEucG9sbAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIGV2ZW50cyBkYXRhCiAgICAgICAgICAgIGVtaXQoJ3JlZnJlc2gtZXZlbnRzJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2hvdyBlcnJvciBtZXNzYWdlIGlmIHRoZSBzZXJ2ZXIgcmV0dXJucyBzdWNjZXNzOiBmYWxzZQogICAgICAgICAgICBhbGVydChyZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCB2b3RlJyk7CiAgICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3IucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxKSB7CiAgICAgICAgICAgIHJvdXRlci52aXNpdChyb3V0ZSgnbG9naW4nKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2hvdyB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc3VibWl0dGluZyB5b3VyIHZvdGUuIFBsZWFzZSB0cnkgYWdhaW4uJzsKICAgICAgICAgICAgYWxlcnQoZXJyb3JNZXNzYWdlKTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBnZXRTZWxlY3RlZE9wdGlvbnMgPSAocG9sbCkgPT4gewogICAgaWYgKCFwb2xsLnZvdGVzKSByZXR1cm4gW107CiAgICBjb25zdCB1c2VyVm90ZSA9IHBvbGwudm90ZXMuZmluZCh2b3RlID0+IHZvdGUudXNlcl9pZCA9PT0gdXNlci5pZCk7CiAgICByZXR1cm4gdXNlclZvdGUgPyB1c2VyVm90ZS5zZWxlY3RlZF9vcHRpb25zIDogW107Cn07Cgpjb25zdCBpc09wdGlvblNlbGVjdGVkID0gKHBvbGwsIG9wdGlvbikgPT4gewogICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gZ2V0U2VsZWN0ZWRPcHRpb25zKHBvbGwpOwogICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pOwp9OwoKY29uc3QgaGFuZGxlQ2hlY2tib3hDaGFuZ2UgPSAocG9sbCwgb3B0aW9uLCBpc0NoZWNrZWQpID0+IHsKICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IGdldFNlbGVjdGVkT3B0aW9ucyhwb2xsKTsKICAgIGxldCBuZXdTZWxlY3RlZDsKICAgIAogICAgaWYgKHBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlKSB7CiAgICAgICAgaWYgKGlzQ2hlY2tlZCkgewogICAgICAgICAgICBuZXdTZWxlY3RlZCA9IFsuLi5jdXJyZW50U2VsZWN0ZWQsIG9wdGlvbl07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3U2VsZWN0ZWQgPSBjdXJyZW50U2VsZWN0ZWQuZmlsdGVyKG8gPT4gbyAhPT0gb3B0aW9uKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIG5ld1NlbGVjdGVkID0gaXNDaGVja2VkID8gW29wdGlvbl0gOiBbXTsKICAgIH0KICAgIAogICAgaGFuZGxlVm90ZShwb2xsLCBuZXdTZWxlY3RlZCk7Cn07Cgpjb25zdCBzaG93Vm90ZXJzID0gYXN5bmMgKHBvbGwpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgYWxsVm90ZXJzID0ge307CiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgcG9sbC5vcHRpb25zKSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHJvdXRlKCdtZW1iZXIucG9sbHMudm90ZXJzJywgeyBwb2xsOiBwb2xsLmlkLCBvcHRpb24gfSksIHsKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy52b3RlcnMpIHsKICAgICAgICAgICAgICAgIGFsbFZvdGVyc1tvcHRpb25dID0gcmVzcG9uc2UuZGF0YS52b3RlcnM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdm90ZXJzLnZhbHVlID0gYWxsVm90ZXJzOwogICAgICAgIHNob3dWb3RlcnNNb2RhbC52YWx1ZSA9IHRydWU7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MTkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdGYWlsZWQgdG8gZmV0Y2ggdm90ZXJzIGxpc3QuIFBsZWFzZSB0cnkgYWdhaW4uJyk7CiAgICAgICAgfQogICAgfQp9Owo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICAgIDxkaXYgY2xhc3M9ImZpeGVkIHJpZ2h0LTAgdG9wLTE0IHctWzM2MHB4XSBoLVtjYWxjKDEwMHZoLTMuNXJlbSldIG92ZXJmbG93LXktYXV0byBwLTQgei0zIj4KICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSByb3VuZGVkLWxnIHNoYWRvdyBwLTQiPgogICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1zZW1pYm9sZCBtYi00Ij5Vcm3Eg3RvcnVsIEV2ZW5pbWVudDwvaDI+CiAgICAgICAgICAgIDxkaXYgdi1pZj0ibmV4dEV2ZW50IiBjbGFzcz0ic3BhY2UteS00Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJnLWJsdWUtNTAgcm91bmRlZC1sZyBwLTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LWJsdWUtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTUgdy01IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02IDJhMSAxIDAgMDAtMSAxdjFINGEyIDIgMCAwMC0yIDJ2MTBhMiAyIDAgMDAyIDJoMTJhMiAyIDAgMDAyLTJWNmEyIDIgMCAwMC0yLTJoLTFWM2ExIDEgMCAxMC0yIDB2MUg3VjNhMSAxIDAgMDAtMS0xem0wIDVhMSAxIDAgMDAwIDJoOGExIDEgMCAxMDAtMkg2eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvbnQtbWVkaXVtIj57eyBuZXh0RXZlbnQudGl0bGUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMiB0ZXh0LXNtIHRleHQtYmx1ZS02MDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTQgdy00IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMS0xMmExIDEgMCAxMC0yIDB2NGExIDEgMCAwMC4yOTMuNzA3bDIuODI4IDIuODI5YTEgMSAwIDEwMS40MTUtMS40MTVMMTEgOS41ODZWNnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbmV3IERhdGUobmV4dEV2ZW50LnN0YXJ0X2RhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygncm8tUk8nLCB7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtkYXk6ICdsb25nJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aDogJ2xvbmcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXk6ICdudW1lcmljJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5sb2NhdGlvbiIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBtdC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjbGFzcz0iaC00IHctNCIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTUuMDUgNC4wNWE3IDcgMCAxMTkuOSA5LjlMMTAgMTguOWwtNC45NS00Ljk1YTcgNyAwIDAxMC05Ljl6TTEwIDExYTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0eiIgY2xpcC1ydWxlPSJldmVub2RkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBuZXh0RXZlbnQubG9jYXRpb24gfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5kZXNjcmlwdGlvbiIgY2xhc3M9Im10LTIgdGV4dC1ibHVlLTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXh0RXZlbnQuZGVzY3JpcHRpb24gfX0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgRGlzcGxheSBmb3IgRXZlbnRzIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5maWxlX3BhdGgiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPSJyb3V0ZSgnZmlsZXMuZG93bmxvYWQnLCBuZXh0RXZlbnQuaWQpIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWJsdWUtNjAwIGhvdmVyOnRleHQtYmx1ZS04MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNiBoLTYgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNMTIgMTB2Nm0wIDBsLTMtM20zIDNsMy0zbTIgOEg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5leHRFdmVudC5maWxlX25hbWUgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWwtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDAiPih7eyBmb3JtYXRGaWxlU2l6ZShuZXh0RXZlbnQuZmlsZV9zaXplKSB9fSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwhLS0gUG9sbCBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9Im5leHRFdmVudC5wb2xsIiBjbGFzcz0ibXQtNCBib3JkZXItdCBib3JkZXItYmx1ZS0yMDAgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb250LW1lZGl1bSB0ZXh0LWJsdWUtNzAwIG1iLTMiPnt7IG5leHRFdmVudC5wb2xsLnF1ZXN0aW9uIH19PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWZvcj0iKG9wdGlvbiwgaW5kZXgpIGluIG5leHRFdmVudC5wb2xsLm9wdGlvbnMiIDprZXk9ImluZGV4IiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJlbGF0aXZlIGdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0eXBlPSJuZXh0RXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UgPyAnY2hlY2tib3gnIDogJ3JhZGlvJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpuYW1lPSIncG9sbF8nICsgbmV4dEV2ZW50LnBvbGwuaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dmFsdWU9Im9wdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjaGVja2VkPSJpc09wdGlvblNlbGVjdGVkKG5leHRFdmVudC5wb2xsLCBvcHRpb24pIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNoYW5nZT0iKGUpID0+IGhhbmRsZUNoZWNrYm94Q2hhbmdlKG5leHRFdmVudC5wb2xsLCBvcHRpb24sIGUudGFyZ2V0LmNoZWNrZWQpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJvdW5kZWQtZnVsbCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgbWItMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIHx8IDAgfX0gdm90ZXMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPih7eyBNYXRoLnJvdW5kKChuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50c1tvcHRpb25dIC8gT2JqZWN0LnZhbHVlcyhuZXh0RXZlbnQucG9sbC52b3RlX2NvdW50cykucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkpICogMTAwKSB8fCAwIH19JSk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJoLTIgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaC1mdWxsIGJnLWluZGlnby01MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9Insgd2lkdGg6IGAke01hdGgucm91bmQoKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzW29wdGlvbl0gLyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSkgKiAxMDApIHx8IDB9JWAgfSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTMgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBPYmplY3QudmFsdWVzKG5leHRFdmVudC5wb2xsLnZvdGVfY291bnRzKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSB9fSB2b3RlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVycyhuZXh0RXZlbnQucG9sbCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAgaG92ZXI6dGV4dC1ibHVlLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPSJ0ZXh0LWNlbnRlciBweS04Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtZ3JheS01MDAgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJoLTEyIHctMTIgbXgtYXV0byIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNOCA3VjNtOCA0VjNtLTkgOGgxME01IDIxaDE0YTIgMiAwIDAwMi0yVjdhMiAyIDAgMDAtMi0ySDVhMiAyIDAgMDAtMiAydjEyYTIgMiAwIDAwMiAyeiIgLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItMiI+TnUgZXhpc3TEgyBldmVuaW1lbnRlIHZpaXRvYXJlPC9oMz4KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXhzIHRleHQtZ3JheS01MDAiPkPDom5kIHZvciBmaSBjcmVhdGUgZXZlbmltZW50ZSBub2ksIGFjZXN0ZWEgdm9yIGFwxINyZWEgYWljaS48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIFZvdGVycyBNb2RhbCAtLT4KICAgICAgICA8ZGl2IHYtaWY9InNob3dWb3RlcnNNb2RhbCIgY2xhc3M9ImZpeGVkIGluc2V0LTAgei1bOTk5OV0gb3ZlcmZsb3cteS1hdXRvIiBhcmlhLWxhYmVsbGVkYnk9Im1vZGFsLXRpdGxlIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4taC1zY3JlZW4gcHQtNCBweC00IHBiLTIwIHRleHQtY2VudGVyIHNtOmJsb2NrIHNtOnAtMCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZCBpbnNldC0wIGJnLWJsYWNrIGJnLW9wYWNpdHktNTAgdHJhbnNpdGlvbi1vcGFjaXR5IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaGlkZGVuIHNtOmlubGluZS1ibG9jayBzbTphbGlnbi1taWRkbGUgc206aC1zY3JlZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj4mIzgyMDM7PC9zcGFuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWJsb2NrIGFsaWduLWJvdHRvbSBiZy13aGl0ZSByb3VuZGVkLWxnIHRleHQtbGVmdCBvdmVyZmxvdy1oaWRkZW4gc2hhZG93LXhsIHRyYW5zZm9ybSB0cmFuc2l0aW9uLWFsbCBzbTpteS04IHNtOmFsaWduLW1pZGRsZSBzbTptYXgtdy0yeGwgc206dy1mdWxsIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwLTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRleHQtbGcgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMCBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvbGwgVm90ZXJzCiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlLXktNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIob3B0aW9uVm90ZXJzLCBvcHRpb24pIGluIHZvdGVycyIgOmtleT0ib3B0aW9uIiBjbGFzcz0ic3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9InRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCI+e3sgb3B0aW9uIH19PC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSJ2b3RlciBpbiBvcHRpb25Wb3RlcnMiIDprZXk9InZvdGVyLmlkIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz0idm90ZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZvdGVyLmZpcnN0X25hbWUgKyAnICcgKyB2b3Rlci5sYXN0X25hbWUpfSZiYWNrZ3JvdW5kPTBEOTQ4OCZjb2xvcj1mZmZgIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6YWx0PSJ2b3Rlci5maXJzdF9uYW1lICsgJyAnICsgdm90ZXIubGFzdF9uYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoLTggdy04IHJvdW5kZWQtZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS03MDAiPnt7IHZvdGVyLmZpcnN0X25hbWUgfX0ge3sgdm90ZXIubGFzdF9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJvcHRpb25Wb3RlcnMubGVuZ3RoID09PSAwIiBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHZvdGVycyB5ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTYgZmxleCBqdXN0aWZ5LWVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ic2hvd1ZvdGVyc01vZGFsID0gZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNzAwIHJvdW5kZWQtbWQgaG92ZXI6YmctZ3JheS0yMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L3RlbXBsYXRlPgoKPHN0eWxlPgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogI0JDQzBDNDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjQTRBN0FCOwp9CgovKiBDdXN0b20gY2hlY2tib3ggc3R5bGluZyAqLwpbdHlwZT0iY2hlY2tib3giXSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGJhY2tncm91bmQtb3JpZ2luOiBib3JkZXItYm94OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGhlaWdodDogMXJlbTsKICAgIHdpZHRoOiAxcmVtOwogICAgY29sb3I6IHJnYig3OSwgNzAsIDIyOSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7CiAgICAtLXR3LXNoYWRvdzogMCAwICMwMDAwOwogICAgcGFkZGluZzogMHB4OwogICAgYm9yZGVyLWNvbG9yOiByZ2IoMjA5LCAyMTMsIDIxOSk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5OXB4Owp9CgpbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J3doaXRlJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlJTNjcGF0aCBkPSdNMTIuMjA3IDQuNzkzYTEgMSAwIDAxMCAxLjQxNGwtNSA1YTEgMSAwIDAxLTEuNDE0IDBsLTItMmExIDEgMCAwMTEuNDE0LTEuNDE0TDYuNSA5LjA4Nmw0LjI5My00LjI5M2ExIDEgMCAwMTEuNDE0IDB6Jy8lM2UlM2Mvc3ZnJTNlIik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Y29sb3I7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKfQoKW3R5cGU9ImNoZWNrYm94Il06Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKTsKfQo8L3N0eWxlPiA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAJJgAAAAAAAAAAAAAAAA8L8"
				],
				[
					22,
					1,
					"paste",
					null,
					"AgAAAGAUAAAAAAAArygAAAAAAAAAAAAArygAAAAAAACvKAAAAAAAAM0SAAAvLyBMaXN0ZW4gZm9yIEV2ZW50VXBkYXRlZCB0byB1cGRhdGUgZXZlbnRzIGluIHJlYWwgdGltZQogICAgICAgIGNoYW5uZWwubGlzdGVuKCdFdmVudFVwZGF0ZWQnLCAoZGF0YSkgPT4gewogICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnBvc3QgJiYgZGF0YS5wb3N0LmV2ZW50KSB7CiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGV2ZW50IElEIGZyb20gdGhlIHBvc3QncyBldmVudCBvYmplY3QKICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50SWQgPSBkYXRhLnBvc3QuZXZlbnQuaWQ7CiAgICAgICAgICAgICAgICBjb25zdCBwb3N0SWQgPSBkYXRhLnBvc3QuaWQ7CgogICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgZXZlbnQgaW4gbG9jYWxFdmVudHMgYnkgcG9zdCBJRCBmaXJzdAogICAgICAgICAgICAgICAgY29uc3QgZXZlbnRJbmRleCA9IGxvY2FsRXZlbnRzLnZhbHVlLmZpbmRJbmRleChldiA9PiB7CiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIGJ5IHBvc3QgSUQgZmlyc3QKICAgICAgICAgICAgICAgICAgICBpZiAoZXYucG9zdF9pZCA9PT0gcG9zdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIHRyeSB0byBtYXRjaCBieSBldmVudCBJRAogICAgICAgICAgICAgICAgICAgIGlmIChldi5pZCA9PT0gZXZlbnRJZCB8fCBldi5pZCA9PT0gcG9zdElkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGV2ZW50IGRhdGEgaWYgZm91bmQKICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSBldmVudEluZGV4ICE9PSAtMSA/IGxvY2FsRXZlbnRzLnZhbHVlW2V2ZW50SW5kZXhdIDogbnVsbDsKCiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcG9sbCBkYXRhIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAgICAgbGV0IHBvbGxEYXRhID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmIChkYXRhLnBvc3QuZXZlbnQucG9sbCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUG9sbCA9IGV4aXN0aW5nRXZlbnQ/LnBvbGw7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UG9sbCA9IGRhdGEucG9zdC5ldmVudC5wb2xsOwoKICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdm90ZSBjb3VudHMKICAgICAgICAgICAgICAgICAgICBjb25zdCB2b3RlQ291bnRzID0ge307CiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1BvbGwub3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICBuZXdQb2xsLm9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHZvdGUgY291bnQgaWYgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdQb2xsPy52b3RlX2NvdW50cyAmJiBleGlzdGluZ1BvbGwudm90ZV9jb3VudHNbb3B0aW9uXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm90ZUNvdW50c1tvcHRpb25dID0gZXhpc3RpbmdQb2xsLnZvdGVfY291bnRzW29wdGlvbl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1BvbGwudm90ZV9jb3VudHMgJiYgbmV3UG9sbC52b3RlX2NvdW50c1tvcHRpb25dICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlQ291bnRzW29wdGlvbl0gPSBuZXdQb2xsLnZvdGVfY291bnRzW29wdGlvbl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5ld1BvbGwudm90ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlQ291bnRzW29wdGlvbl0gPSBuZXdQb2xsLnZvdGVzLmZpbHRlcih2b3RlID0+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlLnNlbGVjdGVkX29wdGlvbnMuaW5jbHVkZXMob3B0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b3RlQ291bnRzW29wdGlvbl0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHBvbGxEYXRhID0gewogICAgICAgICAgICAgICAgICAgICAgICAuLi5leGlzdGluZ1BvbGwsIC8vIEtlZXAgZXhpc3RpbmcgcG9sbCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5ld1BvbGwsIC8vIE92ZXJyaWRlIHdpdGggbmV3IGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZXM6IGV4aXN0aW5nUG9sbD8udm90ZXMgfHwgbmV3UG9sbC52b3RlcyB8fCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IHZvdGVDb3VudHMKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZvcm1hdCB0aGUgdXBkYXRlZCBldmVudAogICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEV2ZW50ID0gewogICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nRXZlbnQsIC8vIEtlZXAgZXhpc3RpbmcgZXZlbnQgZGF0YQogICAgICAgICAgICAgICAgICAgIC4uLmRhdGEucG9zdC5ldmVudCwgLy8gT3ZlcnJpZGUgd2l0aCBuZXcgZGF0YQogICAgICAgICAgICAgICAgICAgIGlkOiBldmVudElkLAogICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IHBvc3RJZCwKICAgICAgICAgICAgICAgICAgICBjcmVhdG9yOiBkYXRhLnBvc3QuYXV0aG9yID8gewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtkYXRhLnBvc3QuYXV0aG9yLmZpcnN0X25hbWV9ICR7ZGF0YS5wb3N0LmF1dGhvci5sYXN0X25hbWV9YAogICAgICAgICAgICAgICAgICAgIH0gOiBleGlzdGluZ0V2ZW50Py5jcmVhdG9yLAogICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogZGF0YS5wb3N0LmZpbGVfbmFtZSB8fCBleGlzdGluZ0V2ZW50Py5maWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgZmlsZV9wYXRoOiBkYXRhLnBvc3QuZmlsZV9wYXRoIHx8IGV4aXN0aW5nRXZlbnQ/LmZpbGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemU6IGRhdGEucG9zdC5maWxlX3NpemUgfHwgZXhpc3RpbmdFdmVudD8uZmlsZV9zaXplLAogICAgICAgICAgICAgICAgICAgIHBvbGw6IHBvbGxEYXRhCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoZXZlbnRJbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IGluIHRoZSBhcnJheQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWVdOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRFdmVudHNbZXZlbnRJbmRleF0gPSB1cGRhdGVkRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gU29ydCBieSBzdGFydF9kYXRlCiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEV2ZW50cy5zb3J0KChhLCBiKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZShiLnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUEgLSBkYXRlQjsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgbG9jYWxFdmVudHMgd2l0aCB0aGUgbmV3IGFycmF5CiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgcmVhY3RpdmUgdXBkYXRlCiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2soKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbEV2ZW50cy52YWx1ZSA9IFsuLi5sb2NhbEV2ZW50cy52YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIElmIGV2ZW50IG5vdCBmb3VuZCwgYWRkIGl0IHRvIHRoZSBhcnJheQogICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4ubG9jYWxFdmVudHMudmFsdWUsIHVwZGF0ZWRFdmVudF0uc29ydCgoYSwgYikgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKGEuc3RhcnRfZGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUoYi5zdGFydF9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgbG9jYWxFdmVudHMudmFsdWUgPSB1cGRhdGVkRXZlbnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAtJwAAAAAAAGAUAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "database/migrations/2025_04_09_152248_create_events_table.php",
			"settings":
			{
				"buffer_size": 916,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AgAAAFoCAAAAAAAAWwIAAAAAAAAAAAAAWwIAAAAAAABnAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABaAgAAAAAAAFoCAAAAAAAAAAAAAAAA8L8"
				],
				[
					5,
					1,
					"paste",
					null,
					"AgAAAFsCAAAAAAAAlwIAAAAAAAAAAAAAlwIAAAAAAACXAgAAAAAAAAwAAAAgICAgICAgICAgICA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABnAgAAAAAAAFsCAAAAAAAAAAAAAAAAAAA"
				],
				[
					8,
					2,
					"left_delete",
					null,
					"AgAAAH8CAAAAAAAAfwIAAAAAAAABAAAAZH4CAAAAAAAAfgIAAAAAAAABAAAAZQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACAAgAAAAAAAIACAAAAAAAAAAAAAAAA8L8"
				],
				[
					9,
					1,
					"insert",
					{
						"characters": "y"
					},
					"AQAAAH4CAAAAAAAAfwIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB+AgAAAAAAAH4CAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					2,
					"left_delete",
					null,
					"AgAAAH4CAAAAAAAAfgIAAAAAAAABAAAAeX0CAAAAAAAAfQIAAAAAAAABAAAAaQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB/AgAAAAAAAH8CAAAAAAAAAAAAAAAA8L8"
				],
				[
					11,
					1,
					"insert",
					{
						"characters": "y"
					},
					"AQAAAH0CAAAAAAAAfgIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB9AgAAAAAAAH0CAAAAAAAAAAAAAAAA8L8"
				],
				[
					16,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AgAAAJUCAAAAAAAAlgIAAAAAAAAAAAAAlgIAAAAAAACiAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACVAgAAAAAAAJUCAAAAAAAAAAAAAAAA8L8"
				],
				[
					18,
					1,
					"paste",
					null,
					"AgAAAJYCAAAAAAAA0AIAAAAAAAAAAAAA0AIAAAAAAADQAgAAAAAAAAwAAAAgICAgICAgICAgICA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACiAgAAAAAAAJYCAAAAAAAAAAAAAAAAAAA"
				],
				[
					23,
					3,
					"left_delete",
					null,
					"AwAAALwCAAAAAAAAvAIAAAAAAAABAAAAd7sCAAAAAAAAuwIAAAAAAAABAAAAb7oCAAAAAAAAugIAAAAAAAABAAAAbg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC9AgAAAAAAAL0CAAAAAAAAAAAAAAAA8L8"
				],
				[
					24,
					1,
					"paste",
					null,
					"AQAAALoCAAAAAAAAywIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC6AgAAAAAAALoCAAAAAAAAAAAAAAAA8L8"
				],
				[
					33,
					7,
					"left_delete",
					null,
					"BwAAALkCAAAAAAAAuQIAAAAAAAABAAAAX7gCAAAAAAAAuAIAAAAAAAABAAAAebcCAAAAAAAAtwIAAAAAAAABAAAAZrYCAAAAAAAAtgIAAAAAAAABAAAAabUCAAAAAAAAtQIAAAAAAAABAAAAdLQCAAAAAAAAtAIAAAAAAAABAAAAb7MCAAAAAAAAswIAAAAAAAABAAAAbg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC6AgAAAAAAALoCAAAAAAAAAAAAAAAA8L8"
				],
				[
					34,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAACUAwAAPD9waHAKCnVzZSBJbGx1bWluYXRlXERhdGFiYXNlXE1pZ3JhdGlvbnNcTWlncmF0aW9uOwp1c2UgSWxsdW1pbmF0ZVxEYXRhYmFzZVxTY2hlbWFcQmx1ZXByaW50Owp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcU2NoZW1hOwoKcmV0dXJuIG5ldyBjbGFzcyBleHRlbmRzIE1pZ3JhdGlvbgp7CiAgICAvKioKICAgICAqIFJ1biB0aGUgbWlncmF0aW9ucy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVwKCk6IHZvaWQKICAgIHsKICAgICAgICBTY2hlbWE6OmNyZWF0ZSgnZXZlbnRzJywgZnVuY3Rpb24gKEJsdWVwcmludCAkdGFibGUpIHsKICAgICAgICAgICAgJHRhYmxlLT5pZCgpOwogICAgICAgICAgICAkdGFibGUtPmZvcmVpZ25JZCgncG9zdF9pZCcpLT5jb25zdHJhaW5lZCgpLT5jYXNjYWRlT25EZWxldGUoKTsKICAgICAgICAgICAgJHRhYmxlLT5zdHJpbmcoJ3RpdGxlJyk7CiAgICAgICAgICAgICR0YWJsZS0+dGV4dCgnZGVzY3JpcHRpb24nKS0+bnVsbGFibGUoKTsKICAgICAgICAgICAgJHRhYmxlLT5kYXRlVGltZSgnc3RhcnRfZGF0ZScpOwogICAgICAgICAgICAkdGFibGUtPnN0cmluZygnbG9jYXRpb24nKS0+bnVsbGFibGUoKTsKICAgICAgICAgICAgJHRhYmxlLT5ib29sZWFuKCdub3RpZnlfbm93JyktPmRlZmF1bHQoZmFsc2UpOwogICAgICAgICAgICAkdGFibGUtPmJvb2xlYW4oJ25vdGlmeV8yNGhfYmVmb3JlJyktPmRlZmF1bHQoZmFsc2UpOwogICAgICAgICAgICAkdGFibGUtPnRpbWVzdGFtcHMoKTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldmVyc2UgdGhlIG1pZ3JhdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkb3duKCk6IHZvaWQKICAgIHsKICAgICAgICBTY2hlbWE6OmRyb3BJZkV4aXN0cygnZXZlbnRzJyk7CiAgICB9Cn07CgAAAAAAAAAAlAMAAAAAAAAAAAAAAAAAAAAAAACUAwAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACzAgAAAAAAALMCAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": ".gitignore",
			"settings":
			{
				"buffer_size": 282,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					2,
					"left_delete",
					null,
					"AgAAAB4AAAAAAAAAHgAAAAAAAAANAAAAL3B1YmxpYy9idWlsZB0AAAAAAAAAHQAAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAArAAAAAAAAAB4AAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Http/Controllers/LodgeController.php",
			"settings":
			{
				"buffer_size": 12042,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					8,
					3,
					"left_delete",
					null,
					"AwAAAIkAAAAAAAAAiQAAAAAAAAABAAAAUogAAAAAAAAAiAAAAAAAAAABAAAATocAAAAAAAAAhwAAAAAAAAABAAAATA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACKAAAAAAAAAIoAAAAAAAAAAAAAAAAA8L8"
				],
				[
					9,
					1,
					"insert",
					{
						"characters": "lnr"
					},
					"AwAAAIcAAAAAAAAAiAAAAAAAAAAAAAAAiAAAAAAAAACJAAAAAAAAAAAAAACJAAAAAAAAAIoAAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACHAAAAAAAAAIcAAAAAAAAAAAAAAAAA8L8"
				],
				[
					24,
					3,
					"left_delete",
					null,
					"AwAAAJUPAAAAAAAAlQ8AAAAAAAABAAAAUpQPAAAAAAAAlA8AAAAAAAABAAAATpMPAAAAAAAAkw8AAAAAAAABAAAATA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWDwAAAAAAAJYPAAAAAAAAAAAAAAAA8L8"
				],
				[
					25,
					1,
					"insert",
					{
						"characters": "lnr"
					},
					"AwAAAJMPAAAAAAAAlA8AAAAAAAAAAAAAlA8AAAAAAACVDwAAAAAAAAAAAACVDwAAAAAAAJYPAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACTDwAAAAAAAJMPAAAAAAAAAAAAAAAA8L8"
				],
				[
					36,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAAAfLwAAPD9waHAKCm5hbWVzcGFjZSBBcHBcSHR0cFxDb250cm9sbGVyczsKCnVzZSBBcHBcTW9kZWxzXExvZGdlOwp1c2UgQXBwXE1vZGVsc1xMb2RnZU1lbWJlcjsKdXNlIEFwcFxNb2RlbHNcTG9kZ2VEaWduaXR5Owp1c2UgQXBwXE1vZGVsc1xNbG5yRGlnbml0eTsKdXNlIElsbHVtaW5hdGVcSHR0cFxSZXF1ZXN0Owp1c2UgSW5lcnRpYVxJbmVydGlhOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XFN0cjsKdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxGYWNhZGVzXFVSTDsKdXNlIEFwcFxNb2RlbHNcVXNlckludml0YXRpb247CnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcRmFjYWRlc1xIYXNoOwp1c2UgSWxsdW1pbmF0ZVxWYWxpZGF0aW9uXFJ1bGVzOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcQXV0aDsKdXNlIEFwcFxNb2RlbHNcVXNlcjsKCmNsYXNzIExvZGdlQ29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIKewogICAgcHVibGljIGZ1bmN0aW9uIGluZGV4KCkKICAgIHsKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdMb2RnZS9JbmRleCcsIFsKICAgICAgICAgICAgJ2xvZGdlcycgPT4gTG9kZ2U6OmFsbCgpLAogICAgICAgIF0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBJbmVydGlhOjpyZW5kZXIoJ0xvZGdlL0NyZWF0ZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9yZShSZXF1ZXN0ICRyZXF1ZXN0KQogICAgewogICAgICAgICR2YWxpZGF0ZWQgPSAkcmVxdWVzdC0+dmFsaWRhdGUoWwogICAgICAgICAgICAnbmFtZScgPT4gJ3JlcXVpcmVkfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICAgICAgJ2NpdHknID0+ICdyZXF1aXJlZHxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdhZGRyZXNzJyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgIF0pOwoKICAgICAgICBMb2RnZTo6Y3JlYXRlKCR2YWxpZGF0ZWQpOwoKICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ2xvZGdlLmluZGV4JykKICAgICAgICAgICAgLT53aXRoKCdtZXNzYWdlJywgJ0xvasSDIGNyZWF0xIMgY3Ugc3VjY2VzLicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlZGl0KExvZGdlICRsb2RnZSkKICAgIHsKICAgICAgICByZXR1cm4gSW5lcnRpYTo6cmVuZGVyKCdMb2RnZS9FZGl0JywgWwogICAgICAgICAgICAnbG9kZ2UnID0+ICRsb2RnZSwKICAgICAgICBdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKFJlcXVlc3QgJHJlcXVlc3QsIExvZGdlICRsb2RnZSkKICAgIHsKICAgICAgICAkdmFsaWRhdGVkID0gJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ25hbWUnID0+ICdyZXF1aXJlZHxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdjaXR5JyA9PiAncmVxdWlyZWR8c3RyaW5nfG1heDoyNTUnLAogICAgICAgICAgICAnYWRkcmVzcycgPT4gJ3JlcXVpcmVkfHN0cmluZ3xtYXg6MjU1JywKICAgICAgICBdKTsKCiAgICAgICAgJGxvZGdlLT51cGRhdGUoJHZhbGlkYXRlZCk7CgogICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgnbG9kZ2UuaW5kZXgnKQogICAgICAgICAgICAtPndpdGgoJ21lc3NhZ2UnLCAnTG9qxIMgYWN0dWFsaXphdMSDIGN1IHN1Y2Nlcy4nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzdHJveShMb2RnZSAkbG9kZ2UpCiAgICB7CiAgICAgICAgJGxvZGdlLT5kZWxldGUoKTsKCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdsb2RnZS5pbmRleCcpCiAgICAgICAgICAgIC0+d2l0aCgnbWVzc2FnZScsICdMb2rEgyDImXRlYXJzxIMgY3Ugc3VjY2VzLicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBtZW1iZXJzKExvZGdlICRsb2RnZSkKICAgIHsKICAgICAgICAkbWVtYmVycyA9ICRsb2RnZS0+dXNlcnMtPm1hcChmdW5jdGlvbiAoJHVzZXIpIHVzZSAoJGxvZGdlKSB7CiAgICAgICAgICAgICRtZW1iZXIgPSBMb2RnZU1lbWJlcjo6d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgICAgIC0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlci0+aWQpCiAgICAgICAgICAgICAgICAtPmZpcnN0KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgJ2lkJyA9PiAkbWVtYmVyLT5pZCwKICAgICAgICAgICAgICAgICdmaXJzdF9uYW1lJyA9PiAkdXNlci0+Zmlyc3RfbmFtZSwKICAgICAgICAgICAgICAgICdsYXN0X25hbWUnID0+ICR1c2VyLT5sYXN0X25hbWUsCiAgICAgICAgICAgICAgICAnZW1haWwnID0+ICR1c2VyLT5lbWFpbCwKICAgICAgICAgICAgICAgICdyb2xlJyA9PiAkdXNlci0+cm9sZSwKICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdhY3RpdmUnLAogICAgICAgICAgICAgICAgJ3Byb2ZpbGVfcGhvdG9fdXJsJyA9PiAkdXNlci0+cHJvZmlsZV9waG90b191cmwsCiAgICAgICAgICAgICAgICAnbG9kZ2VfZGlnbml0eV9pZCcgPT4gJG1lbWJlci0+bG9kZ2VfZGlnbml0eV9pZCwKICAgICAgICAgICAgICAgICdtbG5yX2RpZ25pdHlfaWQnID0+ICR1c2VyLT5tbG5yX2RpZ25pdHlfaWQsCiAgICAgICAgICAgIF07CiAgICAgICAgfSk7CgogICAgICAgICRwZW5kaW5nSW52aXRhdGlvbnMgPSBVc2VySW52aXRhdGlvbjo6d2hlcmVJbigncm9sZScsIFsnbWFlc3RydScsICdjYWxmYScsICd1Y2VuaWMnXSkKICAgICAgICAgICAgLT53aGVyZSgnZXhwaXJlc19hdCcsICc+Jywgbm93KCkpCiAgICAgICAgICAgIC0+d2hlcmVOdWxsKCdhY2NlcHRlZF9hdCcpCiAgICAgICAgICAgIC0+d2hlcmUoJ2xvZGdlX2lkJywgJGxvZGdlLT5pZCkKICAgICAgICAgICAgLT5nZXQoKQogICAgICAgICAgICAtPm1hcChmdW5jdGlvbiAoJGludml0YXRpb24pIHVzZSAoJGxvZGdlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICdpZCcgPT4gJGludml0YXRpb24tPmlkLAogICAgICAgICAgICAgICAgICAgICdmaXJzdF9uYW1lJyA9PiAkaW52aXRhdGlvbi0+Zmlyc3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnbGFzdF9uYW1lJyA9PiAkaW52aXRhdGlvbi0+bGFzdF9uYW1lLAogICAgICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJGludml0YXRpb24tPmVtYWlsLAogICAgICAgICAgICAgICAgICAgICdyb2xlJyA9PiAkaW52aXRhdGlvbi0+cm9sZSwKICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyA9PiAncGVuZGluZycsCiAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZXNfYXQnID0+ICRpbnZpdGF0aW9uLT5leHBpcmVzX2F0LT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyksCiAgICAgICAgICAgICAgICAgICAgJ3JlZ2lzdHJhdGlvbl91cmwnID0+IFVSTDo6c2lnbmVkUm91dGUoJ2xvZGdlLm1lbWJlci5yZWdpc3RlcicsIFsKICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZGdlJyA9PiAkbG9kZ2UtPmlkLAogICAgICAgICAgICAgICAgICAgICAgICAndG9rZW4nID0+ICRpbnZpdGF0aW9uLT50b2tlbgogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICdwcm9maWxlX3Bob3RvX3VybCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAnbG9kZ2VfZGlnbml0eV9pZCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAnbWxucl9kaWduaXR5X2lkJyA9PiBudWxsLAogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSk7CgogICAgICAgICRhbGxNZW1iZXJzID0gJG1lbWJlcnMtPmNvbmNhdCgkcGVuZGluZ0ludml0YXRpb25zKTsKCiAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTG9kZ2UvTWVtYmVycycsIFsKICAgICAgICAgICAgJ2xvZGdlJyA9PiAkbG9kZ2UsCiAgICAgICAgICAgICdtZW1iZXJzJyA9PiAkYWxsTWVtYmVycywKICAgICAgICAgICAgJ2xvZGdlRGlnbml0aWVzJyA9PiBMb2RnZURpZ25pdHk6OmFsbCgpLAogICAgICAgICAgICAnbWxuckRpZ25pdGllcycgPT4gTWxuckRpZ25pdHk6OmFsbCgpLAogICAgICAgIF0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9yZU1lbWJlcihSZXF1ZXN0ICRyZXF1ZXN0LCBMb2RnZSAkbG9kZ2UpCiAgICB7CiAgICAgICAgJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ2ZpcnN0X25hbWUnID0+ICdyZXF1aXJlZHxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdsYXN0X25hbWUnID0+ICdyZXF1aXJlZHxzdHJpbmd8bWF4OjI1NScsCiAgICAgICAgICAgICdlbWFpbCcgPT4gJ3JlcXVpcmVkfGVtYWlsfHVuaXF1ZTp1c2VycyxlbWFpbCcsCiAgICAgICAgICAgICdyb2xlJyA9PiAncmVxdWlyZWR8aW46bWFlc3RydSxjYWxmYSx1Y2VuaWMnLAogICAgICAgIF0pOwoKICAgICAgICAkaW52aXRhdGlvbiA9IFVzZXJJbnZpdGF0aW9uOjpjcmVhdGUoWwogICAgICAgICAgICAnZW1haWwnID0+ICRyZXF1ZXN0LT5lbWFpbCwKICAgICAgICAgICAgJ3JvbGUnID0+ICRyZXF1ZXN0LT5yb2xlLAogICAgICAgICAgICAndG9rZW4nID0+IFN0cjo6cmFuZG9tKDMyKSwKICAgICAgICAgICAgJ2V4cGlyZXNfYXQnID0+IG5vdygpLT5hZGRIb3VycygyNCksCiAgICAgICAgICAgICdsb2RnZV9pZCcgPT4gJGxvZGdlLT5pZCwKICAgICAgICAgICAgJ2ZpcnN0X25hbWUnID0+ICRyZXF1ZXN0LT5maXJzdF9uYW1lLAogICAgICAgICAgICAnbGFzdF9uYW1lJyA9PiAkcmVxdWVzdC0+bGFzdF9uYW1lLAogICAgICAgIF0pOwoKICAgICAgICAkcmVnaXN0cmF0aW9uVXJsID0gcm91dGUoJ2xvZGdlLm1lbWJlci5yZWdpc3RlcicsIFsKICAgICAgICAgICAgJ2xvZGdlJyA9PiAkbG9kZ2UtPmlkLAogICAgICAgICAgICAndG9rZW4nID0+ICRpbnZpdGF0aW9uLT50b2tlbgogICAgICAgIF0pOwoKICAgICAgICAkbWVtYmVycyA9ICRsb2RnZS0+dXNlcnMtPm1hcChmdW5jdGlvbiAoJHVzZXIpIHsKICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICdpZCcgPT4gJHVzZXItPmlkLAogICAgICAgICAgICAgICAgJ2ZpcnN0X25hbWUnID0+ICR1c2VyLT5maXJzdF9uYW1lLAogICAgICAgICAgICAgICAgJ2xhc3RfbmFtZScgPT4gJHVzZXItPmxhc3RfbmFtZSwKICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJHVzZXItPmVtYWlsLAogICAgICAgICAgICAgICAgJ3JvbGUnID0+ICR1c2VyLT5yb2xlLAogICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ2FjdGl2ZScsCiAgICAgICAgICAgICAgICAncHJvZmlsZV9waG90b191cmwnID0+ICR1c2VyLT5wcm9maWxlX3Bob3RvX3VybCwKICAgICAgICAgICAgXTsKICAgICAgICB9KTsKCiAgICAgICAgJHBlbmRpbmdJbnZpdGF0aW9ucyA9IFVzZXJJbnZpdGF0aW9uOjp3aGVyZSgnbG9kZ2VfaWQnLCAkbG9kZ2UtPmlkKQogICAgICAgICAgICAtPndoZXJlSW4oJ3JvbGUnLCBbJ21hZXN0cnUnLCAnY2FsZmEnLCAndWNlbmljJ10pCiAgICAgICAgICAgIC0+d2hlcmUoJ3VzZWQnLCBmYWxzZSkKICAgICAgICAgICAgLT53aGVyZSgnZXhwaXJlc19hdCcsICc+Jywgbm93KCkpCiAgICAgICAgICAgIC0+Z2V0KCkKICAgICAgICAgICAgLT5tYXAoZnVuY3Rpb24gKCRpbnZpdGF0aW9uKSB1c2UgKCRsb2RnZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICRpbnZpdGF0aW9uLT5pZCwKICAgICAgICAgICAgICAgICAgICAnZmlyc3RfbmFtZScgPT4gJGludml0YXRpb24tPmZpcnN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2xhc3RfbmFtZScgPT4gJGludml0YXRpb24tPmxhc3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnZW1haWwnID0+ICRpbnZpdGF0aW9uLT5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAncm9sZScgPT4gJGludml0YXRpb24tPnJvbGUsCiAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ3BlbmRpbmcnLAogICAgICAgICAgICAgICAgICAgICdwcm9maWxlX3Bob3RvX3VybCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZXhwaXJlc19hdCcgPT4gJGludml0YXRpb24tPmV4cGlyZXNfYXQsCiAgICAgICAgICAgICAgICAgICAgJ3JlZ2lzdHJhdGlvbl91cmwnID0+IHJvdXRlKCdsb2RnZS5tZW1iZXIucmVnaXN0ZXInLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICdsb2RnZScgPT4gJGxvZGdlLT5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ3Rva2VuJyA9PiAkaW52aXRhdGlvbi0+dG9rZW4KICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0pOwoKICAgICAgICAkYWxsTWVtYmVycyA9ICRtZW1iZXJzLT5jb25jYXQoJHBlbmRpbmdJbnZpdGF0aW9ucyk7CgogICAgICAgIHJldHVybiBJbmVydGlhOjpyZW5kZXIoJ0xvZGdlL01lbWJlcnMnLCBbCiAgICAgICAgICAgICdsb2RnZScgPT4gJGxvZGdlLAogICAgICAgICAgICAnbWVtYmVycycgPT4gJGFsbE1lbWJlcnMsCiAgICAgICAgICAgICdyZWdpc3RyYXRpb25fdXJsJyA9PiAkcmVnaXN0cmF0aW9uVXJsLAogICAgICAgIF0pLT53aXRoKCdzdWNjZXNzJywgJ0ludml0YcibaWUgdHJpbWlzxIMgY3Ugc3VjY2VzLicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95TWVtYmVyKExvZGdlICRsb2RnZSwgJHVzZXJJZCkKICAgIHsKICAgICAgICAkbWVtYmVyID0gTG9kZ2VNZW1iZXI6OndoZXJlKCdsb2RnZV9pZCcsICRsb2RnZS0+aWQpCiAgICAgICAgICAgIC0+d2hlcmUoJ3VzZXJfaWQnLCAkdXNlcklkKQogICAgICAgICAgICAtPmZpcnN0T3JGYWlsKCk7CgogICAgICAgICRtZW1iZXItPmRlbGV0ZSgpOwoKICAgICAgICByZXR1cm4gcmVkaXJlY3QoKS0+cm91dGUoJ2xvZGdlLm1lbWJlcnMnLCAkbG9kZ2UpCiAgICAgICAgICAgIC0+d2l0aCgnbWVzc2FnZScsICdNZW1icnUgyJl0ZXJzIGN1IHN1Y2Nlcy4nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzdHJveUludml0YXRpb24oTG9kZ2UgJGxvZGdlLCBVc2VySW52aXRhdGlvbiAkaW52aXRhdGlvbikKICAgIHsKICAgICAgICBpZiAoJGludml0YXRpb24tPmxvZGdlX2lkICE9PSAkbG9kZ2UtPmlkKSB7CiAgICAgICAgICAgIGFib3J0KDQwMyk7CiAgICAgICAgfQoKICAgICAgICAkaW52aXRhdGlvbi0+ZGVsZXRlKCk7CgogICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgnbG9kZ2UubWVtYmVycycsICRsb2RnZSkKICAgICAgICAgICAgLT53aXRoKCdtZXNzYWdlJywgJ0ludml0YcibaWUgyJl0ZWFyc8SDIGN1IHN1Y2Nlcy4nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hvd01lbWJlclJlZ2lzdHJhdGlvbkZvcm0oUmVxdWVzdCAkcmVxdWVzdCwgTG9kZ2UgJGxvZGdlKQogICAgewogICAgICAgICR0b2tlbiA9ICRyZXF1ZXN0LT5xdWVyeSgndG9rZW4nKTsKICAgICAgICAkaW52aXRhdGlvbiA9IFVzZXJJbnZpdGF0aW9uOjp3aGVyZSgndG9rZW4nLCAkdG9rZW4pCiAgICAgICAgICAgIC0+d2hlcmVJbigncm9sZScsIFsnbWFlc3RydScsICdjYWxmYScsICd1Y2VuaWMnXSkKICAgICAgICAgICAgLT5maXJzdCgpOwoKICAgICAgICBpZiAoISRpbnZpdGF0aW9uIHx8ICEkaW52aXRhdGlvbi0+aXNWYWxpZCgpKSB7CiAgICAgICAgICAgIHJldHVybiByZWRpcmVjdCgpLT5yb3V0ZSgnbG9naW4nKQogICAgICAgICAgICAgICAgLT53aXRoKCdlcnJvcicsICdJbnZhbGlkIG9yIGV4cGlyZWQgaW52aXRhdGlvbiBsaW5rLicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEluZXJ0aWE6OnJlbmRlcignTG9kZ2UvTWVtYmVyUmVnaXN0ZXInLCBbCiAgICAgICAgICAgICdsb2RnZScgPT4gJGxvZGdlLAogICAgICAgICAgICAnaW52aXRhdGlvbicgPT4gWwogICAgICAgICAgICAgICAgJ2ZpcnN0X25hbWUnID0+ICRpbnZpdGF0aW9uLT5maXJzdF9uYW1lLAogICAgICAgICAgICAgICAgJ2xhc3RfbmFtZScgPT4gJGludml0YXRpb24tPmxhc3RfbmFtZSwKICAgICAgICAgICAgICAgICdlbWFpbCcgPT4gJGludml0YXRpb24tPmVtYWlsLAogICAgICAgICAgICAgICAgJ3JvbGUnID0+ICRpbnZpdGF0aW9uLT5yb2xlLAogICAgICAgICAgICBdLAogICAgICAgICAgICAndG9rZW4nID0+ICR0b2tlbiwKICAgICAgICBdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXIoUmVxdWVzdCAkcmVxdWVzdCwgTG9kZ2UgJGxvZGdlKQogICAgewogICAgICAgICRyZXF1ZXN0LT52YWxpZGF0ZShbCiAgICAgICAgICAgICdwYXNzd29yZCcgPT4gWydyZXF1aXJlZCcsICdjb25maXJtZWQnLCBSdWxlc1xQYXNzd29yZDo6ZGVmYXVsdHMoKV0sCiAgICAgICAgICAgICd0b2tlbicgPT4gJ3JlcXVpcmVkfHN0cmluZycKICAgICAgICBdKTsKCiAgICAgICAgJGludml0YXRpb24gPSBVc2VySW52aXRhdGlvbjo6d2hlcmUoJ3Rva2VuJywgJHJlcXVlc3QtPnRva2VuKQogICAgICAgICAgICAtPndoZXJlSW4oJ3JvbGUnLCBbJ21hZXN0cnUnLCAnY2FsZmEnLCAndWNlbmljJ10pCiAgICAgICAgICAgIC0+d2hlcmUoJ2V4cGlyZXNfYXQnLCAnPicsIG5vdygpKQogICAgICAgICAgICAtPndoZXJlTnVsbCgnYWNjZXB0ZWRfYXQnKQogICAgICAgICAgICAtPmZpcnN0KCk7CgogICAgICAgIGlmICghJGludml0YXRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdsb2dpbicpCiAgICAgICAgICAgICAgICAtPndpdGgoJ2Vycm9yJywgJ0ludmFsaWQgb3IgZXhwaXJlZCBpbnZpdGF0aW9uIGxpbmsuJyk7CiAgICAgICAgfQoKICAgICAgICAkdXNlciA9IFVzZXI6OmNyZWF0ZShbCiAgICAgICAgICAgICdmaXJzdF9uYW1lJyA9PiAkaW52aXRhdGlvbi0+Zmlyc3RfbmFtZSwKICAgICAgICAgICAgJ2xhc3RfbmFtZScgPT4gJGludml0YXRpb24tPmxhc3RfbmFtZSwKICAgICAgICAgICAgJ2VtYWlsJyA9PiAkaW52aXRhdGlvbi0+ZW1haWwsCiAgICAgICAgICAgICdwYXNzd29yZCcgPT4gSGFzaDo6bWFrZSgkcmVxdWVzdC0+cGFzc3dvcmQpLAogICAgICAgICAgICAnaXNfYWN0aXZlJyA9PiB0cnVlLAogICAgICAgICAgICAncm9sZScgPT4gJGludml0YXRpb24tPnJvbGUsCiAgICAgICAgXSk7CgogICAgICAgIC8vIENyZWF0ZSB0aGUgbG9kZ2UgbWVtYmVyIGFzc29jaWF0aW9uCiAgICAgICAgJGxvZGdlLT5tZW1iZXJzKCktPmNyZWF0ZShbCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQsCiAgICAgICAgXSk7CgogICAgICAgIC8vIE1hcmsgdGhlIGludml0YXRpb24gYXMgdXNlZCBhbmQgZGVsZXRlIGl0CiAgICAgICAgJGludml0YXRpb24tPmFjY2VwdGVkX2F0ID0gbm93KCk7CiAgICAgICAgJGludml0YXRpb24tPnNhdmUoKTsKICAgICAgICAkaW52aXRhdGlvbi0+ZGVsZXRlKCk7CgogICAgICAgIEF1dGg6OmxvZ2luKCR1c2VyKTsKCiAgICAgICAgcmV0dXJuIHJlZGlyZWN0KCktPnJvdXRlKCdkYXNoYm9hcmQnKQogICAgICAgICAgICAtPndpdGgoJ3N1Y2Nlc3MnLCAnUmVnaXN0cmF0aW9uIHN1Y2Nlc3NmdWwhIFdlbGNvbWUgdG8gdGhlIGxvZGdlLicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVNZW1iZXJEaWduaXRpZXMoUmVxdWVzdCAkcmVxdWVzdCwgJG1lbWJlcklkKQogICAgewogICAgICAgICRtZW1iZXIgPSBMb2RnZU1lbWJlcjo6d2l0aCgndXNlcicpLT5maW5kT3JGYWlsKCRtZW1iZXJJZCk7CgogICAgICAgIGlmICgkbWVtYmVyLT51c2VyLT5yb2xlICE9PSAnbWFlc3RydScpIHsKICAgICAgICAgICAgcmV0dXJuIGJhY2soKS0+d2l0aCgnZXJyb3InLCAnRG9hciBtZW1icmlpIGN1IHJvbCBkZSBNYWVzdHJ1IHBvdCBhdmVhIGRlbW5pdMSDyJtpLicpOwogICAgICAgIH0KCiAgICAgICAgJHJlcXVlc3QtPnZhbGlkYXRlKFsKICAgICAgICAgICAgJ2xvZGdlX2RpZ25pdHlfaWQnID0+ICdudWxsYWJsZXxleGlzdHM6bG9kZ2VfZGlnbml0aWVzLGlkJywKICAgICAgICAgICAgJ21sbnJfZGlnbml0eV9pZCcgPT4gJ251bGxhYmxlfGV4aXN0czptbG5yX2RpZ25pdGllcyxpZCcsCiAgICAgICAgXSk7CgogICAgICAgIGlmICgkcmVxdWVzdC0+aGFzKCdsb2RnZV9kaWduaXR5X2lkJykpIHsKICAgICAgICAgICAgJG1lbWJlci0+dXBkYXRlKFsKICAgICAgICAgICAgICAgICdsb2RnZV9kaWduaXR5X2lkJyA9PiAkcmVxdWVzdC0+bG9kZ2VfZGlnbml0eV9pZCwKICAgICAgICAgICAgXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHJlcXVlc3QtPmhhcygnbWxucl9kaWduaXR5X2lkJykpIHsKICAgICAgICAgICAgXExvZzo6aW5mbygnVXBkYXRpbmcgTUxOUiBkaWduaXR5JywgWwogICAgICAgICAgICAgICAgJ21lbWJlcl9pZCcgPT4gJG1lbWJlcklkLAogICAgICAgICAgICAgICAgJ3VzZXJfaWQnID0+ICRtZW1iZXItPnVzZXItPmlkLAogICAgICAgICAgICAgICAgJ21sbnJfZGlnbml0eV9pZCcgPT4gJHJlcXVlc3QtPm1sbnJfZGlnbml0eV9pZAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEZpcnN0LCB1cGRhdGUgdGhlIGVuZCBkYXRlIG9mIHRoZSBwcmV2aW91cyBNTE5SIHBvc2l0aW9uIGlmIGl0IGV4aXN0cwogICAgICAgICAgICAkcHJldmlvdXNQb3NpdGlvbiA9IFxBcHBcTW9kZWxzXE1lbWJlclBvc2l0aW9uOjp3aGVyZSgndXNlcl9pZCcsICRtZW1iZXItPnVzZXJfaWQpCiAgICAgICAgICAgICAgICAtPndoZXJlKCdwb3NpdGlvbl90eXBlJywgJ21sbnJfZGlnbml0eScpCiAgICAgICAgICAgICAgICAtPndoZXJlTnVsbCgnZW5kX2RhdGUnKQogICAgICAgICAgICAgICAgLT5maXJzdCgpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCRwcmV2aW91c1Bvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAkcHJldmlvdXNQb3NpdGlvbi0+dXBkYXRlKFsKICAgICAgICAgICAgICAgICAgICAnZW5kX2RhdGUnID0+IG5vdygpLAogICAgICAgICAgICAgICAgICAgICdub3RlcycgPT4gJ0RlbW5pdGF0ZSDDrm5sxIN0dXJhdMSDIGRlICcgLiAkcmVxdWVzdC0+dXNlcigpLT5maXJzdF9uYW1lIC4gJyAnIC4gJHJlcXVlc3QtPnVzZXIoKS0+bGFzdF9uYW1lCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1c2VyJ3MgTUxOUiBkaWduaXR5CiAgICAgICAgICAgICRyZXN1bHQgPSAkbWVtYmVyLT51c2VyLT51cGRhdGUoWwogICAgICAgICAgICAgICAgJ21sbnJfZGlnbml0eV9pZCcgPT4gJHJlcXVlc3QtPm1sbnJfZGlnbml0eV9pZCwKICAgICAgICAgICAgXSk7CgogICAgICAgICAgICAvLyBJZiBhIG5ldyBNTE5SIGRpZ25pdHkgaXMgYmVpbmcgc2V0LCBjcmVhdGUgYSBuZXcgcG9zaXRpb24gZW50cnkKICAgICAgICAgICAgaWYgKCRyZXF1ZXN0LT5tbG5yX2RpZ25pdHlfaWQpIHsKICAgICAgICAgICAgICAgICRtbG5yRGlnbml0eSA9IFxBcHBcTW9kZWxzXE1sbnJEaWduaXR5OjpmaW5kKCRyZXF1ZXN0LT5tbG5yX2RpZ25pdHlfaWQpOwogICAgICAgICAgICAgICAgaWYgKCRtbG5yRGlnbml0eSkgewogICAgICAgICAgICAgICAgICAgIFxBcHBcTW9kZWxzXE1lbWJlclBvc2l0aW9uOjpjcmVhdGUoWwogICAgICAgICAgICAgICAgICAgICAgICAndXNlcl9pZCcgPT4gJG1lbWJlci0+dXNlcl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uX3R5cGUnID0+ICdtbG5yX2RpZ25pdHknLAogICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnID0+ICRtbG5yRGlnbml0eS0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X2RhdGUnID0+IG5vdygpLAogICAgICAgICAgICAgICAgICAgICAgICAnbm90ZXMnID0+ICdEZW1uaXRhdGUgYWNvcmRhdMSDIGRlICcgLiAkcmVxdWVzdC0+dXNlcigpLT5maXJzdF9uYW1lIC4gJyAnIC4gJHJlcXVlc3QtPnVzZXIoKS0+bGFzdF9uYW1lCiAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIFxMb2c6OmluZm8oJ1VwZGF0ZSByZXN1bHQnLCBbJ3N1Y2Nlc3MnID0+ICRyZXN1bHRdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiYWNrKCk7CiAgICB9Cn0gAAAAAAAAAAAKLwAAAAAAAAAAAAAAAAAAAAAAAAovAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB6LAAAAAAAAIEsAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "Dockerfile",
			"settings":
			{
				"buffer_size": 1268,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"cut",
					null,
					"AQAAAKsCAAAAAAAAqwIAAAAAAABQAAAAIyBJbnN0YWxsIE5vZGUuanMgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBhc3NldHMKUlVOIG5wbSBpbnN0YWxsICYmIG5wbSBydW4gYnVpbGQ",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAD7AgAAAAAAAKsCAAAAAAAAAAAAAAAA8L8"
				],
				[
					6,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"AgAAACgDAAAAAAAAKQMAAAAAAAAAAAAAKQMAAAAAAAAqAwAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAoAwAAAAAAACgDAAAAAAAAAAAAAAAA8L8"
				],
				[
					7,
					1,
					"paste",
					null,
					"AQAAACoDAAAAAAAAegMAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAqAwAAAAAAACoDAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					2,
					"left_delete",
					null,
					"AgAAAKsCAAAAAAAAqwIAAAAAAAABAAAACqoCAAAAAAAAqgIAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACsAgAAAAAAAKwCAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "docker-compose.yml",
			"settings":
			{
				"buffer_size": 2405,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					5,
					1,
					"cut",
					null,
					"AQAAALIGAAAAAAAAsgYAAAAAAABcAgAAICBuZ2lueDoKICAgIGltYWdlOiBuZ2lueDphbHBpbmUKICAgIGNvbnRhaW5lcl9uYW1lOiBhc2hsYXItbmdpbngKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBwb3J0czoKICAgICAgLSAiODA4Mjo4MCIKICAgIHZvbHVtZXM6CiAgICAgIC0gLi86L3Zhci93d3cKICAgICAgLSAuL2RvY2tlci9uZ2lueC9jb25mLmQ6L2V0Yy9uZ2lueC9jb25mLmQvCiAgICBuZXR3b3JrczoKICAgICAgLSBhc2hsYXItbmV0d29yawoKICBkYjoKICAgIGltYWdlOiBteXNxbDo4LjAKICAgIGNvbnRhaW5lcl9uYW1lOiBhc2hsYXItZGIKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICBlbnZpcm9ubWVudDoKICAgICAgTVlTUUxfREFUQUJBU0U6ICR7REJfREFUQUJBU0V9CiAgICAgIE1ZU1FMX1JPT1RfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9CiAgICAgIE1ZU1FMX1BBU1NXT1JEOiAke0RCX1BBU1NXT1JEfQogICAgICBNWVNRTF9VU0VSOiAke0RCX1VTRVJOQU1FfQogICAgdm9sdW1lczoKICAgICAgLSBkYmRhdGE6L3Zhci9saWIvbXlzcWwKICAgIHBvcnRzOgogICAgICAtICIzMzA4OjMzMDYiCiAgICBuZXR3b3JrczoKICAgICAgLSBhc2hsYXItbmV0d29yaw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAOCQAAAAAAALIGAAAAAAAAAAAAAAAA8L8"
				],
				[
					6,
					2,
					"left_delete",
					null,
					"AgAAALEGAAAAAAAAsQYAAAAAAAABAAAACrAGAAAAAAAAsAYAAAAAAAABAAAACg",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACyBgAAAAAAALIGAAAAAAAAAAAAAAAA8L8"
				],
				[
					11,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"AgAAAAgBAAAAAAAACQEAAAAAAAAAAAAACQEAAAAAAAAKAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAIAQAAAAAAAAgBAAAAAAAAAAAAAAAA8L8"
				],
				[
					14,
					1,
					"paste",
					null,
					"AQAAAAkBAAAAAAAAZQMAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAJAQAAAAAAAAkBAAAAAAAAAAAAAAAAAAA"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAABlCQAAdmVyc2lvbjogJzMuOCcKCnNlcnZpY2VzOgogIGFwcDoKICAgIGJ1aWxkOgogICAgICBjb250ZXh0OiAuCiAgICAgIGRvY2tlcmZpbGU6IERvY2tlcmZpbGUKICAgIGltYWdlOiBhc2hsYXIKICAgIGNvbnRhaW5lcl9uYW1lOiBhc2hsYXItYXBwCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgd29ya2luZ19kaXI6IC92YXIvd3d3LwogICAgdm9sdW1lczoKICAgICAgLSAuLzovdmFyL3d3dwogICAgbmV0d29ya3M6CiAgICAgIC0gYXNobGFyLW5ldHdvcmsKCiAgbmdpbng6CiAgICBpbWFnZTogbmdpbng6YWxwaW5lCiAgICBjb250YWluZXJfbmFtZTogYXNobGFyLW5naW54CiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgcG9ydHM6CiAgICAgIC0gIjgwODI6ODAiCiAgICB2b2x1bWVzOgogICAgICAtIC4vOi92YXIvd3d3CiAgICAgIC0gLi9kb2NrZXIvbmdpbngvY29uZi5kOi9ldGMvbmdpbngvY29uZi5kLwogICAgbmV0d29ya3M6CiAgICAgIC0gYXNobGFyLW5ldHdvcmsKCiAgZGI6CiAgICBpbWFnZTogbXlzcWw6OC4wCiAgICBjb250YWluZXJfbmFtZTogYXNobGFyLWRiCiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZAogICAgZW52aXJvbm1lbnQ6CiAgICAgIE1ZU1FMX0RBVEFCQVNFOiAke0RCX0RBVEFCQVNFfQogICAgICBNWVNRTF9ST09UX1BBU1NXT1JEOiAke0RCX1BBU1NXT1JEfQogICAgICBNWVNRTF9QQVNTV09SRDogJHtEQl9QQVNTV09SRH0KICAgICAgTVlTUUxfVVNFUjogJHtEQl9VU0VSTkFNRX0KICAgIHZvbHVtZXM6CiAgICAgIC0gZGJkYXRhOi92YXIvbGliL215c3FsCiAgICBwb3J0czoKICAgICAgLSAiMzMwODozMzA2IgogICAgbmV0d29ya3M6CiAgICAgIC0gYXNobGFyLW5ldHdvcmsKCiAgcXVldWUtd29ya2VyOgogICAgYnVpbGQ6CiAgICAgIGNvbnRleHQ6IC4KICAgICAgZG9ja2VyZmlsZTogRG9ja2VyZmlsZQogICAgaW1hZ2U6IGFzaGxhcgogICAgY29udGFpbmVyX25hbWU6IGFzaGxhci1xdWV1ZS13b3JrZXIKICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkCiAgICB3b3JraW5nX2RpcjogL3Zhci93d3cvCiAgICB2b2x1bWVzOgogICAgICAtIC4vOi92YXIvd3d3CiAgICBlbnZpcm9ubWVudDoKICAgICAgREJfQ09OTkVDVElPTjogbXlzcWwKICAgICAgREJfSE9TVDogZGIKICAgICAgREJfUE9SVDogMzMwNgogICAgICBEQl9EQVRBQkFTRTogJHtEQl9EQVRBQkFTRX0KICAgICAgREJfVVNFUk5BTUU6ICR7REJfVVNFUk5BTUV9CiAgICAgIERCX1BBU1NXT1JEOiAke0RCX1BBU1NXT1JEfQogICAgY29tbWFuZDogPgogICAgICBiYXNoIC1jICIKICAgICAgICBlY2hvICdXYWl0aW5nIGZvciBkYXRhYmFzZSB0byBiZSByZWFkeS4uLicKICAgICAgICB3aGlsZSAhIG5jIC16IGRiIDMzMDY7IGRvCiAgICAgICAgICBzbGVlcCAxCiAgICAgICAgZG9uZQogICAgICAgIGVjaG8gJ0RhdGFiYXNlIGlzIHJlYWR5IScKICAgICAgICBwaHAgYXJ0aXNhbiBxdWV1ZTp3b3JrIC0tdHJpZXM9MyAtLXRpbWVvdXQ9MzAiCiAgICBkZXBlbmRzX29uOgogICAgICAtIGRiCiAgICBuZXR3b3JrczoKICAgICAgLSBhc2hsYXItbmV0d29yawoKICBzY2hlZHVsZXI6CiAgICBidWlsZDoKICAgICAgY29udGV4dDogLgogICAgICBkb2NrZXJmaWxlOiBEb2NrZXJmaWxlCiAgICBpbWFnZTogYXNobGFyCiAgICBjb250YWluZXJfbmFtZTogYXNobGFyLXNjaGVkdWxlcgogICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWQKICAgIHdvcmtpbmdfZGlyOiAvdmFyL3d3dy8KICAgIHZvbHVtZXM6CiAgICAgIC0gLi86L3Zhci93d3cKICAgIGVudmlyb25tZW50OgogICAgICBEQl9DT05ORUNUSU9OOiBteXNxbAogICAgICBEQl9IT1NUOiBkYgogICAgICBEQl9QT1JUOiAzMzA2CiAgICAgIERCX0RBVEFCQVNFOiAke0RCX0RBVEFCQVNFfQogICAgICBEQl9VU0VSTkFNRTogJHtEQl9VU0VSTkFNRX0KICAgICAgREJfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9CiAgICBjb21tYW5kOiA+CiAgICAgIGJhc2ggLWMgIgogICAgICAgIGVjaG8gJ1dhaXRpbmcgZm9yIGRhdGFiYXNlIHRvIGJlIHJlYWR5Li4uJwogICAgICAgIHdoaWxlICEgbmMgLXogZGIgMzMwNjsgZG8KICAgICAgICAgIHNsZWVwIDEKICAgICAgICBkb25lCiAgICAgICAgZWNobyAnRGF0YWJhc2UgaXMgcmVhZHkhJwogICAgICAgIHdoaWxlIHRydWU7IGRvCiAgICAgICAgICBwaHAgYXJ0aXNhbiBldmVudHM6c2VuZC1yZW1pbmRlcnM7CiAgICAgICAgICBzbGVlcCA2MDsKICAgICAgICBkb25lIgogICAgZGVwZW5kc19vbjoKICAgICAgLSBkYgogICAgbmV0d29ya3M6CiAgICAgIC0gYXNobGFyLW5ldHdvcmsKCm5ldHdvcmtzOgogIGFzaGxhci1uZXR3b3JrOgogICAgZHJpdmVyOiBicmlkZ2UKCnZvbHVtZXM6CiAgZGJkYXRhOgogICAgZHJpdmVyOiBsb2NhbCAAAAAAAAAAAGUJAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAFgIAAAAAAAAWAgAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "docker/nginx/conf.d/default.conf",
			"settings":
			{
				"buffer_size": 655,
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					3,
					1,
					"insert",
					{
						"characters": "\n\n"
					},
					"AgAAAI8CAAAAAAAAkAIAAAAAAAAAAAAAkAIAAAAAAACRAgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACPAgAAAAAAAI8CAAAAAAAAAAAAAAAA8L8"
				],
				[
					4,
					1,
					"paste",
					null,
					"AQAAAJECAAAAAAAAJQUAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACRAgAAAAAAAJECAAAAAAAAAAAAAAAA8L8"
				],
				[
					9,
					1,
					"insert",
					{
						"characters": "ashlar"
					},
					"BwAAALkCAAAAAAAAugIAAAAAAAAAAAAAugIAAAAAAAC6AgAAAAAAAAoAAAB5b3VyZG9tYWluugIAAAAAAAC7AgAAAAAAAAAAAAC7AgAAAAAAALwCAAAAAAAAAAAAALwCAAAAAAAAvQIAAAAAAAAAAAAAvQIAAAAAAAC+AgAAAAAAAAAAAAC+AgAAAAAAAL8CAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC5AgAAAAAAAMMCAAAAAAAAAAAAAAAA8L8"
				],
				[
					14,
					1,
					"insert",
					{
						"characters": "ashlar"
					},
					"BwAAAMgCAAAAAAAAyQIAAAAAAAAAAAAAyQIAAAAAAADJAgAAAAAAAAoAAAB5b3VyZG9tYWluyQIAAAAAAADKAgAAAAAAAAAAAADKAgAAAAAAAMsCAAAAAAAAAAAAAMsCAAAAAAAAzAIAAAAAAAAAAAAAzAIAAAAAAADNAgAAAAAAAAAAAADNAgAAAAAAAM4CAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADIAgAAAAAAANICAAAAAAAAAAAAAAAA8L8"
				],
				[
					23,
					1,
					"insert",
					{
						"characters": "club"
					},
					"CgAAAM8CAAAAAAAA0AIAAAAAAAAAAAAA0AIAAAAAAADQAgAAAAAAAAMAAABjb23AAgAAAAAAAMECAAAAAAAAAAAAAMECAAAAAAAAwQIAAAAAAAADAAAAY29tzgIAAAAAAADPAgAAAAAAAAAAAADBAgAAAAAAAMICAAAAAAAAAAAAANACAAAAAAAA0QIAAAAAAAAAAAAAwgIAAAAAAADDAgAAAAAAAAAAAADSAgAAAAAAANMCAAAAAAAAAAAAAMMCAAAAAAAAxAIAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAIAAADAAgAAAAAAAMMCAAAAAAAAAAAAAAAA8L/PAgAAAAAAANICAAAAAAAAAAAAAAAA8L8"
				],
				[
					26,
					1,
					"cut",
					null,
					"AQAAAJECAAAAAAAAkQIAAAAAAACOAgAAc2VydmVyIHsKICAgIGxpc3RlbiA4MDsKICAgIHNlcnZlcl9uYW1lIGFzaGxhci5jbHViIHd3dy5hc2hsYXIuY2x1YjsKCiAgICBpbmRleCBpbmRleC5waHAgaW5kZXguaHRtbDsKICAgIGVycm9yX2xvZyAgL3Zhci9sb2cvbmdpbngvZXJyb3IubG9nOwogICAgYWNjZXNzX2xvZyAvdmFyL2xvZy9uZ2lueC9hY2Nlc3MubG9nOwogICAgcm9vdCAvdmFyL3d3dy9wdWJsaWM7CgogICAgY2xpZW50X21heF9ib2R5X3NpemUgNTBNOwoKICAgIGxvY2F0aW9uIC8gewogICAgICAgIHRyeV9maWxlcyAkdXJpICR1cmkvIC9pbmRleC5waHA/JHF1ZXJ5X3N0cmluZzsKICAgIH0KCiAgICBsb2NhdGlvbiB+IFwucGhwJCB7CiAgICAgICAgdHJ5X2ZpbGVzICR1cmkgPTQwNDsKICAgICAgICBmYXN0Y2dpX3NwbGl0X3BhdGhfaW5mbyBeKC4rXC5waHApKC8uKykkOwogICAgICAgIGZhc3RjZ2lfcGFzcyBhcHA6OTAwMDsKICAgICAgICBmYXN0Y2dpX2luZGV4IGluZGV4LnBocDsKICAgICAgICBpbmNsdWRlIGZhc3RjZ2lfcGFyYW1zOwogICAgICAgIGZhc3RjZ2lfcGFyYW0gU0NSSVBUX0ZJTEVOQU1FICRkb2N1bWVudF9yb290JGZhc3RjZ2lfc2NyaXB0X25hbWU7CiAgICAgICAgZmFzdGNnaV9wYXJhbSBQQVRIX0lORk8gJGZhc3RjZ2lfcGF0aF9pbmZvOwogICAgfQp9",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAfBQAAAAAAAJECAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAACRAgAAc2VydmVyIHsKICAgIGxpc3RlbiA4MDsKICAgIGluZGV4IGluZGV4LnBocCBpbmRleC5odG1sOwogICAgZXJyb3JfbG9nICAvdmFyL2xvZy9uZ2lueC9lcnJvci5sb2c7CiAgICBhY2Nlc3NfbG9nIC92YXIvbG9nL25naW54L2FjY2Vzcy5sb2c7CiAgICByb290IC92YXIvd3d3L3B1YmxpYzsKCiAgICAjIEluY3JlYXNlIG1heCBib2R5IHNpemUgZm9yIGZpbGUgdXBsb2FkcwogICAgY2xpZW50X21heF9ib2R5X3NpemUgNTBNOwoKICAgIGxvY2F0aW9uIC8gewogICAgICAgIHRyeV9maWxlcyAkdXJpICR1cmkvIC9pbmRleC5waHA/JHF1ZXJ5X3N0cmluZzsKICAgIH0KCiAgICBsb2NhdGlvbiB+IFwucGhwJCB7CiAgICAgICAgdHJ5X2ZpbGVzICR1cmkgPTQwNDsKICAgICAgICBmYXN0Y2dpX3NwbGl0X3BhdGhfaW5mbyBeKC4rXC5waHApKC8uKykkOwogICAgICAgIGZhc3RjZ2lfcGFzcyBhcHA6OTAwMDsKICAgICAgICBmYXN0Y2dpX2luZGV4IGluZGV4LnBocDsKICAgICAgICBpbmNsdWRlIGZhc3RjZ2lfcGFyYW1zOwogICAgICAgIGZhc3RjZ2lfcGFyYW0gU0NSSVBUX0ZJTEVOQU1FICRkb2N1bWVudF9yb290JGZhc3RjZ2lfc2NyaXB0X25hbWU7CiAgICAgICAgZmFzdGNnaV9wYXJhbSBQQVRIX0lORk8gJGZhc3RjZ2lfcGF0aF9pbmZvOwogICAgfQp9IAoKAAAAAAAAAACPAgAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAkQIAAAAAAACRAgAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "database/migrations/2025_04_13_152249_create_polls_table.php",
			"settings":
			{
				"buffer_size": 1090,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					5,
					1,
					"insert",
					{
						"characters": "\n"
					},
					"AgAAAHUBAAAAAAAAdgEAAAAAAAAAAAAAdgEAAAAAAACCAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB1AQAAAAAAAHUBAAAAAAAAAAAAAAAA8L8"
				],
				[
					7,
					1,
					"paste",
					null,
					"AgAAAHYBAAAAAAAAwgEAAAAAAAAAAAAAwgEAAAAAAADCAQAAAAAAAAwAAAAgICAgICAgICAgICA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACCAQAAAAAAAHYBAAAAAAAAAAAAAAAAAAA"
				],
				[
					12,
					1,
					"insert",
					{
						"characters": "post_id"
					},
					"CAAAAEgBAAAAAAAASQEAAAAAAAAAAAAASQEAAAAAAABJAQAAAAAAAAgAAABldmVudF9pZEkBAAAAAAAASgEAAAAAAAAAAAAASgEAAAAAAABLAQAAAAAAAAAAAABLAQAAAAAAAEwBAAAAAAAAAAAAAEwBAAAAAAAATQEAAAAAAAAAAAAATQEAAAAAAABOAQAAAAAAAAAAAABOAQAAAAAAAE8BAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABIAQAAAAAAAFABAAAAAAAAAAAAAAAA8L8"
				],
				[
					21,
					1,
					"paste",
					null,
					"AQAAAHQBAAAAAAAAngEAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB0AQAAAAAAAHQBAAAAAAAAAAAAAAAA8L8"
				],
				[
					24,
					1,
					"left_delete",
					null,
					"AQAAAD0BAAAAAAAAPQEAAAAAAAA3AAAAZm9yZWlnbklkKCdwb3N0X2lkJyktPmNvbnN0cmFpbmVkKCktPmNhc2NhZGVPbkRlbGV0ZSgpOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB0AQAAAAAAAD0BAAAAAAAAAAAAAAAA8L8"
				],
				[
					41,
					1,
					"paste",
					null,
					"AgAAAHwBAAAAAAAApgEAAAAAAAAAAAAApgEAAAAAAACmAQAAAAAAADgAAABmb3JlaWduSWQoJ2V2ZW50X2lkJyktPmNvbnN0cmFpbmVkKCktPmNhc2NhZGVPbkRlbGV0ZSgpOw",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC0AQAAAAAAAHwBAAAAAAAAAAAAAAAA8L8"
				],
				[
					46,
					1,
					"insert",
					{
						"characters": "event_id"
					},
					"CQAAAJABAAAAAAAAkQEAAAAAAAAAAAAAkQEAAAAAAACRAQAAAAAAAAcAAABwb3N0X2lkkQEAAAAAAACSAQAAAAAAAAAAAACSAQAAAAAAAJMBAAAAAAAAAAAAAJMBAAAAAAAAlAEAAAAAAAAAAAAAlAEAAAAAAACVAQAAAAAAAAAAAACVAQAAAAAAAJYBAAAAAAAAAAAAAJYBAAAAAAAAlwEAAAAAAAAAAAAAlwEAAAAAAACYAQAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACQAQAAAAAAAJcBAAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAABCBAAAPD9waHAKCnVzZSBJbGx1bWluYXRlXERhdGFiYXNlXE1pZ3JhdGlvbnNcTWlncmF0aW9uOwp1c2UgSWxsdW1pbmF0ZVxEYXRhYmFzZVxTY2hlbWFcQmx1ZXByaW50Owp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcU2NoZW1hOwoKcmV0dXJuIG5ldyBjbGFzcyBleHRlbmRzIE1pZ3JhdGlvbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdXAoKTogdm9pZAogICAgewogICAgICAgIFNjaGVtYTo6Y3JlYXRlKCdwb2xscycsIGZ1bmN0aW9uIChCbHVlcHJpbnQgJHRhYmxlKSB7CiAgICAgICAgICAgICR0YWJsZS0+aWQoKTsKICAgICAgICAgICAgJHRhYmxlLT51bnNpZ25lZEJpZ0ludGVnZXIoJ3Bvc3RfaWQnKS0+bnVsbGFibGUoKTsKICAgICAgICAgICAgJHRhYmxlLT51bnNpZ25lZEJpZ0ludGVnZXIoJ2V2ZW50X2lkJyktPm51bGxhYmxlKCk7CiAgICAgICAgICAgICR0YWJsZS0+c3RyaW5nKCdxdWVzdGlvbicpOwogICAgICAgICAgICAkdGFibGUtPmpzb24oJ29wdGlvbnMnKTsKICAgICAgICAgICAgJHRhYmxlLT5ib29sZWFuKCdpc19tdWx0aXBsZV9jaG9pY2UnKS0+ZGVmYXVsdChmYWxzZSk7CiAgICAgICAgICAgICR0YWJsZS0+dGltZXN0YW1wcygpOwogICAgICAgIH0pOwoKICAgICAgICBTY2hlbWE6OmNyZWF0ZSgncG9sbF92b3RlcycsIGZ1bmN0aW9uIChCbHVlcHJpbnQgJHRhYmxlKSB7CiAgICAgICAgICAgICR0YWJsZS0+aWQoKTsKICAgICAgICAgICAgJHRhYmxlLT5mb3JlaWduSWQoJ3BvbGxfaWQnKS0+Y29uc3RyYWluZWQoKS0+Y2FzY2FkZU9uRGVsZXRlKCk7CiAgICAgICAgICAgICR0YWJsZS0+Zm9yZWlnbklkKCd1c2VyX2lkJyktPmNvbnN0cmFpbmVkKCktPmNhc2NhZGVPbkRlbGV0ZSgpOwogICAgICAgICAgICAkdGFibGUtPmpzb24oJ3NlbGVjdGVkX29wdGlvbnMnKTsKICAgICAgICAgICAgJHRhYmxlLT50aW1lc3RhbXBzKCk7CiAgICAgICAgfSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRvd24oKTogdm9pZAogICAgewogICAgICAgIFNjaGVtYTo6ZHJvcElmRXhpc3RzKCdwb2xsX3ZvdGVzJyk7CiAgICAgICAgU2NoZW1hOjpkcm9wSWZFeGlzdHMoJ3BvbGxzJyk7CiAgICB9Cn07IAAAAAAAAAAAQgQAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAmAEAAAAAAACYAQAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": "resources/js/Components/Member/EditPostModal.vue",
			"settings":
			{
				"buffer_size": 39695,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					32,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAvmAAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnOwppbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1vZGFsIGZyb20gJ0AvQ29tcG9uZW50cy9Nb2RhbC52dWUnOwppbXBvcnQgSW5wdXRMYWJlbCBmcm9tICdAL0NvbXBvbmVudHMvSW5wdXRMYWJlbC52dWUnOwppbXBvcnQgVGV4dElucHV0IGZyb20gJ0AvQ29tcG9uZW50cy9UZXh0SW5wdXQudnVlJzsKaW1wb3J0IFRleHRhcmVhIGZyb20gJ0AvQ29tcG9uZW50cy9UZXh0YXJlYS52dWUnOwppbXBvcnQgRGF0ZXBpY2tlciBmcm9tICdAdnVlcGljL3Z1ZS1kYXRlcGlja2VyJzsKaW1wb3J0ICdAdnVlcGljL3Z1ZS1kYXRlcGlja2VyL2Rpc3QvbWFpbi5jc3MnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBzaG93OiB7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIHBvc3Q6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICB1c2VyOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICB9Cn0pOwoKY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2xvc2UnLCAncG9zdC11cGRhdGVkJ10pOwoKY29uc3QgcHJvZmlsZVBob3RvVXJsID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIHByb3BzLnVzZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3BzLnVzZXIuZmlyc3RfbmFtZSArICcgJyArIHByb3BzLnVzZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYDsKfSk7Cgpjb25zdCBlZGl0Rm9ybSA9IHVzZUZvcm0oewogICAgY29udGVudDogJycsCiAgICBpbWFnZTogbnVsbCwKICAgIGNhdGVnb3J5X2lkOiBudWxsLAogICAgbG9kZ2VfaWQ6IG51bGwsCiAgICBjYXRlZ29yeTogbnVsbCwKICAgIC8vIEZvciBwb2xscwogICAgcXVlc3Rpb246ICcnLAogICAgb3B0aW9uczogW10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgLy8gRm9yIGV2ZW50cwogICAgdGl0bGU6ICcnLAogICAgZGVzY3JpcHRpb246ICcnLAogICAgc3RhcnRfZGF0ZTogJycsCiAgICBsb2NhdGlvbjogJycsCiAgICBoYXNfcG9sbDogZmFsc2UsCiAgICBwb2xsX3F1ZXN0aW9uOiAnJywKICAgIHBvbGxfb3B0aW9uczogW10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgLy8gRm9yIGZpbGVzCiAgICBmaWxlczogW10sCiAgICByZW1vdmVfZmlsZTogZmFsc2UsCiAgICBmaWxlX3BhdGg6IG51bGwsCiAgICBmaWxlX25hbWU6IG51bGwsCiAgICBmaWxlX3R5cGU6IG51bGwsCiAgICBmaWxlX3NpemU6IG51bGwsCiAgICBub3RpZnlfbm93OiBmYWxzZSwKICAgIG5vdGlmeV8yNGhfYmVmb3JlOiBmYWxzZQp9KTsKCmNvbnN0IHNob3dFZGl0RW1vamlQaWNrZXIgPSByZWYoZmFsc2UpOwpjb25zdCBlZGl0SW1hZ2VQcmV2aWV3VXJsID0gcmVmKG51bGwpOwpjb25zdCBlZGl0RmlsZUlucHV0ID0gcmVmKG51bGwpOwpjb25zdCBlZGl0SW1hZ2VJbnB1dCA9IHJlZihudWxsKTsKY29uc3QgZWRpdEV2ZW50RmlsZUlucHV0ID0gcmVmKG51bGwpOwoKLy8gQWRkIG5ldyByZWZzIGZvciBsb2NhbCBmb3JtIGRhdGEKY29uc3QgbG9jYWxGb3JtID0gcmVmKHsKICAgIHBvbGw6IHsKICAgICAgICBxdWVzdGlvbjogJycsCiAgICAgICAgb3B0aW9uczogW10sCiAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBmYWxzZSwKICAgICAgICB2b3RlczogW10sCiAgICAgICAgdm90ZV9jb3VudHM6IHt9CiAgICB9LAogICAgZXZlbnQ6IHsKICAgICAgICBwb2xsOiB7CiAgICAgICAgICAgIHF1ZXN0aW9uOiAnJywKICAgICAgICAgICAgb3B0aW9uczogW10sCiAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZmFsc2UsCiAgICAgICAgICAgIHZvdGVzOiBbXSwKICAgICAgICAgICAgdm90ZV9jb3VudHM6IHt9CiAgICAgICAgfQogICAgfQp9KTsKCi8vIFVwZGF0ZSB0aGUgd2F0Y2ggZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBsb2NhbCBmb3JtIGRhdGEKd2F0Y2goKCkgPT4gcHJvcHMucG9zdCwgKG5ld1Bvc3QpID0+IHsKICAgIGlmIChuZXdQb3N0KSB7CiAgICAgICAgZWRpdEZvcm0ucmVzZXQoKTsKICAgICAgICBlZGl0Rm9ybS5jb250ZW50ID0gbmV3UG9zdC5jb250ZW50OwogICAgICAgIGVkaXRGb3JtLmNhdGVnb3J5X2lkID0gbmV3UG9zdC5jYXRlZ29yeV9pZDsKICAgICAgICBlZGl0Rm9ybS5sb2RnZV9pZCA9IG5ld1Bvc3QubG9kZ2VfaWQ7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9uYW1lID0gbmV3UG9zdC5maWxlX25hbWU7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9wYXRoID0gbmV3UG9zdC5maWxlX3BhdGg7CiAgICAgICAgZWRpdEZvcm0uZmlsZV90eXBlID0gbmV3UG9zdC5maWxlX3R5cGU7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9zaXplID0gbmV3UG9zdC5maWxlX3NpemU7CiAgICAgICAgCiAgICAgICAgaWYgKG5ld1Bvc3QuaW1hZ2VfdXJsKSB7CiAgICAgICAgICAgIGVkaXRJbWFnZVByZXZpZXdVcmwudmFsdWUgPSBuZXdQb3N0LmltYWdlX3VybDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKG5ld1Bvc3QucG9sbCkgewogICAgICAgICAgICBlZGl0Rm9ybS5xdWVzdGlvbiA9IG5ld1Bvc3QucG9sbC5xdWVzdGlvbjsKICAgICAgICAgICAgZWRpdEZvcm0ub3B0aW9ucyA9IFsuLi5uZXdQb3N0LnBvbGwub3B0aW9uc107CiAgICAgICAgICAgIGVkaXRGb3JtLmlzX211bHRpcGxlX2Nob2ljZSA9IG5ld1Bvc3QucG9sbC5pc19tdWx0aXBsZV9jaG9pY2U7CiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgbG9jYWwgZm9ybSBkYXRhCiAgICAgICAgICAgIGxvY2FsRm9ybS52YWx1ZS5wb2xsID0gewogICAgICAgICAgICAgICAgcXVlc3Rpb246IG5ld1Bvc3QucG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsuLi5uZXdQb3N0LnBvbGwub3B0aW9uc10sCiAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IG5ld1Bvc3QucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICB2b3RlczogbmV3UG9zdC5wb2xsLnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IG5ld1Bvc3QucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAobmV3UG9zdC5ldmVudCkgewogICAgICAgICAgICBlZGl0Rm9ybS50aXRsZSA9IG5ld1Bvc3QuZXZlbnQudGl0bGU7CiAgICAgICAgICAgIGVkaXRGb3JtLmRlc2NyaXB0aW9uID0gbmV3UG9zdC5ldmVudC5kZXNjcmlwdGlvbjsKICAgICAgICAgICAgZWRpdEZvcm0uc3RhcnRfZGF0ZSA9IG5ld1Bvc3QuZXZlbnQuc3RhcnRfZGF0ZTsKICAgICAgICAgICAgZWRpdEZvcm0ubG9jYXRpb24gPSBuZXdQb3N0LmV2ZW50LmxvY2F0aW9uOwogICAgICAgICAgICBlZGl0Rm9ybS5oYXNfcG9sbCA9ICEhbmV3UG9zdC5ldmVudC5wb2xsOwogICAgICAgICAgICBlZGl0Rm9ybS5wb2xsX3F1ZXN0aW9uID0gbmV3UG9zdC5ldmVudC5wb2xsPy5xdWVzdGlvbiB8fCAnJzsKICAgICAgICAgICAgZWRpdEZvcm0ucG9sbF9vcHRpb25zID0gbmV3UG9zdC5ldmVudC5wb2xsPy5vcHRpb25zIHx8IFsnJywgJyddOwogICAgICAgICAgICBlZGl0Rm9ybS5pc19tdWx0aXBsZV9jaG9pY2UgPSBuZXdQb3N0LmV2ZW50LnBvbGw/LmlzX211bHRpcGxlX2Nob2ljZSB8fCBmYWxzZTsKICAgICAgICAgICAgZWRpdEZvcm0ubm90aWZ5X25vdyA9IG5ld1Bvc3QuZXZlbnQubm90aWZ5X25vdyB8fCBmYWxzZTsKICAgICAgICAgICAgZWRpdEZvcm0ubm90aWZ5XzI0aF9iZWZvcmUgPSBuZXdQb3N0LmV2ZW50Lm5vdGlmeV8yNGhfYmVmb3JlIHx8IGZhbHNlOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBsb2NhbCBmb3JtIGRhdGEgZm9yIGV2ZW50IHBvbGwKICAgICAgICAgICAgaWYgKG5ld1Bvc3QuZXZlbnQucG9sbCkgewogICAgICAgICAgICAgICAgbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwgPSB7CiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IG5ld1Bvc3QuZXZlbnQucG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbLi4ubmV3UG9zdC5ldmVudC5wb2xsLm9wdGlvbnNdLAogICAgICAgICAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogbmV3UG9zdC5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICB2b3RlczogbmV3UG9zdC5ldmVudC5wb2xsLnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBuZXdQb3N0LmV2ZW50LnBvbGwudm90ZV9jb3VudHMgfHwge30KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pOwoKY29uc3QgaGFuZGxlRWRpdEltYWdlVXBsb2FkID0gKGV2ZW50KSA9PiB7CiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdOwogICAgaWYgKGZpbGUpIHsKICAgICAgICBlZGl0Rm9ybS5pbWFnZSA9IGZpbGU7CiAgICAgICAgZWRpdEltYWdlUHJldmlld1VybC52YWx1ZSA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgICB9Cn07Cgpjb25zdCByZW1vdmVFZGl0SW1hZ2UgPSAoKSA9PiB7CiAgICBlZGl0Rm9ybS5pbWFnZSA9IG51bGw7CiAgICBlZGl0Rm9ybS5yZW1vdmVfaW1hZ2UgPSB0cnVlOwogICAgaWYgKGVkaXRJbWFnZVByZXZpZXdVcmwudmFsdWUpIHsKICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGVkaXRJbWFnZVByZXZpZXdVcmwudmFsdWUpOwogICAgICAgIGVkaXRJbWFnZVByZXZpZXdVcmwudmFsdWUgPSBudWxsOwogICAgfQp9OwoKY29uc3QgaW5zZXJ0RWRpdEVtb2ppID0gKGVtb2ppKSA9PiB7CiAgICBlZGl0Rm9ybS5jb250ZW50ICs9IGVtb2ppOwogICAgc2hvd0VkaXRFbW9qaVBpY2tlci52YWx1ZSA9IGZhbHNlOwp9OwoKY29uc3QgaGFuZGxlRWRpdEZpbGVVcGxvYWQgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07CiAgICBpZiAoZmlsZSkgewogICAgICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IFsnYXBwbGljYXRpb24vcGRmJywgJ2FwcGxpY2F0aW9uL21zd29yZCcsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsICd0ZXh0L3BsYWluJ107CiAgICAgICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkgewogICAgICAgICAgICBhbGVydCgnT25seSBQREYsIERPQywgRE9DWCwgYW5kIFRYVCBmaWxlcyBhcmUgYWxsb3dlZCcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChmaWxlLnNpemUgPiAxMCAqIDEwMjQgKiAxMDI0KSB7CiAgICAgICAgICAgIGFsZXJ0KCdGaWxlIHNpemUgbXVzdCBiZSBsZXNzIHRoYW4gMTBNQicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVkaXRGb3JtLmZpbGVzID0gW2ZpbGVdOwogICAgICAgIGVkaXRGb3JtLnJlbW92ZV9maWxlID0gZmFsc2U7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9uYW1lID0gZmlsZS5uYW1lOwogICAgICAgIGVkaXRGb3JtLmZpbGVfc2l6ZSA9IGZpbGUuc2l6ZTsKICAgICAgICBpZiAocHJvcHMucG9zdCkgewogICAgICAgICAgICBwcm9wcy5wb3N0LmZpbGVfcGF0aCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgICAgICAgICAgIHByb3BzLnBvc3QuZmlsZV9uYW1lID0gZmlsZS5uYW1lOwogICAgICAgICAgICBwcm9wcy5wb3N0LmZpbGVfc2l6ZSA9IGZpbGUuc2l6ZTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCByZW1vdmVFZGl0RmlsZSA9ICgpID0+IHsKICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBmaWxlLi4uJyk7CiAgICBjb25zb2xlLmxvZygnQmVmb3JlIHJlbW92YWw6JywgewogICAgICAgIGZpbGVzOiBlZGl0Rm9ybS5maWxlcywKICAgICAgICBmaWxlX25hbWU6IGVkaXRGb3JtLmZpbGVfbmFtZSwKICAgICAgICBmaWxlX3BhdGg6IGVkaXRGb3JtLmZpbGVfcGF0aCwKICAgICAgICBmaWxlX3NpemU6IGVkaXRGb3JtLmZpbGVfc2l6ZSwKICAgICAgICByZW1vdmVfZmlsZTogZWRpdEZvcm0ucmVtb3ZlX2ZpbGUKICAgIH0pOwoKICAgIGVkaXRGb3JtLmZpbGVzID0gW107CiAgICBlZGl0Rm9ybS5yZW1vdmVfZmlsZSA9IHRydWU7CiAgICBlZGl0Rm9ybS5maWxlX25hbWUgPSBudWxsOwogICAgZWRpdEZvcm0uZmlsZV9wYXRoID0gbnVsbDsKICAgIGVkaXRGb3JtLmZpbGVfc2l6ZSA9IG51bGw7CiAgICBpZiAocHJvcHMucG9zdCkgewogICAgICAgIHByb3BzLnBvc3QuZmlsZV9wYXRoID0gbnVsbDsKICAgICAgICBwcm9wcy5wb3N0LmZpbGVfbmFtZSA9IG51bGw7CiAgICAgICAgcHJvcHMucG9zdC5maWxlX3NpemUgPSBudWxsOwogICAgfQoKICAgIGNvbnNvbGUubG9nKCdBZnRlciByZW1vdmFsOicsIHsKICAgICAgICBmaWxlczogZWRpdEZvcm0uZmlsZXMsCiAgICAgICAgZmlsZV9uYW1lOiBlZGl0Rm9ybS5maWxlX25hbWUsCiAgICAgICAgZmlsZV9wYXRoOiBlZGl0Rm9ybS5maWxlX3BhdGgsCiAgICAgICAgZmlsZV9zaXplOiBlZGl0Rm9ybS5maWxlX3NpemUsCiAgICAgICAgcmVtb3ZlX2ZpbGU6IGVkaXRGb3JtLnJlbW92ZV9maWxlCiAgICB9KTsKfTsKCmNvbnN0IGhhbmRsZUVkaXRFdmVudEZpbGVVcGxvYWQgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07CiAgICBpZiAoZmlsZSkgewogICAgICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IFsnYXBwbGljYXRpb24vcGRmJywgJ2FwcGxpY2F0aW9uL21zd29yZCcsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsICd0ZXh0L3BsYWluJ107CiAgICAgICAgaWYgKCFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkgewogICAgICAgICAgICBhbGVydCgnT25seSBQREYsIERPQywgRE9DWCwgYW5kIFRYVCBmaWxlcyBhcmUgYWxsb3dlZCcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChmaWxlLnNpemUgPiAxMCAqIDEwMjQgKiAxMDI0KSB7CiAgICAgICAgICAgIGFsZXJ0KCdGaWxlIHNpemUgbXVzdCBiZSBsZXNzIHRoYW4gMTBNQicpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGVkaXRGb3JtLmZpbGVzID0gW2ZpbGVdOwogICAgICAgIGVkaXRGb3JtLnJlbW92ZV9maWxlID0gZmFsc2U7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9uYW1lID0gZmlsZS5uYW1lOwogICAgICAgIGVkaXRGb3JtLmZpbGVfc2l6ZSA9IGZpbGUuc2l6ZTsKICAgICAgICBpZiAocHJvcHMucG9zdCkgewogICAgICAgICAgICBwcm9wcy5wb3N0LmZpbGVfcGF0aCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgICAgICAgICAgIHByb3BzLnBvc3QuZmlsZV9uYW1lID0gZmlsZS5uYW1lOwogICAgICAgICAgICBwcm9wcy5wb3N0LmZpbGVfc2l6ZSA9IGZpbGUuc2l6ZTsKICAgICAgICB9CiAgICB9Cn07Cgpjb25zdCBvcGVuRWRpdEZpbGVJbnB1dCA9ICgpID0+IHsKICAgIGlmIChlZGl0RmlsZUlucHV0LnZhbHVlKSB7CiAgICAgICAgZWRpdEZpbGVJbnB1dC52YWx1ZS5jbGljaygpOwogICAgfQp9OwoKY29uc3Qgb3BlbkVkaXRJbWFnZUlucHV0ID0gKCkgPT4gewogICAgaWYgKGVkaXRJbWFnZUlucHV0LnZhbHVlKSB7CiAgICAgICAgZWRpdEltYWdlSW5wdXQudmFsdWUuY2xpY2soKTsKICAgIH0KfTsKCmNvbnN0IG9wZW5FZGl0RXZlbnRGaWxlSW5wdXQgPSAoKSA9PiB7CiAgICBjb25zb2xlLmxvZygnT3BlbmluZyBmaWxlIGlucHV0Li4uJyk7CiAgICBpZiAoZWRpdEV2ZW50RmlsZUlucHV0LnZhbHVlKSB7CiAgICAgICAgZWRpdEV2ZW50RmlsZUlucHV0LnZhbHVlLmNsaWNrKCk7CiAgICB9IGVsc2UgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGUgaW5wdXQgcmVmZXJlbmNlIG5vdCBmb3VuZCcpOwogICAgfQp9OwoKY29uc3QgZm9ybWF0RmlsZVNpemUgPSAoYnl0ZXMpID0+IHsKICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJzsKICAgIGNvbnN0IGsgPSAxMDI0OwogICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJ107CiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7CiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTsKfTsKCmNvbnN0IHRydW5jYXRlZEZpbGVOYW1lID0gY29tcHV0ZWQoKCkgPT4gewogICAgaWYgKCFwcm9wcy5wb3N0Py5maWxlX25hbWUpIHJldHVybiAnJzsKICAgIGNvbnN0IGZpbGVOYW1lID0gcHJvcHMucG9zdC5maWxlX25hbWU7CiAgICBjb25zdCBtYXhMZW5ndGggPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDY0MCA/IDIwIDogMzA7IC8vIFNob3J0ZXIgb24gbW9iaWxlCiAgICByZXR1cm4gZmlsZU5hbWUubGVuZ3RoID4gbWF4TGVuZ3RoID8gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIG1heExlbmd0aCAtIDMpICsgJy4uLicgOiBmaWxlTmFtZTsKfSk7Cgpjb25zdCBoYW5kbGVFZGl0U3VibWl0ID0gYXN5bmMgKCkgPT4gewogICAgLy8gU3luYyBsb2NhbEZvcm0gZGF0YSB3aXRoIGVkaXRGb3JtIGJlZm9yZSBzdWJtaXNzaW9uCiAgICBpZiAocHJvcHMucG9zdC5wb2xsKSB7CiAgICAgICAgZWRpdEZvcm0ucXVlc3Rpb24gPSBsb2NhbEZvcm0udmFsdWUucG9sbC5xdWVzdGlvbjsKICAgICAgICBlZGl0Rm9ybS5vcHRpb25zID0gWy4uLmxvY2FsRm9ybS52YWx1ZS5wb2xsLm9wdGlvbnNdOwogICAgICAgIGVkaXRGb3JtLmlzX211bHRpcGxlX2Nob2ljZSA9IGxvY2FsRm9ybS52YWx1ZS5wb2xsLmlzX211bHRpcGxlX2Nob2ljZTsKICAgIH0KICAgIAogICAgaWYgKHByb3BzLnBvc3QuZXZlbnQgJiYgZWRpdEZvcm0uaGFzX3BvbGwpIHsKICAgICAgICBlZGl0Rm9ybS5wb2xsX3F1ZXN0aW9uID0gbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwucXVlc3Rpb247CiAgICAgICAgZWRpdEZvcm0ucG9sbF9vcHRpb25zID0gWy4uLmxvY2FsRm9ybS52YWx1ZS5ldmVudC5wb2xsLm9wdGlvbnNdOwogICAgICAgIGVkaXRGb3JtLmlzX211bHRpcGxlX2Nob2ljZSA9IGxvY2FsRm9ybS52YWx1ZS5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZTsKICAgIH0KCiAgICBpZiAocHJvcHMucG9zdC5ldmVudCkgewogICAgICAgIGF3YWl0IHVwZGF0ZUV2ZW50UG9zdHMoKTsKICAgIH0gZWxzZSBpZiAocHJvcHMucG9zdC5wb2xsKSB7CiAgICAgICAgYXdhaXQgdXBkYXRlUG9sbFBvc3RzKCk7CiAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IHVwZGF0ZVJlZ3VsYXJQb3N0KCk7CiAgICB9Cn07Cgpjb25zdCB1cGRhdGVQb2xsUG9zdHMgPSBhc3luYyAoKSA9PiB7CiAgICB0cnkgewogICAgICAgIC8vIEZpcnN0IHVwZGF0ZSB0aGUgcG9zdAogICAgICAgIGNvbnN0IHBvc3RGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoJ2NvbnRlbnQnLCBlZGl0Rm9ybS5jb250ZW50KTsKICAgICAgICBwb3N0Rm9ybURhdGEuYXBwZW5kKCdjYXRlZ29yeV9pZCcsIGVkaXRGb3JtLmNhdGVnb3J5X2lkKTsKICAgICAgICBwb3N0Rm9ybURhdGEuYXBwZW5kKCdsb2RnZV9pZCcsIGVkaXRGb3JtLmxvZGdlX2lkKTsKICAgICAgICBwb3N0Rm9ybURhdGEuYXBwZW5kKCdfbWV0aG9kJywgJ1BVVCcpOwoKICAgICAgICAvLyBIYW5kbGUgaW1hZ2UgdXBsb2FkCiAgICAgICAgaWYgKGVkaXRGb3JtLmltYWdlKSB7CiAgICAgICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoJ2ltYWdlJywgZWRpdEZvcm0uaW1hZ2UpOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdXBsb2FkcwogICAgICAgIGlmIChlZGl0Rm9ybS5maWxlcyAmJiBlZGl0Rm9ybS5maWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGVkaXRGb3JtLmZpbGVzLmZvckVhY2goKGZpbGUsIGluZGV4KSA9PiB7CiAgICAgICAgICAgICAgICBwb3N0Rm9ybURhdGEuYXBwZW5kKGBmaWxlc1ske2luZGV4fV1gLCBmaWxlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgZmlsZSByZW1vdmFsCiAgICAgICAgaWYgKGVkaXRGb3JtLnJlbW92ZV9maWxlKSB7CiAgICAgICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoJ3JlbW92ZV9maWxlJywgJzEnKTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zdAogICAgICAgIGNvbnN0IHBvc3RSZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Qocm91dGUoJ21lbWJlci5wb3N0cy51cGRhdGUnLCBwcm9wcy5wb3N0LmlkKSwgcG9zdEZvcm1EYXRhLCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsCiAgICAgICAgICAgICAgICAnWC1YU1JGLVRPS0VOJzogZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvWFNSRi1UT0tFTj0oW147XSspLylbMV0pCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gVGhlbiB1cGRhdGUgdGhlIHBvbGwKICAgICAgICBjb25zdCBwb2xsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBwb2xsRm9ybURhdGEuYXBwZW5kKCdxdWVzdGlvbicsIGVkaXRGb3JtLnF1ZXN0aW9uKTsKICAgICAgICBwb2xsRm9ybURhdGEuYXBwZW5kKCdpc19tdWx0aXBsZV9jaG9pY2UnLCBlZGl0Rm9ybS5pc19tdWx0aXBsZV9jaG9pY2UgPyAnMScgOiAnMCcpOwogICAgICAgIGVkaXRGb3JtLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uLCBpbmRleCkgPT4gewogICAgICAgICAgICBwb2xsRm9ybURhdGEuYXBwZW5kKGBvcHRpb25zWyR7aW5kZXh9XWAsIG9wdGlvbik7CiAgICAgICAgfSk7CiAgICAgICAgcG9sbEZvcm1EYXRhLmFwcGVuZCgnX21ldGhvZCcsICdQVVQnKTsKCiAgICAgICAgY29uc3QgcG9sbFJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvbGxzLnVwZGF0ZScsIHByb3BzLnBvc3QucG9sbC5pZCksIHBvbGxGb3JtRGF0YSwgewogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLAogICAgICAgICAgICAgICAgJ1gtWFNSRi1UT0tFTic6IGRlY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5jb29raWUubWF0Y2goL1hTUkYtVE9LRU49KFteO10rKS8pWzFdKQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIENyZWF0ZSB1cGRhdGVkIHBvc3Qgd2l0aCBwcmVzZXJ2ZWQgdm90ZSBkYXRhCiAgICAgICAgY29uc3QgdXBkYXRlZFBvc3QgPSB7CiAgICAgICAgICAgIC4uLnBvc3RSZXNwb25zZS5kYXRhLnBvc3QsCiAgICAgICAgICAgIHBvbGw6IHsKICAgICAgICAgICAgICAgIC4uLnBvbGxSZXNwb25zZS5kYXRhLnBvbGwsCiAgICAgICAgICAgICAgICB2b3RlczogbG9jYWxGb3JtLnZhbHVlLnBvbGwudm90ZXMsCiAgICAgICAgICAgICAgICB2b3RlX2NvdW50czogbG9jYWxGb3JtLnZhbHVlLnBvbGwudm90ZV9jb3VudHMKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYXV0aG9yOiBwb3N0UmVzcG9uc2UuZGF0YS5wb3N0LmF1dGhvciB8fCBwcm9wcy51c2VyLAogICAgICAgICAgICByZWFjdGlvbnM6IHByb3BzLnBvc3QucmVhY3Rpb25zIHx8IFtdCiAgICAgICAgfTsKCiAgICAgICAgLy8gRW1pdCB0aGUgdXBkYXRlZCBwb3N0CiAgICAgICAgZW1pdCgncG9zdC11cGRhdGVkJywgdXBkYXRlZFBvc3QpOwogICAgICAgIAogICAgICAgIC8vIFJlc2V0IGZvcm0gYW5kIGNsb3NlIG1vZGFsCiAgICAgICAgZWRpdEZvcm0ucmVzZXQoKTsKICAgICAgICBlbWl0KCdjbG9zZScpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyBwb2xsIHBvc3Q6JywgZXJyb3IpOwogICAgICAgIGlmIChlcnJvci5yZXNwb25zZSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXNwb25zZTonLCBlcnJvci5yZXNwb25zZS5kYXRhKTsKICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIHVwZGF0aW5nIHBvbGwgcG9zdDogJyArIChlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIHVwZGF0aW5nIHBvbGwgcG9zdDogJyArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IHVwZGF0ZUV2ZW50UG9zdHMgPSBhc3luYyAoKSA9PiB7CiAgICB0cnkgewogICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb250ZW50JywgZWRpdEZvcm0uY29udGVudCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjYXRlZ29yeV9pZCcsIGVkaXRGb3JtLmNhdGVnb3J5X2lkKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2xvZGdlX2lkJywgZWRpdEZvcm0ubG9kZ2VfaWQpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnX21ldGhvZCcsICdQVVQnKTsKCiAgICAgICAgLy8gQWRkIGV2ZW50IGRhdGEKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RpdGxlJywgZWRpdEZvcm0udGl0bGUpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBlZGl0Rm9ybS5kZXNjcmlwdGlvbik7CiAgICAgICAgCiAgICAgICAgLy8gRm9ybWF0IHRoZSBkYXRlIHByb3Blcmx5CiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZWRpdEZvcm0uc3RhcnRfZGF0ZSk7CiAgICAgICAgaWYgKGlzTmFOKHN0YXJ0RGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRlIGZvcm1hdCcpOwogICAgICAgIH0KICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N0YXJ0X2RhdGUnLCBzdGFydERhdGUudG9JU09TdHJpbmcoKSk7CiAgICAgICAgCiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdsb2NhdGlvbicsIGVkaXRGb3JtLmxvY2F0aW9uKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ25vdGlmeV9ub3cnLCBlZGl0Rm9ybS5ub3RpZnlfbm93ID8gJzEnIDogJzAnKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ25vdGlmeV8yNGhfYmVmb3JlJywgZWRpdEZvcm0ubm90aWZ5XzI0aF9iZWZvcmUgPyAnMScgOiAnMCcpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaGFzX3BvbGwnLCBlZGl0Rm9ybS5oYXNfcG9sbCA/ICcxJyA6ICcwJyk7CgogICAgICAgIC8vIEFkZCBwb2xsIGRhdGEgaWYgZXhpc3RzCiAgICAgICAgaWYgKGVkaXRGb3JtLmhhc19wb2xsKSB7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncG9sbF9xdWVzdGlvbicsIGxvY2FsRm9ybS52YWx1ZS5ldmVudC5wb2xsLnF1ZXN0aW9uKTsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc19tdWx0aXBsZV9jaG9pY2UnLCBsb2NhbEZvcm0udmFsdWUuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UgPyAnMScgOiAnMCcpOwogICAgICAgICAgICBsb2NhbEZvcm0udmFsdWUuZXZlbnQucG9sbC5vcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgcG9sbF9vcHRpb25zWyR7aW5kZXh9XWAsIG9wdGlvbik7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdXBsb2FkCiAgICAgICAgaWYgKGVkaXRGb3JtLmZpbGVzICYmIGVkaXRGb3JtLmZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgZWRpdEZvcm0uZmlsZXMuZm9yRWFjaCgoZmlsZSwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgZmlsZXNbJHtpbmRleH1dYCwgZmlsZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgcmVtb3ZhbAogICAgICAgIGlmIChlZGl0Rm9ybS5yZW1vdmVfZmlsZSkgewogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3JlbW92ZV9maWxlJywgJzEnKTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zdCBhbmQgZXZlbnQgaW4gYSBzaW5nbGUgcmVxdWVzdAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLmV2ZW50cy51cGRhdGUnLCBwcm9wcy5wb3N0LmlkKSwgZm9ybURhdGEsIHsKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywKICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llLm1hdGNoKC9YU1JGLVRPS0VOPShbXjtdKykvKVsxXSkKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBDcmVhdGUgdXBkYXRlZCBwb3N0IG9iamVjdCB3aXRoIHZvdGUgZGF0YSBmcm9tIHNlcnZlciByZXNwb25zZQogICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QsCiAgICAgICAgICAgIGV2ZW50OiB7CiAgICAgICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QuZXZlbnQsCiAgICAgICAgICAgICAgICBwb2xsOiBlZGl0Rm9ybS5oYXNfcG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGxvY2FsRm9ybS52YWx1ZS5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAvLyBVc2Ugdm90ZSBkYXRhIGZyb20gc2VydmVyIHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgICAgdm90ZXM6IHJlc3BvbnNlLmRhdGEucG9zdC5ldmVudC5wb2xsLnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiByZXNwb25zZS5kYXRhLnBvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgcG9zdAogICAgICAgIGVtaXQoJ3Bvc3QtdXBkYXRlZCcsIHVwZGF0ZWRQb3N0KTsKICAgICAgICAKICAgICAgICAvLyBSZXNldCBmb3JtIGFuZCBjbG9zZSBtb2RhbAogICAgICAgIGVkaXRGb3JtLnJlc2V0KCk7CiAgICAgICAgZW1pdCgnY2xvc2UnKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgZXZlbnQgcG9zdDonLCBlcnJvcik7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlc3BvbnNlOicsIGVycm9yLnJlc3BvbnNlLmRhdGEpOwogICAgICAgICAgICBhbGVydCgnRXJyb3IgdXBkYXRpbmcgZXZlbnQ6ICcgKyAoZXJyb3IucmVzcG9uc2UuZGF0YS5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdFcnJvciB1cGRhdGluZyBldmVudDogJyArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IHVwZGF0ZVJlZ3VsYXJQb3N0ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29udGVudCcsIGVkaXRGb3JtLmNvbnRlbnQpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY2F0ZWdvcnlfaWQnLCBlZGl0Rm9ybS5jYXRlZ29yeV9pZCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdsb2RnZV9pZCcsIGVkaXRGb3JtLmxvZGdlX2lkKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ19tZXRob2QnLCAnUFVUJyk7CgogICAgICAgIC8vIEhhbmRsZSBpbWFnZSB1cGxvYWQKICAgICAgICBpZiAoZWRpdEZvcm0uaW1hZ2UpIHsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIGVkaXRGb3JtLmltYWdlKTsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBmaWxlIHVwbG9hZHMKICAgICAgICBpZiAoZWRpdEZvcm0uZmlsZXMgJiYgZWRpdEZvcm0uZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBlZGl0Rm9ybS5maWxlcy5mb3JFYWNoKChmaWxlLCBpbmRleCkgPT4gewogICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBmaWxlc1ske2luZGV4fV1gLCBmaWxlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgZmlsZSByZW1vdmFsCiAgICAgICAgaWYgKGVkaXRGb3JtLnJlbW92ZV9maWxlKSB7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncmVtb3ZlX2ZpbGUnLCAnMScpOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMudXBkYXRlJywgcHJvcHMucG9zdC5pZCksIGZvcm1EYXRhLCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsCiAgICAgICAgICAgICAgICAnWC1YU1JGLVRPS0VOJzogZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvWFNSRi1UT0tFTj0oW147XSspLylbMV0pCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gVXBkYXRlIGxvY2FsIHBvc3Qgc3RhdGUgd2l0aCBwcm9wZXIgYXV0aG9yIGRhdGEgYW5kIHByZXNlcnZlIHJlYWN0aW9ucwogICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QsCiAgICAgICAgICAgIGF1dGhvcjogcmVzcG9uc2UuZGF0YS5wb3N0LmF1dGhvciB8fCBwcm9wcy51c2VyLCAvLyBFbnN1cmUgYXV0aG9yIGlzIHNldAogICAgICAgICAgICByZWFjdGlvbnM6IHByb3BzLnBvc3QucmVhY3Rpb25zIHx8IFtdIC8vIFByZXNlcnZlIGV4aXN0aW5nIHJlYWN0aW9ucwogICAgICAgIH07CgogICAgICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgcG9zdAogICAgICAgIGVtaXQoJ3Bvc3QtdXBkYXRlZCcsIHVwZGF0ZWRQb3N0KTsKICAgICAgICAKICAgICAgICAvLyBSZXNldCBmb3JtIGFuZCBjbG9zZSBtb2RhbAogICAgICAgIGVkaXRGb3JtLnJlc2V0KCk7CiAgICAgICAgZW1pdCgnY2xvc2UnKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgcG9zdDonLCBlcnJvcik7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc3BvbnNlIGRhdGE6JywgZXJyb3IucmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc3BvbnNlIHN0YXR1czonLCBlcnJvci5yZXNwb25zZS5zdGF0dXMpOwogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZXNwb25zZSBoZWFkZXJzOicsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpOwogICAgICAgICAgICBhbGVydCgnRXJyb3IgdXBkYXRpbmcgcG9zdDogJyArIChlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIHVwZGF0aW5nIHBvc3Q6ICcgKyBlcnJvci5tZXNzYWdlKTsKICAgICAgICB9CiAgICB9Cn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPE1vZGFsIDpzaG93PSJzaG93IiBAY2xvc2U9ImVtaXQoJ2Nsb3NlJykiPgogICAgICAgIDxkaXYgY2xhc3M9InAtNCBzbTpwLTYiPgogICAgICAgICAgICA8IS0tIEhpZGRlbiBFdmVudCBGaWxlIElucHV0IC0gTW92ZSB0aGlzIHRvIHRoZSB0b3AgbGV2ZWwgLS0+CiAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgICAgICAgIHJlZj0iZWRpdEV2ZW50RmlsZUlucHV0IgogICAgICAgICAgICAgICAgY2xhc3M9ImhpZGRlbiIKICAgICAgICAgICAgICAgIGFjY2VwdD0iLnBkZiwuZG9jLC5kb2N4LC50eHQiCiAgICAgICAgICAgICAgICBAY2hhbmdlPSJoYW5kbGVFZGl0RXZlbnRGaWxlVXBsb2FkIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItNCI+CiAgICAgICAgICAgICAgICBFZGl0IFBvc3QKICAgICAgICAgICAgPC9oMj4KCiAgICAgICAgICAgIDwhLS0gUmVndWxhciBQb3N0IENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgdi1pZj0iIXBvc3Q/LnBvbGwgJiYgIXBvc3Q/LmV2ZW50IiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLXN0YXJ0IHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaC0xMCB3LTEwIHJvdW5kZWQtZnVsbCIgOnNyYz0icHJvZmlsZVBob3RvVXJsIiBhbHQ9IlByb2ZpbGUgcGhvdG8iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fSB7eyB1c2VyLmxhc3RfbmFtZSB9fTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLmNvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSI0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IldoYXQncyBvbiB5b3VyIG1pbmQ/IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgYmxvY2sgdy1mdWxsIGJvcmRlci0wIGZvY3VzOnJpbmctMCB0ZXh0LWxnIHBsYWNlaG9sZGVyLWdyYXktNTAwIHJlc2l6ZS1ub25lIgogICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2UgUHJldmlldyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJlZGl0SW1hZ2VQcmV2aWV3VXJsIiBjbGFzcz0ibXQtNCByZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIDpzcmM9ImVkaXRJbWFnZVByZXZpZXdVcmwiIGFsdD0iUHJldmlldyIgY2xhc3M9Im1heC1oLTk2IHctYXV0byByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJyZW1vdmVFZGl0SW1hZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIgYmctZ3JheS04MDAgYmctb3BhY2l0eS01MCB0ZXh0LXdoaXRlIHJvdW5kZWQtZnVsbCBwLTEgaG92ZXI6Ymctb3BhY2l0eS03NSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik02IDE4TDE4IDZNNiA2bDEyIDEyIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBFbW9qaSBQaWNrZXIgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNob3dFZGl0RW1vamlQaWNrZXIiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBib3JkZXIgcm91bmRlZC1sZyBwLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIGdyaWQtY29scy04IGdhcC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImVtb2ppIGluIFsn8J+YiicsICfwn5iCJywgJ+KdpO+4jycsICfwn5GNJywgJ/CfjoknLCAn8J+ZjycsICfwn5KqJywgJ/CfkY8nXSIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0iZW1vamkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJpbnNlcnRFZGl0RW1vamkoZW1vamkpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LTJ4bCBob3ZlcjpiZy1ncmF5LTEwMCBwLTIgcm91bmRlZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbW9qaSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00IHNwYWNlLXktNCBzbTpzcGFjZS15LTAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC13cmFwIGdhcC0yIGp1c3RpZnktY2VudGVyIHNtOmp1c3RpZnktc3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ib3BlbkVkaXRJbWFnZUlucHV0IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTYgdy02IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNNCAzYTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMkg0em0xMiAxMkg0bDQtOCAzIDYgMi00IDMgNnoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QaG90bzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ic2hvd0VkaXRFbW9qaVBpY2tlciA9ICFzaG93RWRpdEVtb2ppUGlja2VyIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTYgdy02IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnpNNyA5YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem03LTFhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tLjQ2NCA1LjUzNWExIDEgMCAxMC0xLjQxNS0xLjQxNCAzIDMgMCAwMS00LjI0MiAwIDEgMSAwIDAwLTEuNDE1IDEuNDE0IDUgNSAwIDAwNy4wNzIgMHoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FbW9qaTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ib3BlbkVkaXRFdmVudEZpbGVJbnB1dCIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtZ3JheS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaC02IHctNiIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTQgNGEyIDIgMCAwMTItMmg0LjU4NkEyIDIgMCAwMTEyIDIuNTg2TDE1LjQxNCA2QTIgMiAwIDAxMTYgNy40MTRWMTZhMiAyIDAgMDEtMiAySDZhMiAyIDAgMDEtMi0yVjR6bTIgNmExIDEgMCAwMTEtMWg2YTEgMSAwIDExMCAySDdhMSAxIDAgMDEtMS0xem0xIDNhMSAxIDAgMTAwIDJoNmExIDEgMCAxMDAtMkg3eiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkZpbGVzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBnYXAtMiB3LWZ1bGwgc206dy1hdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZW1pdCgnY2xvc2UnKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3LWZ1bGwgc206dy1hdXRvIHB4LTQgcHktMiB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtZ3JheS05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iaGFuZGxlRWRpdFN1Ym1pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3LWZ1bGwgc206dy1hdXRvIGJnLWJsdWUtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgaG92ZXI6YmctYmx1ZS02MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBMaXN0IC0tPgogICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJlZGl0Rm9ybS5maWxlX25hbWUiIGNsYXNzPSJtdC00IHAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ncmF5LTUwIHAtMiByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgbWluLXctMCBmbGV4LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNTAwIGZsZXgtc2hyaW5rLTAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9Ik00IDRhMiAyIDAgMDEyLTJoNC41ODZBMiAyIDAgMDExMiAyLjU4NkwxNS40MTQgNkEyIDIgMCAwMTE2IDcuNDE0VjE2YTIgMiAwIDAxLTIgMkg2YTIgMiAwIDAxLTItMlY0em0yIDZhMSAxIDAgMDExLTFoNmExIDEgMCAxMTAgMkg3YTEgMSAwIDAxLTEtMXptMSAzYTEgMSAwIDEwMCAyaDZhMSAxIDAgMTAwLTJIN3oiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtbC0yIG1pbi13LTAgZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNzAwIHRydW5jYXRlIj57eyB0cnVuY2F0ZWRGaWxlTmFtZSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj57eyBmb3JtYXRGaWxlU2l6ZShlZGl0Rm9ybS5maWxlX3NpemUpIH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJyZW1vdmVFZGl0RmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtbC00IGZsZXgtc2hyaW5rLTAgdGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCBmb2N1czpvdXRsaW5lLW5vbmUiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImgtNSB3LTUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiAxOEwxOCA2TTYgNmwxMiAxMiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgICAgICAgICAgcmVmPSJlZGl0SW1hZ2VJbnB1dCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGlkZGVuIgogICAgICAgICAgICAgICAgICAgIGFjY2VwdD0iaW1hZ2UvKiIKICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSJoYW5kbGVFZGl0SW1hZ2VVcGxvYWQiCiAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUG9sbCBDb250ZW50IC0tPgogICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3Q/LnBvbGwiIGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0icG9sbF9xdWVzdGlvbiIgdmFsdWU9IlBvbGwgUXVlc3Rpb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dAogICAgICAgICAgICAgICAgICAgICAgICBpZD0icG9sbF9xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJsb2NhbEZvcm0ucG9sbC5xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBQb2xsIE9wdGlvbnMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb24sIGluZGV4KSBpbiBsb2NhbEZvcm0ucG9sbC5vcHRpb25zIiA6a2V5PSJpbmRleCIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImxvY2FsRm9ybS5wb2xsLm9wdGlvbnNbaW5kZXhdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGxhY2Vob2xkZXI9IidPcHRpb24gJyArIChpbmRleCArIDEpIgogICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImxvY2FsRm9ybS5wb2xsLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNzAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0ibG9jYWxGb3JtLnBvbGwub3B0aW9ucy5sZW5ndGggPiAyIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ3LTUgaC01IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYgMThMMTggNk02IDZsMTIgMTIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIEFkZCBPcHRpb24gQnV0dG9uIC0tPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0ibG9jYWxGb3JtLnBvbGwub3B0aW9ucy5wdXNoKCcnKSIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiB0ZXh0LWJsdWUtNTAwIGhvdmVyOnRleHQtYmx1ZS03MDAiCiAgICAgICAgICAgICAgICAgICAgdi1pZj0ibG9jYWxGb3JtLnBvbGwub3B0aW9ucy5sZW5ndGggPCAxMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICArIEFkZCBPcHRpb24KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgoKICAgICAgICAgICAgICAgIDwhLS0gTXVsdGlwbGUgQ2hvaWNlIENoZWNrYm94IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImlzX211bHRpcGxlX2Nob2ljZSIKICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibG9jYWxGb3JtLnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlIgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImlzX211bHRpcGxlX2Nob2ljZSIgdmFsdWU9IkFsbG93IE11bHRpcGxlIENob2ljZSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJlbWl0KCdjbG9zZScpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtZ3JheS05MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iaGFuZGxlRWRpdFN1Ym1pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLWxnIGhvdmVyOmJnLWJsdWUtNjAwIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlIENoYW5nZXMKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEV2ZW50IENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgdi1pZj0icG9zdD8uZXZlbnQiIGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfdGl0bGUiIHZhbHVlPSJFdmVudCBUaXRsZSIgLz4KICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJldmVudF90aXRsZSIKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS50aXRsZSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImV2ZW50X2Rlc2NyaXB0aW9uIiB2YWx1ZT0iRGVzY3JpcHRpb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPFRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJldmVudF9kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS5kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImV2ZW50X2RhdGUiIHZhbHVlPSJEYXRlIGFuZCBUaW1lIiAvPgogICAgICAgICAgICAgICAgICAgIDxEYXRlcGlja2VyCiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLnN0YXJ0X2RhdGUiCiAgICAgICAgICAgICAgICAgICAgICAgIDplbmFibGUtdGltZS1waWNrZXI9InRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgIDpmb3JtYXQ9Iid5eXl5LU1NLWRkIEhIOm1tJyIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfbG9jYXRpb24iIHZhbHVlPSJMb2NhdGlvbiIgLz4KICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJldmVudF9sb2NhdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS5sb2NhdGlvbiIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBQb2xsIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXItdCBwdC00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImV2ZW50X2hhc19wb2xsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdEZvcm0uaGFzX3BvbGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfaGFzX3BvbGwiIHZhbHVlPSJBZGQgUG9sbCIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJlZGl0Rm9ybS5oYXNfcG9sbCIgY2xhc3M9Im10LTQgc3BhY2UteS00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfcG9sbF9xdWVzdGlvbiIgdmFsdWU9IlBvbGwgUXVlc3Rpb24iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImV2ZW50X3BvbGxfcXVlc3Rpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibG9jYWxGb3JtLmV2ZW50LnBvbGwucXVlc3Rpb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnJlcXVpcmVkPSJlZGl0Rm9ybS5oYXNfcG9sbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIHZhbHVlPSJQb2xsIE9wdGlvbnMiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPSIob3B0aW9uLCBpbmRleCkgaW4gbG9jYWxGb3JtLmV2ZW50LnBvbGwub3B0aW9ucyIgOmtleT0iaW5kZXgiIGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbXQtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmxleC0xIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJsb2NhbEZvcm0uZXZlbnQucG9sbC5vcHRpb25zW2luZGV4XSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnJlcXVpcmVkPSJlZGl0Rm9ybS5oYXNfcG9sbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImxvY2FsRm9ybS5ldmVudC5wb2xsLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRleHQtcmVkLTYwMCBob3Zlcjp0ZXh0LXJlZC04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9ImxvY2FsRm9ybS5ldmVudC5wb2xsLm9wdGlvbnMubGVuZ3RoID4gMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImgtNSB3LTUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik02IDE4TDE4IDZNNiA2bDEyIDEyIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImxvY2FsRm9ybS5ldmVudC5wb2xsLm9wdGlvbnMucHVzaCgnJykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgdGV4dC1zbSB0ZXh0LWluZGlnby02MDAgaG92ZXI6dGV4dC1pbmRpZ28tODAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQWRkIE9wdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJldmVudF9pc19tdWx0aXBsZV9jaG9pY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibG9jYWxGb3JtLmV2ZW50LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1pbmRpZ28tMzAwIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1pbmRpZ28tMjAwIGZvY3VzOnJpbmctb3BhY2l0eS01MCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImV2ZW50X2lzX211bHRpcGxlX2Nob2ljZSIgdmFsdWU9IkFsbG93IE11bHRpcGxlIENob2ljZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIE5vdGlmaWNhdGlvbiBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgbWItNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5vdGlmeV9ub3ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLm5vdGlmeV9ub3ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpyaW5nLWluZGlnby01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5vdGlmeV9ub3ciIGNsYXNzPSJtbC0yIGJsb2NrIHRleHQtc20gdGV4dC1ncmF5LTkwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZnkgdXNlcnMgbm93IGFib3V0IHRoaXMgZXZlbnQKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9Im5vdGlmeV8yNGhfYmVmb3JlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS5ub3RpZnlfMjRoX2JlZm9yZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOnJpbmctaW5kaWdvLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibm90aWZ5XzI0aF9iZWZvcmUiIGNsYXNzPSJtbC0yIGJsb2NrIHRleHQtc20gdGV4dC1ncmF5LTkwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZnkgdXNlcnMgMjQgaG91cnMgYmVmb3JlIHRoZSBldmVudAogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBGaWxlIFVwbG9hZCBTZWN0aW9uIC0tPgogICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJwb3N0Py5ldmVudCIgY2xhc3M9Im10LTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9Im9wZW5FZGl0RXZlbnRGaWxlSW5wdXQiIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBweC0zIHB5LTIgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0ZXh0LXNtIGxlYWRpbmctNCBmb250LW1lZGl1bSByb3VuZGVkLW1kIHRleHQtZ3JheS03MDAgYmctZ3JheS0xMDAgaG92ZXI6YmctZ3JheS0yMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOnJpbmctZ3JheS01MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNCBoLTQgbXItMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik05IDEyaDZtLTYgNGg2bTIgNUg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgRmlsZXMKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWxlIExpc3QgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJwb3N0Py5maWxlX3BhdGgiIGNsYXNzPSJtdC0yIHNwYWNlLXktMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ncmF5LTUwIHAtMiByb3VuZGVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LXNtIHRleHQtZ3JheS03MDAiPnt7IHBvc3QuZmlsZV9uYW1lIH19PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIEBjbGljaz0icmVtb3ZlRWRpdEZpbGUiIGNsYXNzPSJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ3LTQgaC00IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik02IDE4TDE4IDZNNiA2bDEyIDEyIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImVtaXQoJ2Nsb3NlJykiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icHgtNCBweS0yIHRleHQtZ3JheS03MDAgaG92ZXI6dGV4dC1ncmF5LTkwMCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJoYW5kbGVFZGl0U3VibWl0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImJnLWJsdWUtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgaG92ZXI6YmctYmx1ZS02MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvTW9kYWw+CjwvdGVtcGxhdGU+IAAAAAAAAAAA85oAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABMHAAAAAAAAFccAAAAAAAAAAAAAAAA8L8"
				],
				[
					80,
					1,
					"insert",
					{
						"characters": "(optional"
					},
					"CQAAAHl6AAAAAAAAenoAAAAAAAAAAAAAenoAAAAAAAB7egAAAAAAAAAAAAB7egAAAAAAAHx6AAAAAAAAAAAAAHx6AAAAAAAAfXoAAAAAAAAAAAAAfXoAAAAAAAB+egAAAAAAAAAAAAB+egAAAAAAAH96AAAAAAAAAAAAAH96AAAAAAAAgHoAAAAAAAAAAAAAgHoAAAAAAACBegAAAAAAAAAAAACBegAAAAAAAIJ6AAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB5egAAAAAAAHl6AAAAAAAAAAAAAAAA8L8"
				],
				[
					81,
					1,
					"insert",
					{
						"characters": ")"
					},
					"AQAAAIJ6AAAAAAAAg3oAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACCegAAAAAAAIJ6AAAAAAAAAAAAAAAA8L8"
				],
				[
					1,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAAWmwAAPHNjcmlwdCBzZXR1cD4KaW1wb3J0IHsgcmVmLCBjb21wdXRlZCwgd2F0Y2ggfSBmcm9tICd2dWUnOwppbXBvcnQgeyB1c2VGb3JtIH0gZnJvbSAnQGluZXJ0aWFqcy92dWUzJzsKaW1wb3J0IE1vZGFsIGZyb20gJ0AvQ29tcG9uZW50cy9Nb2RhbC52dWUnOwppbXBvcnQgSW5wdXRMYWJlbCBmcm9tICdAL0NvbXBvbmVudHMvSW5wdXRMYWJlbC52dWUnOwppbXBvcnQgVGV4dElucHV0IGZyb20gJ0AvQ29tcG9uZW50cy9UZXh0SW5wdXQudnVlJzsKaW1wb3J0IFRleHRhcmVhIGZyb20gJ0AvQ29tcG9uZW50cy9UZXh0YXJlYS52dWUnOwppbXBvcnQgRGF0ZXBpY2tlciBmcm9tICdAdnVlcGljL3Z1ZS1kYXRlcGlja2VyJzsKaW1wb3J0ICdAdnVlcGljL3Z1ZS1kYXRlcGlja2VyL2Rpc3QvbWFpbi5jc3MnOwppbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOwoKY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wcyh7CiAgICBzaG93OiB7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgfSwKICAgIHBvc3Q6IHsKICAgICAgICB0eXBlOiBPYmplY3QsCiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0sCiAgICB1c2VyOiB7CiAgICAgICAgdHlwZTogT2JqZWN0LAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICB9Cn0pOwoKY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2xvc2UnLCAncG9zdC11cGRhdGVkJ10pOwoKY29uc3QgcHJvZmlsZVBob3RvVXJsID0gY29tcHV0ZWQoKCkgPT4gewogICAgcmV0dXJuIHByb3BzLnVzZXIucHJvZmlsZV9waG90b191cmwgfHwgYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3BzLnVzZXIuZmlyc3RfbmFtZSArICcgJyArIHByb3BzLnVzZXIubGFzdF9uYW1lKX0mYmFja2dyb3VuZD0wRDk0ODgmY29sb3I9ZmZmYDsKfSk7Cgpjb25zdCBlZGl0Rm9ybSA9IHVzZUZvcm0oewogICAgY29udGVudDogJycsCiAgICBpbWFnZTogbnVsbCwKICAgIGNhdGVnb3J5X2lkOiBudWxsLAogICAgbG9kZ2VfaWQ6IG51bGwsCiAgICBjYXRlZ29yeTogbnVsbCwKICAgIC8vIEZvciBwb2xscwogICAgcXVlc3Rpb246ICcnLAogICAgb3B0aW9uczogW10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgLy8gRm9yIGV2ZW50cwogICAgdGl0bGU6ICcnLAogICAgZGVzY3JpcHRpb246ICcnLAogICAgc3RhcnRfZGF0ZTogJycsCiAgICBlbmRfZGF0ZTogJycsCiAgICBsb2NhdGlvbjogJycsCiAgICBoYXNfcG9sbDogZmFsc2UsCiAgICBwb2xsX3F1ZXN0aW9uOiAnJywKICAgIHBvbGxfb3B0aW9uczogW10sCiAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGZhbHNlLAogICAgLy8gRm9yIGZpbGVzCiAgICBmaWxlczogW10sCiAgICByZW1vdmVfZmlsZTogZmFsc2UsCiAgICBmaWxlX3BhdGg6IG51bGwsCiAgICBmaWxlX25hbWU6IG51bGwsCiAgICBmaWxlX3R5cGU6IG51bGwsCiAgICBmaWxlX3NpemU6IG51bGwsCiAgICBub3RpZnlfbm93OiBmYWxzZSwKICAgIG5vdGlmeV8yNGhfYmVmb3JlOiBmYWxzZQp9KTsKCmNvbnN0IHNob3dFZGl0RW1vamlQaWNrZXIgPSByZWYoZmFsc2UpOwpjb25zdCBlZGl0SW1hZ2VQcmV2aWV3VXJsID0gcmVmKG51bGwpOwpjb25zdCBlZGl0RmlsZUlucHV0ID0gcmVmKG51bGwpOwpjb25zdCBlZGl0SW1hZ2VJbnB1dCA9IHJlZihudWxsKTsKY29uc3QgZWRpdEV2ZW50RmlsZUlucHV0ID0gcmVmKG51bGwpOwoKLy8gQWRkIG5ldyByZWZzIGZvciBsb2NhbCBmb3JtIGRhdGEKY29uc3QgbG9jYWxGb3JtID0gcmVmKHsKICAgIHBvbGw6IHsKICAgICAgICBxdWVzdGlvbjogJycsCiAgICAgICAgb3B0aW9uczogW10sCiAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBmYWxzZSwKICAgICAgICB2b3RlczogW10sCiAgICAgICAgdm90ZV9jb3VudHM6IHt9CiAgICB9LAogICAgZXZlbnQ6IHsKICAgICAgICBwb2xsOiB7CiAgICAgICAgICAgIHF1ZXN0aW9uOiAnJywKICAgICAgICAgICAgb3B0aW9uczogW10sCiAgICAgICAgICAgIGlzX211bHRpcGxlX2Nob2ljZTogZmFsc2UsCiAgICAgICAgICAgIHZvdGVzOiBbXSwKICAgICAgICAgICAgdm90ZV9jb3VudHM6IHt9CiAgICAgICAgfQogICAgfQp9KTsKCi8vIFVwZGF0ZSB0aGUgd2F0Y2ggZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBsb2NhbCBmb3JtIGRhdGEKd2F0Y2goKCkgPT4gcHJvcHMucG9zdCwgKG5ld1Bvc3QpID0+IHsKICAgIGlmIChuZXdQb3N0KSB7CiAgICAgICAgZWRpdEZvcm0ucmVzZXQoKTsKICAgICAgICBlZGl0Rm9ybS5jb250ZW50ID0gbmV3UG9zdC5jb250ZW50OwogICAgICAgIGVkaXRGb3JtLmNhdGVnb3J5X2lkID0gbmV3UG9zdC5jYXRlZ29yeV9pZDsKICAgICAgICBlZGl0Rm9ybS5sb2RnZV9pZCA9IG5ld1Bvc3QubG9kZ2VfaWQ7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9uYW1lID0gbmV3UG9zdC5maWxlX25hbWU7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9wYXRoID0gbmV3UG9zdC5maWxlX3BhdGg7CiAgICAgICAgZWRpdEZvcm0uZmlsZV90eXBlID0gbmV3UG9zdC5maWxlX3R5cGU7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9zaXplID0gbmV3UG9zdC5maWxlX3NpemU7CiAgICAgICAgCiAgICAgICAgaWYgKG5ld1Bvc3QuaW1hZ2VfdXJsKSB7CiAgICAgICAgICAgIGVkaXRJbWFnZVByZXZpZXdVcmwudmFsdWUgPSBuZXdQb3N0LmltYWdlX3VybDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKG5ld1Bvc3QucG9sbCkgewogICAgICAgICAgICBlZGl0Rm9ybS5xdWVzdGlvbiA9IG5ld1Bvc3QucG9sbC5xdWVzdGlvbjsKICAgICAgICAgICAgZWRpdEZvcm0ub3B0aW9ucyA9IFsuLi5uZXdQb3N0LnBvbGwub3B0aW9uc107CiAgICAgICAgICAgIGVkaXRGb3JtLmlzX211bHRpcGxlX2Nob2ljZSA9IG5ld1Bvc3QucG9sbC5pc19tdWx0aXBsZV9jaG9pY2U7CiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgbG9jYWwgZm9ybSBkYXRhCiAgICAgICAgICAgIGxvY2FsRm9ybS52YWx1ZS5wb2xsID0gewogICAgICAgICAgICAgICAgcXVlc3Rpb246IG5ld1Bvc3QucG9sbC5xdWVzdGlvbiwKICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsuLi5uZXdQb3N0LnBvbGwub3B0aW9uc10sCiAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IG5ld1Bvc3QucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UsCiAgICAgICAgICAgICAgICB2b3RlczogbmV3UG9zdC5wb2xsLnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IG5ld1Bvc3QucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAobmV3UG9zdC5ldmVudCkgewogICAgICAgICAgICBlZGl0Rm9ybS50aXRsZSA9IG5ld1Bvc3QuZXZlbnQudGl0bGU7CiAgICAgICAgICAgIGVkaXRGb3JtLmRlc2NyaXB0aW9uID0gbmV3UG9zdC5ldmVudC5kZXNjcmlwdGlvbjsKICAgICAgICAgICAgZWRpdEZvcm0uc3RhcnRfZGF0ZSA9IG5ld1Bvc3QuZXZlbnQuc3RhcnRfZGF0ZTsKICAgICAgICAgICAgZWRpdEZvcm0uZW5kX2RhdGUgPSBuZXdQb3N0LmV2ZW50LmVuZF9kYXRlOwogICAgICAgICAgICBlZGl0Rm9ybS5sb2NhdGlvbiA9IG5ld1Bvc3QuZXZlbnQubG9jYXRpb247CiAgICAgICAgICAgIGVkaXRGb3JtLmhhc19wb2xsID0gISFuZXdQb3N0LmV2ZW50LnBvbGw7CiAgICAgICAgICAgIGVkaXRGb3JtLnBvbGxfcXVlc3Rpb24gPSBuZXdQb3N0LmV2ZW50LnBvbGw/LnF1ZXN0aW9uIHx8ICcnOwogICAgICAgICAgICBlZGl0Rm9ybS5wb2xsX29wdGlvbnMgPSBuZXdQb3N0LmV2ZW50LnBvbGw/Lm9wdGlvbnMgfHwgWycnLCAnJ107CiAgICAgICAgICAgIGVkaXRGb3JtLmlzX211bHRpcGxlX2Nob2ljZSA9IG5ld1Bvc3QuZXZlbnQucG9sbD8uaXNfbXVsdGlwbGVfY2hvaWNlIHx8IGZhbHNlOwogICAgICAgICAgICBlZGl0Rm9ybS5ub3RpZnlfbm93ID0gbmV3UG9zdC5ldmVudC5ub3RpZnlfbm93IHx8IGZhbHNlOwogICAgICAgICAgICBlZGl0Rm9ybS5ub3RpZnlfMjRoX2JlZm9yZSA9IG5ld1Bvc3QuZXZlbnQubm90aWZ5XzI0aF9iZWZvcmUgfHwgZmFsc2U7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBJbml0aWFsaXplIGxvY2FsIGZvcm0gZGF0YSBmb3IgZXZlbnQgcG9sbAogICAgICAgICAgICBpZiAobmV3UG9zdC5ldmVudC5wb2xsKSB7CiAgICAgICAgICAgICAgICBsb2NhbEZvcm0udmFsdWUuZXZlbnQucG9sbCA9IHsKICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogbmV3UG9zdC5ldmVudC5wb2xsLnF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsuLi5uZXdQb3N0LmV2ZW50LnBvbGwub3B0aW9uc10sCiAgICAgICAgICAgICAgICAgICAgaXNfbXVsdGlwbGVfY2hvaWNlOiBuZXdQb3N0LmV2ZW50LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlLAogICAgICAgICAgICAgICAgICAgIHZvdGVzOiBuZXdQb3N0LmV2ZW50LnBvbGwudm90ZXMgfHwgW10sCiAgICAgICAgICAgICAgICAgICAgdm90ZV9jb3VudHM6IG5ld1Bvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSwgeyBpbW1lZGlhdGU6IHRydWUgfSk7Cgpjb25zdCBoYW5kbGVFZGl0SW1hZ2VVcGxvYWQgPSAoZXZlbnQpID0+IHsKICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07CiAgICBpZiAoZmlsZSkgewogICAgICAgIGVkaXRGb3JtLmltYWdlID0gZmlsZTsKICAgICAgICBlZGl0SW1hZ2VQcmV2aWV3VXJsLnZhbHVlID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgIH0KfTsKCmNvbnN0IHJlbW92ZUVkaXRJbWFnZSA9ICgpID0+IHsKICAgIGVkaXRGb3JtLmltYWdlID0gbnVsbDsKICAgIGVkaXRGb3JtLnJlbW92ZV9pbWFnZSA9IHRydWU7CiAgICBpZiAoZWRpdEltYWdlUHJldmlld1VybC52YWx1ZSkgewogICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZWRpdEltYWdlUHJldmlld1VybC52YWx1ZSk7CiAgICAgICAgZWRpdEltYWdlUHJldmlld1VybC52YWx1ZSA9IG51bGw7CiAgICB9Cn07Cgpjb25zdCBpbnNlcnRFZGl0RW1vamkgPSAoZW1vamkpID0+IHsKICAgIGVkaXRGb3JtLmNvbnRlbnQgKz0gZW1vamk7CiAgICBzaG93RWRpdEVtb2ppUGlja2VyLnZhbHVlID0gZmFsc2U7Cn07Cgpjb25zdCBoYW5kbGVFZGl0RmlsZVVwbG9hZCA9IChldmVudCkgPT4gewogICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTsKICAgIGlmIChmaWxlKSB7CiAgICAgICAgY29uc3QgYWxsb3dlZFR5cGVzID0gWydhcHBsaWNhdGlvbi9wZGYnLCAnYXBwbGljYXRpb24vbXN3b3JkJywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JywgJ3RleHQvcGxhaW4nXTsKICAgICAgICBpZiAoIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgICAgIGFsZXJ0KCdPbmx5IFBERiwgRE9DLCBET0NYLCBhbmQgVFhUIGZpbGVzIGFyZSBhbGxvd2VkJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDEwICogMTAyNCAqIDEwMjQpIHsKICAgICAgICAgICAgYWxlcnQoJ0ZpbGUgc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiAxME1CJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWRpdEZvcm0uZmlsZXMgPSBbZmlsZV07CiAgICAgICAgZWRpdEZvcm0ucmVtb3ZlX2ZpbGUgPSBmYWxzZTsKICAgICAgICBlZGl0Rm9ybS5maWxlX25hbWUgPSBmaWxlLm5hbWU7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9zaXplID0gZmlsZS5zaXplOwogICAgICAgIGlmIChwcm9wcy5wb3N0KSB7CiAgICAgICAgICAgIHByb3BzLnBvc3QuZmlsZV9wYXRoID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgICAgICAgICAgcHJvcHMucG9zdC5maWxlX25hbWUgPSBmaWxlLm5hbWU7CiAgICAgICAgICAgIHByb3BzLnBvc3QuZmlsZV9zaXplID0gZmlsZS5zaXplOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IHJlbW92ZUVkaXRGaWxlID0gKCkgPT4gewogICAgY29uc29sZS5sb2coJ1JlbW92aW5nIGZpbGUuLi4nKTsKICAgIGNvbnNvbGUubG9nKCdCZWZvcmUgcmVtb3ZhbDonLCB7CiAgICAgICAgZmlsZXM6IGVkaXRGb3JtLmZpbGVzLAogICAgICAgIGZpbGVfbmFtZTogZWRpdEZvcm0uZmlsZV9uYW1lLAogICAgICAgIGZpbGVfcGF0aDogZWRpdEZvcm0uZmlsZV9wYXRoLAogICAgICAgIGZpbGVfc2l6ZTogZWRpdEZvcm0uZmlsZV9zaXplLAogICAgICAgIHJlbW92ZV9maWxlOiBlZGl0Rm9ybS5yZW1vdmVfZmlsZQogICAgfSk7CgogICAgZWRpdEZvcm0uZmlsZXMgPSBbXTsKICAgIGVkaXRGb3JtLnJlbW92ZV9maWxlID0gdHJ1ZTsKICAgIGVkaXRGb3JtLmZpbGVfbmFtZSA9IG51bGw7CiAgICBlZGl0Rm9ybS5maWxlX3BhdGggPSBudWxsOwogICAgZWRpdEZvcm0uZmlsZV9zaXplID0gbnVsbDsKICAgIGlmIChwcm9wcy5wb3N0KSB7CiAgICAgICAgcHJvcHMucG9zdC5maWxlX3BhdGggPSBudWxsOwogICAgICAgIHByb3BzLnBvc3QuZmlsZV9uYW1lID0gbnVsbDsKICAgICAgICBwcm9wcy5wb3N0LmZpbGVfc2l6ZSA9IG51bGw7CiAgICB9CgogICAgY29uc29sZS5sb2coJ0FmdGVyIHJlbW92YWw6JywgewogICAgICAgIGZpbGVzOiBlZGl0Rm9ybS5maWxlcywKICAgICAgICBmaWxlX25hbWU6IGVkaXRGb3JtLmZpbGVfbmFtZSwKICAgICAgICBmaWxlX3BhdGg6IGVkaXRGb3JtLmZpbGVfcGF0aCwKICAgICAgICBmaWxlX3NpemU6IGVkaXRGb3JtLmZpbGVfc2l6ZSwKICAgICAgICByZW1vdmVfZmlsZTogZWRpdEZvcm0ucmVtb3ZlX2ZpbGUKICAgIH0pOwp9OwoKY29uc3QgaGFuZGxlRWRpdEV2ZW50RmlsZVVwbG9hZCA9IChldmVudCkgPT4gewogICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTsKICAgIGlmIChmaWxlKSB7CiAgICAgICAgY29uc3QgYWxsb3dlZFR5cGVzID0gWydhcHBsaWNhdGlvbi9wZGYnLCAnYXBwbGljYXRpb24vbXN3b3JkJywgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JywgJ3RleHQvcGxhaW4nXTsKICAgICAgICBpZiAoIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgICAgIGFsZXJ0KCdPbmx5IFBERiwgRE9DLCBET0NYLCBhbmQgVFhUIGZpbGVzIGFyZSBhbGxvd2VkJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IDEwICogMTAyNCAqIDEwMjQpIHsKICAgICAgICAgICAgYWxlcnQoJ0ZpbGUgc2l6ZSBtdXN0IGJlIGxlc3MgdGhhbiAxME1CJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWRpdEZvcm0uZmlsZXMgPSBbZmlsZV07CiAgICAgICAgZWRpdEZvcm0ucmVtb3ZlX2ZpbGUgPSBmYWxzZTsKICAgICAgICBlZGl0Rm9ybS5maWxlX25hbWUgPSBmaWxlLm5hbWU7CiAgICAgICAgZWRpdEZvcm0uZmlsZV9zaXplID0gZmlsZS5zaXplOwogICAgICAgIGlmIChwcm9wcy5wb3N0KSB7CiAgICAgICAgICAgIHByb3BzLnBvc3QuZmlsZV9wYXRoID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgICAgICAgICAgcHJvcHMucG9zdC5maWxlX25hbWUgPSBmaWxlLm5hbWU7CiAgICAgICAgICAgIHByb3BzLnBvc3QuZmlsZV9zaXplID0gZmlsZS5zaXplOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IG9wZW5FZGl0RmlsZUlucHV0ID0gKCkgPT4gewogICAgaWYgKGVkaXRGaWxlSW5wdXQudmFsdWUpIHsKICAgICAgICBlZGl0RmlsZUlucHV0LnZhbHVlLmNsaWNrKCk7CiAgICB9Cn07Cgpjb25zdCBvcGVuRWRpdEltYWdlSW5wdXQgPSAoKSA9PiB7CiAgICBpZiAoZWRpdEltYWdlSW5wdXQudmFsdWUpIHsKICAgICAgICBlZGl0SW1hZ2VJbnB1dC52YWx1ZS5jbGljaygpOwogICAgfQp9OwoKY29uc3Qgb3BlbkVkaXRFdmVudEZpbGVJbnB1dCA9ICgpID0+IHsKICAgIGNvbnNvbGUubG9nKCdPcGVuaW5nIGZpbGUgaW5wdXQuLi4nKTsKICAgIGlmIChlZGl0RXZlbnRGaWxlSW5wdXQudmFsdWUpIHsKICAgICAgICBlZGl0RXZlbnRGaWxlSW5wdXQudmFsdWUuY2xpY2soKTsKICAgIH0gZWxzZSB7CiAgICAgICAgY29uc29sZS5lcnJvcignRmlsZSBpbnB1dCByZWZlcmVuY2Ugbm90IGZvdW5kJyk7CiAgICB9Cn07Cgpjb25zdCBmb3JtYXRGaWxlU2l6ZSA9IChieXRlcykgPT4gewogICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gJzAgQnl0ZXMnOwogICAgY29uc3QgayA9IDEwMjQ7CiAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InXTsKICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTsKICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKSArICcgJyArIHNpemVzW2ldOwp9OwoKY29uc3QgdHJ1bmNhdGVkRmlsZU5hbWUgPSBjb21wdXRlZCgoKSA9PiB7CiAgICBpZiAoIXByb3BzLnBvc3Q/LmZpbGVfbmFtZSkgcmV0dXJuICcnOwogICAgY29uc3QgZmlsZU5hbWUgPSBwcm9wcy5wb3N0LmZpbGVfbmFtZTsKICAgIGNvbnN0IG1heExlbmd0aCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNjQwID8gMjAgOiAzMDsgLy8gU2hvcnRlciBvbiBtb2JpbGUKICAgIHJldHVybiBmaWxlTmFtZS5sZW5ndGggPiBtYXhMZW5ndGggPyBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoIC0gMykgKyAnLi4uJyA6IGZpbGVOYW1lOwp9KTsKCmNvbnN0IGhhbmRsZUVkaXRTdWJtaXQgPSBhc3luYyAoKSA9PiB7CiAgICAvLyBTeW5jIGxvY2FsRm9ybSBkYXRhIHdpdGggZWRpdEZvcm0gYmVmb3JlIHN1Ym1pc3Npb24KICAgIGlmIChwcm9wcy5wb3N0LnBvbGwpIHsKICAgICAgICBlZGl0Rm9ybS5xdWVzdGlvbiA9IGxvY2FsRm9ybS52YWx1ZS5wb2xsLnF1ZXN0aW9uOwogICAgICAgIGVkaXRGb3JtLm9wdGlvbnMgPSBbLi4ubG9jYWxGb3JtLnZhbHVlLnBvbGwub3B0aW9uc107CiAgICAgICAgZWRpdEZvcm0uaXNfbXVsdGlwbGVfY2hvaWNlID0gbG9jYWxGb3JtLnZhbHVlLnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlOwogICAgfQogICAgCiAgICBpZiAocHJvcHMucG9zdC5ldmVudCAmJiBlZGl0Rm9ybS5oYXNfcG9sbCkgewogICAgICAgIGVkaXRGb3JtLnBvbGxfcXVlc3Rpb24gPSBsb2NhbEZvcm0udmFsdWUuZXZlbnQucG9sbC5xdWVzdGlvbjsKICAgICAgICBlZGl0Rm9ybS5wb2xsX29wdGlvbnMgPSBbLi4ubG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwub3B0aW9uc107CiAgICAgICAgZWRpdEZvcm0uaXNfbXVsdGlwbGVfY2hvaWNlID0gbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlOwogICAgfQoKICAgIGlmIChwcm9wcy5wb3N0LmV2ZW50KSB7CiAgICAgICAgYXdhaXQgdXBkYXRlRXZlbnRQb3N0cygpOwogICAgfSBlbHNlIGlmIChwcm9wcy5wb3N0LnBvbGwpIHsKICAgICAgICBhd2FpdCB1cGRhdGVQb2xsUG9zdHMoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgdXBkYXRlUmVndWxhclBvc3QoKTsKICAgIH0KfTsKCmNvbnN0IHVwZGF0ZVBvbGxQb3N0cyA9IGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgICAgLy8gRmlyc3QgdXBkYXRlIHRoZSBwb3N0CiAgICAgICAgY29uc3QgcG9zdEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgcG9zdEZvcm1EYXRhLmFwcGVuZCgnY29udGVudCcsIGVkaXRGb3JtLmNvbnRlbnQpOwogICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoJ2NhdGVnb3J5X2lkJywgZWRpdEZvcm0uY2F0ZWdvcnlfaWQpOwogICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoJ2xvZGdlX2lkJywgZWRpdEZvcm0ubG9kZ2VfaWQpOwogICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoJ19tZXRob2QnLCAnUFVUJyk7CgogICAgICAgIC8vIEhhbmRsZSBpbWFnZSB1cGxvYWQKICAgICAgICBpZiAoZWRpdEZvcm0uaW1hZ2UpIHsKICAgICAgICAgICAgcG9zdEZvcm1EYXRhLmFwcGVuZCgnaW1hZ2UnLCBlZGl0Rm9ybS5pbWFnZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgZmlsZSB1cGxvYWRzCiAgICAgICAgaWYgKGVkaXRGb3JtLmZpbGVzICYmIGVkaXRGb3JtLmZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgZWRpdEZvcm0uZmlsZXMuZm9yRWFjaCgoZmlsZSwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgIHBvc3RGb3JtRGF0YS5hcHBlbmQoYGZpbGVzWyR7aW5kZXh9XWAsIGZpbGUpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBmaWxlIHJlbW92YWwKICAgICAgICBpZiAoZWRpdEZvcm0ucmVtb3ZlX2ZpbGUpIHsKICAgICAgICAgICAgcG9zdEZvcm1EYXRhLmFwcGVuZCgncmVtb3ZlX2ZpbGUnLCAnMScpOwogICAgICAgIH0KCiAgICAgICAgLy8gVXBkYXRlIHRoZSBwb3N0CiAgICAgICAgY29uc3QgcG9zdFJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLnBvc3RzLnVwZGF0ZScsIHByb3BzLnBvc3QuaWQpLCBwb3N0Rm9ybURhdGEsIHsKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywKICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llLm1hdGNoKC9YU1JGLVRPS0VOPShbXjtdKykvKVsxXSkKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBUaGVuIHVwZGF0ZSB0aGUgcG9sbAogICAgICAgIGNvbnN0IHBvbGxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIHBvbGxGb3JtRGF0YS5hcHBlbmQoJ3F1ZXN0aW9uJywgZWRpdEZvcm0ucXVlc3Rpb24pOwogICAgICAgIHBvbGxGb3JtRGF0YS5hcHBlbmQoJ2lzX211bHRpcGxlX2Nob2ljZScsIGVkaXRGb3JtLmlzX211bHRpcGxlX2Nob2ljZSA/ICcxJyA6ICcwJyk7CiAgICAgICAgZWRpdEZvcm0ub3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7CiAgICAgICAgICAgIHBvbGxGb3JtRGF0YS5hcHBlbmQoYG9wdGlvbnNbJHtpbmRleH1dYCwgb3B0aW9uKTsKICAgICAgICB9KTsKICAgICAgICBwb2xsRm9ybURhdGEuYXBwZW5kKCdfbWV0aG9kJywgJ1BVVCcpOwoKICAgICAgICBjb25zdCBwb2xsUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIucG9sbHMudXBkYXRlJywgcHJvcHMucG9zdC5wb2xsLmlkKSwgcG9sbEZvcm1EYXRhLCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsCiAgICAgICAgICAgICAgICAnWC1YU1JGLVRPS0VOJzogZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvWFNSRi1UT0tFTj0oW147XSspLylbMV0pCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gQ3JlYXRlIHVwZGF0ZWQgcG9zdCB3aXRoIHByZXNlcnZlZCB2b3RlIGRhdGEKICAgICAgICBjb25zdCB1cGRhdGVkUG9zdCA9IHsKICAgICAgICAgICAgLi4ucG9zdFJlc3BvbnNlLmRhdGEucG9zdCwKICAgICAgICAgICAgcG9sbDogewogICAgICAgICAgICAgICAgLi4ucG9sbFJlc3BvbnNlLmRhdGEucG9sbCwKICAgICAgICAgICAgICAgIHZvdGVzOiBsb2NhbEZvcm0udmFsdWUucG9sbC52b3RlcywKICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiBsb2NhbEZvcm0udmFsdWUucG9sbC52b3RlX2NvdW50cwogICAgICAgICAgICB9LAogICAgICAgICAgICBhdXRob3I6IHBvc3RSZXNwb25zZS5kYXRhLnBvc3QuYXV0aG9yIHx8IHByb3BzLnVzZXIsCiAgICAgICAgICAgIHJlYWN0aW9uczogcHJvcHMucG9zdC5yZWFjdGlvbnMgfHwgW10KICAgICAgICB9OwoKICAgICAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHBvc3QKICAgICAgICBlbWl0KCdwb3N0LXVwZGF0ZWQnLCB1cGRhdGVkUG9zdCk7CiAgICAgICAgCiAgICAgICAgLy8gUmVzZXQgZm9ybSBhbmQgY2xvc2UgbW9kYWwKICAgICAgICBlZGl0Rm9ybS5yZXNldCgpOwogICAgICAgIGVtaXQoJ2Nsb3NlJyk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIHBvbGwgcG9zdDonLCBlcnJvcik7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlc3BvbnNlOicsIGVycm9yLnJlc3BvbnNlLmRhdGEpOwogICAgICAgICAgICBhbGVydCgnRXJyb3IgdXBkYXRpbmcgcG9sbCBwb3N0OiAnICsgKGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvciBvY2N1cnJlZCcpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhbGVydCgnRXJyb3IgdXBkYXRpbmcgcG9sbCBwb3N0OiAnICsgZXJyb3IubWVzc2FnZSk7CiAgICAgICAgfQogICAgfQp9OwoKY29uc3QgdXBkYXRlRXZlbnRQb3N0cyA9IGFzeW5jICgpID0+IHsKICAgIHRyeSB7CiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2NvbnRlbnQnLCBlZGl0Rm9ybS5jb250ZW50KTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2NhdGVnb3J5X2lkJywgZWRpdEZvcm0uY2F0ZWdvcnlfaWQpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnbG9kZ2VfaWQnLCBlZGl0Rm9ybS5sb2RnZV9pZCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdfbWV0aG9kJywgJ1BVVCcpOwoKICAgICAgICAvLyBBZGQgZXZlbnQgZGF0YQogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgndGl0bGUnLCBlZGl0Rm9ybS50aXRsZSk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdkZXNjcmlwdGlvbicsIGVkaXRGb3JtLmRlc2NyaXB0aW9uKTsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgdGhlIGRhdGVzIHByb3Blcmx5CiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZWRpdEZvcm0uc3RhcnRfZGF0ZSk7CiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IGVkaXRGb3JtLmVuZF9kYXRlID8gbmV3IERhdGUoZWRpdEZvcm0uZW5kX2RhdGUpIDogbnVsbDsKICAgICAgICAKICAgICAgICBpZiAoaXNOYU4oc3RhcnREYXRlLmdldFRpbWUoKSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0YXJ0IGRhdGUgZm9ybWF0Jyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc3RhcnRfZGF0ZScsIHN0YXJ0RGF0ZS50b0lTT1N0cmluZygpKTsKICAgICAgICBpZiAoZW5kRGF0ZSkgewogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2VuZF9kYXRlJywgZW5kRGF0ZS50b0lTT1N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdsb2NhdGlvbicsIGVkaXRGb3JtLmxvY2F0aW9uKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ25vdGlmeV9ub3cnLCBlZGl0Rm9ybS5ub3RpZnlfbm93ID8gJzEnIDogJzAnKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ25vdGlmeV8yNGhfYmVmb3JlJywgZWRpdEZvcm0ubm90aWZ5XzI0aF9iZWZvcmUgPyAnMScgOiAnMCcpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaGFzX3BvbGwnLCBlZGl0Rm9ybS5oYXNfcG9sbCA/ICcxJyA6ICcwJyk7CgogICAgICAgIC8vIEFkZCBwb2xsIGRhdGEgaWYgZXhpc3RzCiAgICAgICAgaWYgKGVkaXRGb3JtLmhhc19wb2xsKSB7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncG9sbF9xdWVzdGlvbicsIGxvY2FsRm9ybS52YWx1ZS5ldmVudC5wb2xsLnF1ZXN0aW9uKTsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc19tdWx0aXBsZV9jaG9pY2UnLCBsb2NhbEZvcm0udmFsdWUuZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UgPyAnMScgOiAnMCcpOwogICAgICAgICAgICBsb2NhbEZvcm0udmFsdWUuZXZlbnQucG9sbC5vcHRpb25zLmZvckVhY2goKG9wdGlvbiwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgcG9sbF9vcHRpb25zWyR7aW5kZXh9XWAsIG9wdGlvbik7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdXBsb2FkCiAgICAgICAgaWYgKGVkaXRGb3JtLmZpbGVzICYmIGVkaXRGb3JtLmZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgZWRpdEZvcm0uZmlsZXMuZm9yRWFjaCgoZmlsZSwgaW5kZXgpID0+IHsKICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChgZmlsZXNbJHtpbmRleH1dYCwgZmlsZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIGZpbGUgcmVtb3ZhbAogICAgICAgIGlmIChlZGl0Rm9ybS5yZW1vdmVfZmlsZSkgewogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3JlbW92ZV9maWxlJywgJzEnKTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSB0aGUgcG9zdCBhbmQgZXZlbnQgaW4gYSBzaW5nbGUgcmVxdWVzdAogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdChyb3V0ZSgnbWVtYmVyLmV2ZW50cy51cGRhdGUnLCBwcm9wcy5wb3N0LmlkKSwgZm9ybURhdGEsIHsKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywKICAgICAgICAgICAgICAgICdYLVhTUkYtVE9LRU4nOiBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llLm1hdGNoKC9YU1JGLVRPS0VOPShbXjtdKykvKVsxXSkKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvLyBDcmVhdGUgdXBkYXRlZCBwb3N0IG9iamVjdCB3aXRoIHZvdGUgZGF0YSBmcm9tIHNlcnZlciByZXNwb25zZQogICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QsCiAgICAgICAgICAgIGV2ZW50OiB7CiAgICAgICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QuZXZlbnQsCiAgICAgICAgICAgICAgICBwb2xsOiBlZGl0Rm9ybS5oYXNfcG9sbCA/IHsKICAgICAgICAgICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QuZXZlbnQucG9sbCwKICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwucXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbG9jYWxGb3JtLnZhbHVlLmV2ZW50LnBvbGwub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICBpc19tdWx0aXBsZV9jaG9pY2U6IGxvY2FsRm9ybS52YWx1ZS5ldmVudC5wb2xsLmlzX211bHRpcGxlX2Nob2ljZSwKICAgICAgICAgICAgICAgICAgICAvLyBVc2Ugdm90ZSBkYXRhIGZyb20gc2VydmVyIHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgICAgdm90ZXM6IHJlc3BvbnNlLmRhdGEucG9zdC5ldmVudC5wb2xsLnZvdGVzIHx8IFtdLAogICAgICAgICAgICAgICAgICAgIHZvdGVfY291bnRzOiByZXNwb25zZS5kYXRhLnBvc3QuZXZlbnQucG9sbC52b3RlX2NvdW50cyB8fCB7fQogICAgICAgICAgICAgICAgfSA6IG51bGwKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgcG9zdAogICAgICAgIGVtaXQoJ3Bvc3QtdXBkYXRlZCcsIHVwZGF0ZWRQb3N0KTsKICAgICAgICAKICAgICAgICAvLyBSZXNldCBmb3JtIGFuZCBjbG9zZSBtb2RhbAogICAgICAgIGVkaXRGb3JtLnJlc2V0KCk7CiAgICAgICAgZW1pdCgnY2xvc2UnKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgZXZlbnQgcG9zdDonLCBlcnJvcik7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlc3BvbnNlOicsIGVycm9yLnJlc3BvbnNlLmRhdGEpOwogICAgICAgICAgICBhbGVydCgnRXJyb3IgdXBkYXRpbmcgZXZlbnQ6ICcgKyAoZXJyb3IucmVzcG9uc2UuZGF0YS5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFsZXJ0KCdFcnJvciB1cGRhdGluZyBldmVudDogJyArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KfTsKCmNvbnN0IHVwZGF0ZVJlZ3VsYXJQb3N0ID0gYXN5bmMgKCkgPT4gewogICAgdHJ5IHsKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29udGVudCcsIGVkaXRGb3JtLmNvbnRlbnQpOwogICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY2F0ZWdvcnlfaWQnLCBlZGl0Rm9ybS5jYXRlZ29yeV9pZCk7CiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdsb2RnZV9pZCcsIGVkaXRGb3JtLmxvZGdlX2lkKTsKICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ19tZXRob2QnLCAnUFVUJyk7CgogICAgICAgIC8vIEhhbmRsZSBpbWFnZSB1cGxvYWQKICAgICAgICBpZiAoZWRpdEZvcm0uaW1hZ2UpIHsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpbWFnZScsIGVkaXRGb3JtLmltYWdlKTsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBmaWxlIHVwbG9hZHMKICAgICAgICBpZiAoZWRpdEZvcm0uZmlsZXMgJiYgZWRpdEZvcm0uZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBlZGl0Rm9ybS5maWxlcy5mb3JFYWNoKChmaWxlLCBpbmRleCkgPT4gewogICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBmaWxlc1ske2luZGV4fV1gLCBmaWxlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgZmlsZSByZW1vdmFsCiAgICAgICAgaWYgKGVkaXRGb3JtLnJlbW92ZV9maWxlKSB7CiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncmVtb3ZlX2ZpbGUnLCAnMScpOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KHJvdXRlKCdtZW1iZXIucG9zdHMudXBkYXRlJywgcHJvcHMucG9zdC5pZCksIGZvcm1EYXRhLCB7CiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsCiAgICAgICAgICAgICAgICAnWC1YU1JGLVRPS0VOJzogZGVjb2RlVVJJQ29tcG9uZW50KGRvY3VtZW50LmNvb2tpZS5tYXRjaCgvWFNSRi1UT0tFTj0oW147XSspLylbMV0pCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gVXBkYXRlIGxvY2FsIHBvc3Qgc3RhdGUgd2l0aCBwcm9wZXIgYXV0aG9yIGRhdGEgYW5kIHByZXNlcnZlIHJlYWN0aW9ucwogICAgICAgIGNvbnN0IHVwZGF0ZWRQb3N0ID0gewogICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhLnBvc3QsCiAgICAgICAgICAgIGF1dGhvcjogcmVzcG9uc2UuZGF0YS5wb3N0LmF1dGhvciB8fCBwcm9wcy51c2VyLCAvLyBFbnN1cmUgYXV0aG9yIGlzIHNldAogICAgICAgICAgICByZWFjdGlvbnM6IHByb3BzLnBvc3QucmVhY3Rpb25zIHx8IFtdIC8vIFByZXNlcnZlIGV4aXN0aW5nIHJlYWN0aW9ucwogICAgICAgIH07CgogICAgICAgIC8vIEVtaXQgdGhlIHVwZGF0ZWQgcG9zdAogICAgICAgIGVtaXQoJ3Bvc3QtdXBkYXRlZCcsIHVwZGF0ZWRQb3N0KTsKICAgICAgICAKICAgICAgICAvLyBSZXNldCBmb3JtIGFuZCBjbG9zZSBtb2RhbAogICAgICAgIGVkaXRGb3JtLnJlc2V0KCk7CiAgICAgICAgZW1pdCgnY2xvc2UnKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBkYXRpbmcgcG9zdDonLCBlcnJvcik7CiAgICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc3BvbnNlIGRhdGE6JywgZXJyb3IucmVzcG9uc2UuZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc3BvbnNlIHN0YXR1czonLCBlcnJvci5yZXNwb25zZS5zdGF0dXMpOwogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZXNwb25zZSBoZWFkZXJzOicsIGVycm9yLnJlc3BvbnNlLmhlYWRlcnMpOwogICAgICAgICAgICBhbGVydCgnRXJyb3IgdXBkYXRpbmcgcG9zdDogJyArIChlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIHVwZGF0aW5nIHBvc3Q6ICcgKyBlcnJvci5tZXNzYWdlKTsKICAgICAgICB9CiAgICB9Cn07Cjwvc2NyaXB0PgoKPHRlbXBsYXRlPgogICAgPE1vZGFsIDpzaG93PSJzaG93IiBAY2xvc2U9ImVtaXQoJ2Nsb3NlJykiPgogICAgICAgIDxkaXYgY2xhc3M9InAtNCBzbTpwLTYiPgogICAgICAgICAgICA8IS0tIEhpZGRlbiBFdmVudCBGaWxlIElucHV0IC0gTW92ZSB0aGlzIHRvIHRoZSB0b3AgbGV2ZWwgLS0+CiAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgICAgICAgIHJlZj0iZWRpdEV2ZW50RmlsZUlucHV0IgogICAgICAgICAgICAgICAgY2xhc3M9ImhpZGRlbiIKICAgICAgICAgICAgICAgIGFjY2VwdD0iLnBkZiwuZG9jLC5kb2N4LC50eHQiCiAgICAgICAgICAgICAgICBAY2hhbmdlPSJoYW5kbGVFZGl0RXZlbnRGaWxlVXBsb2FkIgogICAgICAgICAgICAvPgoKICAgICAgICAgICAgPGgyIGNsYXNzPSJ0ZXh0LWxnIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAgbWItNCI+CiAgICAgICAgICAgICAgICBFZGl0IFBvc3QKICAgICAgICAgICAgPC9oMj4KCiAgICAgICAgICAgIDwhLS0gUmVndWxhciBQb3N0IENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgdi1pZj0iIXBvc3Q/LnBvbGwgJiYgIXBvc3Q/LmV2ZW50IiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLXN0YXJ0IHNwYWNlLXgtMyI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iaC0xMCB3LTEwIHJvdW5kZWQtZnVsbCIgOnNyYz0icHJvZmlsZVBob3RvVXJsIiBhbHQ9IlByb2ZpbGUgcGhvdG8iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXgtMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDAiPnt7IHVzZXIuZmlyc3RfbmFtZSB9fSB7eyB1c2VyLmxhc3RfbmFtZSB9fTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLmNvbnRlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSI0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IldoYXQncyBvbiB5b3VyIG1pbmQ/IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTIgYmxvY2sgdy1mdWxsIGJvcmRlci0wIGZvY3VzOnJpbmctMCB0ZXh0LWxnIHBsYWNlaG9sZGVyLWdyYXktNTAwIHJlc2l6ZS1ub25lIgogICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2UgUHJldmlldyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJlZGl0SW1hZ2VQcmV2aWV3VXJsIiBjbGFzcz0ibXQtNCByZWxhdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIDpzcmM9ImVkaXRJbWFnZVByZXZpZXdVcmwiIGFsdD0iUHJldmlldyIgY2xhc3M9Im1heC1oLTk2IHctYXV0byByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJyZW1vdmVFZGl0SW1hZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIgYmctZ3JheS04MDAgYmctb3BhY2l0eS01MCB0ZXh0LXdoaXRlIHJvdW5kZWQtZnVsbCBwLTEgaG92ZXI6Ymctb3BhY2l0eS03NSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTUgdy01IiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZT0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik02IDE4TDE4IDZNNiA2bDEyIDEyIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBFbW9qaSBQaWNrZXIgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InNob3dFZGl0RW1vamlQaWNrZXIiIGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiZy13aGl0ZSBib3JkZXIgcm91bmRlZC1sZyBwLTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIGdyaWQtY29scy04IGdhcC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9ImVtb2ppIGluIFsn8J+YiicsICfwn5iCJywgJ+KdpO+4jycsICfwn5GNJywgJ/CfjoknLCAn8J+ZjycsICfwn5KqJywgJ/CfkY8nXSIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT0iZW1vamkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJpbnNlcnRFZGl0RW1vamkoZW1vamkpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LTJ4bCBob3ZlcjpiZy1ncmF5LTEwMCBwLTIgcm91bmRlZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbW9qaSB9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00IHNwYWNlLXktNCBzbTpzcGFjZS15LTAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggZmxleC13cmFwIGdhcC0yIGp1c3RpZnktY2VudGVyIHNtOmp1c3RpZnktc3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ib3BlbkVkaXRJbWFnZUlucHV0IiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTYgdy02IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNNCAzYTIgMiAwIDAwLTIgMnYxMGEyIDIgMCAwMDIgMmgxMmEyIDIgMCAwMDItMlY1YTIgMiAwIDAwLTItMkg0em0xMiAxMkg0bDQtOCAzIDYgMi00IDMgNnoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QaG90bzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ic2hvd0VkaXRFbW9qaVBpY2tlciA9ICFzaG93RWRpdEVtb2ppUGlja2VyIiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIHRleHQtZ3JheS01MDAgaG92ZXI6dGV4dC1ncmF5LTcwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJoLTYgdy02IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnpNNyA5YTEgMSAwIDEwMC0yIDEgMSAwIDAwMCAyem03LTFhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwem0tLjQ2NCA1LjUzNWExIDEgMCAxMC0xLjQxNS0xLjQxNCAzIDMgMCAwMS00LjI0MiAwIDEgMSAwIDAwLTEuNDE1IDEuNDE0IDUgNSAwIDAwNy4wNzIgMHoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FbW9qaTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ib3BlbkVkaXRFdmVudEZpbGVJbnB1dCIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiB0ZXh0LWdyYXktNTAwIGhvdmVyOnRleHQtZ3JheS03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaC02IHctNiIgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD0iTTQgNGEyIDIgMCAwMTItMmg0LjU4NkEyIDIgMCAwMTEyIDIuNTg2TDE1LjQxNCA2QTIgMiAwIDAxMTYgNy40MTRWMTZhMiAyIDAgMDEtMiAySDZhMiAyIDAgMDEtMi0yVjR6bTIgNmExIDEgMCAwMTEtMWg2YTEgMSAwIDExMCAySDdhMSAxIDAgMDEtMS0xem0xIDNhMSAxIDAgMTAwIDJoNmExIDEgMCAxMDAtMkg3eiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkZpbGVzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBmbGV4LWNvbCBzbTpmbGV4LXJvdyBnYXAtMiB3LWZ1bGwgc206dy1hdXRvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZW1pdCgnY2xvc2UnKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3LWZ1bGwgc206dy1hdXRvIHB4LTQgcHktMiB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtZ3JheS05MDAgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWdyYXktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iaGFuZGxlRWRpdFN1Ym1pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ3LWZ1bGwgc206dy1hdXRvIGJnLWJsdWUtNTAwIHRleHQtd2hpdGUgcHgtNCBweS0yIHJvdW5kZWQtbGcgaG92ZXI6YmctYmx1ZS02MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gRmlsZSBMaXN0IC0tPgogICAgICAgICAgICAgICAgPGRpdiB2LWlmPSJlZGl0Rm9ybS5maWxlX25hbWUiIGNsYXNzPSJtdC00IHAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBiZy1ncmF5LTUwIHAtMiByb3VuZGVkLWxnIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgbWluLXctMCBmbGV4LTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaC01IHctNSB0ZXh0LWdyYXktNTAwIGZsZXgtc2hyaW5rLTAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9Ik00IDRhMiAyIDAgMDEyLTJoNC41ODZBMiAyIDAgMDExMiAyLjU4NkwxNS40MTQgNkEyIDIgMCAwMTE2IDcuNDE0VjE2YTIgMiAwIDAxLTIgMkg2YTIgMiAwIDAxLTItMlY0em0yIDZhMSAxIDAgMDExLTFoNmExIDEgMCAxMTAgMkg3YTEgMSAwIDAxLTEtMXptMSAzYTEgMSAwIDEwMCAyaDZhMSAxIDAgMTAwLTJIN3oiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtbC0yIG1pbi13LTAgZmxleC0xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1zbSB0ZXh0LWdyYXktNzAwIHRydW5jYXRlIj57eyB0cnVuY2F0ZWRGaWxlTmFtZSB9fTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC14cyB0ZXh0LWdyYXktNTAwIj57eyBmb3JtYXRGaWxlU2l6ZShlZGl0Rm9ybS5maWxlX3NpemUpIH19PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJyZW1vdmVFZGl0RmlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtbC00IGZsZXgtc2hyaW5rLTAgdGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCBmb2N1czpvdXRsaW5lLW5vbmUiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImgtNSB3LTUiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNiAxOEwxOCA2TTYgNmwxMiAxMiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgICAgICAgICAgcmVmPSJlZGl0SW1hZ2VJbnB1dCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGlkZGVuIgogICAgICAgICAgICAgICAgICAgIGFjY2VwdD0iaW1hZ2UvKiIKICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSJoYW5kbGVFZGl0SW1hZ2VVcGxvYWQiCiAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gUG9sbCBDb250ZW50IC0tPgogICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3Q/LnBvbGwiIGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0icG9sbF9xdWVzdGlvbiIgdmFsdWU9IlBvbGwgUXVlc3Rpb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dAogICAgICAgICAgICAgICAgICAgICAgICBpZD0icG9sbF9xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJsb2NhbEZvcm0ucG9sbC5xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPCEtLSBQb2xsIE9wdGlvbnMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb24sIGluZGV4KSBpbiBsb2NhbEZvcm0ucG9sbC5vcHRpb25zIiA6a2V5PSJpbmRleCIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImxvY2FsRm9ybS5wb2xsLm9wdGlvbnNbaW5kZXhdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cGxhY2Vob2xkZXI9IidPcHRpb24gJyArIChpbmRleCArIDEpIgogICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImxvY2FsRm9ybS5wb2xsLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNzAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0ibG9jYWxGb3JtLnBvbGwub3B0aW9ucy5sZW5ndGggPiAyIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJ3LTUgaC01IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYgMThMMTggNk02IDZsMTIgMTIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIEFkZCBPcHRpb24gQnV0dG9uIC0tPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0ibG9jYWxGb3JtLnBvbGwub3B0aW9ucy5wdXNoKCcnKSIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiB0ZXh0LWJsdWUtNTAwIGhvdmVyOnRleHQtYmx1ZS03MDAiCiAgICAgICAgICAgICAgICAgICAgdi1pZj0ibG9jYWxGb3JtLnBvbGwub3B0aW9ucy5sZW5ndGggPCAxMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICArIEFkZCBPcHRpb24KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgoKICAgICAgICAgICAgICAgIDwhLS0gTXVsdGlwbGUgQ2hvaWNlIENoZWNrYm94IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImlzX211bHRpcGxlX2Nob2ljZSIKICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0ibG9jYWxGb3JtLnBvbGwuaXNfbXVsdGlwbGVfY2hvaWNlIgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icm91bmRlZCBib3JkZXItZ3JheS0zMDAgdGV4dC1pbmRpZ28tNjAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItaW5kaWdvLTMwMCBmb2N1czpyaW5nIGZvY3VzOnJpbmctaW5kaWdvLTIwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAiCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImlzX211bHRpcGxlX2Nob2ljZSIgdmFsdWU9IkFsbG93IE11bHRpcGxlIENob2ljZSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSJlbWl0KCdjbG9zZScpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InB4LTQgcHktMiB0ZXh0LWdyYXktNzAwIGhvdmVyOnRleHQtZ3JheS05MDAiCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iaGFuZGxlRWRpdFN1Ym1pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlIHB4LTQgcHktMiByb3VuZGVkLWxnIGhvdmVyOmJnLWJsdWUtNjAwIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlIENoYW5nZXMKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEV2ZW50IENvbnRlbnQgLS0+CiAgICAgICAgICAgIDxkaXYgdi1pZj0icG9zdD8uZXZlbnQiIGNsYXNzPSJtdC00IHNwYWNlLXktNCI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfdGl0bGUiIHZhbHVlPSJFdmVudCBUaXRsZSIgLz4KICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJldmVudF90aXRsZSIKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS50aXRsZSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImV2ZW50X2Rlc2NyaXB0aW9uIiB2YWx1ZT0iRGVzY3JpcHRpb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPFRleHRhcmVhCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJldmVudF9kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS5kZXNjcmlwdGlvbiIKICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICA8SW5wdXRMYWJlbCBmb3I9ImV2ZW50X3N0YXJ0X2RhdGUiIHZhbHVlPSJTdGFydCBEYXRlIGFuZCBUaW1lIiAvPgogICAgICAgICAgICAgICAgICAgIDxEYXRlcGlja2VyCiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLnN0YXJ0X2RhdGUiCiAgICAgICAgICAgICAgICAgICAgICAgIDplbmFibGUtdGltZS1waWNrZXI9InRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgIDpmb3JtYXQ9Iid5eXl5LU1NLWRkIEhIOm1tJyIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfZW5kX2RhdGUiIHZhbHVlPSJFbmQgRGF0ZSBhbmQgVGltZShvcHRpb25hbCkiIC8+CiAgICAgICAgICAgICAgICAgICAgPERhdGVwaWNrZXIKICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdEZvcm0uZW5kX2RhdGUiCiAgICAgICAgICAgICAgICAgICAgICAgIDplbmFibGUtdGltZS1waWNrZXI9InRydWUiCiAgICAgICAgICAgICAgICAgICAgICAgIDpmb3JtYXQ9Iid5eXl5LU1NLWRkIEhIOm1tJyIKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIgogICAgICAgICAgICAgICAgICAgICAgICA6bWluLWRhdGU9ImVkaXRGb3JtLnN0YXJ0X2RhdGUiCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJldmVudF9sb2NhdGlvbiIgdmFsdWU9IkxvY2F0aW9uIiAvPgogICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImV2ZW50X2xvY2F0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwiCiAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLmxvY2F0aW9uIgogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIFBvbGwgU2VjdGlvbiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlci10IHB0LTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iZXZlbnRfaGFzX3BvbGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJlZGl0Rm9ybS5oYXNfcG9sbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1pbmRpZ28tMzAwIGZvY3VzOnJpbmcgZm9jdXM6cmluZy1pbmRpZ28tMjAwIGZvY3VzOnJpbmctb3BhY2l0eS01MCIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJldmVudF9oYXNfcG9sbCIgdmFsdWU9IkFkZCBQb2xsIiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9ImVkaXRGb3JtLmhhc19wb2xsIiBjbGFzcz0ibXQtNCBzcGFjZS15LTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgZm9yPSJldmVudF9wb2xsX3F1ZXN0aW9uIiB2YWx1ZT0iUG9sbCBRdWVzdGlvbiIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0SW5wdXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0iZXZlbnRfcG9sbF9xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJsb2NhbEZvcm0uZXZlbnQucG9sbC5xdWVzdGlvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cmVxdWlyZWQ9ImVkaXRGb3JtLmhhc19wb2xsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0TGFiZWwgdmFsdWU9IlBvbGwgT3B0aW9ucyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdi1mb3I9IihvcHRpb24sIGluZGV4KSBpbiBsb2NhbEZvcm0uZXZlbnQucG9sbC5vcHRpb25zIiA6a2V5PSJpbmRleCIgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBtdC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dElucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmbGV4LTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImxvY2FsRm9ybS5ldmVudC5wb2xsLm9wdGlvbnNbaW5kZXhdIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6cmVxdWlyZWQ9ImVkaXRGb3JtLmhhc19wb2xsIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ibG9jYWxGb3JtLmV2ZW50LnBvbGwub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGV4dC1yZWQtNjAwIGhvdmVyOnRleHQtcmVkLTgwMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj0ibG9jYWxGb3JtLmV2ZW50LnBvbGwub3B0aW9ucy5sZW5ndGggPiAyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaC01IHctNSIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYgMThMMTggNk02IDZsMTIgMTIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0ibG9jYWxGb3JtLmV2ZW50LnBvbGwub3B0aW9ucy5wdXNoKCcnKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMiB0ZXh0LXNtIHRleHQtaW5kaWdvLTYwMCBob3Zlcjp0ZXh0LWluZGlnby04MDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBZGQgT3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImV2ZW50X2lzX211bHRpcGxlX2Nob2ljZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPSJsb2NhbEZvcm0uZXZlbnQucG9sbC5pc19tdWx0aXBsZV9jaG9pY2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJvdW5kZWQgYm9yZGVyLWdyYXktMzAwIHRleHQtaW5kaWdvLTYwMCBzaGFkb3ctc20gZm9jdXM6Ym9yZGVyLWluZGlnby0zMDAgZm9jdXM6cmluZyBmb2N1czpyaW5nLWluZGlnby0yMDAgZm9jdXM6cmluZy1vcGFjaXR5LTUwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dExhYmVsIGZvcj0iZXZlbnRfaXNfbXVsdGlwbGVfY2hvaWNlIiB2YWx1ZT0iQWxsb3cgTXVsdGlwbGUgQ2hvaWNlIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDwhLS0gTm90aWZpY2F0aW9uIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00Ij4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGl0ZW1zLWNlbnRlciBtYi00Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ibm90aWZ5X25vdyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD0iZWRpdEZvcm0ubm90aWZ5X25vdyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJyb3VuZGVkIGJvcmRlci1ncmF5LTMwMCB0ZXh0LWluZGlnby02MDAgc2hhZG93LXNtIGZvY3VzOnJpbmctaW5kaWdvLTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibm90aWZ5X25vdyIgY2xhc3M9Im1sLTIgYmxvY2sgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeSB1c2VycyBub3cgYWJvdXQgdGhpcyBldmVudAogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggaXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0ibm90aWZ5XzI0aF9iZWZvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9ImVkaXRGb3JtLm5vdGlmeV8yNGhfYmVmb3JlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InJvdW5kZWQgYm9yZGVyLWdyYXktMzAwIHRleHQtaW5kaWdvLTYwMCBzaGFkb3ctc20gZm9jdXM6cmluZy1pbmRpZ28tNTAwIgogICAgICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJub3RpZnlfMjRoX2JlZm9yZSIgY2xhc3M9Im1sLTIgYmxvY2sgdGV4dC1zbSB0ZXh0LWdyYXktOTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeSB1c2VycyAyNCBob3VycyBiZWZvcmUgdGhlIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIEZpbGUgVXBsb2FkIFNlY3Rpb24gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3Q/LmV2ZW50IiBjbGFzcz0ibXQtNCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD0ib3BlbkVkaXRFdmVudEZpbGVJbnB1dCIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtc20gbGVhZGluZy00IGZvbnQtbWVkaXVtIHJvdW5kZWQtbWQgdGV4dC1ncmF5LTcwMCBiZy1ncmF5LTEwMCBob3ZlcjpiZy1ncmF5LTIwMCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6cmluZy1ncmF5LTUwMCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0idy00IGgtNCBtci0yIiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBGaWxlcwogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbGUgTGlzdCAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9InBvc3Q/LmZpbGVfcGF0aCIgY2xhc3M9Im10LTIgc3BhY2UteS0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGJnLWdyYXktNTAgcC0yIHJvdW5kZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtc20gdGV4dC1ncmF5LTcwMCI+e3sgcG9zdC5maWxlX25hbWUgfX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgQGNsaWNrPSJyZW1vdmVFZGl0RmlsZSIgY2xhc3M9InRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC03MDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9InctNCBoLTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiB2aWV3Qm94PSIwIDAgMjQgMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTYgMThMMTggNk02IDZsMTIgMTIiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB0LTQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZsZXggc3BhY2UteC0yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0iZW1pdCgnY2xvc2UnKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJweC00IHB5LTIgdGV4dC1ncmF5LTcwMCBob3Zlcjp0ZXh0LWdyYXktOTAwIgogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9ImhhbmRsZUVkaXRTdWJtaXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYmctYmx1ZS01MDAgdGV4dC13aGl0ZSBweC00IHB5LTIgcm91bmRlZC1sZyBob3ZlcjpiZy1ibHVlLTYwMCIKICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZSBDaGFuZ2VzCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9Nb2RhbD4KPC90ZW1wbGF0ZT4gAAAAAAAAAAAPmwAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAAEHkAAAAAAAAQeQAAAAAAAAAAAAAAAPC/"
				]
			]
		},
		{
			"file": ".env",
			"settings":
			{
				"buffer_size": 3329,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					10,
					1,
					"paste",
					null,
					"AgAAADEDAAAAAAAA2QMAAAAAAAAAAAAA2QMAAAAAAADZAwAAAAAAAKwAAABNQUlMX01BSUxFUj1sb2cKTUFJTF9TQ0hFTUU9bnVsbApNQUlMX0hPU1Q9MTI3LjAuMC4xCk1BSUxfUE9SVD0yNTI1Ck1BSUxfVVNFUk5BTUU9bnVsbApNQUlMX1BBU1NXT1JEPW51bGwKTUFJTF9GUk9NX0FERFJFU1M9ImhlbGxvQGV4YW1wbGUuY29tIgpNQUlMX0ZST01fTkFNRT0iJHtBUFBfTkFNRX0i",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADdAwAAAAAAADEDAAAAAAAAAAAAAAAA8L8"
				],
				[
					13,
					1,
					"paste",
					null,
					"AgAAADEDAAAAAAAARwQAAAAAAAAAAAAARwQAAAAAAABHBAAAAAAAAKgAAABNQUlMX01BSUxFUj1tYWlsZ3VuCk1BSUxHVU5fRE9NQUlOPXlvdXItZG9tYWluLm1haWxndW4ub3JnCk1BSUxHVU5fU0VDUkVUPXlvdXItbWFpbGd1bi1zZWNyZXQta2V5Ck1BSUxfRlJPTV9BRERSRVNTPW5vcmVwbHlAeW91ci1kb21haW4uY29tCk1BSUxfRlJPTV9OQU1FPSIke0FQUF9OQU1FfSI",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADZAwAAAAAAADEDAAAAAAAAAAAAAAAA8L8"
				]
			]
		},
		{
			"file": "app/Mail/EventNotificationMail.php",
			"settings":
			{
				"buffer_size": 10727,
				"encoding": "UTF-8",
				"line_ending": "Unix"
			},
			"undo_stack":
			[
				[
					9,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAAA4JQAAPD9waHAKCm5hbWVzcGFjZSBBcHBcTWFpbDsKCnVzZSBJbGx1bWluYXRlXEJ1c1xRdWV1ZWFibGU7CnVzZSBJbGx1bWluYXRlXE1haWxcTWFpbGFibGU7CnVzZSBJbGx1bWluYXRlXFF1ZXVlXFNlcmlhbGl6ZXNNb2RlbHM7CnVzZSBBcHBcTW9kZWxzXEV2ZW50Owp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcTG9nOwoKY2xhc3MgRXZlbnROb3RpZmljYXRpb25NYWlsIGV4dGVuZHMgTWFpbGFibGUKewogICAgdXNlIFF1ZXVlYWJsZSwgU2VyaWFsaXplc01vZGVsczsKCiAgICBwdWJsaWMgJGV2ZW50OwogICAgcHVibGljICR0eXBlOwogICAgcHVibGljICRkYXRlOwogICAgcHVibGljICRsb2NhdGlvbjsKICAgIHB1YmxpYyAkbWVzc2FnZTsKICAgIHB1YmxpYyAkdXNlcjsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJGVuZ2xpc2hNb250aCkKICAgIHsKICAgICAgICAkbW9udGhzID0gWwogICAgICAgICAgICAnSmFudWFyeScgPT4gJ2lhbnVhcmllJywKICAgICAgICAgICAgJ0ZlYnJ1YXJ5JyA9PiAnZmVicnVhcmllJywKICAgICAgICAgICAgJ01hcmNoJyA9PiAnbWFydGllJywKICAgICAgICAgICAgJ0FwcmlsJyA9PiAnYXByaWxpZScsCiAgICAgICAgICAgICdNYXknID0+ICdtYWknLAogICAgICAgICAgICAnSnVuZScgPT4gJ2l1bmllJywKICAgICAgICAgICAgJ0p1bHknID0+ICdpdWxpZScsCiAgICAgICAgICAgICdBdWd1c3QnID0+ICdhdWd1c3QnLAogICAgICAgICAgICAnU2VwdGVtYmVyJyA9PiAnc2VwdGVtYnJpZScsCiAgICAgICAgICAgICdPY3RvYmVyJyA9PiAnb2N0b21icmllJywKICAgICAgICAgICAgJ05vdmVtYmVyJyA9PiAnbm9pZW1icmllJywKICAgICAgICAgICAgJ0RlY2VtYmVyJyA9PiAnZGVjZW1icmllJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRtb250aHNbJGVuZ2xpc2hNb250aF0gPz8gJGVuZ2xpc2hNb250aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoRXZlbnQgJGV2ZW50LCAkdHlwZSwgJHVzZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmV2ZW50ID0gJGV2ZW50OwogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICAgICAgJHRoaXMtPnVzZXIgPSAkdXNlcjsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgZGF0ZSBpbiBSb21hbmlhbgogICAgICAgICRkYXRlID0gJGV2ZW50LT5zdGFydF9kYXRlOwogICAgICAgICRkYXkgPSAkZGF0ZS0+Zm9ybWF0KCdkJyk7CiAgICAgICAgJG1vbnRoID0gJHRoaXMtPmdldFJvbWFuaWFuTW9udGgoJGRhdGUtPmZvcm1hdCgnRicpKTsKICAgICAgICAkeWVhciA9ICRkYXRlLT5mb3JtYXQoJ1knKTsKICAgICAgICAkdGltZSA9ICRkYXRlLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICR0aGlzLT5kYXRlID0gInskZGF5fSB7JG1vbnRofSB7JHllYXJ9IHskdGltZX0iOwogICAgICAgIAogICAgICAgICR0aGlzLT5sb2NhdGlvbiA9ICRldmVudC0+bG9jYXRpb247CiAgICAgICAgJHRoaXMtPm1lc3NhZ2UgPSAkdHlwZSA9PT0gJ25vdycgCiAgICAgICAgICAgID8gIkV2ZW5pbWVudCBub3U6IHskZXZlbnQtPnRpdGxlfSIKICAgICAgICAgICAgOiAiUmVtaW5kZXI6IEV2ZW5pbWVudHVsIHskZXZlbnQtPnRpdGxlfSDDrm5jZXBlIMOubiAyNCBkZSBvcmUiOwoKICAgICAgICBMb2c6OmluZm8oJ0V2ZW50Tm90aWZpY2F0aW9uTWFpbCBjb25zdHJ1Y3RlZCcsIFsKICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAndHlwZScgPT4gJHR5cGUsCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICBdKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEdvb2dsZUNhbGVuZGFyVXJsKCkKICAgIHsKICAgICAgICAkc3RhcnREYXRlID0gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlOwogICAgICAgICRlbmREYXRlID0gJHRoaXMtPmV2ZW50LT5lbmRfZGF0ZSA/PyAkc3RhcnREYXRlLT5jb3B5KCktPmFkZEhvdXIoKTsKICAgICAgICAKICAgICAgICAkcGFyYW1zID0gWwogICAgICAgICAgICAnYWN0aW9uJyA9PiAnVEVNUExBVEUnLAogICAgICAgICAgICAndGV4dCcgPT4gJHRoaXMtPmV2ZW50LT50aXRsZSwKICAgICAgICAgICAgJ2RhdGVzJyA9PiAkc3RhcnREYXRlLT5mb3JtYXQoJ1ltZFxUSGlzXFonKSAuICcvJyAuICRlbmREYXRlLT5mb3JtYXQoJ1ltZFxUSGlzXFonKSwKICAgICAgICAgICAgJ2RldGFpbHMnID0+ICR0aGlzLT5ldmVudC0+ZGVzY3JpcHRpb24gPz8gJycsCiAgICAgICAgICAgICdsb2NhdGlvbicgPT4gJHRoaXMtPmV2ZW50LT5sb2NhdGlvbiA/PyAnJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICdodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvcmVuZGVyPycgLiBodHRwX2J1aWxkX3F1ZXJ5KCRwYXJhbXMpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0QXBwbGVDYWxlbmRhclVybCgpCiAgICB7CiAgICAgICAgJHN0YXJ0RGF0ZSA9ICR0aGlzLT5ldmVudC0+c3RhcnRfZGF0ZTsKICAgICAgICAkZW5kRGF0ZSA9ICR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgPz8gJHN0YXJ0RGF0ZS0+Y29weSgpLT5hZGRIb3VyKCk7CiAgICAgICAgCiAgICAgICAgJGljc0NvbnRlbnQgPSBbCiAgICAgICAgICAgICdCRUdJTjpWQ0FMRU5EQVInLAogICAgICAgICAgICAnVkVSU0lPTjoyLjAnLAogICAgICAgICAgICAnUFJPRElEOi0vL2hhY2tzdy9oYW5kY2FsLy9OT05TR01MIHYxLjAvL0VOJywKICAgICAgICAgICAgJ0NBTFNDQUxFOkdSRUdPUklBTicsCiAgICAgICAgICAgICdCRUdJTjpWRVZFTlQnLAogICAgICAgICAgICAnRFRTVEFSVDonIC4gJHN0YXJ0RGF0ZS0+Zm9ybWF0KCdZbWRcVEhpc1xaJyksCiAgICAgICAgICAgICdEVEVORDonIC4gJGVuZERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpLAogICAgICAgICAgICAnU1VNTUFSWTonIC4gc3RyX3JlcGxhY2UoJywnLCAnXCwnLCAkdGhpcy0+ZXZlbnQtPnRpdGxlKSwKICAgICAgICAgICAgJ0RFU0NSSVBUSU9OOicgLiBzdHJfcmVwbGFjZShbJywnLCAiXG4iXSwgWydcLCcsICdcbiddLCAkdGhpcy0+ZXZlbnQtPmRlc2NyaXB0aW9uID8/ICcnKSwKICAgICAgICAgICAgJ0xPQ0FUSU9OOicgLiBzdHJfcmVwbGFjZSgnLCcsICdcLCcsICR0aGlzLT5ldmVudC0+bG9jYXRpb24gPz8gJycpLAogICAgICAgICAgICAnRU5EOlZFVkVOVCcsCiAgICAgICAgICAgICdFTkQ6VkNBTEVOREFSJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICdkYXRhOnRleHQvY2FsZW5kYXI7Y2hhcnNldD11dGYtOCwnIC4gdXJsZW5jb2RlKGltcGxvZGUoIlxyXG4iLCAkaWNzQ29udGVudCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZCgpCiAgICB7CiAgICAgICAgJGh0bWwgPSAiCiAgICAgICAgICAgIDwhRE9DVFlQRSBodG1sPgogICAgICAgICAgICA8aHRtbD4KICAgICAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgICAgICA8bWV0YSBjaGFyc2V0PSd1dGYtOCc+CiAgICAgICAgICAgICAgICA8bWV0YSBuYW1lPSd2aWV3cG9ydCcgY29udGVudD0nd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCc+CiAgICAgICAgICAgICAgICA8dGl0bGU+eyR0aGlzLT5tZXNzYWdlfTwvdGl0bGU+CiAgICAgICAgICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgICAgICAgICAgYm9keSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMzMzM7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuaGVhZGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzBEOTQ4ODsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY29udGVudCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA1cHggNXB4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuZXZlbnQtZGV0YWlscyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5idXR0b24gewogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMjRweDsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzBEOTQ4ODsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmNhbGVuZGFyLWJ1dHRvbnMgewogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICAgICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5jYWxlbmRhci1idXR0b24gewogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuZ29vZ2xlLWNhbGVuZGFyIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQyODVGNDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmFwcGxlLWNhbGVuZGFyIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmNhbGVuZGFyLWJ1dHRvbiBzdmcgewogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmZvb3RlciB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICM2NDc0OGI7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAgICAgPC9oZWFkPgogICAgICAgICAgICA8Ym9keT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRhaW5lcic+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0naGVhZGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgPGgxPnskdGhpcy0+bWVzc2FnZX08L2gxPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbnRlbnQnPgogICAgICAgICAgICAgICAgICAgICAgICA8cD5CdW7EgyB7JHRoaXMtPnVzZXItPmZpcnN0X25hbWV9LDwvcD4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2V2ZW50LWRldGFpbHMnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPnskdGhpcy0+ZXZlbnQtPnRpdGxlfTwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkRhdGE6PC9zdHJvbmc+IHskdGhpcy0+ZGF0ZX08L3A+IjsKCiAgICAgICAgaWYgKCR0aGlzLT5sb2NhdGlvbikgewogICAgICAgICAgICAkaHRtbCAuPSAiPHA+PHN0cm9uZz5Mb2NhyJtpZTo8L3N0cm9uZz4geyR0aGlzLT5sb2NhdGlvbn08L3A+IjsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+ZXZlbnQtPmRlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICRodG1sIC49ICI8cD48c3Ryb25nPkRlc2NyaWVyZTo8L3N0cm9uZz48YnI+eyR0aGlzLT5ldmVudC0+ZGVzY3JpcHRpb259PC9wPiI7CiAgICAgICAgfQoKICAgICAgICAkaHRtbCAuPSAiCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY2FsZW5kYXItYnV0dG9ucyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSciIC4gJHRoaXMtPmdldEdvb2dsZUNhbGVuZGFyVXJsKCkgLiAiJyB0YXJnZXQ9J19ibGFuaycgY2xhc3M9J2NhbGVuZGFyLWJ1dHRvbiBnb29nbGUtY2FsZW5kYXInPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J2N1cnJlbnRDb2xvcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9J00xMiAwQzUuMzcyIDAgMCA1LjM3MiAwIDEyczUuMzcyIDEyIDEyIDEyIDEyLTUuMzcyIDEyLTEyUzE4LjYyOCAwIDEyIDB6bTAgMmM1LjUxNCAwIDEwIDQuNDg2IDEwIDEwcy00LjQ4NiAxMC0xMCAxMFMyIDE3LjUxNCAyIDEyIDYuNDg2IDIgMTIgMnptMCAzYy0zLjg2NiAwLTcgMy4xMzQtNyA3czMuMTM0IDcgNyA3IDctMy4xMzQgNy03LTMuMTM0LTctNy03em0wIDJjMi43NjEgMCA1IDIuMjM5IDUgNXMtMi4yMzkgNS01IDUtNS0yLjIzOS01LTUgMi4yMzktNSA1LTV6Jy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgyDDrm4gR29vZ2xlIENhbGVuZGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSciIC4gJHRoaXMtPmdldEFwcGxlQ2FsZW5kYXJVcmwoKSAuICInIGRvd25sb2FkPSdldmVudC5pY3MnIGNsYXNzPSdjYWxlbmRhci1idXR0b24gYXBwbGUtY2FsZW5kYXInPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J2N1cnJlbnRDb2xvcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9J00xOC43MSAxOS41Yy0uODMgMS4yNC0xLjcxIDIuNDUtMy4wNSAyLjQ3LTEuMzQuMDMtMS43Ny0uNzktMy4yOS0uNzktMS41MyAwLTIgLjc3LTMuMjcuODItMS4zMS4wNS0yLjMtMS4zMi0zLjE0LTIuNTNDNC4yNSAxNyAyLjk0IDEyLjQ1IDQuNyA5LjM5Yy44Ny0xLjUyIDIuNDMtMi40OCA0LjEyLTIuNTEgMS4yOC0uMDIgMi41Ljg3IDMuMjkuODcuNzggMCAyLjI2LTEuMDcgMy44MS0uOTEuNjUuMDMgMi40Ny4yNiAzLjY0IDEuOTgtLjA5LjA2LTIuMTcgMS4yOC0yLjE1IDMuODEuMDMgMy4wMiAyLjY1IDQuMDMgMi42OCA0LjA0LS4wMy4wNy0uNDIgMS40NC0xLjM4IDIuODNNMTMgMy41Yy43My0uODMgMS45NC0xLjQ2IDIuOTQtMS41LjEzIDEuMTctLjM0IDIuMzUtMS4wNCAzLjE5LS42OS44NS0xLjgzIDEuNTEtMi45NSAxLjQyLS4xNS0xLjE1LjQxLTIuMzUgMS4wNS0zLjExeicvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXVnxIMgw65uIEFwcGxlIENhbGVuZGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSciIC4gdXJsKCcvZXZlbnRzJykgLiAiJyBjbGFzcz0nYnV0dG9uJz5WZXppIERldGFsaWlsZSBFdmVuaW1lbnR1bHVpPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2Zvb3Rlcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5BY2VzdCBlbWFpbCBhIGZvc3QgdHJpbWlzIGPEg3RyZSB7JHRoaXMtPnVzZXItPmVtYWlsfS4gRGFjxIMgZG9yacibaSBzxIMgZGV6YWN0aXZhyJtpIG5vdGlmaWPEg3JpbGUgcHJpbiBlbWFpbCwgdsSDIHJ1Z8SDbSBzxIMgYWN0dWFsaXphyJtpIHNldMSDcmlsZSBwcm9maWx1bHVpLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9ib2R5PgogICAgICAgICAgICA8L2h0bWw+IjsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5zdWJqZWN0KCR0aGlzLT5tZXNzYWdlKQogICAgICAgICAgICAgICAgICAgIC0+aHRtbCgkaHRtbCk7CiAgICB9Cn0gAAAAAAAAAACfKAAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACdCQAAAAAAAJ0JAAAAAAAAAAAAAAAA8L8"
				],
				[
					10,
					1,
					"revert",
					null,
					"AwAAAAAAAAAAAAAAAAAAAAAAAACyKAAAPD9waHAKCm5hbWVzcGFjZSBBcHBcTWFpbDsKCnVzZSBJbGx1bWluYXRlXEJ1c1xRdWV1ZWFibGU7CnVzZSBJbGx1bWluYXRlXE1haWxcTWFpbGFibGU7CnVzZSBJbGx1bWluYXRlXFF1ZXVlXFNlcmlhbGl6ZXNNb2RlbHM7CnVzZSBBcHBcTW9kZWxzXEV2ZW50Owp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcTG9nOwoKY2xhc3MgRXZlbnROb3RpZmljYXRpb25NYWlsIGV4dGVuZHMgTWFpbGFibGUKewogICAgdXNlIFF1ZXVlYWJsZSwgU2VyaWFsaXplc01vZGVsczsKCiAgICBwdWJsaWMgJGV2ZW50OwogICAgcHVibGljICR0eXBlOwogICAgcHVibGljICRkYXRlOwogICAgcHVibGljICRsb2NhdGlvbjsKICAgIHB1YmxpYyAkbWVzc2FnZTsKICAgIHB1YmxpYyAkdXNlcjsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJGVuZ2xpc2hNb250aCkKICAgIHsKICAgICAgICAkbW9udGhzID0gWwogICAgICAgICAgICAnSmFudWFyeScgPT4gJ2lhbnVhcmllJywKICAgICAgICAgICAgJ0ZlYnJ1YXJ5JyA9PiAnZmVicnVhcmllJywKICAgICAgICAgICAgJ01hcmNoJyA9PiAnbWFydGllJywKICAgICAgICAgICAgJ0FwcmlsJyA9PiAnYXByaWxpZScsCiAgICAgICAgICAgICdNYXknID0+ICdtYWknLAogICAgICAgICAgICAnSnVuZScgPT4gJ2l1bmllJywKICAgICAgICAgICAgJ0p1bHknID0+ICdpdWxpZScsCiAgICAgICAgICAgICdBdWd1c3QnID0+ICdhdWd1c3QnLAogICAgICAgICAgICAnU2VwdGVtYmVyJyA9PiAnc2VwdGVtYnJpZScsCiAgICAgICAgICAgICdPY3RvYmVyJyA9PiAnb2N0b21icmllJywKICAgICAgICAgICAgJ05vdmVtYmVyJyA9PiAnbm9pZW1icmllJywKICAgICAgICAgICAgJ0RlY2VtYmVyJyA9PiAnZGVjZW1icmllJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRtb250aHNbJGVuZ2xpc2hNb250aF0gPz8gJGVuZ2xpc2hNb250aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoRXZlbnQgJGV2ZW50LCAkdHlwZSwgJHVzZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmV2ZW50ID0gJGV2ZW50OwogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICAgICAgJHRoaXMtPnVzZXIgPSAkdXNlcjsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgZGF0ZSBpbiBSb21hbmlhbgogICAgICAgICRkYXRlID0gJGV2ZW50LT5zdGFydF9kYXRlOwogICAgICAgICRkYXkgPSAkZGF0ZS0+Zm9ybWF0KCdkJyk7CiAgICAgICAgJG1vbnRoID0gJHRoaXMtPmdldFJvbWFuaWFuTW9udGgoJGRhdGUtPmZvcm1hdCgnRicpKTsKICAgICAgICAkeWVhciA9ICRkYXRlLT5mb3JtYXQoJ1knKTsKICAgICAgICAkdGltZSA9ICRkYXRlLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICR0aGlzLT5kYXRlID0gInskZGF5fSB7JG1vbnRofSB7JHllYXJ9IHskdGltZX0iOwogICAgICAgIAogICAgICAgICR0aGlzLT5sb2NhdGlvbiA9ICRldmVudC0+bG9jYXRpb247CiAgICAgICAgJHRoaXMtPm1lc3NhZ2UgPSAkdHlwZSA9PT0gJ25vdycgCiAgICAgICAgICAgID8gIkV2ZW5pbWVudCBub3U6IHskZXZlbnQtPnRpdGxlfSIKICAgICAgICAgICAgOiAiUmVtaW5kZXI6IEV2ZW5pbWVudHVsIHskZXZlbnQtPnRpdGxlfSDDrm5jZXBlIMOubiAyNCBkZSBvcmUiOwoKICAgICAgICBMb2c6OmluZm8oJ0V2ZW50Tm90aWZpY2F0aW9uTWFpbCBjb25zdHJ1Y3RlZCcsIFsKICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAndHlwZScgPT4gJHR5cGUsCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICBdKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEdvb2dsZUNhbGVuZGFyVXJsKCkKICAgIHsKICAgICAgICAkc3RhcnREYXRlID0gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIGluc3RhbmNlb2YgXENhcmJvblxDYXJib24gCiAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIAogICAgICAgICAgICA6IFxDYXJib25cQ2FyYm9uOjpwYXJzZSgkdGhpcy0+ZXZlbnQtPnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAKICAgICAgICAkZW5kRGF0ZSA9ICR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgCiAgICAgICAgICAgID8gKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgaW5zdGFuY2VvZiBcQ2FyYm9uXENhcmJvbiAKICAgICAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5lbmRfZGF0ZSAKICAgICAgICAgICAgICAgIDogXENhcmJvblxDYXJib246OnBhcnNlKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUpKQogICAgICAgICAgICA6ICRzdGFydERhdGUtPmNvcHkoKS0+YWRkSG91cigpOwogICAgICAgIAogICAgICAgICRwYXJhbXMgPSBbCiAgICAgICAgICAgICdhY3Rpb24nID0+ICdURU1QTEFURScsCiAgICAgICAgICAgICd0ZXh0JyA9PiAkdGhpcy0+ZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAnZGF0ZXMnID0+ICRzdGFydERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpIC4gJy8nIC4gJGVuZERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpLAogICAgICAgICAgICAnZGV0YWlscycgPT4gJHRoaXMtPmV2ZW50LT5kZXNjcmlwdGlvbiA/PyAnJywKICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkdGhpcy0+ZXZlbnQtPmxvY2F0aW9uID8/ICcnCiAgICAgICAgXTsKICAgICAgICAKICAgICAgICByZXR1cm4gJ2h0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhci9yZW5kZXI/JyAuIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRBcHBsZUNhbGVuZGFyVXJsKCkKICAgIHsKICAgICAgICAkc3RhcnREYXRlID0gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIGluc3RhbmNlb2YgXENhcmJvblxDYXJib24gCiAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIAogICAgICAgICAgICA6IFxDYXJib25cQ2FyYm9uOjpwYXJzZSgkdGhpcy0+ZXZlbnQtPnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAKICAgICAgICAkZW5kRGF0ZSA9ICR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgCiAgICAgICAgICAgID8gKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgaW5zdGFuY2VvZiBcQ2FyYm9uXENhcmJvbiAKICAgICAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5lbmRfZGF0ZSAKICAgICAgICAgICAgICAgIDogXENhcmJvblxDYXJib246OnBhcnNlKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUpKQogICAgICAgICAgICA6ICRzdGFydERhdGUtPmNvcHkoKS0+YWRkSG91cigpOwogICAgICAgIAogICAgICAgICRpY3NDb250ZW50ID0gWwogICAgICAgICAgICAnQkVHSU46VkNBTEVOREFSJywKICAgICAgICAgICAgJ1ZFUlNJT046Mi4wJywKICAgICAgICAgICAgJ1BST0RJRDotLy9oYWNrc3cvaGFuZGNhbC8vTk9OU0dNTCB2MS4wLy9FTicsCiAgICAgICAgICAgICdDQUxTQ0FMRTpHUkVHT1JJQU4nLAogICAgICAgICAgICAnQkVHSU46VkVWRU5UJywKICAgICAgICAgICAgJ0RUU1RBUlQ6JyAuICRzdGFydERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpLAogICAgICAgICAgICAnRFRFTkQ6JyAuICRlbmREYXRlLT5mb3JtYXQoJ1ltZFxUSGlzXFonKSwKICAgICAgICAgICAgJ1NVTU1BUlk6JyAuIHN0cl9yZXBsYWNlKCcsJywgJ1wsJywgJHRoaXMtPmV2ZW50LT50aXRsZSksCiAgICAgICAgICAgICdERVNDUklQVElPTjonIC4gc3RyX3JlcGxhY2UoWycsJywgIlxuIl0sIFsnXCwnLCAnXG4nXSwgJHRoaXMtPmV2ZW50LT5kZXNjcmlwdGlvbiA/PyAnJyksCiAgICAgICAgICAgICdMT0NBVElPTjonIC4gc3RyX3JlcGxhY2UoJywnLCAnXCwnLCAkdGhpcy0+ZXZlbnQtPmxvY2F0aW9uID8/ICcnKSwKICAgICAgICAgICAgJ0VORDpWRVZFTlQnLAogICAgICAgICAgICAnRU5EOlZDQUxFTkRBUicKICAgICAgICBdOwogICAgICAgIAogICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHdpdGggdGhlIElDUyBjb250ZW50CiAgICAgICAgJHRlbXBGaWxlID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICdldmVudF8nKTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkdGVtcEZpbGUsIGltcGxvZGUoIlxyXG4iLCAkaWNzQ29udGVudCkpOwogICAgICAgIAogICAgICAgIC8vIEdlbmVyYXRlIGEgVVJMIHRvIHRoZSBJQ1MgZmlsZQogICAgICAgICR1cmwgPSB1cmwoJy9jYWxlbmRhci9ldmVudC8nIC4gJHRoaXMtPmV2ZW50LT5pZCAuICcvaWNzJyk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuICR1cmw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkKCkKICAgIHsKICAgICAgICAkaHRtbCA9ICIKICAgICAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgICAgIDxodG1sPgogICAgICAgICAgICA8aGVhZD4KICAgICAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9J3ZpZXdwb3J0JyBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wJz4KICAgICAgICAgICAgICAgIDx0aXRsZT57JHRoaXMtPm1lc3NhZ2V9PC90aXRsZT4KICAgICAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICAgICBib2R5IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY29udGFpbmVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5oZWFkZXIgewogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEQ5NDg4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5jb250ZW50IHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDVweCA1cHg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5ldmVudC1kZXRhaWxzIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYzsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmJ1dHRvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEQ5NDg4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY2FsZW5kYXItYnV0dG9ucyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmNhbGVuZGFyLWJ1dHRvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5nb29nbGUtY2FsZW5kYXIgewogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NUY0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuYXBwbGUtY2FsZW5kYXIgewogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY2FsZW5kYXItYnV0dG9uIHN2ZyB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogOHB4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuZm9vdGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzY0NzQ4YjsKICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICA8L2hlYWQ+CiAgICAgICAgICAgIDxib2R5PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdoZWFkZXInPgogICAgICAgICAgICAgICAgICAgICAgICA8aDE+eyR0aGlzLT5tZXNzYWdlfTwvaDE+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGVudCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkJ1bsSDIHskdGhpcy0+dXNlci0+Zmlyc3RfbmFtZX0sPC9wPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZXZlbnQtZGV0YWlscyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+eyR0aGlzLT5ldmVudC0+dGl0bGV9PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RGF0YTo8L3N0cm9uZz4geyR0aGlzLT5kYXRlfTwvcD4iOwoKICAgICAgICBpZiAoJHRoaXMtPmxvY2F0aW9uKSB7CiAgICAgICAgICAgICRodG1sIC49ICI8cD48c3Ryb25nPkxvY2HIm2llOjwvc3Ryb25nPiB7JHRoaXMtPmxvY2F0aW9ufTwvcD4iOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5ldmVudC0+ZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgJGh0bWwgLj0gIjxwPjxzdHJvbmc+RGVzY3JpZXJlOjwvc3Ryb25nPjxicj57JHRoaXMtPmV2ZW50LT5kZXNjcmlwdGlvbn08L3A+IjsKICAgICAgICB9CgogICAgICAgICRodG1sIC49ICIKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYWxlbmRhci1idXR0b25zJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JyIgLiAkdGhpcy0+Z2V0R29vZ2xlQ2FsZW5kYXJVcmwoKSAuICInIHRhcmdldD0nX2JsYW5rJyBjbGFzcz0nY2FsZW5kYXItYnV0dG9uIGdvb2dsZS1jYWxlbmRhcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nY3VycmVudENvbG9yJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0nTTEyIDBDNS4zNzIgMCAwIDUuMzcyIDAgMTJzNS4zNzIgMTIgMTIgMTIgMTItNS4zNzIgMTItMTJTMTguNjI4IDAgMTIgMHptMCAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwUzIgMTcuNTE0IDIgMTIgNi40ODYgMiAxMiAyem0wIDNjLTMuODY2IDAtNyAzLjEzNC03IDdzMy4xMzQgNyA3IDcgNy0zLjEzNCA3LTctMy4xMzQtNy03LTd6bTAgMmMyLjc2MSAwIDUgMi4yMzkgNSA1cy0yLjIzOSA1LTUgNS01LTIuMjM5LTUtNSAyLjIzOS01IDUtNXonLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGF1Z8SDIMOubiBHb29nbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JyIgLiAkdGhpcy0+Z2V0QXBwbGVDYWxlbmRhclVybCgpIC4gIicgZG93bmxvYWQ9J2V2ZW50LmljcycgY2xhc3M9J2NhbGVuZGFyLWJ1dHRvbiBhcHBsZS1jYWxlbmRhcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nY3VycmVudENvbG9yJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0nTTE4LjcxIDE5LjVjLS44MyAxLjI0LTEuNzEgMi40NS0zLjA1IDIuNDctMS4zNC4wMy0xLjc3LS43OS0zLjI5LS43OS0xLjUzIDAtMiAuNzctMy4yNy44Mi0xLjMxLjA1LTIuMy0xLjMyLTMuMTQtMi41M0M0LjI1IDE3IDIuOTQgMTIuNDUgNC43IDkuMzljLjg3LTEuNTIgMi40My0yLjQ4IDQuMTItMi41MSAxLjI4LS4wMiAyLjUuODcgMy4yOS44Ny43OCAwIDIuMjYtMS4wNyAzLjgxLS45MS42NS4wMyAyLjQ3LjI2IDMuNjQgMS45OC0uMDkuMDYtMi4xNyAxLjI4LTIuMTUgMy44MS4wMyAzLjAyIDIuNjUgNC4wMyAyLjY4IDQuMDQtLjAzLjA3LS40MiAxLjQ0LTEuMzggMi44M00xMyAzLjVjLjczLS44MyAxLjk0LTEuNDYgMi45NC0xLjUuMTMgMS4xNy0uMzQgMi4zNS0xLjA0IDMuMTktLjY5Ljg1LTEuODMgMS41MS0yLjk1IDEuNDItLjE1LTEuMTUuNDEtMi4zNSAxLjA1LTMuMTF6Jy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgyDDrm4gQXBwbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JyIgLiB1cmwoJy9ldmVudHMnKSAuICInIGNsYXNzPSdidXR0b24nPlZlemkgRGV0YWxpaWxlIEV2ZW5pbWVudHVsdWk8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZm9vdGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFjZXN0IGVtYWlsIGEgZm9zdCB0cmltaXMgY8SDdHJlIHskdGhpcy0+dXNlci0+ZW1haWx9LiBEYWPEgyBkb3JpyJtpIHPEgyBkZXphY3RpdmHIm2kgbm90aWZpY8SDcmlsZSBwcmluIGVtYWlsLCB2xIMgcnVnxINtIHPEgyBhY3R1YWxpemHIm2kgc2V0xINyaWxlIHByb2ZpbHVsdWkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIDwvaHRtbD4iOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QoJHRoaXMtPm1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgICAgLT5odG1sKCRodG1sKTsKICAgIH0KfSAAAAAAAAAAANgoAAAAAAAAAAAAAAAAAAAAAAAA2CgAAAAAAAAAAAAA",
					"AgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACdCQAAAAAAAJ0JAAAAAAAAAAAAAAAA8L8"
				],
				[
					11,
					1,
					"revert",
					null,
					"AgAAAAAAAAAAAAAAAAAAAAAAAADrKAAAPD9waHAKCm5hbWVzcGFjZSBBcHBcTWFpbDsKCnVzZSBJbGx1bWluYXRlXEJ1c1xRdWV1ZWFibGU7CnVzZSBJbGx1bWluYXRlXE1haWxcTWFpbGFibGU7CnVzZSBJbGx1bWluYXRlXFF1ZXVlXFNlcmlhbGl6ZXNNb2RlbHM7CnVzZSBBcHBcTW9kZWxzXEV2ZW50Owp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XEZhY2FkZXNcTG9nOwoKY2xhc3MgRXZlbnROb3RpZmljYXRpb25NYWlsIGV4dGVuZHMgTWFpbGFibGUKewogICAgdXNlIFF1ZXVlYWJsZSwgU2VyaWFsaXplc01vZGVsczsKCiAgICBwdWJsaWMgJGV2ZW50OwogICAgcHVibGljICR0eXBlOwogICAgcHVibGljICRkYXRlOwogICAgcHVibGljICRsb2NhdGlvbjsKICAgIHB1YmxpYyAkbWVzc2FnZTsKICAgIHB1YmxpYyAkdXNlcjsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFJvbWFuaWFuTW9udGgoJGVuZ2xpc2hNb250aCkKICAgIHsKICAgICAgICAkbW9udGhzID0gWwogICAgICAgICAgICAnSmFudWFyeScgPT4gJ2lhbnVhcmllJywKICAgICAgICAgICAgJ0ZlYnJ1YXJ5JyA9PiAnZmVicnVhcmllJywKICAgICAgICAgICAgJ01hcmNoJyA9PiAnbWFydGllJywKICAgICAgICAgICAgJ0FwcmlsJyA9PiAnYXByaWxpZScsCiAgICAgICAgICAgICdNYXknID0+ICdtYWknLAogICAgICAgICAgICAnSnVuZScgPT4gJ2l1bmllJywKICAgICAgICAgICAgJ0p1bHknID0+ICdpdWxpZScsCiAgICAgICAgICAgICdBdWd1c3QnID0+ICdhdWd1c3QnLAogICAgICAgICAgICAnU2VwdGVtYmVyJyA9PiAnc2VwdGVtYnJpZScsCiAgICAgICAgICAgICdPY3RvYmVyJyA9PiAnb2N0b21icmllJywKICAgICAgICAgICAgJ05vdmVtYmVyJyA9PiAnbm9pZW1icmllJywKICAgICAgICAgICAgJ0RlY2VtYmVyJyA9PiAnZGVjZW1icmllJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRtb250aHNbJGVuZ2xpc2hNb250aF0gPz8gJGVuZ2xpc2hNb250aDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoRXZlbnQgJGV2ZW50LCAkdHlwZSwgJHVzZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmV2ZW50ID0gJGV2ZW50OwogICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CiAgICAgICAgJHRoaXMtPnVzZXIgPSAkdXNlcjsKICAgICAgICAKICAgICAgICAvLyBGb3JtYXQgZGF0ZSBpbiBSb21hbmlhbiB3aXRoIGxvY2FsIHRpbWV6b25lCiAgICAgICAgJGRhdGUgPSAkZXZlbnQtPnN0YXJ0X2RhdGUtPnNldFRpbWV6b25lKGNvbmZpZygnYXBwLnRpbWV6b25lJykpOwogICAgICAgICRkYXkgPSAkZGF0ZS0+Zm9ybWF0KCdkJyk7CiAgICAgICAgJG1vbnRoID0gJHRoaXMtPmdldFJvbWFuaWFuTW9udGgoJGRhdGUtPmZvcm1hdCgnRicpKTsKICAgICAgICAkeWVhciA9ICRkYXRlLT5mb3JtYXQoJ1knKTsKICAgICAgICAkdGltZSA9ICRkYXRlLT5mb3JtYXQoJ0g6aScpOwogICAgICAgICR0aGlzLT5kYXRlID0gInskZGF5fSB7JG1vbnRofSB7JHllYXJ9IHskdGltZX0iOwogICAgICAgIAogICAgICAgICR0aGlzLT5sb2NhdGlvbiA9ICRldmVudC0+bG9jYXRpb247CiAgICAgICAgJHRoaXMtPm1lc3NhZ2UgPSAkdHlwZSA9PT0gJ25vdycgCiAgICAgICAgICAgID8gIkV2ZW5pbWVudCBub3U6IHskZXZlbnQtPnRpdGxlfSIKICAgICAgICAgICAgOiAiUmVtaW5kZXI6IEV2ZW5pbWVudHVsIHskZXZlbnQtPnRpdGxlfSDDrm5jZXBlIMOubiAyNCBkZSBvcmUiOwoKICAgICAgICBMb2c6OmluZm8oJ0V2ZW50Tm90aWZpY2F0aW9uTWFpbCBjb25zdHJ1Y3RlZCcsIFsKICAgICAgICAgICAgJ2V2ZW50X2lkJyA9PiAkZXZlbnQtPmlkLAogICAgICAgICAgICAndHlwZScgPT4gJHR5cGUsCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlci0+aWQKICAgICAgICBdKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEdvb2dsZUNhbGVuZGFyVXJsKCkKICAgIHsKICAgICAgICAkc3RhcnREYXRlID0gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIGluc3RhbmNlb2YgXENhcmJvblxDYXJib24gCiAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIAogICAgICAgICAgICA6IFxDYXJib25cQ2FyYm9uOjpwYXJzZSgkdGhpcy0+ZXZlbnQtPnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAKICAgICAgICAkZW5kRGF0ZSA9ICR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgCiAgICAgICAgICAgID8gKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgaW5zdGFuY2VvZiBcQ2FyYm9uXENhcmJvbiAKICAgICAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5lbmRfZGF0ZSAKICAgICAgICAgICAgICAgIDogXENhcmJvblxDYXJib246OnBhcnNlKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUpKQogICAgICAgICAgICA6ICRzdGFydERhdGUtPmNvcHkoKS0+YWRkSG91cigpOwogICAgICAgIAogICAgICAgICRwYXJhbXMgPSBbCiAgICAgICAgICAgICdhY3Rpb24nID0+ICdURU1QTEFURScsCiAgICAgICAgICAgICd0ZXh0JyA9PiAkdGhpcy0+ZXZlbnQtPnRpdGxlLAogICAgICAgICAgICAnZGF0ZXMnID0+ICRzdGFydERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpIC4gJy8nIC4gJGVuZERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpLAogICAgICAgICAgICAnZGV0YWlscycgPT4gJHRoaXMtPmV2ZW50LT5kZXNjcmlwdGlvbiA/PyAnJywKICAgICAgICAgICAgJ2xvY2F0aW9uJyA9PiAkdGhpcy0+ZXZlbnQtPmxvY2F0aW9uID8/ICcnCiAgICAgICAgXTsKICAgICAgICAKICAgICAgICByZXR1cm4gJ2h0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhci9yZW5kZXI/JyAuIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRBcHBsZUNhbGVuZGFyVXJsKCkKICAgIHsKICAgICAgICAkc3RhcnREYXRlID0gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIGluc3RhbmNlb2YgXENhcmJvblxDYXJib24gCiAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5zdGFydF9kYXRlIAogICAgICAgICAgICA6IFxDYXJib25cQ2FyYm9uOjpwYXJzZSgkdGhpcy0+ZXZlbnQtPnN0YXJ0X2RhdGUpOwogICAgICAgICAgICAKICAgICAgICAkZW5kRGF0ZSA9ICR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgCiAgICAgICAgICAgID8gKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUgaW5zdGFuY2VvZiBcQ2FyYm9uXENhcmJvbiAKICAgICAgICAgICAgICAgID8gJHRoaXMtPmV2ZW50LT5lbmRfZGF0ZSAKICAgICAgICAgICAgICAgIDogXENhcmJvblxDYXJib246OnBhcnNlKCR0aGlzLT5ldmVudC0+ZW5kX2RhdGUpKQogICAgICAgICAgICA6ICRzdGFydERhdGUtPmNvcHkoKS0+YWRkSG91cigpOwogICAgICAgIAogICAgICAgICRpY3NDb250ZW50ID0gWwogICAgICAgICAgICAnQkVHSU46VkNBTEVOREFSJywKICAgICAgICAgICAgJ1ZFUlNJT046Mi4wJywKICAgICAgICAgICAgJ1BST0RJRDotLy9oYWNrc3cvaGFuZGNhbC8vTk9OU0dNTCB2MS4wLy9FTicsCiAgICAgICAgICAgICdDQUxTQ0FMRTpHUkVHT1JJQU4nLAogICAgICAgICAgICAnQkVHSU46VkVWRU5UJywKICAgICAgICAgICAgJ0RUU1RBUlQ6JyAuICRzdGFydERhdGUtPmZvcm1hdCgnWW1kXFRIaXNcWicpLAogICAgICAgICAgICAnRFRFTkQ6JyAuICRlbmREYXRlLT5mb3JtYXQoJ1ltZFxUSGlzXFonKSwKICAgICAgICAgICAgJ1NVTU1BUlk6JyAuIHN0cl9yZXBsYWNlKCcsJywgJ1wsJywgJHRoaXMtPmV2ZW50LT50aXRsZSksCiAgICAgICAgICAgICdERVNDUklQVElPTjonIC4gc3RyX3JlcGxhY2UoWycsJywgIlxuIl0sIFsnXCwnLCAnXG4nXSwgJHRoaXMtPmV2ZW50LT5kZXNjcmlwdGlvbiA/PyAnJyksCiAgICAgICAgICAgICdMT0NBVElPTjonIC4gc3RyX3JlcGxhY2UoJywnLCAnXCwnLCAkdGhpcy0+ZXZlbnQtPmxvY2F0aW9uID8/ICcnKSwKICAgICAgICAgICAgJ0VORDpWRVZFTlQnLAogICAgICAgICAgICAnRU5EOlZDQUxFTkRBUicKICAgICAgICBdOwogICAgICAgIAogICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHdpdGggdGhlIElDUyBjb250ZW50CiAgICAgICAgJHRlbXBGaWxlID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICdldmVudF8nKTsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkdGVtcEZpbGUsIGltcGxvZGUoIlxyXG4iLCAkaWNzQ29udGVudCkpOwogICAgICAgIAogICAgICAgIC8vIEdlbmVyYXRlIGEgVVJMIHRvIHRoZSBJQ1MgZmlsZQogICAgICAgICR1cmwgPSB1cmwoJy9jYWxlbmRhci9ldmVudC8nIC4gJHRoaXMtPmV2ZW50LT5pZCAuICcvaWNzJyk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuICR1cmw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkKCkKICAgIHsKICAgICAgICAkaHRtbCA9ICIKICAgICAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgICAgIDxodG1sPgogICAgICAgICAgICA8aGVhZD4KICAgICAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KICAgICAgICAgICAgICAgIDxtZXRhIG5hbWU9J3ZpZXdwb3J0JyBjb250ZW50PSd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wJz4KICAgICAgICAgICAgICAgIDx0aXRsZT57JHRoaXMtPm1lc3NhZ2V9PC90aXRsZT4KICAgICAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICAgICBib2R5IHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgICAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY29udGFpbmVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA2MDBweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5oZWFkZXIgewogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEQ5NDg4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDVweCAwIDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5jb250ZW50IHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDVweCA1cHg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5ldmVudC1kZXRhaWxzIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYzsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDIwcHggMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmJ1dHRvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMEQ5NDg4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY2FsZW5kYXItYnV0dG9ucyB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLmNhbGVuZGFyLWJ1dHRvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC5nb29nbGUtY2FsZW5kYXIgewogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDI4NUY0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuYXBwbGUtY2FsZW5kYXIgewogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuY2FsZW5kYXItYnV0dG9uIHN2ZyB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogOHB4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAuZm9vdGVyIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIzY0NzQ4YjsKICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgICA8L2hlYWQ+CiAgICAgICAgICAgIDxib2R5PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGFpbmVyJz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdoZWFkZXInPgogICAgICAgICAgICAgICAgICAgICAgICA8aDE+eyR0aGlzLT5tZXNzYWdlfTwvaDE+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29udGVudCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkJ1bsSDIHskdGhpcy0+dXNlci0+Zmlyc3RfbmFtZX0sPC9wPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZXZlbnQtZGV0YWlscyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+eyR0aGlzLT5ldmVudC0+dGl0bGV9PC9oMj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+RGF0YTo8L3N0cm9uZz4geyR0aGlzLT5kYXRlfTwvcD4iOwoKICAgICAgICBpZiAoJHRoaXMtPmxvY2F0aW9uKSB7CiAgICAgICAgICAgICRodG1sIC49ICI8cD48c3Ryb25nPkxvY2HIm2llOjwvc3Ryb25nPiB7JHRoaXMtPmxvY2F0aW9ufTwvcD4iOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5ldmVudC0+ZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgJGh0bWwgLj0gIjxwPjxzdHJvbmc+RGVzY3JpZXJlOjwvc3Ryb25nPjxicj57JHRoaXMtPmV2ZW50LT5kZXNjcmlwdGlvbn08L3A+IjsKICAgICAgICB9CgogICAgICAgICRodG1sIC49ICIKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjYWxlbmRhci1idXR0b25zJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JyIgLiAkdGhpcy0+Z2V0R29vZ2xlQ2FsZW5kYXJVcmwoKSAuICInIHRhcmdldD0nX2JsYW5rJyBjbGFzcz0nY2FsZW5kYXItYnV0dG9uIGdvb2dsZS1jYWxlbmRhcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nY3VycmVudENvbG9yJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0nTTEyIDBDNS4zNzIgMCAwIDUuMzcyIDAgMTJzNS4zNzIgMTIgMTIgMTIgMTItNS4zNzIgMTItMTJTMTguNjI4IDAgMTIgMHptMCAyYzUuNTE0IDAgMTAgNC40ODYgMTAgMTBzLTQuNDg2IDEwLTEwIDEwUzIgMTcuNTE0IDIgMTIgNi40ODYgMiAxMiAyem0wIDNjLTMuODY2IDAtNyAzLjEzNC03IDdzMy4xMzQgNyA3IDcgNy0zLjEzNCA3LTctMy4xMzQtNy03LTd6bTAgMmMyLjc2MSAwIDUgMi4yMzkgNSA1cy0yLjIzOSA1LTUgNS01LTIuMjM5LTUtNSAyLjIzOS01IDUtNXonLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGF1Z8SDIMOubiBHb29nbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JyIgLiAkdGhpcy0+Z2V0QXBwbGVDYWxlbmRhclVybCgpIC4gIicgZG93bmxvYWQ9J2V2ZW50LmljcycgY2xhc3M9J2NhbGVuZGFyLWJ1dHRvbiBhcHBsZS1jYWxlbmRhcic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nY3VycmVudENvbG9yJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0nTTE4LjcxIDE5LjVjLS44MyAxLjI0LTEuNzEgMi40NS0zLjA1IDIuNDctMS4zNC4wMy0xLjc3LS43OS0zLjI5LS43OS0xLjUzIDAtMiAuNzctMy4yNy44Mi0xLjMxLjA1LTIuMy0xLjMyLTMuMTQtMi41M0M0LjI1IDE3IDIuOTQgMTIuNDUgNC43IDkuMzljLjg3LTEuNTIgMi40My0yLjQ4IDQuMTItMi41MSAxLjI4LS4wMiAyLjUuODcgMy4yOS44Ny43OCAwIDIuMjYtMS4wNyAzLjgxLS45MS42NS4wMyAyLjQ3LjI2IDMuNjQgMS45OC0uMDkuMDYtMi4xNyAxLjI4LTIuMTUgMy44MS4wMyAzLjAyIDIuNjUgNC4wMyAyLjY4IDQuMDQtLjAzLjA3LS40MiAxLjQ0LTEuMzggMi44M00xMyAzLjVjLjczLS44MyAxLjk0LTEuNDYgMi45NC0xLjUuMTMgMS4xNy0uMzQgMi4zNS0xLjA0IDMuMTktLjY5Ljg1LTEuODMgMS41MS0yLjk1IDEuNDItLjE1LTEuMTUuNDEtMi4zNSAxLjA1LTMuMTF6Jy8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRhdWfEgyDDrm4gQXBwbGUgQ2FsZW5kYXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JyIgLiB1cmwoJy9ldmVudHMnKSAuICInIGNsYXNzPSdidXR0b24nPlZlemkgRGV0YWxpaWxlIEV2ZW5pbWVudHVsdWk8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZm9vdGVyJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFjZXN0IGVtYWlsIGEgZm9zdCB0cmltaXMgY8SDdHJlIHskdGhpcy0+dXNlci0+ZW1haWx9LiBEYWPEgyBkb3JpyJtpIHPEgyBkZXphY3RpdmHIm2kgbm90aWZpY8SDcmlsZSBwcmluIGVtYWlsLCB2xIMgcnVnxINtIHPEgyBhY3R1YWxpemHIm2kgc2V0xINyaWxlIHByb2ZpbHVsdWkuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIDwvaHRtbD4iOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnN1YmplY3QoJHRoaXMtPm1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgICAgLT5odG1sKCRodG1sKTsKICAgIH0KfSAAAAAAAAAAAOcpAAAAAAAAAAAAAA",
					"AQAAAAAAAAABAAAA8AQAAAAAAACwBAAAAAAAAAAAAAAAAPC/"
				]
			]
		}
	],
	"build_system": "",
	"build_system_choices":
	[
	],
	"build_varint": "",
	"command_palette":
	{
		"height": 0.0,
		"last_filter": "",
		"selected_items":
		[
		],
		"width": 0.0
	},
	"console":
	{
		"height": 124.0,
		"history":
		[
		]
	},
	"distraction_free":
	{
		"menu_visible": true,
		"show_minimap": false,
		"show_open_files": false,
		"show_tabs": false,
		"side_bar_visible": false,
		"status_bar_visible": false
	},
	"expanded_folders":
	[
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Console",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Console/Commands",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Events",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Http",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Http/Controllers",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Http/Controllers/Auth",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Http/Controllers/Member",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Mail",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/app/Models",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/database",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/database/migrations",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/docker",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/docker/nginx",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/docker/nginx/conf.d",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/docker/php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/public",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Components",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Components/Member",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Layouts",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Pages",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Pages/Member",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Pages/Profile",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Pages/SuperAdmin",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Utils",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/views",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/routes"
	],
	"file_history":
	[
		"/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhosts.conf",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Components/Member/CreateEventModal.vue",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Components/Member/CreatePollModal.vue",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Components/Member/CreatePostModal.vue",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar/resources/js/Components/Member/Feed.js",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/content-only.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/affexport.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/test.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/rest_request.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/mailadmin.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/functions.inc.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/exceptions.inc.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/db_connect.inc.php.dist",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/db_connect.inc.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/config.inc.php.dist",
		"/Users/Shared/mediareps/donatelco/badjojo_new/crawler/crawler_2025.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/crawler/crawl.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/includes/config.inc.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/sitemaps.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/search.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/mrss.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/layout-json.php",
		"/Users/Shared/mediareps/donatelco/badjojo/htdocs/content/resultList.php",
		"/Users/Shared/mediareps/donatelco/badjojo/htdocs/app/TubeFront.class.php",
		"/Users/Shared/mediareps/donatelco/badjojo/htdocs/content/channels.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/index.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/test.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/submenu.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/noheader.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/out.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/rss-search.php",
		"/Users/Shared/mediareps/donatelco/badjojo_new/htdocs/rss.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Business-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Legal-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Email-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Cover-Letter-Template.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Fax-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Cover-Letter-Format.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Cover-Letter-Examples.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Teacher-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Resume-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Acceptance-Rejection-and-Withdrawal-Letters.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Sample-Reference-List.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Resume-vs-vitae.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Types-of-Resume.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/how-to-write-a-cover-letter.com/Tips-for-Writing-an-Effective-Cover-Letter.html",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/welcome.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/routes/web.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/StripeWebhookController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/css/app.css",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_11_18_221250_add_details_to_users_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_11_18_224726_add_template_to_cover_letter_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/show_full.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/config/services.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/UserController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/SubscriptionController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/subscription/index.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/billing/checkout.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/register.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_11_03_220232_add_first_and_last_name_to_users_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/register.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/login.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/login.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/pricing.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/create.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/create.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/layouts/navigation.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/vite.config.js",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/layouts/app.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/layouts/app.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/css/app.css_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_11_10_210627_add_remaining_cover_letters_to_users_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_09_19_151345_add_cover_letter_credits_to_users_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_09_19_151138_create_cover_letters_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/show.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_09_19_192224_add_is_paid_to_cover_letters_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/PaymentController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/billing/index.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/confirm-password.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/verify-email.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/reset-password.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/auth/forgot-password.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/pricing.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/contact.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/about.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/emails/contact.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/ContactController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/public/robots.txt",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/public/.htaccess",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/contact.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/faq.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/privacy.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/terms.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/dashboard.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/DashboardController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/layouts/navigation.blade.php_bkp",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/account/account.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/composer.json",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/AccountController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/subscription/confirm.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/account/invoices.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/purchase.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_10_12_090522_add_invoice_url_to_cover_letters_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Providers/AppServiceProvider.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Middleware/VerifyCsrfToken.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Console/Commands/GenerateSitemap.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Kernel.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/Controller.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Providers/AuthServiceProvider.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Policies/CoverLetterPolicy.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_10_01_200528_add_payment_fields_to_cover_letters_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Models/CoverLetter.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/storage/logs/laravel.log",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_10_07_204853_add_payment_status_to_cover_letters_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/show_partial.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/js/bootstrap.js",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/js/alpine.js",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/js/app.js",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/Auth/RegisteredUserController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/Auth/AuthenticatedSessionController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/resources/views/cover_letters/index.blade.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/database/migrations/2024_10_04_140313_add_regeneration_count_to_cover_letters_table.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/config/filesystems.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/CoverLetterController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Http/Controllers/BillingController.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Models/User.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/app/Services/OpenAIService.php",
		"/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/cover-letter/cover-letter-generator/config/mail.php"
	],
	"find":
	{
		"height": 38.0
	},
	"find_in_files":
	{
		"height": 0.0,
		"where_history":
		[
		]
	},
	"find_state":
	{
		"case_sensitive": false,
		"find_history":
		[
			"noti",
			"event",
			"date",
			"\\Log::",
			"console.log",
			"\\Log::",
			"addtocalen",
			"console",
			"miaza-zi",
			"categories",
			"sm:hidden",
			"MLnrdig",
			"ML",
			"Respons",
			"console.log",
			"omputing unseen posts count",
			"console.log",
			"vote",
			"console.log",
			"[RightSidebar]",
			"console.log",
			"initializeEcho",
			"handlePollCreated",
			"handlePostUpdated",
			"handleEditImageUpload",
			"removeEditImage",
			"insertEditEmoji",
			"formatFileSize",
			"form",
			"handleEventFileUpload",
			"removeEventFile",
			"eventform",
			"eventFileInput",
			"eventFileList",
			"createEvent",
			"showPollModal",
			"showpoll",
			"pollForm",
			"createPoll",
			"addStandalonePollOption",
			"showPostModal",
			"imagePreviewUrl",
			"documentFileInput",
			"fileList",
			"fileInput",
			"content",
			"showEmojiPicker",
			"removeImage",
			"removeFile",
			"handleImageUpload",
			"handleFileUpload",
			"form",
			"createPost",
			"showEventModal",
			"eventmodal",
			"right",
			"createPost",
			"PostModal",
			"markPostAsSeen",
			"handleEventCreated"
		],
		"highlight": true,
		"in_selection": false,
		"preserve_case": false,
		"regex": false,
		"replace_history":
		[
		],
		"reverse": false,
		"scrollbar_highlights": true,
		"show_context": true,
		"use_buffer2": true,
		"use_gitignore": true,
		"whole_word": false,
		"wrap": true
	},
	"folders":
	[
		{
			"path": "/Users/iuliancristea/Library/Mobile Documents/com~apple~CloudDocs/Work/Devel/ashlar"
		}
	],
	"groups":
	[
		{
			"sheets":
			[
				{
					"buffer": 0,
					"file": "resources/js/Components/Member/Feed.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 116907,
						"regions":
						{
						},
						"selection":
						[
							[
								68220,
								68225
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 34475.0,
						"zoom_level": 1.0
					},
					"stack_index": 4,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 1,
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 2673,
						"regions":
						{
						},
						"selection":
						[
							[
								2673,
								1806
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 10,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 2,
					"file": "resources/js/Layouts/MemberLayout.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 14489,
						"regions":
						{
						},
						"selection":
						[
							[
								7434,
								7442
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 21,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 3,
					"file": "app/Http/Controllers/Member/DashboardController.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 9332,
						"regions":
						{
						},
						"selection":
						[
							[
								7166,
								7172
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 11,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 4,
					"file": "app/Http/Controllers/Member/EventController.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 24738,
						"regions":
						{
						},
						"selection":
						[
							[
								6983,
								6983
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 3259.0,
						"zoom_level": 1.0
					},
					"stack_index": 2,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 5,
					"file": "resources/js/Layouts/AdminLayout.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 7642,
						"regions":
						{
						},
						"selection":
						[
							[
								6001,
								6001
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Text/Plain text.tmLanguage",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 25,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 6,
					"file": "resources/js/Components/Member/CreateEventModal.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 16062,
						"regions":
						{
						},
						"selection":
						[
							[
								6925,
								6925
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 8,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 7,
					"file": "resources/js/Components/Member/BottomMenu.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 3643,
						"regions":
						{
						},
						"selection":
						[
							[
								2981,
								2981
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 34,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 8,
					"file": "resources/js/Components/Member/LeftSidebar.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 6351,
						"regions":
						{
						},
						"selection":
						[
							[
								4995,
								5001
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Text/Plain text.tmLanguage",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 32,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 9,
					"file": "resources/js/Pages/Member/MembersGrid.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 20438,
						"regions":
						{
						},
						"selection":
						[
							[
								3820,
								3807
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 23,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 10,
					"file": "resources/js/Pages/Member/Dashboard.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 37862,
						"regions":
						{
						},
						"selection":
						[
							[
								27408,
								27410
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 22,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 11,
					"file": "resources/js/Pages/Member/Events.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 12835,
						"regions":
						{
						},
						"selection":
						[
							[
								3260,
								3260
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 33,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 12,
					"file": "resources/js/Pages/Member/Members.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 6647,
						"regions":
						{
						},
						"selection":
						[
							[
								149,
								149
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 24,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 13,
					"file": "resources/js/Pages/Member/Documents.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 71450,
						"regions":
						{
						},
						"selection":
						[
							[
								2889,
								2889
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 6,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 14,
					"file": "app/Console/Commands/ImportDocumentsToCollection.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 5336,
						"regions":
						{
						},
						"selection":
						[
							[
								4759,
								4759
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 1807.0,
						"zoom_level": 1.0
					},
					"stack_index": 5,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 15,
					"file": "resources/js/Pages/Member/Proiecte.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 68315,
						"regions":
						{
						},
						"selection":
						[
							[
								42094,
								42101
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 31,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 16,
					"file": "resources/js/Pages/Member/Profile.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 19897,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								0
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 16,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 17,
					"file": "resources/js/Utils/date.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 2604,
						"regions":
						{
						},
						"selection":
						[
							[
								2244,
								2244
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 15,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 18,
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 706,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								706
							]
						],
						"settings":
						{
							"auto_name": "Iubiti frati,",
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Text/Plain text.tmLanguage"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 9,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 19,
					"file": "app/Models/Event.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 1224,
						"regions":
						{
						},
						"selection":
						[
							[
								729,
								729
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 13,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 20,
					"file": "app/Http/Controllers/Member/PostController.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 16241,
						"regions":
						{
						},
						"selection":
						[
							[
								4743,
								4749
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 12,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 21,
					"file": "resources/js/firebase.js",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 2409,
						"regions":
						{
						},
						"selection":
						[
							[
								2057,
								2057
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/JavaScript/JavaScript.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 14,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 22,
					"file": "app/Console/Commands/SendEventReminders.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 10969,
						"regions":
						{
						},
						"selection":
						[
							[
								806,
								806
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 1267.0,
						"zoom_level": 1.0
					},
					"stack_index": 3,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 23,
					"file": "resources/js/Components/Member/RightSidebar.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 40826,
						"regions":
						{
						},
						"selection":
						[
							[
								5847,
								5858
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 17,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 24,
					"file": "resources/js/Components/Member/MobileEvent.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 43617,
						"regions":
						{
						},
						"selection":
						[
							[
								27893,
								27893
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 20,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 25,
					"file": "app/Http/Controllers/MemberController.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 6935,
						"regions":
						{
						},
						"selection":
						[
							[
								6555,
								6561
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 18,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 26,
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 34476,
						"regions":
						{
						},
						"selection":
						[
							[
								0,
								34476
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 35,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 27,
					"file": "database/migrations/2025_04_09_152248_create_events_table.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 916,
						"regions":
						{
						},
						"selection":
						[
							[
								691,
								691
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 27,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 28,
					"file": ".gitignore",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 282,
						"regions":
						{
						},
						"selection":
						[
							[
								29,
								29
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Git Formats/Git Ignore.sublime-syntax"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 26,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 29,
					"file": "app/Http/Controllers/LodgeController.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 12042,
						"regions":
						{
						},
						"selection":
						[
							[
								11386,
								11393
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 19,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 30,
					"file": "Dockerfile",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 1268,
						"regions":
						{
						},
						"selection":
						[
							[
								761,
								761
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Text/Plain text.tmLanguage",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 30,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 31,
					"file": "docker-compose.yml",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 2405,
						"regions":
						{
						},
						"selection":
						[
							[
								534,
								534
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/YAML/YAML.sublime-syntax",
							"tab_size": 2,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 29,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 32,
					"file": "docker/nginx/conf.d/default.conf",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 655,
						"regions":
						{
						},
						"selection":
						[
							[
								655,
								655
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Text/Plain text.tmLanguage",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 28,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 33,
					"file": "database/migrations/2025_04_13_152249_create_polls_table.php",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 1090,
						"regions":
						{
						},
						"selection":
						[
							[
								408,
								408
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 36,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 34,
					"file": "resources/js/Components/Member/EditPostModal.vue",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 39695,
						"regions":
						{
						},
						"selection":
						[
							[
								30992,
								30992
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/HTML/HTML.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 7,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 35,
					"file": ".env",
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 3329,
						"regions":
						{
						},
						"selection":
						[
							[
								532,
								536
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/Text/Plain text.tmLanguage"
						},
						"translation.x": 0.0,
						"translation.y": 0.0,
						"zoom_level": 1.0
					},
					"stack_index": 1,
					"stack_multiselect": false,
					"type": "text"
				},
				{
					"buffer": 36,
					"file": "app/Mail/EventNotificationMail.php",
					"selected": true,
					"semi_transient": false,
					"settings":
					{
						"buffer_size": 10727,
						"regions":
						{
						},
						"selection":
						[
							[
								1276,
								1276
							]
						],
						"settings":
						{
							"incomplete_sync": null,
							"remote_loading": false,
							"synced": false,
							"syntax": "Packages/PHP/PHP.sublime-syntax",
							"tab_size": 4,
							"translate_tabs_to_spaces": true
						},
						"translation.x": 0.0,
						"translation.y": 435.0,
						"zoom_level": 1.0
					},
					"stack_index": 0,
					"stack_multiselect": false,
					"type": "text"
				}
			]
		}
	],
	"incremental_find":
	{
		"height": 26.0
	},
	"input":
	{
		"height": 38.0
	},
	"layout":
	{
		"cells":
		[
			[
				0,
				0,
				1,
				1
			]
		],
		"cols":
		[
			0.0,
			1.0
		],
		"rows":
		[
			0.0,
			1.0
		]
	},
	"menu_visible": true,
	"output.SFTP":
	{
		"height": 120.0
	},
	"output.find_results":
	{
		"height": 0.0
	},
	"pinned_build_system": "",
	"project": "",
	"replace":
	{
		"height": 48.0
	},
	"save_all_on_build": true,
	"select_file":
	{
		"height": 0.0,
		"last_filter": "",
		"selected_items":
		[
			[
				"content/resultList.php",
				"badjojo/htdocs/content/resultList.php"
			],
			[
				"app/TubeFront.class.php",
				"badjojo/htdocs/app/TubeFront.class.php"
			],
			[
				"content/channels.ph",
				"badjojo/htdocs/content/channels.php"
			],
			[
				"routes/web.php",
				"routes/web.php"
			],
			[
				"app/Http/Middleware/VerifyCsrfToken.php",
				"app/Http/Middleware/VerifyCsrfToken.php"
			],
			[
				"app/Http/Controllers/StripeWebhookController.php",
				"app/Http/Controllers/StripeWebhookController.php"
			],
			[
				"app/Http/Kernel.php",
				"app/Http/Kernel.php"
			],
			[
				"app/Providers/AppServiceProvider.php",
				"app/Providers/AppServiceProvider.php"
			],
			[
				"registercontr",
				"Admin/htdocs/TrafficHaus/Controller/Admin/RegisterController.php"
			],
			[
				"register.php",
				"Admin/htdocs/TrafficHaus/Controller/Admin/RegisterController.php"
			],
			[
				"index.php",
				"Admin/htdocs/index.php"
			],
			[
				"templates/regis",
				"Admin/htdocs/templates/user_register.php"
			],
			[
				"showuser",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/ShowUserEditor.php"
			],
			[
				"class_mod",
				"Syndication/adserve/inc_serve/class_module.php"
			],
			[
				"class_modu",
				"Syndication/adserve/inc_serve/class_module.php"
			],
			[
				"conf.main.php",
				"Admin/conf.main.php"
			],
			[
				"_no_login_app",
				"Admin/htdocs/_no_login_app.php"
			],
			[
				"strip",
				"Admin/htdocs/stripe_webhook.php"
			],
			[
				"_no_login_app.php",
				"Admin/htdocs/_no_login_app.php"
			],
			[
				"stripe_we",
				"Admin/htdocs/stripe_webhook.php"
			],
			[
				"stripe",
				"Admin/htdocs/stripe_webhook.php"
			],
			[
				"payment_p",
				"Admin/htdocs/templates/payment_pay.php"
			],
			[
				"paymentcontr",
				"Admin/htdocs/TrafficHaus/Controller/Payments/PaymentController.php"
			],
			[
				"payments.php",
				"Admin/htdocs/payments.php"
			],
			[
				"email_ed",
				"Admin/htdocs/email_editor.php"
			],
			[
				"_ifrm_email",
				"Admin/htdocs/_ifrm_email_campaign_list.php"
			],
			[
				"email_list",
				"Admin/htdocs/email_list.php"
			],
			[
				"taskscontr",
				"Admin/htdocs/TrafficHaus/Controller/Admin/TasksController.php"
			],
			[
				"Unsubs",
				"Admin/htdocs/TrafficHaus/Model/Unsubscribe.php"
			],
			[
				"Marke",
				"Admin/htdocs/TrafficHaus/Model/Marketplace.php"
			],
			[
				"Mark",
				"Admin/htdocs/TrafficHaus/Model/Marketplace.php"
			],
			[
				"marketplace_ind",
				"Admin/htdocs/templates/marketplace_index.php"
			],
			[
				"marketplace.php",
				"Admin/htdocs/TrafficHaus/Model/Marketplace.php"
			],
			[
				"regi",
				"Admin/htdocs/register.php"
			],
			[
				"_schedu",
				"Admin/htdocs/_scheduled_send.php"
			],
			[
				"/_scheduled_send.php",
				"Admin/htdocs/_scheduled_send.php"
			],
			[
				"_globa",
				"Admin/htdocs/_global_functions.php"
			],
			[
				"email_sche",
				"Admin/htdocs/crons/email_schedule.php"
			],
			[
				"th_adm",
				"Admin/htdocs/scripts/th_admin.js"
			],
			[
				"updateuseracc",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/UpdateUserAccount.php"
			],
			[
				"showusereditor",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/ShowUserEditor.php"
			],
			[
				"_ajax_fuc",
				"Admin/htdocs/_ajax_functions.php"
			],
			[
				"_ifrm_email_campaign_list.php",
				"Admin/htdocs/_ifrm_email_campaign_list.php"
			],
			[
				"resumebid.php",
				"Admin/htdocs/resumebid.php"
			],
			[
				"DuplicateAdAndCampaign.php",
				"Admin/htdocs/TrafficHaus/GlobalFunctions/DuplicateAdAndCampaign.php"
			],
			[
				"submitbid",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/SubmitBidCampaign.php"
			],
			[
				"tasks_ind",
				"Admin/htdocs/templates/tasks_index.php"
			],
			[
				"home",
				"Admin/htdocs/home.php"
			],
			[
				"tasks.php",
				"Admin/htdocs/tasks.php"
			],
			[
				"insertbid",
				"Admin/htdocs/TrafficHaus/GlobalFunctions/InsertBidCampaign.php"
			],
			[
				"DuplicateAdAndCampaign.ph",
				"Admin/htdocs/TrafficHaus/GlobalFunctions/DuplicateAdAndCampaign.php"
			],
			[
				"reprocess_bid_ads.ph",
				"Admin/htdocs/tasks/reprocess_bid_ads.php"
			],
			[
				"_ajax",
				"Admin/htdocs/_ajax_functions.php"
			],
			[
				"campaign_crea",
				"Admin/htdocs/campaign_creator.php"
			],
			[
				"campaign_creator.js",
				"Admin/htdocs/scripts/campaign_creator.js"
			],
			[
				"audit_",
				"Robots/robot/audit_bot.php"
			],
			[
				"_ajax_functions.class.php",
				"Admin/htdocs/_ajax_functions.class.php"
			],
			[
				"Sites.php",
				"Admin/htdocs/TrafficHaus/Model/Sites.php"
			],
			[
				"_data_site",
				"Admin/htdocs/_data_sites.php"
			],
			[
				"_data_pub",
				"Admin/htdocs/_data_publishers.php"
			],
			[
				"_data_publ",
				"Admin/htdocs/_data_publishers.php"
			],
			[
				"email_schedule.php",
				"Admin/htdocs/crons/email_schedule.php"
			],
			[
				"Tasks.php",
				"Admin/htdocs/TrafficHaus/Model/Tasks.php"
			],
			[
				"Task",
				"Admin/htdocs/TrafficHaus/Controller/Admin/TasksController.php"
			],
			[
				"showuserprof",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/ShowUserProfile.php"
			],
			[
				"user_profi",
				"Admin/htdocs/user_profile.php"
			],
			[
				"user_pro",
				"Admin/htdocs/user_profile.php"
			],
			[
				"tasks",
				"Admin/htdocs/tasks.php"
			],
			[
				"_pub",
				"Admin/htdocs/_publisher_dashboard.php"
			],
			[
				"_staff_da",
				"Admin/htdocs/_staff_dashboard.php"
			],
			[
				"_daily_scheduled_tasks.php",
				"Admin/htdocs/_daily_scheduled_tasks.php"
			],
			[
				"passwor",
				"Admin/htdocs/password_reset.php"
			],
			[
				"ResetPassword.php",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/ResetPassword.php"
			],
			[
				"_logout.php",
				"Admin/htdocs/_logout.php"
			],
			[
				"password_reset.php",
				"Admin/htdocs/password_reset.php"
			],
			[
				"audit_bot",
				"Robots/robot/audit_bot.php"
			],
			[
				"redis_robot",
				"Robots/redis_robot.php"
			],
			[
				"notifi",
				"Robots/notification_functions.php"
			],
			[
				"endbid",
				"Admin/htdocs/endbid.php"
			],
			[
				"sendemai",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/SendEmail.php"
			],
			[
				"_database",
				"Admin/htdocs/_database.php"
			],
			[
				"conf",
				"Admin/conf.main.php"
			],
			[
				"veri",
				"Admin/htdocs/verify_login.php"
			],
			[
				"verify",
				"Admin/htdocs/verify_login.php"
			],
			[
				"_setu",
				"Admin/htdocs/_setup.php"
			],
			[
				"_appli",
				"Admin/htdocs/_application.php"
			],
			[
				"_ifrm_bid_campaign_editor.php",
				"Admin/htdocs/_ifrm_bid_campaign_editor.php"
			],
			[
				"rtb_stats_upda",
				"Admin/htdocs/crons/rtb_stats_updater.php"
			],
			[
				"_ifrm_bid_campaign_editor",
				"Admin/htdocs/_ifrm_bid_campaign_editor.php"
			],
			[
				"campaign_stats",
				"Admin/htdocs/campaign_stats.php"
			],
			[
				"payment",
				"Admin/htdocs/templates/payment_pay.php"
			],
			[
				"rtb_stat",
				"Admin/htdocs/templates/rtb_stats_index.php"
			],
			[
				"_ifrm_zon",
				"Admin/htdocs/_ifrm_pub_management_zone_editor.php"
			],
			[
				"payments_pub",
				"Admin/htdocs/payments_pub.php"
			],
			[
				"notifica",
				"Robots/robot/notification_bot.php"
			],
			[
				"rtb_pub",
				"Admin/htdocs/rtb_publisher.php"
			],
			[
				"",
				"Admin/htdocs/_ifrm_pub_management_zone_editor.php"
			],
			[
				"_ifrm_pub",
				"Admin/htdocs/_ifrm_pub_management_zone_editor.php"
			],
			[
				"_ifrm_pub_man",
				"Admin/htdocs/_ifrm_pub_management_zone_editor.php"
			],
			[
				"site_and_zon",
				"Admin/htdocs/sites_and_zones_management.php"
			],
			[
				"rtb_zone_hand",
				"Robots/rtb/rtb_zone_handler.php"
			],
			[
				"notification",
				"Robots/notification_functions.php"
			],
			[
				"password_re",
				"Admin/htdocs/password_reset.php"
			],
			[
				"_global",
				"Admin/htdocs/_global_functions.php"
			],
			[
				"notification_bot.php",
				"Robots/robot/notification_bot.php"
			],
			[
				"campaign_bot",
				"Robots/robot/campaign_bot.php"
			],
			[
				"index.",
				"Syndication/adserve/index.php"
			],
			[
				"rtb_stats_in",
				"Admin/htdocs/templates/rtb_stats_index.php"
			],
			[
				"rtb_stats_ind",
				"Robots/rtb/rtb_stats_index.php"
			],
			[
				"rtbstat",
				"Admin/htdocs/TrafficHaus/Model/RTBStats.php"
			],
			[
				"rtbstatscontr",
				"Admin/htdocs/TrafficHaus/Controller/Admin/RTBStatsController.php"
			],
			[
				"rtb_stats_inde",
				"Admin/htdocs/templates/rtb_stats_index.php"
			],
			[
				"user_",
				"Admin/htdocs/templates/user_register.php"
			],
			[
				"veriy",
				"Admin/htdocs/verify_login.php"
			],
			[
				"user_re",
				"Admin/htdocs/templates/user_register.php"
			],
			[
				"regist",
				"Admin/htdocs/register.php"
			],
			[
				"email_queu",
				"Mailgun/cron/email_queue.php"
			],
			[
				"th_admi",
				"Admin/htdocs/scripts/th_admin.js"
			],
			[
				"showuseredi",
				"Admin/htdocs/TrafficHaus/Ajax/Calls/ShowUserEditor.php"
			],
			[
				"aja",
				"Admin/htdocs/_ajax_functions.php"
			],
			[
				"th_admin",
				"Admin/htdocs/scripts/th_admin.js"
			],
			[
				"bank_imp",
				"Admin/htdocs/bank_import.php"
			],
			[
				"setbid_bot",
				"Robots/robot/setbid_bot.php"
			],
			[
				"setbid_bo",
				"Robots/jobs/setbid_bot.php"
			],
			[
				"_data_advertiser_invoices.php",
				"Admin/htdocs/_data_advertiser_invoices.php"
			],
			[
				"advertiser_in",
				"Admin/htdocs/advertiser_invoices.php"
			],
			[
				"advertiser_invo",
				"Admin/htdocs/advertiser_invoices.php"
			],
			[
				"advertiser_invoice_editor.php",
				"Admin/htdocs/advertiser_invoice_editor.php"
			]
		],
		"width": 0.0
	},
	"select_project":
	{
		"height": 0.0,
		"last_filter": "",
		"selected_items":
		[
		],
		"width": 0.0
	},
	"select_symbol":
	{
		"height": 305.0,
		"last_filter": "",
		"selected_items":
		[
		],
		"width": 592.0
	},
	"selected_group": 0,
	"settings":
	{
	},
	"show_minimap": true,
	"show_open_files": false,
	"show_tabs": true,
	"side_bar_visible": true,
	"side_bar_width": 390.0,
	"status_bar_visible": true,
	"template_settings":
	{
	}
}
