@charset "UTF-8";
.form:after {
	content: "";
	display: table;
	clear: both;
}

/* form   */
.form__legend {
	padding: 10px;
	font-weight: bold;
	font-size: 24px;
	font-size: 1.5rem;
	line-height: 1.5rem;
}

.form__legend--hide {
	display: none;
}

.form__legend-icon {
	margin-right: 10px;
	display: inline-block;
	vertical-align: middle;
}

.form__group {
	padding: 5px 0;
}

.form__label {
	padding: 10px 10px 0 10px;
}

.form__label--hide {
	display: none;
}

.form__label--right {
	text-align: right;
}

.form__label .form__title {
	padding: 8px 0 0 10px;
	display: inline-block;
	position: relative;
}

.form__label--required .form__title::before {
	content: "*";
	margin-right: 5px;
	font-weight: bold;
	color: #c00000;
	display: inline-block;
	vertical-align: middle;
}

.form__field {
	padding: 10px;
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
}

.form__calendar {
	position: relative;
}

.form__control {
	width: 100%;
	height: 40px;
	padding: 8px 10px;
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
	color: #252525;
	border: 0 solid #f2f2f2;
	background: #f2f2f2;
	border-radius: 10px;
	position: relative;
}

.form__control.input-validation-error {
	border-color: #c00000;
}

.form__control.input-validation-success {
	border-color: #1e9813;
}

.form__control[disabled], .form__control[readonly] {
	cursor: not-allowed;
	-webkit-filter: opacity(65%);
	        filter: opacity(65%);
	-webkit-box-shadow: none;
	        box-shadow: none;
	opacity: .65;
	background: #f2f2f2;
}

.form__control:focus {
	-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
	        box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}

.form__select {
	position: relative;
	padding: 0;
}

.form__select select {
	width: 100%;
	height: 100%;
	margin: 0;
	padding: 0 10px;
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
	background-color: rgba(0, 0, 0, 0);
	border-width: 0;
	border-radius: 10px;
	position: relative;
	z-index: 2;
}

.form__select select option {
	color: #252525;
}

.form__select select.input-validation-error {
	border: 1px solid #c00000;
}

.form__select select.input-validation-success {
	border: 1px solid #1e9813;
}

.form__select select:focus {
	-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
	        box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}

.form__select::after {
	content: "";
	margin: auto;
	height: 0;
	width: 0;
	border-left: 8px solid transparent;
	border-right: 8px solid transparent;
	border-top: 10px solid #555;
	position: absolute;
	top: 0;
	right: 10px;
	bottom: 0;
	z-index: 1;
}

.form__textarea {
	height: 150px;
}

.form__feedback, .form__tips {
	padding: 5px 10px 0 0;
	display: block;
	color: #999;
}

.form__feedback::before, .form__tips::before {
	font-family: 'icomoon';
	margin: -2px 5px 0 0;
	display: inline-block;
	vertical-align: middle;
}

.form__tips::before {
	content: "";
	font-size: 20px;
}

.form__tips span {
	display: inline-block;
	vertical-align: middle;
}

.form__tips a {
	color: #168800;
}

.form .field-validation-valid {
	display: none;
}

.form .field-validation-valid::before {
	content: "";
}

.form .field-validation-success {
	color: #1e9813;
	display: block;
}

.form .field-validation-success::before {
	content: "";
}

.form .field-validation-error {
	color: #c00000;
	display: block;
}

.form .field-validation-error::before {
	content: "";
}

.form__img {
	display: inline-block;
	vertical-align: middle;
	padding: 8px 0;
}

.form__img img {
	width: 90px;
	height: auto;
	margin-top: 4px;
	margin-right: 10px;
	display: inline-block;
}

.form__reset {
	display: inline-block;
	vertical-align: middle;
	color: #1e9813;
}

.form__reset i {
	font-size: 24px;
	display: inline-block;
	-webkit-transition: all .5s ease-out;
	-o-transition: all .5s ease-out;
	transition: all .5s ease-out;
}

.form__reset:hover {
	color: #1e9813;
}

.form__reset:hover i {
	-webkit-transform: rotate(180deg);
	    -ms-transform: rotate(180deg);
	        transform: rotate(180deg);
}

input[type=radio] {
	vertical-align: middle;
}

input[type=checkbox] {
	vertical-align: middle;
}

.form-selection {
	padding: 5px 0;
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
}

.form-selection__input {
	opacity: 0;
	position: absolute;
}

.form-selection--inline {
	margin-right: 15px;
	display: inline-block;
	max-width: initial;
}

.form-selection__label {
	cursor: pointer;
	display: block;
}

.form-selection__text {
	position: relative;
	vertical-align: middle;
	padding: 5px 10px 5px 0;
	font-weight: normal;
	max-width: initial;
}

.form-selection__text .form-selection__option, .form-selection__text .form-selection__note {
	display: inline-block;
	vertical-align: top;
}

.form-selection__text .form-selection__option {
	margin-right: 5px;
	position: relative;
}

.form-selection__text .form-selection__option::before {
	content: '';
	position: absolute;
	-webkit-transition: all .3s ease-out;
	-o-transition: all .3s ease-out;
	transition: all .3s ease-out;
	display: none;
}

.form-selection__box {
	padding-top: 5px;
	padding-left: 23px;
	display: none;
}

.form-selection__text--radiobox {
	line-height: 23px;
}

.form-selection__text--radiobox .form-selection__option, .form-selection__text--radiobox .form-selection__option::before {
	border-radius: 23px;
}

.form-selection__text--radiobox .form-selection__option {
	width: 23px;
	height: 23px;
	background-color: #f2f2f2;
	border: 1px solid #f2f2f2;
}

.form-selection__text--radiobox .form-selection__option::before {
	width: 13px;
	height: 13px;
	margin: auto;
	background: #555;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
}

.form-selection__text--checkbox {
	line-height: 23px;
}

.form-selection__text--checkbox .form-selection__option, .form-selection__text--checkbox .form-selection__note::before {
	border-radius: 3px;
}

.form-selection__text--checkbox .form-selection__option {
	width: 23px;
	height: 23px;
	background-color: #f2f2f2;
	border: 1px solid #f2f2f2;
}

.form-selection__text--checkbox .form-selection__option::before {
	width: 13px;
	height: 7.659px;
	border-style: solid;
	border-color: #555;
	border-width: 0 0 3px 3px;
	margin: auto;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	-webkit-transform: rotate(-45deg) translate(2px, -2px);
	    -ms-transform: rotate(-45deg) translate(2px, -2px);
	        transform: rotate(-45deg) translate(2px, -2px);
}

.form-selection__text--btn {
	width: 150px;
	height: 50px;
	padding: 13px 10px;
	border: 1px solid #f2f2f2;
	background-color: #f2f2f2;
	color: #555;
	border-radius: 5px;
	text-align: center;
}

.form-selection__input:checked + .form-selection__label > .form-selection__text--radiobox .form-selection__option::before,
.form-selection__input:checked + .form-selection__label > .form-selection__text--checkbox .form-selection__option::before {
	display: block;
}

.form-selection__input:checked + .form-selection__label .form-selection__text--btn {
	border: 1px solid #1e9813;
	background-color: #1e9813;
	color: #fff;
}

.form-selection__input:checked + .form-selection__label > .form-selection__box {
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
}

.form-selection__input[disabled] {
	cursor: not-allowed;
}

.form-selection__input[disabled] + .form-selection__label {
	-webkit-filter: opacity(50%);
	        filter: opacity(50%);
	opacity: 0.4;
	cursor: not-allowed;
}

@media only screen and (max-width: 768px) {
	.form__field {
		padding: 0;
	}
	.form__label .form__title {
		padding-top: 0;
		padding-left: 0;
	}
	.form-selection {
		padding: 0;
	}
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS9mb3JtLmNzcyIsInNvdXJjZXMiOlsiYmFzZS9mb3JtLnNhc3MiLCJzZXR0aW5nL19kZWZhdWx0LnNhc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL19zdXN5LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL19zdXN5LXByZWZpeC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9fdmVyc2lvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L191dGlsaXRpZXMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc3UtdmFsaWRhdGUuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc3UtbWF0aC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19zZXR0aW5ncy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19ub3JtYWxpemUuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fcGFyc2Uuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc3ludGF4LWhlbHBlcnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fYXBpLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3VucHJlZml4LnNjc3MiLCJzZXR0aW5nL192YXJpYWJsZS5zYXNzIiwic2V0dGluZy9fZnVuY3Rpb24uc2FzcyIsInNldHRpbmcvX21peGluLnNhc3MiLCJzZXR0aW5nL19leHRlbmQuc2FzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvL1RoaXMgaXMgc2FzcyBmaWxlXG5AaW1wb3J0IFwiLi4vc2V0dGluZy9kZWZhdWx0XCI7XG5cbi8qIGZvcm0gICAqL1xuLmZvcm0ge1xuXHRAZXh0ZW5kICVjbGVhcjtcblx0Ly8gZm9ybV9f5qiZ6aGMdnPpmrHol49cblx0Jl9fbGVnZW5kIHtcblx0XHRwYWRkaW5nOiBnYXAoMSk7XG5cdFx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG5cdFx0QGluY2x1ZGUgZm9udC1zaXplKDI0cHgsMjRweCk7XG5cdFx0Ji0taGlkZSB7IC8v6Zqx6JeP5qiZ6aGMXG5cdFx0XHRkaXNwbGF5OiBub25lOyB9XG5cdFx0Ji1pY29uIHtcblx0XHRcdG1hcmdpbi1yaWdodDogMTBweDtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0gfVxuXHQvLyBmb3JtX1/mqavliJdcblx0Jl9fZ3JvdXAge1xuXHRcdHBhZGRpbmc6IGdhcCgwLjUpIDA7IH1cblx0Ly8gZm9ybV9f5qyE5L2N5ZCNdnPpmrHol49cblx0Jl9fbGFiZWwge1xuXHRcdHBhZGRpbmc6IGdhcCgxKSBnYXAoMSkgMCBnYXAoMSk7XG5cdFx0Ji0taGlkZSB7XG5cdFx0XHRkaXNwbGF5OiBub25lOyB9XG5cdFx0Ly/pnaDlj7Ncblx0XHQmLS1yaWdodCB7XG5cdFx0XHR0ZXh0LWFsaWduOiByaWdodDsgfVxuXHRcdC8v6KGo5Zau5qiZ6aGMXG5cdFx0LmZvcm1fX3RpdGxlIHtcblx0XHRcdHBhZGRpbmc6IGNlaWwoKCRmb3JtSGVpZ2h0IC0gJGZvbnRMaCkvMikgMCAwIGdhcCgxKTtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXHRcdC8vIGZvcm1fX+W/heWhq1xuXHRcdCYtLXJlcXVpcmVkIHtcblx0XHRcdC5mb3JtX190aXRsZSB7XG5cdFx0XHRcdCY6OmJlZm9yZSB7XG5cdFx0XHRcdFx0Y29udGVudDogXCIqXCI7XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiBnYXAoMC41KTtcblx0XHRcdFx0XHRmb250LXdlaWdodDogYm9sZDtcblx0XHRcdFx0XHRjb2xvcjogJHJlcXVpcmVkQ29sb3I7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRcdFx0Ly8gcG9zaXRpb246IGFic29sdXRlXG5cdFx0XHRcdFx0Ly8gbGVmdDogMFxuIH0gfSB9IH1cdFx0XHRcdFx0Ly8gdG9wOiAoKCRmb3JtSGVpZ2h0IC0gJGZvbnRMaCkvMilcblx0Ly8gZm9ybV9f5aGr5a+r5YWn5a65XG5cdCZfX2ZpZWxkIHtcblx0XHRwYWRkaW5nOiBnYXAoMSk7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDsgfVxuXHQvLyBmb3JtX1/ml6Xmm4Zcblx0Jl9fY2FsZW5kYXIge1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTsgfVxuXHQvLyDllq7ooYzovLjlhaXmrITkvY0o5paH5a2X44CB5a+G56K8KeOAgeS4i+aLiemBuOWWruOAgeWkmuihjOi8uOWFpeashOS9jSjnlZnoqIApXG5cdCZfX2NvbnRyb2wge1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogJGZvcm1IZWlnaHQ7XG5cdFx0cGFkZGluZzogY2VpbCgoJGZvcm1IZWlnaHQgLSAkZm9udExoKS8yKSBnYXAoMSk7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRjb2xvcjogJGZvcm1Db2xvcjtcblx0XHRib3JkZXI6ICRmb3JtTGluZVdpZHRoIHNvbGlkICRmb3JtTGluZUNvbG9yO1xuXHRcdGJhY2tncm91bmQ6ICRmb3JtQmdDb2xvcjtcblx0XHRib3JkZXItcmFkaXVzOiAkZm9ybUJkUnM7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdC8v5qyE5L2N6Yyv6Kqk5qij5byPXG5cdFx0Ji5pbnB1dC12YWxpZGF0aW9uLWVycm9yIHtcblx0XHRcdGJvcmRlci1jb2xvcjogJGVycm9yQ29sb3I7IH1cblx0XHQvL+ashOS9jeaIkOWKn+aoo+W8j1xuXHRcdCYuaW5wdXQtdmFsaWRhdGlvbi1zdWNjZXNzIHtcblx0XHRcdGJvcmRlci1jb2xvcjogJHN1Y2Nlc3NDb2xvcjsgfVxuXHRcdC8vaW5wdXTmrITkvY3ni4DmhYtcblx0XHQmW2Rpc2FibGVkXSxcblx0XHQmW3JlYWRvbmx5XSB7XG5cdFx0XHRjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHRcdFx0ZmlsdGVyOiBvcGFjaXR5KDY1JSk7XG5cdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0b3BhY2l0eTogLjY1O1xuXHRcdFx0YmFja2dyb3VuZDogJGZvcm1CZ0NvbG9yOyB9XG5cdFx0Ly9mb2N1cyDmqKPlvI9cblx0XHQmOmZvY3VzIHtcblx0XHRcdGJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgkZm9ybVNoYWRvdywwLjMpOyB9IH1cblx0Ly8gc2VsZWN06Kit5a6aXG5cdCZfX3NlbGVjdCB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmc6IDA7XG5cdFx0c2VsZWN0IHtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0bWFyZ2luOiAtKCRmb3JtTGluZVdpZHRoKTtcblx0XHRcdHBhZGRpbmc6IDAgZ2FwKDEpO1xuXHRcdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMCk7XG5cdFx0XHRib3JkZXItd2lkdGg6IDA7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAkZm9ybUJkUnM7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHR6LWluZGV4OiAyO1xuXHRcdFx0b3B0aW9uIHtcblx0XHRcdFx0Y29sb3I6ICR0ZXh0Q29sb3I7IH1cblx0XHRcdC8v5qyE5L2N6Yyv6Kqk5qij5byPXG5cdFx0XHQmLmlucHV0LXZhbGlkYXRpb24tZXJyb3Ige1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAkZXJyb3JDb2xvcjsgfVxuXHRcdFx0Ly/mrITkvY3miJDlip/mqKPlvI9cblx0XHRcdCYuaW5wdXQtdmFsaWRhdGlvbi1zdWNjZXNzIHtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgJHN1Y2Nlc3NDb2xvcjsgfVxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgkZm9ybVNoYWRvdywwLjMpOyB9IH1cblx0XHQvL+S4ieinkuW9olxuXHRcdCY6OmFmdGVyIHtcblx0XHRcdGNvbnRlbnQ6IFwiXCI7XG5cdFx0XHRtYXJnaW46IGF1dG87XG5cdFx0XHRAaW5jbHVkZSB0cmlhbmdsZSgkc2VsZWN0QXJyb3dXaWR0aCAkc2VsZWN0QXJyb3dIZWlnaHQsJHNlbGVjdEFycm93Q29sb3IsZG93bik7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDA7XG5cdFx0XHRyaWdodDogMTBweDtcblx0XHRcdGJvdHRvbTogMDtcblx0XHRcdHotaW5kZXg6IDE7IH0gfVxuXHQvL3RleHRhcmVhXG5cdCZfX3RleHRhcmVhIHtcblx0XHRoZWlnaHQ6ICR0ZXh0YXJlYUhlaWdodDsgfVxuXHQvLyBmb3JtX1/lm57ppYvoiIfmj5DnpLroqIrmga9cblx0Jl9fZmVlZGJhY2ssJl9fdGlwcyB7XG5cdFx0cGFkZGluZzogZ2FwKDAuNSkgZ2FwKDEpIDAgMDtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRjb2xvcjogJHRpcHNDb2xvcjtcblx0XHQmOjpiZWZvcmUge1xuXHRcdFx0Zm9udC1mYW1pbHk6ICdpY29tb29uJztcblx0XHRcdG1hcmdpbjogLTJweCBnYXAoMC41KSAwIDA7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9IH1cblx0Jl9fdGlwcyB7XG5cdFx0Jjo6YmVmb3JlIHtcblx0XHRcdGNvbnRlbnQ6ICR0aXBzSWNvbjtcblx0XHRcdGZvbnQtc2l6ZTogJHRpcHNJY29uU2l6ZTsgfVxuXHRcdHNwYW4ge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuXHRcdGEge1xuXHRcdFx0Y29sb3I6ICMxNjg4MDA7IH0gfVxuXHQvL2Zvcm1fX+ioiuaBr+aWh+Wtl1xuXHQuZmllbGQtdmFsaWRhdGlvbi12YWxpZCB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0XHQmOjpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogJHZhbGlkSWNvbjsgfSB9XG5cdC8vIGZvcm1fX+Wbnumliy3miJDlip9cblx0LmZpZWxkLXZhbGlkYXRpb24tc3VjY2VzcyB7XG5cdFx0Y29sb3I6ICRzdWNjZXNzQ29sb3I7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0Jjo6YmVmb3JlIHtcblx0XHRcdGNvbnRlbnQ6ICRzdWNjZXNzSWNvbjsgfSB9XG5cdC8vIGZvcm1fX+Wbnumliy3lpLHmlZdcblx0LmZpZWxkLXZhbGlkYXRpb24tZXJyb3Ige1xuXHRcdGNvbG9yOiAkZXJyb3JDb2xvcjtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHQmOjpiZWZvcmUge1xuXHRcdFx0Y29udGVudDogJGVycm9ySWNvbjsgfSB9XG5cdC8vIGZvcm1fX+mpl+itieeivGltZ1xuXHQmX19pbWcge1xuXHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdHBhZGRpbmc6IGNlaWwoKCRmb3JtSGVpZ2h0IC0gJGZvbnRMaCkvMikgMDtcblx0XHRpbWcge1xuXHRcdFx0d2lkdGg6IDkwcHg7XG5cdFx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0XHRtYXJnaW4tdG9wOiA0cHg7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IGdhcCgxKTtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jazsgfSB9XG5cdC8vIOmpl+itieeivCByZXNldFxuXHQmX19yZXNldCB7XG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0Y29sb3I6ICRyZXNldENvbG9yO1xuXHRcdGkge1xuXHRcdFx0Zm9udC1zaXplOiAkZm9udExoO1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0dHJhbnNpdGlvbjogYWxsIC41cyBlYXNlLW91dDsgfVxuXHRcdCY6aG92ZXIge1xuXHRcdFx0Y29sb3I6ICRyZXNldENvbG9yO1xuXHRcdFx0aSB7XG5cdFx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH0gfSB9IH1cblxuLy8g6aCQ6KitcmFkaW/jgIFjaGVja2JveFxuaW5wdXQge1xuXHQvLyA9PT09PT09IGlucHV0IC0g5aSa5pOH5LiA6YG46aCFID09PT09PT1cblx0Jlt0eXBlPXJhZGlvXSB7XG5cdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxuXHQvLyA9PT09PT09IGlucHV0IC0gY2hlY2tib3jmoLjlj5bmlrnloYogPT09PT09PVxuXHQmW3R5cGU9Y2hlY2tib3hdIHtcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9IH1cbi8vIHJhZGlv44CBY2hlY2tib3gg5qGG5p62XG4uZm9ybS1zZWxlY3Rpb24ge1xuXHRwYWRkaW5nOiBnYXAoMC41KSAwO1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHQvLyDku7/poJDoqK1yYWRpb+OAgWNoZWNrYm94XG5cdCZfX2lucHV0IHtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTsgfVxuXHQvL+ihjOWFp+aOkuWIl1xuXHQmLS1pbmxpbmUge1xuXHRcdG1hcmdpbi1yaWdodDogZ2FwKDEuNSk7XG5cdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdG1heC13aWR0aDogaW5pdGlhbDsgfVxuXHQvLyByYWRpb+OAgWNoZWNrYm94LWxhYmVsIOioreWumlxuXHQmX19sYWJlbCB7XG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdGRpc3BsYXk6IGJsb2NrOyB9XG5cdC8vcmFkaW8gY2hja2JveCDmloflrZdcblx0Jl9fdGV4dCB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0cGFkZGluZzogZ2FwKDAuNSkgZ2FwKDEpIGdhcCgwLjUpIDA7XG5cdFx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0XHRtYXgtd2lkdGg6IGluaXRpYWw7XG5cdFx0LmZvcm0tc2VsZWN0aW9uX19vcHRpb24sLmZvcm0tc2VsZWN0aW9uX19ub3RlIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7IH1cblx0XHQuZm9ybS1zZWxlY3Rpb25fX29wdGlvbiB7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IGdhcCgwLjUpO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0Ly8g5Zau6YG4LeWvpuW/g+Wck+OAgeikh+mBuC3li77pgbhcblx0XHRcdCY6OmJlZm9yZSB7XG5cdFx0XHRcdGNvbnRlbnQ6ICcnO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZS1vdXQ7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7IH0gfSB9XG5cdC8vcmFkaW8g6YG45pOH5b6M5aGr5a+r5qGGXG5cdCZfX2JveCB7XG5cdFx0cGFkZGluZy10b3A6IGdhcCgwLjUpO1xuXHRcdHBhZGRpbmctbGVmdDogJHJhZGlvU2l6ZTtcblx0XHRkaXNwbGF5OiBub25lOyB9IH1cbi8vIOWWrumBuC3lnJNcbi5mb3JtLXNlbGVjdGlvbl9fdGV4dC0tcmFkaW9ib3gge1xuXHRsaW5lLWhlaWdodDogJHJhZGlvU2l6ZTtcblx0LmZvcm0tc2VsZWN0aW9uX19vcHRpb24sLmZvcm0tc2VsZWN0aW9uX19vcHRpb246OmJlZm9yZSB7XG5cdFx0Ym9yZGVyLXJhZGl1czogJHJhZGlvQmRSczsgfVxuXHQuZm9ybS1zZWxlY3Rpb25fX29wdGlvbiB7XG5cdFx0d2lkdGg6ICRyYWRpb1NpemU7XG5cdFx0aGVpZ2h0OiAkcmFkaW9TaXplO1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRyYWRpb0JnQ29sb3I7XG5cdFx0Ym9yZGVyOiAkcmFkaW9MaW5lV2lkdGggc29saWQgJHJhZGlvTGluZUNvbG9yO1xuXHRcdC8vIOWWrumBuC3lr6blv4PlnJNcblx0XHQmOjpiZWZvcmUge1xuXHRcdFx0d2lkdGg6ICRyYWRpb1NpemUgLSAxMHB4O1xuXHRcdFx0aGVpZ2h0OiAkcmFkaW9TaXplIC0gMTBweDtcblx0XHRcdG1hcmdpbjogYXV0bztcblx0XHRcdGJhY2tncm91bmQ6ICRyYWRpb0NoZWNrQ29sb3I7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDA7XG5cdFx0XHRsZWZ0OiAwO1xuXHRcdFx0cmlnaHQ6IDA7XG5cdFx0XHRib3R0b206IDA7IH0gfSB9XG4vLyDopIfpgbgt5Yu+XG4uZm9ybS1zZWxlY3Rpb25fX3RleHQtLWNoZWNrYm94IHtcblx0bGluZS1oZWlnaHQ6ICRjaGVja2JveFNpemU7XG5cdC5mb3JtLXNlbGVjdGlvbl9fb3B0aW9uLC5mb3JtLXNlbGVjdGlvbl9fbm90ZTo6YmVmb3JlIHtcblx0XHRib3JkZXItcmFkaXVzOiAkY2hlY2tib3hCZFJzOyB9XG5cdC5mb3JtLXNlbGVjdGlvbl9fb3B0aW9uIHtcblx0XHR3aWR0aDogJGNoZWNrYm94U2l6ZTtcblx0XHRoZWlnaHQ6ICRjaGVja2JveFNpemU7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogJHJhZGlvQmdDb2xvcjtcblx0XHRib3JkZXI6ICRjaGVja2JveExpbmVXaWR0aCBzb2xpZCAkY2hlY2tib3hMaW5lQ29sb3I7XG5cdFx0Ly8g5Yu+5Yu+XG5cdFx0Jjo6YmVmb3JlIHtcblx0XHRcdHdpZHRoOiAkY2hlY2tib3hTaXplIC0gMTBweDtcblx0XHRcdGhlaWdodDogJGNoZWNrYm94U2l6ZSAqIDAuMzMzO1xuXHRcdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRcdGJvcmRlci1jb2xvcjogJGNoZWNrYm94Q2hlY2tDb2xvcjtcblx0XHRcdGJvcmRlci13aWR0aDogMCAwIDNweCAzcHg7XG5cdFx0XHRtYXJnaW46IGF1dG87XG5cdFx0XHR0b3A6IDA7XG5cdFx0XHRsZWZ0OiAwO1xuXHRcdFx0cmlnaHQ6IDA7XG5cdFx0XHRib3R0b206IDA7XG5cdFx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHRyYW5zbGF0ZSgycHgsLTJweCk7IH0gfSB9XG4vLyDku7/mjInpiJVcbi5mb3JtLXNlbGVjdGlvbl9fdGV4dC0tYnRuIHtcblx0d2lkdGg6ICRjaG9pY2VCdG5XaWR0aDtcblx0aGVpZ2h0OiAkY2hvaWNlQnRuSGVpZ2h0O1xuXHRwYWRkaW5nOiBjZWlsKCgkY2hvaWNlQnRuSGVpZ2h0IC0gJGZvbnRMaCkvMikgMTBweDtcblx0Ym9yZGVyOiAkY2hvaWNlQnRuTGluZVdpZHRoIHNvbGlkICRjaG9pY2VCdG5MaW5lQ29sb3I7XG5cdGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VCdG5Db2xvcjtcblx0Y29sb3I6ICRjaG9pY2VCdG5UZXh0Q29sb3I7XG5cdGJvcmRlci1yYWRpdXM6ICRjaG9pY2VCdG5CZFJzO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbi8vIOmBuOmghS1jaGVja2VkXG4uZm9ybS1zZWxlY3Rpb25fX2lucHV0OmNoZWNrZWQgKyAuZm9ybS1zZWxlY3Rpb25fX2xhYmVsID4gLmZvcm0tc2VsZWN0aW9uX190ZXh0LS1yYWRpb2JveCAuZm9ybS1zZWxlY3Rpb25fX29wdGlvbjo6YmVmb3JlLFxuLmZvcm0tc2VsZWN0aW9uX19pbnB1dDpjaGVja2VkICsgLmZvcm0tc2VsZWN0aW9uX19sYWJlbCA+IC5mb3JtLXNlbGVjdGlvbl9fdGV4dC0tY2hlY2tib3ggLmZvcm0tc2VsZWN0aW9uX19vcHRpb246OmJlZm9yZSB7XG5cdGRpc3BsYXk6IGJsb2NrOyB9XG4uZm9ybS1zZWxlY3Rpb25fX2lucHV0OmNoZWNrZWQgKyAuZm9ybS1zZWxlY3Rpb25fX2xhYmVsIC5mb3JtLXNlbGVjdGlvbl9fdGV4dC0tYnRuIHtcblx0Ym9yZGVyOiAkY2hvaWNlQnRuTGluZVdpZHRoIHNvbGlkICRjaG9pY2VCdG5DaGVja0xpbmVDb2xvcjtcblx0YmFja2dyb3VuZC1jb2xvcjogJGNob2ljZUJ0bkNoZWNrQ29sb3I7XG5cdGNvbG9yOiAkY2hvaWNlQnRuQ2hlY2tUZXh0Q29sb3I7IH1cbi5mb3JtLXNlbGVjdGlvbl9faW5wdXQ6Y2hlY2tlZCArIC5mb3JtLXNlbGVjdGlvbl9fbGFiZWwgPiAuZm9ybS1zZWxlY3Rpb25fX2JveCB7XG5cdGRpc3BsYXk6IGZsZXg7IH1cblxuLy8gZGlzYWJsZWQtaW5wdXTmnKzouqtcbi5mb3JtLXNlbGVjdGlvbl9faW5wdXQge1xuXHQmW2Rpc2FibGVkXSB7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDsgfSB9XG4vLyBkaXNhYmxlZC3mloflrZdcbi5mb3JtLXNlbGVjdGlvbl9faW5wdXRbZGlzYWJsZWRdICsgLmZvcm0tc2VsZWN0aW9uX19sYWJlbCB7XG5cdGZpbHRlcjogb3BhY2l0eSg1MCUpO1xuXHRvcGFjaXR5OiAwLjQ7XG5cdGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cblxuQGluY2x1ZGUgcndkKDc2OCkge1xuXHQuZm9ybSB7XG5cdFx0Jl9fZmllbGQge1xuXHRcdFx0cGFkZGluZzogMDsgfVxuXHRcdCZfX2xhYmVsIHtcblx0XHRcdC5mb3JtX190aXRsZSB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiAwO1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDA7IH0gfSB9XG5cdC5mb3JtLXNlbGVjdGlvbiB7XG5cdFx0cGFkZGluZzogMDsgfSB9XG4iLCIvL1RoaXMgaXMgc2FzcyBmaWxlXG5AaW1wb3J0ICdzdXN5JztcbkBpbXBvcnQgXCJ2YXJpYWJsZVwiO1xuQGltcG9ydCBcImZ1bmN0aW9uXCI7XG5AaW1wb3J0IFwibWl4aW5cIjtcbkBpbXBvcnQgXCJleHRlbmRcIjtcbiIsIi8vIFN1c3kgKFVuLVByZWZpeGVkKVxuLy8gPT09PT09PT09PT09PT09PT09XG5cbkBpbXBvcnQgJ3N1c3ktcHJlZml4JztcbkBpbXBvcnQgJ3N1c3kvdW5wcmVmaXgnO1xuIiwiLy8gU3VzeSAoUHJlZml4ZWQpXG4vLyA9PT09PT09PT09PT09PT1cblxuXG5AaW1wb3J0ICd2ZXJzaW9uJztcbkBpbXBvcnQgJ3N1c3kvdXRpbGl0aWVzJztcbkBpbXBvcnQgJ3N1c3kvc3UtdmFsaWRhdGUnO1xuQGltcG9ydCAnc3VzeS9zdS1tYXRoJztcbkBpbXBvcnQgJ3N1c3kvc2V0dGluZ3MnO1xuQGltcG9ydCAnc3VzeS9ub3JtYWxpemUnO1xuQGltcG9ydCAnc3VzeS9wYXJzZSc7XG5AaW1wb3J0ICdzdXN5L3N5bnRheC1oZWxwZXJzJztcbkBpbXBvcnQgJ3N1c3kvYXBpJztcbiIsIi8vIFJlbGVhc2UgTWFuYWdlbWVudCBpbiBTdXN5XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cbi8vIFN1c3kgVmVyc2lvbiBbdmFyaWFibGVdXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgU3VzeSBiZWluZyB1c2VkLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgbWFqb3IgdmVyc2lvbiBmb3IgYW55IEJSRUFLSU5HIGNoYW5nZXMuXG4vLy8gLSBXZSB3aWxsIHJlbGVhc2UgYSBtaW5vciB2ZXJzaW9uIGZvciBhbnkgc2lnbmlmaWNhbnQgTkVXIGZlYXR1cmVzLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgcGF0Y2ggZm9yIGFueSBCVUdGSVggY2hhbmdlcy5cbi8vL1xuLy8vIEBncm91cCBfdmVyc2lvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vIEBzaW5jZSAzLjAuMVxuLy8vXG4vLy8gQHByb3Age2ludGVnZXJ9ICdtYWpvcicgLSB0aGUgbWFqb3IgcmVsZWFzZSBudW1iZXJcbi8vLyBAcHJvcCB7aW50ZWdlcn0gJ21pbm9yJyAtIHRoZSBtaW5vciByZWxlYXNlIG51bWJlclxuLy8vIEBwcm9wIHtpbnRlZ2VyfSAncGF0Y2gnIC0gdGhlIHBhdGNoIG51bWJlclxuJF9zdXN5LXZlcnNpb246IChcbiAgJ21ham9yJzogMyxcbiAgJ21pbm9yJzogMCxcbiAgJ3BhdGNoJzogNyxcbik7XG5cblxuLy8gU3VzeSBWZXJzaW9uIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gUmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFN1c3lcbi8vLyBhcyBhIHN0cmluZyBpbiB0aGUgY29tbW9uIGBtYWpvci5taW5vci5wYXRjaGAgZm9ybWF0IOKAk1xuLy8vIG9yIHJldHVybnMgb25lIHBhcnQgKG1ham9yIHwgbWlub3IgfCBwYXRjaCkgYXMgYSBudW1iZXJcbi8vLyBmb3IgdmVyc2lvbiBjb21wYXJpc29ucy5cbi8vLyBTaW5jZSB2ZXJzaW9uIG51bWJlcnMgYXJlbid0IGFjdHVhbCBkZWNpbWFscyxcbi8vLyB0aGVyZSBpcyBubyBzaW1wbGUgd2F5IHRvIHJldHVybiB0aGUgZnVsbCB2ZXJzaW9uXG4vLy8gYXMgYSBjb21wYXJhYmxlIG51bWJlciBpbiBTYXNzLlxuLy8vXG4vLy8gQGdyb3VwIF92ZXJzaW9uXG4vLy9cbi8vLyBAcGFyYW0geydtYWpvcicgfCAnbWlub3InIHwgJ3BhdGNoJ30gJHBhcnQgW251bGxdIC1cbi8vLyAgIFRoZSBwYXJ0IChtYWpvciB8IG1pbm9yIHwgcGF0Y2gpIHRvIHJldHVybiBhcyBhIG51bWJlci5cbi8vLyAgIEFueSBvdGhlciB2YWx1ZSB3aWxsIHJldHVybiB0aGUgZnVsbCB2ZXJzaW9uIGFzIGEgc3RyaW5nLlxuLy8vIEBleGFtcGxlIHNjc3MgLSBDdXJyZW50IFN1c3kgVmVyc2lvblxuLy8vICAgLyogRnVsbCBWZXJzaW9uOiAje3N1c3ktdmVyc2lvbigpfSAqL1xuLy8vICAgLyogTWFqb3IgUmVsZWFzZTogI3tzdXN5LXZlcnNpb24oJ21ham9yJyl9ICovXG5AZnVuY3Rpb24gc3VzeS12ZXJzaW9uKFxuICAkcGFydDogbnVsbFxuKSB7XG4gICRtYWpvcjogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ21ham9yJyk7XG4gICRtaW5vcjogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ21pbm9yJyk7XG4gICRwYXRjaDogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ3BhdGNoJyk7XG4gICRmdWxsOiAnI3skbWFqb3J9LiN7JG1pbm9yfS4jeyRwYXRjaH0nO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJHBhcnQpIG9yICRmdWxsO1xufVxuIiwiLy8gU2FzcyBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09XG4vLyAtIFN1c3kgRXJyb3IgT3V0cHV0IE92ZXJyaWRlIFt2YXJpYWJsZV1cbi8vIC0gU3VzeSBFcnJvciBbZnVuY3Rpb25dXG5cblxuXG4vLyBTdXN5IEVycm9yIE91dHB1dCBPdmVycmlkZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUdXJuIG9mZiBlcnJvciBvdXRwdXQgZm9yIHRlc3Rpbmdcbi8vLyBAZ3JvdXAgeC11dGlsaXR5XG4vLy8gQGFjY2VzcyBwcml2YXRlXG4kX3N1c3ktZXJyb3Itb3V0cHV0LW92ZXJyaWRlOiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cbi8vIFN1c3kgRXJyb3Jcbi8vIC0tLS0tLS0tLS1cbi8vLyBPcHRpb25hbGx5IHJldHVybiBlcnJvciBtZXNzYWdlcyB3aXRob3V0IGZhaWxpbmcsXG4vLy8gYXMgYSB3YXkgdG8gdGVzdCBlcnJvciBjYXNlc1xuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtzdHJpbmd9ICRtZXNzYWdlIC1cbi8vLyAgIEEgdXNlZnVsIGVycm9yIG1lc3NhZ2UsIGV4cGxhaW5pbmcgdGhlIHByb2JsZW1cbi8vLyBAcGFyYW0ge3N0cmluZ30gJHNvdXJjZSAtXG4vLy8gICBUaGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nXG4vLy8gQHBhcmFtIHtib29sfSAkb3ZlcnJpZGUgWyRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGVdIC1cbi8vLyAgIE9wdGlvbmFsbHkgcmV0dXJuIHRoZSBlcnJvciByYXRoZXIgdGhhbiBmYWlsaW5nXG4vLy8gQHJldHVybiB7c3RyaW5nfSAtXG4vLy8gICBDb21iaW5lZCBlcnJvciB3aXRoIHNvdXJjZSBhbmQgbWVzc2FnZVxuLy8vIEB0aHJvd3MgV2hlbiBgJG92ZXJyaWRlID09IHRydWVgXG5AZnVuY3Rpb24gX3N1c3ktZXJyb3IoXG4gICRtZXNzYWdlLFxuICAkc291cmNlLFxuICAkb3ZlcnJpZGU6ICRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGVcbikge1xuICBAaWYgJG92ZXJyaWRlIHtcbiAgICBAcmV0dXJuICdFUlJPUiBbI3skc291cmNlfV0gI3skbWVzc2FnZX0nO1xuICB9XG5cbiAgQGVycm9yICdbI3skc291cmNlfV0gI3skbWVzc2FnZX0nO1xufVxuXG5cbi8vIFN1IElzIENvbXBhcmFibGVcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSB1bml0cyBpbiBhIGdyaWQgYXJlIGNvbXBhcmFibGVcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJzfSAkbGVuZ3Roc+KApiAtXG4vLy8gICBBcmdsaXN0IG9mIGFsbCB0aGUgbnVtYmVyIHZhbHVlcyB0byBjb21wYXJlXG4vLy8gICAoY29sdW1ucywgZ3V0dGVycywgc3BhbiwgZXRjKVxuLy8vXG4vLy8gQHJldHVybiB7J2ZsdWlkJyB8ICdzdGF0aWMnIHwgZmFsc2V9IC1cbi8vLyAgIFRoZSB0eXBlIG9mIHNwYW4gKGZsdWlkIG9yIHN0YXRpYykgd2hlbiB1bml0cyBtYXRjaCxcbi8vLyAgIG9yIGBmYWxzZWAgZm9yIG1pc21hdGNoZWQgdW5pdHNcbkBmdW5jdGlvbiBfc3UtaXMtY29tcGFyYWJsZShcbiAgJGxlbmd0aHMuLi5cbikge1xuICAkZmlyc3Q6IG50aCgkbGVuZ3RocywgMSk7XG5cbiAgQGlmIChsZW5ndGgoJGxlbmd0aHMpID09IDEpIHtcbiAgICBAcmV0dXJuIGlmKHVuaXRsZXNzKCRmaXJzdCksICdmbHVpZCcsICdzdGF0aWMnKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRsZW5ndGhzKSB7XG4gICAgJGNvbXA6IG50aCgkbGVuZ3RocywgJGkpO1xuXG4gICAgJGZhaWw6IG5vdCBjb21wYXJhYmxlKCRmaXJzdCwgJGNvbXApO1xuICAgICRmYWlsOiAkZmFpbCBvciAodW5pdGxlc3MoJGZpcnN0KSBhbmQgbm90IHVuaXRsZXNzKCRjb21wKSk7XG4gICAgJGZhaWw6ICRmYWlsIG9yICh1bml0bGVzcygkY29tcCkgYW5kIG5vdCB1bml0bGVzcygkZmlyc3QpKTtcblxuICAgIEBpZiAkZmFpbCB7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gaWYodW5pdGxlc3MoJGZpcnN0KSwgJ2ZsdWlkJywgJ3N0YXRpYycpO1xufVxuXG5cbi8vIFN1IE1hcCBBZGQgVW5pdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUaGUgY2FsYyBmZWF0dXJlcyB1c2UgYSBtYXAgb2YgdW5pdHMgYW5kIHZhbHVlc1xuLy8vIHRvIGNvbXBpbGUgdGhlIHByb3BlciBhbGdvcnl0aG0uXG4vLy8gVGhpcyBmdW5jdGlvbiBhZGRzIGEgbmV3IHZhbHVlIHRvIGFueSBjb21wYXJhYmxlIGV4aXN0aW5nIHVuaXQvdmFsdWUsXG4vLy8gb3IgYWRkcyBhIG5ldyB1bml0L3ZhbHVlIHBhaXIgdG8gdGhlIG1hcFxuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRtYXAgLVxuLy8vICAgQSBtYXAgb2YgdW5pdC92YWx1ZSBwYWlycywgZS5nLiAoJ3B4JzogMTIwcHgpXG4vLy8gQHBhcmFtIHtsZW5ndGh9ICR2YWx1ZSAtXG4vLy8gICBBIG5ldyBsZW5ndGggdG8gYmUgYWRkZWQgdG8gdGhlIG1hcFxuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgVGhlIHVwZGF0ZWQgbWFwLCB3aXRoIG5ldyB2YWx1ZSBhZGRlZFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkbWFwOiAoMHB4OiAxMjBweCk7XG4vLy8gICAkbWFwOiBfc3UtbWFwLWFkZC11bml0cygkbWFwLCAxaW4pOyAvLyBhZGQgYSBjb21wYXJhYmxlIHVuaXRcbi8vLyAgICRtYXA6IF9zdS1tYXAtYWRkLXVuaXRzKCRtYXAsIDN2dyk7IC8vIGFkZCBhIG5ldyB1bml0XG4vLy9cbi8vLyAgIEBlYWNoICR1bml0cywgJHZhbHVlIGluICRtYXAge1xuLy8vICAgICAvKiAjeyR1bml0c306ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuQGZ1bmN0aW9uIF9zdS1tYXAtYWRkLXVuaXRzKFxuICAkbWFwLFxuICAkdmFsdWVcbikge1xuICAkdW5pdDogJHZhbHVlICogMDtcbiAgJGhhczogbWFwLWdldCgkbWFwLCAkdW5pdCkgb3IgMDtcblxuICBAaWYgKCRoYXMgPT0gMCkge1xuICAgIEBlYWNoICR0cnksICRjb3VsZCBpbiAkbWFwIHtcbiAgICAgICRtYXRjaDogY29tcGFyYWJsZSgkdHJ5LCAkdmFsdWUpO1xuICAgICAgJHVuaXQ6IGlmKCRtYXRjaCwgJHRyeSwgJHVuaXQpO1xuICAgICAgJGhhczogaWYoJG1hdGNoLCAkY291bGQsICRoYXMpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRtYXAsICgkdW5pdDogJGhhcyArICR2YWx1ZSkpO1xufVxuXG5cbi8vIFN1c3kgRmxhdHRlblxuLy8gLS0tLS0tLS0tLS0tXG4vLy8gRmxhdHRlbiBhIG11bHRpZGltZW5zaW9uYWwgbGlzdFxuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkbGlzdCAtXG4vLy8gICBUaGUgbGlzdCB0byBiZSBmbGF0dGVuZWRcbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBUaGUgZmxhdHRlbmVkIGxpc3Rcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJGxpc3Q6IDEyMHB4ICgzMGVtIDMwZW0pIDEyMHB4O1xuLy8vICAgLyogI3tfc3VzeS1mbGF0dGVuKCRsaXN0KX0gKi9cbkBmdW5jdGlvbiBfc3VzeS1mbGF0dGVuKFxuICAkbGlzdFxuKSB7XG4gICRmbGF0OiAoKTtcblxuICAvLyBEb24ndCBpdGVyYXRlIG92ZXIgbWFwc1xuICBAaWYgKHR5cGUtb2YoJGxpc3QpID09ICdtYXAnKSB7XG4gICAgQHJldHVybiAkbGlzdDtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBsaXN0cyAob3Igc2luZ2xlIGl0ZW1zKVxuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmICh0eXBlLW9mKCRpdGVtKSA9PSAnbGlzdCcpIHtcbiAgICAgICRpdGVtOiBfc3VzeS1mbGF0dGVuKCRpdGVtKTtcbiAgICAgICRmbGF0OiBqb2luKCRmbGF0LCAkaXRlbSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZmxhdDogYXBwZW5kKCRmbGF0LCAkaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGZsYXR0ZW5lZCBsaXN0XG4gIEByZXR1cm4gJGZsYXQ7XG59XG4iLCIvLy8gVmFsaWRhdGlvblxuLy8vID09PT09PT09PT1cbi8vLyBFYWNoIGFyZ3VtZW50IHRvIFN1IGhhcyBhIHNpbmdsZSBjYW5vbmljYWwgc3ludGF4LlxuLy8vIFRoZXNlIHZhbGlkYXRpb24gZnVuY3Rpb25zIGNoZWNrIHRvIGVuc3VyZVxuLy8vIHRoYXQgZWFjaCBhcmd1bWVudCBpcyB2YWxpZCxcbi8vLyBpbiBvcmRlciB0byBwcm92aWRlIHVzZWZ1bCBlcnJvcnNcbi8vLyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdHMvXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBzZWUgc3UtdmFsaWQtY29sdW1uc1xuLy8vIEBzZWUgc3UtdmFsaWQtZ3V0dGVyc1xuLy8vIEBzZWUgc3UtdmFsaWQtc3ByZWFkXG4vLy8gQHNlZSBzdS12YWxpZC1sb2NhdGlvblxuXG5cblxuLy8gVmFsaWQgU3BhblxuLy8gLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBzcGFuYCBhcmd1bWVudFxuLy8vIGlzIGEgbnVtYmVyLCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0XG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9mIGNvbHVtbnMsIG9yIGxlbmd0aCBvZiBzcGFuXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXIgfCBsaXN0fSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRzcGFuYCBudW1iZXIsIGxlbmd0aCwgb3IgY29sdW1ucyBsaXN0XG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gc3BhbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsIG9yIHZhbGlkIGNvbHVtbiBsaXN0XG5AZnVuY3Rpb24gc3UtdmFsaWQtc3BhbihcbiAgJHNwYW5cbikge1xuICAkdHlwZTogdHlwZS1vZigkc3Bhbik7XG4gIEBpZiAoJHR5cGUgPT0gJ251bWJlcicpIHtcbiAgICBAcmV0dXJuICRzcGFuO1xuICB9IEBlbHNlIGlmICgkdHlwZSA9PSAnbGlzdCcpIGFuZCBzdS12YWxpZC1jb2x1bW5zKCRzcGFuLCAnc2lsZW50LWZhaWx1cmUnKSB7XG4gICAgQHJldHVybiAkc3BhbjtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcGFuKX1dIGAje2luc3BlY3QoJHNwYW4pfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIHZhbGlkIG51bWJlciwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBmb3IgJHNwYW4uJyxcbiAgICAnc3UtdmFsaWQtc3BhbicpO1xufVxuXG5cblxuLy8gVmFsaWQgQ29sdW1uc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBjb2x1bW5zYCBhcmd1bWVudCBpcyBhIHZhbGlkXG4vLy8gbGlzdCBvZiBjb2x1bW4tbGVuZ3Roc1xuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1uLWxlbmd0aHNcbi8vLyBAcGFyYW0ge2Jvb2x9ICRzaWxlbnQtZmFpbHVyZSBbdHJ1ZV0gLVxuLy8vICAgU2V0IGZhbHNlIHRvIHJldHVybiBudWxsIG9uIGZhaWx1cmVcbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJGNvbHVtbnNgIGxpc3Rcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBjb2x1bW4gdmFsdWUgaXMgbm90IGEgdmFsaWQgbGlzdCBvZiBudW1iZXJzXG5AZnVuY3Rpb24gc3UtdmFsaWQtY29sdW1ucyhcbiAgJGNvbHVtbnMsXG4gICRzaWxlbnQtZmFpbHVyZTogZmFsc2Vcbikge1xuICBAaWYgKHR5cGUtb2YoJGNvbHVtbnMpID09ICdsaXN0Jykge1xuICAgICRmYWlsOiBmYWxzZTtcblxuICAgIEBlYWNoICRjb2wgaW4gJGNvbHVtbnMge1xuICAgICAgQGlmICh0eXBlLW9mKCRjb2wpICE9ICdudW1iZXInKSB7XG4gICAgICAgICRmYWlsOiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiBub3QgJGZhaWwge1xuICAgICAgQHJldHVybiAkY29sdW1ucztcbiAgICB9XG4gIH1cblxuICAvLyBTaWxlbnQgRmFpbHVyZVxuICBAaWYgJHNpbGVudC1mYWlsdXJlIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBFcnJvciBNZXNzYWdlXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRjb2x1bW5zKX1dIGAje2luc3BlY3QoJGNvbHVtbnMpfWAnO1xuXG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgdmFsaWQgbGlzdCBvZiBudW1iZXJzIGZvciAkY29sdW1ucy4nLFxuICAgICdzdS12YWxpZC1jb2x1bW5zJyk7XG59XG5cblxuXG4vLyBWYWxpZCBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGd1dHRlcnNgIGFyZ3VtZW50IGlzIGEgdmFsaWQgbnVtYmVyXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlclxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRndXR0ZXJzYCBudW1iZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBndXR0ZXIgdmFsdWUgaXMgbm90IGEgbnVtYmVyXG5AZnVuY3Rpb24gc3UtdmFsaWQtZ3V0dGVycyhcbiAgJGd1dHRlcnNcbikge1xuICAkdHlwZTogdHlwZS1vZigkZ3V0dGVycyk7XG5cbiAgQGlmICgkdHlwZSA9PSAnbnVtYmVyJykge1xuICAgIEByZXR1cm4gJGd1dHRlcnM7XG4gIH1cblxuICAkYWN0dWFsOiAnWyN7JHR5cGV9XSBgI3tpbnNwZWN0KCRndXR0ZXJzKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSBudW1iZXIgb3IgbGVuZ3RoIGZvciAkZ3V0dGVycy4nLFxuICAgICdzdS12YWxpZC1ndXR0ZXJzJyk7XG59XG5cblxuXG4vLyBWYWxpZCBTcHJlYWRcbi8vIC0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBzcHJlYWRgIGFyZ3VtZW50IGlzIGEgdmFsaWRcbi8vLyBpbnRpZ2VyIGJldHdlZW4gYC0xYCBhbmQgYDFgXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyB0byBpbmNsdWRlIGluIGEgc3Bhbixcbi8vLyAgIHJlbGF0aXZlIHRvIHRoZSBudW1iZXIgY29sdW1uc1xuLy8vXG4vLy8gQHJldHVybiB7MCB8IDEgfCAtMX0gLVxuLy8vICAgVmFsaWRhdGVkIGAkc3ByZWFkYCBudW1iZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBzcHJlYWQgdmFsdWUgaXMgbm90IGEgdmFsaWQgc3ByZWFkXG5AZnVuY3Rpb24gc3UtdmFsaWQtc3ByZWFkKFxuICAkc3ByZWFkXG4pIHtcbiAgQGlmIGluZGV4KDAgMSAtMSwgJHNwcmVhZCkge1xuICAgIEByZXR1cm4gJHNwcmVhZDtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcHJlYWQpfV0gYCN7aW5zcGVjdCgkc3ByZWFkKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSBub3JtYWxpemVkIFswIHwgMSB8IC0xXSB2YWx1ZSBmb3IgYCRzcHJlYWRgLicsXG4gICAgJ3N1LXZhbGlkLXNwcmVhZCcpO1xufVxuXG5cblxuLy8gVmFsaWQgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGxvY2F0aW9uYCBhcmd1bWVudCBpcyBhIHZhbGlkIG51bWJlcixcbi8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIGF2YWlsYWJsZSBjb2x1bW5zXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZC1jb2x1bW5zIHRvIGJlIHNwYW5uZWRcbi8vLyBAcGFyYW0ge2ludGVnZXIgfCBzdHJpbmd9ICRsb2NhdGlvbiAtXG4vLy8gICBTdGFydGluZyAoMS1pbmRleGVkKSBjb2x1bW4tcG9zaXRpb24gb2YgdGhhdCBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy9cbi8vLyBAcmV0dXJuIHtpbnRlZ2VyfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRsb2NhdGlvbmAgaW50aWdlclxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIGxvY2F0aW9uIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGluZGV4LFxuLy8vICAgZ2l2ZW4gdGhlIGNvbnRleHQgYW5kIHNwYW4uXG5AZnVuY3Rpb24gc3UtdmFsaWQtbG9jYXRpb24oXG4gICRzcGFuLFxuICAkbG9jYXRpb24sXG4gICRjb2x1bW5zXG4pIHtcbiAgJGNvdW50OiBsZW5ndGgoJGNvbHVtbnMpO1xuXG4gIEBpZiAkbG9jYXRpb24ge1xuICAgIEBpZiAodHlwZS1vZigkbG9jYXRpb24pICE9ICdudW1iZXInKSBvciAobm90IHVuaXRsZXNzKCRsb2NhdGlvbikpIHtcbiAgICAgICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRsb2NhdGlvbil9XSBgI3skbG9jYXRpb259YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnI3skYWN0dWFsfSBpcyBub3QgYSB1bml0bGVzcyBudW1iZXIgZm9yICRsb2NhdGlvbi4nLFxuICAgICAgICAnc3UtdmFsaWQtbG9jYXRpb24nKTtcbiAgICB9IEBlbHNlIGlmIChyb3VuZCgkbG9jYXRpb24pICE9ICRsb2NhdGlvbikge1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJ0xvY2F0aW9uIChgI3skbG9jYXRpb259YCkgbXVzdCBiZSBhIDEtaW5kZXhlZCBpbnRpZ2VyIHBvc2l0aW9uLicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH0gQGVsc2UgaWYgKCRsb2NhdGlvbiA+ICRjb3VudCkgb3IgKCRsb2NhdGlvbiA8IDEpIHtcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdQb3NpdGlvbiBgI3skbG9jYXRpb259YCBkb2VzIG5vdCBleGlzdCBpbiBncmlkIGAjeyRjb2x1bW5zfWAuJyxcbiAgICAgICAgJ3N1LXZhbGlkLWxvY2F0aW9uJyk7XG4gICAgfSBAZWxzZSBpZiAoJGxvY2F0aW9uICsgJHNwYW4gLSAxID4gJGNvdW50KSB7XG4gICAgICAkZGV0YWlsczogJ2dyaWQgYCN7JGNvbHVtbnN9YCBmb3Igc3BhbiBgI3skc3Bhbn1gIGF0IGAjeyRsb2NhdGlvbn1gJztcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdUaGVyZSBhcmUgbm90IGVub3VnaCBjb2x1bW5zIGluICN7JGRldGFpbHN9LicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxvY2F0aW9uO1xufVxuIiwiLy8vIEdyaWQgTWF0aCBFbmdpbmVcbi8vLyA9PT09PT09PT09PT09PT09XG4vLy8gVGhlIGBzdWAgZnVuY3Rpb25zIGdpdmUgeW91IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG1hdGggbGF5ZXIsXG4vLy8gd2l0aG91dCBhbnkgc3ludGF4LXN1Z2FyIGxpa2Ugc2hvcnRoYW5kIHBhcnNpbmcsIGFuZCBub3JtYWxpemF0aW9uLlxuLy8vIElmIHlvdSBwcmVmZXIgbmFtZWQgYXJndW1lbnRzLCBhbmQgc3RyaXBwZWQtZG93biBzeW50YXgsXG4vLy8geW91IGNhbiB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGluIHlvdXIgY29kZSDigJNcbi8vLyByZXBsYWNpbmcgYHNwYW5gLCBgZ3V0dGVyYCwgYW5kIGBzbGljZWAuXG4vLy9cbi8vLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gdXNlZnVsXG4vLy8gZm9yIGJ1aWxkaW5nIG1peGlucyBvciBvdGhlciBleHRlbnNpb25zIHRvIFN1c3kuXG4vLy8gQXBwbHkgdGhlIFN1c3kgc3ludGF4IHRvIG5ldyBtaXhpbnMgYW5kIGZ1bmN0aW9ucyxcbi8vLyB1c2luZyBvdXIgXCJQbHVnaW4gSGVscGVyc1wiLFxuLy8vIG9yIHdyaXRlIHlvdXIgb3duIHN5bnRheCBhbmQgcGFzcyB0aGUgbm9ybWFsaXplZCByZXN1bHRzIGFsb25nXG4vLy8gdG8gYHN1YCBmb3IgY29tcGlsYXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vXG4vLy8gQHNlZSBzdS1zcGFuXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlIHN1LXNsaWNlXG4vLy8gQGlnbm9yZSBfc3Utc3VtXG4vLy8gQGlnbm9yZSBfc3UtY2FsYy1zcGFuXG4vLy8gQGlnbm9yZSBfc3UtY2FsYy1zdW1cbi8vLyBAaWdub3JlIF9zdS1uZWVkcy1jYWxjLW91dHB1dFxuXG5cblxuLy8gU3UgU3BhblxuLy8gLS0tLS0tLVxuLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgYSBDU1MtcmVhZHkgc3BhbiB3aWR0aCxcbi8vLyBiYXNlZCBvbiBub3JtYWxpemVkIHNwYW4gYW5kIGNvbnRleHQgZGF0YSDigJNcbi8vLyBhIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIGBzdXN5LXNwYW5gLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggdW5pdGxlc3MgbnVtYmVycyB3aWxsIHJldHVybiBgJWAgdmFsdWVzLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGNvbXBhcmFibGUgdW5pdHNcbi8vLyAgIHdpbGwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHVuaXRzIHByb3ZpZGVkLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGEgbWl4IG9mIHVuaXRzLFxuLy8vICAgb3IgYSBjb21iaW5hdGlvbiBvZiB1bnRpbGVzcyBudW1iZXJzIGFuZCB1bml0LWxlbmd0aHMsXG4vLy8gICB3aWxsIHJldHVybiBhIGBjYWxjKClgIHN0cmluZy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LXNwYW5cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9yIGxpc3Qgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgWyRzcHJlYWRdIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2ludGVnZXJ9ICRsb2NhdGlvbiBbMV0gLVxuLy8vICAgT3B0aW9uYWwgcG9zaXRpb24gb2Ygc3ViLXNwYW4gYW1vbmcgZnVsbCBzZXQgb2YgY29sdW1uc1xuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBSZWxhdGl2ZSBvciBzdGF0aWMgbGVuZ3RoIG9mIGEgc3BhbiBvbiB0aGUgZ3JpZFxuQGZ1bmN0aW9uIHN1LXNwYW4oXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICRjb250YWluZXItc3ByZWFkOiAkc3ByZWFkLFxuICAkbG9jYXRpb246IDFcbikge1xuICAkc3Bhbjogc3UtdmFsaWQtc3Bhbigkc3Bhbik7XG4gICRjb2x1bW5zOiBzdS12YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAkc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJHNwcmVhZCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzcGFuKSA9PSAnbnVtYmVyJykge1xuICAgIEBpZiAobm90IHVuaXRsZXNzKCRzcGFuKSkge1xuICAgICAgQHJldHVybiAkc3BhbjtcbiAgICB9XG5cbiAgICAkbG9jYXRpb246IHN1LXZhbGlkLWxvY2F0aW9uKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbiAgICAkc3Bhbjogc3Utc2xpY2UoJHNwYW4sICRjb2x1bW5zLCAkbG9jYXRpb24sICR2YWxpZGF0ZTogZmFsc2UpO1xuICB9XG5cbiAgQGlmIF9zdS1uZWVkcy1jYWxjLW91dHB1dCgkc3BhbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJykge1xuICAgIEByZXR1cm4gX3N1LWNhbGMtc3Bhbigkc3BhbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICB9XG5cbiAgJHNwYW4td2lkdGg6IF9zdS1zdW0oJHNwYW4sICRndXR0ZXJzLCAkc3ByZWFkLCAkdmFsaWRhdGU6IGZhbHNlKTtcblxuICBAaWYgdW5pdGxlc3MoJHNwYW4td2lkdGgpIHtcbiAgICAkY29udGFpbmVyLXNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRjb250YWluZXItc3ByZWFkKTtcbiAgICAkY29udGFpbmVyOiBfc3Utc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgJGNvbnRhaW5lci1zcHJlYWQsICR2YWxpZGF0ZTogZmFsc2UpO1xuICAgIEByZXR1cm4gcGVyY2VudGFnZSgkc3Bhbi13aWR0aCAvICRjb250YWluZXIpO1xuICB9XG5cbiAgQHJldHVybiAkc3Bhbi13aWR0aDtcbn1cblxuXG5cbi8vIFN1IEd1dHRlclxuLy8gLS0tLS0tLS0tXG4vLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhIENTUy1yZWFkeSBndXR0ZXIgd2lkdGgsXG4vLy8gYmFzZWQgb24gbm9ybWFsaXplZCBncmlkIGRhdGEg4oCTXG4vLy8gYSBsb3ctbGV2ZWwgdmVyc2lvbiBvZiBgc3VzeS1ndXR0ZXJgLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggdW5pdGxlc3MgbnVtYmVycyB3aWxsIHJldHVybiBgJWAgdmFsdWVzLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGNvbXBhcmFibGUgdW5pdHNcbi8vLyAgIHdpbGwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHVuaXRzIHByb3ZpZGVkLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGEgbWl4IG9mIHVuaXRzLFxuLy8vICAgb3IgYSBjb21iaW5hdGlvbiBvZiB1bnRpbGVzcyBudW1iZXJzIGFuZCB1bml0LWxlbmd0aHMsXG4vLy8gICB3aWxsIHJldHVybiBhIGBjYWxjKClgIHN0cmluZy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LWd1dHRlclxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRjb250YWluZXItc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgUmVsYXRpdmUgb3Igc3RhdGljIGxlbmd0aCBvZiBvbmUgZ3V0dGVyIGluIGEgZ3JpZFxuQGZ1bmN0aW9uIHN1LWd1dHRlcihcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkY29udGFpbmVyLXNwcmVhZFxuKSB7XG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ251bWJlcicpIHtcbiAgICBAaWYgKCRndXR0ZXJzID09IDApIG9yIChub3QgdW5pdGxlc3MoJGd1dHRlcnMpKSB7XG4gICAgICBAcmV0dXJuICRndXR0ZXJzO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoJGd1dHRlcnMsICRjb2x1bW5zLCAkZ3V0dGVycywgLTEsIG5vdCAndmFsaWRhdGUnKSB7XG4gICAgQHJldHVybiBfc3UtY2FsYy1zcGFuKCRndXR0ZXJzLCAkY29sdW1ucywgJGd1dHRlcnMsIC0xLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICB9XG5cbiAgJGNvbnRhaW5lcjogX3N1LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkKTtcbiAgQHJldHVybiBwZXJjZW50YWdlKCRndXR0ZXJzIC8gJGNvbnRhaW5lcik7XG59XG5cblxuXG4vLyBTdSBTbGljZVxuLy8gLS0tLS0tLS1cbi8vLyBSZXR1cm5zIGEgbGlzdCBvZiBjb2x1bW5zXG4vLy8gYmFzZWQgb24gYSBnaXZlbiBzcGFuL2xvY2F0aW9uIHNsaWNlIG9mIHRoZSBncmlkIOKAk1xuLy8vIGEgbG93LWxldmVsIHZlcnNpb24gb2YgYHN1c3ktc2xpY2VgLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAc2VlIHN1c3ktc2xpY2Vcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkbG9jYXRpb24gWzFdIC1cbi8vLyAgIFN0YXJ0aW5nIGluZGV4IG9mIGEgc3BhbiBpbiB0aGUgbGlzdCBvZiBjb2x1bW5zXG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgU3Vic2V0IGxpc3Qgb2YgZ3JpZCBjb2x1bW5zLCBiYXNlZCBvbiBzcGFuIGFuZCBsb2NhdGlvblxuQGZ1bmN0aW9uIHN1LXNsaWNlKFxuICAkc3BhbixcbiAgJGNvbHVtbnMsXG4gICRsb2NhdGlvbjogMSxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAgICRsb2NhdGlvbjogc3UtdmFsaWQtbG9jYXRpb24oJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuICB9XG5cbiAgJGZsb29yOiBmbG9vcigkc3Bhbik7XG4gICRzdWItY29sdW1uczogKCk7XG5cbiAgQGZvciAkaSBmcm9tICRsb2NhdGlvbiB0byAoJGxvY2F0aW9uICsgJGZsb29yKSB7XG4gICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRpKSk7XG4gIH1cblxuICBAaWYgJGZsb29yICE9ICRzcGFuIHtcbiAgICAkcmVtYWluZGVyOiAkc3BhbiAtICRmbG9vcjtcbiAgICAkY29sdW1uOiAkbG9jYXRpb24gKyAkZmxvb3I7XG4gICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRjb2x1bW4pICogJHJlbWFpbmRlcik7XG4gIH1cblxuICBAcmV0dXJuICRzdWItY29sdW1ucztcbn1cblxuXG5cbi8vIFN1IFN1bVxuLy8gLS0tLS0tXG4vLy8gR2V0IHRoZSB0b3RhbCBzdW0gb2YgY29sdW1uLXVuaXRzIGluIGEgbGF5b3V0LlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXJ9IC1cbi8vLyAgIFRvdGFsIHN1bSBvZiBjb2x1bW4tdW5pdHMgaW4gYSBncmlkXG5AZnVuY3Rpb24gX3N1LXN1bShcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtc3BhbigkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBjb2x1bW4tc3VtXG4gICRjb2x1bW4tc3VtOiAwO1xuICBAZWFjaCAkY29sdW1uIGluICRjb2x1bW5zIHtcbiAgICAkY29sdW1uLXN1bTogJGNvbHVtbi1zdW0gKyAkY29sdW1uO1xuICB9XG5cbiAgJGd1dHRlci1zdW06IChjZWlsKGxlbmd0aCgkY29sdW1ucykpICsgJHNwcmVhZCkgKiAkZ3V0dGVycztcbiAgJHRvdGFsOiBpZigoJGd1dHRlci1zdW0gPiAwKSwgJGNvbHVtbi1zdW0gKyAkZ3V0dGVyLXN1bSwgJGNvbHVtbi1zdW0pO1xuXG4gIEByZXR1cm4gJHRvdGFsO1xufVxuXG5cblxuLy8gU3UgQ2FsY1xuLy8gLS0tLS0tLVxuLy8vIFJldHVybiBhIHVzYWJsZSBzcGFuIHdpZHRoIGFzIGEgYGNhbGMoKWAgZnVuY3Rpb24sXG4vLy8gaW4gb3JkZXIgdG8gY3JlYXRlIG1peGVkLXVuaXQgZ3JpZHMuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXIgfCBsaXN0fSAkc3BhbiAtXG4vLy8gICBQcmUtc2xpY2VkIGxpc3Qgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgWyRzcHJlYWRdIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIFJlbGF0aXZlIG9yIHN0YXRpYyBsZW5ndGggb2YgYSBzcGFuIG9uIHRoZSBncmlkXG5AZnVuY3Rpb24gX3N1LWNhbGMtc3BhbihcbiAgJHNwYW4sXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJGNvbnRhaW5lci1zcHJlYWQ6ICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgICAkY29udGFpbmVyLXNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRjb250YWluZXItc3ByZWFkKTtcbiAgfVxuXG4gIC8vIFNwYW4gYW5kIGNvbnRleHRcbiAgJHNwYW46IF9zdS1jYWxjLXN1bSgkc3BhbiwgJGd1dHRlcnMsICRzcHJlYWQsIG5vdCAndmFsaWRhdGUnKTtcbiAgJGNvbnRleHQ6IF9zdS1jYWxjLXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJyk7XG5cbiAgLy8gRml4ZWQgYW5kIGZsdWlkXG4gICRmaXhlZC1zcGFuOiBtYXAtZ2V0KCRzcGFuLCAnZml4ZWQnKTtcbiAgJGZsdWlkLXNwYW46IG1hcC1nZXQoJHNwYW4sICdmbHVpZCcpO1xuICAkZml4ZWQtY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2ZpeGVkJyk7XG4gICRmbHVpZC1jb250ZXh0OiBtYXAtZ2V0KCRjb250ZXh0LCAnZmx1aWQnKTtcblxuICAkY2FsYzogJyN7JGZpeGVkLXNwYW59JztcbiAgJGZsdWlkLWNhbGM6ICcoMTAwJSAtICN7JGZpeGVkLWNvbnRleHR9KSc7XG5cbiAgLy8gRmx1aWQtdmFsdWVzXG4gIEBpZiAobm90ICRmbHVpZC1zcGFuKSB7XG4gICAgJGZsdWlkLWNhbGM6IG51bGw7XG4gIH0gQGVsc2UgaWYgKCRmbHVpZC1zcGFuICE9ICRmbHVpZC1jb250ZXh0KSB7XG4gICAgJGZsdWlkLXNwYW46ICcqICN7JGZsdWlkLXNwYW59JztcbiAgICAkZmx1aWQtY29udGV4dDogaWYoJGZsdWlkLWNvbnRleHQsICcvICN7JGZsdWlkLWNvbnRleHR9JywgJycpO1xuICAgICRmbHVpZC1jYWxjOiAnKCN7JGZsdWlkLWNhbGMgJGZsdWlkLWNvbnRleHQgJGZsdWlkLXNwYW59KSc7XG4gIH1cblxuICBAaWYgJGZsdWlkLWNhbGMge1xuICAgICRjYWxjOiBpZigoJGNhbGMgIT0gJycpLCAnI3skY2FsY30gKyAnLCAnJyk7XG4gICAgJGNhbGM6ICcjeyRjYWxjICsgJGZsdWlkLWNhbGN9JztcbiAgfVxuXG4gIEByZXR1cm4gY2FsYygje3VucXVvdGUoJGNhbGMpfSk7XG59XG5cblxuXG4vLyBTdSBDYWxjLVN1bVxuLy8gLS0tLS0tLS0tLS1cbi8vLyBHZXQgdGhlIHRvdGFsIHN1bSBvZiBmaXhlZCBhbmQgZmx1aWQgY29sdW1uLXVuaXRzXG4vLy8gZm9yIGNyZWF0aW5nIGEgbWl4ZWQtdW5pdCBsYXlvdXQgd2l0aCBgY2FsYygpYCB2YWx1ZXMuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgYXZhaWxhYmxlXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgc3BhbmAgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIE1hcCB3aXRoIGBmaXhlZGAgYW5kIGBmbHVpZGAga2V5c1xuLy8vICAgY29udGFpbmluZyB0aGUgcHJvcGVyIG1hdGggYXMgc3RyaW5nc1xuQGZ1bmN0aW9uIF9zdS1jYWxjLXN1bShcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtc3BhbigkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgfVxuXG4gICRmbHVpZDogMDtcbiAgJGZpeGVkOiAoKTtcbiAgJGNhbGM6IG51bGw7XG5cbiAgLy8gR3V0dGVyc1xuICAkZ3V0dGVyczogICRndXR0ZXJzICogKGxlbmd0aCgkY29sdW1ucykgKyAkc3ByZWFkKTtcblxuICAvLyBDb2x1bW5zXG4gIEBlYWNoICRjb2wgaW4gYXBwZW5kKCRjb2x1bW5zLCAkZ3V0dGVycykge1xuICAgIEBpZiB1bml0bGVzcygkY29sKSB7XG4gICAgICAkZmx1aWQ6ICRmbHVpZCArICRjb2w7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZml4ZWQ6IF9zdS1tYXAtYWRkLXVuaXRzKCRmaXhlZCwgJGNvbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcGlsZSBGaXhlZCBVbml0c1xuICBAZWFjaCAkdW5pdCwgJHRvdGFsIGluICRmaXhlZCB7XG4gICAgQGlmICgkdG90YWwgIT0gKDAgKiAkdG90YWwpKSB7XG4gICAgICAkY2FsYzogaWYoJGNhbGMsICcjeyRjYWxjfSArICN7JHRvdGFsfScsICcjeyR0b3RhbH0nKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxjIG51bGwgb3Igc3RyaW5nXG4gIEBpZiAkY2FsYyB7XG4gICAgJGNhbGM6IGlmKHN0ci1pbmRleCgkY2FsYywgJysnKSwgJygjeyRjYWxjfSknLCAnI3skY2FsY30nKTtcbiAgfVxuXG4gIC8vIEZsdWlkIDAgPT4gbnVsbFxuICAkZmx1aWQ6IGlmKCgkZmx1aWQgPT0gMCksIG51bGwsICRmbHVpZCk7XG5cblxuICAvLyBSZXR1cm4gbWFwXG4gICRyZXR1cm46IChcbiAgICAnZml4ZWQnOiAkY2FsYyxcbiAgICAnZmx1aWQnOiAkZmx1aWQsXG4gICk7XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cblxuLy8gTmVlZHMgQ2FsY1xuLy8gLS0tLS0tLS0tLVxuLy8vIENoZWNrIGlmIGBjYWxjKClgIHdpbGwgYmUgbmVlZGVkIGluIGRlZmluaW5nIGEgc3Bhbixcbi8vLyBpZiB0aGUgbmVjZXNzYXJ5IHVuaXRzIGluIGEgZ3JpZCBhcmUgbm90IGNvbXBhcmFibGUuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTbGljZSBvZiBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXJcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge2Jvb2x9IC1cbi8vLyAgIGBUcnVlYCB3aGVuIHVuaXRzIGRvIG5vdCBtYXRjaCwgYW5kIGBjYWxjKClgIHdpbGwgYmUgcmVxdWlyZWRcbkBmdW5jdGlvbiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICB9XG5cbiAgJGhhcy1ndXR0ZXI6IGlmKChsZW5ndGgoJHNwYW4pID4gMSkgb3IgKCRzcHJlYWQgPj0gMCksIHRydWUsIGZhbHNlKTtcbiAgJGNoZWNrOiBpZigkaGFzLWd1dHRlciwgYXBwZW5kKCRzcGFuLCAkZ3V0dGVycyksICRzcGFuKTtcbiAgJHNhZmUtc3BhbjogX3N1LWlzLWNvbXBhcmFibGUoJGNoZWNrLi4uKTtcblxuICBAaWYgKCRzYWZlLXNwYW4gPT0gJ3N0YXRpYycpIHtcbiAgICBAcmV0dXJuIGZhbHNlO1xuICB9IEBlbHNlIGlmIChub3QgJHNhZmUtc3Bhbikge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICRzYWZlLWZsdWlkOiBfc3UtaXMtY29tcGFyYWJsZSgkZ3V0dGVycywgJGNvbHVtbnMuLi4pO1xuXG4gIEByZXR1cm4gbm90ICRzYWZlLWZsdWlkO1xufVxuIiwiLy8vIFN1c3kzIENvbmZpZ3VyYXRpb25cbi8vLyA9PT09PT09PT09PT09PT09PT09XG4vLy8gU3VzeTMgaGFzIDQgY29yZSBzZXR0aW5ncywgaW4gYSBzaW5nbGUgc2V0dGluZ3MgbWFwLlxuLy8vIFlvdSdsbCBub3RpY2UgYSBmZXcgZGlmZmVyZW5jZXMgZnJvbSBTdXN5Mjpcbi8vL1xuLy8vICoqQ29sdW1ucyoqIG5vIGxvbmdlciBhY2NlcHQgYSBzaW5nbGUgbnVtYmVyLCBsaWtlIGAxMmAsXG4vLy8gYnV0IHVzZSBhIHN5bnRheCBtb3JlIHNpbWlsYXIgdG8gdGhlIG5ld1xuLy8vIENTUyBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXVtjb2x1bW5zXSDigJNcbi8vLyBhIGxpc3Qgb2YgcmVsYXRpdmUgc2l6ZXMgZm9yIGVhY2ggY29sdW1uIG9uIHRoZSBncmlkLlxuLy8vIFVuaXRsZXNzIG51bWJlcnMgaW4gU3VzeSBhY3QgdmVyeSBzaW1pbGFyIHRvIGBmcmAgdW5pdHMgaW4gQ1NTLFxuLy8vIGFuZCB0aGUgYHN1c3ktcmVwZWF0KClgIGZ1bmN0aW9uIChzaW1pbGFyIHRvIHRoZSBjc3MgYHJlcGVhdCgpYClcbi8vLyBoZWxwcyBxdWlja2x5IGVzdGFibGlzaCBlcXVhbC13aWR0aCBjb2x1bW5zLlxuLy8vXG4vLy8gW2NvbHVtbnNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXG4vLy9cbi8vLyAtIGBzdXN5LXJlcGVhdCgxMilgIHdpbGwgY3JlYXRlIDEyIGZsdWlkLCBlcXVhbC13aWR0aCBjb2x1bW5zXG4vLy8gLSBgc3VzeS1yZXBlYXQoNiwgMTIwcHgpYCB3aWxsIGNyZWF0ZSA2IGVxdWFsIGAxMjBweGAtd2lkZSBjb2x1bW5zXG4vLy8gLSBgMTIwcHggc3VzeS1yZXBlYXQoNCkgMTIwcHhgIHdpbGwgY3JlYXRlIDYgY29sdW1ucyxcbi8vLyAgIHRoZSBmaXJzdCBhbmQgbGFzdCBhcmUgYDEyMHB4YCxcbi8vLyAgIHdoaWxlIHRoZSBtaWRkbGUgNCBhcmUgZXF1YWwgZnJhY3Rpb25zIG9mIHRoZSByZW1haW5kZXIuXG4vLy8gICBTdXN5IHdpbGwgb3V0cHV0IGBjYWxjKClgIHZhbHVlcyBpbiBvcmRlciB0byBhY2hpZXZlIHRoaXMuXG4vLy9cbi8vLyAqKkd1dHRlcnMqKiBoYXZlbid0IGNoYW5nZWQg4oCTXG4vLy8gYSBzaW5nbGUgZnJhY3Rpb24gb3IgZXhwbGljaXQgd2lkdGgg4oCTXG4vLy8gYnV0IHRoZSBgY2FsYygpYCBvdXRwdXQgZmVhdHVyZVxuLy8vIG1lYW5zIHlvdSBjYW4gbm93IHVzZSBhbnkgY29tYmluYXRpb24gb2YgdW5pdHMgYW5kIGZyYWN0aW9uc1xuLy8vIHRvIGNyZWF0ZSBzdGF0aWMtZ3V0dGVycyBvbiBhIGZsdWlkIGdyaWQsIGV0Yy5cbi8vL1xuLy8vICoqU3ByZWFkKiogZXhpc3RlZCBpbiB0aGUgU3VzeTIgQVBJIGFzIGEgc3BhbiBvcHRpb24sXG4vLy8gYW5kIHdhcyBvdGhlcndpc2UgaGFuZGxlZCBiZWhpbmQgdGhlIHNjZW5lcy5cbi8vLyBOb3cgd2UncmUgZ2l2aW5nIHlvdSBmdWxsIGNvbnRyb2wgb3ZlciBhbGwgc3ByZWFkIGlzc3Vlcy5cbi8vLyBZb3UgY2FuIGZpbmQgYSBtb3JlIFtkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBzcHJlYWQgb24gdGhlIGJsb2ddW3NwcmVhZF0uXG4vLy9cbi8vLyBbc3ByZWFkXTogaHR0cDovL29kZGJpcmQubmV0LzIwMTcvMDYvMTMvc3VzeS1zcHJlYWQvXG4vLy9cbi8vLyBZb3UgY2FuIGFjY2VzcyB5b3VyIGdsb2JhbCBzZXR0aW5ncyBhdCBhbnkgdGltZVxuLy8vIHdpdGggdGhlIGBzdXN5LXNldHRpbmdzKClgIGZ1bmN0aW9uLFxuLy8vIG9yIGdyYWIgYSBzaW5nbGUgc2V0dGluZyBmcm9tIHRoZSBnbG9iYWwgc2NvcGVcbi8vLyB3aXRoIGBzdXN5LWdldCgnY29sdW1ucycpYCwgYHN1c3ktZ2V0KCdndXR0ZXJzJylgIGV0Yy5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vLyBAbGluayBodHRwOi8vb2RkYmlyZC5uZXQvMjAxNy8wNi8xMy9zdXN5LXNwcmVhZC9cbi8vLyAgIEFydGljbGU6IFVuZGVyc3RhbmRpbmcgU3ByZWFkIGluIFN1c3kzXG4vLy9cbi8vLyBAc2VlICRzdXN5XG4vLy8gQHNlZSBzdXN5LXNldHRpbmdzXG4vLy8gQHNlZSBzdXN5LWdldFxuXG5cblxuLy8gU3VzeVxuLy8gLS0tLVxuLy8vIFRoZSBncmlkIGlzIGRlZmluZWQgaW4gYSBzaW5nbGUgbWFwIHZhcmlhYmxlLFxuLy8vIHdpdGggZm91ciBpbml0aWFsIHByb3BlcnRpZXM6XG4vLy8gYGNvbHVtbnNgLCBgZ3V0dGVyc2AsIGBzcHJlYWRgIGFuZCBgY29udGFpbmVyLXNwcmVhZGAuXG4vLy8gQW55dGhpbmcgeW91IHB1dCBpbiB0aGUgcm9vdCBgJHN1c3lgIHZhcmlhYmxlIG1hcFxuLy8vIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGdsb2JhbCBwcm9qZWN0IGRlZmF1bHQuXG4vLy8gWW91IGNhbiBjcmVhdGUgc2ltaWxhciBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyB1bmRlciBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMsXG4vLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzIGFzLW5lZWRlZC5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vLyBAdHlwZSBNYXBcbi8vL1xuLy8vIEBzZWUgJF9zdXN5LWRlZmF1bHRzXG4vLy8gQHNlZSB7ZnVuY3Rpb259IHN1c3ktcmVwZWF0XG4vLy8gQGxpbmtcbi8vLyAgIGh0dHBzOi8vY29kZXBlbi5pby9taXJpc3V6YW5uZS9wZW4vRWdtSkpwP2VkaXRvcnM9MTEwMFxuLy8vICAgU3ByZWFkIGV4YW1wbGVzIG9uIENvZGVQZW5cbi8vL1xuLy8vIEBwcm9wIHtsaXN0fSBjb2x1bW5zIC1cbi8vLyAgIENvbHVtbnMgYXJlIGRlc2NyaWJlZCBieSBhIGxpc3Qgb2YgbnVtYmVycyxcbi8vLyAgIHJlcHJlc2VudGluZyB0aGUgcmVsYXRpdmUgd2lkdGggb2YgZWFjaCBjb2x1bW4uXG4vLy8gICBUaGUgc3ludGF4IGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIENTUyBuYXRpdmVcbi8vLyAgIGBncmlkLXRlbXBsYXRlLWNvbHVtbnNgLFxuLy8vICAgZXhwZWN0aW5nIGEgbGlzdCBvZiBncmlkLWNvbHVtbiB3aWR0aHMuXG4vLy8gICBVbml0bGVzcyBudW1iZXJzIGNyZWF0ZSBmcmFjdGlvbmFsIGZsdWlkIGNvbHVtbnNcbi8vLyAgIChzaW1pbGFyIHRvIHRoZSBDU1MtbmF0aXZlIGBmcmAgdW5pdCksXG4vLy8gICB3aGlsZSBsZW5ndGggdmFsdWVzICh1bml0ZWQgbnVtYmVycylcbi8vLyAgIGFyZSB1c2VkIHRvIGRlZmluZSBzdGF0aWMgY29sdW1ucy5cbi8vLyAgIFlvdSBjYW4gbWl4LWFuZCBtYXRjaCB1bml0cyBhbmQgZnJhY3Rpb25zLFxuLy8vICAgdG8gY3JlYXRlIGEgbWl4ZWQgZ3JpZC5cbi8vLyAgIFN1c3kgd2lsbCBnZW5lcmF0ZSBgY2FsYygpYCB2YWx1ZXMgd2hlbiBuZWNlc3NhcnksXG4vLy8gICB0byBtYWtlIGFsbCB5b3VyIHVuaXRzIHdvcmsgdG9nZXRoZXIuXG4vLy9cbi8vLyAgIFVzZSB0aGUgYHN1c3ktcmVwZWF0KCRjb3VudCwgJHZhbHVlKWAgZnVuY3Rpb25cbi8vLyAgIHRvIG1vcmUgZWFzaWx5IHJlcGV0YXRpdmUgY29sdW1ucyxcbi8vLyAgIHNpbWlsYXIgdG8gdGhlIENTUy1uYXRpdmUgYHJlcGVhdCgpYC5cbi8vL1xuLy8vICAgLSBgc3VzeS1yZXBlYXQoOClgOlxuLy8vICAgICBhbiA4LWNvbHVtbiwgc3ltbWV0cmljYWwsIGZsdWlkIGdyaWQuXG4vLy8gICAgIDxiciAvPklkZW50aWNhbCB0byBgKDEgMSAxIDEgMSAxIDEgMSlgLlxuLy8vICAgLSBgc3VzeS1yZXBlYXQoNiwgOGVtKWA6XG4vLy8gICAgIGEgNi1jb2x1bW4sIHN5bW1ldHJpY2FsLCBlbS1iYXNlZCBncmlkLlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCg4ZW0gOGVtIDhlbSA4ZW0gOGVtIDhlbSlgLlxuLy8vICAgLSBgKDMwMHB4IHN1c3ktcmVwZWF0KDQpIDMwMHB4KWA6XG4vLy8gICAgIGEgNi1jb2x1bW4sIGFzeW1tZXRyaWNhbCwgbWl4ZWQgZmx1aWQvc3RhdGljIGdyaWRcbi8vLyAgICAgdXNpbmcgYGNhbGMoKWAgb3V0cHV0LlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCgzMDBweCAxIDEgMSAxIDMwMHB4KWAuXG4vLy9cbi8vLyAgICoqTk9URSoqIHRoYXQgYDEyYCBpcyBubyBsb25nZXIgYSB2YWxpZCAxMi1jb2x1bW4gZ3JpZCBkZWZpbml0aW9uLFxuLy8vICAgYW5kIHlvdSBtdXN0IGxpc3QgYWxsIHRoZSBjb2x1bW5zIGluZGl2aWR1YWxseVxuLy8vICAgKG9yIGJ5IHVzaW5nIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24pLlxuLy8vXG4vLy8gQHByb3Age251bWJlcn0gZ3V0dGVycyAtXG4vLy8gICBHdXR0ZXJzIGFyZSBkZWZpbmVkIGFzIGEgc2luZ2xlIHdpZHRoLFxuLy8vICAgb3IgZmx1aWQgcmF0aW8sIHNpbWlsYXIgdG8gdGhlIG5hdGl2ZS1DU1Ncbi8vLyAgIGBncmlkLWNvbHVtbi1nYXBgIHN5bnRheC5cbi8vLyAgIFNpbWlsYXIgdG8gY29sdW1ucyxcbi8vLyAgIGd1dHRlcnMgY2FuIHVzZSBhbnkgdmFsaWQgQ1NTIGxlbmd0aCB1bml0LFxuLy8vICAgb3IgdW5pdGxlc3MgbnVtYmVycyB0byBkZWZpbmUgYSByZWxhdGl2ZSBmcmFjdGlvbi5cbi8vL1xuLy8vICAgLSBgMC41YDpcbi8vLyAgICAgYSBmbHVpZCBndXR0ZXIsIGhhbGYgdGhlIHNpemUgb2YgYSBzaW5nbGUtZnJhY3Rpb24gY29sdW1uLlxuLy8vICAgLSBgMWVtYDpcbi8vLyAgICAgYSBzdGF0aWMgZ3V0dGVyLCBgMWVtYCB3aWRlLlxuLy8vXG4vLy8gICBNaXggc3RhdGljIGd1dHRlcnMgd2l0aCBmbHVpZCBjb2x1bW5zLCBvciB2aWNlIHZlcnNhLFxuLy8vICAgYW5kIFN1c3kgd2lsbCBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgYGNhbGMoKWAgdG8gbWFrZSBpdCB3b3JrLlxuLy8vXG4vLy8gQHByb3Age3N0cmluZ30gc3ByZWFkIFtuYXJyb3ddIC1cbi8vLyAgIFNwcmVhZCBvZiBhbiBlbGVtZW50IGFjcm9zcyBhZGphY2VudCBndXR0ZXJzOlxuLy8vICAgZWl0aGVyIGBuYXJyb3dgIChub25lKSwgYHdpZGVgIChvbmUpLCBvciBgd2lkZXJgICh0d28pXG4vLy9cbi8vLyAgIC0gQm90aCBzcHJlYWQgc2V0dGluZ3MgZGVmYXVsdCB0byBgbmFycm93YCxcbi8vLyAgICAgdGhlIG1vc3QgY29tbW9uIHVzZS1jYXNlLlxuLy8vICAgICBBIGBuYXJyb3dgIHNwcmVhZCBvbmx5IGhhcyBndXR0ZXJzICpiZXR3ZWVuKiBjb2x1bW5zXG4vLy8gICAgIChvbmUgbGVzcyBndXR0ZXIgdGhhbiBjb2x1bW5zKS5cbi8vLyAgICAgVGhpcyBpcyBob3cgYWxsIGNzcy1uYXRpdmUgZ3JpZHMgd29yayxcbi8vLyAgICAgYW5kIG1vc3QgbWFyZ2luLWJhc2VkIGdyaWQgc3lzdGVtcy5cbi8vLyAgIC0gQSBgd2lkZWAgc3ByZWFkIGluY2x1ZGVzIHRoZSBzYW1lIG51bWJlciBvZiBndXR0ZXJzIGFzIGNvbHVtbnMsXG4vLy8gICAgIHNwYW5uaW5nIGFjcm9zcyBhIHNpbmdsZSBzaWRlLWd1dHRlci5cbi8vLyAgICAgVGhpcyBpcyBob3cgbW9zdCBwYWRkaW5nLWJhc2VkIGdyaWQgc3lzdGVtcyBvZnRlbiB3b3JrLFxuLy8vICAgICBhbmQgaXMgYWxzbyB1c2VmdWwgZm9yIHB1c2hpbmcgYW5kIHB1bGxpbmcgZWxlbWVudHMgaW50byBwbGFjZS5cbi8vLyAgIC0gVGhlIHJhcmUgYHdpZGVyYCBzcHJlYWQgaW5jbHVkZXMgZ3V0dGVyc1xuLy8vICAgICBvbiBib3RoIHNpZGVzIG9mIHRoZSBjb2x1bW4tc3BhblxuLy8vICAgICAob25lIG1vcmUgZ3V0dGVycyB0aGFuIGNvbHVtbnMpLlxuLy8vXG4vLy8gQHByb3Age3N0cmluZ30gY29udGFpbmVyLXNwcmVhZCBbbmFycm93XSAtXG4vLy8gICBTcHJlYWQgb2YgYSBjb250YWluZXIgYXJvdW5kIGFkamFjZW50IGd1dHRlcnM6XG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKG5vbmUpLCBgd2lkZWAgKG9uZSksIG9yIGB3aWRlcmAgKHR3bykuXG4vLy8gICBTZWUgYHNwcmVhZGAgcHJvcGVydHkgZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAc2luY2UgMy4wLjAtYmV0YS4xIC1cbi8vLyAgIGBjb2x1bW5zYCBzZXR0aW5nIG5vIGxvbmdlciBhY2NlcHRzIG51bWJlcnNcbi8vLyAgIChlLmcuIGAxMmApIGZvciBzeW1tZXRyaWNhbCBmbHVpZCBncmlkcyxcbi8vLyAgIG9yIHRoZSBpbml0aWFsIGAxMiB4IDEyMHB4YCBzeW50YXggZm9yXG4vLy8gICBzeW1tZXRyaWNhbCBmaXhlZC11bml0IGdyaWRzLlxuLy8vICAgVXNlIGBzdXN5LXJlcGVhdCgxMilgIG9yIGBzdXN5LXJlcGVhdCgxMiwgMTIwcHgpYCBpbnN0ZWFkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGRlZmF1bHQgdmFsdWVzXG4vLy8gICAvLyA0IHN5bW1ldHJpY2FsLCBmbHVpZCBjb2x1bW5zXG4vLy8gICAvLyBndXR0ZXJzIGFyZSAxLzQgdGhlIHNpemUgb2YgYSBjb2x1bW5cbi8vLyAgIC8vIGVsZW1lbnRzIHNwYW4gMSBsZXNzIGd1dHRlciB0aGFuIGNvbHVtbnNcbi8vLyAgIC8vIGNvbnRhaW5lcnMgc3BhbiAxIGxlc3MgZ3V0dGVyIGFzIHdlbGxcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgICdjb2x1bW5zJzogc3VzeS1yZXBlYXQoNCksXG4vLy8gICAgICdndXR0ZXJzJzogMC4yNSxcbi8vLyAgICAgJ3NwcmVhZCc6ICduYXJyb3cnLFxuLy8vICAgICAnY29udGFpbmVyLXNwcmVhZCc6ICduYXJyb3cnLFxuLy8vICAgKTtcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBpbnNpZGUtc3RhdGljIGd1dHRlcnNcbi8vLyAgIC8vIDYgc3ltbWV0cmljYWwsIGZsdWlkIGNvbHVtbnPigKZcbi8vLyAgIC8vIGd1dHRlcnMgYXJlIHN0YXRpYywgdHJpZ2dlcmluZyBjYWxjKCnigKZcbi8vLyAgIC8vIGVsZW1lbnRzIHNwYW4gZXF1YWwgY29sdW1ucyAmIGd1dHRlcnPigKZcbi8vLyAgIC8vIGNvbnRhaW5lcnMgc3BhbiBlcXVhbCBjb2x1bW5zICYgZ3V0dGVyc+KAplxuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg2KSxcbi8vLyAgICAgJ2d1dHRlcnMnOiAwLjVlbSxcbi8vLyAgICAgJ3NwcmVhZCc6ICd3aWRlJyxcbi8vLyAgICAgJ2NvbnRhaW5lci1zcHJlYWQnOiAnd2lkZScsXG4vLy8gICApO1xuJHN1c3k6ICgpICFkZWZhdWx0O1xuXG5cblxuLy8gU3VzeSBSZXBlYXRcbi8vIC0tLS0tLS0tLS0tXG4vLy8gU2ltaWxhciB0byB0aGUgYHJlcGVhdCg8Y291bnQ+LCA8dmFsdWU+KWAgZnVuY3Rpb25cbi8vLyB0aGF0IGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgQ1NTIEdyaWQgdGVtcGxhdGVzLFxuLy8vIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24gaGVscHMgZ2VuZXJhdGUgcmVwZXRhdGl2ZSBsYXlvdXRzXG4vLy8gYnkgcmVwZWF0aW5nIGFueSB2YWx1ZSBhIGdpdmVuIG51bWJlciBvZiB0aW1lcy5cbi8vLyBXaGVyZSBTdXN5IHByZXZpb3VzbHkgYWxsb3dlZCBgOGAgYXMgYSBjb2x1bW4gZGVmaW5pdGlvblxuLy8vIGZvciA4IGVxdWFsIGNvbHVtbnMsIHlvdSBzaG91bGQgbm93IHVzZSBgc3VzeS1yZXBlYXQoOClgLlxuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vXG4vLy8gQHBhcmFtIHtpbnRlZ2VyfSAkY291bnQgLVxuLy8vICAgVGhlIG51bWJlciBvZiByZXBldGl0aW9ucywgZS5nLiBgMTJgIGZvciBhIDEyLWNvbHVtbiBncmlkLlxuLy8vIEBwYXJhbSB7Kn0gJHZhbHVlIFsxXSAtXG4vLy8gICBUaGUgdmFsdWUgdG8gYmUgcmVwZWF0ZWQuXG4vLy8gICBUZWNobmljYWxseSBhbnkgdmFsdWUgY2FuIGJlIHJlcGVhdGVkIGhlcmUsXG4vLy8gICBidXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyB0byByZXBlYXQgY29sdW1uLXdpZHRoIGRlc2NyaXB0aW9uczpcbi8vLyAgIGUuZy4gdGhlIGRlZmF1bHQgYDFgIGZvciBzaW5nbGUtZnJhY3Rpb24gZmx1aWQgY29sdW1ucyxcbi8vLyAgIGA1ZW1gIGZvciBhIHN0YXRpYyBjb2x1bW4sXG4vLy8gICBvciBldmVuIGA1ZW0gMTIwcHhgIGlmIHlvdSBhcmUgYWx0ZXJuYXRpbmcgY29sdW1uIHdpZHRocy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIExpc3Qgb2YgcmVwZWF0ZWQgdmFsdWVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzXG4vLy8gICAvLyAxMiBjb2x1bW4gZ3JpZCwgd2l0aCA1ZW0gY29sdW1uc1xuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgY29sdW1uczogc3VzeS1yZXBlYXQoMTIsIDVlbSksXG4vLy8gICApO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2Nzc1xuLy8vICAgLy8gYXN5bW1ldHJpY2FsIDUtY29sdW1uIGdyaWRcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgIGNvbHVtbnM6IDIwcHggc3VzeS1yZXBlYXQoMywgMTAwcHgpIDIwcHgsXG4vLy8gICApO1xuLy8vXG4vLy8gICAvKiByZXN1bHQ6ICN7c3VzeS1nZXQoJ2NvbHVtbnMnKX0gKi9cbkBmdW5jdGlvbiBzdXN5LXJlcGVhdChcbiAgJGNvdW50LFxuICAkdmFsdWU6IDFcbikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJldHVybjogam9pbigkcmV0dXJuLCAkdmFsdWUpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cblxuLy8gU3VzeSBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENvbmZpZ3VyYXRpb24gbWFwIG9mIFN1c3kgZmFjdG9yeSBkZWZhdWx0cy5cbi8vLyBEbyBub3Qgb3ZlcnJpZGUgdGhpcyBtYXAgZGlyZWN0bHkg4oCTXG4vLy8gdXNlIGAkc3VzeWAgZm9yIHVzZXIgYW5kIHByb2plY3Qgc2V0dGluZyBvdmVycmlkZXMuXG4vLy9cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLyBAdHlwZSBNYXBcbi8vL1xuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwcm9wIHtudW1iZXIgfCBsaXN0fSBjb2x1bW5zIFtzdXN5LXJlcGVhdCg0KV1cbi8vLyBAcHJvcCB7bnVtYmVyfSBndXR0ZXJzIFswLjI1XVxuLy8vIEBwcm9wIHtzdHJpbmd9IHNwcmVhZCBbJ25hcnJvdyddXG4vLy8gQHByb3Age3N0cmluZ30gY29udGFpbmVyLXNwcmVhZCBbJ25hcnJvdyddXG4kX3N1c3ktZGVmYXVsdHM6IChcbiAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg0KSxcbiAgJ2d1dHRlcnMnOiAwLjI1LFxuICAnc3ByZWFkJzogJ25hcnJvdycsXG4gICdjb250YWluZXItc3ByZWFkJzogJ25hcnJvdycsXG4pO1xuXG5cblxuLy8gU3VzeSBTZXR0aW5nc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIFJldHVybiBhIGNvbWJpbmVkIG1hcCBvZiBTdXN5IHNldHRpbmdzLFxuLy8vIGJhc2VkIG9uIHRoZSBmYWN0b3J5IGRlZmF1bHRzIChgJF9zdXN5LWRlZmF1bHRzYCksXG4vLy8gdXNlci1kZWZpbmVkIHByb2plY3QgY29uZmlndXJhdGlvbiAoYCRzdXN5YCksXG4vLy8gYW5kIGFueSBsb2NhbCBvdmVycmlkZXMgcmVxdWlyZWQg4oCTXG4vLy8gc3VjaCBhcyBhIGNvbmZpZ3VyYXRpb24gbWFwIHBhc3NlZCBpbnRvIGEgZnVuY3Rpb24uXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy9cbi8vLyBAcGFyYW0ge21hcHN9ICRvdmVycmlkZXPigKYgLVxuLy8vICAgT3B0aW9uYWwgbWFwIG92ZXJyaWRlIG9mIGdsb2JhbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgYWJvdmUgZm9yIHByb3BlcnRpZXMuXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIENvbWJpbmVkIG1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gICBpbiBvcmRlciBvZiBzcGVjaWZpY2l0eTpcbi8vLyAgIGFueSBgJG92ZXJyaWRlcy4uLmAsXG4vLy8gICB0aGVuIGAkc3VzeWAgcHJvamVjdCBzZXR0aW5ncyxcbi8vLyAgIGFuZCBmaW5hbGx5IHRoZSBgJF9zdXN5LWRlZmF1bHRzYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGdsb2JhbCBzZXR0aW5nc1xuLy8vICAgQGVhY2ggJGtleSwgJHZhbHVlIGluIHN1c3ktc2V0dGluZ3MoKSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGxvY2FsIHNldHRpbmdzXG4vLy8gICAkbG9jYWw6ICgnY29sdW1ucyc6IDEgMiAzIDUgOCk7XG4vLy9cbi8vLyAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiBzdXN5LXNldHRpbmdzKCRsb2NhbCkge1xuLy8vICAgICAvKiAjeyRrZXl9OiAjeyR2YWx1ZX0gKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LXNldHRpbmdzKFxuICAkb3ZlcnJpZGVzLi4uXG4pIHtcbiAgJHNldHRpbmdzOiBtYXAtbWVyZ2UoJF9zdXN5LWRlZmF1bHRzLCAkc3VzeSk7XG5cbiAgQGVhY2ggJGNvbmZpZyBpbiAkb3ZlcnJpZGVzIHtcbiAgICAkc2V0dGluZ3M6IG1hcC1tZXJnZSgkc2V0dGluZ3MsICRjb25maWcpO1xuICB9XG5cbiAgQHJldHVybiAkc2V0dGluZ3M7XG59XG5cblxuXG4vLyBTdXN5IEdldFxuLy8gLS0tLS0tLS1cbi8vLyBSZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsIHZhbHVlIG9mIGFueSBTdXN5IHNldHRpbmdcbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vL1xuLy8vIEBwYXJhbSB7c3RyaW5nfSAka2V5IC1cbi8vLyAgIFNldHRpbmcgdG8gcmV0cmlldmUgZnJvbSB0aGUgY29uZmlndXJhdGlvbi5cbi8vL1xuLy8vIEByZXR1cm4geyp9IC1cbi8vLyAgIFZhbHVlIG1hcHBlZCB0byBgJGtleWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWFwcyxcbi8vLyAgIGluIG9yZGVyIG9mIHNwZWNpZmljaXR5OlxuLy8vICAgYCRzdXN5YCwgdGhlbiBgJF9zdXN5LWRlZmF1bHRzYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAvKiBjb2x1bW5zOiAje3N1c3ktZ2V0KCdjb2x1bW5zJyl9ICovXG4vLy8gICAvKiBndXR0ZXJzOiAje3N1c3ktZ2V0KCdndXR0ZXJzJyl9ICovXG5AZnVuY3Rpb24gc3VzeS1nZXQoXG4gICRrZXlcbikge1xuICAkc2V0dGluZ3M6IHN1c3ktc2V0dGluZ3MoKTtcblxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRzZXR0aW5ncywgJGtleSkge1xuICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAnVGhlcmUgaXMgbm8gU3VzeSBzZXR0aW5nIGNhbGxlZCBgI3ska2V5fWAnLFxuICAgICAgJ3N1c3ktZ2V0Jyk7XG4gIH1cblxuICBAcmV0dXJuIG1hcC1nZXQoJHNldHRpbmdzLCAka2V5KTtcbn1cbiIsIi8vLyBTeW50YXggTm9ybWFsaXphdGlvblxuLy8vID09PT09PT09PT09PT09PT09PT09XG4vLy8gU3VzeSBpcyBkaXZpZGVkIGludG8gdHdvIGxheWVyczpcbi8vLyBcIlN1XCIgcHJvdmlkZXMgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMgd2l0aCBhIHN0cmlwcGVkLWRvd24gc3ludGF4LFxuLy8vIHdoaWxlIFwiU3VzeVwiIGFkZHMgZ2xvYmFsIHNldHRpbmdzLCBzaG9ydGhhbmQgc3ludGF4LFxuLy8vIGFuZCBvdGhlciBoZWxwZXJzLlxuLy8vIEVhY2ggc2V0dGluZyAoZS5nLiBzcGFuLCBsb2NhdGlvbiwgY29sdW1ucywgc3ByZWFkLCBldGMuKVxuLy8vIGhhcyBhIHNpbmdsZSBjYW5vbmljYWwgc3ludGF4IGluIFN1LlxuLy8vXG4vLy8gVGhpcyBub3JtYWxpemF0aW9uIG1vZHVsZSBoZWxwcyB0cmFuc2xhdGUgYmV0d2VlbiB0aG9zZSBsYXllcnMsXG4vLy8gdHJhbnNmb3JtaW5nIHBhcnNlZCBTdXN5IGlucHV0IGludG9cbi8vLyB2YWx1ZXMgdGhhdCBTdSB3aWxsIHVuZGVyc3RhbmQuXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZVxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtc3BhblxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtY29sdW1uc1xuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtc3ByZWFkXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvblxuXG5cblxuLy8gU3VzeSBOb3JtYWxpemVcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIHRoZSB2YWx1ZXMgaW4gYSBjb25maWd1cmF0aW9uIG1hcC5cbi8vLyBJbiBhZGRpdGlvbiB0byB0aGUgZ2xvYmFsIGAkc3VzeWAgcHJvcGVydGllcyxcbi8vLyB0aGlzIG1hcCBjYW4gaW5jbHVkZSBsb2NhbCBzcGFuLXJlbGF0ZWQgaW5mb3JtYXRpb24sXG4vLy8gbGlrZSBgc3BhbmAgYW5kIGBsb2NhdGlvbmAuXG4vLy9cbi8vLyBOb3JtYWxpemF0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgdmFsdWVzIGFyZSB2YWxpZCxcbi8vLyB3aGljaCB3aWxsIGhhcHBlbiBpbiB0aGUgU3UgbWF0aCBsYXllci5cbi8vLyBUaGVzZSBmdW5jdGlvbnMgbWVyZWx5IGxvb2sgZm9yIGtub3duIFN1c3kgc3ludGF4IOKAk1xuLy8vIHJldHVybmluZyBhIG1hcCB3aXRoIHRob3NlIHNob3J0aGFuZCB2YWx1ZXNcbi8vLyBjb252ZXJ0ZWQgaW50byBsb3ctbGV2ZWwgZGF0YSBmb3IgU3UuXG4vLy8gRm9yIGV4YW1wbGUgYHNwYW46IGFsbGAgYW5kIGBsb2NhdGlvbjogZmlyc3RgXG4vLy8gd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBzcGVjaWZpYyBudW1iZXJzLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vLyBAc2VlICRzdXN5XG4vLy8gQHNlZSBzdXN5LXBhcnNlXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyAtXG4vLy8gICBNYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIG5vcm1hbGl6ZS5cbi8vLyAgIFNlZSBgJHN1c3lgIGFuZCBgc3VzeS1wYXJzZSgpYCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vIEBwYXJhbSB7bWFwIHwgbnVsbH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdXNlIGFzIGdsb2JhbCByZWZlcmVuY2UsXG4vLy8gICBvciBgbnVsbGAgdG8gdXNlIGdsb2JhbCBzZXR0aW5ncy5cbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgTWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyxcbi8vLyAgIHdpdGggYWxsIHZhbHVlcyBub3JtYWxpemVkIGZvciBTdSBtYXRoIGZ1bmN0aW9ucy5cbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZShcbiAgJGNvbmZpZyxcbiAgJGNvbnRleHQ6IG51bGxcbikge1xuICAvLyBTcHJlYWRcbiAgQGVhY2ggJHNldHRpbmcgaW4gKCdzcHJlYWQnLCAnY29udGFpbmVyLXNwcmVhZCcpIHtcbiAgICAkdmFsdWU6IG1hcC1nZXQoJGNvbmZpZywgJHNldHRpbmcpO1xuXG4gICAgQGlmICR2YWx1ZSB7XG4gICAgICAkdmFsdWU6IHN1c3ktbm9ybWFsaXplLXNwcmVhZCgkdmFsdWUpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgkc2V0dGluZzogJHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29sdW1uc1xuICAkY29sdW1uczogbWFwLWdldCgkY29uZmlnLCAnY29sdW1ucycpO1xuXG4gIEBpZiAkY29sdW1ucyB7XG4gICAgJGNvbHVtbnM6IHN1c3ktbm9ybWFsaXplLWNvbHVtbnMoJGNvbHVtbnMsICRjb250ZXh0KTtcbiAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCdjb2x1bW5zJzogJGNvbHVtbnMpKTtcbiAgfVxuXG4gIEBpZiBub3QgJGNvbHVtbnMge1xuICAgICRtYXA6IHR5cGUtb2YoJGNvbnRleHQpID09ICdtYXAnO1xuICAgICRjb2x1bW5zOiBpZigkbWFwLCBtYXAtZ2V0KCRjb250ZXh0LCAnY29sdW1ucycpLCBudWxsKTtcbiAgICAkY29sdW1uczogJGNvbHVtbnMgb3Igc3VzeS1nZXQoJ2NvbHVtbnMnKTtcbiAgfVxuXG4gIC8vIFNwYW5cbiAgJHNwYW46IG1hcC1nZXQoJGNvbmZpZywgJ3NwYW4nKTtcblxuICBAaWYgJHNwYW4ge1xuICAgICRzcGFuOiBzdXN5LW5vcm1hbGl6ZS1zcGFuKCRzcGFuLCAkY29sdW1ucyk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnc3Bhbic6ICRzcGFuKSk7XG4gIH1cblxuICAvLyBMb2NhdGlvblxuICAkbG9jYXRpb246IG1hcC1nZXQoJGNvbmZpZywgJ2xvY2F0aW9uJyk7XG5cbiAgQGlmICRsb2NhdGlvbiB7XG4gICAgJGxvY2F0aW9uOiBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvbigkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnbG9jYXRpb24nOiAkbG9jYXRpb24pKTtcbiAgfVxuXG4gIEByZXR1cm4gJGNvbmZpZztcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBTcGFuXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgc3BhbmAgc2hvcnRoYW5kIGZvciBTdS5cbi8vLyBTdSBzcGFuIHN5bnRheCBhbGxvd3MgYW4gZXhwbGljaXQgbGVuZ3RoIChlLmcuIGAzZW1gKSxcbi8vLyB1bml0bGVzcyBjb2x1bW4tc3BhbiBudW1iZXIgKGUuZy4gYDNgIGNvbHVtbnMpLFxuLy8vIG9yIGFuIGV4cGxpY2l0IGxpc3Qgb2YgY29sdW1ucyAoZS5nLiBgKDMgNSA4KWApLlxuLy8vXG4vLy8gU3VzeSBzcGFuIHN5bnRheCBhbHNvIGFsbG93cyB0aGUgYGFsbGAga2V5d29yZCxcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNsaWNlIG9mIHRoZSBjb250ZXh0XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlciB8IGxpc3QgfCAnYWxsJ30gJHNwYW4gLVxuLy8vICAgU3BhbiB2YWx1ZSB0byBub3JtYWxpemUuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBOb3JtYWxpemVkIGxpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyIHwgbGlzdH0gLVxuLy8vICAgTnVtYmVyIG9yIGxpc3QgdmFsdWUgZm9yIGAkc3BhbmBcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1zcGFuKFxuICAkc3BhbixcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KCdjb2x1bW5zJylcbikge1xuICBAaWYgKCRzcGFuID09ICdhbGwnKSB7XG4gICAgQHJldHVybiBsZW5ndGgoJGNvbHVtbnMpO1xuICB9XG5cbiAgQHJldHVybiAkc3Bhbjtcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBDb2x1bW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgY29sdW1uYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IGNvbHVtbiBzeW50YXggb25seSBhbGxvd3MgY29sdW1uIGxpc3RzIChlLmcuIGAxMjBweCAxIDEgMSAxMjBweGApLlxuLy8vXG4vLy8gU3VzeSBzcGFuIHN5bnRheCBhbHNvIGFsbG93cyBhIHVuaXRsZXNzIGBzbGljZWAgbnVtYmVyIChlLmcgYG9mIDVgKSxcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNsaWNlIG9mIHRoZSBjb250ZXh0XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBpbnRlZ2VyfSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zLFxuLy8vICAgb3IgdW5pdGxlc3MgaW50ZWdlciByZXByZXNlbnRpbmcgYSBzbGljZSBvZlxuLy8vICAgdGhlIGF2YWlsYWJsZSBjb250ZXh0LlxuLy8vIEBwYXJhbSB7bWFwIHwgbnVsbH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdXNlIGFzIGdsb2JhbCByZWZlcmVuY2UsXG4vLy8gICBvciBgbnVsbGAgdG8gYWNjZXNzIGdsb2JhbCBzZXR0aW5ncy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIENvbHVtbnMgbGlzdCB2YWx1ZSwgbm9ybWFsaXplZCBmb3IgU3UgaW5wdXQuXG4vLy9cbi8vLyBAdGhyb3dzXG4vLy8gICB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgc2xpY2Ugb2YgYXN5bW1ldHJpY2FsIGNvbnRleHRcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1jb2x1bW5zKFxuICAkY29sdW1ucyxcbiAgJGNvbnRleHQ6IG51bGxcbikge1xuICAkY29udGV4dDogJGNvbnRleHQgb3Igc3VzeS1zZXR0aW5ncygpO1xuXG4gIEBpZiB0eXBlLW9mKCRjb2x1bW5zKSA9PSAnbGlzdCcge1xuICAgIEByZXR1cm4gX3N1c3ktZmxhdHRlbigkY29sdW1ucyk7XG4gIH1cblxuICBAaWYgKHR5cGUtb2YoJGNvbHVtbnMpID09ICdudW1iZXInKSBhbmQgKHVuaXRsZXNzKCRjb2x1bW5zKSkge1xuICAgICRzcGFuOiAkY29sdW1ucztcbiAgICAkY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2NvbHVtbnMnKTtcbiAgICAkc3ltbWV0cmljYWw6IHN1c3ktcmVwZWF0KGxlbmd0aCgkY29udGV4dCksIG50aCgkY29udGV4dCwgMSkpO1xuXG4gICAgQGlmICgkY29udGV4dCA9PSAkc3ltbWV0cmljYWwpIHtcbiAgICAgIEByZXR1cm4gc3VzeS1yZXBlYXQoJHNwYW4sIG50aCgkY29udGV4dCwgMSkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGFjdHVhbDogJ29mIGAjeyRzcGFufWAnO1xuICAgICAgJGNvbHVtbnM6ICdncmlkLWNvbHVtbnMgYCN7JGNvbnRleHR9YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnY29udGV4dC1zbGljZSAjeyRhY3R1YWx9IGNhbiBub3QgYmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiAjeyRjb2x1bW5zfS4nLFxuICAgICAgICAnc3VzeS1ub3JtYWxpemUtY29sdW1ucycpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGNvbHVtbnM7XG59XG5cblxuXG4vLyBOb3JtYWxpemUgU3ByZWFkXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIGBzcHJlYWRgIHNob3J0aGFuZCBmb3IgU3UuXG4vLy8gU3Ugc3ByZWFkIHN5bnRheCBvbmx5IGFsbG93cyB0aGUgbnVtYmVycyBgLTFgLCBgMGAsIG9yIGAxYCDigJNcbi8vLyByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBndXR0ZXJzIGNvdmVyZWRcbi8vLyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIHNwYW5uZWQuXG4vLy9cbi8vLyBTdXN5IHNwcmVhZCBzeW50YXggYWxzbyBhbGxvd3Mga2V5d29yZHMgZm9yIGVhY2ggdmFsdWUg4oCTXG4vLy8gYG5hcnJvd2AgZm9yIGAtMWAsIGB3aWRlYCBmb3IgYDBgLCBvciBgd2lkZXJgIGZvciBgMWAg4oCTXG4vLy8gd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlZ2Vyc1xuLy8vIGluIG5vcm1hbGl6YXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xIHwgJ25hcnJvdycgfCAnd2lkZScgfCAnd2lkZXInfSAkc3ByZWFkIC1cbi8vLyAgIFNwcmVhZCBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycywgcmVsYXRpdmUgdG8gYSBjb2x1bW4tY291bnQg4oCUXG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKC0xKSwgYHdpZGVgICgwKSwgb3IgYHdpZGVyYCAoMSlcbi8vL1xuLy8vIEByZXR1cm4ge251bWJlcn0gLVxuLy8vICAgTnVtZXJpYyB2YWx1ZSBmb3IgYCRzcHJlYWRgXG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUtc3ByZWFkKFxuICAkc3ByZWFkXG4pIHtcbiAgJG5vcm1hbC1zcHJlYWQ6IChcbiAgICAnbmFycm93JzogLTEsXG4gICAgJ3dpZGUnOiAwLFxuICAgICd3aWRlcic6IDEsXG4gICk7XG5cbiAgQHJldHVybiBtYXAtZ2V0KCRub3JtYWwtc3ByZWFkLCAkc3ByZWFkKSBvciAkc3ByZWFkO1xufVxuXG5cblxuLy8gTm9ybWFsaXplIExvY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgYGxvY2F0aW9uYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IGxvY2F0aW9uIHN5bnRheCByZXF1aXJlcyB0aGUgKDEtaW5kZXhlZCkgbnVtYmVyIGZvciBhIGNvbHVtbi5cbi8vL1xuLy8vIFN1c3kgYWxzbyBhbGxvd3MgdGhlIGBmaXJzdGAgYW5kIGBsYXN0YCBrZXl3b3Jkcyxcbi8vLyB3aGVyZSBgZmlyc3RgIGlzIGFsd2F5cyBgMWAsXG4vLy8gYW5kIGBsYXN0YCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHNwYW4gYW5kIGNvbHVtbiB2YWx1ZXMuXG4vLy8gQm90aCBrZXl3b3JkcyBhcmUgbm9ybWFsaXplZCBpbnRvIGFuIGludGVnZXIgaW5kZXhcbi8vLyBpbiBub3JtYWxpemF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZC1jb2x1bW5zIHRvIGJlIHNwYW5uZWRcbi8vLyBAcGFyYW0ge2ludGVnZXIgfCAnZmlyc3QnIHwgJ2xhc3QnfSAkbG9jYXRpb24gLVxuLy8vICAgU3RhcnRpbmcgKDEtaW5kZXhlZCkgY29sdW1uIHBvc2l0aW9uIG9mIGEgc3Bhbixcbi8vLyAgIG9yIGEgbmFtZWQgbG9jYXRpb24ga2V5d29yZC5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIEFscmVhZHktbm9ybWFsaXplZCBsaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtpbnRlZ2VyfSAtXG4vLy8gICBOdW1lcmljIHZhbHVlIGZvciBgJGxvY2F0aW9uYFxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplLWxvY2F0aW9uKFxuICAkc3BhbixcbiAgJGxvY2F0aW9uLFxuICAkY29sdW1uc1xuKSB7XG4gICRjb3VudDogbGVuZ3RoKCRjb2x1bW5zKTtcbiAgJG5vcm1hbC1sb2NhdGlvbnM6IChcbiAgICAnZmlyc3QnOiAxLFxuICAgICdhbHBoYSc6IDEsXG4gICAgJ2xhc3QnOiAkY291bnQgLSAkc3BhbiArIDEsXG4gICAgJ29tZWdhJzogJGNvdW50IC0gJHNwYW4gKyAxLFxuICApO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkbm9ybWFsLWxvY2F0aW9ucywgJGxvY2F0aW9uKSBvciAkbG9jYXRpb247XG59XG4iLCIvLy8gU2hvcnRoYW5kIFN5bnRheCBQYXJzZXJcbi8vLyA9PT09PT09PT09PT09PT09PT09PT09PVxuLy8vIFRoZSBzeW50YXggcGFyc2VyIGNvbnZlcnRzIFtzaG9ydGhhbmQgc3ludGF4XVtzaG9ydF1cbi8vLyBpbnRvIGEgbWFwIG9mIHNldHRpbmdzIHRoYXQgY2FuIGJlIGNvbXBhcmVkL21lcmdlZCB3aXRoXG4vLy8gb3RoZXIgY29uZmlnIG1hcHMgYW5kIGdsb2JhbCBzZXR0aW5nLlxuLy8vXG4vLy8gW3Nob3J0XTogYXBpLmh0bWxcbi8vL1xuLy8vIEBncm91cCBfcGFyc2VyXG5cblxuXG4vLyBQYXJzZVxuLy8gLS0tLS1cbi8vLyBUaGUgYHBhcnNlYCBmdW5jdGlvbiBwcm92aWRlcyBhbGwgdGhlIHN5bnRheC1zdWdhciBpbiBTdXN5LFxuLy8vIGNvbnZlcnRpbmcgdXNlciBzaG9ydGhhbmRcbi8vLyBpbnRvIGEgdXNhYmxlIG1hcCBvZiBrZXlzIGFuZCB2YWx1ZXNcbi8vLyB0aGF0IGNhbiBiZSBub3JtYWxpemVkIGFuZCBwYXNzZWQgdG8gU3UuXG4vLy9cbi8vLyBAZ3JvdXAgX3BhcnNlclxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNob3J0aGFuZCAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBzcGFuLFxuLy8vICAgb3B0aW9uYWxseSBjb250YWluaW5nOlxuLy8vICAgLSBhIGNvdW50LCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0IHNwYW47XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmAgZm9yIG9wdGlvbmFsbHkgc3ByZWFkaW5nXG4vLy8gICAgIGFjcm9zcyBhZGphY2VudCBndXR0ZXJzO1xuLy8vICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zXG4vLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lclxuLy8vICAgICAoc3BhbiBjb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHMpO1xuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzXG4vLy8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLVxuLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLFxuLy8vICAgb25seSBwYXJzaW5nIGNvbnRleHQgYW5kIGNvbnRhaW5lci1zcHJlYWQuXG4vLy8gICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFjY2VwdCBzcGFubGVzcyB2YWx1ZXMsXG4vLy8gICBsaWtlIHRoZSBgZ3V0dGVycygpYCBzeW50YXguXG4vLy8gICBXaGVuIHBhcnNpbmcgY29udGV4dC1vbmx5LFxuLy8vICAgdGhlIGBvZmAgaW5kaWNhdG9yIGlzIG9wdGlvbmFsLlxuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBNYXAgb2Ygc3BhbiBhbmQgZ3JpZCBzZXR0aW5nc1xuLy8vICAgcGFyc2VkIGZyb20gc2hvcnRoYW5kIGlucHV0IOKAk1xuLy8vICAgaW5jbHVkaW5nIGFsbCB0aGUgcHJvcGVydGllcyBhdmFpbGFibGUgZ2xvYmFsbHkg4oCTXG4vLy8gICBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYHNwcmVhZGAsIGBjb250YWluZXItc3ByZWFkYCDigJNcbi8vLyAgIGFsb25nIHdpdGggdGhlIHNwYW4tc3BlY2lmaWMgcHJvcGVydGllc1xuLy8vICAgYHNwYW5gLCBhbmQgYGxvY2F0aW9uYC5cbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBhIHNob3J0aGFuZCB2YWx1ZSBpcyBub3QgcmVjb2duaXplZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UoXG4gICRzaG9ydGhhbmQsXG4gICRjb250ZXh0LW9ubHk6IGZhbHNlXG4pIHtcbiAgJHBhcnNlLWVycm9yOiAnVW5rbm93biBzaG9ydGhhbmQgcHJvcGVydHk6JztcbiAgJG9wdGlvbnM6IChcbiAgICAnZmlyc3QnOiAnbG9jYXRpb24nLFxuICAgICdsYXN0JzogJ2xvY2F0aW9uJyxcbiAgICAnYWxwaGEnOiAnbG9jYXRpb24nLFxuICAgICdvbWVnYSc6ICdsb2NhdGlvbicsXG4gICAgJ25hcnJvdyc6ICdzcHJlYWQnLFxuICAgICd3aWRlJzogJ3NwcmVhZCcsXG4gICAgJ3dpZGVyJzogJ3NwcmVhZCcsXG4gICk7XG5cbiAgJHJldHVybjogKCk7XG4gICRzcGFuOiBudWxsO1xuICAkY29sdW1uczogbnVsbDtcblxuICAkb2Y6IG51bGw7XG4gICRuZXh0OiBmYWxzZTtcblxuICAvLyBBbGxvdyBjb250ZXh0LW9ubHkgc2hvcnRoYW5kLCB3aXRob3V0IHNwYW5cbiAgQGlmICgkY29udGV4dC1vbmx5KSBhbmQgKG5vdCBpbmRleCgkc2hvcnRoYW5kLCAnb2YnKSkge1xuICAgIEBpZiBzdS12YWxpZC1jb2x1bW5zKCRzaG9ydGhhbmQsICdmYWlsLXNpbGVudCcpIHtcbiAgICAgICRzaG9ydGhhbmQ6ICdvZicgJHNob3J0aGFuZDtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzaG9ydGhhbmQ6IGpvaW4oJ29mJywgJHNob3J0aGFuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbG9vcCB0aHJvdWdoIHRoZSBzaG9ydGhhbmQgbGlzdFxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkc2hvcnRoYW5kKSB7XG4gICAgJGl0ZW06IG50aCgkc2hvcnRoYW5kLCAkaSk7XG4gICAgJHR5cGU6IHR5cGUtb2YoJGl0ZW0pO1xuICAgICRlcnJvcjogZmFsc2U7XG4gICAgJGRldGFpbHM6ICdbI3skdHlwZX1dIGAjeyRpdGVtfWAnO1xuXG4gICAgLy8gaWYgd2Uga25vdyB3aGF0J3Mgc3VwcG9zZWQgdG8gYmUgY29taW5nIG5leHTigKZcbiAgICBAaWYgJG5leHQge1xuXG4gICAgICAvLyBBZGQgdG8gdGhlIHJldHVybiBtYXBcbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJG5leHQ6ICRpdGVtKSk7XG5cbiAgICAgIC8vIFJlc2V0IG5leHQgdG8gYGZhbHNlYFxuICAgICAgJG5leHQ6IGZhbHNlO1xuXG4gICAgfSBAZWxzZSB7IC8vIElmIHdlIGRvbid0IGtub3cgd2hhdCdzIHN1cHBvc2VkIHRvIGJlIGNvbWluZ+KAplxuXG4gICAgICAvLyBLZXl3b3Jkc+KAplxuICAgICAgQGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayB0aGUgbWFwIGZvciBrZXl3b3Jkc+KAplxuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG9wdGlvbnMsICRpdGVtKSB7XG4gICAgICAgICAgJHNldHRpbmc6IG1hcC1nZXQoJG9wdGlvbnMsICRpdGVtKTtcblxuICAgICAgICAgIC8vIFNwcmVhZCBjb3VsZCBiZSBvbiB0aGUgc3BhbiBvciB0aGUgY29udGFpbmVy4oCmXG4gICAgICAgICAgQGlmICgkc2V0dGluZyA9PSAnc3ByZWFkJykgYW5kICgkb2YpIHtcbiAgICAgICAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJ2NvbnRhaW5lci1zcHJlYWQnOiAkaXRlbSkpO1xuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgkc2V0dGluZzogJGl0ZW0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBAZWxzZSBpZiAoJGl0ZW0gPT0gJ2FsbCcpIHtcbiAgICAgICAgICAvLyBgQWxsYCBpcyBhIHNwYW4gc2hvcnRjdXRcbiAgICAgICAgICAkc3BhbjogJ2FsbCc7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdhdCcpIHtcbiAgICAgICAgICAvLyBTb21lIGtleXdvcmRzIHNldHVwIHdoYXQncyBuZXh04oCmXG4gICAgICAgICAgJG5leHQ6ICdsb2NhdGlvbic7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdzZXQtZ3V0dGVycycpIHtcbiAgICAgICAgICAkbmV4dDogJ2d1dHRlcnMnO1xuICAgICAgICB9IEBlbHNlIGlmICgkaXRlbSA9PSAnb2YnKSB7XG4gICAgICAgICAgJG9mOiB0cnVlO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAkZXJyb3I6IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gJ251bWJlcicpIG9yICgkdHlwZSA9PSAnbGlzdCcpIHsgLy8gTnVtYmVycyAmIGxpc3Rz4oCmXG5cbiAgICAgICAgQGlmIG5vdCAoJHNwYW4gb3IgJG9mKSB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHNwYW4sIGFuZCB3ZSdyZSBub3QgZXhwZWN0aW5nIGNvbnRleHTigKZcbiAgICAgICAgICAkc3BhbjogJGl0ZW07XG4gICAgICAgIH0gQGVsc2UgaWYgKCRvZikgYW5kIChub3QgJGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBXZSBhcmUgZXhwZWN0aW5nIGNvbnRleHTigKZcbiAgICAgICAgICAkY29sdW1uczogJGl0ZW07XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJGVycm9yOiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZXJyb3Ige1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcignI3skcGFyc2UtZXJyb3J9ICN7JGRldGFpbHN9JywgJ3N1c3ktcGFyc2UnKTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIHNwYW4sIG1lcmdlIGl0IGluXG4gIEBpZiAkc3BhbiB7XG4gICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgnc3Bhbic6ICRzcGFuKSk7XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIGNvbHVtbnMsIG1lcmdlIHRoZW0gaW5cbiAgQGlmICRjb2x1bW5zIHtcbiAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCdjb2x1bW5zJzogJGNvbHVtbnMpKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWFwIG9mIHNldHRpbmdz4oCmXG4gIEByZXR1cm4gJHJldHVybjtcbn1cbiIsIi8vLyBTeW50YXggVXRpbGl0aWVzIGZvciBFeHRlbmRpbmcgU3VzeVxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlcmUgYXJlIG1hbnkgc3RlcHMgaW52b2x2ZWRcbi8vLyB3aGVuIHRyYW5zbGF0aW5nIGJldHdlZW4gdGhlIFN1c3kgc3ludGF4IGxheWVyLFxuLy8vIGFuZCB0aGUgU3UgY29yZSBtYXRoLlxuLy8vIFRoYXQgZW50aXJlIHByb2Nlc3MgY2FuIGJlIGNvbmRlbnNlZCB3aXRoIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4vLy8gRm9yIGFueW9uZSB0aGF0IHdhbnRzIHRvIGFjY2VzcyB0aGUgZnVsbCBwb3dlciBvZiBTdXN5LFxuLy8vIGFuZCBidWlsZCB0aGVpciBvd24gcGx1Z2lucywgZnVuY3Rpb25zLCBvciBtaXhpbnMg4oCTXG4vLy8gdGhpcyBpcyB0aGUgcHJpbWFyeSBBUEkgZm9yIGNvbXBpbGluZyB1c2VyIGlucHV0LFxuLy8vIGFuZCBhY2Nlc3NpbmcgdGhlIGNvcmUgbWF0aC5cbi8vL1xuLy8vIFRoaXMgaXMgdGhlIHNhbWUgdGVjaG5pcXVlIHdlIHVzZSBpbnRlcm5hbGx5LFxuLy8vIHRvIGtlZXAgb3VyIEFQSSBsYXllciBzaW1wbGUgYW5kIGxpZ2h0LXdlaWdodC5cbi8vLyBFdmVyeSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHMsXG4vLy8gYSBcInNob3J0aGFuZFwiIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGFuIG9yIGNvbnRleHQsXG4vLy8gYW5kIGFuIG9wdGlvbmFsIHNldHRpbmdzLW1hcCB0byBvdmVycmlkZSBnbG9iYWwgZGVmYXVsdHMuXG4vLy9cbi8vLyAtIFVzZSBgc3VzeS1jb21waWxlKClgIHRvIHBhcnNlLCBtZXJnZSwgYW5kIG5vcm1hbGl6ZVxuLy8vICAgYWxsIHRoZSB1c2VyIHNldHRpbmdzIGludG8gYSBzaW5nbGUgbWFwLlxuLy8vIC0gVGhlbiB1c2UgYHN1LWNhbGwoKWAgdG8gY2FsbCBvbmUgb2YgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMsXG4vLy8gICB3aXRoIHdoYXRldmVyIGRhdGEgaXMgbmVlZGVkIGZvciB0aGF0IGZ1bmN0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vIEBzZWUgc3VzeS1jb21waWxlXG4vLy8gQHNlZSBzdS1jYWxsXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gU3VzeSBBUEkgYGd1dHRlcmAgZnVuY3Rpb25cbi8vLyAgIEBmdW5jdGlvbiBzdXN5LWd1dHRlcihcbi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktZ2V0KCdjb2x1bW5zJyksXG4vLy8gICAgICRjb25maWc6ICgpXG4vLy8gICApIHtcbi8vLyAgICAgLy8gY29tcGlsZSBhbmQgbm9ybWFsaXplIGFsbCB1c2VyIGFyZ3VtZW50cyBhbmQgZ2xvYmFsIHNldHRpbmdzXG4vLy8gICAgICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTtcbi8vLyAgICAgLy8gY2FsbCBgc3UtZ3V0dGVyYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4vLy8gICAgIEByZXR1cm4gc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFNhbXBsZSBgc3BhbmAgbWl4aW4gZm9yIGZsb2F0ZWQgZ3JpZHNcbi8vLyAgIEBtaXhpbiBzcGFuKFxuLy8vICAgICAkc3Bhbixcbi8vLyAgICAgJGNvbmZpZzogKClcbi8vLyAgICkge1xuLy8vICAgICAkY29udGV4dDogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcbi8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkY29udGV4dCk7XG4vLy9cbi8vLyAgICAgJGVuZDogbWFwLWdldCgkY29udGV4dCwgJ3NwYW4nKSArIG1hcC1nZXQoJGNvbnRleHQsICdsb2NhdGlvbicpIC0gMTtcbi8vLyAgICAgJGlzLWxhc3Q6ICgkZW5kID09IG1hcC1nZXQoJGNvbnRleHQsICdjb2x1bW5zJykpO1xuLy8vXG4vLy8gICAgIEBpZiAkaXMtbGFzdCB7XG4vLy8gICAgICAgZmxvYXQ6IHJpZ2h0O1xuLy8vICAgICB9IEBlbHNlIHtcbi8vLyAgICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgICBtYXJnaW4tcmlnaHQ6IHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbi8vLyAgICAgfVxuLy8vICAgfVxuXG5cblxuLy8gQ29tcGlsZVxuLy8gLS0tLS0tLVxuLy8vIFN1c3kncyBzeW50YXggbGF5ZXIgaGFzIHZhcmlvdXMgbW92aW5nIHBhcnRzLFxuLy8vIHdpdGggc3ludGF4LXBhcnNpbmcgZm9yIHRoZSBncmlkL3NwYW4gc2hvcnRoYW5kLFxuLy8vIGFuZCBub3JtYWxpemF0aW9uIGZvciBlYWNoIG9mIHRoZSByZXN1bHRpbmcgdmFsdWVzLlxuLy8vIFRoZSBjb21waWxlIGZ1bmN0aW9uIHJvbGxzIHRoaXMgYWxsIHRvZ2V0aGVyXG4vLy8gaW4gYSBzaW5nbGUgY2FsbCDigJNcbi8vLyBmb3IgcXVpY2sgYWNjZXNzIGZyb20gb3VyIGludGVybmFsIEFQSSBmdW5jdGlvbnMsXG4vLy8gb3IgYW55IGFkZGl0aW9uYWwgZnVuY3Rpb25zIGFuZCBtaXhpbnMgeW91IGFkZCB0byB5b3VyIHByb2plY3QuXG4vLy8gUGFzcyB1c2VyIGlucHV0IGFuZCBjb25maWd1cmF0aW9uIG1hcHMgdG8gdGhlIGNvbXBpbGVyLFxuLy8vIGFuZCBpdCB3aWxsIGhhbmQgYmFjayBhIG1hcCBvZiB2YWx1ZXMgcmVhZHkgZm9yIFN1LlxuLy8vIENvbWJpbmUgdGhpcyB3aXRoIHRoZSBgc3UtY2FsbGAgZnVuY3Rpb25cbi8vLyB0byBxdWlja2x5IHBhcnNlLCBub3JtYWxpemUsIGFuZCBwcm9jZXNzIGdyaWQgY2FsY3VsYXRpb25zLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vIEBzZWUgc3UtY2FsbFxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0IHwgbWFwfSAkc2hvcnQgW251bGxdIC1cbi8vLyAgIFNob3J0aGFuZCBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgd2lkdGggb2YgdGhlIHNwYW4sXG4vLy8gICBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGEgY291bnQsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Qgc3Bhbjtcbi8vLyAgIC0gYGF0ICRuYCwgYGZpcnN0YCwgb3IgYGxhc3RgIGxvY2F0aW9uIG9uIGFzeW1tZXRyaWNhbCBncmlkcztcbi8vLyAgIC0gYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYCBmb3Igb3B0aW9uYWxseSBzcHJlYWRpbmdcbi8vLyAgICAgYWNyb3NzIGFkamFjZW50IGd1dHRlcnM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIChzcGFuIGNvdW50cyBsaWtlIGBvZiA2YCBhcmUgb25seSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyk7XG4vLy8gICAtIGFuZCBgc2V0LWd1dHRlcnMgJG5gIHRvIG92ZXJyaWRlIGdsb2JhbCBndXR0ZXIgc2V0dGluZ3Ncbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbbnVsbF0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4vLy8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLVxuLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLFxuLy8vICAgb25seSBwYXJzaW5nIGNvbnRleHQgYW5kIGNvbnRhaW5lci1zcHJlYWRcbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgUGFyc2VkIGFuZCBub3JtYWxpemVkIG1hcCBvZiBzZXR0aW5ncyxcbi8vLyAgIGJhc2VkIG9uIGdsb2JhbCBhbmQgbG9jYWwgY29uZmlndXJhdGlvbixcbi8vLyAgIGFsb25nd2l0aCBzaG9ydGhhZCBhZGp1c3RtZW50cy5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJHVzZXItaW5wdXQ6IDMgd2lkZSBvZiBzdXN5LXJlcGVhdCg2LCAxMjBweCkgc2V0LWd1dHRlcnMgMTBweDtcbi8vLyAgICRncmlkLWRhdGE6IHN1c3ktY29tcGlsZSgkdXNlci1pbnB1dCwgJHN1c3kpO1xuLy8vXG4vLy8gICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJGdyaWQtZGF0YSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSwgKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LWNvbXBpbGUoXG4gICRzaG9ydDogbnVsbCxcbiAgJGNvbmZpZzogbnVsbCxcbiAgJGNvbnRleHQtb25seTogZmFsc2Vcbikge1xuICAvLyBHZXQgYW5kIG5vcm1hbGl6ZSBjb25maWdcbiAgJGNvbmZpZzogaWYoJGNvbmZpZywgc3VzeS1zZXR0aW5ncygkY29uZmlnKSwgc3VzeS1zZXR0aW5ncygpKTtcbiAgJG5vcm1hbC1jb25maWc6IHN1c3ktbm9ybWFsaXplKCRjb25maWcpO1xuXG4gIC8vIFBhcnNlIGFuZCBub3JtYWxpemUgc2hvcnRoYW5kXG4gICRub3JtYWwtc2hvcnQ6ICgpO1xuXG4gIEBpZiAkc2hvcnQge1xuICAgIEBpZiAodHlwZS1vZigkc2hvcnQpICE9ICdtYXAnKSBhbmQgKGxlbmd0aCgkc2hvcnQpID4gMCkge1xuICAgICAgJHNob3J0OiBzdXN5LXBhcnNlKCRzaG9ydCwgJGNvbnRleHQtb25seSk7XG4gICAgfVxuXG4gICAgJG5vcm1hbC1zaG9ydDogc3VzeS1ub3JtYWxpemUoJHNob3J0LCAkbm9ybWFsLWNvbmZpZyk7XG4gIH1cblxuICAvLyBNZXJnZSBhbmQgcmV0dXJuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRub3JtYWwtY29uZmlnLCAkbm9ybWFsLXNob3J0KTtcbn1cblxuXG5cbi8vIENhbGxcbi8vIC0tLS1cbi8vLyBUaGUgU3VzeSBwYXJzaW5nIGFuZCBub3JtYWxpemF0aW9uIHByb2Nlc3Ncbi8vLyByZXN1bHRzIGluIGEgbWFwIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gbXVjaCBsaWtlIHRoZSBnbG9iYWwgYCRzdXN5YCBzZXR0aW5ncyBtYXAuXG4vLy8gSW4gb3JkZXIgdG8gcGFzcyB0aGF0IGluZm9ybWF0aW9uIGFsb25nIHRvIFN1IG1hdGggZnVuY3Rpb25zLFxuLy8vIHRoZSBwcm9wZXIgdmFsdWVzIGhhdmUgdG8gYmUgcGlja2VkIG91dCxcbi8vLyBhbmQgY29udmVydGVkIHRvIGFyZ3VtZW50cy5cbi8vL1xuLy8vIFRoZSBgc3UtY2FsbGAgZnVuY3Rpb24gc3RyZWFtbGluZXMgdGhhdCBwcm9jZXNzLFxuLy8vIHdlZWRpbmcgb3V0IHRoZSB1bm5lY2Vzc2FyeSBkYXRhLFxuLy8vIGFuZCBwYXNzaW5nIHRoZSByZXN0IGFsb25nIHRvIFN1IGluIHRoZSBwcm9wZXIgZm9ybWF0LlxuLy8vIENvbWJpbmUgdGhpcyB3aXRoIGBzdXN5LWNvbXBpbGVgIHRvIHF1aWNrbHkgcGFyc2UsXG4vLy8gbm9ybWFsaXplLCBhbmQgcHJvY2VzcyBncmlkIGNhbGN1bGF0aW9ucy5cbi8vL1xuLy8vIEBncm91cCBwbHVnaW4tdXRpbHNcbi8vL1xuLy8vIEByZXF1aXJlIHN1LXNwYW5cbi8vLyBAcmVxdWlyZSBzdS1ndXR0ZXJcbi8vLyBAcmVxdWlyZSBzdS1zbGljZVxuLy8vIEBzZWUgc3VzeS1jb21waWxlXG4vLy9cbi8vLyBAcGFyYW0geydzdS1zcGFuJyB8ICdzdS1ndXR0ZXInIHwgJ3N1LXNsaWNlJ30gJG5hbWUgLVxuLy8vICAgTmFtZSBvZiB0aGUgU3UgbWF0aCBmdW5jdGlvbiB0byBjYWxsLlxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIC1cbi8vLyAgIFBhcnNlZCBhbmQgbm9ybWFsaXplZCBtYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4vLy8gICB0byB1c2UgZm9yIG1hdGgtZnVuY3Rpb24gYXJndW1lbnRzLlxuLy8vXG4vLy8gQHJldHVybiB7Kn0gLVxuLy8vICAgUmVzdWx0cyBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkdXNlci1pbnB1dDogMyB3aWRlIG9mIHN1c3ktcmVwZWF0KDYsIDEyMHB4KSBzZXQtZ3V0dGVycyAxMHB4O1xuLy8vICAgJGdyaWQtZGF0YTogc3VzeS1jb21waWxlKCR1c2VyLWlucHV0LCAkc3VzeSk7XG4vLy9cbi8vLyAgIC5zdS1zcGFuIHtcbi8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkZ3JpZC1kYXRhKTtcbi8vLyAgIH1cbkBmdW5jdGlvbiBzdS1jYWxsKFxuICAkbmFtZSxcbiAgJGNvbmZpZ1xuKSB7XG4gICRncmlkLWZ1bmN0aW9uLWFyZ3M6IChcbiAgICAnc3Utc3Bhbic6ICgnc3BhbicsICdjb2x1bW5zJywgJ2d1dHRlcnMnLCAnc3ByZWFkJywgJ2NvbnRhaW5lci1zcHJlYWQnLCAnbG9jYXRpb24nKSxcbiAgICAnc3UtZ3V0dGVyJzogKCdjb2x1bW5zJywgJ2d1dHRlcnMnLCAnY29udGFpbmVyLXNwcmVhZCcpLFxuICAgICdzdS1zbGljZSc6ICgnc3BhbicsICdjb2x1bW5zJywgJ2xvY2F0aW9uJyksXG4gICk7XG5cbiAgJGFyZ3M6IG1hcC1nZXQoJGdyaWQtZnVuY3Rpb24tYXJncywgJG5hbWUpO1xuXG4gIEBpZiBub3QgJGFyZ3Mge1xuICAgICRvcHRpb25zOiAnVHJ5IG9uZSBvZiB0aGVzZTogI3ttYXAta2V5cygkZ3JpZC1mdW5jdGlvbi1hcmdzKX0nO1xuICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAnI3skbmFtZX0gaXMgbm90IGEgcHVibGljIFN1IGZ1bmN0aW9uLiAjeyRvcHRpb25zfScsXG4gICAgICAnc3UtY2FsbCcpO1xuICB9XG5cbiAgJGNhbGw6IGlmKGZ1bmN0aW9uLWV4aXN0cygnZ2V0LWZ1bmN0aW9uJyksIGdldC1mdW5jdGlvbigkbmFtZSksICRuYW1lKTtcbiAgJG91dHB1dDogKCk7XG5cbiAgQGVhY2ggJGFyZyBpbiAkYXJncyB7XG4gICAgJHZhbHVlOiBtYXAtZ2V0KCRjb25maWcsICRhcmcpO1xuICAgICRvdXRwdXQ6IGlmKCR2YWx1ZSwgbWFwLW1lcmdlKCRvdXRwdXQsICgkYXJnOiAkdmFsdWUpKSwgJG91dHB1dCk7XG4gIH1cblxuICBAcmV0dXJuIGNhbGwoJGNhbGwsICRvdXRwdXQuLi4pO1xufVxuIiwiLy8vIFN1c3kzIEFQSSBGdW5jdGlvbnNcbi8vLyA9PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlc2UgdGhyZWUgZnVuY3Rpb25zIGZvcm0gdGhlIGNvcmUgb2YgU3VzeSdzXG4vLy8gbGF5b3V0LWJ1aWxkaW5nIGdyaWQgQVBJLlxuLy8vXG4vLy8gLSBVc2UgYHNwYW4oKWAgYW5kIGBndXR0ZXIoKWAgdG8gcmV0dXJuIGFueSBncmlkLXdpZHRoLFxuLy8vICAgYW5kIGFwcGx5IHRoZSByZXN1bHRzIHdoZXJldmVyIHlvdSBuZWVkIHRoZW06XG4vLy8gICBDU1MgYHdpZHRoYCwgYG1hcmdpbmAsIGBwYWRkaW5nYCwgYGZsZXgtYmFzaXNgLCBgdHJhbnNmb3JtYCwgZXRjLlxuLy8vIC0gRm9yIGFzeW1tZXRyaWNhbC1mbHVpZCBncmlkcyxcbi8vLyAgIGBzbGljZSgpYCBjYW4gaGVscCBtYW5hZ2UgeW91ciBuZXN0aW5nIGNvbnRleHQuXG4vLy9cbi8vLyBBbGwgdGhyZWUgZnVuY3Rpb25zIGNvbWUgd2l0aCBhbiB1bnByZWZpeGVkIGFsaWFzIGJ5IGRlZmF1bHQsXG4vLy8gdXNpbmcgdGhlIGBzdXN5YCBpbXBvcnQuXG4vLy8gSW1wb3J0IHRoZSBgc3VzeS1wcmVmaXhgIHBhcnRpYWwgaW5zdGVhZCxcbi8vLyBpZiB5b3Ugb25seSBvbmx5IHdhbnQgcHJlZml4ZWQgdmVyc2lvbnMgb2YgdGhlIEFQSS5cbi8vL1xuLy8vIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyB0aGUgXCJTdVwiIGNvcmUtbWF0aCBmdW5jdGlvbnM6IGBzdS1zcGFuYCwgYHN1LWd1dHRlcmAsIGFuZCBgc3Utc2xpY2VgLlxuLy8vIElmIHlvdSBwcmVmZXIgdGhlIG1vcmUgY29uc3RyYWluZWQgc3ludGF4IG9mIHRoZSBtYXRoIGVuZ2luZSxcbi8vLyB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlIHRob3NlIGZ1bmN0aW9ucyBpbnN0ZWFkLlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3VzeS1zcGFuXG4vLy8gQHNlZSBzdXN5LWd1dHRlclxuLy8vIEBzZWUgc3VzeS1zbGljZVxuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgc3UtZ3V0dGVyXG4vLy8gQHNlZSBzdS1zbGljZVxuXG5cblxuLy8vICMjIFNob3J0aGFuZFxuLy8vXG4vLy8gQWxsIGZ1bmN0aW9ucyBkcmF3IG9uIHRoZSBzYW1lIHNob3J0aGFuZCBzeW50YXggaW4gdHdvIHBhcnRzLFxuLy8vIHNlcGVyYXRlZCBieSB0aGUgd29yZCBgb2ZgLlxuLy8vXG4vLy8gIyMjIFNwYW4gU3ludGF4OiBgPHdpZHRoPmAgW2A8bG9jYXRpb24+YCBgPHNwcmVhZD5gXVxuLy8vIFRoZSBmaXJzdCBwYXJ0IGRlc2NyaWJlcyB0aGVcbi8vLyAqKnNwYW4qKiB3aWR0aCwgbG9jYXRpb24sIGFuZCBzcHJlYWQgaW4gYW55IG9yZGVyLlxuLy8vIE9ubHkgdGhlIHdpZHRoIGlzIHJlcXVpcmVkOlxuLy8vXG4vLy8gLSBgc3BhbigyKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIDIgY29sdW1ucy5cbi8vLyAtIGBzcGFuKDMgd2lkZSlgIHdpbGwgcmV0dXJuIDMtY29sdW1ucywgd2l0aCBhbiBhZGRpdGlvbmFsIGd1dHRlci5cbi8vLyAtIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdpdGggYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgd2hlcmUgYHNwYW4oMyBhdCAyKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mXG4vLy8gICBzcGVjaWZpYyBjb2x1bW5zIG9uIHRoZSBncmlkLlxuLy8vICAgU2luY2UgdGhlc2UgYXJlIGZ1bmN0aW9ucywgdGhleSB3aWxsIG5vdCBoYW5kbGUgcGxhY2VtZW50IGZvciB5b3UuXG4vLy9cbi8vLyAjIyMgQ29udGV4dCBTeW50YXg6IGBbb2YgPGNvbHVtbnM+IDxjb250YWluZXItc3ByZWFkPiA8Z3V0dGVycz5dYFxuLy8vIFRoZSBzZWNvbmQgaGFsZiBvZiBTdXN5J3Mgc2hvcnRoYW5kXG4vLy8gZGVzY3JpYmVzIHRoZSBncmlkLSoqY29udGV4dCoqIOKAk1xuLy8vIGF2YWlsYWJsZSBjb2x1bW5zLCBjb250YWluZXItc3ByZWFkLCBhbmQgb3B0aW9uYWwgZ3V0dGVyIG92ZXJyaWRlIOKAk1xuLy8vIGluIGFueSBvcmRlci5cbi8vLyBBbGwgb2YgdGhlc2Ugc2V0dGluZ3MgaGF2ZSBnbG9iYWxseS1kZWZpbmVkIGRlZmF1bHRzOlxuLy8vXG4vLy8gLSBgc3BhbigyIG9mIDYpYCB3aWxsIHNldCB0aGUgY29udGV4dCB0b1xuLy8vICAgYSBzbGljZSBvZiA2IGNvbHVtbnMgZnJvbSB0aGUgZ2xvYmFsIGdyaWQuXG4vLy8gICBNb3JlIGRldGFpbHMgYmVsb3cuXG4vLy8gLSBgc3BhbigyIG9mIDEyIHdpZGUpYCBjaGFuZ2VzIHRoZSBjb250YWluZXItc3ByZWFkXG4vLy8gICBhcyB3ZWxsIGFzIHRoZSBjb2x1bW4tY29udGV4dC5cbi8vLyAtIGBzcGFuKDIgb2YgMTIgc2V0LWd1dHRlcnMgMC41ZW0pYFxuLy8vICAgd2lsbCBvdmVycmlkZSB0aGUgZ2xvYmFsIGd1dHRlcnMgc2V0dGluZ1xuLy8vICAgZm9yIHRoaXMgb25lIGNhbGN1bGF0aW9uLlxuLy8vXG4vLy8gQSBzaW5nbGUgdW5pdGxlc3MgbnVtYmVyIGZvciBgY29sdW1uc2Bcbi8vLyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzbGljZSBvZiB0aGUgcGFyZW50IGdyaWQuXG4vLy8gT24gYSBncmlkIHdpdGggYGNvbHVtbnM6IHN1c3ktcmVwZWF0KDEyLCAxMjBweClgLFxuLy8vIHRoZSBzaG9ydGhhbmQgYG9mIDRgIHdpbGwgdXNlIHRoZSBwYXJlbnQgYDEyMHB4YCBjb2x1bW4td2lkdGguXG4vLy8gWW91IGNhbiBhbHNvIGJlIG1vcmUgZXhwbGljaXQsXG4vLy8gYW5kIHNheSBgb2Ygc3VzeS1yZXBlYXQoNCwgMTAwcHgpYC5cbi8vLyBJZiB5b3UgYXJlIHVzaW5nIGFzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyBsaWtlIGBjb2x1bW5zOiAoMSAxIDIgMyA1IDgpYCxcbi8vLyBTdXN5IGNhbid0IHNsaWNlIGl0IGZvciB5b3Ugd2l0aG91dCBrbm93aW5nIHdoaWNoIGNvbHVtbnMgeW91IHdhbnQuXG4vLy8gVGhlIGBzbGljZWAgZnVuY3Rpb24gYWNjZXB0cyBleGFjdGx5IHRoZSBzYW1lIHN5bnRheCBhcyBgc3BhbmAsXG4vLy8gYnV0IHJldHVybnMgYSBsaXN0IG9mIGNvbHVtbnMgcmF0aGVyIHRoYW4gYSB3aWR0aC5cbi8vLyBVc2UgaXQgaW4geW91ciBjb250ZXh0IGxpa2UgYG9mIHNsaWNlKGZpcnN0IDMpYC5cbi8vL1xuLy8vIEBncm91cCBhcGlcblxuXG5cbi8vIFN1c3kgU3BhblxuLy8gLS0tLS0tLS0tXG4vLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBpbiBTdXN5IOKAlFxuLy8vIHVzZWQgdG8gcmV0dXJuIHRoZSB3aWR0aCBvZiBhIHNwYW4gYWNyb3NzIG9uZSBvciBtb3JlIGNvbHVtbnMsXG4vLy8gYW5kIGFueSByZWxldmFudCBndXR0ZXJzIGFsb25nIHRoZSB3YXkuXG4vLy8gV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncyxcbi8vLyBgc3BhbigzKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIDMgY29sdW1ucyxcbi8vLyBhbmQgdGhlIDIgaW50ZXJtZWRpYXRlIGd1dHRlcnMuXG4vLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGB3aWR0aGAgcHJvcGVydHkgb2YgZ3JpZCBlbGVtZW50cyxcbi8vLyBvciBgbWFyZ2luYCBhbmQgYHBhZGRpbmdgXG4vLy8gdG8gcHVzaCwgcHVsbCwgYW5kIHBhZCB5b3VyIGVsZW1lbnRzLlxuLy8vXG4vLy8gLSBUaGlzIGlzIGEgdGhpbiBzeW50YXgtc3VnYXIgc2hlbGwgYXJvdW5kXG4vLy8gICB0aGUgY29yZS1tYXRoIGBzdS1zcGFuKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBzcGFuKClgIGlzIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW4gLVxuLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgc3Bhbixcbi8vLyAgIG9wdGlvbmFsbHkgY29udGFpbmluZzpcbi8vLyAgIC0gYSBjb3VudCwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBzcGFuLlxuLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgICB3aGVyZSBgYXQgMSA9PSBmaXJzdGAsXG4vLy8gICAgIGFuZCBgbGFzdGAgd2lsbCBjYWxjdWxhdGUgdGhlIHByb3BlciBsb2NhdGlvblxuLy8vICAgICBiYXNlZCBvbiBjb2x1bW5zIGFuZCBzcGFuLlxuLy8vICAgLSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgIGZvciBvcHRpb25hbGx5IHNwcmVhZGluZ1xuLy8vICAgICBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycy5cbi8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1uc1xuLy8vICAgICBhbmQgc3ByZWFkIG9mIHRoZSBjb250YWluZXIuXG4vLy8gICAgIFNwYW4gY291bnRzIGxpa2UgYG9mIDZgIGFyZSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyAgICAgd2hlcmUgU3VzeSBjYW4gc2FmZWx5IGluZmVyIGEgc2xpY2Ugb2YgdGhlIHBhcmVudCBjb2x1bW5zLlxuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzLlxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXSAtXG4vLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4vLy8gICBTZWUgYCRzdXN5YCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBDYWxjdWxhdGVkIGxlbmd0aCB2YWx1ZSwgdXNpbmcgdGhlIHVuaXRzIGdpdmVuLFxuLy8vICAgb3IgY29udmVydGluZyB0byBgJWAgZm9yIGZyYWN0aW9uLWJhc2VkIGdyaWRzLFxuLy8vICAgb3IgYSBmdWxsIGBjYWxjYCBmdW5jdGlvbiB3aGVuIHVuaXRzL2ZyYWN0aW9uc1xuLy8vICAgYXJlIG5vdCBjb21wYXJhYmxlIG91dHNpZGUgdGhlIGJyb3dzZXIuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gc3BhbiBoYWxmIHRoZSBncmlkXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgLy8gdGhlIHJlc3VsdCBpcyBhIGJpdCB1bmRlciA1MCUgdG8gYWNjb3VudCBmb3IgZ3V0dGVyc1xuLy8vICAgICB3aWR0aDogc3VzeS1zcGFuKDYgb2YgMTIpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHNwYW4gYSBzcGVjaWZpYyBzZWdtZW50IG9mIGFzeW1tZXRyaWNhbCBncmlkXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgd2lkdGg6IHN1c3ktc3BhbigzIGF0IDMgb2YgKDEgMiAzIDUgOCkpO1xuLy8vICAgfVxuQGZ1bmN0aW9uIHN1c3ktc3BhbihcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgJG91dHB1dDogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcblxuICBAaWYgbWFwLWdldCgkb3V0cHV0LCAnc3BhbicpIHtcbiAgICBAcmV0dXJuIHN1LWNhbGwoJ3N1LXNwYW4nLCAkb3V0cHV0KTtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcGFuKX1dIGAje2luc3BlY3QoJHNwYW4pfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHNwYW4gdmFsdWUgZnJvbSAjeyRhY3R1YWx9LicsXG4gICAgJ3N1c3ktc3BhbicpO1xufVxuXG5cblxuLy8gU3VzeSBHdXR0ZXJcbi8vIC0tLS0tLS0tLS0tXG4vLy8gVGhlIGd1dHRlciBmdW5jdGlvbiByZXR1cm5zXG4vLy8gdGhlIHdpZHRoIG9mIGEgc2luZ2xlIGd1dHRlciBvbiB5b3VyIGdyaWQsXG4vLy8gdG8gYmUgYXBwbGllZCB3aGVyZSB5b3Ugc2VlIGZpdCDigJNcbi8vLyBvbiBgbWFyZ2luc2AsIGBwYWRkaW5nYCwgYHRyYW5zZm9ybWAsIG9yIGVsZW1lbnQgYHdpZHRoYC5cbi8vL1xuLy8vIC0gVGhpcyBpcyBhIHRoaW4gc3ludGF4LXN1Z2FyIHNoZWxsIGFyb3VuZFxuLy8vICAgdGhlIGNvcmUtbWF0aCBgc3UtZ3V0dGVyKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBndXR0ZXIoKWAgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBudW1iZXJ9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gICBPcHRpb25hbCBjb250ZXh0IGZvciBuZXN0ZWQgZ3V0dGVycyxcbi8vLyAgIGluY2x1ZGluZyBzaG9ydGhhbmQgZm9yXG4vLy8gICBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYW5kIGBjb250YWluZXItc3ByZWFkYFxuLy8vICAgKGFkZGl0aW9uYWwgc2hvcnRoYW5kIHdpbGwgYmUgaWdub3JlZClcbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgYXMgYCVgIG9mIGN1cnJlbnQgY29udGV4dCxcbi8vLyAgIG9yIGluIHRoZSB1bml0cyBkZWZpbmVkIGJ5IGBjb2x1bW4td2lkdGhgIHdoZW4gYXZhaWxhYmxlXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYWRkIGd1dHRlcnMgYmVmb3JlIG9yIGFmdGVyIGFuIGVsZW1lbnRcbi8vLyAgIC5mbG9hdHMge1xuLy8vICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgd2lkdGg6IHNwYW4oMyBvZiA2KTtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IGd1dHRlcihvZiA2KTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBhZGQgZ3V0dGVycyB0byBwYWRkaW5nXG4vLy8gICAuZmxleGJveCB7XG4vLy8gICAgIGZsZXg6IDEgMSBzcGFuKDMgd2lkZSBvZiA2IHdpZGUpO1xuLy8vICAgICBwYWRkaW5nOiBndXR0ZXIob2YgNikgLyAyO1xuLy8vICAgfVxuLy8vXG5AZnVuY3Rpb24gc3VzeS1ndXR0ZXIoXG4gICRjb250ZXh0OiBudWxsLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTtcblxuICBAcmV0dXJuIHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbn1cblxuXG5cbi8vIFN1c3kgU2xpY2Vcbi8vIC0tLS0tLS0tLS1cbi8vLyBXb3JraW5nIHdpdGggYXN5bW1ldHJpY2FsIGdyaWRzICh1bi1lcXVhbCBjb2x1bW4gd2lkdGhzKVxuLy8vIGNhbiBiZSBjaGFsbGVuZ2luZyDigJPCoFxuLy8vIGV4cGVjaWFsbHkgd2hlbiB0aGV5IGludm9sdmUgZmx1aWQvZnJhY3Rpb25hbCBlbGVtZW50cy5cbi8vLyBEZXNjcmliaW5nIGEgY29udGV4dCBgb2YgKDE1ZW0gNmVtIDZlbSA2ZW0gMTVlbSlgIGlzIGEgbG90XG4vLy8gdG8gcHV0IGluc2lkZSB0aGUgc3BhbiBvciBndXR0ZXIgZnVuY3Rpb24gc2hvcnRoYW5kLlxuLy8vIFRoaXMgc2xpY2UgZnVuY3Rpb24gcmV0dXJucyBhIHN1Yi1zbGljZSBvZiBhc3ltbWV0cmljYWwgY29sdW1ucyB0byB1c2Vcbi8vLyBmb3IgYSBuZXN0ZWQgY29udGV4dC5cbi8vLyBgc2xpY2UoMyBhdCAyKWAgd2lsbCBnaXZlIHlvdSBhIHN1YnNldCBvZiB0aGUgZ2xvYmFsIGdyaWQsXG4vLy8gc3Bhbm5pbmcgMyBjb2x1bW5zLCBzdGFydGluZyB3aXRoIHRoZSBzZWNvbmQuXG4vLy9cbi8vLyAtIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyAgIHRoZSBjb3JlLW1hdGggYHN1LXNsaWNlKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBzbGljZSgpYCBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdC5cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAc2VlIHN1LXNsaWNlXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHN1YnNldCBzcGFuLCBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIC0gU3Bhbi1jb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkc1xuLy8vICAgICAtIFZhbGlkIHNwcmVhZHMgaW5jbHVkZSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbi8vLyAgIFNlZSBgJHN1c3lgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBTdWJzZXQgbGlzdCBvZiBjb2x1bW5zIGZvciB1c2UgZm9yIGEgbmVzdGVkIGNvbnRleHRcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBSZXR1cm4gYSBuZXN0ZWQgc2VnbWVudCBvZiBhc3ltbWV0cmljYWwgZ3JpZFxuLy8vICAgJGNvbnRleHQ6IHN1c3ktc2xpY2UoMyBhdCAzIG9mICgxIDIgMyA1IDgpKTtcbi8vLyAgIC8qICRjb250ZXh0OiAjeyRjb250ZXh0fTsgKi9cbkBmdW5jdGlvbiBzdXN5LXNsaWNlKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICAkc3Bhbjogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcblxuICBAcmV0dXJuIHN1LWNhbGwoJ3N1LXNsaWNlJywgJHNwYW4pO1xufVxuXG5cblxuLy8vICMjIEJ1aWxkaW5nIEdyaWRzXG4vLy8gVGhlIHdlYiBoYXMgY29tZSBhIGxvbmcgd2F5XG4vLy8gc2luY2UgdGhlIGRheXMgb2YgZG91YmxlLW1hcmdpbi1oYWNrc1xuLy8vIGFuZCBpbmNvbnNpc3RlbnQgc3VicGl4ZWwgcm91bmRpbmcuXG4vLy8gSW4gYWRkaXRpb24gdG8gZmxvYXRzIGFuZCB0YWJsZXMsXG4vLy8gd2UgY2FuIG5vdyB1c2UgbXVjaCBtb3JlIHBvd2VyZnVsIHRvb2xzLFxuLy8vIGxpa2UgZmxleGJveCBhbmQgQ1NTIGdyaWQsXG4vLy8gdG8gYnVpbGQgbW9yZSBpbnRlcmVzdGluZyBhbmQgcmVzcG9uc2l2ZSBsYXlvdXRzLlxuLy8vXG4vLy8gV2l0aCBTdXN5Mywgd2UgaG9wZSB5b3UnbGwgc3RhcnQgbW92aW5nIGluIHRoYXQgZGlyZWN0aW9uLlxuLy8vIFlvdSBjYW4gc3RpbGwgYnVpbGQgY2xhc3NpYyAxMi1jb2x1bW4gR3JpZCBTeXN0ZW1zLFxuLy8vIGFuZCB3ZSdsbCBoZWxwIHlvdSBnZXQgdGhlcmUsXG4vLy8gYnV0IFN1c3kzIGlzIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgYSBncmlkLW1hdGgtb24tZGVtYW5kXG4vLy8gYXBwcm9hY2ggdG8gbGF5b3V0OlxuLy8vIGFwcGx5aW5nIG91ciBmdW5jdGlvbnMgb25seSB3aGVyZSB5b3UgcmVhbGx5IG5lZWQgZ3JpZCBtYXRoLlxuLy8vIFJlYWQgdGhlIFtpbnRybyBhcnRpY2xlIGJ5IE9kZEJpcmRdW3dlbGNvbWVdIGZvciBtb3JlIGRldGFpbHMuXG4vLy9cbi8vLyBbd2VsY29tZV06IGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzI4L3N1c3kzL1xuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBsaW5rIGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzI4L3N1c3kzLyBBcnRpY2xlOiBXZWxjb21lIHRvIFN1c3kzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gZmxvYXRzXG4vLy8gICAuZmxvYXQge1xuLy8vICAgICB3aWR0aDogc3BhbigzKTtcbi8vLyAgICAgbWFyZ2luLXJpZ2h0OiBndXR0ZXIoKTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBmbGV4Ym94XG4vLy8gICAuZmxleGJveCB7XG4vLy8gICAgIGZsZXg6IDEgMSBzcGFuKDMpO1xuLy8vICAgICAvLyBoYWxmIGEgZ3V0dGVyIG9uIGVpdGhlciBzaWRl4oCmXG4vLy8gICAgIHBhZGRpbmc6IDAgZ3V0dGVyKCkgLyAyO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHB1c2hpbmcgYW5kIHB1bGxpbmdcbi8vLyAgIC5wdXNoLTMge1xuLy8vICAgICBtYXJnaW4tbGVmdDogc3BhbigzIHdpZGUpO1xuLy8vICAgfVxuLy8vXG4vLy8gICAucHVsbC0zIHtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IDAgLSBzcGFuKDMgd2lkZSk7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYnVpbGRpbmcgYW4gYXR0cmlidXRlIHN5c3RlbVxuLy8vICAgLy8gbWFya3VwIGV4YW1wbGU6IDxkaXYgZGF0YS1zcGFuPVwibGFzdCAzXCI+PC9kaXY+XG4vLy8gICBbZGF0YS1zcGFuXSB7XG4vLy8gICAgIGZsb2F0OiBsZWZ0O1xuLy8vXG4vLy8gICAgICY6bm90KFtkYXRhLXNwYW4qPSdsYXN0J10pIHtcbi8vLyAgICAgICBtYXJnaW4tcmlnaHQ6IGd1dHRlcigpO1xuLy8vICAgICB9XG4vLy8gICB9XG4vLy9cbi8vLyAgIEBmb3IgJHNwYW4gZnJvbSAxIHRocm91Z2ggbGVuZ3RoKHN1c3ktZ2V0KCdjb2x1bW5zJykpIHtcbi8vLyAgICAgW2RhdGEtc3Bhbio9JyN7JHNwYW59J10ge1xuLy8vICAgICAgIHdpZHRoOiBzcGFuKCRzcGFuKTtcbi8vLyAgICAgfVxuLy8vICAgfVxuIiwiLy8gVW5wcmVmaXggU3VzeVxuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIFNwYW5cbi8vIC0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktc3BhbmBcbi8vLyAoYXZhaWxhYmxlIGJ5IGRlZmF1bHQpXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQGFsaWFzIHN1c3ktc3BhblxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhblxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICBAcmV0dXJuIHN1c3ktc3Bhbigkc3BhbiwgJGNvbmZpZyk7XG59XG5cblxuLy8gR3V0dGVyXG4vLyAtLS0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktZ3V0dGVyYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1ndXR0ZXJcbi8vL1xuLy8vIEBwYXJhbSB7aW50ZWdlciB8IGxpc3R9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXVxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJGNvbnRleHQ6IG51bGwsXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LWd1dHRlcigkY29udGV4dCwgJGNvbmZpZyk7XG59XG5cblxuLy8gU2xpY2Vcbi8vIC0tLS0tXG4vLy8gVW4tcHJlZml4ZWQgYWxpYXMgZm9yIGBzdXN5LXNsaWNlYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1zbGljZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhblxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBzbGljZShcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LXNsaWNlKCRzcGFuLCAkY29uZmlnKTtcbn1cbiIsIi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/kuLvmoYbmnrboqK3lrpogbWFpblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+ahiOS7tuahhuaetjpcbi8v54CP6Ka95Zmo5a+s5bqm6Kit5a6aKOWQjeeosSDlr6zluqYg5bem5Y+z6ZaT6Led57i95ZKMKVxuJGlubmVyOiAoZmx1aWQgMTAwJSAzMCx4bCAxNjAwIDMwLGxnIDEyODAgMzAsbWQgMTAyNCAwLHNtIDk2MCAwLHhzIDc2OCAwKTsgLy/moYbmnrblr6zluqboqK3lrppcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+i3nembouioreWumlxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kYmFzZUdhcDogMTBweDsgLy/kuLvopoHot53pm6LlpKflsI8s6ZaT6Led57Wx5LiA5YCN5pW4XG5cbi8v5paH5a2X6Kit5a6aXG4kZm9udDogJ0xhdG8nLCdOb3RvIFNhbnMgVEMnLHNhbnMtc2VyaWY7Ly/mloflrZflrZflnotcbiRmb250U2l6ZTogMTZweDsgLy/kuLvmloflrZflpKflsI9cbiRmb250U2l6ZUxldmVsOiAwLjU7Ly/mloflrZfmlL7lpKflgI3njodcbiRGb250TGV2ZWw6IDU7IC8v5paH5a2XbGV2ZWznlJ/miJDmlbhcbiRsaW5lSGVpZ2h0TGV2ZWw6IDEuNTsgLy/ooYzot53lgI3njodcbiRmb250TGg6IGNlaWwoJGZvbnRTaXplICogJGxpbmVIZWlnaHRMZXZlbCk7IC8v5Li75paH5a2X6KGM6auYXG4kdGV4dENvbG9yOiAjMjUyNTI1OyAvL+S4u+aWh+Wtl+mhj+iJslxuLy8kdGV4dEhDb2xvcjogIzMyNTVGOSAvL+S4u+aWh+Wtl+a7keWFpemhj+iJslxuJHRleHRIQ29sb3I6ICMwMDRBQUM7XG4kbGV0dGVyU3BhY2luZzogMGVtOyAvL+aWh+Wtl+mWk+i3nVxuLy/ntrLnq5nkuLvmnrbmp4vpoY/oibLoqK3lrppcbiR3aGl0ZTogICAgI2ZmZjtcbiRncmF5LTEwMDogI2Y4ZjlmYTtcbiRncmF5LTIwMDogI2U5ZWNlZjtcbiRncmF5LTMwMDogI2RlZTJlNjtcbiRncmF5LTQwMDogI2NlZDRkYTtcbiRncmF5LTUwMDogI2FkYjViZDtcbiRncmF5LTYwMDogIzZjNzU3ZDtcbiRncmF5LTcwMDogIzQ5NTA1NztcbiRncmF5LTgwMDogIzM0M2E0MDtcbiRncmF5LTkwMDogIzIxMjUyOTtcbiRibGFjazogICAgIzI1MjUyNTtcbi8vJG1haW4tY29sb3I6ICMzMjU1RjlcbiRtYWluLWNvbG9yOiAjMDA0QUFDO1xuJGJsdWU6ICMwMDRBQUM7XG4kZ3JlZW46ICMxNDVBMTI7XG4kcmVkOiAjYzEyNzJkO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v57ay5qC85qGG5p62IGdyaWRcbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGdyaWRYTDogMTYwMDtcbiRncmlkTGc6IDEyODA7XG4kZ3JpZE1kOiA3Njg7XG4kZ3JpZFNtOiA0ODA7XG4kZ3JpZENvbHM6IDEyOyAvL+e2suagvOashOaVuFxuJGdyaWQtcHJvcHM6ICgnZGVmYXVsdCc6IDE5MjAsJy14bCc6ICRncmlkWEwsJy1sZyc6ICRncmlkTGcsJy1tZCc6ICRncmlkTWQsJy1zbSc6ICRncmlkU20pOy8vY2xhc3Mg5bCN5oeJ5a+s5bqm6Kit5a6aXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/ooajpoK0gaGVhZGVyXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRoZWFkZXJNb2RlOiAxOyAvL2hlYWRlcuaooeW8jyAxOumBuOWWruWQjOS4gOihjCAyOumBuOWWruWcqOS4i+aWuVxuJGhlYWRlck9yZGVyOiAoJ2xvZ28nOiAxLCduYXYnOiAyLCdzZWFyY2gnOiA0LCdzb2NpYWwnOiAzLCdoYW1idXJnZXInOiA1KTsgLy/mjpLluo9cbiR2aWV3OiAoJ3NlYXJjaCc6IDAsJ3NvY2lhbEl0ZW0nOiAwKTsgLy9zZWFyY2g6MeeCuumhr+ekujDngrrkuI3poa/npLogU29jaWFsSXRlbSDnpL7nvqTmlbjnm65cbiRsb2dvSGVpZ2h0OiAoJ21vZGUxJzogODBweCwnbW9kZTFGaXhlZCc6IDgwcHgsJ21vZGUyJzogNzBweCwnbW9kZTJGaXhlZCc6IDUwcHgpOyAvLyBtb2RlMTpsb2dv6auY5bqmIOiIhyBtb2RlMjpsb2dv6auY5bqmXG4kbG9nb1dpZHRoOiA0MDBweDsgLy9MT0dP5a+s5bqmKOWDj+e0oClcbiRsb2dvQWxpZ246IGZsZXgtc3RhcnQ7IC8vTE9HT+S9jee9rihqdXN0aWZ5LWNvbnRlbnQpXG4kc29jaWFsSGVpZ2h0OiAyMHB4OyAvL+ekvue+pGljb27pq5jluqbkuI3lpKfmlrw0MHB4XG4kbmF2Rm9udDogMjBweDsgLy/pgbjllq7mloflrZflpKflsI9cbiRuYXZJdGVtOiA0OyAvL+mBuOWWruaomemhjOaVuOmHj1xuJG5hdkFsaWduOiBmbGV4LWVuZDsgLy9uYXbpgbjllq7mjpLliJfkvY3nva4oanVzdGlmeS1jb250ZW50KVxuJG5hdkhlaWdodDogNTBweDsgLy9tb2RlMumBuOWWrumrmOW6plxuJG5hdkxheWVyV2lkdGg6IDI1MHB4OyAvL+a7keWFpemBuOWWrumajuWxpOWvrOW6plxuJG5hdkNvbG9yOiAkdGV4dENvbG9yOyAvL+mBuOWWruaWh+Wtl+mhj+iJslxuJG5hdmJnQ29sb3I6ICR3aGl0ZTsgLy/pgbjllq7og4zmma/oibJcbiRuYXZIb3ZlckNvbG9yOiAkbWFpbi1jb2xvcjsgIC8v5ruR5YWl6aGP6ImyXG4kbmF2SG92ZXJiZ0NvbG9yOiAkd2hpdGU7IC8v5ruR5YWl6IOM5pmv6aGP6ImyXG4kbmF2Qm9yZGVyQ29sb3I6ICRncmF5LTMwMDsgLy/pgbjllq7moYbpoY/oibJcbiRuYXZCdG5XaWR0aDogNDBweDsgLy/kuIvpmo7lsaTmjInpiJXlr6zluqZcbiRuYXZCdG5iZ0NvbG9yOiAkd2hpdGU7IC8v5LiL6ZqO5bGk5oyJ6YiV6IOM5pmv6aGP6ImyXG4kcy1uYXZiZ0NvbG9yOiAkbWFpbi1jb2xvcjsvL+aJi+apn+adv+majuWxpOmBuOWWruiDjOaZr1xuJGhlYWRlclJXRDogMTAyNDsgLy8g5omL5qmf54mI6K6K5o+b5a+s5bqmXG4kaGVhZGVyUGhvbmVIZWlnaHQ6IDUwcHg7IC8v5omL5qmf54mIaGVhZGVyIOmrmOW6plxuXG5cblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+ihqOWWriBmb3JtXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRmb3JtSGVpZ2h0OiA0MHB4OyAvL+i8uOWFpeahhumrmOW6plxuJGZvcm1Db2xvcjogJHRleHRDb2xvcjsgLy/ovLjlhaXmoYbmloflrZfpoY/oibJcbiRmb3JtTGluZVdpZHRoOiAwOyAgLy/ovLjlhaXmoYbmoYbnt5rnspfntLBcbiRmb3JtTGluZUNvbG9yOiAjZjJmMmYyOyAgLy/ovLjlhaXmoYbmoYbnt5rpoY/oibJcbiRmb3JtQmdDb2xvcjogI2YyZjJmMjsgIC8v6Ly45YWl6IOM5pmv6aGP6ImyXG4kZm9ybUJkUnM6IDEwcHg7IC8v6Ly45YWl5qGG5ZyT6KeSXG4kZm9ybVNoYWRvdzogIzAwMDsgLy/ovLjlhaXmoYbpgbjlj5bpmbDlvbHpoY/oibJcbiRwbGFjZWhvbGRlckNvbG9yOiAjODg4OyAvL+i8uOWFpeahhnBsYWNlaG9sZGVy5paH5a2X6aGP6ImyXG4kbGVnZW5kQ29sb3I6ICMwMDA7IC8vZm9ybSDmqJnpoYzmloflrZfpoY/oibJcbiRyYWRpb1NpemU6IDIzcHg7IC8vcmFkaW8g6YG46aCF5aSn5bCPXG4kcmFkaW9CZ0NvbG9yOiAkZm9ybUJnQ29sb3I7IC8vcmFkaW8g6YG46aCF6aGP6ImyXG4kcmFkaW9MaW5lQ29sb3I6ICRmb3JtTGluZUNvbG9yOyAvL3JhZGlvIOmBuOmghemCiuahhumhj+iJslxuJHJhZGlvTGluZVdpZHRoOiAxcHg7IC8vcmFkaW8g6YG46aCF6YKK5qGG57KX57SwXG4kcmFkaW9CZFJzOiAyM3B4OyAvL3JhZGlvIOmBuOmgheWck+inklxuJHJhZGlvQ2hlY2tDb2xvcjogIzU1NTsgLy9yYWRpbyDpgbjmk4flvozpoY/oibJcbiRjaGVja2JveFNpemU6IDIzcHg7IC8vQ2hlY2tib3gg6YG46aCF5aSn5bCPXG4kY2hlY2tib3hCZ0NvbG9yOiAkZm9ybUJnQ29sb3I7IC8vQ2hlY2tib3gg6YG46aCF6aGP6ImyXG4kY2hlY2tib3hMaW5lV2lkdGg6IDFweDsgLy9DaGVja2JveCDpgbjpoIXpgormoYbnspfntLBcbiRjaGVja2JveExpbmVDb2xvcjogJGZvcm1MaW5lQ29sb3I7IC8vQ2hlY2tib3gg6YKK5qGG6aGP6ImyXG4kY2hlY2tib3hCZFJzOiAzcHg7IC8vQ2hlY2tib3gg5ZyT6KeS5aSn5bCPXG4kY2hlY2tib3hDaGVja0NvbG9yOiAjNTU1OyAvL0NoZWNrYm94IOmBuOaTh+W+jOWLvuWLvumhj+iJslxuJGNob2ljZUJ0bldpZHRoOiAxNTBweDsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXlr6zluqZcbiRjaG9pY2VCdG5IZWlnaHQ6IDUwcHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6auY5bqmXG4kY2hvaWNlQnRuQ29sb3I6ICRmb3JtQmdDb2xvcjsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpoY/oibJcbiRjaG9pY2VCdG5UZXh0Q29sb3I6ICM1NTU7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV5paH5a2X6aGP6ImyXG4kY2hvaWNlQnRuTGluZUNvbG9yOiAkZm9ybUxpbmVDb2xvcjsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgormoYbpoY/oibJcbiRjaG9pY2VCdG5MaW5lV2lkdGg6IDFweDsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgormoYbnspfntLBcbiRjaG9pY2VCdG5CZFJzOiA1cHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV5ZyT6KeSXG4kY2hvaWNlQnRuQ2hlY2tDb2xvcjogIzFlOTgxMzsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgbjmk4flvozpoY/oibJcbiRjaG9pY2VCdG5DaGVja1RleHRDb2xvcjogI2ZmZjsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgbjmk4flvozmloflrZfpoY/oibJcbiRjaG9pY2VCdG5DaGVja0xpbmVDb2xvcjogIzFlOTgxMzsgLy9DaGVja2JveCByYWRpbyDku7/mjInpiJXpgbjmk4flvozpgormoYbpoY/oibJcbiRzZWxlY3RBcnJvd1dpZHRoOiAxNnB4OyAvL3NlbGVjdCDkuInop5LlvaLlr6zluqZcbiRzZWxlY3RBcnJvd0hlaWdodDogMTBweDsgLy9zZWxlY3Qg5LiJ6KeS5b2i6auY5bqmXG4kc2VsZWN0QXJyb3dDb2xvcjogIzU1NTsgLy9zZWxlY3Qg5LiJ6KeS5b2i6aGP6ImyXG4kcmVxdWlyZWRDb2xvcjogI2MwMDAwMDsgLy/lv4XloavpoY/oibJcbiR0aXBzQ29sb3I6ICM5OTk7IC8v5o+Q56S65paH5a2X6aGP6ImyXG4kdGlwc0ljb25TaXplOiAyMHB4OyAvL+aPkOekumljb24g5aSn5bCPXG4kdGlwc0ljb246ICdcXGU5MDAnOyAvL+aPkOekumljb25cbiR2YWxpZEljb246ICdcXGU5MDAnOyAvL2ZlZWRiYWNrIOaPkOekuiBpY29uXG4kZXJyb3JDb2xvcjogI2MwMDAwMDsgLy9mZWVkYmFjayDpjK/oqqTmj5DnpLrpoY/oibJcbiRlcnJvckljb246ICdcXGU5MDYnOyAvL2ZlZWRiYWNrIOmMr+iqpOaPkOekumljb25cbiRzdWNjZXNzQ29sb3I6ICMxZTk4MTM7IC8vZmVlZGJhY2sg5oiQ5Yqf5o+Q56S66aGP6ImyXG4kc3VjY2Vzc0ljb246ICdcXGU5MDEnOyAvL2ZlZWRiYWNrIOaIkOmAmuaPkOekumljb25cbiR0ZXh0YXJlYUhlaWdodDogMTUwcHg7IC8vdGV4dGFyZWEg6auY5bqmXG4kcmVzZXRDb2xvcjogIzFlOTgxMzsgLy/oqo3orYnnorxyZXNldOmhj+iJslxuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v5oyJ6YiVIGJ1dHRvblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kYnRuV2lkdGg6IDEyMHB4OyAvL+Wumue+qeaMiemIleWvrOW6plxuJGJ0bkhlaWdodDogNDBweDsgLy/lrprnvqnmjInpiJXpq5jluqZcbiRidG5MaW5lV2lkdGg6IDA7IC8v5a6a576p5oyJ6YiV5qGG57ea57KX57SwXG4kYnRuSWNvblNpemU6IDIwcHg7IC8v5a6a576p5oyJ6YiVaWNvbiDlpKflsI9cbiRidG5TbVdpZHRoOiAxMDBweDsgLy/lrprnvqnlsI/mjInpiJXlr6zluqZcbiRidG5TbUhlaWdodDogNDBweDsgLy/lrprnvqnlsI/mjInpiJXpq5jluqZcbiRidG5TbUljb25TaXplOiAyMHB4OyAvL+Wumue+qeWwj+aMiemIlWljb27lpKflsI9cbiRidG5EZWZhdWx0Q29sb3I6ICRncmF5LTIwMDsgLy/ljp/lp4vmjInpiJXpoY/oibJcbiRidG5EZWZhdWx0TGluZUNvbG9yOiAjZTNlM2UzOyAvL+WOn+Wni+aMiemIleahhue3mumhj+iJslxuJGJ0bkRlZmF1bHRUZXh0Q29sb3I6ICR0ZXh0Q29sb3I7IC8v5Y6f5aeL5oyJ6YiV5paH5a2X6aGP6ImyXG4kYnRuRGVmYXVsdEhvdmVyQ29sb3I6ICRtYWluLWNvbG9yOyAvL+WOn+Wni+aMiemIlea7keWFpemhj+iJslxuJGJ0bkRlZmF1bHRIb3ZlckxpbmVDb2xvcjogJG1haW4tY29sb3I7IC8v5Y6f5aeL5oyJ6YiV5ruR5YWl5qGG57ea6aGP6ImyXG4kYnRuRGVmYXVsdEhvdmVyVGV4dENvbG9yOiAkd2hpdGU7IC8v5Y6f5aeL5oyJ6YiV5ruR5YWl5paH5a2X6aGP6ImyXG4vL+aMiemIleWQjeeoseaWsOWinumgheebriAo5ZCN56ixIOiDjOaZr+mhj+iJsiDlpJbmoYbpoY/oibIg5paH5a2X6aGP6ImyKVxuJGJ0bkNvbmZpZzogKHN1Ym1pdCAjZDYwZDBkICNkNjBkMGQgJHdoaXRlLCBtYWluICRtYWluLWNvbG9yICRtYWluLWNvbG9yICR3aGl0ZSwgc3VjY2VzcyByZ2JhKDAsMCwwLDApICRncmVlbiAkYmxhY2spO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8vIOmggeeivCBwYWdpbmF0aW9uXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRwYWdlQmc6ICRncmF5LTIwMDsgLy/mjInpiJXog4zmma/oibJcbiRwYWdlSG92ZXJCZzogJG1haW4tY29sb3I7IC8v5ruR6byg56e76Iez5oyJ6YiV6IOM5pmv6ImyXG4kcGFnZUFjdGl2ZUJnOiBkYXJrZW4oJG1haW4tY29sb3IsMC4yKTsvL+a7kem8oOaMieS4i+eahOaoo+W8j1xuJHBhZ2VIb3ZlckNvbG9yOiAkd2hpdGU7Ly/mu5HlhaXoiIfpgbjlj5bmloflrZfpoY/oibJcbiRwYWdlRGlzYWJsZWQ6ICRncmF5LTQwMDsgLy/npoHnlKjmloflrZfpoY/oibJcbiIsIi8vcmVt566X5byPXG5AZnVuY3Rpb24gdG9SZW0oJHNpemUpIHtcblx0JHJlbVNpemU6IHJvdW5kKCRzaXplIC8gJGZvbnRTaXplICogMTAwMCkgLyAxMDAwO1xuXHRAcmV0dXJuICRyZW1TaXplICogMXJlbTsgfVxuXG4vL+i3nembomxldmVsIOeul+W8j1xuLy9nYXAoMikgPT0+IDIqJGJhc2VHYXBcbkBmdW5jdGlvbiBnYXAoJGdhcExldmVsOiAxLCAkZ2FwSGVpZ2h0OiAkYmFzZUdhcCkge1xuICAgIEByZXR1cm4gJGdhcExldmVsICogJGdhcEhlaWdodDsgfVxuIiwiLy9UaGlzIGlzIHNhc3MgZmlsZVxuLy9iYWNrZ3JvdW5kIOioreWumlxuQG1peGluIGJnKCRpbWcsICRwb3MteDogMCwgJHBvcy15OiAwLCAkcmVwOiBuby1yZXBlYXQpIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vLi4vaW1hZ2VzLyN7JGltZ31cIik7XG5cdGJhY2tncm91bmQtcG9zaXRpb246ICRwb3MteCAkcG9zLXk7XG5cdGJhY2tncm91bmQtcmVwZWF0OiAkcmVwOyB9XG5cbi8vcndkIHBvaW50XG4vLytyd2QoMTkyMCwgbWF4KVxuQG1peGluIHJ3ZCgkcG9pbnQsICRtdzogJ21heCcpIHtcblx0QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoI3skbXd9LXdpZHRoOiAkcG9pbnQgKiAxcHgpIHtcblx0XHRAY29udGVudDsgfSB9XG5cbi8vK2ljb24oMzBweCwzMHB4LCdcXGYxMzgnLDI1cHgsICM5OTkpXG5AbWl4aW4gaWNvbigkd2lkdGg6IGF1dG8sICRoZWlnaHQ6IGF1dG8sICRpY29uX2NvbnRlbnQ6ICcnLCAkZm9udC1zaXplOiAxMDAlLCAkY29sb3I6aW5oZXJpdCkge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiAkaWNvbl9jb250ZW50O1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR3aWR0aDogJHdpZHRoO1xuXHRcdGhlaWdodDogJGhlaWdodDtcblx0XHRmb250LWZhbWlseTogJ2ljb21vb24nO1xuXHRcdGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcblx0XHRsaW5lLWhlaWdodDogJGhlaWdodDtcblx0XHRjb2xvcjogJGNvbG9yO1xuXHRcdEBjb250ZW50OyB9IH1cblxuLy/mloflrZfmoYbnt5pcbi8vK3N0cm9rZSgyLCNlZWUpXG5AbWl4aW4gc3Ryb2tlKCRzLXdpZHRoLCAkY29sb3IpIHtcblx0JHMtd2lkdGg6ICRzLXdpZHRoO1xuXHQkc2hhZG93OiAwIDAgMCB0cmFuc3BhcmVudDtcblx0JGk6IDA7XG5cdCR3OiAxO1xuXHRAd2hpbGUgKCRzLXdpZHRoID4gJGkpIHtcblx0XHQkaTogJGkgKyAxO1xuXHRcdCRqOiAwO1xuXHRcdCR3OiAkdyArIDI7XG5cdFx0QGZvciAkciBmcm9tIDEgdGhyb3VnaCAkdyB7XG5cdFx0XHRAZm9yICRjIGZyb20gMSB0aHJvdWdoICR3IHtcblx0XHRcdFx0JHg6ICRjIC0gY2VpbCgkdyAvIDIpO1xuXHRcdFx0XHQkeTogJHIgLSBjZWlsKCR3IC8gMik7XG5cdFx0XHRcdCRzaGFkb3c6ICN7JHNoYWRvd30sICN7JHh9cHggI3skeX1weCAwICRjb2xvcjsgfSB9IH1cblx0dGV4dC1zaGFkb3c6ICRzaGFkb3c7IH1cblxuLy9jYXNlIG1peGluXG4vLytpbm5lcigxOTIwLDMwKVxuLy8kaW5yLXcg5a+s5bqmXG4vL1JXRCAkaW5yLWdhcCDlt6blj7NwYWRkaW5n6ZaT6Led57i95ZKMXG5AbWl4aW4gaW5uZXIoJGluci13LCRpbnItZ2FwOiAwKSB7XG5cdG1heC13aWR0aDogJGluci13ICogMXB4O1xuXHRAaWYgJGluci1nYXAgIT0gMCB7XG5cdFx0QGluY2x1ZGUgcndkKCRpbnItdyArICRpbnItZ2FwKSB7XG5cdFx0XHRwYWRkaW5nOiAwICgkaW5yLWdhcCAvIDIgKiAxcHgpOyB9IH0gfVxuXG4vL+aWh+Wtl+maseiXjyBlbGxpcHNpcyjooYzpq5gpXG5AbWl4aW4gZWxsaXBzaXMoJGVsc19oZWlnaHQ6IDEpIHtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0QGlmKCRlbHNfaGVpZ2h0IDw9IDEpIHtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdEBjb250ZW50OyB9XG5cdEBlbHNlIGlmKCRlbHNfaGVpZ2h0ID4gMSkge1xuXHRcdGRpc3BsYXk6IC13ZWJraXQtYm94O1xuXHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdC13ZWJraXQtbGluZS1jbGFtcDogJGVsc19oZWlnaHQ7XG5cdFx0LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcblx0XHRAY29udGVudDsgfSB9XG5cblxuLy/mloflrZfovYnmj5sgcmVtXG5AbWl4aW4gZm9udC1zaXplKCRpblNpemUsJGluTGluZUhlaWdodDogMXB4KSB7XG5cdGZvbnQtc2l6ZTogJGluU2l6ZTtcblx0JG5ld0xpbmVIZWlnaHQ6IGNlaWwoJGluU2l6ZSAqICRsaW5lSGVpZ2h0TGV2ZWwpO1xuXHRmb250LXNpemU6IHRvUmVtKCRpblNpemUpO1xuXHRAaWYoJG5ld0xpbmVIZWlnaHQgPT0gMXB4IG9yICRpbkxpbmVIZWlnaHQgPCAkaW5TaXplKSB7XG5cdFx0bGluZS1oZWlnaHQ6IHRvUmVtKCRuZXdMaW5lSGVpZ2h0KTsgfVxuXHRAZWxzZSB7XG5cdFx0bGluZS1oZWlnaHQ6IHRvUmVtKCRpbkxpbmVIZWlnaHQpOyB9IH1cblxuLy/mloflrZflgI3njodcbkBtaXhpbiBmb250LWxldmVsKCRmTGV2ZWwpIHtcblx0QGlmKCRmTGV2ZWwgPCAwKSB7XG5cdFx0JGZMZXZlbDogMDsgfVxuXHQkbmV3Zm9udDogJGZvbnRTaXplICogKDEgKyAkZkxldmVsICogJGZvbnRTaXplTGV2ZWwpO1xuXHQkZkxldmVsTGluZUhlaWdodDogY2VpbCgkbmV3Zm9udCAqICRsaW5lSGVpZ2h0TGV2ZWwpO1xuXHRmb250LXNpemU6ICRuZXdmb250O1xuXHRmb250LXNpemU6IHRvUmVtKCRuZXdmb250KTtcblx0bGluZS1oZWlnaHQ6IHRvUmVtKCRmTGV2ZWxMaW5lSGVpZ2h0KTsgfVxuXG5cbi8vIHRyaWFuZ2xlIOS4ieinkuW9oiBtaXhpblxuLy8rdHJpYW5nbGUoMTBweCAxMnB4LCAjYWUwMDAwLHVwKVxuQG1peGluIHRyaWFuZ2xlICgkc2l6ZSwgJGNvbG9yLCAkZGlyZWN0aW9uKSB7XG5cdGhlaWdodDogMDtcblx0d2lkdGg6IDA7XG5cdCR3aWR0aDogbnRoKCRzaXplLCAxKTtcblx0JGhlaWdodDogbnRoKCRzaXplLCBsZW5ndGgoJHNpemUpKTtcblx0JGZvcmVncm91bmQtY29sb3I6IG50aCgkY29sb3IsIDEpO1xuXHQkYmFja2dyb3VuZC1jb2xvcjogaWYobGVuZ3RoKCRjb2xvcikgPT0gMiwgbnRoKCRjb2xvciwgMiksIHRyYW5zcGFyZW50KTtcblx0QGlmICgkZGlyZWN0aW9uID09IHVwKSBvciAoJGRpcmVjdGlvbiA9PSBkb3duKSBvciAoJGRpcmVjdGlvbiA9PSByaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gbGVmdCkge1xuXHRcdCR3aWR0aDogJHdpZHRoIC8gMjtcblx0XHQkaGVpZ2h0OiBpZihsZW5ndGgoJHNpemUpID4gMSwgJGhlaWdodCwgJGhlaWdodC8yKTtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSB1cCB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IHJpZ2h0IHtcblx0XHRcdGJvcmRlci1ib3R0b206ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1sZWZ0OiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBkb3duIHtcblx0XHRcdGJvcmRlci1sZWZ0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci10b3A6ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7IH1cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IGxlZnQge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gdXAtcmlnaHQpIG9yICgkZGlyZWN0aW9uID09IHVwLWxlZnQpIHtcblx0XHRib3JkZXItdG9wOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdEBpZiAkZGlyZWN0aW9uID09IHVwLXJpZ2h0IHtcblx0XHRcdGJvcmRlci1sZWZ0OiAgJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSB1cC1sZWZ0IHtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gZG93bi1yaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gZG93bi1sZWZ0KSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSBkb3duLXJpZ2h0IHtcblx0XHRcdGJvcmRlci1sZWZ0OiAgJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBkb3duLWxlZnQge1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH0gfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC11cCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICRoZWlnaHQgJHdpZHRoOyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LWRvd24pIHtcblx0XHRib3JkZXItY29sb3I6ICRmb3JlZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkaGVpZ2h0ICR3aWR0aDsgfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC1yaWdodCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICR3aWR0aCAkaGVpZ2h0OyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LWxlZnQpIHtcblx0XHRib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yICRmb3JlZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkd2lkdGggJGhlaWdodDsgfSB9XG5cbi8v572u5LitICd2JyDlnoLnm7Tnva7kuK0gJ2gnIOawtOW5s+e9ruS4rSAnYicg5Z6C55u05rC05bmz572u5LitXG5AbWl4aW4gY2VudGVyKCRwb3NpdGlvbikge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdEBpZiAkcG9zaXRpb24gPT0gJ3YnIHtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IH1cblx0QGVsc2UgaWYgJHBvc2l0aW9uID09ICdoJyB7XG5cdFx0bGVmdDogNTAlO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpOyB9XG5cdEBlbHNlIGlmICRwb3NpdGlvbiA9PSAnYicge1xuXHRcdHRvcDogNTAlO1xuXHRcdGxlZnQ6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgfSB9XG5cbi8vUldEIOe2suagvOiuiuaPm1xuLy8kY29vQ29sIOe2suagvOaVuFxuLy8kY29vQ29scyDntrLmoLzkvZTmoLzmlbhcbi8vJGNvb0d1dHRlciDplpPot50gcHggZW0gJVxuLy/kvb/nlKjmlrnlvI8gK2Nvbyg2LDIsMTBweClcbkBtaXhpbiBjb28oJGNvb0NvbCwkY29vQ29sczogMSwkY29vR3V0dGVyOiAwKSB7XG5cdHdpZHRoOiBzcGFuKCRjb29Db2xzIG5hcnJvdyBvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSk7XG5cdEBpZiAkY29vR3V0dGVyICE9IDAge1xuXHRcdG1hcmdpbi1sZWZ0OiBndXR0ZXIob2YgJGNvb0NvbCBzZXQtZ3V0dGVycyAkY29vR3V0dGVyIHdpZGUpIC8gMjtcblx0XHRtYXJnaW4tcmlnaHQ6IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSkgLyAyO1xuXHRcdG1hcmdpbi1ib3R0b206IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSk7IH0gfVxuIiwiLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+aMiemIlSBCdXR0b25cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJUJ0biB7XG5cdHdpZHRoOiAkYnRuV2lkdGg7XG5cdGhlaWdodDogJGJ0bkhlaWdodDtcblx0bWFyZ2luOiA1cHg7XG5cdHBhZGRpbmc6IDAgZ2FwKDIpO1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG5cdHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItd2lkdGg6ICRidG5MaW5lV2lkdGg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0dHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlLW91dDtcblx0Jjpmb2N1cyxcblx0JjphY3RpdmU6Zm9jdXMge1xuXHRcdG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXHQmOmFjdGl2ZSB7XG5cdFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcblx0XHRvdXRsaW5lOiAwOyB9IH1cbi8v5riF6ZmkXG4lY2xlYXIge1xuXHQmOmFmdGVyIHtcblx0XHRjb250ZW50OiBcIlwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHRcdGNsZWFyOiBib3RoOyB9IH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBSUEsQWlCK0JDLEtqQi9CSSxBaUIrQkgsTUFBTSxDQUFDO0NBQ1AsT0FBTyxFQUFFLEVBQUU7Q0FDWCxPQUFPLEVBQUUsS0FBSztDQUNkLEtBQUssRUFBRSxJQUFJO0NBQUc7O0FqQm5DaEIsWUFBWTtBQUlWLEFBQUQsYUFBUyxDQUFDO0NBQ1QsT0FBTyxFZUFHLElBQXNCO0NmQ2hDLFdBQVcsRUFBRSxJQUFJO0NnQitEbEIsU0FBUyxFaEI5RFcsSUFBSTtDZ0JnRXhCLFNBQVMsRUR2RUQsTUFBZTtDQzJFdEIsV0FBVyxFRDNFSixNQUFlO0NmYU07O0FBTDNCLEFBQUQsbUJBQU8sQ0FBQztDQUNQLE9BQU8sRUFBRSxJQUFJ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 */
