.logo {
	width: 230px;
	height: 80px;
	-webkit-box-ordinal-group: 2;
	    -ms-flex-order: 1;
	        order: 1;
}

.nav__box {
	width: calc(100% - 280px);
	-webkit-box-ordinal-group: 3;
	    -ms-flex-order: 2;
	        order: 2;
}

.nav {
	-webkit-box-pack: end;
	    -ms-flex-pack: end;
	        justify-content: flex-end;
}

.nav__name {
	-webkit-box-pack: end;
	    -ms-flex-pack: end;
	        justify-content: flex-end;
}

.nav__layer {
	max-height: calc(100vh - 80px);
	top: 80px;
}

.header__search {
	-webkit-box-ordinal-group: 5;
	    -ms-flex-order: 4;
	        order: 4;
}

.header__search-form {
	top: 80px;
}

.header__social-box {
	-webkit-box-ordinal-group: 4;
	    -ms-flex-order: 3;
	        order: 3;
}

.hamburger {
	-webkit-box-ordinal-group: 6;
	    -ms-flex-order: 5;
	        order: 5;
}

.header--fixed .logo {
	height: 80px;
}

.header--fixed .nav__layer {
	max-height: calc(100vh - 80px);
	top: 80px;
}

.header--fixed .header__search-form {
	top: 80px;
}

.header {
	width: 100%;
	background-color: #fff;
	position: fixed;
	top: 0;
	left: 0;
	z-index: 2;
	-webkit-transition: all .3s ease-out 0.5s;
	transition: all .3s ease-out 0.5s;
}

.logo {
	-ms-flex-line-pack: center;
	    align-content: center;
}

.logo h1 {
	width: 100%;
	display: block;
	color: #008CA2;
	font-size: 0.125rem;
	position: fixed;
	top: -999999px;
}

.logo__img {
	height: 100%;
	padding: 10px 0;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	-webkit-box-pack: start;
	    -ms-flex-pack: start;
	        justify-content: flex-start;
}

.logo__img picture {
	width: 100%;
	display: block;
}

.logo__img img {
	width: 100%;
	display: block;
}

.header--fixed {
	position: fixed;
	top: 0;
	z-index: 10;
}

.nav__box {
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
}

.nav {
	width: 100%;
	height: 100%;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
}

.nav > .nav__item {
	height: 100%;
}

.nav__item {
	width: auto;
	max-width: 16.66667%;
	position: relative;
	font-size: 20px;
	font-size: 1.25rem;
	line-height: 1.875rem;
}

.nav__item::after {
	content: '';
	width: 0;
	height: 6px;
	background-image: -webkit-gradient(linear, right top, left top, from(#00578F), to(#008CA2));
	background-image: linear-gradient(to left, #00578F, #008CA2);
	position: absolute;
	top: 0;
	-webkit-transition: width .3s ease-out;
	transition: width .3s ease-out;
}

.nav__item:hover::after {
	content: '';
	width: 100%;
}

.nav__item--on::after {
	content: '';
	width: 100%;
}

.nav__item--on > .nav__layer {
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	background-image: -webkit-gradient(linear, right top, left top, from(#00578F), to(#008CA2));
	background-image: linear-gradient(to left, #00578F, #008CA2);
	padding: 60px calc(50% - 800px);
}

@media only screen and (max-width: 1600px) {
	.nav__item--on > .nav__layer {
		padding: 60px 30px;
	}
}

.nav__name {
	width: 100%;
	padding: 5px 20px;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
}

.nav__btn {
	width: 40px;
	height: 100%;
	border-style: solid;
	border-color: #dee2e6;
	border-width: 0 0 0 1px;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	cursor: pointer;
	display: none;
	position: absolute;
	right: 0;
	top: 0;
	z-index: 1;
}

.nav__btn-icon {
	width: 100%;
	height: 40px;
	display: block;
	position: relative;
}

.nav__btn-icon::after {
	content: '';
	width: 5px;
	height: 5px;
	margin: auto;
	border-style: solid;
	border-width: 2px 2px 0 0;
	border-color: #252525;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	-webkit-transform: rotate(45deg);
	    -ms-transform: rotate(45deg);
	        transform: rotate(45deg);
}

.nav__layer {
	width: 250px;
	display: none;
	position: absolute;
	left: 0;
	z-index: 3;
	border-style: solid;
	border-width: 1px 1px 0 1px;
	border-color: #dee2e6;
}

.nav__layer .nav__item {
	width: 100%;
	max-width: 100%;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-ms-flex-wrap: wrap;
	    flex-wrap: wrap;
	border-bottom: 1px solid #dee2e6;
	color: #252525;
}

.nav__layer .nav__item::after {
	display: none;
}

.nav__layer .nav__item .nav__layer {
	top: -1px;
	left: 100%;
}

.nav__layer .nav__item .nav__btn {
	border-bottom-width: 0;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
}

.nav__layer .nav__item .nav__name {
	padding: 0 0 0 0;
	-webkit-box-pack: start;
	    -ms-flex-pack: start;
	        justify-content: flex-start;
	position: relative;
	color: #252525;
}

.nav__layer .nav__item .nav__name:hover {
	background-color: #fff;
	color: #008CA2;
}

.nav__layer--full {
	width: 100%;
	overflow-y: auto;
	position: fixed;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	left: 0;
	border-width: 0;
}

.nav__layer--full > .nav__item {
	width: 20%;
	border-width: 0;
	-ms-flex-line-pack: start;
	    align-content: flex-start;
	-webkit-box-align: start;
	    -ms-flex-align: start;
	        align-items: flex-start;
}

.nav__layer--full > .nav__item > .nav__name {
	padding-right: 10px;
	color: #fff;
	position: relative;
	margin-bottom: 20px;
}

.nav__layer--full > .nav__item > .nav__name::before {
	content: '';
	width: 40px;
	height: 4px;
	background-color: #fff;
	position: absolute;
	bottom: -14px;
	left: 0;
}

.nav__layer--full > .nav__item .nav__btn {
	display: none;
}

.nav__layer--full > .nav__item .nav__layer {
	padding-top: 10px;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	position: initial;
	left: 0;
}

.nav__layer--full > .nav__item .nav__layer > .nav__item {
	border-width: 0;
}

.nav__layer--full > .nav__item .nav__layer > .nav__item .nav__name {
	color: #fff;
	padding: 6px 0 6px 14px;
	border-left-width: 0;
	font-size: 16px;
	font-size: 1rem;
	line-height: 1.5rem;
}

.nav__layer--full > .nav__item .nav__layer > .nav__item .nav__name:hover {
	color: #008CA2;
}

.nav__layer--full .nav__layer {
	width: 100%;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	position: initial;
	top: 0;
	left: 0;
	border-width: 0;
}

.nav__layer--full .nav__layer .nav__item {
	width: 100%;
}

.nav__prev {
	width: 40px;
	height: 50px;
	border-right: 1px solid #dee2e6;
	cursor: pointer;
	display: none;
	position: relative;
}

.nav__prev-icon {
	width: 40px;
	height: 40px;
	position: relative;
}

.nav__prev-icon::after {
	content: '';
	width: 5px;
	height: 5px;
	margin: auto;
	border-style: solid;
	border-width: 2px 2px 0 0;
	border-color: #252525;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	-webkit-transform: rotate(-135deg);
	    -ms-transform: rotate(-135deg);
	        transform: rotate(-135deg);
}

.hamburger {
	width: 50px;
	height: 100%;
	position: relative;
	cursor: pointer;
	display: none;
}

.hamburger span {
	width: 20px;
	height: 3px;
	margin: auto;
	border-radius: 9px;
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	background-color: #252525;
	-webkit-transition: all .5s ease-out;
	transition: all .5s ease-out;
}

.hamburger span:nth-child(2) {
	-webkit-transform: translateY(-6px);
	    -ms-transform: translateY(-6px);
	        transform: translateY(-6px);
}

.hamburger span:nth-child(3) {
	-webkit-transform: translateY(6px);
	    -ms-transform: translateY(6px);
	        transform: translateY(6px);
}

.header__search {
	width: 50px;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	position: relative;
}

.header__search::after {
	content: '';
	width: 0;
	height: 4px;
	background-color: #008CA2;
	position: absolute;
	left: 0;
	top: 0;
	-webkit-transition: width .3s ease-out;
	transition: width .3s ease-out;
}

.header__search:hover::after, .header__search:has(.header__search-icon .fa-xmark)::after {
	width: 100%;
}

.header__search-icon {
	width: 50px;
	height: 100%;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	cursor: pointer;
	font-size: 20px;
}

.header__search-form {
	width: 100%;
	padding: 50px 20px;
	background-image: -webkit-gradient(linear, right top, left top, from(#00578F), to(#008CA2));
	background-image: linear-gradient(to left, #00578F, #008CA2);
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	position: fixed;
	left: 100%;
	z-index: 2;
	-webkit-transition: left .3s ease-out;
	transition: left .3s ease-out;
}

.header__search-form--on {
	left: 0;
}

.header__search-input {
	width: 400px;
	max-width: calc(100% - 55px);
	height: 40px;
	padding: 0 10px;
	border-radius: 40px;
	-webkit-box-sizing: border-box;
	        box-sizing: border-box;
	border: 0 solid rgba(0, 0, 0, 0);
	-webkit-box-shadow: none;
	        box-shadow: none;
	line-height: 40px;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
}

.header__search-input::-webkit-input-placeholder {
	color: #888;
}

.header__search-input::-moz-placeholder {
	color: #888;
}

.header__search-input:-ms-input-placeholder {
	color: #888;
}

.header__search-input::-ms-input-placeholder {
	color: #888;
}

.header__search-input::placeholder {
	color: #888;
}

.header__search-input:focus::-webkit-input-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

.header__search-input:focus::-moz-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

.header__search-input:focus:-ms-input-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

.header__search-input:focus::-ms-input-placeholder {
	color: rgba(136, 136, 136, 0.5);
}

.header__search-input:focus::placeholder {
	color: rgba(136, 136, 136, 0.5);
}

.header__search-btn {
	width: 40px;
	height: 40px;
	margin-left: 10px;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	border-radius: 40px;
	cursor: pointer;
	border: none;
	background-color: #fff;
	font-size: 24px;
	-webkit-appearance: none;
	   -moz-appearance: none;
	        appearance: none;
}

.header__search-btn i {
	font-size: 20px;
}

.header__language {
	width: 100px;
	margin-left: 10px;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	-webkit-box-ordinal-group: 5;
	    -ms-flex-order: 4;
	        order: 4;
}

.header__language > div {
	width: 100%;
	border-radius: 999px;
	background-color: #e9ecef;
}

.header__language > div a {
	padding: 5px 10px;
	-webkit-box-flex: 1;
	    -ms-flex: 1;
	        flex: 1;
	font-size: 14px;
	font-size: 0.875rem;
	line-height: 1.313rem;
	display: block;
	text-align: center;
}

.header__language > div a:first-child {
	border-right: 1px solid #fff;
}

.header__language > div .active {
	color: #008CA2;
}

.header__social-box {
	width: 0px;
}

.header__social-btn {
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
	display: none;
	cursor: pointer;
}

.header__social-btn i {
	font-size: 18px;
}

.header__social {
	width: 100%;
	height: 100%;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
}

.header__social-item {
	width: 40px;
	display: inline-block;
	text-align: center;
}

.header__social-link {
	width: 40px;
	height: 40px;
	display: -webkit-box;
	display: -ms-flexbox;
	display: flex;
	-webkit-box-pack: center;
	    -ms-flex-pack: center;
	        justify-content: center;
	-webkit-box-align: center;
	    -ms-flex-align: center;
	        align-items: center;
}

.header__social-icon {
	font-size: 20px;
}

.header__social-facebook:hover {
	color: #1877F2;
}

.header__social-instagram:hover {
	color: #de2d75;
}

.header__social-twitter:hover {
	color: #1DA1F2;
}

.header__social-youtube:hover {
	color: #EE3123;
}

.header__social-LINE:hover {
	color: #00B900;
}

@media only screen and (max-width: 1200px) {
	.header--fixed .logo {
		height: 50px;
	}
	.header--fixed .header__search-form {
		top: 50px;
	}
	.logo {
		height: 50px;
		margin-right: auto;
	}
	.logo__img {
		padding: 5px 0;
	}
	.logo__img picture {
		height: 100%;
	}
	.logo__img img {
		width: auto;
		height: 100%;
	}
	.nav__box {
		width: 100%;
		height: 100%;
		padding-top: 50px;
		overflow-x: hidden;
		overflow-y: auto;
		-webkit-box-align: start;
		    -ms-flex-align: start;
		        align-items: flex-start;
		position: fixed;
		top: 0;
		right: -100%;
		z-index: 20;
		background-color: #fff;
		-webkit-transition: all .5s ease-out;
		transition: all .5s ease-out;
	}
	.nav__box--on {
		right: 0;
	}
	.nav {
		-webkit-box-align: start;
		    -ms-flex-align: start;
		        align-items: flex-start;
		-ms-flex-line-pack: start;
		    align-content: flex-start;
		border-top: 1px solid #dee2e6;
	}
	.nav > .nav__item {
		height: auto;
	}
	.nav > .nav__item::after {
		display: none;
	}
	.nav__item {
		width: 100%;
		height: auto;
		max-width: 100%;
		display: block;
		border-bottom: 1px solid #dee2e6;
	}
	.nav__item:has(> .nav__btn) .nav__name {
		padding: 10px 40px 10px 15px;
	}
	.nav__name {
		padding: 10px 15px;
		-webkit-box-pack: start;
		    -ms-flex-pack: start;
		        justify-content: flex-start;
	}
	.nav__btn {
		height: 100%;
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
	}
	.nav__btn .nav__btn-icon {
		-webkit-transform: rotate(90deg);
		    -ms-transform: rotate(90deg);
		        transform: rotate(90deg);
	}
	.nav__btn--on .nav__btn-icon {
		-webkit-transform: rotate(-90deg);
		    -ms-transform: rotate(-90deg);
		        transform: rotate(-90deg);
	}
	.nav__layer {
		width: 100%;
		max-height: 100%;
		left: 100%;
		top: 0;
		position: relative;
		background-color: #008CA2;
		border-width: 1px 0 0 0;
	}
	.nav__layer .nav__item .nav__name {
		padding: 10px 40px 10px 15px;
	}
	.nav__layer .nav__item .nav__layer {
		top: 0;
	}
	.nav__layer .nav__item:first-child {
		border-top: 1px solid #dee2e6;
	}
	.nav__layer .nav__item:last-child {
		border-bottom: 0;
	}
	.nav__layer--on {
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
	}
	.nav__layer--full > .nav__item {
		width: 100%;
		border-bottom: 1px solid #dee2e6;
	}
	.nav__layer--full > .nav__item .nav__name {
		padding: 10px 40px 10px 15px;
		color: #252525;
		border-left-width: 0;
	}
	.nav__layer--full > .nav__item .nav__btn {
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
	}
	.nav__layer--full > .nav__item .nav__layer {
		padding-top: 0;
		position: fixed;
		left: 100%;
	}
	.nav__layer--full > .nav__item .nav__layer--on {
		left: 0;
	}
	.nav__layer--full > .nav__item .nav__layer > .nav__item {
		border-bottom: 1px solid #dee2e6;
	}
	.nav__layer--full > .nav__item .nav__layer > .nav__item .nav__name {
		padding: 10px 15px;
		font-size: 20px;
		font-size: 1.25rem;
		line-height: 1.875rem;
		color: #252525;
	}
	.nav__box--turnover .nav__btn-icon {
		-webkit-transform: rotate(0);
		    -ms-transform: rotate(0);
		        transform: rotate(0);
	}
	.nav__box--turnover .nav__layer {
		height: 100%;
		overflow-y: auto;
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
		-webkit-box-pack: start;
		    -ms-flex-pack: start;
		        justify-content: flex-start;
		-webkit-box-align: start;
		    -ms-flex-align: start;
		        align-items: flex-start;
		-ms-flex-line-pack: start;
		    align-content: flex-start;
		background-color: #fff;
		border-width: 0;
		position: fixed;
		left: 100%;
		top: 0;
		z-index: 3;
		-webkit-transition: left .3s ease-out;
		transition: left .3s ease-out;
	}
	.nav__box--turnover .nav__layer .nav__item:nth-child(1) {
		border-top-width: 0;
	}
	.nav__box--turnover .nav__layer .nav__item:nth-child(2) {
		border-top: 1px solid #dee2e6;
	}
	.nav__box--turnover .nav__layer .nav__item:last-child {
		border-bottom: 1px solid #dee2e6;
	}
	.nav__box--turnover .nav__layer--on {
		left: 0 !important;
	}
	.nav__box--turnover .nav__prev {
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
		-webkit-box-pack: center;
		    -ms-flex-pack: center;
		        justify-content: center;
		-webkit-box-align: center;
		    -ms-flex-align: center;
		        align-items: center;
	}
	.header__search {
		-webkit-box-ordinal-group: 5;
		    -ms-flex-order: 4;
		        order: 4;
	}
	.header__language {
		-webkit-box-ordinal-group: 4;
		    -ms-flex-order: 3;
		        order: 3;
	}
	.hamburger {
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
	}
	.hamburger--on {
		height: 50px;
		position: fixed;
		top: 0;
		right: 20px;
		z-index: 999;
	}
	.hamburger--on span:nth-child(1) {
		opacity: 0;
		-webkit-transform: translateX(100%);
		    -ms-transform: translateX(100%);
		        transform: translateX(100%);
	}
	.hamburger--on span:nth-child(2) {
		-webkit-transform: translateY(0) rotate(45deg);
		    -ms-transform: translateY(0) rotate(45deg);
		        transform: translateY(0) rotate(45deg);
	}
	.hamburger--on span:nth-child(3) {
		-webkit-transform: translateY(0) rotate(-45deg);
		    -ms-transform: translateY(0) rotate(-45deg);
		        transform: translateY(0) rotate(-45deg);
	}
	.header__search-form {
		top: 50px;
	}
	.header__social-box {
		width: 40px;
	}
	.header__social-btn {
		height: 100%;
		display: -webkit-box;
		display: -ms-flexbox;
		display: flex;
	}
	.header__search-icon {
		font-size: 20px;
	}
	.header__social {
		width: 100%;
		height: auto;
		padding: 15px 10px;
		position: fixed;
		top: 50px;
		left: 100%;
		background-color: #fff;
		-webkit-transition: left .3s ease-out;
		transition: left .3s ease-out;
	}
	.header__social--on {
		left: 0;
	}
}

@media only screen and (max-width: 480px) {
	.header .wrapper {
		padding: 0 0 0 10px;
	}
	.header .header__language {
		margin-left: 0;
	}
	.header .logo {
		width: calc(100% - 200px);
	}
	.header .hamburger--on {
		right: 0;
	}
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50L2hlYWRlci5jc3MiLCJzb3VyY2VzIjpbImNvbXBvbmVudC9oZWFkZXIuc2FzcyIsInNldHRpbmcvX2RlZmF1bHQuc2FzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3MvX3N1c3kuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3MvX3N1c3ktcHJlZml4LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL192ZXJzaW9uLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3V0aWxpdGllcy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19zdS12YWxpZGF0ZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19zdS1tYXRoLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX3NldHRpbmdzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvX25vcm1hbGl6ZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19wYXJzZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19zeW50YXgtaGVscGVycy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19hcGkuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fdW5wcmVmaXguc2NzcyIsInNldHRpbmcvX3ZhcmlhYmxlLnNhc3MiLCJzZXR0aW5nL19mdW5jdGlvbi5zYXNzIiwic2V0dGluZy9fbWl4aW4uc2FzcyIsInNldHRpbmcvX2V4dGVuZC5zYXNzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCIuLi9zZXR0aW5nL2RlZmF1bHRcIjtcblxuLy/ooajpoK3mqKHlvI9cbkBpZiAkaGVhZGVyTW9kZSA9PSAxIHtcblx0LmxvZ28ge1xuXHRcdHdpZHRoOiAkbG9nb1dpZHRoO1xuXHRcdGhlaWdodDogbWFwLWdldCgkbG9nb0hlaWdodCwgXCJtb2RlMVwiKTtcblx0XHRvcmRlcjogbWFwLWdldCgkaGVhZGVyT3JkZXIsIFwibG9nb1wiKTsgfVxuXHQubmF2X19ib3gge1xuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAjeyRsb2dvV2lkdGggKyA1MHB4fSk7XG5cdFx0b3JkZXI6IG1hcC1nZXQoJGhlYWRlck9yZGVyLCBcIm5hdlwiKTsgfVxuXHQubmF2IHtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6ICRuYXZBbGlnbjsgfVxuXHQubmF2X19uYW1lIHtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOyB9XG5cdC5uYXZfX2xheWVyIHtcblx0XHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gI3ttYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUxXCIpfSk7XG5cdFx0dG9wOiBtYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUxXCIpOyB9XG5cdC5oZWFkZXJfX3NlYXJjaCB7XG5cdFx0b3JkZXI6IG1hcC1nZXQoJGhlYWRlck9yZGVyLCBcInNlYXJjaFwiKTsgfVxuXHQuaGVhZGVyX19zZWFyY2gtZm9ybSB7XG5cdFx0dG9wOiBtYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUxXCIpOyB9XG5cdC5oZWFkZXJfX3NvY2lhbC1ib3gge1xuXHRcdG9yZGVyOiBtYXAtZ2V0KCRoZWFkZXJPcmRlciwgXCJzb2NpYWxcIik7IH1cblx0LmhhbWJ1cmdlciB7XG5cdFx0b3JkZXI6IG1hcC1nZXQoJGhlYWRlck9yZGVyLCBcImhhbWJ1cmdlclwiKTsgfVxuXHQuaGVhZGVyLS1maXhlZCB7XG5cdFx0LmxvZ28ge1xuXHRcdFx0aGVpZ2h0OiBtYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUxRml4ZWRcIik7IH1cblx0XHQubmF2X19sYXllciB7XG5cdFx0XHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gI3ttYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUxRml4ZWRcIil9KTtcblx0XHRcdHRvcDogbWFwLWdldCgkbG9nb0hlaWdodCwgXCJtb2RlMUZpeGVkXCIpOyB9XG5cdFx0LmhlYWRlcl9fc2VhcmNoLWZvcm0ge1xuXHRcdFx0dG9wOiBtYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUxRml4ZWRcIik7IH0gfSB9XG5cbkBpZiAkaGVhZGVyTW9kZSA9PSAyIHtcblx0LmxvZ28ge1xuXHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAje21hcC1nZXQoJHZpZXcsIFwic2VhcmNoXCIpICogNTBweCArIG1hcC1nZXQoJHZpZXcsIFwic29jaWFsSXRlbVwiKSAqIDQwcHh9KTtcblx0XHRoZWlnaHQ6IG1hcC1nZXQoJGxvZ29IZWlnaHQsIFwibW9kZTJcIik7XG5cdFx0b3JkZXI6IG1hcC1nZXQoJGhlYWRlck9yZGVyLCBcImxvZ29cIik7IH1cblx0Lm5hdl9fYm94IHtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRoZWlnaHQ6ICRuYXZIZWlnaHQ7XG5cdFx0b3JkZXI6IG1hcC1nZXQoJGhlYWRlck9yZGVyLCBcIm5hdlwiKTsgfVxuXHQubmF2IHtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6ICRuYXZBbGlnbjsgfVxuXHQubmF2X19uYW1lIHtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuXHQubmF2X19sYXllciB7XG5cdFx0bWF4LWhlaWdodDogY2FsYygxMDB2aCAtICN7bWFwLWdldCgkbG9nb0hlaWdodCwgXCJtb2RlMlwiKSArICRuYXZIZWlnaHR9KTtcblx0XHR0b3A6ICRuYXZIZWlnaHQ7IH1cblx0LmhlYWRlcl9fc2VhcmNoIHtcblx0XHRvcmRlcjogbWFwLWdldCgkaGVhZGVyT3JkZXIsIFwic2VhcmNoXCIpOyB9XG5cdC5oZWFkZXJfX3NlYXJjaC1mb3JtIHtcblx0XHR0b3A6IG1hcC1nZXQoJGxvZ29IZWlnaHQsIFwibW9kZTJcIikgKyAkbmF2SGVpZ2h0OyB9XG5cdC5oZWFkZXJfX3NvY2lhbC1ib3gge1xuXHRcdG9yZGVyOiBtYXAtZ2V0KCRoZWFkZXJPcmRlciwgXCJzb2NpYWxcIik7IH1cblx0LmhhbWJ1cmdlciB7XG5cdFx0b3JkZXI6IG1hcC1nZXQoJGhlYWRlck9yZGVyLCBcImhhbWJ1cmdlclwiKTsgfVxuXHQuaGVhZGVyLS1maXhlZCB7XG5cdFx0LmxvZ28ge1xuXHRcdFx0aGVpZ2h0OiBtYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUyRml4ZWRcIik7IH1cblx0XHQubmF2X19sYXllciB7XG5cdFx0XHRtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gI3ttYXAtZ2V0KCRsb2dvSGVpZ2h0LCBcIm1vZGUyRml4ZWRcIikgKyAkbmF2SGVpZ2h0fSk7XG5cdFx0XHR0b3A6ICRuYXZIZWlnaHQ7IH1cblx0XHQuaGVhZGVyX19zZWFyY2gtZm9ybSB7XG5cdFx0XHR0b3A6IG1hcC1nZXQoJGxvZ29IZWlnaHQsIFwibW9kZTJGaXhlZFwiKSArICRuYXZIZWlnaHQ7IH0gfVxuXHRAaW5jbHVkZSByd2QoJGhlYWRlclJXRCkge1xuXHRcdC5oZWFkZXIge1xuXHRcdFx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cdFx0XHQ+ZGl2IHtcblx0XHRcdFx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7IH0gfSB9IH1cbi8vaGVhZGVyXG4uaGVhZGVyIHtcblx0d2lkdGg6IDEwMCU7XG5cdGJhY2tncm91bmQtY29sb3I6ICR3aGl0ZTtcblx0cG9zaXRpb246IGZpeGVkO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdHotaW5kZXg6IDI7XG5cdHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZS1vdXQgMC41czsgfVxuLmxvZ28ge1xuXHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XG5cdGgxIHtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRjb2xvcjogJG1haW4tY29sb3I7XG5cdFx0Zm9udC1zaXplOiAwLjEyNXJlbTtcblx0XHRwb3NpdGlvbjogZml4ZWQ7XG5cdFx0dG9wOiAtOTk5OTk5cHg7IH0gfVxuLmxvZ29fX2ltZyB7XG5cdGhlaWdodDogMTAwJTtcblx0cGFkZGluZzogZ2FwKDEpIDA7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogJGxvZ29BbGlnbjtcblx0cGljdHVyZSB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0ZGlzcGxheTogYmxvY2s7IH1cblx0aW1nIHtcblx0XHR3aWR0aDogMTAwJTtcblx0XHRkaXNwbGF5OiBibG9jazsgfSB9XG4uaGVhZGVyLS1maXhlZCB7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0dG9wOiAwO1xuXHR6LWluZGV4OiAxMDsgfVxuLy9oZWFkZXIg5Li76YG45ZauXG4ubmF2X19ib3gge1xuXHRhbGlnbi1pdGVtczogY2VudGVyOyB9XG4ubmF2IHtcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0PiAubmF2X19pdGVtIHtcblx0XHRcdGhlaWdodDogMTAwJTsgfSB9XG4ubmF2X19pdGVtIHtcblx0d2lkdGg6IGF1dG87XG5cdG1heC13aWR0aDogMTAwIC8gJG5hdkl0ZW0gKiAxJTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRAaW5jbHVkZSBmb250LXNpemUoJG5hdkZvbnQsKCRuYXZGb250KzEwcHgpKTtcblx0Jjo6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6ICcnO1xuXHRcdHdpZHRoOiAwO1xuXHRcdGhlaWdodDogNnB4O1xuXHRcdGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCMwMDU3OEYsIzAwOENBMik7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHR0cmFuc2l0aW9uOiB3aWR0aCAuM3MgZWFzZS1vdXQ7IH1cblx0Jjpob3ZlciB7XG5cdFx0Jjo6YWZ0ZXIge1xuXHRcdFx0Y29udGVudDogJyc7XG5cdFx0XHR3aWR0aDogMTAwJTsgfSB9IH1cbi5uYXZfX2l0ZW0tLW9uIHtcblx0Jjo6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6ICcnO1xuXHRcdHdpZHRoOiAxMDAlOyB9XG5cdD4ubmF2X19sYXllciB7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwjMDA1NzhGLCMwMDhDQTIpO1xuXHRcdHBhZGRpbmc6IGdhcCg2KSBjYWxjKDUwJSAtIDgwMHB4KTsgfVxuXHRAaW5jbHVkZSByd2QoMTYwMCkge1xuXHRcdD4ubmF2X19sYXllciB7XG5cdFx0XHRwYWRkaW5nOiBnYXAoNikgZ2FwKDMpOyB9IH0gfVxuLm5hdl9fbmFtZSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRwYWRkaW5nOiBnYXAoMC41KSBnYXAoMik7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbi5uYXZfX2J0biB7XG5cdHdpZHRoOiA0MHB4O1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGJhY2tncm91bmQtY29sb3I6IHt9XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci1jb2xvcjogJG5hdkJvcmRlckNvbG9yO1xuXHRib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0ZGlzcGxheTogbm9uZTtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRyaWdodDogMDtcblx0dG9wOiAwO1xuXHR6LWluZGV4OiAxO1xuXHQmLWljb24ge1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogNDBweDtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0Jjo6YWZ0ZXIge1xuXHRcdFx0Y29udGVudDogJyc7XG5cdFx0XHR3aWR0aDogNXB4O1xuXHRcdFx0aGVpZ2h0OiA1cHg7XG5cdFx0XHRtYXJnaW46IGF1dG87XG5cdFx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRcdFx0Ym9yZGVyLXdpZHRoOiAycHggMnB4IDAgMDtcblx0XHRcdGJvcmRlci1jb2xvcjogJHRleHRDb2xvcjtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMDtcblx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRyaWdodDogMDtcblx0XHRcdGJvdHRvbTogMDtcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsgfSB9IH1cbi5uYXZfX2xheWVyIHtcblx0d2lkdGg6ICRuYXZMYXllcldpZHRoO1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdGxlZnQ6IDA7XG5cdHotaW5kZXg6IDM7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci13aWR0aDogMXB4IDFweCAwIDFweDtcblx0Ym9yZGVyLWNvbG9yOiAkbmF2Qm9yZGVyQ29sb3I7XG5cdC5uYXZfX2l0ZW0ge1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgJG5hdkJvcmRlckNvbG9yO1xuXHRcdGNvbG9yOiAkbmF2Q29sb3I7XG5cdFx0Jjo6YWZ0ZXIge1xuXHRcdFx0ZGlzcGxheTogbm9uZTsgfVxuXHRcdC5uYXZfX2xheWVyIHtcblx0XHRcdHRvcDogLTFweDtcblx0XHRcdGxlZnQ6IDEwMCU7IH1cblx0XHQubmF2X19idG4ge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbS13aWR0aDogMDtcblx0XHRcdGRpc3BsYXk6IGZsZXg7IH1cblx0XHQubmF2X19uYW1lIHtcblx0XHRcdHBhZGRpbmc6IDAgI3skbmF2QnRuV2lkdGh9IDAgMDtcblx0XHRcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdGNvbG9yOiAkbmF2Q29sb3I7XG5cdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJG5hdkhvdmVyYmdDb2xvcjtcblx0XHRcdFx0Y29sb3I6ICRuYXZIb3ZlckNvbG9yOyB9IH0gfSB9XG4ubmF2X19sYXllci0tZnVsbCB7XG5cdHdpZHRoOiAxMDAlO1xuXHRvdmVyZmxvdy15OiBhdXRvO1xuXHRwb3NpdGlvbjogZml4ZWQ7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRsZWZ0OiAwO1xuXHRib3JkZXItd2lkdGg6IDA7XG5cdD4gLm5hdl9faXRlbSB7XG5cdFx0d2lkdGg6IDIwJTtcblx0XHRib3JkZXItd2lkdGg6IDA7XG5cdFx0YWxpZ24tY29udGVudDogZmxleC1zdGFydDtcblx0XHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0XHQ+IC5uYXZfX25hbWUge1xuXHRcdFx0cGFkZGluZy1yaWdodDogZ2FwKDEpO1xuXHRcdFx0Y29sb3I6ICR3aGl0ZTtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdFx0XHQmOjpiZWZvcmUge1xuXHRcdFx0XHRjb250ZW50OiAnJztcblx0XHRcdFx0d2lkdGg6IDQwcHg7XG5cdFx0XHRcdGhlaWdodDogNHB4O1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGU7XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0Ym90dG9tOiAtMTRweDtcblx0XHRcdFx0bGVmdDogMDsgfSB9XG5cdFx0Lm5hdl9fYnRuIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7IH1cblx0XHQubmF2X19sYXllciB7XG5cdFx0XHRwYWRkaW5nLXRvcDogZ2FwKDEpO1xuXHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdHBvc2l0aW9uOiBpbml0aWFsO1xuXHRcdFx0bGVmdDogMDtcblx0XHRcdD4gLm5hdl9faXRlbSB7XG5cdFx0XHRcdFx0Ym9yZGVyLXdpZHRoOiAwO1xuXHRcdFx0XHRcdC5uYXZfX25hbWUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICR3aGl0ZTtcblx0XHRcdFx0XHRcdHBhZGRpbmc6IGdhcCgwLjYpIDAgZ2FwKDAuNikgZ2FwKDEuNCk7XG5cdFx0XHRcdFx0XHRib3JkZXItbGVmdC13aWR0aDogMDtcblx0XHRcdFx0XHRcdEBpbmNsdWRlIGZvbnQtc2l6ZSgxNnB4KTtcblx0XHRcdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdFx0XHRjb2xvcjogJG1haW4tY29sb3I7IH0gfSB9IH0gfVxuXHQubmF2X19sYXllciB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRwb3NpdGlvbjogaW5pdGlhbDtcblx0XHR0b3A6IDA7XG5cdFx0bGVmdDogMDtcblx0XHRib3JkZXItd2lkdGg6IDA7XG5cdFx0Lm5hdl9faXRlbSB7XG5cdFx0XHR3aWR0aDogMTAwJTsgfSB9IH1cbi5uYXZfX3ByZXYge1xuXHR3aWR0aDogNDBweDtcblx0aGVpZ2h0OiAkaGVhZGVyUGhvbmVIZWlnaHQ7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICRuYXZCb3JkZXJDb2xvcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRkaXNwbGF5OiBub25lO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdCYtaWNvbiB7XG5cdFx0d2lkdGg6IDQwcHg7XG5cdFx0aGVpZ2h0OiA0MHB4O1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHQmOjphZnRlciB7XG5cdFx0XHRjb250ZW50OiAnJztcblx0XHRcdHdpZHRoOiA1cHg7XG5cdFx0XHRoZWlnaHQ6IDVweDtcblx0XHRcdG1hcmdpbjogYXV0bztcblx0XHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0XHRib3JkZXItd2lkdGg6IDJweCAycHggMCAwO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAkdGV4dENvbG9yO1xuXHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAwO1xuXHRcdFx0bGVmdDogMDtcblx0XHRcdHJpZ2h0OiAwO1xuXHRcdFx0Ym90dG9tOiAwO1xuXHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoLTEzNWRlZyk7IH0gfSB9XG4uaGFtYnVyZ2VyIHtcblx0d2lkdGg6IDUwcHg7XG5cdGhlaWdodDogMTAwJTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGRpc3BsYXk6IG5vbmU7XG5cdHNwYW4ge1xuXHRcdHdpZHRoOiAyMHB4O1xuXHRcdGhlaWdodDogM3B4O1xuXHRcdG1hcmdpbjogYXV0bztcblx0XHRib3JkZXItcmFkaXVzOiA5cHg7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHJpZ2h0OiAwO1xuXHRcdGJvdHRvbTogMDtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkdGV4dENvbG9yO1xuXHRcdHRyYW5zaXRpb246IGFsbCAuNXMgZWFzZS1vdXQ7XG5cdFx0JjpudGgtY2hpbGQoMikge1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpOyB9XG5cdFx0JjpudGgtY2hpbGQoMykge1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDZweCk7IH0gfSB9XG5cbi8vaGVhZGVyIOaQnOWwi1xuLmhlYWRlcl9fc2VhcmNoIHtcblx0d2lkdGg6IDUwcHg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0Jjo6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6ICcnO1xuXHRcdHdpZHRoOiAwO1xuXHRcdGhlaWdodDogNHB4O1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRsZWZ0OiAwO1xuXHRcdHRvcDogMDtcblx0XHR0cmFuc2l0aW9uOiB3aWR0aCAuM3MgZWFzZS1vdXQ7IH1cblx0Jjpob3ZlciwmOmhhcyguaGVhZGVyX19zZWFyY2gtaWNvbiAuZmEteG1hcmspIHtcblx0XHQmOjphZnRlciB7XG5cdFx0XHR3aWR0aDogMTAwJTsgfSB9IH1cbi5oZWFkZXJfX3NlYXJjaC1pY29uIHtcblx0d2lkdGg6IDUwcHg7XG5cdGhlaWdodDogMTAwJTtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Zm9udC1zaXplOiAkc29jaWFsSGVpZ2h0OyB9XG4uaGVhZGVyX19zZWFyY2gtZm9ybSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRwYWRkaW5nOiBnYXAoNSkgZ2FwKDIpO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwjMDA1NzhGLCMwMDhDQTIpO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0cG9zaXRpb246IGZpeGVkO1xuXHRsZWZ0OiAxMDAlO1xuXHR6LWluZGV4OiAyO1xuXHR0cmFuc2l0aW9uOiBsZWZ0IC4zcyBlYXNlLW91dDtcblx0Ji0tb24ge1xuXHRcdGxlZnQ6IDA7IH0gfVxuLmhlYWRlcl9fc2VhcmNoLWlucHV0IHtcblx0d2lkdGg6IDQwMHB4O1xuXHRtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU1cHgpO1xuXHRoZWlnaHQ6IDQwcHg7XG5cdHBhZGRpbmc6IDAgMTBweDtcblx0Ym9yZGVyLXJhZGl1czogNDBweDtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0Ym9yZGVyOiAkZm9ybUxpbmVXaWR0aCBzb2xpZCByZ2JhKDAsMCwwLDApO1xuXHRib3gtc2hhZG93OiBub25lO1xuXHRsaW5lLWhlaWdodDogNDBweDtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0Jjo6cGxhY2Vob2xkZXIge1xuXHRcdGNvbG9yOiAkcGxhY2Vob2xkZXJDb2xvcjsgfVxuXHQmOmZvY3VzIHtcblx0XHQmOjpwbGFjZWhvbGRlciB7XG5cdFx0XHRjb2xvcjogcmdiYSgkcGxhY2Vob2xkZXJDb2xvciwuNSk7IH0gfSB9XG4uaGVhZGVyX19zZWFyY2gtYnRuIHtcblx0d2lkdGg6IDQwcHg7XG5cdGhlaWdodDogNDBweDtcblx0bWFyZ2luLWxlZnQ6IGdhcCgxKTtcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGJvcmRlci1yYWRpdXM6IDQwcHg7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0Ym9yZGVyOiBub25lO1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGU7XG5cdGZvbnQtc2l6ZTogMjRweDtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0aSB7XG5cdFx0Zm9udC1zaXplOiAyMHB4OyB9IH1cblxuLmhlYWRlcl9fbGFuZ3VhZ2Uge1xuXHR3aWR0aDogMTAwcHg7XG5cdG1hcmdpbi1sZWZ0OiBnYXAoMSk7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdG9yZGVyOiA0O1xuXHQ+IGRpdiB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0Ym9yZGVyLXJhZGl1czogOTk5cHg7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogJGdyYXktMjAwO1xuXHRcdGEge1xuXHRcdFx0cGFkZGluZzogZ2FwKDAuNSkgZ2FwKDEpO1xuXHRcdFx0ZmxleDogMTtcblx0XHRcdEBpbmNsdWRlIGZvbnQtc2l6ZSgxNHB4KTtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0JjpmaXJzdC1jaGlsZCB7XG5cdFx0XHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR3aGl0ZTsgfSB9XG5cdFx0LmFjdGl2ZSB7XG5cdFx0XHRjb2xvcjogJG1haW4tY29sb3I7IH0gfSB9XG4vL2hlYWRlciDnpL7nvqRcbi5oZWFkZXJfX3NvY2lhbC1ib3gge1xuXHR3aWR0aDogNDBweCAqIG1hcC1nZXQoJHZpZXcsIFwic29jaWFsSXRlbVwiKTsgfVxuLmhlYWRlcl9fc29jaWFsLWJ0biB7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRkaXNwbGF5OiBub25lO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGkge1xuXHRcdGZvbnQtc2l6ZTogMThweDsgfSB9XG4uaGVhZGVyX19zb2NpYWwge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjsgfVxuLmhlYWRlcl9fc29jaWFsLWl0ZW0ge1xuXHR3aWR0aDogNDBweDtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7IH1cbi5oZWFkZXJfX3NvY2lhbC1saW5rIHtcblx0d2lkdGg6IDQwcHg7XG5cdGhlaWdodDogNDBweDtcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cbi5oZWFkZXJfX3NvY2lhbC1pY29uIHtcblx0Zm9udC1zaXplOiAkc29jaWFsSGVpZ2h0OyB9XG4uaGVhZGVyX19zb2NpYWwtZmFjZWJvb2sge1xuXHQmOmhvdmVyIHtcblx0XHRjb2xvcjogIzE4NzdGMjsgfSB9XG4uaGVhZGVyX19zb2NpYWwtaW5zdGFncmFtIHtcblx0Jjpob3ZlciB7XG5cdFx0Y29sb3I6ICNkZTJkNzU7IH0gfVxuLmhlYWRlcl9fc29jaWFsLXR3aXR0ZXIge1xuXHQmOmhvdmVyIHtcblx0XHRjb2xvcjogIzFEQTFGMjsgfSB9XG4uaGVhZGVyX19zb2NpYWwteW91dHViZSB7XG5cdCY6aG92ZXIge1xuXHRcdGNvbG9yOiAjRUUzMTIzOyB9IH1cbi5oZWFkZXJfX3NvY2lhbC1MSU5FIHtcblx0Jjpob3ZlciB7XG5cdFx0Y29sb3I6ICMwMEI5MDA7IH0gfVxuXG5cbi8vUldEXG5AaW5jbHVkZSByd2QoJGhlYWRlclJXRCkge1xuXHQuaGVhZGVyLS1maXhlZCB7XG5cdFx0LmxvZ28ge1xuXHRcdFx0aGVpZ2h0OiAkaGVhZGVyUGhvbmVIZWlnaHQ7IH1cblx0XHQuaGVhZGVyX19zZWFyY2gtZm9ybSB7XG5cdFx0XHR0b3A6ICRoZWFkZXJQaG9uZUhlaWdodDsgfSB9XG5cdC5sb2dvIHtcblx0XHRoZWlnaHQ6ICRoZWFkZXJQaG9uZUhlaWdodDtcblx0XHRtYXJnaW4tcmlnaHQ6IGF1dG87IH1cblx0LmxvZ29fX2ltZyB7XG5cdFx0cGFkZGluZzogZ2FwKDAuNSkgMDtcblx0XHRwaWN0dXJlIHtcblx0XHRcdGhlaWdodDogMTAwJTsgfVxuXHRcdGltZyB7XG5cdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdGhlaWdodDogMTAwJTsgfSB9XG5cdC5uYXZfX2JveCB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdHBhZGRpbmctdG9wOiAkaGVhZGVyUGhvbmVIZWlnaHQ7XG5cdFx0b3ZlcmZsb3cteDogaGlkZGVuO1xuXHRcdG92ZXJmbG93LXk6IGF1dG87XG5cdFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG5cdFx0cG9zaXRpb246IGZpeGVkO1xuXHRcdHRvcDogMDtcblx0XHRyaWdodDogLTEwMCU7XG5cdFx0ei1pbmRleDogMjA7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogJG5hdmJnQ29sb3I7XG5cdFx0dHJhbnNpdGlvbjogYWxsIC41cyBlYXNlLW91dDsgfVxuXHQubmF2X19ib3gtLW9uIHtcblx0XHRyaWdodDogMDsgfVxuXHQubmF2IHtcblx0XHRhbGlnbi1pdGVtczogZmxleC1zdGFydDtcblx0XHRhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAkbmF2Qm9yZGVyQ29sb3I7XG5cdFx0PiAubmF2X19pdGVtIHtcblx0XHRcdGhlaWdodDogYXV0bztcblx0XHRcdCY6OmFmdGVyIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTsgfSB9IH1cblx0Lm5hdl9faXRlbSB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgJG5hdkJvcmRlckNvbG9yO1xuXHRcdCY6aGFzKD4gLm5hdl9fYnRuKSB7XG5cdFx0XHQubmF2X19uYW1lIHtcblx0XHRcdFx0cGFkZGluZzogZ2FwKDEpIGdhcCg0KSBnYXAoMSkgZ2FwKDEuNSk7IH0gfSB9XG5cdC5uYXZfX25hbWUge1xuXHRcdHBhZGRpbmc6IGdhcCgxKSBnYXAoMS41KTtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH1cblxuXHQubmF2X19idG4ge1xuXHRcdGhlaWdodDogMTAwJTtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdC5uYXZfX2J0bi1pY29uIHtcblx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuXHRcdCYtLW9uIHtcblx0XHRcdC5uYXZfX2J0bi1pY29uIHtcblx0XHRcdFx0dHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsgfSB9IH1cblx0Lm5hdl9fbGF5ZXIge1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdG1heC1oZWlnaHQ6IDEwMCU7XG5cdFx0bGVmdDogMTAwJTtcblx0XHR0b3A6IDA7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRzLW5hdmJnQ29sb3I7XG5cdFx0Ym9yZGVyLXdpZHRoOiAxcHggMCAwIDA7XG5cdFx0Lm5hdl9faXRlbSB7XG5cdFx0XHQubmF2X19uYW1lIHtcblx0XHRcdFx0cGFkZGluZzogZ2FwKDEpIGdhcCg0KSBnYXAoMSkgZ2FwKDEuNSk7IH1cblx0XHRcdC5uYXZfX2xheWVyIHtcblx0XHRcdFx0dG9wOiAwOyB9XG5cdFx0XHQmOmZpcnN0LWNoaWxkIHtcblx0XHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICRuYXZCb3JkZXJDb2xvcjsgfVxuXHRcdFx0JjpsYXN0LWNoaWxkIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDsgfSB9XG5cdFx0Ji0tb24ge1xuXHRcdFx0ZGlzcGxheTogZmxleDsgfSB9XG5cdC5uYXZfX2xheWVyLS1mdWxsIHtcblx0XHQ+IC5uYXZfX2l0ZW0ge1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgJGdyYXktMzAwO1xuXHRcdFx0Lm5hdl9fbmFtZSB7XG5cdFx0XHRcdHBhZGRpbmc6IGdhcCgxKSBnYXAoNCkgZ2FwKDEpIGdhcCgxLjUpO1xuXHRcdFx0XHRjb2xvcjogJHRleHRDb2xvcjtcblx0XHRcdFx0Ym9yZGVyLWxlZnQtd2lkdGg6IDA7IH1cblx0XHRcdC5uYXZfX2J0biB7XG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7IH1cblx0XHRcdC5uYXZfX2xheWVyIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDA7XG5cdFx0XHRcdHBvc2l0aW9uOiBmaXhlZDtcblx0XHRcdFx0bGVmdDogMTAwJTtcblx0XHRcdFx0Ji0tb24ge1xuXHRcdFx0XHRcdGxlZnQ6IDA7IH1cblx0XHRcdFx0PiAubmF2X19pdGVtIHtcblx0XHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgJGdyYXktMzAwO1xuXHRcdFx0XHRcdC5uYXZfX25hbWUge1xuXHRcdFx0XHRcdFx0cGFkZGluZzogZ2FwKDEpIGdhcCgxLjUpO1xuXHRcdFx0XHRcdFx0QGluY2x1ZGUgZm9udC1zaXplKDIwcHgpO1xuXHRcdFx0XHRcdFx0Y29sb3I6ICR0ZXh0Q29sb3I7IH0gfSB9IH0gfVxuXHQubmF2X19ib3gtLXR1cm5vdmVyIHtcblx0XHQubmF2X19idG4ge1xuXHRcdFx0XHQmLWljb24ge1xuXHRcdFx0XHRcdHRyYW5zZm9ybTogcm90YXRlKDApOyB9IH1cblx0XHQubmF2X19sYXllciB7XG5cdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRvdmVyZmxvdy15OiBhdXRvO1xuXHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblx0XHRcdGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuXHRcdFx0YWxpZ24tY29udGVudDogZmxleC1zdGFydDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRuYXZiZ0NvbG9yO1xuXHRcdFx0Ym9yZGVyLXdpZHRoOiAwO1xuXHRcdFx0cG9zaXRpb246IGZpeGVkO1xuXHRcdFx0bGVmdDogMTAwJTtcblx0XHRcdHRvcDogMDtcblx0XHRcdHotaW5kZXg6IDM7XG5cdFx0XHR0cmFuc2l0aW9uOiBsZWZ0IC4zcyBlYXNlLW91dDtcblx0XHRcdC5uYXZfX2l0ZW0ge1xuXHRcdFx0XHQmOm50aC1jaGlsZCgxKSB7XG5cdFx0XHRcdFx0Ym9yZGVyLXRvcC13aWR0aDogMDsgfVxuXHRcdFx0XHQmOm50aC1jaGlsZCgyKSB7XG5cdFx0XHRcdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICRuYXZCb3JkZXJDb2xvcjsgfVxuXHRcdFx0XHQmOmxhc3QtY2hpbGQge1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkbmF2Qm9yZGVyQ29sb3I7IH0gfVxuXHRcdFx0Ji0tb24ge1xuXHRcdFx0XHRsZWZ0OiAwICFpbXBvcnRhbnQ7IH0gfVxuXHRcdC5uYXZfX3ByZXYge1xuXHRcdFx0ZGlzcGxheTogZmxleDtcblx0XHRcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRcdFx0YWxpZ24taXRlbXM6IGNlbnRlcjsgfSB9XG5cdC5oZWFkZXJfX3NlYXJjaCB7XG5cdFx0b3JkZXI6IDQ7IH1cblx0LmhlYWRlcl9fbGFuZ3VhZ2Uge1xuXHRcdG9yZGVyOiAzOyB9XG5cdC5oYW1idXJnZXIge1xuXHRcdGRpc3BsYXk6IGZsZXg7IH1cblx0LmhhbWJ1cmdlci0tb24ge1xuXHRcdGhlaWdodDogJGhlYWRlclBob25lSGVpZ2h0O1xuXHRcdHBvc2l0aW9uOiBmaXhlZDtcblx0XHR0b3A6IDA7XG5cdFx0cmlnaHQ6IGdhcCgyKTtcblx0XHR6LWluZGV4OiA5OTk7XG5cdFx0c3BhbiB7XG5cdFx0XHQmOm50aC1jaGlsZCgxKSB7XG5cdFx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0XHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfVxuXHRcdFx0JjpudGgtY2hpbGQoMikge1xuXHRcdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgcm90YXRlKDQ1ZGVnKTsgfVxuXHRcdFx0JjpudGgtY2hpbGQoMykge1xuXHRcdFx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgcm90YXRlKC00NWRlZyk7IH0gfSB9XG5cdC5oZWFkZXJfX3NlYXJjaC1mb3JtIHtcblx0XHR0b3A6ICRoZWFkZXJQaG9uZUhlaWdodDsgfVxuXHQuaGVhZGVyX19zb2NpYWwtYm94IHtcblx0XHR3aWR0aDogNDBweDsgfVxuXHQuaGVhZGVyX19zb2NpYWwtYnRuIHtcblx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0ZGlzcGxheTogZmxleDsgfVxuXHQuaGVhZGVyX19zZWFyY2gtaWNvbiB7XG5cdFx0Zm9udC1zaXplOiAyMHB4OyB9XG5cdC5oZWFkZXJfX3NvY2lhbCB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdHBhZGRpbmc6IGdhcCgxLjUpIGdhcCgxKTtcblx0XHRwb3NpdGlvbjogZml4ZWQ7XG5cdFx0dG9wOiAkaGVhZGVyUGhvbmVIZWlnaHQ7XG5cdFx0bGVmdDogMTAwJTtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkd2hpdGU7XG5cdFx0dHJhbnNpdGlvbjogbGVmdCAuM3MgZWFzZS1vdXQ7XG5cdFx0Ji0tb24ge1xuXHRcdFx0bGVmdDogMDsgfSB9IH1cbkBpbmNsdWRlIHJ3ZCg0ODApIHtcblx0LmhlYWRlciB7XG5cdFx0LndyYXBwZXIge1xuXHRcdFx0cGFkZGluZzogMCAwIDAgZ2FwKDEpOyB9XG5cdFx0LmhlYWRlcl9fbGFuZ3VhZ2Uge1xuXHRcdFx0bWFyZ2luLWxlZnQ6IDA7IH1cblx0XHQubG9nbyB7XG5cdFx0XHR3aWR0aDogY2FsYygxMDAlIC0gMjAwcHgpOyB9XG5cdFx0LmhhbWJ1cmdlci0tb24ge1xuXHRcdFx0cmlnaHQ6IDA7IH0gfSB9XG4iLCIvL1RoaXMgaXMgc2FzcyBmaWxlXG5AaW1wb3J0ICdzdXN5JztcbkBpbXBvcnQgXCJ2YXJpYWJsZVwiO1xuQGltcG9ydCBcImZ1bmN0aW9uXCI7XG5AaW1wb3J0IFwibWl4aW5cIjtcbkBpbXBvcnQgXCJleHRlbmRcIjtcbiIsIi8vIFN1c3kgKFVuLVByZWZpeGVkKVxuLy8gPT09PT09PT09PT09PT09PT09XG5cbkBpbXBvcnQgJ3N1c3ktcHJlZml4JztcbkBpbXBvcnQgJ3N1c3kvdW5wcmVmaXgnO1xuIiwiLy8gU3VzeSAoUHJlZml4ZWQpXG4vLyA9PT09PT09PT09PT09PT1cblxuXG5AaW1wb3J0ICd2ZXJzaW9uJztcbkBpbXBvcnQgJ3N1c3kvdXRpbGl0aWVzJztcbkBpbXBvcnQgJ3N1c3kvc3UtdmFsaWRhdGUnO1xuQGltcG9ydCAnc3VzeS9zdS1tYXRoJztcbkBpbXBvcnQgJ3N1c3kvc2V0dGluZ3MnO1xuQGltcG9ydCAnc3VzeS9ub3JtYWxpemUnO1xuQGltcG9ydCAnc3VzeS9wYXJzZSc7XG5AaW1wb3J0ICdzdXN5L3N5bnRheC1oZWxwZXJzJztcbkBpbXBvcnQgJ3N1c3kvYXBpJztcbiIsIi8vIFJlbGVhc2UgTWFuYWdlbWVudCBpbiBTdXN5XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cbi8vIFN1c3kgVmVyc2lvbiBbdmFyaWFibGVdXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgU3VzeSBiZWluZyB1c2VkLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgbWFqb3IgdmVyc2lvbiBmb3IgYW55IEJSRUFLSU5HIGNoYW5nZXMuXG4vLy8gLSBXZSB3aWxsIHJlbGVhc2UgYSBtaW5vciB2ZXJzaW9uIGZvciBhbnkgc2lnbmlmaWNhbnQgTkVXIGZlYXR1cmVzLlxuLy8vIC0gV2Ugd2lsbCByZWxlYXNlIGEgcGF0Y2ggZm9yIGFueSBCVUdGSVggY2hhbmdlcy5cbi8vL1xuLy8vIEBncm91cCBfdmVyc2lvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vIEBzaW5jZSAzLjAuMVxuLy8vXG4vLy8gQHByb3Age2ludGVnZXJ9ICdtYWpvcicgLSB0aGUgbWFqb3IgcmVsZWFzZSBudW1iZXJcbi8vLyBAcHJvcCB7aW50ZWdlcn0gJ21pbm9yJyAtIHRoZSBtaW5vciByZWxlYXNlIG51bWJlclxuLy8vIEBwcm9wIHtpbnRlZ2VyfSAncGF0Y2gnIC0gdGhlIHBhdGNoIG51bWJlclxuJF9zdXN5LXZlcnNpb246IChcbiAgJ21ham9yJzogMyxcbiAgJ21pbm9yJzogMCxcbiAgJ3BhdGNoJzogNyxcbik7XG5cblxuLy8gU3VzeSBWZXJzaW9uIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLy8gUmV0dXJucyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFN1c3lcbi8vLyBhcyBhIHN0cmluZyBpbiB0aGUgY29tbW9uIGBtYWpvci5taW5vci5wYXRjaGAgZm9ybWF0IOKAk1xuLy8vIG9yIHJldHVybnMgb25lIHBhcnQgKG1ham9yIHwgbWlub3IgfCBwYXRjaCkgYXMgYSBudW1iZXJcbi8vLyBmb3IgdmVyc2lvbiBjb21wYXJpc29ucy5cbi8vLyBTaW5jZSB2ZXJzaW9uIG51bWJlcnMgYXJlbid0IGFjdHVhbCBkZWNpbWFscyxcbi8vLyB0aGVyZSBpcyBubyBzaW1wbGUgd2F5IHRvIHJldHVybiB0aGUgZnVsbCB2ZXJzaW9uXG4vLy8gYXMgYSBjb21wYXJhYmxlIG51bWJlciBpbiBTYXNzLlxuLy8vXG4vLy8gQGdyb3VwIF92ZXJzaW9uXG4vLy9cbi8vLyBAcGFyYW0geydtYWpvcicgfCAnbWlub3InIHwgJ3BhdGNoJ30gJHBhcnQgW251bGxdIC1cbi8vLyAgIFRoZSBwYXJ0IChtYWpvciB8IG1pbm9yIHwgcGF0Y2gpIHRvIHJldHVybiBhcyBhIG51bWJlci5cbi8vLyAgIEFueSBvdGhlciB2YWx1ZSB3aWxsIHJldHVybiB0aGUgZnVsbCB2ZXJzaW9uIGFzIGEgc3RyaW5nLlxuLy8vIEBleGFtcGxlIHNjc3MgLSBDdXJyZW50IFN1c3kgVmVyc2lvblxuLy8vICAgLyogRnVsbCBWZXJzaW9uOiAje3N1c3ktdmVyc2lvbigpfSAqL1xuLy8vICAgLyogTWFqb3IgUmVsZWFzZTogI3tzdXN5LXZlcnNpb24oJ21ham9yJyl9ICovXG5AZnVuY3Rpb24gc3VzeS12ZXJzaW9uKFxuICAkcGFydDogbnVsbFxuKSB7XG4gICRtYWpvcjogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ21ham9yJyk7XG4gICRtaW5vcjogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ21pbm9yJyk7XG4gICRwYXRjaDogbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJ3BhdGNoJyk7XG4gICRmdWxsOiAnI3skbWFqb3J9LiN7JG1pbm9yfS4jeyRwYXRjaH0nO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktdmVyc2lvbiwgJHBhcnQpIG9yICRmdWxsO1xufVxuIiwiLy8gU2FzcyBVdGlsaXRpZXNcbi8vID09PT09PT09PT09PT09XG4vLyAtIFN1c3kgRXJyb3IgT3V0cHV0IE92ZXJyaWRlIFt2YXJpYWJsZV1cbi8vIC0gU3VzeSBFcnJvciBbZnVuY3Rpb25dXG5cblxuXG4vLyBTdXN5IEVycm9yIE91dHB1dCBPdmVycmlkZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUdXJuIG9mZiBlcnJvciBvdXRwdXQgZm9yIHRlc3Rpbmdcbi8vLyBAZ3JvdXAgeC11dGlsaXR5XG4vLy8gQGFjY2VzcyBwcml2YXRlXG4kX3N1c3ktZXJyb3Itb3V0cHV0LW92ZXJyaWRlOiBmYWxzZSAhZGVmYXVsdDtcblxuXG5cbi8vIFN1c3kgRXJyb3Jcbi8vIC0tLS0tLS0tLS1cbi8vLyBPcHRpb25hbGx5IHJldHVybiBlcnJvciBtZXNzYWdlcyB3aXRob3V0IGZhaWxpbmcsXG4vLy8gYXMgYSB3YXkgdG8gdGVzdCBlcnJvciBjYXNlc1xuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtzdHJpbmd9ICRtZXNzYWdlIC1cbi8vLyAgIEEgdXNlZnVsIGVycm9yIG1lc3NhZ2UsIGV4cGxhaW5pbmcgdGhlIHByb2JsZW1cbi8vLyBAcGFyYW0ge3N0cmluZ30gJHNvdXJjZSAtXG4vLy8gICBUaGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nXG4vLy8gQHBhcmFtIHtib29sfSAkb3ZlcnJpZGUgWyRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGVdIC1cbi8vLyAgIE9wdGlvbmFsbHkgcmV0dXJuIHRoZSBlcnJvciByYXRoZXIgdGhhbiBmYWlsaW5nXG4vLy8gQHJldHVybiB7c3RyaW5nfSAtXG4vLy8gICBDb21iaW5lZCBlcnJvciB3aXRoIHNvdXJjZSBhbmQgbWVzc2FnZVxuLy8vIEB0aHJvd3MgV2hlbiBgJG92ZXJyaWRlID09IHRydWVgXG5AZnVuY3Rpb24gX3N1c3ktZXJyb3IoXG4gICRtZXNzYWdlLFxuICAkc291cmNlLFxuICAkb3ZlcnJpZGU6ICRfc3VzeS1lcnJvci1vdXRwdXQtb3ZlcnJpZGVcbikge1xuICBAaWYgJG92ZXJyaWRlIHtcbiAgICBAcmV0dXJuICdFUlJPUiBbI3skc291cmNlfV0gI3skbWVzc2FnZX0nO1xuICB9XG5cbiAgQGVycm9yICdbI3skc291cmNlfV0gI3skbWVzc2FnZX0nO1xufVxuXG5cbi8vIFN1IElzIENvbXBhcmFibGVcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBDaGVjayB0aGF0IHRoZSB1bml0cyBpbiBhIGdyaWQgYXJlIGNvbXBhcmFibGVcbi8vL1xuLy8vIEBncm91cCBfdmFsaWRhdGlvblxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXJzfSAkbGVuZ3Roc+KApiAtXG4vLy8gICBBcmdsaXN0IG9mIGFsbCB0aGUgbnVtYmVyIHZhbHVlcyB0byBjb21wYXJlXG4vLy8gICAoY29sdW1ucywgZ3V0dGVycywgc3BhbiwgZXRjKVxuLy8vXG4vLy8gQHJldHVybiB7J2ZsdWlkJyB8ICdzdGF0aWMnIHwgZmFsc2V9IC1cbi8vLyAgIFRoZSB0eXBlIG9mIHNwYW4gKGZsdWlkIG9yIHN0YXRpYykgd2hlbiB1bml0cyBtYXRjaCxcbi8vLyAgIG9yIGBmYWxzZWAgZm9yIG1pc21hdGNoZWQgdW5pdHNcbkBmdW5jdGlvbiBfc3UtaXMtY29tcGFyYWJsZShcbiAgJGxlbmd0aHMuLi5cbikge1xuICAkZmlyc3Q6IG50aCgkbGVuZ3RocywgMSk7XG5cbiAgQGlmIChsZW5ndGgoJGxlbmd0aHMpID09IDEpIHtcbiAgICBAcmV0dXJuIGlmKHVuaXRsZXNzKCRmaXJzdCksICdmbHVpZCcsICdzdGF0aWMnKTtcbiAgfVxuXG4gIEBmb3IgJGkgZnJvbSAyIHRocm91Z2ggbGVuZ3RoKCRsZW5ndGhzKSB7XG4gICAgJGNvbXA6IG50aCgkbGVuZ3RocywgJGkpO1xuXG4gICAgJGZhaWw6IG5vdCBjb21wYXJhYmxlKCRmaXJzdCwgJGNvbXApO1xuICAgICRmYWlsOiAkZmFpbCBvciAodW5pdGxlc3MoJGZpcnN0KSBhbmQgbm90IHVuaXRsZXNzKCRjb21wKSk7XG4gICAgJGZhaWw6ICRmYWlsIG9yICh1bml0bGVzcygkY29tcCkgYW5kIG5vdCB1bml0bGVzcygkZmlyc3QpKTtcblxuICAgIEBpZiAkZmFpbCB7XG4gICAgICBAcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gaWYodW5pdGxlc3MoJGZpcnN0KSwgJ2ZsdWlkJywgJ3N0YXRpYycpO1xufVxuXG5cbi8vIFN1IE1hcCBBZGQgVW5pdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vLyBUaGUgY2FsYyBmZWF0dXJlcyB1c2UgYSBtYXAgb2YgdW5pdHMgYW5kIHZhbHVlc1xuLy8vIHRvIGNvbXBpbGUgdGhlIHByb3BlciBhbGdvcnl0aG0uXG4vLy8gVGhpcyBmdW5jdGlvbiBhZGRzIGEgbmV3IHZhbHVlIHRvIGFueSBjb21wYXJhYmxlIGV4aXN0aW5nIHVuaXQvdmFsdWUsXG4vLy8gb3IgYWRkcyBhIG5ldyB1bml0L3ZhbHVlIHBhaXIgdG8gdGhlIG1hcFxuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRtYXAgLVxuLy8vICAgQSBtYXAgb2YgdW5pdC92YWx1ZSBwYWlycywgZS5nLiAoJ3B4JzogMTIwcHgpXG4vLy8gQHBhcmFtIHtsZW5ndGh9ICR2YWx1ZSAtXG4vLy8gICBBIG5ldyBsZW5ndGggdG8gYmUgYWRkZWQgdG8gdGhlIG1hcFxuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgVGhlIHVwZGF0ZWQgbWFwLCB3aXRoIG5ldyB2YWx1ZSBhZGRlZFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkbWFwOiAoMHB4OiAxMjBweCk7XG4vLy8gICAkbWFwOiBfc3UtbWFwLWFkZC11bml0cygkbWFwLCAxaW4pOyAvLyBhZGQgYSBjb21wYXJhYmxlIHVuaXRcbi8vLyAgICRtYXA6IF9zdS1tYXAtYWRkLXVuaXRzKCRtYXAsIDN2dyk7IC8vIGFkZCBhIG5ldyB1bml0XG4vLy9cbi8vLyAgIEBlYWNoICR1bml0cywgJHZhbHVlIGluICRtYXAge1xuLy8vICAgICAvKiAjeyR1bml0c306ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuQGZ1bmN0aW9uIF9zdS1tYXAtYWRkLXVuaXRzKFxuICAkbWFwLFxuICAkdmFsdWVcbikge1xuICAkdW5pdDogJHZhbHVlICogMDtcbiAgJGhhczogbWFwLWdldCgkbWFwLCAkdW5pdCkgb3IgMDtcblxuICBAaWYgKCRoYXMgPT0gMCkge1xuICAgIEBlYWNoICR0cnksICRjb3VsZCBpbiAkbWFwIHtcbiAgICAgICRtYXRjaDogY29tcGFyYWJsZSgkdHJ5LCAkdmFsdWUpO1xuICAgICAgJHVuaXQ6IGlmKCRtYXRjaCwgJHRyeSwgJHVuaXQpO1xuICAgICAgJGhhczogaWYoJG1hdGNoLCAkY291bGQsICRoYXMpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRtYXAsICgkdW5pdDogJGhhcyArICR2YWx1ZSkpO1xufVxuXG5cbi8vIFN1c3kgRmxhdHRlblxuLy8gLS0tLS0tLS0tLS0tXG4vLy8gRmxhdHRlbiBhIG11bHRpZGltZW5zaW9uYWwgbGlzdFxuLy8vXG4vLy8gQGdyb3VwIHgtdXRpbGl0eVxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkbGlzdCAtXG4vLy8gICBUaGUgbGlzdCB0byBiZSBmbGF0dGVuZWRcbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBUaGUgZmxhdHRlbmVkIGxpc3Rcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJGxpc3Q6IDEyMHB4ICgzMGVtIDMwZW0pIDEyMHB4O1xuLy8vICAgLyogI3tfc3VzeS1mbGF0dGVuKCRsaXN0KX0gKi9cbkBmdW5jdGlvbiBfc3VzeS1mbGF0dGVuKFxuICAkbGlzdFxuKSB7XG4gICRmbGF0OiAoKTtcblxuICAvLyBEb24ndCBpdGVyYXRlIG92ZXIgbWFwc1xuICBAaWYgKHR5cGUtb2YoJGxpc3QpID09ICdtYXAnKSB7XG4gICAgQHJldHVybiAkbGlzdDtcbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciBsaXN0cyAob3Igc2luZ2xlIGl0ZW1zKVxuICBAZWFjaCAkaXRlbSBpbiAkbGlzdCB7XG4gICAgQGlmICh0eXBlLW9mKCRpdGVtKSA9PSAnbGlzdCcpIHtcbiAgICAgICRpdGVtOiBfc3VzeS1mbGF0dGVuKCRpdGVtKTtcbiAgICAgICRmbGF0OiBqb2luKCRmbGF0LCAkaXRlbSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZmxhdDogYXBwZW5kKCRmbGF0LCAkaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJuIGZsYXR0ZW5lZCBsaXN0XG4gIEByZXR1cm4gJGZsYXQ7XG59XG4iLCIvLy8gVmFsaWRhdGlvblxuLy8vID09PT09PT09PT1cbi8vLyBFYWNoIGFyZ3VtZW50IHRvIFN1IGhhcyBhIHNpbmdsZSBjYW5vbmljYWwgc3ludGF4LlxuLy8vIFRoZXNlIHZhbGlkYXRpb24gZnVuY3Rpb25zIGNoZWNrIHRvIGVuc3VyZVxuLy8vIHRoYXQgZWFjaCBhcmd1bWVudCBpcyB2YWxpZCxcbi8vLyBpbiBvcmRlciB0byBwcm92aWRlIHVzZWZ1bCBlcnJvcnNcbi8vLyBiZWZvcmUgYXR0ZW1wdGluZyB0byBjYWxjdWxhdGUgdGhlIHJlc3VsdHMvXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBzZWUgc3UtdmFsaWQtY29sdW1uc1xuLy8vIEBzZWUgc3UtdmFsaWQtZ3V0dGVyc1xuLy8vIEBzZWUgc3UtdmFsaWQtc3ByZWFkXG4vLy8gQHNlZSBzdS12YWxpZC1sb2NhdGlvblxuXG5cblxuLy8gVmFsaWQgU3BhblxuLy8gLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBzcGFuYCBhcmd1bWVudFxuLy8vIGlzIGEgbnVtYmVyLCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0XG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9mIGNvbHVtbnMsIG9yIGxlbmd0aCBvZiBzcGFuXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXIgfCBsaXN0fSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRzcGFuYCBudW1iZXIsIGxlbmd0aCwgb3IgY29sdW1ucyBsaXN0XG4vLy9cbi8vLyBAdGhyb3dcbi8vLyAgIHdoZW4gc3BhbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsIG9yIHZhbGlkIGNvbHVtbiBsaXN0XG5AZnVuY3Rpb24gc3UtdmFsaWQtc3BhbihcbiAgJHNwYW5cbikge1xuICAkdHlwZTogdHlwZS1vZigkc3Bhbik7XG4gIEBpZiAoJHR5cGUgPT0gJ251bWJlcicpIHtcbiAgICBAcmV0dXJuICRzcGFuO1xuICB9IEBlbHNlIGlmICgkdHlwZSA9PSAnbGlzdCcpIGFuZCBzdS12YWxpZC1jb2x1bW5zKCRzcGFuLCAnc2lsZW50LWZhaWx1cmUnKSB7XG4gICAgQHJldHVybiAkc3BhbjtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcGFuKX1dIGAje2luc3BlY3QoJHNwYW4pfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICcjeyRhY3R1YWx9IGlzIG5vdCBhIHZhbGlkIG51bWJlciwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBmb3IgJHNwYW4uJyxcbiAgICAnc3UtdmFsaWQtc3BhbicpO1xufVxuXG5cblxuLy8gVmFsaWQgQ29sdW1uc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBjb2x1bW5zYCBhcmd1bWVudCBpcyBhIHZhbGlkXG4vLy8gbGlzdCBvZiBjb2x1bW4tbGVuZ3Roc1xuLy8vXG4vLy8gQGdyb3VwIF92YWxpZGF0aW9uXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1uLWxlbmd0aHNcbi8vLyBAcGFyYW0ge2Jvb2x9ICRzaWxlbnQtZmFpbHVyZSBbdHJ1ZV0gLVxuLy8vICAgU2V0IGZhbHNlIHRvIHJldHVybiBudWxsIG9uIGZhaWx1cmVcbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIFZhbGlkYXRlZCBgJGNvbHVtbnNgIGxpc3Rcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBjb2x1bW4gdmFsdWUgaXMgbm90IGEgdmFsaWQgbGlzdCBvZiBudW1iZXJzXG5AZnVuY3Rpb24gc3UtdmFsaWQtY29sdW1ucyhcbiAgJGNvbHVtbnMsXG4gICRzaWxlbnQtZmFpbHVyZTogZmFsc2Vcbikge1xuICBAaWYgKHR5cGUtb2YoJGNvbHVtbnMpID09ICdsaXN0Jykge1xuICAgICRmYWlsOiBmYWxzZTtcblxuICAgIEBlYWNoICRjb2wgaW4gJGNvbHVtbnMge1xuICAgICAgQGlmICh0eXBlLW9mKCRjb2wpICE9ICdudW1iZXInKSB7XG4gICAgICAgICRmYWlsOiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiBub3QgJGZhaWwge1xuICAgICAgQHJldHVybiAkY29sdW1ucztcbiAgICB9XG4gIH1cblxuICAvLyBTaWxlbnQgRmFpbHVyZVxuICBAaWYgJHNpbGVudC1mYWlsdXJlIHtcbiAgICBAcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBFcnJvciBNZXNzYWdlXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRjb2x1bW5zKX1dIGAje2luc3BlY3QoJGNvbHVtbnMpfWAnO1xuXG4gIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgJyN7JGFjdHVhbH0gaXMgbm90IGEgdmFsaWQgbGlzdCBvZiBudW1iZXJzIGZvciAkY29sdW1ucy4nLFxuICAgICdzdS12YWxpZC1jb2x1bW5zJyk7XG59XG5cblxuXG4vLyBWYWxpZCBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGd1dHRlcnNgIGFyZ3VtZW50IGlzIGEgdmFsaWQgbnVtYmVyXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkZ3V0dGVycyAtXG4vLy8gICBXaWR0aCBvZiBhIGd1dHRlclxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRndXR0ZXJzYCBudW1iZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBndXR0ZXIgdmFsdWUgaXMgbm90IGEgbnVtYmVyXG5AZnVuY3Rpb24gc3UtdmFsaWQtZ3V0dGVycyhcbiAgJGd1dHRlcnNcbikge1xuICAkdHlwZTogdHlwZS1vZigkZ3V0dGVycyk7XG5cbiAgQGlmICgkdHlwZSA9PSAnbnVtYmVyJykge1xuICAgIEByZXR1cm4gJGd1dHRlcnM7XG4gIH1cblxuICAkYWN0dWFsOiAnWyN7JHR5cGV9XSBgI3tpbnNwZWN0KCRndXR0ZXJzKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSBudW1iZXIgb3IgbGVuZ3RoIGZvciAkZ3V0dGVycy4nLFxuICAgICdzdS12YWxpZC1ndXR0ZXJzJyk7XG59XG5cblxuXG4vLyBWYWxpZCBTcHJlYWRcbi8vIC0tLS0tLS0tLS0tLVxuLy8vIENoZWNrIHRoYXQgdGhlIGBzcHJlYWRgIGFyZ3VtZW50IGlzIGEgdmFsaWRcbi8vLyBpbnRpZ2VyIGJldHdlZW4gYC0xYCBhbmQgYDFgXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJHNwcmVhZCAtXG4vLy8gICBOdW1iZXIgb2YgZ3V0dGVycyB0byBpbmNsdWRlIGluIGEgc3Bhbixcbi8vLyAgIHJlbGF0aXZlIHRvIHRoZSBudW1iZXIgY29sdW1uc1xuLy8vXG4vLy8gQHJldHVybiB7MCB8IDEgfCAtMX0gLVxuLy8vICAgVmFsaWRhdGVkIGAkc3ByZWFkYCBudW1iZXJcbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBzcHJlYWQgdmFsdWUgaXMgbm90IGEgdmFsaWQgc3ByZWFkXG5AZnVuY3Rpb24gc3UtdmFsaWQtc3ByZWFkKFxuICAkc3ByZWFkXG4pIHtcbiAgQGlmIGluZGV4KDAgMSAtMSwgJHNwcmVhZCkge1xuICAgIEByZXR1cm4gJHNwcmVhZDtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcHJlYWQpfV0gYCN7aW5zcGVjdCgkc3ByZWFkKX1gJztcbiAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAnI3skYWN0dWFsfSBpcyBub3QgYSBub3JtYWxpemVkIFswIHwgMSB8IC0xXSB2YWx1ZSBmb3IgYCRzcHJlYWRgLicsXG4gICAgJ3N1LXZhbGlkLXNwcmVhZCcpO1xufVxuXG5cblxuLy8gVmFsaWQgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gQ2hlY2sgdGhhdCB0aGUgYGxvY2F0aW9uYCBhcmd1bWVudCBpcyBhIHZhbGlkIG51bWJlcixcbi8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIGF2YWlsYWJsZSBjb2x1bW5zXG4vLy9cbi8vLyBAZ3JvdXAgX3ZhbGlkYXRpb25cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZC1jb2x1bW5zIHRvIGJlIHNwYW5uZWRcbi8vLyBAcGFyYW0ge2ludGVnZXIgfCBzdHJpbmd9ICRsb2NhdGlvbiAtXG4vLy8gICBTdGFydGluZyAoMS1pbmRleGVkKSBjb2x1bW4tcG9zaXRpb24gb2YgdGhhdCBzcGFuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy9cbi8vLyBAcmV0dXJuIHtpbnRlZ2VyfSAtXG4vLy8gICBWYWxpZGF0ZWQgYCRsb2NhdGlvbmAgaW50aWdlclxuLy8vXG4vLy8gQHRocm93XG4vLy8gICB3aGVuIGxvY2F0aW9uIHZhbHVlIGlzIG5vdCBhIHZhbGlkIGluZGV4LFxuLy8vICAgZ2l2ZW4gdGhlIGNvbnRleHQgYW5kIHNwYW4uXG5AZnVuY3Rpb24gc3UtdmFsaWQtbG9jYXRpb24oXG4gICRzcGFuLFxuICAkbG9jYXRpb24sXG4gICRjb2x1bW5zXG4pIHtcbiAgJGNvdW50OiBsZW5ndGgoJGNvbHVtbnMpO1xuXG4gIEBpZiAkbG9jYXRpb24ge1xuICAgIEBpZiAodHlwZS1vZigkbG9jYXRpb24pICE9ICdudW1iZXInKSBvciAobm90IHVuaXRsZXNzKCRsb2NhdGlvbikpIHtcbiAgICAgICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRsb2NhdGlvbil9XSBgI3skbG9jYXRpb259YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnI3skYWN0dWFsfSBpcyBub3QgYSB1bml0bGVzcyBudW1iZXIgZm9yICRsb2NhdGlvbi4nLFxuICAgICAgICAnc3UtdmFsaWQtbG9jYXRpb24nKTtcbiAgICB9IEBlbHNlIGlmIChyb3VuZCgkbG9jYXRpb24pICE9ICRsb2NhdGlvbikge1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcihcbiAgICAgICAgJ0xvY2F0aW9uIChgI3skbG9jYXRpb259YCkgbXVzdCBiZSBhIDEtaW5kZXhlZCBpbnRpZ2VyIHBvc2l0aW9uLicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH0gQGVsc2UgaWYgKCRsb2NhdGlvbiA+ICRjb3VudCkgb3IgKCRsb2NhdGlvbiA8IDEpIHtcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdQb3NpdGlvbiBgI3skbG9jYXRpb259YCBkb2VzIG5vdCBleGlzdCBpbiBncmlkIGAjeyRjb2x1bW5zfWAuJyxcbiAgICAgICAgJ3N1LXZhbGlkLWxvY2F0aW9uJyk7XG4gICAgfSBAZWxzZSBpZiAoJGxvY2F0aW9uICsgJHNwYW4gLSAxID4gJGNvdW50KSB7XG4gICAgICAkZGV0YWlsczogJ2dyaWQgYCN7JGNvbHVtbnN9YCBmb3Igc3BhbiBgI3skc3Bhbn1gIGF0IGAjeyRsb2NhdGlvbn1gJztcbiAgICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAgICdUaGVyZSBhcmUgbm90IGVub3VnaCBjb2x1bW5zIGluICN7JGRldGFpbHN9LicsXG4gICAgICAgICdzdS12YWxpZC1sb2NhdGlvbicpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGxvY2F0aW9uO1xufVxuIiwiLy8vIEdyaWQgTWF0aCBFbmdpbmVcbi8vLyA9PT09PT09PT09PT09PT09XG4vLy8gVGhlIGBzdWAgZnVuY3Rpb25zIGdpdmUgeW91IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG1hdGggbGF5ZXIsXG4vLy8gd2l0aG91dCBhbnkgc3ludGF4LXN1Z2FyIGxpa2Ugc2hvcnRoYW5kIHBhcnNpbmcsIGFuZCBub3JtYWxpemF0aW9uLlxuLy8vIElmIHlvdSBwcmVmZXIgbmFtZWQgYXJndW1lbnRzLCBhbmQgc3RyaXBwZWQtZG93biBzeW50YXgsXG4vLy8geW91IGNhbiB1c2UgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5IGluIHlvdXIgY29kZSDigJNcbi8vLyByZXBsYWNpbmcgYHNwYW5gLCBgZ3V0dGVyYCwgYW5kIGBzbGljZWAuXG4vLy9cbi8vLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGFsc28gdXNlZnVsXG4vLy8gZm9yIGJ1aWxkaW5nIG1peGlucyBvciBvdGhlciBleHRlbnNpb25zIHRvIFN1c3kuXG4vLy8gQXBwbHkgdGhlIFN1c3kgc3ludGF4IHRvIG5ldyBtaXhpbnMgYW5kIGZ1bmN0aW9ucyxcbi8vLyB1c2luZyBvdXIgXCJQbHVnaW4gSGVscGVyc1wiLFxuLy8vIG9yIHdyaXRlIHlvdXIgb3duIHN5bnRheCBhbmQgcGFzcyB0aGUgbm9ybWFsaXplZCByZXN1bHRzIGFsb25nXG4vLy8gdG8gYHN1YCBmb3IgY29tcGlsYXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vXG4vLy8gQHNlZSBzdS1zcGFuXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlIHN1LXNsaWNlXG4vLy8gQGlnbm9yZSBfc3Utc3VtXG4vLy8gQGlnbm9yZSBfc3UtY2FsYy1zcGFuXG4vLy8gQGlnbm9yZSBfc3UtY2FsYy1zdW1cbi8vLyBAaWdub3JlIF9zdS1uZWVkcy1jYWxjLW91dHB1dFxuXG5cblxuLy8gU3UgU3BhblxuLy8gLS0tLS0tLVxuLy8vIENhbGN1bGF0ZXMgYW5kIHJldHVybnMgYSBDU1MtcmVhZHkgc3BhbiB3aWR0aCxcbi8vLyBiYXNlZCBvbiBub3JtYWxpemVkIHNwYW4gYW5kIGNvbnRleHQgZGF0YSDigJNcbi8vLyBhIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIGBzdXN5LXNwYW5gLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggdW5pdGxlc3MgbnVtYmVycyB3aWxsIHJldHVybiBgJWAgdmFsdWVzLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGNvbXBhcmFibGUgdW5pdHNcbi8vLyAgIHdpbGwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHVuaXRzIHByb3ZpZGVkLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGEgbWl4IG9mIHVuaXRzLFxuLy8vICAgb3IgYSBjb21iaW5hdGlvbiBvZiB1bnRpbGVzcyBudW1iZXJzIGFuZCB1bml0LWxlbmd0aHMsXG4vLy8gICB3aWxsIHJldHVybiBhIGBjYWxjKClgIHN0cmluZy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LXNwYW5cbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyIHwgbGlzdH0gJHNwYW4gLVxuLy8vICAgTnVtYmVyIG9yIGxpc3Qgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgWyRzcHJlYWRdIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2ludGVnZXJ9ICRsb2NhdGlvbiBbMV0gLVxuLy8vICAgT3B0aW9uYWwgcG9zaXRpb24gb2Ygc3ViLXNwYW4gYW1vbmcgZnVsbCBzZXQgb2YgY29sdW1uc1xuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBSZWxhdGl2ZSBvciBzdGF0aWMgbGVuZ3RoIG9mIGEgc3BhbiBvbiB0aGUgZ3JpZFxuQGZ1bmN0aW9uIHN1LXNwYW4oXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICRjb250YWluZXItc3ByZWFkOiAkc3ByZWFkLFxuICAkbG9jYXRpb246IDFcbikge1xuICAkc3Bhbjogc3UtdmFsaWQtc3Bhbigkc3Bhbik7XG4gICRjb2x1bW5zOiBzdS12YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAkc3ByZWFkOiBzdS12YWxpZC1zcHJlYWQoJHNwcmVhZCk7XG5cbiAgQGlmICh0eXBlLW9mKCRzcGFuKSA9PSAnbnVtYmVyJykge1xuICAgIEBpZiAobm90IHVuaXRsZXNzKCRzcGFuKSkge1xuICAgICAgQHJldHVybiAkc3BhbjtcbiAgICB9XG5cbiAgICAkbG9jYXRpb246IHN1LXZhbGlkLWxvY2F0aW9uKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbiAgICAkc3Bhbjogc3Utc2xpY2UoJHNwYW4sICRjb2x1bW5zLCAkbG9jYXRpb24sICR2YWxpZGF0ZTogZmFsc2UpO1xuICB9XG5cbiAgQGlmIF9zdS1uZWVkcy1jYWxjLW91dHB1dCgkc3BhbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJykge1xuICAgIEByZXR1cm4gX3N1LWNhbGMtc3Bhbigkc3BhbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICB9XG5cbiAgJHNwYW4td2lkdGg6IF9zdS1zdW0oJHNwYW4sICRndXR0ZXJzLCAkc3ByZWFkLCAkdmFsaWRhdGU6IGZhbHNlKTtcblxuICBAaWYgdW5pdGxlc3MoJHNwYW4td2lkdGgpIHtcbiAgICAkY29udGFpbmVyLXNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRjb250YWluZXItc3ByZWFkKTtcbiAgICAkY29udGFpbmVyOiBfc3Utc3VtKCRjb2x1bW5zLCAkZ3V0dGVycywgJGNvbnRhaW5lci1zcHJlYWQsICR2YWxpZGF0ZTogZmFsc2UpO1xuICAgIEByZXR1cm4gcGVyY2VudGFnZSgkc3Bhbi13aWR0aCAvICRjb250YWluZXIpO1xuICB9XG5cbiAgQHJldHVybiAkc3Bhbi13aWR0aDtcbn1cblxuXG5cbi8vIFN1IEd1dHRlclxuLy8gLS0tLS0tLS0tXG4vLy8gQ2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhIENTUy1yZWFkeSBndXR0ZXIgd2lkdGgsXG4vLy8gYmFzZWQgb24gbm9ybWFsaXplZCBncmlkIGRhdGEg4oCTXG4vLy8gYSBsb3ctbGV2ZWwgdmVyc2lvbiBvZiBgc3VzeS1ndXR0ZXJgLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gLSBHcmlkcyBkZWZpbmVkIHdpdGggdW5pdGxlc3MgbnVtYmVycyB3aWxsIHJldHVybiBgJWAgdmFsdWVzLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGNvbXBhcmFibGUgdW5pdHNcbi8vLyAgIHdpbGwgcmV0dXJuIGEgdmFsdWUgaW4gdGhlIHVuaXRzIHByb3ZpZGVkLlxuLy8vIC0gR3JpZHMgZGVmaW5lZCB3aXRoIGEgbWl4IG9mIHVuaXRzLFxuLy8vICAgb3IgYSBjb21iaW5hdGlvbiBvZiB1bnRpbGVzcyBudW1iZXJzIGFuZCB1bml0LWxlbmd0aHMsXG4vLy8gICB3aWxsIHJldHVybiBhIGBjYWxjKClgIHN0cmluZy5cbi8vL1xuLy8vIEBncm91cCBzdS1tYXRoXG4vLy8gQHNlZSBzdXN5LWd1dHRlclxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRjb250YWluZXItc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgUmVsYXRpdmUgb3Igc3RhdGljIGxlbmd0aCBvZiBvbmUgZ3V0dGVyIGluIGEgZ3JpZFxuQGZ1bmN0aW9uIHN1LWd1dHRlcihcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkY29udGFpbmVyLXNwcmVhZFxuKSB7XG4gIEBpZiAodHlwZS1vZigkZ3V0dGVycykgPT0gJ251bWJlcicpIHtcbiAgICBAaWYgKCRndXR0ZXJzID09IDApIG9yIChub3QgdW5pdGxlc3MoJGd1dHRlcnMpKSB7XG4gICAgICBAcmV0dXJuICRndXR0ZXJzO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoJGd1dHRlcnMsICRjb2x1bW5zLCAkZ3V0dGVycywgLTEsIG5vdCAndmFsaWRhdGUnKSB7XG4gICAgQHJldHVybiBfc3UtY2FsYy1zcGFuKCRndXR0ZXJzLCAkY29sdW1ucywgJGd1dHRlcnMsIC0xLCAkY29udGFpbmVyLXNwcmVhZCwgbm90ICd2YWxpZGF0ZScpO1xuICB9XG5cbiAgJGNvbnRhaW5lcjogX3N1LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkKTtcbiAgQHJldHVybiBwZXJjZW50YWdlKCRndXR0ZXJzIC8gJGNvbnRhaW5lcik7XG59XG5cblxuXG4vLyBTdSBTbGljZVxuLy8gLS0tLS0tLS1cbi8vLyBSZXR1cm5zIGEgbGlzdCBvZiBjb2x1bW5zXG4vLy8gYmFzZWQgb24gYSBnaXZlbiBzcGFuL2xvY2F0aW9uIHNsaWNlIG9mIHRoZSBncmlkIOKAk1xuLy8vIGEgbG93LWxldmVsIHZlcnNpb24gb2YgYHN1c3ktc2xpY2VgLFxuLy8vIHdpdGggYWxsIG9mIHRoZSBsb2dpYyBhbmQgbm9uZSBvZiB0aGUgc3ludGF4IHN1Z2FyLlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAc2VlIHN1c3ktc2xpY2Vcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vIEBwYXJhbSB7bnVtYmVyfSAkbG9jYXRpb24gWzFdIC1cbi8vLyAgIFN0YXJ0aW5nIGluZGV4IG9mIGEgc3BhbiBpbiB0aGUgbGlzdCBvZiBjb2x1bW5zXG4vLy8gQHBhcmFtIHtib29sfSAkdmFsaWRhdGUgW3RydWVdIC1cbi8vLyAgIENoZWNrIHRoYXQgYXJndW1lbnRzIGFyZSB2YWxpZCBiZWZvcmUgcHJvY2VlZGluZ1xuLy8vXG4vLy8gQHJldHVybiB7bGlzdH0gLVxuLy8vICAgU3Vic2V0IGxpc3Qgb2YgZ3JpZCBjb2x1bW5zLCBiYXNlZCBvbiBzcGFuIGFuZCBsb2NhdGlvblxuQGZ1bmN0aW9uIHN1LXNsaWNlKFxuICAkc3BhbixcbiAgJGNvbHVtbnMsXG4gICRsb2NhdGlvbjogMSxcbiAgJHZhbGlkYXRlOiB0cnVlXG4pIHtcbiAgQGlmICR2YWxpZGF0ZSB7XG4gICAgJGNvbHVtbnM6IHN1LXZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAgICRsb2NhdGlvbjogc3UtdmFsaWQtbG9jYXRpb24oJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuICB9XG5cbiAgJGZsb29yOiBmbG9vcigkc3Bhbik7XG4gICRzdWItY29sdW1uczogKCk7XG5cbiAgQGZvciAkaSBmcm9tICRsb2NhdGlvbiB0byAoJGxvY2F0aW9uICsgJGZsb29yKSB7XG4gICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRpKSk7XG4gIH1cblxuICBAaWYgJGZsb29yICE9ICRzcGFuIHtcbiAgICAkcmVtYWluZGVyOiAkc3BhbiAtICRmbG9vcjtcbiAgICAkY29sdW1uOiAkbG9jYXRpb24gKyAkZmxvb3I7XG4gICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRjb2x1bW4pICogJHJlbWFpbmRlcik7XG4gIH1cblxuICBAcmV0dXJuICRzdWItY29sdW1ucztcbn1cblxuXG5cbi8vIFN1IFN1bVxuLy8gLS0tLS0tXG4vLy8gR2V0IHRoZSB0b3RhbCBzdW0gb2YgY29sdW1uLXVuaXRzIGluIGEgbGF5b3V0LlxuLy8vXG4vLy8gQGdyb3VwIHN1LW1hdGhcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJGNvbHVtbnMgLVxuLy8vICAgTGlzdCBvZiBjb2x1bW5zIGluIHRoZSBncmlkXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtudW1iZXJ9IC1cbi8vLyAgIFRvdGFsIHN1bSBvZiBjb2x1bW4tdW5pdHMgaW4gYSBncmlkXG5AZnVuY3Rpb24gX3N1LXN1bShcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtc3BhbigkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBjb2x1bW4tc3VtXG4gICRjb2x1bW4tc3VtOiAwO1xuICBAZWFjaCAkY29sdW1uIGluICRjb2x1bW5zIHtcbiAgICAkY29sdW1uLXN1bTogJGNvbHVtbi1zdW0gKyAkY29sdW1uO1xuICB9XG5cbiAgJGd1dHRlci1zdW06IChjZWlsKGxlbmd0aCgkY29sdW1ucykpICsgJHNwcmVhZCkgKiAkZ3V0dGVycztcbiAgJHRvdGFsOiBpZigoJGd1dHRlci1zdW0gPiAwKSwgJGNvbHVtbi1zdW0gKyAkZ3V0dGVyLXN1bSwgJGNvbHVtbi1zdW0pO1xuXG4gIEByZXR1cm4gJHRvdGFsO1xufVxuXG5cblxuLy8gU3UgQ2FsY1xuLy8gLS0tLS0tLVxuLy8vIFJldHVybiBhIHVzYWJsZSBzcGFuIHdpZHRoIGFzIGEgYGNhbGMoKWAgZnVuY3Rpb24sXG4vLy8gaW4gb3JkZXIgdG8gY3JlYXRlIG1peGVkLXVuaXQgZ3JpZHMuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtudW1iZXIgfCBsaXN0fSAkc3BhbiAtXG4vLy8gICBQcmUtc2xpY2VkIGxpc3Qgb2YgZ3JpZCBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgY29sdW1ucyBhdmFpbGFibGVcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgaW4gY29sdW1uLWNvbXBhcmFibGUgdW5pdHNcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7MCB8IDEgfCAtMX0gJGNvbnRhaW5lci1zcHJlYWQgWyRzcHJlYWRdIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgY29sdW1uc2AgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHtsZW5ndGh9IC1cbi8vLyAgIFJlbGF0aXZlIG9yIHN0YXRpYyBsZW5ndGggb2YgYSBzcGFuIG9uIHRoZSBncmlkXG5AZnVuY3Rpb24gX3N1LWNhbGMtc3BhbihcbiAgJHNwYW4sXG4gICRjb2x1bW5zLFxuICAkZ3V0dGVycyxcbiAgJHNwcmVhZCxcbiAgJGNvbnRhaW5lci1zcHJlYWQ6ICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgICAkY29udGFpbmVyLXNwcmVhZDogc3UtdmFsaWQtc3ByZWFkKCRjb250YWluZXItc3ByZWFkKTtcbiAgfVxuXG4gIC8vIFNwYW4gYW5kIGNvbnRleHRcbiAgJHNwYW46IF9zdS1jYWxjLXN1bSgkc3BhbiwgJGd1dHRlcnMsICRzcHJlYWQsIG5vdCAndmFsaWRhdGUnKTtcbiAgJGNvbnRleHQ6IF9zdS1jYWxjLXN1bSgkY29sdW1ucywgJGd1dHRlcnMsICRjb250YWluZXItc3ByZWFkLCBub3QgJ3ZhbGlkYXRlJyk7XG5cbiAgLy8gRml4ZWQgYW5kIGZsdWlkXG4gICRmaXhlZC1zcGFuOiBtYXAtZ2V0KCRzcGFuLCAnZml4ZWQnKTtcbiAgJGZsdWlkLXNwYW46IG1hcC1nZXQoJHNwYW4sICdmbHVpZCcpO1xuICAkZml4ZWQtY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2ZpeGVkJyk7XG4gICRmbHVpZC1jb250ZXh0OiBtYXAtZ2V0KCRjb250ZXh0LCAnZmx1aWQnKTtcblxuICAkY2FsYzogJyN7JGZpeGVkLXNwYW59JztcbiAgJGZsdWlkLWNhbGM6ICcoMTAwJSAtICN7JGZpeGVkLWNvbnRleHR9KSc7XG5cbiAgLy8gRmx1aWQtdmFsdWVzXG4gIEBpZiAobm90ICRmbHVpZC1zcGFuKSB7XG4gICAgJGZsdWlkLWNhbGM6IG51bGw7XG4gIH0gQGVsc2UgaWYgKCRmbHVpZC1zcGFuICE9ICRmbHVpZC1jb250ZXh0KSB7XG4gICAgJGZsdWlkLXNwYW46ICcqICN7JGZsdWlkLXNwYW59JztcbiAgICAkZmx1aWQtY29udGV4dDogaWYoJGZsdWlkLWNvbnRleHQsICcvICN7JGZsdWlkLWNvbnRleHR9JywgJycpO1xuICAgICRmbHVpZC1jYWxjOiAnKCN7JGZsdWlkLWNhbGMgJGZsdWlkLWNvbnRleHQgJGZsdWlkLXNwYW59KSc7XG4gIH1cblxuICBAaWYgJGZsdWlkLWNhbGMge1xuICAgICRjYWxjOiBpZigoJGNhbGMgIT0gJycpLCAnI3skY2FsY30gKyAnLCAnJyk7XG4gICAgJGNhbGM6ICcjeyRjYWxjICsgJGZsdWlkLWNhbGN9JztcbiAgfVxuXG4gIEByZXR1cm4gY2FsYygje3VucXVvdGUoJGNhbGMpfSk7XG59XG5cblxuXG4vLyBTdSBDYWxjLVN1bVxuLy8gLS0tLS0tLS0tLS1cbi8vLyBHZXQgdGhlIHRvdGFsIHN1bSBvZiBmaXhlZCBhbmQgZmx1aWQgY29sdW1uLXVuaXRzXG4vLy8gZm9yIGNyZWF0aW5nIGEgbWl4ZWQtdW5pdCBsYXlvdXQgd2l0aCBgY2FsYygpYCB2YWx1ZXMuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGNvbHVtbnMgYXZhaWxhYmxlXG4vLy8gQHBhcmFtIHtudW1iZXJ9ICRndXR0ZXJzIC1cbi8vLyAgIFdpZHRoIG9mIGEgZ3V0dGVyIGluIGNvbHVtbi1jb21wYXJhYmxlIHVuaXRzXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xfSAkc3ByZWFkIC1cbi8vLyAgIE51bWJlciBvZiBndXR0ZXJzIHNwYW5uZWQsXG4vLy8gICByZWxhdGl2ZSB0byBgc3BhbmAgY291bnRcbi8vLyBAcGFyYW0ge2Jvb2x9ICR2YWxpZGF0ZSBbdHJ1ZV0gLVxuLy8vICAgQ2hlY2sgdGhhdCBhcmd1bWVudHMgYXJlIHZhbGlkIGJlZm9yZSBwcm9jZWVkaW5nXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIE1hcCB3aXRoIGBmaXhlZGAgYW5kIGBmbHVpZGAga2V5c1xuLy8vICAgY29udGFpbmluZyB0aGUgcHJvcGVyIG1hdGggYXMgc3RyaW5nc1xuQGZ1bmN0aW9uIF9zdS1jYWxjLXN1bShcbiAgJGNvbHVtbnMsXG4gICRndXR0ZXJzLFxuICAkc3ByZWFkLFxuICAkdmFsaWRhdGU6IHRydWVcbikge1xuICBAaWYgJHZhbGlkYXRlIHtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtc3BhbigkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAgICRzcHJlYWQ6IHN1LXZhbGlkLXNwcmVhZCgkc3ByZWFkKTtcbiAgfVxuXG4gICRmbHVpZDogMDtcbiAgJGZpeGVkOiAoKTtcbiAgJGNhbGM6IG51bGw7XG5cbiAgLy8gR3V0dGVyc1xuICAkZ3V0dGVyczogICRndXR0ZXJzICogKGxlbmd0aCgkY29sdW1ucykgKyAkc3ByZWFkKTtcblxuICAvLyBDb2x1bW5zXG4gIEBlYWNoICRjb2wgaW4gYXBwZW5kKCRjb2x1bW5zLCAkZ3V0dGVycykge1xuICAgIEBpZiB1bml0bGVzcygkY29sKSB7XG4gICAgICAkZmx1aWQ6ICRmbHVpZCArICRjb2w7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZml4ZWQ6IF9zdS1tYXAtYWRkLXVuaXRzKCRmaXhlZCwgJGNvbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcGlsZSBGaXhlZCBVbml0c1xuICBAZWFjaCAkdW5pdCwgJHRvdGFsIGluICRmaXhlZCB7XG4gICAgQGlmICgkdG90YWwgIT0gKDAgKiAkdG90YWwpKSB7XG4gICAgICAkY2FsYzogaWYoJGNhbGMsICcjeyRjYWxjfSArICN7JHRvdGFsfScsICcjeyR0b3RhbH0nKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxjIG51bGwgb3Igc3RyaW5nXG4gIEBpZiAkY2FsYyB7XG4gICAgJGNhbGM6IGlmKHN0ci1pbmRleCgkY2FsYywgJysnKSwgJygjeyRjYWxjfSknLCAnI3skY2FsY30nKTtcbiAgfVxuXG4gIC8vIEZsdWlkIDAgPT4gbnVsbFxuICAkZmx1aWQ6IGlmKCgkZmx1aWQgPT0gMCksIG51bGwsICRmbHVpZCk7XG5cblxuICAvLyBSZXR1cm4gbWFwXG4gICRyZXR1cm46IChcbiAgICAnZml4ZWQnOiAkY2FsYyxcbiAgICAnZmx1aWQnOiAkZmx1aWQsXG4gICk7XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cblxuLy8gTmVlZHMgQ2FsY1xuLy8gLS0tLS0tLS0tLVxuLy8vIENoZWNrIGlmIGBjYWxjKClgIHdpbGwgYmUgbmVlZGVkIGluIGRlZmluaW5nIGEgc3Bhbixcbi8vLyBpZiB0aGUgbmVjZXNzYXJ5IHVuaXRzIGluIGEgZ3JpZCBhcmUgbm90IGNvbXBhcmFibGUuXG4vLy9cbi8vLyBAZ3JvdXAgc3UtbWF0aFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTbGljZSBvZiBjb2x1bW5zIHRvIHNwYW5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIExpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbnMgaW4gdGhlIGdyaWRcbi8vLyBAcGFyYW0ge251bWJlcn0gJGd1dHRlcnMgLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXJcbi8vLyBAcGFyYW0gezAgfCAxIHwgLTF9ICRzcHJlYWQgLVxuLy8vICAgTnVtYmVyIG9mIGd1dHRlcnMgc3Bhbm5lZCxcbi8vLyAgIHJlbGF0aXZlIHRvIGBzcGFuYCBjb3VudFxuLy8vIEBwYXJhbSB7Ym9vbH0gJHZhbGlkYXRlIFt0cnVlXSAtXG4vLy8gICBDaGVjayB0aGF0IGFyZ3VtZW50cyBhcmUgdmFsaWQgYmVmb3JlIHByb2NlZWRpbmdcbi8vL1xuLy8vIEByZXR1cm4ge2Jvb2x9IC1cbi8vLyAgIGBUcnVlYCB3aGVuIHVuaXRzIGRvIG5vdCBtYXRjaCwgYW5kIGBjYWxjKClgIHdpbGwgYmUgcmVxdWlyZWRcbkBmdW5jdGlvbiBfc3UtbmVlZHMtY2FsYy1vdXRwdXQoXG4gICRzcGFuLFxuICAkY29sdW1ucyxcbiAgJGd1dHRlcnMsXG4gICRzcHJlYWQsXG4gICR2YWxpZGF0ZTogdHJ1ZVxuKSB7XG4gIEBpZiAkdmFsaWRhdGUge1xuICAgICRzcGFuOiBzdS12YWxpZC1zcGFuKCRzcGFuKTtcbiAgICAkY29sdW1uczogc3UtdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICAgJGd1dHRlcnM6IHN1LXZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICB9XG5cbiAgJGhhcy1ndXR0ZXI6IGlmKChsZW5ndGgoJHNwYW4pID4gMSkgb3IgKCRzcHJlYWQgPj0gMCksIHRydWUsIGZhbHNlKTtcbiAgJGNoZWNrOiBpZigkaGFzLWd1dHRlciwgYXBwZW5kKCRzcGFuLCAkZ3V0dGVycyksICRzcGFuKTtcbiAgJHNhZmUtc3BhbjogX3N1LWlzLWNvbXBhcmFibGUoJGNoZWNrLi4uKTtcblxuICBAaWYgKCRzYWZlLXNwYW4gPT0gJ3N0YXRpYycpIHtcbiAgICBAcmV0dXJuIGZhbHNlO1xuICB9IEBlbHNlIGlmIChub3QgJHNhZmUtc3Bhbikge1xuICAgIEByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICRzYWZlLWZsdWlkOiBfc3UtaXMtY29tcGFyYWJsZSgkZ3V0dGVycywgJGNvbHVtbnMuLi4pO1xuXG4gIEByZXR1cm4gbm90ICRzYWZlLWZsdWlkO1xufVxuIiwiLy8vIFN1c3kzIENvbmZpZ3VyYXRpb25cbi8vLyA9PT09PT09PT09PT09PT09PT09XG4vLy8gU3VzeTMgaGFzIDQgY29yZSBzZXR0aW5ncywgaW4gYSBzaW5nbGUgc2V0dGluZ3MgbWFwLlxuLy8vIFlvdSdsbCBub3RpY2UgYSBmZXcgZGlmZmVyZW5jZXMgZnJvbSBTdXN5Mjpcbi8vL1xuLy8vICoqQ29sdW1ucyoqIG5vIGxvbmdlciBhY2NlcHQgYSBzaW5nbGUgbnVtYmVyLCBsaWtlIGAxMmAsXG4vLy8gYnV0IHVzZSBhIHN5bnRheCBtb3JlIHNpbWlsYXIgdG8gdGhlIG5ld1xuLy8vIENTUyBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXVtjb2x1bW5zXSDigJNcbi8vLyBhIGxpc3Qgb2YgcmVsYXRpdmUgc2l6ZXMgZm9yIGVhY2ggY29sdW1uIG9uIHRoZSBncmlkLlxuLy8vIFVuaXRsZXNzIG51bWJlcnMgaW4gU3VzeSBhY3QgdmVyeSBzaW1pbGFyIHRvIGBmcmAgdW5pdHMgaW4gQ1NTLFxuLy8vIGFuZCB0aGUgYHN1c3ktcmVwZWF0KClgIGZ1bmN0aW9uIChzaW1pbGFyIHRvIHRoZSBjc3MgYHJlcGVhdCgpYClcbi8vLyBoZWxwcyBxdWlja2x5IGVzdGFibGlzaCBlcXVhbC13aWR0aCBjb2x1bW5zLlxuLy8vXG4vLy8gW2NvbHVtbnNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXG4vLy9cbi8vLyAtIGBzdXN5LXJlcGVhdCgxMilgIHdpbGwgY3JlYXRlIDEyIGZsdWlkLCBlcXVhbC13aWR0aCBjb2x1bW5zXG4vLy8gLSBgc3VzeS1yZXBlYXQoNiwgMTIwcHgpYCB3aWxsIGNyZWF0ZSA2IGVxdWFsIGAxMjBweGAtd2lkZSBjb2x1bW5zXG4vLy8gLSBgMTIwcHggc3VzeS1yZXBlYXQoNCkgMTIwcHhgIHdpbGwgY3JlYXRlIDYgY29sdW1ucyxcbi8vLyAgIHRoZSBmaXJzdCBhbmQgbGFzdCBhcmUgYDEyMHB4YCxcbi8vLyAgIHdoaWxlIHRoZSBtaWRkbGUgNCBhcmUgZXF1YWwgZnJhY3Rpb25zIG9mIHRoZSByZW1haW5kZXIuXG4vLy8gICBTdXN5IHdpbGwgb3V0cHV0IGBjYWxjKClgIHZhbHVlcyBpbiBvcmRlciB0byBhY2hpZXZlIHRoaXMuXG4vLy9cbi8vLyAqKkd1dHRlcnMqKiBoYXZlbid0IGNoYW5nZWQg4oCTXG4vLy8gYSBzaW5nbGUgZnJhY3Rpb24gb3IgZXhwbGljaXQgd2lkdGgg4oCTXG4vLy8gYnV0IHRoZSBgY2FsYygpYCBvdXRwdXQgZmVhdHVyZVxuLy8vIG1lYW5zIHlvdSBjYW4gbm93IHVzZSBhbnkgY29tYmluYXRpb24gb2YgdW5pdHMgYW5kIGZyYWN0aW9uc1xuLy8vIHRvIGNyZWF0ZSBzdGF0aWMtZ3V0dGVycyBvbiBhIGZsdWlkIGdyaWQsIGV0Yy5cbi8vL1xuLy8vICoqU3ByZWFkKiogZXhpc3RlZCBpbiB0aGUgU3VzeTIgQVBJIGFzIGEgc3BhbiBvcHRpb24sXG4vLy8gYW5kIHdhcyBvdGhlcndpc2UgaGFuZGxlZCBiZWhpbmQgdGhlIHNjZW5lcy5cbi8vLyBOb3cgd2UncmUgZ2l2aW5nIHlvdSBmdWxsIGNvbnRyb2wgb3ZlciBhbGwgc3ByZWFkIGlzc3Vlcy5cbi8vLyBZb3UgY2FuIGZpbmQgYSBtb3JlIFtkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBzcHJlYWQgb24gdGhlIGJsb2ddW3NwcmVhZF0uXG4vLy9cbi8vLyBbc3ByZWFkXTogaHR0cDovL29kZGJpcmQubmV0LzIwMTcvMDYvMTMvc3VzeS1zcHJlYWQvXG4vLy9cbi8vLyBZb3UgY2FuIGFjY2VzcyB5b3VyIGdsb2JhbCBzZXR0aW5ncyBhdCBhbnkgdGltZVxuLy8vIHdpdGggdGhlIGBzdXN5LXNldHRpbmdzKClgIGZ1bmN0aW9uLFxuLy8vIG9yIGdyYWIgYSBzaW5nbGUgc2V0dGluZyBmcm9tIHRoZSBnbG9iYWwgc2NvcGVcbi8vLyB3aXRoIGBzdXN5LWdldCgnY29sdW1ucycpYCwgYHN1c3ktZ2V0KCdndXR0ZXJzJylgIGV0Yy5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vLyBAbGluayBodHRwOi8vb2RkYmlyZC5uZXQvMjAxNy8wNi8xMy9zdXN5LXNwcmVhZC9cbi8vLyAgIEFydGljbGU6IFVuZGVyc3RhbmRpbmcgU3ByZWFkIGluIFN1c3kzXG4vLy9cbi8vLyBAc2VlICRzdXN5XG4vLy8gQHNlZSBzdXN5LXNldHRpbmdzXG4vLy8gQHNlZSBzdXN5LWdldFxuXG5cblxuLy8gU3VzeVxuLy8gLS0tLVxuLy8vIFRoZSBncmlkIGlzIGRlZmluZWQgaW4gYSBzaW5nbGUgbWFwIHZhcmlhYmxlLFxuLy8vIHdpdGggZm91ciBpbml0aWFsIHByb3BlcnRpZXM6XG4vLy8gYGNvbHVtbnNgLCBgZ3V0dGVyc2AsIGBzcHJlYWRgIGFuZCBgY29udGFpbmVyLXNwcmVhZGAuXG4vLy8gQW55dGhpbmcgeW91IHB1dCBpbiB0aGUgcm9vdCBgJHN1c3lgIHZhcmlhYmxlIG1hcFxuLy8vIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGdsb2JhbCBwcm9qZWN0IGRlZmF1bHQuXG4vLy8gWW91IGNhbiBjcmVhdGUgc2ltaWxhciBjb25maWd1cmF0aW9uIG1hcHNcbi8vLyB1bmRlciBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMsXG4vLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzIGFzLW5lZWRlZC5cbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vLyBAdHlwZSBNYXBcbi8vL1xuLy8vIEBzZWUgJF9zdXN5LWRlZmF1bHRzXG4vLy8gQHNlZSB7ZnVuY3Rpb259IHN1c3ktcmVwZWF0XG4vLy8gQGxpbmtcbi8vLyAgIGh0dHBzOi8vY29kZXBlbi5pby9taXJpc3V6YW5uZS9wZW4vRWdtSkpwP2VkaXRvcnM9MTEwMFxuLy8vICAgU3ByZWFkIGV4YW1wbGVzIG9uIENvZGVQZW5cbi8vL1xuLy8vIEBwcm9wIHtsaXN0fSBjb2x1bW5zIC1cbi8vLyAgIENvbHVtbnMgYXJlIGRlc2NyaWJlZCBieSBhIGxpc3Qgb2YgbnVtYmVycyxcbi8vLyAgIHJlcHJlc2VudGluZyB0aGUgcmVsYXRpdmUgd2lkdGggb2YgZWFjaCBjb2x1bW4uXG4vLy8gICBUaGUgc3ludGF4IGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIENTUyBuYXRpdmVcbi8vLyAgIGBncmlkLXRlbXBsYXRlLWNvbHVtbnNgLFxuLy8vICAgZXhwZWN0aW5nIGEgbGlzdCBvZiBncmlkLWNvbHVtbiB3aWR0aHMuXG4vLy8gICBVbml0bGVzcyBudW1iZXJzIGNyZWF0ZSBmcmFjdGlvbmFsIGZsdWlkIGNvbHVtbnNcbi8vLyAgIChzaW1pbGFyIHRvIHRoZSBDU1MtbmF0aXZlIGBmcmAgdW5pdCksXG4vLy8gICB3aGlsZSBsZW5ndGggdmFsdWVzICh1bml0ZWQgbnVtYmVycylcbi8vLyAgIGFyZSB1c2VkIHRvIGRlZmluZSBzdGF0aWMgY29sdW1ucy5cbi8vLyAgIFlvdSBjYW4gbWl4LWFuZCBtYXRjaCB1bml0cyBhbmQgZnJhY3Rpb25zLFxuLy8vICAgdG8gY3JlYXRlIGEgbWl4ZWQgZ3JpZC5cbi8vLyAgIFN1c3kgd2lsbCBnZW5lcmF0ZSBgY2FsYygpYCB2YWx1ZXMgd2hlbiBuZWNlc3NhcnksXG4vLy8gICB0byBtYWtlIGFsbCB5b3VyIHVuaXRzIHdvcmsgdG9nZXRoZXIuXG4vLy9cbi8vLyAgIFVzZSB0aGUgYHN1c3ktcmVwZWF0KCRjb3VudCwgJHZhbHVlKWAgZnVuY3Rpb25cbi8vLyAgIHRvIG1vcmUgZWFzaWx5IHJlcGV0YXRpdmUgY29sdW1ucyxcbi8vLyAgIHNpbWlsYXIgdG8gdGhlIENTUy1uYXRpdmUgYHJlcGVhdCgpYC5cbi8vL1xuLy8vICAgLSBgc3VzeS1yZXBlYXQoOClgOlxuLy8vICAgICBhbiA4LWNvbHVtbiwgc3ltbWV0cmljYWwsIGZsdWlkIGdyaWQuXG4vLy8gICAgIDxiciAvPklkZW50aWNhbCB0byBgKDEgMSAxIDEgMSAxIDEgMSlgLlxuLy8vICAgLSBgc3VzeS1yZXBlYXQoNiwgOGVtKWA6XG4vLy8gICAgIGEgNi1jb2x1bW4sIHN5bW1ldHJpY2FsLCBlbS1iYXNlZCBncmlkLlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCg4ZW0gOGVtIDhlbSA4ZW0gOGVtIDhlbSlgLlxuLy8vICAgLSBgKDMwMHB4IHN1c3ktcmVwZWF0KDQpIDMwMHB4KWA6XG4vLy8gICAgIGEgNi1jb2x1bW4sIGFzeW1tZXRyaWNhbCwgbWl4ZWQgZmx1aWQvc3RhdGljIGdyaWRcbi8vLyAgICAgdXNpbmcgYGNhbGMoKWAgb3V0cHV0LlxuLy8vICAgICA8YnIgLz5JZGVudGljYWwgdG8gYCgzMDBweCAxIDEgMSAxIDMwMHB4KWAuXG4vLy9cbi8vLyAgICoqTk9URSoqIHRoYXQgYDEyYCBpcyBubyBsb25nZXIgYSB2YWxpZCAxMi1jb2x1bW4gZ3JpZCBkZWZpbml0aW9uLFxuLy8vICAgYW5kIHlvdSBtdXN0IGxpc3QgYWxsIHRoZSBjb2x1bW5zIGluZGl2aWR1YWxseVxuLy8vICAgKG9yIGJ5IHVzaW5nIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24pLlxuLy8vXG4vLy8gQHByb3Age251bWJlcn0gZ3V0dGVycyAtXG4vLy8gICBHdXR0ZXJzIGFyZSBkZWZpbmVkIGFzIGEgc2luZ2xlIHdpZHRoLFxuLy8vICAgb3IgZmx1aWQgcmF0aW8sIHNpbWlsYXIgdG8gdGhlIG5hdGl2ZS1DU1Ncbi8vLyAgIGBncmlkLWNvbHVtbi1nYXBgIHN5bnRheC5cbi8vLyAgIFNpbWlsYXIgdG8gY29sdW1ucyxcbi8vLyAgIGd1dHRlcnMgY2FuIHVzZSBhbnkgdmFsaWQgQ1NTIGxlbmd0aCB1bml0LFxuLy8vICAgb3IgdW5pdGxlc3MgbnVtYmVycyB0byBkZWZpbmUgYSByZWxhdGl2ZSBmcmFjdGlvbi5cbi8vL1xuLy8vICAgLSBgMC41YDpcbi8vLyAgICAgYSBmbHVpZCBndXR0ZXIsIGhhbGYgdGhlIHNpemUgb2YgYSBzaW5nbGUtZnJhY3Rpb24gY29sdW1uLlxuLy8vICAgLSBgMWVtYDpcbi8vLyAgICAgYSBzdGF0aWMgZ3V0dGVyLCBgMWVtYCB3aWRlLlxuLy8vXG4vLy8gICBNaXggc3RhdGljIGd1dHRlcnMgd2l0aCBmbHVpZCBjb2x1bW5zLCBvciB2aWNlIHZlcnNhLFxuLy8vICAgYW5kIFN1c3kgd2lsbCBnZW5lcmF0ZSB0aGUgcmVxdWlyZWQgYGNhbGMoKWAgdG8gbWFrZSBpdCB3b3JrLlxuLy8vXG4vLy8gQHByb3Age3N0cmluZ30gc3ByZWFkIFtuYXJyb3ddIC1cbi8vLyAgIFNwcmVhZCBvZiBhbiBlbGVtZW50IGFjcm9zcyBhZGphY2VudCBndXR0ZXJzOlxuLy8vICAgZWl0aGVyIGBuYXJyb3dgIChub25lKSwgYHdpZGVgIChvbmUpLCBvciBgd2lkZXJgICh0d28pXG4vLy9cbi8vLyAgIC0gQm90aCBzcHJlYWQgc2V0dGluZ3MgZGVmYXVsdCB0byBgbmFycm93YCxcbi8vLyAgICAgdGhlIG1vc3QgY29tbW9uIHVzZS1jYXNlLlxuLy8vICAgICBBIGBuYXJyb3dgIHNwcmVhZCBvbmx5IGhhcyBndXR0ZXJzICpiZXR3ZWVuKiBjb2x1bW5zXG4vLy8gICAgIChvbmUgbGVzcyBndXR0ZXIgdGhhbiBjb2x1bW5zKS5cbi8vLyAgICAgVGhpcyBpcyBob3cgYWxsIGNzcy1uYXRpdmUgZ3JpZHMgd29yayxcbi8vLyAgICAgYW5kIG1vc3QgbWFyZ2luLWJhc2VkIGdyaWQgc3lzdGVtcy5cbi8vLyAgIC0gQSBgd2lkZWAgc3ByZWFkIGluY2x1ZGVzIHRoZSBzYW1lIG51bWJlciBvZiBndXR0ZXJzIGFzIGNvbHVtbnMsXG4vLy8gICAgIHNwYW5uaW5nIGFjcm9zcyBhIHNpbmdsZSBzaWRlLWd1dHRlci5cbi8vLyAgICAgVGhpcyBpcyBob3cgbW9zdCBwYWRkaW5nLWJhc2VkIGdyaWQgc3lzdGVtcyBvZnRlbiB3b3JrLFxuLy8vICAgICBhbmQgaXMgYWxzbyB1c2VmdWwgZm9yIHB1c2hpbmcgYW5kIHB1bGxpbmcgZWxlbWVudHMgaW50byBwbGFjZS5cbi8vLyAgIC0gVGhlIHJhcmUgYHdpZGVyYCBzcHJlYWQgaW5jbHVkZXMgZ3V0dGVyc1xuLy8vICAgICBvbiBib3RoIHNpZGVzIG9mIHRoZSBjb2x1bW4tc3BhblxuLy8vICAgICAob25lIG1vcmUgZ3V0dGVycyB0aGFuIGNvbHVtbnMpLlxuLy8vXG4vLy8gQHByb3Age3N0cmluZ30gY29udGFpbmVyLXNwcmVhZCBbbmFycm93XSAtXG4vLy8gICBTcHJlYWQgb2YgYSBjb250YWluZXIgYXJvdW5kIGFkamFjZW50IGd1dHRlcnM6XG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKG5vbmUpLCBgd2lkZWAgKG9uZSksIG9yIGB3aWRlcmAgKHR3bykuXG4vLy8gICBTZWUgYHNwcmVhZGAgcHJvcGVydHkgZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAc2luY2UgMy4wLjAtYmV0YS4xIC1cbi8vLyAgIGBjb2x1bW5zYCBzZXR0aW5nIG5vIGxvbmdlciBhY2NlcHRzIG51bWJlcnNcbi8vLyAgIChlLmcuIGAxMmApIGZvciBzeW1tZXRyaWNhbCBmbHVpZCBncmlkcyxcbi8vLyAgIG9yIHRoZSBpbml0aWFsIGAxMiB4IDEyMHB4YCBzeW50YXggZm9yXG4vLy8gICBzeW1tZXRyaWNhbCBmaXhlZC11bml0IGdyaWRzLlxuLy8vICAgVXNlIGBzdXN5LXJlcGVhdCgxMilgIG9yIGBzdXN5LXJlcGVhdCgxMiwgMTIwcHgpYCBpbnN0ZWFkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGRlZmF1bHQgdmFsdWVzXG4vLy8gICAvLyA0IHN5bW1ldHJpY2FsLCBmbHVpZCBjb2x1bW5zXG4vLy8gICAvLyBndXR0ZXJzIGFyZSAxLzQgdGhlIHNpemUgb2YgYSBjb2x1bW5cbi8vLyAgIC8vIGVsZW1lbnRzIHNwYW4gMSBsZXNzIGd1dHRlciB0aGFuIGNvbHVtbnNcbi8vLyAgIC8vIGNvbnRhaW5lcnMgc3BhbiAxIGxlc3MgZ3V0dGVyIGFzIHdlbGxcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgICdjb2x1bW5zJzogc3VzeS1yZXBlYXQoNCksXG4vLy8gICAgICdndXR0ZXJzJzogMC4yNSxcbi8vLyAgICAgJ3NwcmVhZCc6ICduYXJyb3cnLFxuLy8vICAgICAnY29udGFpbmVyLXNwcmVhZCc6ICduYXJyb3cnLFxuLy8vICAgKTtcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBpbnNpZGUtc3RhdGljIGd1dHRlcnNcbi8vLyAgIC8vIDYgc3ltbWV0cmljYWwsIGZsdWlkIGNvbHVtbnPigKZcbi8vLyAgIC8vIGd1dHRlcnMgYXJlIHN0YXRpYywgdHJpZ2dlcmluZyBjYWxjKCnigKZcbi8vLyAgIC8vIGVsZW1lbnRzIHNwYW4gZXF1YWwgY29sdW1ucyAmIGd1dHRlcnPigKZcbi8vLyAgIC8vIGNvbnRhaW5lcnMgc3BhbiBlcXVhbCBjb2x1bW5zICYgZ3V0dGVyc+KAplxuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg2KSxcbi8vLyAgICAgJ2d1dHRlcnMnOiAwLjVlbSxcbi8vLyAgICAgJ3NwcmVhZCc6ICd3aWRlJyxcbi8vLyAgICAgJ2NvbnRhaW5lci1zcHJlYWQnOiAnd2lkZScsXG4vLy8gICApO1xuJHN1c3k6ICgpICFkZWZhdWx0O1xuXG5cblxuLy8gU3VzeSBSZXBlYXRcbi8vIC0tLS0tLS0tLS0tXG4vLy8gU2ltaWxhciB0byB0aGUgYHJlcGVhdCg8Y291bnQ+LCA8dmFsdWU+KWAgZnVuY3Rpb25cbi8vLyB0aGF0IGlzIGF2YWlsYWJsZSBpbiBuYXRpdmUgQ1NTIEdyaWQgdGVtcGxhdGVzLFxuLy8vIHRoZSBgc3VzeS1yZXBlYXQoKWAgZnVuY3Rpb24gaGVscHMgZ2VuZXJhdGUgcmVwZXRhdGl2ZSBsYXlvdXRzXG4vLy8gYnkgcmVwZWF0aW5nIGFueSB2YWx1ZSBhIGdpdmVuIG51bWJlciBvZiB0aW1lcy5cbi8vLyBXaGVyZSBTdXN5IHByZXZpb3VzbHkgYWxsb3dlZCBgOGAgYXMgYSBjb2x1bW4gZGVmaW5pdGlvblxuLy8vIGZvciA4IGVxdWFsIGNvbHVtbnMsIHlvdSBzaG91bGQgbm93IHVzZSBgc3VzeS1yZXBlYXQoOClgLlxuLy8vXG4vLy8gQGdyb3VwIGNvbmZpZ1xuLy8vXG4vLy8gQHBhcmFtIHtpbnRlZ2VyfSAkY291bnQgLVxuLy8vICAgVGhlIG51bWJlciBvZiByZXBldGl0aW9ucywgZS5nLiBgMTJgIGZvciBhIDEyLWNvbHVtbiBncmlkLlxuLy8vIEBwYXJhbSB7Kn0gJHZhbHVlIFsxXSAtXG4vLy8gICBUaGUgdmFsdWUgdG8gYmUgcmVwZWF0ZWQuXG4vLy8gICBUZWNobmljYWxseSBhbnkgdmFsdWUgY2FuIGJlIHJlcGVhdGVkIGhlcmUsXG4vLy8gICBidXQgdGhlIGZ1bmN0aW9uIGV4aXN0cyB0byByZXBlYXQgY29sdW1uLXdpZHRoIGRlc2NyaXB0aW9uczpcbi8vLyAgIGUuZy4gdGhlIGRlZmF1bHQgYDFgIGZvciBzaW5nbGUtZnJhY3Rpb24gZmx1aWQgY29sdW1ucyxcbi8vLyAgIGA1ZW1gIGZvciBhIHN0YXRpYyBjb2x1bW4sXG4vLy8gICBvciBldmVuIGA1ZW0gMTIwcHhgIGlmIHlvdSBhcmUgYWx0ZXJuYXRpbmcgY29sdW1uIHdpZHRocy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIExpc3Qgb2YgcmVwZWF0ZWQgdmFsdWVzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzXG4vLy8gICAvLyAxMiBjb2x1bW4gZ3JpZCwgd2l0aCA1ZW0gY29sdW1uc1xuLy8vICAgJHN1c3k6IChcbi8vLyAgICAgY29sdW1uczogc3VzeS1yZXBlYXQoMTIsIDVlbSksXG4vLy8gICApO1xuLy8vXG4vLy8gQGV4YW1wbGUgc2Nzc1xuLy8vICAgLy8gYXN5bW1ldHJpY2FsIDUtY29sdW1uIGdyaWRcbi8vLyAgICRzdXN5OiAoXG4vLy8gICAgIGNvbHVtbnM6IDIwcHggc3VzeS1yZXBlYXQoMywgMTAwcHgpIDIwcHgsXG4vLy8gICApO1xuLy8vXG4vLy8gICAvKiByZXN1bHQ6ICN7c3VzeS1nZXQoJ2NvbHVtbnMnKX0gKi9cbkBmdW5jdGlvbiBzdXN5LXJlcGVhdChcbiAgJGNvdW50LFxuICAkdmFsdWU6IDFcbikge1xuICAkcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRjb3VudCB7XG4gICAgJHJldHVybjogam9pbigkcmV0dXJuLCAkdmFsdWUpO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cblxuLy8gU3VzeSBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIENvbmZpZ3VyYXRpb24gbWFwIG9mIFN1c3kgZmFjdG9yeSBkZWZhdWx0cy5cbi8vLyBEbyBub3Qgb3ZlcnJpZGUgdGhpcyBtYXAgZGlyZWN0bHkg4oCTXG4vLy8gdXNlIGAkc3VzeWAgZm9yIHVzZXIgYW5kIHByb2plY3Qgc2V0dGluZyBvdmVycmlkZXMuXG4vLy9cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLyBAdHlwZSBNYXBcbi8vL1xuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwcm9wIHtudW1iZXIgfCBsaXN0fSBjb2x1bW5zIFtzdXN5LXJlcGVhdCg0KV1cbi8vLyBAcHJvcCB7bnVtYmVyfSBndXR0ZXJzIFswLjI1XVxuLy8vIEBwcm9wIHtzdHJpbmd9IHNwcmVhZCBbJ25hcnJvdyddXG4vLy8gQHByb3Age3N0cmluZ30gY29udGFpbmVyLXNwcmVhZCBbJ25hcnJvdyddXG4kX3N1c3ktZGVmYXVsdHM6IChcbiAgJ2NvbHVtbnMnOiBzdXN5LXJlcGVhdCg0KSxcbiAgJ2d1dHRlcnMnOiAwLjI1LFxuICAnc3ByZWFkJzogJ25hcnJvdycsXG4gICdjb250YWluZXItc3ByZWFkJzogJ25hcnJvdycsXG4pO1xuXG5cblxuLy8gU3VzeSBTZXR0aW5nc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8vIFJldHVybiBhIGNvbWJpbmVkIG1hcCBvZiBTdXN5IHNldHRpbmdzLFxuLy8vIGJhc2VkIG9uIHRoZSBmYWN0b3J5IGRlZmF1bHRzIChgJF9zdXN5LWRlZmF1bHRzYCksXG4vLy8gdXNlci1kZWZpbmVkIHByb2plY3QgY29uZmlndXJhdGlvbiAoYCRzdXN5YCksXG4vLy8gYW5kIGFueSBsb2NhbCBvdmVycmlkZXMgcmVxdWlyZWQg4oCTXG4vLy8gc3VjaCBhcyBhIGNvbmZpZ3VyYXRpb24gbWFwIHBhc3NlZCBpbnRvIGEgZnVuY3Rpb24uXG4vLy9cbi8vLyBAZ3JvdXAgY29uZmlnXG4vLy9cbi8vLyBAcGFyYW0ge21hcHN9ICRvdmVycmlkZXPigKYgLVxuLy8vICAgT3B0aW9uYWwgbWFwIG92ZXJyaWRlIG9mIGdsb2JhbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgYWJvdmUgZm9yIHByb3BlcnRpZXMuXG4vLy9cbi8vLyBAcmV0dXJuIHttYXB9IC1cbi8vLyAgIENvbWJpbmVkIG1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gICBpbiBvcmRlciBvZiBzcGVjaWZpY2l0eTpcbi8vLyAgIGFueSBgJG92ZXJyaWRlcy4uLmAsXG4vLy8gICB0aGVuIGAkc3VzeWAgcHJvamVjdCBzZXR0aW5ncyxcbi8vLyAgIGFuZCBmaW5hbGx5IHRoZSBgJF9zdXN5LWRlZmF1bHRzYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGdsb2JhbCBzZXR0aW5nc1xuLy8vICAgQGVhY2ggJGtleSwgJHZhbHVlIGluIHN1c3ktc2V0dGluZ3MoKSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSAqL1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIGxvY2FsIHNldHRpbmdzXG4vLy8gICAkbG9jYWw6ICgnY29sdW1ucyc6IDEgMiAzIDUgOCk7XG4vLy9cbi8vLyAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiBzdXN5LXNldHRpbmdzKCRsb2NhbCkge1xuLy8vICAgICAvKiAjeyRrZXl9OiAjeyR2YWx1ZX0gKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LXNldHRpbmdzKFxuICAkb3ZlcnJpZGVzLi4uXG4pIHtcbiAgJHNldHRpbmdzOiBtYXAtbWVyZ2UoJF9zdXN5LWRlZmF1bHRzLCAkc3VzeSk7XG5cbiAgQGVhY2ggJGNvbmZpZyBpbiAkb3ZlcnJpZGVzIHtcbiAgICAkc2V0dGluZ3M6IG1hcC1tZXJnZSgkc2V0dGluZ3MsICRjb25maWcpO1xuICB9XG5cbiAgQHJldHVybiAkc2V0dGluZ3M7XG59XG5cblxuXG4vLyBTdXN5IEdldFxuLy8gLS0tLS0tLS1cbi8vLyBSZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsIHZhbHVlIG9mIGFueSBTdXN5IHNldHRpbmdcbi8vL1xuLy8vIEBncm91cCBjb25maWdcbi8vL1xuLy8vIEBwYXJhbSB7c3RyaW5nfSAka2V5IC1cbi8vLyAgIFNldHRpbmcgdG8gcmV0cmlldmUgZnJvbSB0aGUgY29uZmlndXJhdGlvbi5cbi8vL1xuLy8vIEByZXR1cm4geyp9IC1cbi8vLyAgIFZhbHVlIG1hcHBlZCB0byBgJGtleWAgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWFwcyxcbi8vLyAgIGluIG9yZGVyIG9mIHNwZWNpZmljaXR5OlxuLy8vICAgYCRzdXN5YCwgdGhlbiBgJF9zdXN5LWRlZmF1bHRzYFxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAvKiBjb2x1bW5zOiAje3N1c3ktZ2V0KCdjb2x1bW5zJyl9ICovXG4vLy8gICAvKiBndXR0ZXJzOiAje3N1c3ktZ2V0KCdndXR0ZXJzJyl9ICovXG5AZnVuY3Rpb24gc3VzeS1nZXQoXG4gICRrZXlcbikge1xuICAkc2V0dGluZ3M6IHN1c3ktc2V0dGluZ3MoKTtcblxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRzZXR0aW5ncywgJGtleSkge1xuICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAnVGhlcmUgaXMgbm8gU3VzeSBzZXR0aW5nIGNhbGxlZCBgI3ska2V5fWAnLFxuICAgICAgJ3N1c3ktZ2V0Jyk7XG4gIH1cblxuICBAcmV0dXJuIG1hcC1nZXQoJHNldHRpbmdzLCAka2V5KTtcbn1cbiIsIi8vLyBTeW50YXggTm9ybWFsaXphdGlvblxuLy8vID09PT09PT09PT09PT09PT09PT09XG4vLy8gU3VzeSBpcyBkaXZpZGVkIGludG8gdHdvIGxheWVyczpcbi8vLyBcIlN1XCIgcHJvdmlkZXMgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMgd2l0aCBhIHN0cmlwcGVkLWRvd24gc3ludGF4LFxuLy8vIHdoaWxlIFwiU3VzeVwiIGFkZHMgZ2xvYmFsIHNldHRpbmdzLCBzaG9ydGhhbmQgc3ludGF4LFxuLy8vIGFuZCBvdGhlciBoZWxwZXJzLlxuLy8vIEVhY2ggc2V0dGluZyAoZS5nLiBzcGFuLCBsb2NhdGlvbiwgY29sdW1ucywgc3ByZWFkLCBldGMuKVxuLy8vIGhhcyBhIHNpbmdsZSBjYW5vbmljYWwgc3ludGF4IGluIFN1LlxuLy8vXG4vLy8gVGhpcyBub3JtYWxpemF0aW9uIG1vZHVsZSBoZWxwcyB0cmFuc2xhdGUgYmV0d2VlbiB0aG9zZSBsYXllcnMsXG4vLy8gdHJhbnNmb3JtaW5nIHBhcnNlZCBTdXN5IGlucHV0IGludG9cbi8vLyB2YWx1ZXMgdGhhdCBTdSB3aWxsIHVuZGVyc3RhbmQuXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZVxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtc3BhblxuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtY29sdW1uc1xuLy8vIEBzZWUgc3VzeS1ub3JtYWxpemUtc3ByZWFkXG4vLy8gQHNlZSBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvblxuXG5cblxuLy8gU3VzeSBOb3JtYWxpemVcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIHRoZSB2YWx1ZXMgaW4gYSBjb25maWd1cmF0aW9uIG1hcC5cbi8vLyBJbiBhZGRpdGlvbiB0byB0aGUgZ2xvYmFsIGAkc3VzeWAgcHJvcGVydGllcyxcbi8vLyB0aGlzIG1hcCBjYW4gaW5jbHVkZSBsb2NhbCBzcGFuLXJlbGF0ZWQgaW5mb3JtYXRpb24sXG4vLy8gbGlrZSBgc3BhbmAgYW5kIGBsb2NhdGlvbmAuXG4vLy9cbi8vLyBOb3JtYWxpemF0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgdmFsdWVzIGFyZSB2YWxpZCxcbi8vLyB3aGljaCB3aWxsIGhhcHBlbiBpbiB0aGUgU3UgbWF0aCBsYXllci5cbi8vLyBUaGVzZSBmdW5jdGlvbnMgbWVyZWx5IGxvb2sgZm9yIGtub3duIFN1c3kgc3ludGF4IOKAk1xuLy8vIHJldHVybmluZyBhIG1hcCB3aXRoIHRob3NlIHNob3J0aGFuZCB2YWx1ZXNcbi8vLyBjb252ZXJ0ZWQgaW50byBsb3ctbGV2ZWwgZGF0YSBmb3IgU3UuXG4vLy8gRm9yIGV4YW1wbGUgYHNwYW46IGFsbGAgYW5kIGBsb2NhdGlvbjogZmlyc3RgXG4vLy8gd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBzcGVjaWZpYyBudW1iZXJzLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vLyBAc2VlICRzdXN5XG4vLy8gQHNlZSBzdXN5LXBhcnNlXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyAtXG4vLy8gICBNYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIG5vcm1hbGl6ZS5cbi8vLyAgIFNlZSBgJHN1c3lgIGFuZCBgc3VzeS1wYXJzZSgpYCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vIEBwYXJhbSB7bWFwIHwgbnVsbH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdXNlIGFzIGdsb2JhbCByZWZlcmVuY2UsXG4vLy8gICBvciBgbnVsbGAgdG8gdXNlIGdsb2JhbCBzZXR0aW5ncy5cbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgTWFwIG9mIFN1c3kgY29uZmlndXJhdGlvbiBzZXR0aW5ncyxcbi8vLyAgIHdpdGggYWxsIHZhbHVlcyBub3JtYWxpemVkIGZvciBTdSBtYXRoIGZ1bmN0aW9ucy5cbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZShcbiAgJGNvbmZpZyxcbiAgJGNvbnRleHQ6IG51bGxcbikge1xuICAvLyBTcHJlYWRcbiAgQGVhY2ggJHNldHRpbmcgaW4gKCdzcHJlYWQnLCAnY29udGFpbmVyLXNwcmVhZCcpIHtcbiAgICAkdmFsdWU6IG1hcC1nZXQoJGNvbmZpZywgJHNldHRpbmcpO1xuXG4gICAgQGlmICR2YWx1ZSB7XG4gICAgICAkdmFsdWU6IHN1c3ktbm9ybWFsaXplLXNwcmVhZCgkdmFsdWUpO1xuICAgICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgkc2V0dGluZzogJHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29sdW1uc1xuICAkY29sdW1uczogbWFwLWdldCgkY29uZmlnLCAnY29sdW1ucycpO1xuXG4gIEBpZiAkY29sdW1ucyB7XG4gICAgJGNvbHVtbnM6IHN1c3ktbm9ybWFsaXplLWNvbHVtbnMoJGNvbHVtbnMsICRjb250ZXh0KTtcbiAgICAkY29uZmlnOiBtYXAtbWVyZ2UoJGNvbmZpZywgKCdjb2x1bW5zJzogJGNvbHVtbnMpKTtcbiAgfVxuXG4gIEBpZiBub3QgJGNvbHVtbnMge1xuICAgICRtYXA6IHR5cGUtb2YoJGNvbnRleHQpID09ICdtYXAnO1xuICAgICRjb2x1bW5zOiBpZigkbWFwLCBtYXAtZ2V0KCRjb250ZXh0LCAnY29sdW1ucycpLCBudWxsKTtcbiAgICAkY29sdW1uczogJGNvbHVtbnMgb3Igc3VzeS1nZXQoJ2NvbHVtbnMnKTtcbiAgfVxuXG4gIC8vIFNwYW5cbiAgJHNwYW46IG1hcC1nZXQoJGNvbmZpZywgJ3NwYW4nKTtcblxuICBAaWYgJHNwYW4ge1xuICAgICRzcGFuOiBzdXN5LW5vcm1hbGl6ZS1zcGFuKCRzcGFuLCAkY29sdW1ucyk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnc3Bhbic6ICRzcGFuKSk7XG4gIH1cblxuICAvLyBMb2NhdGlvblxuICAkbG9jYXRpb246IG1hcC1nZXQoJGNvbmZpZywgJ2xvY2F0aW9uJyk7XG5cbiAgQGlmICRsb2NhdGlvbiB7XG4gICAgJGxvY2F0aW9uOiBzdXN5LW5vcm1hbGl6ZS1sb2NhdGlvbigkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG4gICAgJGNvbmZpZzogbWFwLW1lcmdlKCRjb25maWcsICgnbG9jYXRpb24nOiAkbG9jYXRpb24pKTtcbiAgfVxuXG4gIEByZXR1cm4gJGNvbmZpZztcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBTcGFuXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgc3BhbmAgc2hvcnRoYW5kIGZvciBTdS5cbi8vLyBTdSBzcGFuIHN5bnRheCBhbGxvd3MgYW4gZXhwbGljaXQgbGVuZ3RoIChlLmcuIGAzZW1gKSxcbi8vLyB1bml0bGVzcyBjb2x1bW4tc3BhbiBudW1iZXIgKGUuZy4gYDNgIGNvbHVtbnMpLFxuLy8vIG9yIGFuIGV4cGxpY2l0IGxpc3Qgb2YgY29sdW1ucyAoZS5nLiBgKDMgNSA4KWApLlxuLy8vXG4vLy8gU3VzeSBzcGFuIHN5bnRheCBhbHNvIGFsbG93cyB0aGUgYGFsbGAga2V5d29yZCxcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNsaWNlIG9mIHRoZSBjb250ZXh0XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge251bWJlciB8IGxpc3QgfCAnYWxsJ30gJHNwYW4gLVxuLy8vICAgU3BhbiB2YWx1ZSB0byBub3JtYWxpemUuXG4vLy8gQHBhcmFtIHtsaXN0fSAkY29sdW1ucyAtXG4vLy8gICBOb3JtYWxpemVkIGxpc3Qgb2YgY29sdW1ucyBpbiB0aGUgZ3JpZFxuLy8vXG4vLy8gQHJldHVybiB7bnVtYmVyIHwgbGlzdH0gLVxuLy8vICAgTnVtYmVyIG9yIGxpc3QgdmFsdWUgZm9yIGAkc3BhbmBcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1zcGFuKFxuICAkc3BhbixcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KCdjb2x1bW5zJylcbikge1xuICBAaWYgKCRzcGFuID09ICdhbGwnKSB7XG4gICAgQHJldHVybiBsZW5ndGgoJGNvbHVtbnMpO1xuICB9XG5cbiAgQHJldHVybiAkc3Bhbjtcbn1cblxuXG5cbi8vIE5vcm1hbGl6ZSBDb2x1bW5zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8vIE5vcm1hbGl6ZSBgY29sdW1uYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IGNvbHVtbiBzeW50YXggb25seSBhbGxvd3MgY29sdW1uIGxpc3RzIChlLmcuIGAxMjBweCAxIDEgMSAxMjBweGApLlxuLy8vXG4vLy8gU3VzeSBzcGFuIHN5bnRheCBhbHNvIGFsbG93cyBhIHVuaXRsZXNzIGBzbGljZWAgbnVtYmVyIChlLmcgYG9mIDVgKSxcbi8vLyB3aGljaCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNsaWNlIG9mIHRoZSBjb250ZXh0XG4vLy8gaW4gbm9ybWFsaXphdGlvbi5cbi8vL1xuLy8vIEBncm91cCBfbm9ybWFsXG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBpbnRlZ2VyfSAkY29sdW1ucyAtXG4vLy8gICBMaXN0IG9mIGF2YWlsYWJsZSBjb2x1bW5zLFxuLy8vICAgb3IgdW5pdGxlc3MgaW50ZWdlciByZXByZXNlbnRpbmcgYSBzbGljZSBvZlxuLy8vICAgdGhlIGF2YWlsYWJsZSBjb250ZXh0LlxuLy8vIEBwYXJhbSB7bWFwIHwgbnVsbH0gJGNvbnRleHQgW251bGxdIC1cbi8vLyAgIE1hcCBvZiBTdXN5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgdG8gdXNlIGFzIGdsb2JhbCByZWZlcmVuY2UsXG4vLy8gICBvciBgbnVsbGAgdG8gYWNjZXNzIGdsb2JhbCBzZXR0aW5ncy5cbi8vL1xuLy8vIEByZXR1cm4ge2xpc3R9IC1cbi8vLyAgIENvbHVtbnMgbGlzdCB2YWx1ZSwgbm9ybWFsaXplZCBmb3IgU3UgaW5wdXQuXG4vLy9cbi8vLyBAdGhyb3dzXG4vLy8gICB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGEgc2xpY2Ugb2YgYXN5bW1ldHJpY2FsIGNvbnRleHRcbkBmdW5jdGlvbiBzdXN5LW5vcm1hbGl6ZS1jb2x1bW5zKFxuICAkY29sdW1ucyxcbiAgJGNvbnRleHQ6IG51bGxcbikge1xuICAkY29udGV4dDogJGNvbnRleHQgb3Igc3VzeS1zZXR0aW5ncygpO1xuXG4gIEBpZiB0eXBlLW9mKCRjb2x1bW5zKSA9PSAnbGlzdCcge1xuICAgIEByZXR1cm4gX3N1c3ktZmxhdHRlbigkY29sdW1ucyk7XG4gIH1cblxuICBAaWYgKHR5cGUtb2YoJGNvbHVtbnMpID09ICdudW1iZXInKSBhbmQgKHVuaXRsZXNzKCRjb2x1bW5zKSkge1xuICAgICRzcGFuOiAkY29sdW1ucztcbiAgICAkY29udGV4dDogbWFwLWdldCgkY29udGV4dCwgJ2NvbHVtbnMnKTtcbiAgICAkc3ltbWV0cmljYWw6IHN1c3ktcmVwZWF0KGxlbmd0aCgkY29udGV4dCksIG50aCgkY29udGV4dCwgMSkpO1xuXG4gICAgQGlmICgkY29udGV4dCA9PSAkc3ltbWV0cmljYWwpIHtcbiAgICAgIEByZXR1cm4gc3VzeS1yZXBlYXQoJHNwYW4sIG50aCgkY29udGV4dCwgMSkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGFjdHVhbDogJ29mIGAjeyRzcGFufWAnO1xuICAgICAgJGNvbHVtbnM6ICdncmlkLWNvbHVtbnMgYCN7JGNvbnRleHR9YCc7XG4gICAgICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICAgICAnY29udGV4dC1zbGljZSAjeyRhY3R1YWx9IGNhbiBub3QgYmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiAjeyRjb2x1bW5zfS4nLFxuICAgICAgICAnc3VzeS1ub3JtYWxpemUtY29sdW1ucycpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGNvbHVtbnM7XG59XG5cblxuXG4vLyBOb3JtYWxpemUgU3ByZWFkXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLy8gTm9ybWFsaXplIGBzcHJlYWRgIHNob3J0aGFuZCBmb3IgU3UuXG4vLy8gU3Ugc3ByZWFkIHN5bnRheCBvbmx5IGFsbG93cyB0aGUgbnVtYmVycyBgLTFgLCBgMGAsIG9yIGAxYCDigJNcbi8vLyByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBndXR0ZXJzIGNvdmVyZWRcbi8vLyBpbiByZWxhdGlvbiB0byBjb2x1bW5zIHNwYW5uZWQuXG4vLy9cbi8vLyBTdXN5IHNwcmVhZCBzeW50YXggYWxzbyBhbGxvd3Mga2V5d29yZHMgZm9yIGVhY2ggdmFsdWUg4oCTXG4vLy8gYG5hcnJvd2AgZm9yIGAtMWAsIGB3aWRlYCBmb3IgYDBgLCBvciBgd2lkZXJgIGZvciBgMWAg4oCTXG4vLy8gd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBpbnRlZ2Vyc1xuLy8vIGluIG5vcm1hbGl6YXRpb24uXG4vLy9cbi8vLyBAZ3JvdXAgX25vcm1hbFxuLy8vXG4vLy8gQHBhcmFtIHswIHwgMSB8IC0xIHwgJ25hcnJvdycgfCAnd2lkZScgfCAnd2lkZXInfSAkc3ByZWFkIC1cbi8vLyAgIFNwcmVhZCBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycywgcmVsYXRpdmUgdG8gYSBjb2x1bW4tY291bnQg4oCUXG4vLy8gICBlaXRoZXIgYG5hcnJvd2AgKC0xKSwgYHdpZGVgICgwKSwgb3IgYHdpZGVyYCAoMSlcbi8vL1xuLy8vIEByZXR1cm4ge251bWJlcn0gLVxuLy8vICAgTnVtZXJpYyB2YWx1ZSBmb3IgYCRzcHJlYWRgXG5AZnVuY3Rpb24gc3VzeS1ub3JtYWxpemUtc3ByZWFkKFxuICAkc3ByZWFkXG4pIHtcbiAgJG5vcm1hbC1zcHJlYWQ6IChcbiAgICAnbmFycm93JzogLTEsXG4gICAgJ3dpZGUnOiAwLFxuICAgICd3aWRlcic6IDEsXG4gICk7XG5cbiAgQHJldHVybiBtYXAtZ2V0KCRub3JtYWwtc3ByZWFkLCAkc3ByZWFkKSBvciAkc3ByZWFkO1xufVxuXG5cblxuLy8gTm9ybWFsaXplIExvY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vLyBOb3JtYWxpemUgYGxvY2F0aW9uYCBzaG9ydGhhbmQgZm9yIFN1LlxuLy8vIFN1IGxvY2F0aW9uIHN5bnRheCByZXF1aXJlcyB0aGUgKDEtaW5kZXhlZCkgbnVtYmVyIGZvciBhIGNvbHVtbi5cbi8vL1xuLy8vIFN1c3kgYWxzbyBhbGxvd3MgdGhlIGBmaXJzdGAgYW5kIGBsYXN0YCBrZXl3b3Jkcyxcbi8vLyB3aGVyZSBgZmlyc3RgIGlzIGFsd2F5cyBgMWAsXG4vLy8gYW5kIGBsYXN0YCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHNwYW4gYW5kIGNvbHVtbiB2YWx1ZXMuXG4vLy8gQm90aCBrZXl3b3JkcyBhcmUgbm9ybWFsaXplZCBpbnRvIGFuIGludGVnZXIgaW5kZXhcbi8vLyBpbiBub3JtYWxpemF0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIF9ub3JtYWxcbi8vL1xuLy8vIEBwYXJhbSB7bnVtYmVyfSAkc3BhbiAtXG4vLy8gICBOdW1iZXIgb2YgZ3JpZC1jb2x1bW5zIHRvIGJlIHNwYW5uZWRcbi8vLyBAcGFyYW0ge2ludGVnZXIgfCAnZmlyc3QnIHwgJ2xhc3QnfSAkbG9jYXRpb24gLVxuLy8vICAgU3RhcnRpbmcgKDEtaW5kZXhlZCkgY29sdW1uIHBvc2l0aW9uIG9mIGEgc3Bhbixcbi8vLyAgIG9yIGEgbmFtZWQgbG9jYXRpb24ga2V5d29yZC5cbi8vLyBAcGFyYW0ge2xpc3R9ICRjb2x1bW5zIC1cbi8vLyAgIEFscmVhZHktbm9ybWFsaXplZCBsaXN0IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4vLy9cbi8vLyBAcmV0dXJuIHtpbnRlZ2VyfSAtXG4vLy8gICBOdW1lcmljIHZhbHVlIGZvciBgJGxvY2F0aW9uYFxuQGZ1bmN0aW9uIHN1c3ktbm9ybWFsaXplLWxvY2F0aW9uKFxuICAkc3BhbixcbiAgJGxvY2F0aW9uLFxuICAkY29sdW1uc1xuKSB7XG4gICRjb3VudDogbGVuZ3RoKCRjb2x1bW5zKTtcbiAgJG5vcm1hbC1sb2NhdGlvbnM6IChcbiAgICAnZmlyc3QnOiAxLFxuICAgICdhbHBoYSc6IDEsXG4gICAgJ2xhc3QnOiAkY291bnQgLSAkc3BhbiArIDEsXG4gICAgJ29tZWdhJzogJGNvdW50IC0gJHNwYW4gKyAxLFxuICApO1xuXG4gIEByZXR1cm4gbWFwLWdldCgkbm9ybWFsLWxvY2F0aW9ucywgJGxvY2F0aW9uKSBvciAkbG9jYXRpb247XG59XG4iLCIvLy8gU2hvcnRoYW5kIFN5bnRheCBQYXJzZXJcbi8vLyA9PT09PT09PT09PT09PT09PT09PT09PVxuLy8vIFRoZSBzeW50YXggcGFyc2VyIGNvbnZlcnRzIFtzaG9ydGhhbmQgc3ludGF4XVtzaG9ydF1cbi8vLyBpbnRvIGEgbWFwIG9mIHNldHRpbmdzIHRoYXQgY2FuIGJlIGNvbXBhcmVkL21lcmdlZCB3aXRoXG4vLy8gb3RoZXIgY29uZmlnIG1hcHMgYW5kIGdsb2JhbCBzZXR0aW5nLlxuLy8vXG4vLy8gW3Nob3J0XTogYXBpLmh0bWxcbi8vL1xuLy8vIEBncm91cCBfcGFyc2VyXG5cblxuXG4vLyBQYXJzZVxuLy8gLS0tLS1cbi8vLyBUaGUgYHBhcnNlYCBmdW5jdGlvbiBwcm92aWRlcyBhbGwgdGhlIHN5bnRheC1zdWdhciBpbiBTdXN5LFxuLy8vIGNvbnZlcnRpbmcgdXNlciBzaG9ydGhhbmRcbi8vLyBpbnRvIGEgdXNhYmxlIG1hcCBvZiBrZXlzIGFuZCB2YWx1ZXNcbi8vLyB0aGF0IGNhbiBiZSBub3JtYWxpemVkIGFuZCBwYXNzZWQgdG8gU3UuXG4vLy9cbi8vLyBAZ3JvdXAgX3BhcnNlclxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNob3J0aGFuZCAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSBzcGFuLFxuLy8vICAgb3B0aW9uYWxseSBjb250YWluaW5nOlxuLy8vICAgLSBhIGNvdW50LCBsZW5ndGgsIG9yIGNvbHVtbi1saXN0IHNwYW47XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBuYXJyb3dgLCBgd2lkZWAsIG9yIGB3aWRlcmAgZm9yIG9wdGlvbmFsbHkgc3ByZWFkaW5nXG4vLy8gICAgIGFjcm9zcyBhZGphY2VudCBndXR0ZXJzO1xuLy8vICAgLSBgb2YgJG4gPHNwcmVhZD5gIGZvciBhdmFpbGFibGUgZ3JpZCBjb2x1bW5zXG4vLy8gICAgIGFuZCBzcHJlYWQgb2YgdGhlIGNvbnRhaW5lclxuLy8vICAgICAoc3BhbiBjb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgaW4gdGhlIGNvbnRleHQgb2Ygc3ltbWV0cmljYWwgZ3JpZHMpO1xuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzXG4vLy8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLVxuLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLFxuLy8vICAgb25seSBwYXJzaW5nIGNvbnRleHQgYW5kIGNvbnRhaW5lci1zcHJlYWQuXG4vLy8gICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFjY2VwdCBzcGFubGVzcyB2YWx1ZXMsXG4vLy8gICBsaWtlIHRoZSBgZ3V0dGVycygpYCBzeW50YXguXG4vLy8gICBXaGVuIHBhcnNpbmcgY29udGV4dC1vbmx5LFxuLy8vICAgdGhlIGBvZmAgaW5kaWNhdG9yIGlzIG9wdGlvbmFsLlxuLy8vXG4vLy8gQHJldHVybiB7bWFwfSAtXG4vLy8gICBNYXAgb2Ygc3BhbiBhbmQgZ3JpZCBzZXR0aW5nc1xuLy8vICAgcGFyc2VkIGZyb20gc2hvcnRoYW5kIGlucHV0IOKAk1xuLy8vICAgaW5jbHVkaW5nIGFsbCB0aGUgcHJvcGVydGllcyBhdmFpbGFibGUgZ2xvYmFsbHkg4oCTXG4vLy8gICBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYHNwcmVhZGAsIGBjb250YWluZXItc3ByZWFkYCDigJNcbi8vLyAgIGFsb25nIHdpdGggdGhlIHNwYW4tc3BlY2lmaWMgcHJvcGVydGllc1xuLy8vICAgYHNwYW5gLCBhbmQgYGxvY2F0aW9uYC5cbi8vL1xuLy8vIEB0aHJvd1xuLy8vICAgd2hlbiBhIHNob3J0aGFuZCB2YWx1ZSBpcyBub3QgcmVjb2duaXplZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UoXG4gICRzaG9ydGhhbmQsXG4gICRjb250ZXh0LW9ubHk6IGZhbHNlXG4pIHtcbiAgJHBhcnNlLWVycm9yOiAnVW5rbm93biBzaG9ydGhhbmQgcHJvcGVydHk6JztcbiAgJG9wdGlvbnM6IChcbiAgICAnZmlyc3QnOiAnbG9jYXRpb24nLFxuICAgICdsYXN0JzogJ2xvY2F0aW9uJyxcbiAgICAnYWxwaGEnOiAnbG9jYXRpb24nLFxuICAgICdvbWVnYSc6ICdsb2NhdGlvbicsXG4gICAgJ25hcnJvdyc6ICdzcHJlYWQnLFxuICAgICd3aWRlJzogJ3NwcmVhZCcsXG4gICAgJ3dpZGVyJzogJ3NwcmVhZCcsXG4gICk7XG5cbiAgJHJldHVybjogKCk7XG4gICRzcGFuOiBudWxsO1xuICAkY29sdW1uczogbnVsbDtcblxuICAkb2Y6IG51bGw7XG4gICRuZXh0OiBmYWxzZTtcblxuICAvLyBBbGxvdyBjb250ZXh0LW9ubHkgc2hvcnRoYW5kLCB3aXRob3V0IHNwYW5cbiAgQGlmICgkY29udGV4dC1vbmx5KSBhbmQgKG5vdCBpbmRleCgkc2hvcnRoYW5kLCAnb2YnKSkge1xuICAgIEBpZiBzdS12YWxpZC1jb2x1bW5zKCRzaG9ydGhhbmQsICdmYWlsLXNpbGVudCcpIHtcbiAgICAgICRzaG9ydGhhbmQ6ICdvZicgJHNob3J0aGFuZDtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzaG9ydGhhbmQ6IGpvaW4oJ29mJywgJHNob3J0aGFuZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gbG9vcCB0aHJvdWdoIHRoZSBzaG9ydGhhbmQgbGlzdFxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkc2hvcnRoYW5kKSB7XG4gICAgJGl0ZW06IG50aCgkc2hvcnRoYW5kLCAkaSk7XG4gICAgJHR5cGU6IHR5cGUtb2YoJGl0ZW0pO1xuICAgICRlcnJvcjogZmFsc2U7XG4gICAgJGRldGFpbHM6ICdbI3skdHlwZX1dIGAjeyRpdGVtfWAnO1xuXG4gICAgLy8gaWYgd2Uga25vdyB3aGF0J3Mgc3VwcG9zZWQgdG8gYmUgY29taW5nIG5leHTigKZcbiAgICBAaWYgJG5leHQge1xuXG4gICAgICAvLyBBZGQgdG8gdGhlIHJldHVybiBtYXBcbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJG5leHQ6ICRpdGVtKSk7XG5cbiAgICAgIC8vIFJlc2V0IG5leHQgdG8gYGZhbHNlYFxuICAgICAgJG5leHQ6IGZhbHNlO1xuXG4gICAgfSBAZWxzZSB7IC8vIElmIHdlIGRvbid0IGtub3cgd2hhdCdzIHN1cHBvc2VkIHRvIGJlIGNvbWluZ+KAplxuXG4gICAgICAvLyBLZXl3b3Jkc+KAplxuICAgICAgQGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBDaGVjayB0aGUgbWFwIGZvciBrZXl3b3Jkc+KAplxuICAgICAgICBAaWYgbWFwLWhhcy1rZXkoJG9wdGlvbnMsICRpdGVtKSB7XG4gICAgICAgICAgJHNldHRpbmc6IG1hcC1nZXQoJG9wdGlvbnMsICRpdGVtKTtcblxuICAgICAgICAgIC8vIFNwcmVhZCBjb3VsZCBiZSBvbiB0aGUgc3BhbiBvciB0aGUgY29udGFpbmVy4oCmXG4gICAgICAgICAgQGlmICgkc2V0dGluZyA9PSAnc3ByZWFkJykgYW5kICgkb2YpIHtcbiAgICAgICAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoJ2NvbnRhaW5lci1zcHJlYWQnOiAkaXRlbSkpO1xuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgkc2V0dGluZzogJGl0ZW0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBAZWxzZSBpZiAoJGl0ZW0gPT0gJ2FsbCcpIHtcbiAgICAgICAgICAvLyBgQWxsYCBpcyBhIHNwYW4gc2hvcnRjdXRcbiAgICAgICAgICAkc3BhbjogJ2FsbCc7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdhdCcpIHtcbiAgICAgICAgICAvLyBTb21lIGtleXdvcmRzIHNldHVwIHdoYXQncyBuZXh04oCmXG4gICAgICAgICAgJG5leHQ6ICdsb2NhdGlvbic7XG4gICAgICAgIH0gQGVsc2UgaWYgKCRpdGVtID09ICdzZXQtZ3V0dGVycycpIHtcbiAgICAgICAgICAkbmV4dDogJ2d1dHRlcnMnO1xuICAgICAgICB9IEBlbHNlIGlmICgkaXRlbSA9PSAnb2YnKSB7XG4gICAgICAgICAgJG9mOiB0cnVlO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAkZXJyb3I6IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgfSBAZWxzZSBpZiAoJHR5cGUgPT0gJ251bWJlcicpIG9yICgkdHlwZSA9PSAnbGlzdCcpIHsgLy8gTnVtYmVycyAmIGxpc3Rz4oCmXG5cbiAgICAgICAgQGlmIG5vdCAoJHNwYW4gb3IgJG9mKSB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHNwYW4sIGFuZCB3ZSdyZSBub3QgZXhwZWN0aW5nIGNvbnRleHTigKZcbiAgICAgICAgICAkc3BhbjogJGl0ZW07XG4gICAgICAgIH0gQGVsc2UgaWYgKCRvZikgYW5kIChub3QgJGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBXZSBhcmUgZXhwZWN0aW5nIGNvbnRleHTigKZcbiAgICAgICAgICAkY29sdW1uczogJGl0ZW07XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRlcnJvcjogdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJGVycm9yOiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZXJyb3Ige1xuICAgICAgQHJldHVybiBfc3VzeS1lcnJvcignI3skcGFyc2UtZXJyb3J9ICN7JGRldGFpbHN9JywgJ3N1c3ktcGFyc2UnKTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIHNwYW4sIG1lcmdlIGl0IGluXG4gIEBpZiAkc3BhbiB7XG4gICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgnc3Bhbic6ICRzcGFuKSk7XG4gIH1cblxuICAvLyBJZiB3ZSBoYXZlIGNvbHVtbnMsIG1lcmdlIHRoZW0gaW5cbiAgQGlmICRjb2x1bW5zIHtcbiAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCdjb2x1bW5zJzogJGNvbHVtbnMpKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWFwIG9mIHNldHRpbmdz4oCmXG4gIEByZXR1cm4gJHJldHVybjtcbn1cbiIsIi8vLyBTeW50YXggVXRpbGl0aWVzIGZvciBFeHRlbmRpbmcgU3VzeVxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlcmUgYXJlIG1hbnkgc3RlcHMgaW52b2x2ZWRcbi8vLyB3aGVuIHRyYW5zbGF0aW5nIGJldHdlZW4gdGhlIFN1c3kgc3ludGF4IGxheWVyLFxuLy8vIGFuZCB0aGUgU3UgY29yZSBtYXRoLlxuLy8vIFRoYXQgZW50aXJlIHByb2Nlc3MgY2FuIGJlIGNvbmRlbnNlZCB3aXRoIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4vLy8gRm9yIGFueW9uZSB0aGF0IHdhbnRzIHRvIGFjY2VzcyB0aGUgZnVsbCBwb3dlciBvZiBTdXN5LFxuLy8vIGFuZCBidWlsZCB0aGVpciBvd24gcGx1Z2lucywgZnVuY3Rpb25zLCBvciBtaXhpbnMg4oCTXG4vLy8gdGhpcyBpcyB0aGUgcHJpbWFyeSBBUEkgZm9yIGNvbXBpbGluZyB1c2VyIGlucHV0LFxuLy8vIGFuZCBhY2Nlc3NpbmcgdGhlIGNvcmUgbWF0aC5cbi8vL1xuLy8vIFRoaXMgaXMgdGhlIHNhbWUgdGVjaG5pcXVlIHdlIHVzZSBpbnRlcm5hbGx5LFxuLy8vIHRvIGtlZXAgb3VyIEFQSSBsYXllciBzaW1wbGUgYW5kIGxpZ2h0LXdlaWdodC5cbi8vLyBFdmVyeSBmdW5jdGlvbiBhY2NlcHRzIHR3byBhcmd1bWVudHMsXG4vLy8gYSBcInNob3J0aGFuZFwiIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGFuIG9yIGNvbnRleHQsXG4vLy8gYW5kIGFuIG9wdGlvbmFsIHNldHRpbmdzLW1hcCB0byBvdmVycmlkZSBnbG9iYWwgZGVmYXVsdHMuXG4vLy9cbi8vLyAtIFVzZSBgc3VzeS1jb21waWxlKClgIHRvIHBhcnNlLCBtZXJnZSwgYW5kIG5vcm1hbGl6ZVxuLy8vICAgYWxsIHRoZSB1c2VyIHNldHRpbmdzIGludG8gYSBzaW5nbGUgbWFwLlxuLy8vIC0gVGhlbiB1c2UgYHN1LWNhbGwoKWAgdG8gY2FsbCBvbmUgb2YgdGhlIGNvcmUgbWF0aCBmdW5jdGlvbnMsXG4vLy8gICB3aXRoIHdoYXRldmVyIGRhdGEgaXMgbmVlZGVkIGZvciB0aGF0IGZ1bmN0aW9uLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vIEBzZWUgc3VzeS1jb21waWxlXG4vLy8gQHNlZSBzdS1jYWxsXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gU3VzeSBBUEkgYGd1dHRlcmAgZnVuY3Rpb25cbi8vLyAgIEBmdW5jdGlvbiBzdXN5LWd1dHRlcihcbi8vLyAgICAgJGNvbnRleHQ6IHN1c3ktZ2V0KCdjb2x1bW5zJyksXG4vLy8gICAgICRjb25maWc6ICgpXG4vLy8gICApIHtcbi8vLyAgICAgLy8gY29tcGlsZSBhbmQgbm9ybWFsaXplIGFsbCB1c2VyIGFyZ3VtZW50cyBhbmQgZ2xvYmFsIHNldHRpbmdzXG4vLy8gICAgICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTtcbi8vLyAgICAgLy8gY2FsbCBgc3UtZ3V0dGVyYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhXG4vLy8gICAgIEByZXR1cm4gc3UtY2FsbCgnc3UtZ3V0dGVyJywgJGNvbnRleHQpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFNhbXBsZSBgc3BhbmAgbWl4aW4gZm9yIGZsb2F0ZWQgZ3JpZHNcbi8vLyAgIEBtaXhpbiBzcGFuKFxuLy8vICAgICAkc3Bhbixcbi8vLyAgICAgJGNvbmZpZzogKClcbi8vLyAgICkge1xuLy8vICAgICAkY29udGV4dDogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcbi8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkY29udGV4dCk7XG4vLy9cbi8vLyAgICAgJGVuZDogbWFwLWdldCgkY29udGV4dCwgJ3NwYW4nKSArIG1hcC1nZXQoJGNvbnRleHQsICdsb2NhdGlvbicpIC0gMTtcbi8vLyAgICAgJGlzLWxhc3Q6ICgkZW5kID09IG1hcC1nZXQoJGNvbnRleHQsICdjb2x1bW5zJykpO1xuLy8vXG4vLy8gICAgIEBpZiAkaXMtbGFzdCB7XG4vLy8gICAgICAgZmxvYXQ6IHJpZ2h0O1xuLy8vICAgICB9IEBlbHNlIHtcbi8vLyAgICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgICBtYXJnaW4tcmlnaHQ6IHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbi8vLyAgICAgfVxuLy8vICAgfVxuXG5cblxuLy8gQ29tcGlsZVxuLy8gLS0tLS0tLVxuLy8vIFN1c3kncyBzeW50YXggbGF5ZXIgaGFzIHZhcmlvdXMgbW92aW5nIHBhcnRzLFxuLy8vIHdpdGggc3ludGF4LXBhcnNpbmcgZm9yIHRoZSBncmlkL3NwYW4gc2hvcnRoYW5kLFxuLy8vIGFuZCBub3JtYWxpemF0aW9uIGZvciBlYWNoIG9mIHRoZSByZXN1bHRpbmcgdmFsdWVzLlxuLy8vIFRoZSBjb21waWxlIGZ1bmN0aW9uIHJvbGxzIHRoaXMgYWxsIHRvZ2V0aGVyXG4vLy8gaW4gYSBzaW5nbGUgY2FsbCDigJNcbi8vLyBmb3IgcXVpY2sgYWNjZXNzIGZyb20gb3VyIGludGVybmFsIEFQSSBmdW5jdGlvbnMsXG4vLy8gb3IgYW55IGFkZGl0aW9uYWwgZnVuY3Rpb25zIGFuZCBtaXhpbnMgeW91IGFkZCB0byB5b3VyIHByb2plY3QuXG4vLy8gUGFzcyB1c2VyIGlucHV0IGFuZCBjb25maWd1cmF0aW9uIG1hcHMgdG8gdGhlIGNvbXBpbGVyLFxuLy8vIGFuZCBpdCB3aWxsIGhhbmQgYmFjayBhIG1hcCBvZiB2YWx1ZXMgcmVhZHkgZm9yIFN1LlxuLy8vIENvbWJpbmUgdGhpcyB3aXRoIHRoZSBgc3UtY2FsbGAgZnVuY3Rpb25cbi8vLyB0byBxdWlja2x5IHBhcnNlLCBub3JtYWxpemUsIGFuZCBwcm9jZXNzIGdyaWQgY2FsY3VsYXRpb25zLlxuLy8vXG4vLy8gQGdyb3VwIHBsdWdpbi11dGlsc1xuLy8vIEBzZWUgc3UtY2FsbFxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0IHwgbWFwfSAkc2hvcnQgW251bGxdIC1cbi8vLyAgIFNob3J0aGFuZCBleHByZXNzaW9uIHRvIGRlZmluZSB0aGUgd2lkdGggb2YgdGhlIHNwYW4sXG4vLy8gICBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGEgY291bnQsIGxlbmd0aCwgb3IgY29sdW1uLWxpc3Qgc3Bhbjtcbi8vLyAgIC0gYGF0ICRuYCwgYGZpcnN0YCwgb3IgYGxhc3RgIGxvY2F0aW9uIG9uIGFzeW1tZXRyaWNhbCBncmlkcztcbi8vLyAgIC0gYG5hcnJvd2AsIGB3aWRlYCwgb3IgYHdpZGVyYCBmb3Igb3B0aW9uYWxseSBzcHJlYWRpbmdcbi8vLyAgICAgYWNyb3NzIGFkamFjZW50IGd1dHRlcnM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIChzcGFuIGNvdW50cyBsaWtlIGBvZiA2YCBhcmUgb25seSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyk7XG4vLy8gICAtIGFuZCBgc2V0LWd1dHRlcnMgJG5gIHRvIG92ZXJyaWRlIGdsb2JhbCBndXR0ZXIgc2V0dGluZ3Ncbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbbnVsbF0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4vLy8gQHBhcmFtIHtib29sfSAkY29udGV4dC1vbmx5IFtmYWxzZV0gLVxuLy8vICAgQWxsb3cgdGhlIHBhcnNlciB0byBpZ25vcmUgc3BhbiBhbmQgc3Bhbi1zcHJlYWQgdmFsdWVzLFxuLy8vICAgb25seSBwYXJzaW5nIGNvbnRleHQgYW5kIGNvbnRhaW5lci1zcHJlYWRcbi8vL1xuLy8vIEByZXR1cm4ge21hcH0gLVxuLy8vICAgUGFyc2VkIGFuZCBub3JtYWxpemVkIG1hcCBvZiBzZXR0aW5ncyxcbi8vLyAgIGJhc2VkIG9uIGdsb2JhbCBhbmQgbG9jYWwgY29uZmlndXJhdGlvbixcbi8vLyAgIGFsb25nd2l0aCBzaG9ydGhhZCBhZGp1c3RtZW50cy5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLVxuLy8vICAgJHVzZXItaW5wdXQ6IDMgd2lkZSBvZiBzdXN5LXJlcGVhdCg2LCAxMjBweCkgc2V0LWd1dHRlcnMgMTBweDtcbi8vLyAgICRncmlkLWRhdGE6IHN1c3ktY29tcGlsZSgkdXNlci1pbnB1dCwgJHN1c3kpO1xuLy8vXG4vLy8gICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJGdyaWQtZGF0YSB7XG4vLy8gICAgIC8qICN7JGtleX06ICN7JHZhbHVlfSwgKi9cbi8vLyAgIH1cbkBmdW5jdGlvbiBzdXN5LWNvbXBpbGUoXG4gICRzaG9ydDogbnVsbCxcbiAgJGNvbmZpZzogbnVsbCxcbiAgJGNvbnRleHQtb25seTogZmFsc2Vcbikge1xuICAvLyBHZXQgYW5kIG5vcm1hbGl6ZSBjb25maWdcbiAgJGNvbmZpZzogaWYoJGNvbmZpZywgc3VzeS1zZXR0aW5ncygkY29uZmlnKSwgc3VzeS1zZXR0aW5ncygpKTtcbiAgJG5vcm1hbC1jb25maWc6IHN1c3ktbm9ybWFsaXplKCRjb25maWcpO1xuXG4gIC8vIFBhcnNlIGFuZCBub3JtYWxpemUgc2hvcnRoYW5kXG4gICRub3JtYWwtc2hvcnQ6ICgpO1xuXG4gIEBpZiAkc2hvcnQge1xuICAgIEBpZiAodHlwZS1vZigkc2hvcnQpICE9ICdtYXAnKSBhbmQgKGxlbmd0aCgkc2hvcnQpID4gMCkge1xuICAgICAgJHNob3J0OiBzdXN5LXBhcnNlKCRzaG9ydCwgJGNvbnRleHQtb25seSk7XG4gICAgfVxuXG4gICAgJG5vcm1hbC1zaG9ydDogc3VzeS1ub3JtYWxpemUoJHNob3J0LCAkbm9ybWFsLWNvbmZpZyk7XG4gIH1cblxuICAvLyBNZXJnZSBhbmQgcmV0dXJuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRub3JtYWwtY29uZmlnLCAkbm9ybWFsLXNob3J0KTtcbn1cblxuXG5cbi8vIENhbGxcbi8vIC0tLS1cbi8vLyBUaGUgU3VzeSBwYXJzaW5nIGFuZCBub3JtYWxpemF0aW9uIHByb2Nlc3Ncbi8vLyByZXN1bHRzIGluIGEgbWFwIG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsXG4vLy8gbXVjaCBsaWtlIHRoZSBnbG9iYWwgYCRzdXN5YCBzZXR0aW5ncyBtYXAuXG4vLy8gSW4gb3JkZXIgdG8gcGFzcyB0aGF0IGluZm9ybWF0aW9uIGFsb25nIHRvIFN1IG1hdGggZnVuY3Rpb25zLFxuLy8vIHRoZSBwcm9wZXIgdmFsdWVzIGhhdmUgdG8gYmUgcGlja2VkIG91dCxcbi8vLyBhbmQgY29udmVydGVkIHRvIGFyZ3VtZW50cy5cbi8vL1xuLy8vIFRoZSBgc3UtY2FsbGAgZnVuY3Rpb24gc3RyZWFtbGluZXMgdGhhdCBwcm9jZXNzLFxuLy8vIHdlZWRpbmcgb3V0IHRoZSB1bm5lY2Vzc2FyeSBkYXRhLFxuLy8vIGFuZCBwYXNzaW5nIHRoZSByZXN0IGFsb25nIHRvIFN1IGluIHRoZSBwcm9wZXIgZm9ybWF0LlxuLy8vIENvbWJpbmUgdGhpcyB3aXRoIGBzdXN5LWNvbXBpbGVgIHRvIHF1aWNrbHkgcGFyc2UsXG4vLy8gbm9ybWFsaXplLCBhbmQgcHJvY2VzcyBncmlkIGNhbGN1bGF0aW9ucy5cbi8vL1xuLy8vIEBncm91cCBwbHVnaW4tdXRpbHNcbi8vL1xuLy8vIEByZXF1aXJlIHN1LXNwYW5cbi8vLyBAcmVxdWlyZSBzdS1ndXR0ZXJcbi8vLyBAcmVxdWlyZSBzdS1zbGljZVxuLy8vIEBzZWUgc3VzeS1jb21waWxlXG4vLy9cbi8vLyBAcGFyYW0geydzdS1zcGFuJyB8ICdzdS1ndXR0ZXInIHwgJ3N1LXNsaWNlJ30gJG5hbWUgLVxuLy8vICAgTmFtZSBvZiB0aGUgU3UgbWF0aCBmdW5jdGlvbiB0byBjYWxsLlxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIC1cbi8vLyAgIFBhcnNlZCBhbmQgbm9ybWFsaXplZCBtYXAgb2YgU3VzeSBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4vLy8gICB0byB1c2UgZm9yIG1hdGgtZnVuY3Rpb24gYXJndW1lbnRzLlxuLy8vXG4vLy8gQHJldHVybiB7Kn0gLVxuLy8vICAgUmVzdWx0cyBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLlxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtXG4vLy8gICAkdXNlci1pbnB1dDogMyB3aWRlIG9mIHN1c3ktcmVwZWF0KDYsIDEyMHB4KSBzZXQtZ3V0dGVycyAxMHB4O1xuLy8vICAgJGdyaWQtZGF0YTogc3VzeS1jb21waWxlKCR1c2VyLWlucHV0LCAkc3VzeSk7XG4vLy9cbi8vLyAgIC5zdS1zcGFuIHtcbi8vLyAgICAgd2lkdGg6IHN1LWNhbGwoJ3N1LXNwYW4nLCAkZ3JpZC1kYXRhKTtcbi8vLyAgIH1cbkBmdW5jdGlvbiBzdS1jYWxsKFxuICAkbmFtZSxcbiAgJGNvbmZpZ1xuKSB7XG4gICRncmlkLWZ1bmN0aW9uLWFyZ3M6IChcbiAgICAnc3Utc3Bhbic6ICgnc3BhbicsICdjb2x1bW5zJywgJ2d1dHRlcnMnLCAnc3ByZWFkJywgJ2NvbnRhaW5lci1zcHJlYWQnLCAnbG9jYXRpb24nKSxcbiAgICAnc3UtZ3V0dGVyJzogKCdjb2x1bW5zJywgJ2d1dHRlcnMnLCAnY29udGFpbmVyLXNwcmVhZCcpLFxuICAgICdzdS1zbGljZSc6ICgnc3BhbicsICdjb2x1bW5zJywgJ2xvY2F0aW9uJyksXG4gICk7XG5cbiAgJGFyZ3M6IG1hcC1nZXQoJGdyaWQtZnVuY3Rpb24tYXJncywgJG5hbWUpO1xuXG4gIEBpZiBub3QgJGFyZ3Mge1xuICAgICRvcHRpb25zOiAnVHJ5IG9uZSBvZiB0aGVzZTogI3ttYXAta2V5cygkZ3JpZC1mdW5jdGlvbi1hcmdzKX0nO1xuICAgIEByZXR1cm4gX3N1c3ktZXJyb3IoXG4gICAgICAnI3skbmFtZX0gaXMgbm90IGEgcHVibGljIFN1IGZ1bmN0aW9uLiAjeyRvcHRpb25zfScsXG4gICAgICAnc3UtY2FsbCcpO1xuICB9XG5cbiAgJGNhbGw6IGlmKGZ1bmN0aW9uLWV4aXN0cygnZ2V0LWZ1bmN0aW9uJyksIGdldC1mdW5jdGlvbigkbmFtZSksICRuYW1lKTtcbiAgJG91dHB1dDogKCk7XG5cbiAgQGVhY2ggJGFyZyBpbiAkYXJncyB7XG4gICAgJHZhbHVlOiBtYXAtZ2V0KCRjb25maWcsICRhcmcpO1xuICAgICRvdXRwdXQ6IGlmKCR2YWx1ZSwgbWFwLW1lcmdlKCRvdXRwdXQsICgkYXJnOiAkdmFsdWUpKSwgJG91dHB1dCk7XG4gIH1cblxuICBAcmV0dXJuIGNhbGwoJGNhbGwsICRvdXRwdXQuLi4pO1xufVxuIiwiLy8vIFN1c3kzIEFQSSBGdW5jdGlvbnNcbi8vLyA9PT09PT09PT09PT09PT09PT09XG4vLy8gVGhlc2UgdGhyZWUgZnVuY3Rpb25zIGZvcm0gdGhlIGNvcmUgb2YgU3VzeSdzXG4vLy8gbGF5b3V0LWJ1aWxkaW5nIGdyaWQgQVBJLlxuLy8vXG4vLy8gLSBVc2UgYHNwYW4oKWAgYW5kIGBndXR0ZXIoKWAgdG8gcmV0dXJuIGFueSBncmlkLXdpZHRoLFxuLy8vICAgYW5kIGFwcGx5IHRoZSByZXN1bHRzIHdoZXJldmVyIHlvdSBuZWVkIHRoZW06XG4vLy8gICBDU1MgYHdpZHRoYCwgYG1hcmdpbmAsIGBwYWRkaW5nYCwgYGZsZXgtYmFzaXNgLCBgdHJhbnNmb3JtYCwgZXRjLlxuLy8vIC0gRm9yIGFzeW1tZXRyaWNhbC1mbHVpZCBncmlkcyxcbi8vLyAgIGBzbGljZSgpYCBjYW4gaGVscCBtYW5hZ2UgeW91ciBuZXN0aW5nIGNvbnRleHQuXG4vLy9cbi8vLyBBbGwgdGhyZWUgZnVuY3Rpb25zIGNvbWUgd2l0aCBhbiB1bnByZWZpeGVkIGFsaWFzIGJ5IGRlZmF1bHQsXG4vLy8gdXNpbmcgdGhlIGBzdXN5YCBpbXBvcnQuXG4vLy8gSW1wb3J0IHRoZSBgc3VzeS1wcmVmaXhgIHBhcnRpYWwgaW5zdGVhZCxcbi8vLyBpZiB5b3Ugb25seSBvbmx5IHdhbnQgcHJlZml4ZWQgdmVyc2lvbnMgb2YgdGhlIEFQSS5cbi8vL1xuLy8vIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyB0aGUgXCJTdVwiIGNvcmUtbWF0aCBmdW5jdGlvbnM6IGBzdS1zcGFuYCwgYHN1LWd1dHRlcmAsIGFuZCBgc3Utc2xpY2VgLlxuLy8vIElmIHlvdSBwcmVmZXIgdGhlIG1vcmUgY29uc3RyYWluZWQgc3ludGF4IG9mIHRoZSBtYXRoIGVuZ2luZSxcbi8vLyB5b3UgYXJlIHdlbGNvbWUgdG8gdXNlIHRob3NlIGZ1bmN0aW9ucyBpbnN0ZWFkLlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3VzeS1zcGFuXG4vLy8gQHNlZSBzdXN5LWd1dHRlclxuLy8vIEBzZWUgc3VzeS1zbGljZVxuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgc3UtZ3V0dGVyXG4vLy8gQHNlZSBzdS1zbGljZVxuXG5cblxuLy8vICMjIFNob3J0aGFuZFxuLy8vXG4vLy8gQWxsIGZ1bmN0aW9ucyBkcmF3IG9uIHRoZSBzYW1lIHNob3J0aGFuZCBzeW50YXggaW4gdHdvIHBhcnRzLFxuLy8vIHNlcGVyYXRlZCBieSB0aGUgd29yZCBgb2ZgLlxuLy8vXG4vLy8gIyMjIFNwYW4gU3ludGF4OiBgPHdpZHRoPmAgW2A8bG9jYXRpb24+YCBgPHNwcmVhZD5gXVxuLy8vIFRoZSBmaXJzdCBwYXJ0IGRlc2NyaWJlcyB0aGVcbi8vLyAqKnNwYW4qKiB3aWR0aCwgbG9jYXRpb24sIGFuZCBzcHJlYWQgaW4gYW55IG9yZGVyLlxuLy8vIE9ubHkgdGhlIHdpZHRoIGlzIHJlcXVpcmVkOlxuLy8vXG4vLy8gLSBgc3BhbigyKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIDIgY29sdW1ucy5cbi8vLyAtIGBzcGFuKDMgd2lkZSlgIHdpbGwgcmV0dXJuIDMtY29sdW1ucywgd2l0aCBhbiBhZGRpdGlvbmFsIGd1dHRlci5cbi8vLyAtIGxvY2F0aW9uIGlzIG9ubHkgbmVlZGVkIHdpdGggYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgd2hlcmUgYHNwYW4oMyBhdCAyKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mXG4vLy8gICBzcGVjaWZpYyBjb2x1bW5zIG9uIHRoZSBncmlkLlxuLy8vICAgU2luY2UgdGhlc2UgYXJlIGZ1bmN0aW9ucywgdGhleSB3aWxsIG5vdCBoYW5kbGUgcGxhY2VtZW50IGZvciB5b3UuXG4vLy9cbi8vLyAjIyMgQ29udGV4dCBTeW50YXg6IGBbb2YgPGNvbHVtbnM+IDxjb250YWluZXItc3ByZWFkPiA8Z3V0dGVycz5dYFxuLy8vIFRoZSBzZWNvbmQgaGFsZiBvZiBTdXN5J3Mgc2hvcnRoYW5kXG4vLy8gZGVzY3JpYmVzIHRoZSBncmlkLSoqY29udGV4dCoqIOKAk1xuLy8vIGF2YWlsYWJsZSBjb2x1bW5zLCBjb250YWluZXItc3ByZWFkLCBhbmQgb3B0aW9uYWwgZ3V0dGVyIG92ZXJyaWRlIOKAk1xuLy8vIGluIGFueSBvcmRlci5cbi8vLyBBbGwgb2YgdGhlc2Ugc2V0dGluZ3MgaGF2ZSBnbG9iYWxseS1kZWZpbmVkIGRlZmF1bHRzOlxuLy8vXG4vLy8gLSBgc3BhbigyIG9mIDYpYCB3aWxsIHNldCB0aGUgY29udGV4dCB0b1xuLy8vICAgYSBzbGljZSBvZiA2IGNvbHVtbnMgZnJvbSB0aGUgZ2xvYmFsIGdyaWQuXG4vLy8gICBNb3JlIGRldGFpbHMgYmVsb3cuXG4vLy8gLSBgc3BhbigyIG9mIDEyIHdpZGUpYCBjaGFuZ2VzIHRoZSBjb250YWluZXItc3ByZWFkXG4vLy8gICBhcyB3ZWxsIGFzIHRoZSBjb2x1bW4tY29udGV4dC5cbi8vLyAtIGBzcGFuKDIgb2YgMTIgc2V0LWd1dHRlcnMgMC41ZW0pYFxuLy8vICAgd2lsbCBvdmVycmlkZSB0aGUgZ2xvYmFsIGd1dHRlcnMgc2V0dGluZ1xuLy8vICAgZm9yIHRoaXMgb25lIGNhbGN1bGF0aW9uLlxuLy8vXG4vLy8gQSBzaW5nbGUgdW5pdGxlc3MgbnVtYmVyIGZvciBgY29sdW1uc2Bcbi8vLyB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzbGljZSBvZiB0aGUgcGFyZW50IGdyaWQuXG4vLy8gT24gYSBncmlkIHdpdGggYGNvbHVtbnM6IHN1c3ktcmVwZWF0KDEyLCAxMjBweClgLFxuLy8vIHRoZSBzaG9ydGhhbmQgYG9mIDRgIHdpbGwgdXNlIHRoZSBwYXJlbnQgYDEyMHB4YCBjb2x1bW4td2lkdGguXG4vLy8gWW91IGNhbiBhbHNvIGJlIG1vcmUgZXhwbGljaXQsXG4vLy8gYW5kIHNheSBgb2Ygc3VzeS1yZXBlYXQoNCwgMTAwcHgpYC5cbi8vLyBJZiB5b3UgYXJlIHVzaW5nIGFzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyBsaWtlIGBjb2x1bW5zOiAoMSAxIDIgMyA1IDgpYCxcbi8vLyBTdXN5IGNhbid0IHNsaWNlIGl0IGZvciB5b3Ugd2l0aG91dCBrbm93aW5nIHdoaWNoIGNvbHVtbnMgeW91IHdhbnQuXG4vLy8gVGhlIGBzbGljZWAgZnVuY3Rpb24gYWNjZXB0cyBleGFjdGx5IHRoZSBzYW1lIHN5bnRheCBhcyBgc3BhbmAsXG4vLy8gYnV0IHJldHVybnMgYSBsaXN0IG9mIGNvbHVtbnMgcmF0aGVyIHRoYW4gYSB3aWR0aC5cbi8vLyBVc2UgaXQgaW4geW91ciBjb250ZXh0IGxpa2UgYG9mIHNsaWNlKGZpcnN0IDMpYC5cbi8vL1xuLy8vIEBncm91cCBhcGlcblxuXG5cbi8vIFN1c3kgU3BhblxuLy8gLS0tLS0tLS0tXG4vLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBpbiBTdXN5IOKAlFxuLy8vIHVzZWQgdG8gcmV0dXJuIHRoZSB3aWR0aCBvZiBhIHNwYW4gYWNyb3NzIG9uZSBvciBtb3JlIGNvbHVtbnMsXG4vLy8gYW5kIGFueSByZWxldmFudCBndXR0ZXJzIGFsb25nIHRoZSB3YXkuXG4vLy8gV2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncyxcbi8vLyBgc3BhbigzKWAgd2lsbCByZXR1cm4gdGhlIHdpZHRoIG9mIDMgY29sdW1ucyxcbi8vLyBhbmQgdGhlIDIgaW50ZXJtZWRpYXRlIGd1dHRlcnMuXG4vLy8gVGhpcyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGB3aWR0aGAgcHJvcGVydHkgb2YgZ3JpZCBlbGVtZW50cyxcbi8vLyBvciBgbWFyZ2luYCBhbmQgYHBhZGRpbmdgXG4vLy8gdG8gcHVzaCwgcHVsbCwgYW5kIHBhZCB5b3VyIGVsZW1lbnRzLlxuLy8vXG4vLy8gLSBUaGlzIGlzIGEgdGhpbiBzeW50YXgtc3VnYXIgc2hlbGwgYXJvdW5kXG4vLy8gICB0aGUgY29yZS1tYXRoIGBzdS1zcGFuKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBzcGFuKClgIGlzIGF2YWlsYWJsZSBieSBkZWZhdWx0LlxuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBzZWUgc3Utc3BhblxuLy8vIEBzZWUgJHN1c3lcbi8vL1xuLy8vIEBwYXJhbSB7bGlzdH0gJHNwYW4gLVxuLy8vICAgU2hvcnRoYW5kIGV4cHJlc3Npb24gdG8gZGVmaW5lIHRoZSB3aWR0aCBvZiB0aGUgc3Bhbixcbi8vLyAgIG9wdGlvbmFsbHkgY29udGFpbmluZzpcbi8vLyAgIC0gYSBjb3VudCwgbGVuZ3RoLCBvciBjb2x1bW4tbGlzdCBzcGFuLlxuLy8vICAgLSBgYXQgJG5gLCBgZmlyc3RgLCBvciBgbGFzdGAgbG9jYXRpb24gb24gYXN5bW1ldHJpY2FsIGdyaWRzLFxuLy8vICAgICB3aGVyZSBgYXQgMSA9PSBmaXJzdGAsXG4vLy8gICAgIGFuZCBgbGFzdGAgd2lsbCBjYWxjdWxhdGUgdGhlIHByb3BlciBsb2NhdGlvblxuLy8vICAgICBiYXNlZCBvbiBjb2x1bW5zIGFuZCBzcGFuLlxuLy8vICAgLSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgIGZvciBvcHRpb25hbGx5IHNwcmVhZGluZ1xuLy8vICAgICBhY3Jvc3MgYWRqYWNlbnQgZ3V0dGVycy5cbi8vLyAgIC0gYG9mICRuIDxzcHJlYWQ+YCBmb3IgYXZhaWxhYmxlIGdyaWQgY29sdW1uc1xuLy8vICAgICBhbmQgc3ByZWFkIG9mIHRoZSBjb250YWluZXIuXG4vLy8gICAgIFNwYW4gY291bnRzIGxpa2UgYG9mIDZgIGFyZSB2YWxpZFxuLy8vICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkcyxcbi8vLyAgICAgd2hlcmUgU3VzeSBjYW4gc2FmZWx5IGluZmVyIGEgc2xpY2Ugb2YgdGhlIHBhcmVudCBjb2x1bW5zLlxuLy8vICAgLSBhbmQgYHNldC1ndXR0ZXJzICRuYCB0byBvdmVycmlkZSBnbG9iYWwgZ3V0dGVyIHNldHRpbmdzLlxuLy8vXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXSAtXG4vLy8gICBPcHRpb25hbCBtYXAgb2YgU3VzeSBncmlkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4vLy8gICBTZWUgYCRzdXN5YCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLlxuLy8vXG4vLy8gQHJldHVybiB7bGVuZ3RofSAtXG4vLy8gICBDYWxjdWxhdGVkIGxlbmd0aCB2YWx1ZSwgdXNpbmcgdGhlIHVuaXRzIGdpdmVuLFxuLy8vICAgb3IgY29udmVydGluZyB0byBgJWAgZm9yIGZyYWN0aW9uLWJhc2VkIGdyaWRzLFxuLy8vICAgb3IgYSBmdWxsIGBjYWxjYCBmdW5jdGlvbiB3aGVuIHVuaXRzL2ZyYWN0aW9uc1xuLy8vICAgYXJlIG5vdCBjb21wYXJhYmxlIG91dHNpZGUgdGhlIGJyb3dzZXIuXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gc3BhbiBoYWxmIHRoZSBncmlkXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgLy8gdGhlIHJlc3VsdCBpcyBhIGJpdCB1bmRlciA1MCUgdG8gYWNjb3VudCBmb3IgZ3V0dGVyc1xuLy8vICAgICB3aWR0aDogc3VzeS1zcGFuKDYgb2YgMTIpO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHNwYW4gYSBzcGVjaWZpYyBzZWdtZW50IG9mIGFzeW1tZXRyaWNhbCBncmlkXG4vLy8gICAuZm9vIHtcbi8vLyAgICAgd2lkdGg6IHN1c3ktc3BhbigzIGF0IDMgb2YgKDEgMiAzIDUgOCkpO1xuLy8vICAgfVxuQGZ1bmN0aW9uIHN1c3ktc3BhbihcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgJG91dHB1dDogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcblxuICBAaWYgbWFwLWdldCgkb3V0cHV0LCAnc3BhbicpIHtcbiAgICBAcmV0dXJuIHN1LWNhbGwoJ3N1LXNwYW4nLCAkb3V0cHV0KTtcbiAgfVxuXG4gICRhY3R1YWw6ICdbI3t0eXBlLW9mKCRzcGFuKX1dIGAje2luc3BlY3QoJHNwYW4pfWAnO1xuICBAcmV0dXJuIF9zdXN5LWVycm9yKFxuICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHNwYW4gdmFsdWUgZnJvbSAjeyRhY3R1YWx9LicsXG4gICAgJ3N1c3ktc3BhbicpO1xufVxuXG5cblxuLy8gU3VzeSBHdXR0ZXJcbi8vIC0tLS0tLS0tLS0tXG4vLy8gVGhlIGd1dHRlciBmdW5jdGlvbiByZXR1cm5zXG4vLy8gdGhlIHdpZHRoIG9mIGEgc2luZ2xlIGd1dHRlciBvbiB5b3VyIGdyaWQsXG4vLy8gdG8gYmUgYXBwbGllZCB3aGVyZSB5b3Ugc2VlIGZpdCDigJNcbi8vLyBvbiBgbWFyZ2luc2AsIGBwYWRkaW5nYCwgYHRyYW5zZm9ybWAsIG9yIGVsZW1lbnQgYHdpZHRoYC5cbi8vL1xuLy8vIC0gVGhpcyBpcyBhIHRoaW4gc3ludGF4LXN1Z2FyIHNoZWxsIGFyb3VuZFxuLy8vICAgdGhlIGNvcmUtbWF0aCBgc3UtZ3V0dGVyKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBndXR0ZXIoKWAgaXMgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQHNlZSBzdS1ndXR0ZXJcbi8vLyBAc2VlICRzdXN5XG4vLy9cbi8vLyBAcGFyYW0ge2xpc3QgfCBudW1iZXJ9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gICBPcHRpb25hbCBjb250ZXh0IGZvciBuZXN0ZWQgZ3V0dGVycyxcbi8vLyAgIGluY2x1ZGluZyBzaG9ydGhhbmQgZm9yXG4vLy8gICBgY29sdW1uc2AsIGBndXR0ZXJzYCwgYW5kIGBjb250YWluZXItc3ByZWFkYFxuLy8vICAgKGFkZGl0aW9uYWwgc2hvcnRoYW5kIHdpbGwgYmUgaWdub3JlZClcbi8vL1xuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV0gLVxuLy8vICAgT3B0aW9uYWwgbWFwIG9mIFN1c3kgZ3JpZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLlxuLy8vICAgU2VlIGAkc3VzeWAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy5cbi8vL1xuLy8vIEByZXR1cm4ge2xlbmd0aH0gLVxuLy8vICAgV2lkdGggb2YgYSBndXR0ZXIgYXMgYCVgIG9mIGN1cnJlbnQgY29udGV4dCxcbi8vLyAgIG9yIGluIHRoZSB1bml0cyBkZWZpbmVkIGJ5IGBjb2x1bW4td2lkdGhgIHdoZW4gYXZhaWxhYmxlXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYWRkIGd1dHRlcnMgYmVmb3JlIG9yIGFmdGVyIGFuIGVsZW1lbnRcbi8vLyAgIC5mbG9hdHMge1xuLy8vICAgICBmbG9hdDogbGVmdDtcbi8vLyAgICAgd2lkdGg6IHNwYW4oMyBvZiA2KTtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IGd1dHRlcihvZiA2KTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBhZGQgZ3V0dGVycyB0byBwYWRkaW5nXG4vLy8gICAuZmxleGJveCB7XG4vLy8gICAgIGZsZXg6IDEgMSBzcGFuKDMgd2lkZSBvZiA2IHdpZGUpO1xuLy8vICAgICBwYWRkaW5nOiBndXR0ZXIob2YgNikgLyAyO1xuLy8vICAgfVxuLy8vXG5AZnVuY3Rpb24gc3VzeS1ndXR0ZXIoXG4gICRjb250ZXh0OiBudWxsLFxuICAkY29uZmlnOiAoKVxuKSB7XG4gICRjb250ZXh0OiBzdXN5LWNvbXBpbGUoJGNvbnRleHQsICRjb25maWcsICdjb250ZXh0LW9ubHknKTtcblxuICBAcmV0dXJuIHN1LWNhbGwoJ3N1LWd1dHRlcicsICRjb250ZXh0KTtcbn1cblxuXG5cbi8vIFN1c3kgU2xpY2Vcbi8vIC0tLS0tLS0tLS1cbi8vLyBXb3JraW5nIHdpdGggYXN5bW1ldHJpY2FsIGdyaWRzICh1bi1lcXVhbCBjb2x1bW4gd2lkdGhzKVxuLy8vIGNhbiBiZSBjaGFsbGVuZ2luZyDigJPCoFxuLy8vIGV4cGVjaWFsbHkgd2hlbiB0aGV5IGludm9sdmUgZmx1aWQvZnJhY3Rpb25hbCBlbGVtZW50cy5cbi8vLyBEZXNjcmliaW5nIGEgY29udGV4dCBgb2YgKDE1ZW0gNmVtIDZlbSA2ZW0gMTVlbSlgIGlzIGEgbG90XG4vLy8gdG8gcHV0IGluc2lkZSB0aGUgc3BhbiBvciBndXR0ZXIgZnVuY3Rpb24gc2hvcnRoYW5kLlxuLy8vIFRoaXMgc2xpY2UgZnVuY3Rpb24gcmV0dXJucyBhIHN1Yi1zbGljZSBvZiBhc3ltbWV0cmljYWwgY29sdW1ucyB0byB1c2Vcbi8vLyBmb3IgYSBuZXN0ZWQgY29udGV4dC5cbi8vLyBgc2xpY2UoMyBhdCAyKWAgd2lsbCBnaXZlIHlvdSBhIHN1YnNldCBvZiB0aGUgZ2xvYmFsIGdyaWQsXG4vLy8gc3Bhbm5pbmcgMyBjb2x1bW5zLCBzdGFydGluZyB3aXRoIHRoZSBzZWNvbmQuXG4vLy9cbi8vLyAtIFRoaXMgaXMgYSB0aGluIHN5bnRheC1zdWdhciBzaGVsbCBhcm91bmRcbi8vLyAgIHRoZSBjb3JlLW1hdGggYHN1LXNsaWNlKClgIGZ1bmN0aW9uLlxuLy8vIC0gVGhlIHVuLXByZWZpeGVkIGFsaWFzIGBzbGljZSgpYCBpcyBhdmFpbGFibGUgYnkgZGVmYXVsdC5cbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAc2VlIHN1LXNsaWNlXG4vLy8gQHNlZSAkc3VzeVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhbiAtXG4vLy8gICBTaG9ydGhhbmQgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlIHN1YnNldCBzcGFuLCBvcHRpb25hbGx5IGNvbnRhaW5pbmc6XG4vLy8gICAtIGBhdCAkbmAsIGBmaXJzdGAsIG9yIGBsYXN0YCBsb2NhdGlvbiBvbiBhc3ltbWV0cmljYWwgZ3JpZHM7XG4vLy8gICAtIGBvZiAkbiA8c3ByZWFkPmAgZm9yIGF2YWlsYWJsZSBncmlkIGNvbHVtbnNcbi8vLyAgICAgYW5kIHNwcmVhZCBvZiB0aGUgY29udGFpbmVyXG4vLy8gICAgIC0gU3Bhbi1jb3VudHMgbGlrZSBgb2YgNmAgYXJlIG9ubHkgdmFsaWRcbi8vLyAgICAgICBpbiB0aGUgY29udGV4dCBvZiBzeW1tZXRyaWNhbCBncmlkc1xuLy8vICAgICAtIFZhbGlkIHNwcmVhZHMgaW5jbHVkZSBgbmFycm93YCwgYHdpZGVgLCBvciBgd2lkZXJgXG4vLy9cbi8vLyBAcGFyYW0ge21hcH0gJGNvbmZpZyBbKCldIC1cbi8vLyAgIE9wdGlvbmFsIG1hcCBvZiBTdXN5IGdyaWQgY29uZmlndXJhdGlvbiBzZXR0aW5ncy5cbi8vLyAgIFNlZSBgJHN1c3lgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuXG4vLy9cbi8vLyBAcmV0dXJuIHtsaXN0fSAtXG4vLy8gICBTdWJzZXQgbGlzdCBvZiBjb2x1bW5zIGZvciB1c2UgZm9yIGEgbmVzdGVkIGNvbnRleHRcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBSZXR1cm4gYSBuZXN0ZWQgc2VnbWVudCBvZiBhc3ltbWV0cmljYWwgZ3JpZFxuLy8vICAgJGNvbnRleHQ6IHN1c3ktc2xpY2UoMyBhdCAzIG9mICgxIDIgMyA1IDgpKTtcbi8vLyAgIC8qICRjb250ZXh0OiAjeyRjb250ZXh0fTsgKi9cbkBmdW5jdGlvbiBzdXN5LXNsaWNlKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICAkc3Bhbjogc3VzeS1jb21waWxlKCRzcGFuLCAkY29uZmlnKTtcblxuICBAcmV0dXJuIHN1LWNhbGwoJ3N1LXNsaWNlJywgJHNwYW4pO1xufVxuXG5cblxuLy8vICMjIEJ1aWxkaW5nIEdyaWRzXG4vLy8gVGhlIHdlYiBoYXMgY29tZSBhIGxvbmcgd2F5XG4vLy8gc2luY2UgdGhlIGRheXMgb2YgZG91YmxlLW1hcmdpbi1oYWNrc1xuLy8vIGFuZCBpbmNvbnNpc3RlbnQgc3VicGl4ZWwgcm91bmRpbmcuXG4vLy8gSW4gYWRkaXRpb24gdG8gZmxvYXRzIGFuZCB0YWJsZXMsXG4vLy8gd2UgY2FuIG5vdyB1c2UgbXVjaCBtb3JlIHBvd2VyZnVsIHRvb2xzLFxuLy8vIGxpa2UgZmxleGJveCBhbmQgQ1NTIGdyaWQsXG4vLy8gdG8gYnVpbGQgbW9yZSBpbnRlcmVzdGluZyBhbmQgcmVzcG9uc2l2ZSBsYXlvdXRzLlxuLy8vXG4vLy8gV2l0aCBTdXN5Mywgd2UgaG9wZSB5b3UnbGwgc3RhcnQgbW92aW5nIGluIHRoYXQgZGlyZWN0aW9uLlxuLy8vIFlvdSBjYW4gc3RpbGwgYnVpbGQgY2xhc3NpYyAxMi1jb2x1bW4gR3JpZCBTeXN0ZW1zLFxuLy8vIGFuZCB3ZSdsbCBoZWxwIHlvdSBnZXQgdGhlcmUsXG4vLy8gYnV0IFN1c3kzIGlzIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgYSBncmlkLW1hdGgtb24tZGVtYW5kXG4vLy8gYXBwcm9hY2ggdG8gbGF5b3V0OlxuLy8vIGFwcGx5aW5nIG91ciBmdW5jdGlvbnMgb25seSB3aGVyZSB5b3UgcmVhbGx5IG5lZWQgZ3JpZCBtYXRoLlxuLy8vIFJlYWQgdGhlIFtpbnRybyBhcnRpY2xlIGJ5IE9kZEJpcmRdW3dlbGNvbWVdIGZvciBtb3JlIGRldGFpbHMuXG4vLy9cbi8vLyBbd2VsY29tZV06IGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzI4L3N1c3kzL1xuLy8vXG4vLy8gQGdyb3VwIGFwaVxuLy8vIEBsaW5rIGh0dHA6Ly9vZGRiaXJkLm5ldC8yMDE3LzA2LzI4L3N1c3kzLyBBcnRpY2xlOiBXZWxjb21lIHRvIFN1c3kzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gZmxvYXRzXG4vLy8gICAuZmxvYXQge1xuLy8vICAgICB3aWR0aDogc3BhbigzKTtcbi8vLyAgICAgbWFyZ2luLXJpZ2h0OiBndXR0ZXIoKTtcbi8vLyAgIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBmbGV4Ym94XG4vLy8gICAuZmxleGJveCB7XG4vLy8gICAgIGZsZXg6IDEgMSBzcGFuKDMpO1xuLy8vICAgICAvLyBoYWxmIGEgZ3V0dGVyIG9uIGVpdGhlciBzaWRl4oCmXG4vLy8gICAgIHBhZGRpbmc6IDAgZ3V0dGVyKCkgLyAyO1xuLy8vICAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIHB1c2hpbmcgYW5kIHB1bGxpbmdcbi8vLyAgIC5wdXNoLTMge1xuLy8vICAgICBtYXJnaW4tbGVmdDogc3BhbigzIHdpZGUpO1xuLy8vICAgfVxuLy8vXG4vLy8gICAucHVsbC0zIHtcbi8vLyAgICAgbWFyZ2luLWxlZnQ6IDAgLSBzcGFuKDMgd2lkZSk7XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gYnVpbGRpbmcgYW4gYXR0cmlidXRlIHN5c3RlbVxuLy8vICAgLy8gbWFya3VwIGV4YW1wbGU6IDxkaXYgZGF0YS1zcGFuPVwibGFzdCAzXCI+PC9kaXY+XG4vLy8gICBbZGF0YS1zcGFuXSB7XG4vLy8gICAgIGZsb2F0OiBsZWZ0O1xuLy8vXG4vLy8gICAgICY6bm90KFtkYXRhLXNwYW4qPSdsYXN0J10pIHtcbi8vLyAgICAgICBtYXJnaW4tcmlnaHQ6IGd1dHRlcigpO1xuLy8vICAgICB9XG4vLy8gICB9XG4vLy9cbi8vLyAgIEBmb3IgJHNwYW4gZnJvbSAxIHRocm91Z2ggbGVuZ3RoKHN1c3ktZ2V0KCdjb2x1bW5zJykpIHtcbi8vLyAgICAgW2RhdGEtc3Bhbio9JyN7JHNwYW59J10ge1xuLy8vICAgICAgIHdpZHRoOiBzcGFuKCRzcGFuKTtcbi8vLyAgICAgfVxuLy8vICAgfVxuIiwiLy8gVW5wcmVmaXggU3VzeVxuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIFNwYW5cbi8vIC0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktc3BhbmBcbi8vLyAoYXZhaWxhYmxlIGJ5IGRlZmF1bHQpXG4vLy9cbi8vLyBAZ3JvdXAgYXBpXG4vLy8gQGFsaWFzIHN1c3ktc3BhblxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhblxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhbixcbiAgJGNvbmZpZzogKClcbikge1xuICBAcmV0dXJuIHN1c3ktc3Bhbigkc3BhbiwgJGNvbmZpZyk7XG59XG5cblxuLy8gR3V0dGVyXG4vLyAtLS0tLS1cbi8vLyBVbi1wcmVmaXhlZCBhbGlhcyBmb3IgYHN1c3ktZ3V0dGVyYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1ndXR0ZXJcbi8vL1xuLy8vIEBwYXJhbSB7aW50ZWdlciB8IGxpc3R9ICRjb250ZXh0IFtudWxsXSAtXG4vLy8gQHBhcmFtIHttYXB9ICRjb25maWcgWygpXVxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJGNvbnRleHQ6IG51bGwsXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LWd1dHRlcigkY29udGV4dCwgJGNvbmZpZyk7XG59XG5cblxuLy8gU2xpY2Vcbi8vIC0tLS0tXG4vLy8gVW4tcHJlZml4ZWQgYWxpYXMgZm9yIGBzdXN5LXNsaWNlYFxuLy8vIChhdmFpbGFibGUgYnkgZGVmYXVsdClcbi8vL1xuLy8vIEBncm91cCBhcGlcbi8vLyBAYWxpYXMgc3VzeS1zbGljZVxuLy8vXG4vLy8gQHBhcmFtIHtsaXN0fSAkc3BhblxuLy8vIEBwYXJhbSB7bWFwfSAkY29uZmlnIFsoKV1cbkBmdW5jdGlvbiBzbGljZShcbiAgJHNwYW4sXG4gICRjb25maWc6ICgpXG4pIHtcbiAgQHJldHVybiBzdXN5LXNsaWNlKCRzcGFuLCAkY29uZmlnKTtcbn1cbiIsIi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/kuLvmoYbmnrboqK3lrpogbWFpblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+ahiOS7tuahhuaetjpcbi8v54CP6Ka95Zmo5a+s5bqm6Kit5a6aKOWQjeeosSDlr6zluqYg5bem5Y+z6ZaT6Led57i95ZKMKVxuJGlubmVyOiAoZmx1aWQgMTAwJSAzMCx4bCAxNjAwIDMwLGxnIDEyODAgMzAsbWQgMTAyNCAwLHNtIDk2MCAwKTtcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+i3nembouioreWumlxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kYmFzZUdhcDogMTBweDsgLy/kuLvopoHot53pm6LlpKflsI8s6ZaT6Led57Wx5LiA5YCN5pW4XG5cbi8v5paH5a2X6Kit5a6aXG4kZm9udDogJ0xhdG8nLCdOb3RvIFNhbnMgVEMnLHNhbnMtc2VyaWY7Ly/mloflrZflrZflnotcbiRmb250U2l6ZTogMTZweDsgLy/kuLvmloflrZflpKflsI9cbiRmb250U2l6ZUxldmVsOiAwLjU7Ly/mloflrZfmlL7lpKflgI3njodcbiRGb250TGV2ZWw6IDU7IC8v5paH5a2XbGV2ZWznlJ/miJDmlbhcbiRsaW5lSGVpZ2h0TGV2ZWw6IDEuNTsgLy/ooYzot53lgI3njodcbiRmb250TGg6IGNlaWwoJGZvbnRTaXplICogJGxpbmVIZWlnaHRMZXZlbCk7IC8v5Li75paH5a2X6KGM6auYXG4kdGV4dENvbG9yOiAjMjUyNTI1OyAvL+S4u+aWh+Wtl+mhj+iJslxuLy8kdGV4dEhDb2xvcjogIzMyNTVGOSAvL+S4u+aWh+Wtl+a7keWFpemhj+iJslxuJHRleHRIQ29sb3I6ICMwMDhDQTI7XG4kbGV0dGVyU3BhY2luZzogMC4wMjVlbTsgLy/mloflrZfplpPot51cbi8v57ay56uZ5Li75p625qeL6aGP6Imy6Kit5a6aXG4kd2hpdGU6ICAgICNmZmY7XG4kZ3JheS0xMDA6ICNmOGY5ZmE7XG4kZ3JheS0yMDA6ICNlOWVjZWY7XG4kZ3JheS0zMDA6ICNkZWUyZTY7XG4kZ3JheS00MDA6ICNjZWQ0ZGE7XG4kZ3JheS01MDA6ICNhZGI1YmQ7XG4kZ3JheS02MDA6ICM2Yzc1N2Q7XG4kZ3JheS03MDA6ICM0OTUwNTc7XG4kZ3JheS04MDA6ICMzNDNhNDA7XG4kZ3JheS05MDA6ICMyMTI1Mjk7XG4kYmxhY2s6ICAgICMyNTI1MjU7XG4kbWFpbi1jb2xvcjogIzAwOENBMjtcbiRibHVlOiAjMDA1NzhGO1xuJGdyZWVuOiAjMDA4Q0EyO1xuJHJlZDogI2MxMjcyZDtcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+e2suagvOahhuaetiBncmlkXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRncmlkWEw6IDE2MDA7XG4kZ3JpZExnOiAxMjgwO1xuJGdyaWRNZDogNzY4O1xuJGdyaWRTbTogNDgwO1xuJGdyaWRDb2xzOiAxMjsgLy/ntrLmoLzmrITmlbhcbiRncmlkLXByb3BzOiAoJ2RlZmF1bHQnOiAxOTIwLCcteGwnOiAkZ3JpZFhMLCctbGcnOiAkZ3JpZExnLCctbWQnOiAkZ3JpZE1kLCctc20nOiAkZ3JpZFNtKTsvL2NsYXNzIOWwjeaHieWvrOW6puioreWumlxuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8v6KGo6aCtIGhlYWRlclxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kaGVhZGVyTW9kZTogMTsgLy9oZWFkZXLmqKHlvI8gMTrpgbjllq7lkIzkuIDooYwgMjrpgbjllq7lnKjkuIvmlrlcbiRoZWFkZXJPcmRlcjogKCdsb2dvJzogMSwnbmF2JzogMiwnc2VhcmNoJzogNCwnc29jaWFsJzogMywnaGFtYnVyZ2VyJzogNSk7IC8v5o6S5bqPXG4kdmlldzogKCdzZWFyY2gnOiAxLCdzb2NpYWxJdGVtJzogMCk7IC8vc2VhcmNoOjHngrrpoa/npLow54K65LiN6aGv56S6IFNvY2lhbEl0ZW0g56S+576k5pW455uuXG4kbG9nb0hlaWdodDogKCdtb2RlMSc6IDgwcHgsJ21vZGUxRml4ZWQnOiA4MHB4LCdtb2RlMic6IDcwcHgsJ21vZGUyRml4ZWQnOiA1MHB4KTsgLy8gbW9kZTE6bG9nb+mrmOW6piDoiIcgbW9kZTI6bG9nb+mrmOW6plxuJGxvZ29XaWR0aDogMjMwcHg7IC8vTE9HT+WvrOW6pijlg4/ntKApXG4kbG9nb0FsaWduOiBmbGV4LXN0YXJ0OyAvL0xPR0/kvY3nva4oanVzdGlmeS1jb250ZW50KVxuJHNvY2lhbEhlaWdodDogMjBweDsgLy/npL7nvqRpY29u6auY5bqm5LiN5aSn5pa8NDBweFxuJG5hdkZvbnQ6IDIwcHg7IC8v6YG45Zau5paH5a2X5aSn5bCPXG4kbmF2SXRlbTogNjsgLy/pgbjllq7mqJnpoYzmlbjph49cbiRuYXZBbGlnbjogZmxleC1lbmQ7IC8vbmF26YG45Zau5o6S5YiX5L2N572uKGp1c3RpZnktY29udGVudClcbiRuYXZIZWlnaHQ6IDUwcHg7IC8vbW9kZTLpgbjllq7pq5jluqZcbiRuYXZMYXllcldpZHRoOiAyNTBweDsgLy/mu5HlhaXpgbjllq7pmo7lsaTlr6zluqZcbiRuYXZDb2xvcjogJHRleHRDb2xvcjsgLy/pgbjllq7mloflrZfpoY/oibJcbiRuYXZiZ0NvbG9yOiAkd2hpdGU7IC8v6YG45Zau6IOM5pmv6ImyXG4kbmF2SG92ZXJDb2xvcjogJG1haW4tY29sb3I7ICAvL+a7keWFpemhj+iJslxuJG5hdkhvdmVyYmdDb2xvcjogJHdoaXRlOyAvL+a7keWFpeiDjOaZr+mhj+iJslxuJG5hdkJvcmRlckNvbG9yOiAkZ3JheS0zMDA7IC8v6YG45Zau5qGG6aGP6ImyXG4kbmF2QnRuV2lkdGg6IDA7IC8v5LiL6ZqO5bGk5oyJ6YiV5a+s5bqmXG4kbmF2QnRuYmdDb2xvcjogJHdoaXRlOyAvL+S4i+majuWxpOaMiemIleiDjOaZr+mhj+iJslxuJHMtbmF2YmdDb2xvcjogJG1haW4tY29sb3I7Ly/miYvmqZ/mnb/pmo7lsaTpgbjllq7og4zmma9cbiRoZWFkZXJSV0Q6IDEyMDA7IC8vIOaJi+apn+eJiOiuiuaPm+WvrOW6plxuJGhlYWRlclBob25lSGVpZ2h0OiA1MHB4OyAvL+aJi+apn+eJiGhlYWRlciDpq5jluqZcblxuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuLy/ooajllq4gZm9ybVxuLy89PT09PT09PT09PT09PT09PT09PT09XG4kZm9ybUhlaWdodDogNTBweDsgLy/ovLjlhaXmoYbpq5jluqZcbiRmb3JtQ29sb3I6ICR0ZXh0Q29sb3I7IC8v6Ly45YWl5qGG5paH5a2X6aGP6ImyXG4kZm9ybUxpbmVXaWR0aDogMDsgIC8v6Ly45YWl5qGG5qGG57ea57KX57SwXG4kZm9ybUxpbmVDb2xvcjogI2YyZjJmMjsgIC8v6Ly45YWl5qGG5qGG57ea6aGP6ImyXG4kZm9ybUJnQ29sb3I6ICNmMmYyZjI7ICAvL+i8uOWFpeiDjOaZr+mhj+iJslxuJGZvcm1CZFJzOiAwOyAvL+i8uOWFpeahhuWck+inklxuJGZvcm1TaGFkb3c6ICMwMDA7IC8v6Ly45YWl5qGG6YG45Y+W6Zmw5b2x6aGP6ImyXG4kcGxhY2Vob2xkZXJDb2xvcjogIzg4ODsgLy/ovLjlhaXmoYZwbGFjZWhvbGRlcuaWh+Wtl+mhj+iJslxuJGxlZ2VuZENvbG9yOiAjMDAwOyAvL2Zvcm0g5qiZ6aGM5paH5a2X6aGP6ImyXG4kcmFkaW9TaXplOiAyM3B4OyAvL3JhZGlvIOmBuOmgheWkp+Wwj1xuJHJhZGlvQmdDb2xvcjogJGZvcm1CZ0NvbG9yOyAvL3JhZGlvIOmBuOmghemhj+iJslxuJHJhZGlvTGluZUNvbG9yOiAkZm9ybUxpbmVDb2xvcjsgLy9yYWRpbyDpgbjpoIXpgormoYbpoY/oibJcbiRyYWRpb0xpbmVXaWR0aDogMXB4OyAvL3JhZGlvIOmBuOmghemCiuahhueyl+e0sFxuJHJhZGlvQmRSczogMjNweDsgLy9yYWRpbyDpgbjpoIXlnJPop5JcbiRyYWRpb0NoZWNrQ29sb3I6ICM1NTU7IC8vcmFkaW8g6YG45pOH5b6M6aGP6ImyXG4kY2hlY2tib3hTaXplOiAyM3B4OyAvL0NoZWNrYm94IOmBuOmgheWkp+Wwj1xuJGNoZWNrYm94QmdDb2xvcjogJGZvcm1CZ0NvbG9yOyAvL0NoZWNrYm94IOmBuOmghemhj+iJslxuJGNoZWNrYm94TGluZVdpZHRoOiAxcHg7IC8vQ2hlY2tib3gg6YG46aCF6YKK5qGG57KX57SwXG4kY2hlY2tib3hMaW5lQ29sb3I6ICRmb3JtTGluZUNvbG9yOyAvL0NoZWNrYm94IOmCiuahhumhj+iJslxuJGNoZWNrYm94QmRSczogM3B4OyAvL0NoZWNrYm94IOWck+inkuWkp+Wwj1xuJGNoZWNrYm94Q2hlY2tDb2xvcjogIzU1NTsgLy9DaGVja2JveCDpgbjmk4flvozli77li77poY/oibJcbiRjaG9pY2VCdG5XaWR0aDogMTUwcHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV5a+s5bqmXG4kY2hvaWNlQnRuSGVpZ2h0OiA1MHB4OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIlemrmOW6plxuJGNob2ljZUJ0bkNvbG9yOiAkZm9ybUJnQ29sb3I7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6aGP6ImyXG4kY2hvaWNlQnRuVGV4dENvbG9yOiAjNTU1OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIleaWh+Wtl+mhj+iJslxuJGNob2ljZUJ0bkxpbmVDb2xvcjogJGZvcm1MaW5lQ29sb3I7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YKK5qGG6aGP6ImyXG4kY2hvaWNlQnRuTGluZVdpZHRoOiAxcHg7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YKK5qGG57KX57SwXG4kY2hvaWNlQnRuQmRSczogNXB4OyAvL0NoZWNrYm94IHJhZGlvIOS7v+aMiemIleWck+inklxuJGNob2ljZUJ0bkNoZWNrQ29sb3I6ICMxZTk4MTM7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YG45pOH5b6M6aGP6ImyXG4kY2hvaWNlQnRuQ2hlY2tUZXh0Q29sb3I6ICNmZmY7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YG45pOH5b6M5paH5a2X6aGP6ImyXG4kY2hvaWNlQnRuQ2hlY2tMaW5lQ29sb3I6ICMxZTk4MTM7IC8vQ2hlY2tib3ggcmFkaW8g5Lu/5oyJ6YiV6YG45pOH5b6M6YKK5qGG6aGP6ImyXG4kc2VsZWN0QXJyb3dXaWR0aDogMTZweDsgLy9zZWxlY3Qg5LiJ6KeS5b2i5a+s5bqmXG4kc2VsZWN0QXJyb3dIZWlnaHQ6IDEwcHg7IC8vc2VsZWN0IOS4ieinkuW9oumrmOW6plxuJHNlbGVjdEFycm93Q29sb3I6ICM1NTU7IC8vc2VsZWN0IOS4ieinkuW9oumhj+iJslxuJHJlcXVpcmVkQ29sb3I6ICNjMDAwMDA7IC8v5b+F5aGr6aGP6ImyXG4kdGlwc0NvbG9yOiAjOTk5OyAvL+aPkOekuuaWh+Wtl+mhj+iJslxuJHRpcHNJY29uU2l6ZTogMjBweDsgLy/mj5DnpLppY29uIOWkp+Wwj1xuJHRpcHNJY29uOiAnXFxlOTAwJzsgLy/mj5DnpLppY29uXG4kdmFsaWRJY29uOiAnXFxlOTAwJzsgLy9mZWVkYmFjayDmj5DnpLogaWNvblxuJGVycm9yQ29sb3I6ICNjMDAwMDA7IC8vZmVlZGJhY2sg6Yyv6Kqk5o+Q56S66aGP6ImyXG4kZXJyb3JJY29uOiAnXFxlOTA2JzsgLy9mZWVkYmFjayDpjK/oqqTmj5DnpLppY29uXG4kc3VjY2Vzc0NvbG9yOiAjMWU5ODEzOyAvL2ZlZWRiYWNrIOaIkOWKn+aPkOekuumhj+iJslxuJHN1Y2Nlc3NJY29uOiAnXFxlOTAxJzsgLy9mZWVkYmFjayDmiJDpgJrmj5DnpLppY29uXG4kdGV4dGFyZWFIZWlnaHQ6IDE1MHB4OyAvL3RleHRhcmVhIOmrmOW6plxuJHJlc2V0Q29sb3I6ICMxZTk4MTM7IC8v6KqN6K2J56K8cmVzZXTpoY/oibJcblxuLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+aMiemIlSBidXR0b25cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJGJ0bldpZHRoOiAxMjBweDsgLy/lrprnvqnmjInpiJXlr6zluqZcbiRidG5IZWlnaHQ6IDQwcHg7IC8v5a6a576p5oyJ6YiV6auY5bqmXG4kYnRuTGluZVdpZHRoOiAwOyAvL+Wumue+qeaMiemIleahhue3mueyl+e0sFxuJGJ0bkljb25TaXplOiAyMHB4OyAvL+Wumue+qeaMiemIlWljb24g5aSn5bCPXG4kYnRuU21XaWR0aDogMTAwcHg7IC8v5a6a576p5bCP5oyJ6YiV5a+s5bqmXG4kYnRuU21IZWlnaHQ6IDQwcHg7IC8v5a6a576p5bCP5oyJ6YiV6auY5bqmXG4kYnRuU21JY29uU2l6ZTogMjBweDsgLy/lrprnvqnlsI/mjInpiJVpY29u5aSn5bCPXG4kYnRuRGVmYXVsdENvbG9yOiAkZ3JheS0yMDA7IC8v5Y6f5aeL5oyJ6YiV6aGP6ImyXG4kYnRuRGVmYXVsdExpbmVDb2xvcjogI2UzZTNlMzsgLy/ljp/lp4vmjInpiJXmoYbnt5rpoY/oibJcbiRidG5EZWZhdWx0VGV4dENvbG9yOiAkdGV4dENvbG9yOyAvL+WOn+Wni+aMiemIleaWh+Wtl+mhj+iJslxuJGJ0bkRlZmF1bHRIb3ZlckNvbG9yOiAkbWFpbi1jb2xvcjsgLy/ljp/lp4vmjInpiJXmu5HlhaXpoY/oibJcbiRidG5EZWZhdWx0SG92ZXJMaW5lQ29sb3I6ICRtYWluLWNvbG9yOyAvL+WOn+Wni+aMiemIlea7keWFpeahhue3mumhj+iJslxuJGJ0bkRlZmF1bHRIb3ZlclRleHRDb2xvcjogJHdoaXRlOyAvL+WOn+Wni+aMiemIlea7keWFpeaWh+Wtl+mhj+iJslxuLy/mjInpiJXlkI3nqLHmlrDlop7poIXnm64gKOWQjeeosSDog4zmma/poY/oibIg5aSW5qGG6aGP6ImyIOaWh+Wtl+mhj+iJsilcbiRidG5Db25maWc6IChzdWJtaXQgI2Q2MGQwZCAjZDYwZDBkICR3aGl0ZSwgc2VhcmNoICMwMDhhYmMgIzAwOGFiYyAkd2hpdGUsIHN1Y2Nlc3MgcmdiYSgwLDAsMCwwKSAjMDBmZjAwICRibGFjayxncmF5ICM0OTQ3NDcgIzQ5NDc0NyAkd2hpdGUpO1xuXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbi8vIOmggeeivCBwYWdpbmF0aW9uXG4vLz09PT09PT09PT09PT09PT09PT09PT1cbiRwYWdlQmc6ICRncmF5LTIwMDsgLy/mjInpiJXog4zmma/oibJcbiRwYWdlSG92ZXJCZzogJG1haW4tY29sb3I7IC8v5ruR6byg56e76Iez5oyJ6YiV6IOM5pmv6ImyXG4kcGFnZUFjdGl2ZUJnOiBkYXJrZW4oJG1haW4tY29sb3IsMC4yKTsvL+a7kem8oOaMieS4i+eahOaoo+W8j1xuJHBhZ2VIb3ZlckNvbG9yOiAkd2hpdGU7Ly/mu5HlhaXoiIfpgbjlj5bmloflrZfpoY/oibJcbiRwYWdlRGlzYWJsZWQ6ICRncmF5LTQwMDsgLy/npoHnlKjmloflrZfpoY/oibJcbiIsIi8vcmVt566X5byPXG5AZnVuY3Rpb24gdG9SZW0oJHNpemUpIHtcblx0JHJlbVNpemU6IHJvdW5kKCRzaXplIC8gJGZvbnRTaXplICogMTAwMCkgLyAxMDAwO1xuXHRAcmV0dXJuICRyZW1TaXplICogMXJlbTsgfVxuXG4vL+i3nembomxldmVsIOeul+W8j1xuLy9nYXAoMikgPT0+IDIqJGJhc2VHYXBcbkBmdW5jdGlvbiBnYXAoJGdhcExldmVsOiAxLCAkZ2FwSGVpZ2h0OiAkYmFzZUdhcCkge1xuICAgIEByZXR1cm4gJGdhcExldmVsICogJGdhcEhlaWdodDsgfVxuIiwiLy9UaGlzIGlzIHNhc3MgZmlsZVxuLy9iYWNrZ3JvdW5kIOioreWumlxuQG1peGluIGJnKCRpbWcsICRwb3MteDogMCwgJHBvcy15OiAwLCAkcmVwOiBuby1yZXBlYXQpIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vLi4vaW1hZ2VzLyN7JGltZ31cIik7XG5cdGJhY2tncm91bmQtcG9zaXRpb246ICRwb3MteCAkcG9zLXk7XG5cdGJhY2tncm91bmQtcmVwZWF0OiAkcmVwOyB9XG5cbi8vcndkIHBvaW50XG4vLytyd2QoMTkyMCwgbWF4KVxuQG1peGluIHJ3ZCgkcG9pbnQsICRtdzogJ21heCcpIHtcblx0QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoI3skbXd9LXdpZHRoOiAkcG9pbnQgKiAxcHgpIHtcblx0XHRAY29udGVudDsgfSB9XG5cbi8vK2ljb24oMzBweCwzMHB4LCdcXGYxMzgnLDI1cHgsICM5OTkpXG5AbWl4aW4gaWNvbigkd2lkdGg6IGF1dG8sICRoZWlnaHQ6IGF1dG8sICRpY29uX2NvbnRlbnQ6ICcnLCAkZm9udC1zaXplOiAxMDAlLCAkY29sb3I6aW5oZXJpdCkge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdCY6YmVmb3JlIHtcblx0XHRjb250ZW50OiAkaWNvbl9jb250ZW50O1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR3aWR0aDogJHdpZHRoO1xuXHRcdGhlaWdodDogJGhlaWdodDtcblx0XHRmb250LWZhbWlseTogJ2ljb21vb24nO1xuXHRcdGZvbnQtc2l6ZTogJGZvbnQtc2l6ZTtcblx0XHRsaW5lLWhlaWdodDogJGhlaWdodDtcblx0XHRjb2xvcjogJGNvbG9yO1xuXHRcdEBjb250ZW50OyB9IH1cblxuLy/mloflrZfmoYbnt5pcbi8vK3N0cm9rZSgyLCNlZWUpXG5AbWl4aW4gc3Ryb2tlKCRzLXdpZHRoLCAkY29sb3IpIHtcblx0JHMtd2lkdGg6ICRzLXdpZHRoO1xuXHQkc2hhZG93OiAwIDAgMCB0cmFuc3BhcmVudDtcblx0JGk6IDA7XG5cdCR3OiAxO1xuXHRAd2hpbGUgKCRzLXdpZHRoID4gJGkpIHtcblx0XHQkaTogJGkgKyAxO1xuXHRcdCRqOiAwO1xuXHRcdCR3OiAkdyArIDI7XG5cdFx0QGZvciAkciBmcm9tIDEgdGhyb3VnaCAkdyB7XG5cdFx0XHRAZm9yICRjIGZyb20gMSB0aHJvdWdoICR3IHtcblx0XHRcdFx0JHg6ICRjIC0gY2VpbCgkdyAvIDIpO1xuXHRcdFx0XHQkeTogJHIgLSBjZWlsKCR3IC8gMik7XG5cdFx0XHRcdCRzaGFkb3c6ICN7JHNoYWRvd30sICN7JHh9cHggI3skeX1weCAwICRjb2xvcjsgfSB9IH1cblx0dGV4dC1zaGFkb3c6ICRzaGFkb3c7IH1cblxuLy9jYXNlIG1peGluXG4vLytpbm5lcigxOTIwLDMwKVxuLy8kaW5yLXcg5a+s5bqmXG4vL1JXRCAkaW5yLWdhcCDlt6blj7NwYWRkaW5n6ZaT6Led57i95ZKMXG5AbWl4aW4gaW5uZXIoJGluci13LCRpbnItZ2FwOiAwKSB7XG5cdG1heC13aWR0aDogJGluci13ICogMXB4O1xuXHRAaWYgJGluci1nYXAgIT0gMCB7XG5cdFx0QGluY2x1ZGUgcndkKCRpbnItdyArICRpbnItZ2FwKSB7XG5cdFx0XHRwYWRkaW5nOiAwICgkaW5yLWdhcCAvIDIgKiAxcHgpOyB9IH0gfVxuXG4vL+aWh+Wtl+maseiXjyBlbGxpcHNpcyjooYzpq5gpXG5AbWl4aW4gZWxsaXBzaXMoJGVsc19oZWlnaHQ6IDEpIHtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0QGlmKCRlbHNfaGVpZ2h0IDw9IDEpIHtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdEBjb250ZW50OyB9XG5cdEBlbHNlIGlmKCRlbHNfaGVpZ2h0ID4gMSkge1xuXHRcdGRpc3BsYXk6IC13ZWJraXQtYm94O1xuXHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdC13ZWJraXQtbGluZS1jbGFtcDogJGVsc19oZWlnaHQ7XG5cdFx0LXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcblx0XHRAY29udGVudDsgfSB9XG5cblxuLy/mloflrZfovYnmj5sgcmVtXG5AbWl4aW4gZm9udC1zaXplKCRpblNpemUsJGluTGluZUhlaWdodDogMXB4KSB7XG5cdGZvbnQtc2l6ZTogJGluU2l6ZTtcblx0JG5ld0xpbmVIZWlnaHQ6IGNlaWwoJGluU2l6ZSAqICRsaW5lSGVpZ2h0TGV2ZWwpO1xuXHRmb250LXNpemU6IHRvUmVtKCRpblNpemUpO1xuXHRAaWYoJG5ld0xpbmVIZWlnaHQgPT0gMXB4IG9yICRpbkxpbmVIZWlnaHQgPCAkaW5TaXplKSB7XG5cdFx0bGluZS1oZWlnaHQ6IHRvUmVtKCRuZXdMaW5lSGVpZ2h0KTsgfVxuXHRAZWxzZSB7XG5cdFx0bGluZS1oZWlnaHQ6IHRvUmVtKCRpbkxpbmVIZWlnaHQpOyB9IH1cblxuLy/mloflrZflgI3njodcbkBtaXhpbiBmb250LWxldmVsKCRmTGV2ZWwpIHtcblx0QGlmKCRmTGV2ZWwgPCAwKSB7XG5cdFx0JGZMZXZlbDogMDsgfVxuXHQkbmV3Zm9udDogJGZvbnRTaXplICogKDEgKyAkZkxldmVsICogJGZvbnRTaXplTGV2ZWwpO1xuXHQkZkxldmVsTGluZUhlaWdodDogY2VpbCgkbmV3Zm9udCAqICRsaW5lSGVpZ2h0TGV2ZWwpO1xuXHRmb250LXNpemU6ICRuZXdmb250O1xuXHRmb250LXNpemU6IHRvUmVtKCRuZXdmb250KTtcblx0bGluZS1oZWlnaHQ6IHRvUmVtKCRmTGV2ZWxMaW5lSGVpZ2h0KTsgfVxuXG5cbi8vIHRyaWFuZ2xlIOS4ieinkuW9oiBtaXhpblxuLy8rdHJpYW5nbGUoMTBweCAxMnB4LCAjYWUwMDAwLHVwKVxuQG1peGluIHRyaWFuZ2xlICgkc2l6ZSwgJGNvbG9yLCAkZGlyZWN0aW9uKSB7XG5cdGhlaWdodDogMDtcblx0d2lkdGg6IDA7XG5cdCR3aWR0aDogbnRoKCRzaXplLCAxKTtcblx0JGhlaWdodDogbnRoKCRzaXplLCBsZW5ndGgoJHNpemUpKTtcblx0JGZvcmVncm91bmQtY29sb3I6IG50aCgkY29sb3IsIDEpO1xuXHQkYmFja2dyb3VuZC1jb2xvcjogaWYobGVuZ3RoKCRjb2xvcikgPT0gMiwgbnRoKCRjb2xvciwgMiksIHRyYW5zcGFyZW50KTtcblx0QGlmICgkZGlyZWN0aW9uID09IHVwKSBvciAoJGRpcmVjdGlvbiA9PSBkb3duKSBvciAoJGRpcmVjdGlvbiA9PSByaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gbGVmdCkge1xuXHRcdCR3aWR0aDogJHdpZHRoIC8gMjtcblx0XHQkaGVpZ2h0OiBpZihsZW5ndGgoJHNpemUpID4gMSwgJGhlaWdodCwgJGhlaWdodC8yKTtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSB1cCB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLWxlZnQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IHJpZ2h0IHtcblx0XHRcdGJvcmRlci1ib3R0b206ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci1sZWZ0OiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBkb3duIHtcblx0XHRcdGJvcmRlci1sZWZ0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7XG5cdFx0XHRib3JkZXItcmlnaHQ6ICR3aWR0aCBzb2xpZCAkYmFja2dyb3VuZC1jb2xvcjtcblx0XHRcdGJvcmRlci10b3A6ICRoZWlnaHQgc29saWQgJGZvcmVncm91bmQtY29sb3I7IH1cblx0XHRAZWxzZSBpZiAkZGlyZWN0aW9uID09IGxlZnQge1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdFx0Ym9yZGVyLXRvcDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gdXAtcmlnaHQpIG9yICgkZGlyZWN0aW9uID09IHVwLWxlZnQpIHtcblx0XHRib3JkZXItdG9wOiAkaGVpZ2h0IHNvbGlkICRmb3JlZ3JvdW5kLWNvbG9yO1xuXHRcdEBpZiAkZGlyZWN0aW9uID09IHVwLXJpZ2h0IHtcblx0XHRcdGJvcmRlci1sZWZ0OiAgJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSB1cC1sZWZ0IHtcblx0XHRcdGJvcmRlci1yaWdodDogJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9IH1cblx0QGVsc2UgaWYgKCRkaXJlY3Rpb24gPT0gZG93bi1yaWdodCkgb3IgKCRkaXJlY3Rpb24gPT0gZG93bi1sZWZ0KSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogJGhlaWdodCBzb2xpZCAkZm9yZWdyb3VuZC1jb2xvcjtcblx0XHRAaWYgJGRpcmVjdGlvbiA9PSBkb3duLXJpZ2h0IHtcblx0XHRcdGJvcmRlci1sZWZ0OiAgJHdpZHRoIHNvbGlkICRiYWNrZ3JvdW5kLWNvbG9yOyB9XG5cdFx0QGVsc2UgaWYgJGRpcmVjdGlvbiA9PSBkb3duLWxlZnQge1xuXHRcdFx0Ym9yZGVyLXJpZ2h0OiAkd2lkdGggc29saWQgJGJhY2tncm91bmQtY29sb3I7IH0gfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC11cCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICRoZWlnaHQgJHdpZHRoOyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LWRvd24pIHtcblx0XHRib3JkZXItY29sb3I6ICRmb3JlZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkaGVpZ2h0ICR3aWR0aDsgfVxuXHRAZWxzZSBpZiAoJGRpcmVjdGlvbiA9PSBpbnNldC1yaWdodCkge1xuXHRcdGJvcmRlci1jb2xvcjogJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGJhY2tncm91bmQtY29sb3IgJGZvcmVncm91bmQtY29sb3I7XG5cdFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcblx0XHRib3JkZXItd2lkdGg6ICR3aWR0aCAkaGVpZ2h0OyB9XG5cdEBlbHNlIGlmICgkZGlyZWN0aW9uID09IGluc2V0LWxlZnQpIHtcblx0XHRib3JkZXItY29sb3I6ICRiYWNrZ3JvdW5kLWNvbG9yICRmb3JlZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yICRiYWNrZ3JvdW5kLWNvbG9yO1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXdpZHRoOiAkd2lkdGggJGhlaWdodDsgfSB9XG5cbi8v572u5LitICd2JyDlnoLnm7Tnva7kuK0gJ2gnIOawtOW5s+e9ruS4rSAnYicg5Z6C55u05rC05bmz572u5LitXG5AbWl4aW4gY2VudGVyKCRwb3NpdGlvbikge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdEBpZiAkcG9zaXRpb24gPT0gJ3YnIHtcblx0XHR0b3A6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IH1cblx0QGVsc2UgaWYgJHBvc2l0aW9uID09ICdoJyB7XG5cdFx0bGVmdDogNTAlO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUpOyB9XG5cdEBlbHNlIGlmICRwb3NpdGlvbiA9PSAnYicge1xuXHRcdHRvcDogNTAlO1xuXHRcdGxlZnQ6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsgfSB9XG5cbi8vUldEIOe2suagvOiuiuaPm1xuLy8kY29vQ29sIOe2suagvOaVuFxuLy8kY29vQ29scyDntrLmoLzkvZTmoLzmlbhcbi8vJGNvb0d1dHRlciDplpPot50gcHggZW0gJVxuLy/kvb/nlKjmlrnlvI8gK2Nvbyg2LDIsMTBweClcbkBtaXhpbiBjb28oJGNvb0NvbCwkY29vQ29sczogMSwkY29vR3V0dGVyOiAwKSB7XG5cdHdpZHRoOiBzcGFuKCRjb29Db2xzIG5hcnJvdyBvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSk7XG5cdEBpZiAkY29vR3V0dGVyICE9IDAge1xuXHRcdG1hcmdpbi1sZWZ0OiBndXR0ZXIob2YgJGNvb0NvbCBzZXQtZ3V0dGVycyAkY29vR3V0dGVyIHdpZGUpIC8gMjtcblx0XHRtYXJnaW4tcmlnaHQ6IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSkgLyAyO1xuXHRcdG1hcmdpbi1ib3R0b206IGd1dHRlcihvZiAkY29vQ29sIHNldC1ndXR0ZXJzICRjb29HdXR0ZXIgd2lkZSk7IH0gfVxuIiwiLy89PT09PT09PT09PT09PT09PT09PT09XG4vL+aMiemIlSBCdXR0b25cbi8vPT09PT09PT09PT09PT09PT09PT09PVxuJUJ0biB7XG5cdHdpZHRoOiAkYnRuV2lkdGg7XG5cdGhlaWdodDogJGJ0bkhlaWdodDtcblx0bWFyZ2luOiA1cHg7XG5cdHBhZGRpbmc6IDAgZ2FwKDIpO1xuXHRkaXNwbGF5OiBpbmxpbmUtZmxleDtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG5cdHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRib3JkZXItd2lkdGg6ICRidG5MaW5lV2lkdGg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0YXBwZWFyYW5jZTogbm9uZTtcblx0dHJhbnNpdGlvbjogYWxsIC4zcyBlYXNlLW91dDtcblx0Jjpmb2N1cyxcblx0JjphY3RpdmU6Zm9jdXMge1xuXHRcdG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfVxuXHQmOmFjdGl2ZSB7XG5cdFx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcblx0XHRvdXRsaW5lOiAwOyB9IH1cbi8v5riF6ZmkXG4lY2xlYXIge1xuXHQmOmFmdGVyIHtcblx0XHRjb250ZW50OiBcIlwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHRcdGNsZWFyOiBib3RoOyB9IH1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQyxBQUFBLEtBQUssQ0FBQztDQUNMLEtBQUssRWNvREssS0FBSztDZG5EZixNQUFNLEVja0RlLElBQUk7Q2RqRHpCLEtBQUssRWMrQ2dCLENBQUM7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 */
