/*!*************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./assets/styles/app.css ***!
  \*************************************************************************************************/
:root
{
    --app-background: rgb(0, 0, 0);
    --app-content-background: #101010;
    --app-font-color: white;
    
    --app-color-red:#ec0b16;
    --app-color-green: #14B714;
    
    --element-radius: 1em;
    --element-background: #9a9996;
    --element-background-dark: rgb(94, 92, 100);  
    --element-height: 4em;
    
    --sub-element-height: 3.5em;
    
    --dialog-background: rgba(0, 0, 0, 0.8);
    --dialog-content-background: #34683f;
    
    --form-background-color: #444444;
    
    --topbar-height: 2em;
}

html
{
    background: var(--app-background);
}

body
{
    color: var(--app-font-color);
    font-weight: bold;
    
    margin: 0.5em;
    
    display: grid;
}

header
{
	grid-row: 1;
}

h3
{
	text-align: center;
}

label, 
div, 
input, 
textarea
{
    color: var(--app-font-color);
    font-weight: bold;
}

input:focus,
textarea:focus,
button:focus,
a:focus
{
	outline: none;
}

input,
textarea
{
	background-color: transparent;
	border: 0px;
	
	width: 100%;
	
	text-align: center;
}

.app-page
{
	background-color: var(--form-background-color);
	border-radius: var(--element-radius);
	
	padding: 0.5em;
	
	display: flex;
	flex-direction: column;
	
	align-items: center;
}

.app-form
{
	padding: 0.5em;
	
	background-color: var(--form-background-color);
	border-radius: var(--element-radius);
}

.flash-error
{
	color: var(--app-color-red);
	font-size: 1.3em;
}

a
{   
    text-decoration: none;
    cursor: pointer;
    color: var(--app-font-color);
    font-weight: bold;
    
    width: 100%;
    flex-grow: 1;
    min-height: 1em;
    text-align: center;
}

td
{
	text-align: center;
}

form
{
	display: flex;
	justify-content: center;
}

button,
[id="form_cancle"]
{
	width: 100%;
	border: 0px;
	border-radius: var(--element-radius);
	color: var(--app-font-color);
    font-weight: bold;
    background: var(--element-background);
    
    padding: 0.2em;
}

button[id="form_save"]
{
    background: var(--app-color-green);
}

.app-grid-layout
{
	display: grid;
}
/*!****************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./assets/styles/images.css ***!
  \****************************************************************************************************/

.img-bock-0 {
	content: url(/build/images/bock_0.2c16efd3.svg);
}

.img-bock-1 {
	content: url(/build/images/bock_1.c15c3081.svg);
}

.img-bock-2 {
	content: url(/build/images/bock_2.1e2239b1.svg);
}

.img-show-menu {
	content: url(/build/images/showMenu.b0af2d30.svg);
}

.img-arrow-left {
	content: url(/build/images/arrowLeft.f23c47c2.svg);
}

.img-arrow-right {
	content: url(/build/images/arrowRight.72f619c2.svg);
}

.img-checkbox-0 {
	content: url(/build/images/checkbox_0.d768f0de.svg);
}

.img-checkbox-1 {
	content: url(/build/images/checkbox_1.d91efc9b.svg);
}

.img-show-settings
{
	content: url(/build/images/showSettings.51a194dd.svg);
}

.img-ok-button
{
	content: url(/build/images/ok.76698602.svg);
}

.img-cancel-button
{
	content: url(/build/images/cancel.377bb1e8.svg);
}
/*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/SortableTable/TableCell.vue?vue&type=style&index=0&id=c045cc90&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************/

form[data-v-c045cc90]
{
	border: 0.2em solid darkgreen;
	border-radius: 1em;
	
	display: flex;
	flex-direction: row;
}
input[data-v-c045cc90]
{
	font-size: 1.5em;
}
.form-cancel[data-v-c045cc90],
.form-ok[data-v-c045cc90]
{
	border-radius: 1em;
	background-color: var(--element-background);
	
	padding: 0.1em;
	
	width: 3em;
	height: 3em;
	
	padding: 0.1em;
	margin: 0.1em;
	
	display: flex;
}
.form-cancel > div[data-v-c045cc90],
.form-ok > div[data-v-c045cc90]
{
	padding: 0.1em;
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/SortableTable/SortableTable.vue?vue&type=style&index=0&id=8eb731c4&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************/

.admin-grid
{
	display: grid;
}
.grid-header
{
	font-weight: bold;
	
	border-bottom: 0.1em sold black;
}
.grid-header,
.grid-body
{
	text-align: center;
}
.grid-body > div
{
	min-height: 1em;
}


/*!******************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Ansagen/AnsageInput.vue?vue&type=style&index=0&id=ac8da202&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************/

.AnsageInput[data-v-ac8da202]
{
    position: relative;
    display: flex;
    flex-direction: row;
	justify-content: right;

    margin: 0px;
    
    background-color: var(--element-background);
    border-radius: 1em;
    
    flex-grow: 1;
	flex-shrink: 0;
	
	padding: 0.25em;
	
	align-self: center;
}
.AngesagtLabel[data-v-ac8da202], 
.VorabLabel[data-v-ac8da202]
{
    align-self: center;
    margin-left: 0.5em;  
	text-align: right;
	
	min-width: 8em;
}
.VorabLabel[data-v-ac8da202]
{
	min-width: 5em;
}
.AngesagtButton[data-v-ac8da202],
.VorabButton[data-v-ac8da202]
{
    position: relative;
        
	width:  1.8em;

    border-radius: 0.9em;
    
    margin: 0.25em;
	
	width: 1.5em;
	height: 1.5em;
}


/*!*****************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Dialog.vue?vue&type=style&index=0&id=1f1dfaf0&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************/

.dialog
{
    position: fixed;
    
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    
    z-index: 9998;
        
    background-color: var(--dialog-background);
    
    display: flex;
    flex-direction: row;
}
.dialog-title
{
    text-align: center;
}
.dialog-content
{
    margin: 1em;
    padding: 1em;
    border-radius: 1em;
    background-color: var(--form-background-color);
    
    flex-grow: 1;
    
    display: grid;
    flex-direction: column;
    align-items: center;
}
.dialog-content-row
{
    display: flex;
    flex-direction: row;
}
.dialog-button
{
    max-height: var(--element-height);
    background-color: var(--element-background);
    border-radius: var(--element-radius);
    margin-top: 1.5em;
    
    align-self: center;
    display: flex;
    align-items: center;
    justify-content: center;
}




/*!**************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Mitspieler/MitspielerDialog.vue?vue&type=style&index=0&id=3d7f6e82&scoped=true&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************/

.Mitspieler[data-v-3d7f6e82]
{
	background-color: var(--element-background);
	border-radius: 1em;
	
	padding: 0.5em;
	
	width: 100%;
	
	text-align: center;
}

/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Number/NumberInputDialog.vue?vue&type=style&index=0&id=ad430d2a&lang=css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************/

.keyboard-input
{
	justify-self: center;
	
	display: grid;
	grid-template-rows: 1fr auto;
	grid-template-columns: 1fr 1fr 1fr; 
	
	max-width: 16em;
}
.Display
{
    display: flex;
    flex-direction: row;
	align-items: center;
    height: 2em;
    
    background-color: var(--element-background);
    border-radius: var(--element-radius); 
    
    margin: 0.25em;
    padding: 0.5em;
	
	grid-row: 1;
	grid-column-start: 1;
	grid-column-end: 4;
}
.Key
{
    background-color: var(--element-background);
    border-radius: var(--element-radius);
    
    margin: 0.25em;
    padding: 0.5em;
    
    min-width: 4em;
}
.Punkte > a, .DelButton > a
{
    width: 100%;
    text-align: center;
}
.Punkte
{
    width: 2em;
    
    display: flex;
    align-items: center;
}

/*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Partei/ParteiRow.vue?vue&type=style&index=0&id=62b12253&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************/

.SpielerName[data-v-62b12253]
{
	padding: 0.25em;
}
.Partei[data-v-62b12253]
{
	width: 1.5em;
	height: 1.5em;
	
	padding: 0.25em;
	
	justify-self: center;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Partei/ParteiDialog.vue?vue&type=style&index=0&id=3976bd42&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************/

.ParteiTable
{	
	display: grid;
	grid-template-rows: auto;
	grid-template-columns: 2fr 1fr;
	
	justify-self: center;
}


/*!*************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/TouchArea.vue?vue&type=style&index=0&id=124a714d&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************/

.TouchArea
{
    display: flex;
    
    align-items: center;
    
    min-width: 1.5em;
    min-height: 1.5em;
}
.TextAreaText
{
    width: 100%;
    text-align: center;
}

/*!***************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Taken/TakenInput.vue?vue&type=style&index=0&id=0605cdd3&scoped=true&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************************/

.TakenInput[data-v-0605cdd3]
{
    position: relative;
    display: flex;
    flex-direction: row;
    align-items: center;

    margin: 0px;
    padding: 0.25em;
    
    background-color: var(--element-background);
    border-radius: 1em;
    
    flex-grow: 1;
}
.TakenType[data-v-0605cdd3]
{
    flex-grow: 1;
	
	align-content: center;
}
.TakenValue[data-v-0605cdd3]
{
	width: 2em;
	
	align-content: center;
}



/*!**************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Dialog/Type/TypeDialog.vue?vue&type=style&index=0&id=23324582&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************/

.Type, .TypeSelected
{
	background-color: var(--element-background);
}
.TypeSelected
{
	background-color: green;
}


/*!**************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Forms/Form.vue?vue&type=style&index=0&id=008e479a&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************/

.form-grid
{
	display: grid;
	grid-template-columns: 1fr 1fr;
	grid-template-rows: auto;
}
.form
{
	align-self: center;
		
	display: flex;
	justify-content: center;
}
.form-label
{
	text-align: right;
	
	padding-top: 0.5em;
	
	flex-grow: 1;
	width: 100%;
	
	grid-column: 1;
}
.form-row
{
	grid-column-start: 1;
	grid-column-end: 3;
}
.form-data, 
.form-button-data
{
    display: flex;
    flex-direction: row;
	justify-content: center;
	
	margin-bottom: 0.25em;	
	
	grid-column: 2;
}
.form-button-data
{
	margin-top: 0.6em;
}
.form-content
{
	width: 100%;
	min-width: 12em;
	
    display: flex;
    flex-direction: row;
	justify-content: center;
	
	text-align: center;
	
	background-color: var(--element-background);
	border-radius: var(--element-radius);
	
	margin-left: 0.5em;
	
	padding-top: 0.3em;
	padding-bottom: 0.3em;
}
.form-content-col
{
	min-width: 50%;
	min-height: 1em;
}
.form-spacer
{	
  	width: 20%;
		
	margin-left: 0.5em;
		
	padding-top: 0.5em;
}
.form-title-row
{
	width: 100%;
	display: flex;
    flex-direction: row;
		
	margin-left: 0.5em;
	padding-top: 0.5em;
}
.form-title-row > div
{
	
	text-align: center;
}
.form-button
{
	border: 0px;
	border-radius: var(--element-radius);
	
	display: flex;
	justify-content: center;
	align-items: center;
	
	width: 100%;
}
.form-button[id="form_save"]
{
	margin-left: 0.5em;
    background: var(--app-color-green);
}
.form-button[id="form_cancle"]
{
    background: var(--app-color-red);
}
.form-error
{
	border: 0.14em solid red;
}


/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/FormDialog/FormDialog.vue?vue&type=style&index=0&id=59048ff0&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************/

.setting
{
	align-self: center;
	width: 100%;
	
	text-align: center;
	
	background-color: var(--element-background);
		
	padding: 0.5em;
	margin: 0.25em;
}
.setting-selected
{
	background-color: green;
}


/*!***********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/components/Keyboard.vue?vue&type=style&index=0&id=25c4cabe&lang=css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************/

.keyboard
{
	justify-self: center;
	
	display: grid;
	grid-template-rows: 1fr auto;
	grid-template-columns: 1fr 1fr 1fr; 
	
	max-width: 16em;
}
.keyboard-display
{
    display: flex;
    flex-direction: row;
	align-items: center;
    height: 2em;
    
    background-color: var(--element-background);
    border-radius: var(--element-radius); 
    
    margin: 0.25em;
    padding: 0.5em;
	
	grid-row: 1;
	grid-column-start: 1;
	grid-column-end: 4;
}
.keyboard-key
{
    background-color: var(--element-background);
    border-radius: var(--element-radius);
    
    margin: 0.25em;
    padding: 0.5em;
    
    min-width: 4em;
	
	text-align: center;
}


/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/FormDialog/AbrechnungsfaktorDialog.vue?vue&type=style&index=0&id=30cd93b5&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************/

.keyboard
{
	grid-column-start: 1;
	grid-column-end: 3;
}

/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Forms/FormRow.vue?vue&type=style&index=0&id=0dd433d7&scoped=true&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************/

.form-content-col > input[type='number'][data-v-0dd433d7] {
    -moz-appearance:textfield;
}
.form-content-col > input[data-v-0dd433d7]::-webkit-outer-spin-button,
.form-content-col > input[data-v-0dd433d7]::-webkit-inner-spin-button {
    -webkit-appearance: none;
}

/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Forms/Spiel/ParteiRow.vue?vue&type=style&index=0&id=59ab9288&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************/

.partei-spieler
{
    flex-grow: 1;
}


/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Forms/Spiel/PunkteRow.vue?vue&type=style&index=0&id=19e2866c&scoped=true&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************************/

.PunkteInput[data-v-19e2866c]
{
    display: flex;
    flex-direction: row;
}
.PunkteRe > a[data-v-19e2866c], .PunkteContra > a[data-v-19e2866c]
{
    text-align: center;
    width: 100%;
    align-self: center;
}
.PunkteRe[data-v-19e2866c], .PunkteContra[data-v-19e2866c]
{
    position: relative;
    
    background-color: var(--element-background);
    border-radius: var(--element-radius);

    margin: 0px;
    padding-top: 0.5em;
	padding-bottom: 0.5em; 
    
    flex-grow: 1;  
    
    display: flex;
}
.PunkteLabel[data-v-19e2866c]
{
    flex-grow: 1;
    align-self: center;
}

/* Chrome, Safari, Edge, Opera */
input[data-v-19e2866c]::-webkit-outer-spin-button,
input[data-v-19e2866c]::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* Firefox */
input[type=number][data-v-19e2866c] {
  -moz-appearance: textfield;
}


/*!*************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Forms/Spiel/SpielForm.vue?vue&type=style&index=0&id=2dfcae88&lang=css ***!
  \*************************************************************************************************************************************************************************************************************************************************************************************/

.form-label
{
	grid-column: 1;
}

/*!***************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Forms/ZugAdd/SpielerRow.vue?vue&type=style&index=0&id=27892b95&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************************************************/

.del-button
{
	align-self: end;
}
.mitspieler-row
{
	display: flex;
	flex-direction: row;
}
.mitspieler-label,
.mitspieler-value
{
	flex-grow: 1;
}
.mitspieler-label
{
	margin-right: 1em;
}


/*!************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/HideArea.vue?vue&type=style&index=0&id=a02382c4&lang=css ***!
  \************************************************************************************************************************************************************************************************************************************************************************/

.hide-area
{
	display: flex;
	flex-direction: column;
	
	background-color: var(--element-background);
	
	margin: 0.5em;
}
.hide-area-open
{
	border-bottom: 0.1em solid black;
}
.hide-area-title
{
	display: flex;
	flex-direction: row;
}
.hide-area-text
{
	flex-grow: 1;
	
	margin: 0.5em;
	margin-left: 0.4em;
}
.hide-area-button
{
	margin: 0.5em;
}


/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Gruppe.vue?vue&type=style&index=0&id=1f91c2aa&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************/

.gruppe
{
	display: flex;
}
.gruppe-name,
.gruppe-description
{
	text-align: center;
}
.gruppe-description
{
	font-style: italic;
}
.gruppe-table > tbody > tr > td,
.gruppe-table > thead > tr > th
{
	text-align: left;
}
.gruppen-setting
{
	display: flex;
	flex-direction: column;
}
.setting-value
{
	margin-left: 1em;
}
.admin-indicator
{
	width: 1em;
	height: 1em;
	
	justify-self: center;
}


/*!*****************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/GruppenSelect.vue?vue&type=style&index=0&id=01cc6760&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************/

.GruppenSelect
{
	display: flex;
	flex-direction: column;
	
	margin: 1em;
	
	width: 100%;
}
.Gruppe
{
	flex-grow: 1;
	margin: 0.5em;
	
	width: 100%;
}


/*!********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/Menu.vue?vue&type=style&index=0&id=16de62e4&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************/

.menu
{
	left: 0px;
	top: 0px;
	
	width: 100%;
	height: 100%;
	
	position: fixed;
		
	display: flex;
	flex-direction: row;
}
.menu-right
{
	flex-direction: row-reverse;
}
.menuBar
{	
	display: flex;
	flex-direction: column;
	
	background-color: green;
}
.menu-space
{
	flex-grow: 1;
	min-height: 1em;
}
.menu-icon
{
	width: var(--topbar-height);
	height: var(--topbar-height);
	
	padding: 0.25em;
	
	align-self: center;
}
.menu-entry
{
	margin-bottom: 0.25em;
	padding: 0.5em;
}
.menu-fade-enter-active,
.menu-fade-leave-active 
{
	opacity: all 0.1s ease;
}
.menu-fade-enter-from,
.menu-fade-leave-to 
{
	opacity: 0em;
	width: 0px;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/StatistikTable.vue?vue&type=style&index=0&id=50605e45&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************/

@media screen and (orientation: landscape)
{
.data-short
	{
		display: none;
}
}
@media screen and (orientation: portrait)
{
.data-long
	{
		display: none;
}
}
.statistic-table
{
	border-collapse: collapse;
}
.statistic-table > thead > tr > th,
.statistic-table > tbody > tr > td
{
	padding-left: 0.5em;
	padding-right: 0.5em;
	
	border-bottom: 0.1em solid black;
	border-right: 0.1em solid black;
}
.statistic-table > thead > tr > th:nth-child(1),
.statistic-table > tbody > tr > td:nth-child(1)
{
	text-align: left;
}
.statistic-table > tbody > tr:nth-last-child(1) > td
{
	border-bottom: 0px solid black;
}
.statistic-table > thead > tr > th:nth-last-child(1),
.statistic-table > tbody > tr > td:nth-last-child(1)
{
	border-right: 0px solid black;
}
th.active .arrow.asc,
div.active .arrow.asc
{
	border-bottom: 0.5em solid rgb(51, 209, 122);
}
th.active .arrow.dsc,
div.active .arrow.dsc
{
  border-top: 0.5em solid rgb(51, 209, 122);
}
.arrow {
  display: inline-block;
  vertical-align: middle;
  width: 0;
  height: 0;
  margin-left: 0.25em;
  opacity: 0.66;
}
.arrow.asc {
  border-left: 0.5em solid transparent;
  border-right: 0.5em solid transparent;
  border-bottom: 0.5em solid #fff;
}
.arrow.dsc {
  border-left: 0.5em solid transparent;
  border-right: 0.5em solid transparent;
  border-top: 0.5em solid #fff;
}


/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/TopBar.vue?vue&type=style&index=0&id=28d92e6d&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************/

.topbar
{
	width: 100%;
	height: var(--topbar-height);
	
	display: flex;
	align-items: center;
	
	background-color: black;
	
	padding-bottom: 0.5em;
}
.topbar-icon
{
	width: var(--topbar-height);
	height: var(--topbar-height);
	
	padding: 0.4em
}


/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/ZugRow.vue?vue&type=style&index=0&id=1bcfdd9d&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************/

.zug-row
{
	display: flex;
	flex-direction: row;
	
	margin: 0.25em;
	padding: 0.5em;
	    
    background: var(--element-background);
    border-radius: var(--element-radius);
}
.zug-datum .zug-spieler
{
	flex-grow: 1;
	
	padding: 0.5em;
	margin: 0.5em;
}
.zug-datum > a
{
	margin-right: 1em;
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/ZugTable/ZugTableRow/TableCell.vue?vue&type=style&index=0&id=e8ad0e4a&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************/

.re-indicator
{
	position: absolute;
	
	width: 0.4em;
	height: 0.4em;
	
	margin: 0.2em;
	
	border-radius: 0.2em;
	
	background-color: black;
}
.zug-table-cell,
.zug-table-cell-geber
{
	display: flex;
	height: 100%;
}
.zug-table-cell > a,
.zug-table-cell-geber > a
{
	flex-grow: 1;
}
.zug-table-cell-geber
{
	background-color: var(--element-background);
}

/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/ZugTable/ZugTableRow/TabelCellBock.vue?vue&type=style&index=0&id=1bc0249e&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************/

.cell-bock
{
	width: 1.25em;
	margin-top: 0.25em;
	
	display: inline;
}

/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/ZugTable/ZugTableRowNext.vue?vue&type=style&index=0&id=9498cce6&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************/

.cell-next,
.cell-next-geber
{
	width: 100%;
	
	display: flex;
}
.cell-next > a,
.cell-next-geber > a
{
	flex-grow: 1;
	min-height: 1em;
}
.cell-next-geber
{
	background-color: red;
}

/*!************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/vue/controllers/ZugTable.vue?vue&type=style&index=0&id=193d325e&lang=css ***!
  \************************************************************************************************************************************************************************************************************************************************************************/

.zug-table 
{
	display: grid;
	
	text-align: center;
}
.zug-head
{
	min-width: 2em;
}
.zug-table > div
{	
	border-right: 0.1em solid black;
	border-bottom:  0.1em solid black;
}
.zug-table > .last
{	
	border-right: 0px solid black;
}
.zug-table > tbody > tr:nth-last-child(2) > td
{
	border-bottom: 0.2em double black;
}
.zug-table > tbody > tr:nth-last-child(1) > td
{
	padding-top: 0.4em;
	border-bottom: 0em solid black;
}



/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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YnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2ltYWdlcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Tb3J0YWJsZVRhYmxlL1RhYmxlQ2VsbC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Tb3J0YWJsZVRhYmxlL1NvcnRhYmxlVGFibGUudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRGlhbG9nL0Fuc2FnZW4vQW5zYWdlSW5wdXQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRGlhbG9nL0RpYWxvZy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9EaWFsb2cvTWl0c3BpZWxlci9NaXRzcGllbGVyRGlhbG9nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL0RpYWxvZy9OdW1iZXIvTnVtYmVySW5wdXREaWFsb2cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRGlhbG9nL1BhcnRlaS9QYXJ0ZWlSb3cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRGlhbG9nL1BhcnRlaS9QYXJ0ZWlEaWFsb2cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvVG91Y2hBcmVhLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL0RpYWxvZy9UYWtlbi9UYWtlbklucHV0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL0RpYWxvZy9UeXBlL1R5cGVEaWFsb2cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRm9ybXMvRm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Gb3JtRGlhbG9nL0Zvcm1EaWFsb2cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvY29tcG9uZW50cy9LZXlib2FyZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Gb3JtRGlhbG9nL0FicmVjaG51bmdzZmFrdG9yRGlhbG9nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL0Zvcm1zL0Zvcm1Sb3cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRm9ybXMvU3BpZWwvUGFydGVpUm93LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL0Zvcm1zL1NwaWVsL1B1bmt0ZVJvdy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Gb3Jtcy9TcGllbC9TcGllbEZvcm0udnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvRm9ybXMvWnVnQWRkL1NwaWVsZXJSb3cudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvSGlkZUFyZWEudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvR3J1cHBlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL0dydXBwZW5TZWxlY3QudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvTWVudS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9TdGF0aXN0aWtUYWJsZS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9Ub3BCYXIudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy92dWUvY29udHJvbGxlcnMvWnVnUm93LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL1p1Z1RhYmxlL1p1Z1RhYmxlUm93L1RhYmxlQ2VsbC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9adWdUYWJsZS9adWdUYWJsZVJvdy9UYWJlbENlbGxCb2NrLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvdnVlL2NvbnRyb2xsZXJzL1p1Z1RhYmxlL1p1Z1RhYmxlUm93TmV4dC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3Z1ZS9jb250cm9sbGVycy9adWdUYWJsZS52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiOnJvb3RcbntcbiAgICAtLWFwcC1iYWNrZ3JvdW5kOiByZ2IoMCwgMCwgMCk7XG4gICAgLS1hcHAtY29udGVudC1iYWNrZ3JvdW5kOiAjMTAxMDEwO1xuICAgIC0tYXBwLWZvbnQtY29sb3I6IHdoaXRlO1xuICAgIFxuICAgIC0tYXBwLWNvbG9yLXJlZDojZWMwYjE2O1xuICAgIC0tYXBwLWNvbG9yLWdyZWVuOiAjMTRCNzE0O1xuICAgIFxuICAgIC0tZWxlbWVudC1yYWRpdXM6IDFlbTtcbiAgICAtLWVsZW1lbnQtYmFja2dyb3VuZDogIzlhOTk5NjtcbiAgICAtLWVsZW1lbnQtYmFja2dyb3VuZC1kYXJrOiByZ2IoOTQsIDkyLCAxMDApOyAgXG4gICAgLS1lbGVtZW50LWhlaWdodDogNGVtO1xuICAgIFxuICAgIC0tc3ViLWVsZW1lbnQtaGVpZ2h0OiAzLjVlbTtcbiAgICBcbiAgICAtLWRpYWxvZy1iYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XG4gICAgLS1kaWFsb2ctY29udGVudC1iYWNrZ3JvdW5kOiAjMzQ2ODNmO1xuICAgIFxuICAgIC0tZm9ybS1iYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0NDQ0O1xuICAgIFxuICAgIC0tdG9wYmFyLWhlaWdodDogMmVtO1xufVxuXG5odG1sXG57XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYXBwLWJhY2tncm91bmQpO1xufVxuXG5ib2R5XG57XG4gICAgY29sb3I6IHZhcigtLWFwcC1mb250LWNvbG9yKTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBcbiAgICBtYXJnaW46IDAuNWVtO1xuICAgIFxuICAgIGRpc3BsYXk6IGdyaWQ7XG59XG5cbmhlYWRlclxue1xuXHRncmlkLXJvdzogMTtcbn1cblxuaDNcbntcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG5sYWJlbCwgXG5kaXYsIFxuaW5wdXQsIFxudGV4dGFyZWFcbntcbiAgICBjb2xvcjogdmFyKC0tYXBwLWZvbnQtY29sb3IpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG5pbnB1dDpmb2N1cyxcbnRleHRhcmVhOmZvY3VzLFxuYnV0dG9uOmZvY3VzLFxuYTpmb2N1c1xue1xuXHRvdXRsaW5lOiBub25lO1xufVxuXG5pbnB1dCxcbnRleHRhcmVhXG57XG5cdGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuXHRib3JkZXI6IDBweDtcblx0XG5cdHdpZHRoOiAxMDAlO1xuXHRcblx0dGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uYXBwLXBhZ2Vcbntcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZm9ybS1iYWNrZ3JvdW5kLWNvbG9yKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tZWxlbWVudC1yYWRpdXMpO1xuXHRcblx0cGFkZGluZzogMC41ZW07XG5cdFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXHRcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmFwcC1mb3JtXG57XG5cdHBhZGRpbmc6IDAuNWVtO1xuXHRcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZm9ybS1iYWNrZ3JvdW5kLWNvbG9yKTtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tZWxlbWVudC1yYWRpdXMpO1xufVxuXG4uZmxhc2gtZXJyb3Jcbntcblx0Y29sb3I6IHZhcigtLWFwcC1jb2xvci1yZWQpO1xuXHRmb250LXNpemU6IDEuM2VtO1xufVxuXG5hXG57ICAgXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tYXBwLWZvbnQtY29sb3IpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIFxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBtaW4taGVpZ2h0OiAxZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG50ZFxue1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbmZvcm1cbntcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbmJ1dHRvbixcbltpZD1cImZvcm1fY2FuY2xlXCJdXG57XG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDBweDtcblx0Ym9yZGVyLXJhZGl1czogdmFyKC0tZWxlbWVudC1yYWRpdXMpO1xuXHRjb2xvcjogdmFyKC0tYXBwLWZvbnQtY29sb3IpO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWVsZW1lbnQtYmFja2dyb3VuZCk7XG4gICAgXG4gICAgcGFkZGluZzogMC4yZW07XG59XG5cbmJ1dHRvbltpZD1cImZvcm1fc2F2ZVwiXVxue1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWFwcC1jb2xvci1ncmVlbik7XG59XG5cbi5hcHAtZ3JpZC1sYXlvdXRcbntcblx0ZGlzcGxheTogZ3JpZDtcbn0iLCJcbi5pbWctYm9jay0wIHtcblx0Y29udGVudDogdXJsKFwiLi4vaW1hZ2UvYm9ja18wLnN2Z1wiKTtcbn1cblxuLmltZy1ib2NrLTEge1xuXHRjb250ZW50OiB1cmwoXCIuLi9pbWFnZS9ib2NrXzEuc3ZnXCIpO1xufVxuXG4uaW1nLWJvY2stMiB7XG5cdGNvbnRlbnQ6IHVybChcIi4uL2ltYWdlL2JvY2tfMi5zdmdcIik7XG59XG5cbi5pbWctc2hvdy1tZW51IHtcblx0Y29udGVudDogdXJsKFwiLi4vaW1hZ2Uvc2hvd01lbnUuc3ZnXCIpO1xufVxuXG4uaW1nLWFycm93LWxlZnQge1xuXHRjb250ZW50OiB1cmwoXCIuLi9pbWFnZS9hcnJvd0xlZnQuc3ZnXCIpO1xufVxuXG4uaW1nLWFycm93LXJpZ2h0IHtcblx0Y29udGVudDogdXJsKFwiLi4vaW1hZ2UvYXJyb3dSaWdodC5zdmdcIik7XG59XG5cbi5pbWctY2hlY2tib3gtMCB7XG5cdGNvbnRlbnQ6IHVybChcIi4uL2ltYWdlL2NoZWNrYm94XzAuc3ZnXCIpO1xufVxuXG4uaW1nLWNoZWNrYm94LTEge1xuXHRjb250ZW50OiB1cmwoXCIuLi9pbWFnZS9jaGVja2JveF8xLnN2Z1wiKTtcbn1cblxuLmltZy1zaG93LXNldHRpbmdzXG57XG5cdGNvbnRlbnQ6IHVybChcIi4uL2ltYWdlL3Nob3dTZXR0aW5ncy5zdmdcIik7XG59XG5cbi5pbWctb2stYnV0dG9uXG57XG5cdGNvbnRlbnQ6IHVybChcIi4uL2ltYWdlL29rLnN2Z1wiKTtcbn1cblxuLmltZy1jYW5jZWwtYnV0dG9uXG57XG5cdGNvbnRlbnQ6IHVybChcIi4uL2ltYWdlL2NhbmNlbC5zdmdcIik7XG59IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG5cdGRhdGE6IE9iamVjdFx0XG59KTtcblxuY29uc3QgZWRpdCA9IHJlZihmYWxzZSk7XG5cbmZ1bmN0aW9uIGVkaXRDbGlja2VkKCkgXG57XG5cdGVkaXQudmFsdWUgPSB0cnVlO1xufVxuXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8ZGl2IGNsYXNzPVwiZ3JpZC1ib2R5XCIgPlxuXHRcdDxkaXYgdi1pZj1cIiFlZGl0XCIgQGNsaWNrPVwiZWRpdENsaWNrZWRcIj57eyBkYXRhLnZhbHVlIH19PC9kaXY+XG5cdFx0PGZvcm0gdi1pZj1cImVkaXRcIiA6YWN0aW9uPVwicHJvcGVydGllcy5kYXRhLmFjdGlvblwiIG5hbWU9XCJmb3JtXCIgbWV0aG9kPVwicG9zdFwiPlxuXHRcdFx0PGlucHV0IHJlZj1cImlucHV0LWVsZW1lbnRcIlx0XHRcblx0XHRcdFx0OnR5cGU9XCJwcm9wZXJ0aWVzLmRhdGEudHlwZVwiIFxuXHRcdFx0XHQ6aWQ9XCJwcm9wZXJ0aWVzLmRhdGEuaWRcIiBcblx0XHRcdFx0Om5hbWU9XCJwcm9wZXJ0aWVzLmRhdGEubmFtZVwiIFxuXHRcdFx0XHQ6dmFsdWU9XCJwcm9wZXJ0aWVzLmRhdGEudmFsdWVcIj5cblx0XHRcdDxidXR0b24gY2xhc3M9XCJmb3JtLW9rXCIgdHlwZT1cInN1Ym1pdFwiPjxkaXYgY2xhc3M9XCJpbWctb2stYnV0dG9uXCI+U3BlaWNoZXJuPC9kaXY+PC9idXR0b24+XG5cdFx0XHQ8YnV0dG9uIGNsYXNzPVwiZm9ybS1jYW5jZWxcIiBAY2xpY2s9XCJlZGl0ID0gZmFsc2VcIj48ZGl2IGNsYXNzPVwiaW1nLWNhbmNlbC1idXR0b25cIj5BYmJyZWNoZW48L2Rpdj48L2J1dHRvbj5cblx0XHQ8L2Zvcm0+XG5cdDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbmZvcm1cbntcblx0Ym9yZGVyOiAwLjJlbSBzb2xpZCBkYXJrZ3JlZW47XG5cdGJvcmRlci1yYWRpdXM6IDFlbTtcblx0XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG5cbmlucHV0XG57XG5cdGZvbnQtc2l6ZTogMS41ZW07XG59XG5cbi5mb3JtLWNhbmNlbCxcbi5mb3JtLW9rXG57XG5cdGJvcmRlci1yYWRpdXM6IDFlbTtcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZWxlbWVudC1iYWNrZ3JvdW5kKTtcblx0XG5cdHBhZGRpbmc6IDAuMWVtO1xuXHRcblx0d2lkdGg6IDNlbTtcblx0aGVpZ2h0OiAzZW07XG5cdFxuXHRwYWRkaW5nOiAwLjFlbTtcblx0bWFyZ2luOiAwLjFlbTtcblx0XG5cdGRpc3BsYXk6IGZsZXg7XG59XG5cbi5mb3JtLWNhbmNlbCA+IGRpdixcbi5mb3JtLW9rID4gZGl2XG57XG5cdHBhZGRpbmc6IDAuMWVtO1xufVxuPC9zdHlsZT4iLCJcbjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYsIGNvbXB1dGVkLCBvbkJlZm9yZU1vdW50IH0gZnJvbSAndnVlJztcbmltcG9ydCBUYWJsZUNlbGwgZnJvbSAnLi9UYWJsZUNlbGwudnVlJztcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcblx0ZGF0YTogT2JqZWN0XHRcbn0pO1xuXG5jb25zdCBzdHlsZSA9IHJlZihcIlwiKTtcdFxuXG5jb25zdCBzb3J0S2V5ID0gcmVmKCcnKTtcblxuY29uc3QgaGVhZGVyID0gY29tcHV0ZWQoKCkgPT4gXG57XG5cdGxldCBoZWFkZXIgPSBbXTtcblx0XG5cdGxldCBzb3VyY2UgPSBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyO1xuXHRcblx0Zm9yKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKylcblx0e1xuXHRcdGhlYWRlcltpXSA9IHNvdXJjZVtpXS5sYWJlbDtcblx0fVxuXHRcblx0cmV0dXJuIGhlYWRlcjtcbn0pO1xuXG5jb25zdCBzb3J0T3JkZXJzID0gcmVmKFxuXHRoZWFkZXIudmFsdWUucmVkdWNlKChvLCBrZXkpID0+ICgob1trZXldID0gMSksIG8pLCB7fSlcbik7XG5cbmZ1bmN0aW9uIHNvcnRCeShrZXkpIFxue1xuXHRzb3J0S2V5LnZhbHVlID0ga2V5XG4gIFx0c29ydE9yZGVycy52YWx1ZVtrZXldICo9IC0xXG59XG5cbmZ1bmN0aW9uIGZpbmRCeUxhYmVsKGRhdGEsIGxhYmVsKVxue1x0XHRcblx0bGV0IHJvd0RhdGEgPSBPYmplY3Qua2V5cyhkYXRhKS5tYXAoKGtleSkgPT4gW2tleSwgZGF0YVtrZXldXSk7XG5cdFxuXHRmb3IobGV0IGkgPSAwOyBpIDwgcm93RGF0YS5sZW5ndGg7IGkrKylcblx0e1xuXHRcdGlmKHJvd0RhdGFbaV1bMV0ubGFiZWwgPT0gbGFiZWwpXG5cdFx0e1xuXHRcdFx0cmV0dXJuIHJvd0RhdGFbaV1bMV07XG5cdFx0fVxuXHR9XG5cdFxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZpbmRUeXBlQnlMYWJlbChsYWJlbClcbntcblx0bGV0IGRhdGEgPSBwcm9wZXJ0aWVzLmRhdGEuZGF0YTtcblx0XG5cdGZvcihsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0bGV0IHJvd0RhdGEgPSBPYmplY3Qua2V5cyhkYXRhW2ldKS5tYXAoKGtleSkgPT4gW2tleSwgZGF0YVtpXVtrZXldXSk7XG5cdFx0XG5cdFx0aWYocm93RGF0YVtpXVsxXS5sYWJlbCA9PSBsYWJlbClcblx0XHR7XG5cdFx0XHRyZXR1cm4gcm93RGF0YVtpXVsxXS5mb3JtVHlwZTtcblx0XHR9XG5cdH1cblx0XG5cdHJldHVybiBcIlwiO1xufVxuXG5mdW5jdGlvbiBmaW5kVmFsdWVCeUxhYmVsKGRhdGEsIGtleSlcbntcblx0bGV0IHRlbXAgPSBPYmplY3Qua2V5cyhkYXRhWzFdKS5tYXAoKGtleSkgPT4gW2tleSwgZGF0YVsxXVtrZXldXSk7XG5cdFxuXHRmb3IobGV0IGkgPSAwOyBpIDwgdGVtcC5sZW5ndGg7IGkrKylcblx0e1xuXHRcdGlmKHRlbXBbaV1bMV0ubGFiZWwgPT0ga2V5KVxuXHRcdHtcblx0XHRcdHJldHVybiB0ZW1wW2ldWzFdLnZhbHVlO1xuXHRcdH1cblx0fVxuXHRcblx0cmV0dXJuIFwiXCI7XG59XG5cbmZ1bmN0aW9uIHNvcnRUYWJsZUJ5TnVtYmVyKGEsIGIpXG57XG5cdGNvbnN0IGtleSA9IHNvcnRLZXkudmFsdWU7XG5cdGNvbnN0IG9yZGVyID0gc29ydE9yZGVycy52YWx1ZVtrZXldO1xuXG5cdGxldCB2YWx1ZUEgPSBmaW5kVmFsdWVCeUxhYmVsKGEsIGtleSk7XG5cdGxldCB2YWx1ZUIgPSBmaW5kVmFsdWVCeUxhYmVsKGIsIGtleSk7IFxuXHRcblx0cmV0dXJuICgodmFsdWVBIDwgdmFsdWVCKSA/IDEgOiAtMSkgKiBvcmRlcjtcbn1cblxuZnVuY3Rpb24gc29ydFRhYmxlQnlTdHJpbmcoYSwgYilcbntcblx0Y29uc3Qga2V5ID0gc29ydEtleS52YWx1ZTtcblx0Y29uc3Qgb3JkZXIgPSBzb3J0T3JkZXJzLnZhbHVlW2tleV07XG5cdFxuXHRsZXQgdmFsdWVBID0gZmluZFZhbHVlQnlMYWJlbChhLCBrZXkpO1xuXHRsZXQgdmFsdWVCID0gZmluZFZhbHVlQnlMYWJlbChiLCBrZXkpOyBcblx0XG5cdGxldCBpbmRleCA9IDA7XG5cdFx0XG5cdHdoaWxlKChpbmRleCA8IHZhbHVlQS5sZW5ndGgpICYmIChpbmRleCA8IHZhbHVlQi5sZW5ndGgpKVxuXHR7XG5cdFx0bGV0IHZBID0gdmFsdWVBLmNoYXJBdChpbmRleCk7XG5cdFx0bGV0IHZCID0gdmFsdWVCLmNoYXJBdChpbmRleCk7XG5cdFx0XG5cdFx0aWYodkEgIT0gdkIpXG5cdFx0e1xuXHRcdFx0cmV0dXJuICgodkEgPCB2QikgPyAxIDogLTEpICogb3JkZXI7XG5cdFx0fVxuXHRcdFxuXHRcdGluZGV4Kys7XG5cdH1cblx0XG5cdGlmKCh2YWx1ZUEubGVuZ3RoID09IDApIHx8ICh2YWx1ZUIubGVuZ3RoID09IDApKVxuXHR7XG5cdFx0cmV0dXJuICgodmFsdWVBLmxlbmd0aCA8IHZhbHVlQi5sZW5ndGgpID8gMSA6IC0xKSAqIG9yZGVyO1xuXHR9XG5cdFxuXHRyZXR1cm4gMDtcbn1cblxuY29uc3QgZmlsdGVyZWREYXRhID0gY29tcHV0ZWQoKCkgPT4gXG57XHRcblx0bGV0IGRhdGEgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzLmRhdGEuZGF0YSkubWFwKChrZXkpID0+IFtrZXksIHByb3BlcnRpZXMuZGF0YS5kYXRhW2tleV1dKTtcblx0XHRcdFxuXHRpZiAoc29ydEtleS52YWx1ZSkgXG5cdHtcblx0XHRsZXQgdHlwZSA9IGZpbmRUeXBlQnlMYWJlbChzb3J0S2V5LnZhbHVlKTtcblx0XHRcblx0XHRpZigodHlwZSA9PSBcInRleHRcIikgfHwgKHR5cGUgPT0gXCJlbWFpbFwiKSlcblx0XHR7XG5cdFx0XHRkYXRhID0gZGF0YS5zbGljZSgpLnNvcnQoc29ydFRhYmxlQnlTdHJpbmcpO1xuXHRcdH1cblx0XHRlbHNlIGlmKHR5cGUgPT0gXCJudW1iZXJcIilcblx0XHR7XG5cdFx0XHRkYXRhID0gZGF0YS5zbGljZSgpLnNvcnQoc29ydFRhYmxlQnlOdW1iZXIpO1xuXHRcdH1cblx0fVxuXHRcblx0bGV0IGNlbGxzID0gW107XG5cdFxuXHRmb3IobGV0IHJvdyA9IDA7IHJvdyA8IGRhdGEubGVuZ3RoOyByb3crKylcblx0e1x0XHRcblx0XHRmb3IobGV0IGNvbCA9IDA7IGNvbCA8IHByb3BlcnRpZXMuZGF0YS5oZWFkZXIubGVuZ3RoOyBjb2wrKylcblx0XHR7XG5cdFx0XHRsZXQgb2JqZWN0ID0gZmluZEJ5TGFiZWwoZGF0YVtyb3ddWzFdLCBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyW2NvbF0ubGFiZWwpO1xuXHRcdFx0XG5cdFx0XHRjZWxsc1tyb3cgKiBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyLmxlbmd0aCArIGNvbF0gPSBbXTtcblx0XHRcdGNlbGxzW3JvdyAqIHByb3BlcnRpZXMuZGF0YS5oZWFkZXIubGVuZ3RoICsgY29sXVtcInZhbHVlXCJdIFx0PSBvYmplY3QudmFsdWU7XG5cdFx0XHRjZWxsc1tyb3cgKiBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyLmxlbmd0aCArIGNvbF1bXCJ0eXBlXCJdICBcdD0gb2JqZWN0LnR5cGU7XG5cdFx0XHRjZWxsc1tyb3cgKiBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyLmxlbmd0aCArIGNvbF1bXCJpZFwiXVx0XHQ9IG9iamVjdC5pZDtcblx0XHRcdGNlbGxzW3JvdyAqIHByb3BlcnRpZXMuZGF0YS5oZWFkZXIubGVuZ3RoICsgY29sXVtcIm5hbWVcIl1cdD0gb2JqZWN0Lm5hbWU7XG5cdFx0XHRjZWxsc1tyb3cgKiBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyLmxlbmd0aCArIGNvbF1bXCJhY3Rpb25cIl1cdD0gb2JqZWN0LmFjdGlvbjtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY2VsbHM7XG59KVxuXG5vbkJlZm9yZU1vdW50KCgpID0+IHtcblx0c3R5bGUudmFsdWUgPSBcImdyaWQtdGVtcGxhdGUtY29sdW1uczogXCI7XG5cdFx0XG5cdGZvcihsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmRhdGEuaGVhZGVyLmxlbmd0aDsgaSsrKVxuXHR7XG5cdFx0c3R5bGUudmFsdWUgKz0gKGkgPiAwKSA/IFwiIFwiIDogXCJcIjtcblx0XHRzdHlsZS52YWx1ZSArPSBcIjFmclwiO1x0XG5cdH1cblx0c3R5bGUudmFsdWUgKz0gXCI7XCI7XG59KTtcblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT4gXG5cdDxkaXYgY2xhc3M9XCJhZG1pbi1ncmlkXCIgOnN0eWxlPSdzdHlsZSc+XG5cdFx0PGRpdiBcblx0XHRcdGNsYXNzPVwiZ3JpZC1oZWFkZXJcIiBcblx0XHRcdHYtZm9yPVwibmFtZSBpbiBoZWFkZXJcIiBcblx0XHRcdDpjbGFzcz1cInsgYWN0aXZlOiBzb3J0S2V5ID09IG5hbWUgfVwiXG5cdFx0XHRAY2xpY2s9XCJzb3J0QnkobmFtZSlcIj5cblx0XHRcdHt7IG5hbWUgfX1cblx0XHRcdDxzcGFuIGNsYXNzPVwiYXJyb3dcIiA6Y2xhc3M9XCJzb3J0T3JkZXJzW25hbWVdID4gMCA/ICdhc2MnIDogJ2RzYydcIj48L3NwYW4+XG5cdFx0PC9kaXY+XG5cdFx0PFRhYmxlQ2VsbCB2LWZvcj1cImNlbGwgaW4gZmlsdGVyZWREYXRhXCIgOmRhdGE9XCJjZWxsXCI+XG5cdFx0PC9UYWJsZUNlbGw+XG5cdDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLmFkbWluLWdyaWRcbntcblx0ZGlzcGxheTogZ3JpZDtcbn1cblxuLmdyaWQtaGVhZGVyXG57XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRcblx0Ym9yZGVyLWJvdHRvbTogMC4xZW0gc29sZCBibGFjaztcbn1cblxuLmdyaWQtaGVhZGVyLFxuLmdyaWQtYm9keVxue1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5ncmlkLWJvZHkgPiBkaXZcbntcblx0bWluLWhlaWdodDogMWVtO1xufVxuXG48L3N0eWxlPiIsImQ8dGVtcGxhdGU+XG5cdFxuICAgIDxkaXYgY2xhc3M9XCJBbnNhZ2VJbnB1dFwiPlxuXHRcdDxkaXYgc3R5bGU9XCJmbGV4LWdyb3c6IDE7IGZsZXgtc2hyaW5rOiAxXCI+PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIkFuZ2VzYWd0TGFiZWxcIj57eyBsYWJlbCB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiQW5nZXNhZ3RCdXR0b25cIiA6Y2xhc3M9J1wiaW1nLWNoZWNrYm94LVwiICsgKCh3ZXJ0ID09IDApID8gXCIwXCIgOiBcIjFcIiknIEBjbGljaz1cImFuc2FnZUNsaWNrZWRcIiAvPlxuXHRcdDxkaXYgY2xhc3M9XCJWb3JhYkxhYmVsXCI+Vm9yYWI8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVm9yYWJCdXR0b25cIiA6Y2xhc3M9J1wiaW1nLWNoZWNrYm94LVwiICsgKCh3ZXJ0ID4gMSkgPyBcIjFcIiA6IFwiMFwiKScgQGNsaWNrPVwidm9yYWJDbGlja2VkXCIgLz5cblx0XHQ8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxOyBmbGV4LXNocmluazogMVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT4gXG5cbjxzY3JpcHQgc2V0dXA+XG4gICAgaW1wb3J0IHsgb25CZWZvcmVNb3VudCwgcmVmIH0gZnJvbSAndnVlJ1xuICAgIFxuICAgIGNvbnN0IHByb2JzID0gZGVmaW5lUHJvcHMoe1xuICAgICAgICBpZDogU3RyaW5nLFxuICAgICAgICB2YWx1ZTogTnVtYmVyLFxuICAgICAgICBsYWJlbDogU3RyaW5nXG4gICAgfSk7XG4gICAgXG4gICAgY29uc3Qgd2VydCA9IHJlZihcIlwiKTtcbiAgICBjb25zdCBsYWJlbCA9IHJlZihcIlwiKTtcbiAgICAgICAgICAgIFxuICAgIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2Fuc2FnZUNoYW5nZWQnXSlcbiAgICAgICAgXG4gICAgZnVuY3Rpb24gYW5zYWdlQ2xpY2tlZCgpIHtcbiAgICAgICAgaWYod2VydC52YWx1ZSA+IDApIHtcbiAgICAgICAgICAgIHdlcnQudmFsdWUgPSAwXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3ZXJ0LnZhbHVlID0gMVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBlbWl0KCdhbnNhZ2VDaGFuZ2VkJywgcHJvYnMuaWQsIHdlcnQudmFsdWUpO1xuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiB2b3JhYkNsaWNrZWQoKSB7XG4gICAgICAgIGlmKHdlcnQudmFsdWUgPiAxKSB7XG4gICAgICAgICAgICB3ZXJ0LnZhbHVlID0gMVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2VydC52YWx1ZSA9IDJcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZW1pdCgnYW5zYWdlQ2hhbmdlZCcsIHByb2JzLmlkLCB3ZXJ0LnZhbHVlKTtcbiAgICB9XG4gICAgICAgIFxuICAgIG9uQmVmb3JlTW91bnQoKCkgPT4gXG4gICAge1xuICAgICAgICB3ZXJ0LnZhbHVlID0gcHJvYnMudmFsdWU7XG4gICAgICAgIGxhYmVsLnZhbHVlID0gcHJvYnMubGFiZWw7XG4gICAgfSk7XG4gICAgXG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5BbnNhZ2VJbnB1dFxue1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdGp1c3RpZnktY29udGVudDogcmlnaHQ7XG5cbiAgICBtYXJnaW46IDBweDtcbiAgICBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1lbGVtZW50LWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICBcbiAgICBmbGV4LWdyb3c6IDE7XG5cdGZsZXgtc2hyaW5rOiAwO1xuXHRcblx0cGFkZGluZzogMC4yNWVtO1xuXHRcblx0YWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4uQW5nZXNhZ3RMYWJlbCwgXG4uVm9yYWJMYWJlbFxue1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBtYXJnaW4tbGVmdDogMC41ZW07ICBcblx0dGV4dC1hbGlnbjogcmlnaHQ7XG5cdFxuXHRtaW4td2lkdGg6IDhlbTtcbn1cblxuLlZvcmFiTGFiZWxcbntcblx0bWluLXdpZHRoOiA1ZW07XG59XG5cbi5Bbmdlc2FndEJ1dHRvbixcbi5Wb3JhYkJ1dHRvblxue1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgXG5cdHdpZHRoOiAgMS44ZW07XG5cbiAgICBib3JkZXItcmFkaXVzOiAwLjllbTtcbiAgICBcbiAgICBtYXJnaW46IDAuMjVlbTtcblx0XG5cdHdpZHRoOiAxLjVlbTtcblx0aGVpZ2h0OiAxLjVlbTtcbn1cblxuPC9zdHlsZT4iLCI8c2NyaXB0IHNldHVwPlxuXG5jb25zdCBwcm9icyA9IGRlZmluZVByb3BzKHtcbiAgICBzaG93OiBCb29sZWFuLFxuICAgIHRpdGxlOiBTdHJpbmdcbn0pO1xuXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoW1xuICAgICdjbG9zZSdcbl0pXG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gICAgPFRyYW5zaXRpb24gbmFtZT1cIm1vZGFsXCI+XG4gICAgICAgIDxkaXYgdi1pZj1cInNob3dcIiBjbGFzcz1cImRpYWxvZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiZGlhbG9nLXRpdGxlXCI+e3sgcHJvYnMudGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJjb250ZW50XCI+XG5cdFx0XHRcdFx0RGVmYXVsdCBDb250ZW50XG5cdFx0XHRcdDwvc2xvdD5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZGlhbG9nLWJ1dHRvblwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkaWFsb2ctYnV0dG9uXCIgQGNsaWNrPVwiJGVtaXQoJ2Nsb3NlJylcIj48YT5DbG9zZTwvYT48L2Rpdj5cblx0XHRcdFx0PC9zbG90PlxuICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L1RyYW5zaXRpb24+XG48L3RlbXBsYXRlPlxuXG48c3R5bGU+XG4uZGlhbG9nXG57XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIFxuICAgIHRvcDogMHB4O1xuICAgIGxlZnQ6IDBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgXG4gICAgei1pbmRleDogOTk5ODtcbiAgICAgICAgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGlhbG9nLWJhY2tncm91bmQpO1xuICAgIFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbn1cblxuLmRpYWxvZy10aXRsZVxue1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgICAgXG59XG5cbi5kaWFsb2ctY29udGVudFxue1xuICAgIG1hcmdpbjogMWVtO1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZm9ybS1iYWNrZ3JvdW5kLWNvbG9yKTtcbiAgICBcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgXG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5kaWFsb2ctY29udGVudC1yb3dcbntcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG5cbi5kaWFsb2ctYnV0dG9uXG57XG4gICAgbWF4LWhlaWdodDogdmFyKC0tZWxlbWVudC1oZWlnaHQpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWVsZW1lbnQtYmFja2dyb3VuZCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tZWxlbWVudC1yYWRpdXMpO1xuICAgIG1hcmdpbi10b3A6IDEuNWVtO1xuICAgIFxuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cblxuXG48L3N0eWxlPiIsIjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgRGlhbG9nIGZyb20gJy4uL0RpYWxvZy52dWUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHRzaG93OiBCb29sZWFuLFxuXHRtaXRnbGllZGVyOiBBcnJheVxufSlcblxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2xvc2UnXSk7XG5cbjwvc2NyaXB0PlxuPHRlbXBsYXRlPlxuXHQ8VGVsZXBvcnQgdG89XCJib2R5XCI+XG5cdFx0PERpYWxvZyA6c2hvdz1cInByb3BlcnRpZXMuc2hvd1wiIHRpdGxlPVwiXCIgQGNsb3NlPVwiJGVtaXQoJ2Nsb3NlJywgJycpXCI+XG5cdFx0XHQ8dGVtcGxhdGUgI2NvbnRlbnQ+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJNaXRzcGllbGVyXCIgdi1mb3I9XCJzcGllbGVyIGluIG1pdGdsaWVkZXJcIiBAY2xpY2s9XCIkZW1pdCgnY2xvc2UnLCBzcGllbGVyKVwiPnt7IHNwaWVsZXIgfX08L2Rpdj5cblx0XHRcdDwvdGVtcGxhdGU+XG5cdFx0XHQ8dGVtcGxhdGUgI2RpYWxvZy1idXR0b24+PGRpdj48L2Rpdj48L3RlbXBsYXRlPlxuXHRcdDwvRGlhbG9nPlxuXHQ8L1RlbGVwb3J0Plx0XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuLk1pdHNwaWVsZXJcbntcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZWxlbWVudC1iYWNrZ3JvdW5kKTtcblx0Ym9yZGVyLXJhZGl1czogMWVtO1xuXHRcblx0cGFkZGluZzogMC41ZW07XG5cdFxuXHR3aWR0aDogMTAwJTtcblx0XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiwgb25CZWZvcmVNb3VudCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgRGlhbG9nIGZyb20gJy4vLi4vRGlhbG9nJztcblxuY29uc3Qga2V5Ym9hcmREYXRhICA9IHJlZihbXSk7XG5jb25zdCB2YWx1ZSAgICAgICAgPSByZWYoMCk7XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG4gICAgbWluOiBOdW1iZXIsXG4gICAgbWF4OiBOdW1iZXIsXG4gICAgdmFsdWU6IE51bWJlcixcbiAgICB0aXRsZTogU3RyaW5nIFxufSk7XG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2Nsb3NlJ10pO1xuXG5mdW5jdGlvbiBjbG9zZSgpXG57XG4gICAgZW1pdCgnY2xvc2UnLCB2YWx1ZS52YWx1ZSk7XG59XG5cbm9uQmVmb3JlTW91bnQoKCkgPT4ge1xuICAgIFxuICAgIHZhbHVlLnZhbHVlID0gcHJvcGVydGllcy52YWx1ZTtcbiAgICBcbiAgICBsZXQgY29sQ291bnQgPSAzO1xuICAgIGxldCByb3dDb3VudCA9IDQ7XG4gICAgXG4gICAgbGV0IGxhYmVscyA9IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiLCBcIiBcIiwgXCIwXCIsIFwiRGVsXCJdO1xuICAgIFxuXHRmb3IobGV0IHJvdyA9IDA7IHJvdyA8IHJvd0NvdW50OyByb3crKylcbiAgICB7ICAgICAgICAgICAgXG4gICAgICAgIGZvcihsZXQgY29sID0gMDsgY29sIDwgY29sQ291bnQ7IGNvbCsrKVxuICAgICAgICB7ICAgICAgICAgICAgXG5cdFx0XHRrZXlib2FyZERhdGEudmFsdWVbKHJvdyAqIGNvbENvdW50KSArIGNvbF0gPSBbXTtcbiAgICAgICAgICAgIGtleWJvYXJkRGF0YS52YWx1ZVsocm93ICogY29sQ291bnQpICsgY29sXVtcInJvd1wiXSA9IHJvdyArIDE7XG5cdFx0XHRrZXlib2FyZERhdGEudmFsdWVbKHJvdyAqIGNvbENvdW50KSArIGNvbF1bXCJjb2xcIl0gPSBjb2wgKyAxO1xuXHRcdFx0a2V5Ym9hcmREYXRhLnZhbHVlWyhyb3cgKiBjb2xDb3VudCkgKyBjb2xdW1wibGFiZWxcIl0gPSBsYWJlbHNbKHJvdyAqIGNvbENvdW50KSArIGNvbF07XG4gICAgICAgIH0gIFxuICAgIH0gIFxufSlcblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcigpXG57XG4gICAgbGV0IHJlc3VsdCA9IFN0cmluZyh2YWx1ZS52YWx1ZSk7XG4gICAgXG4gICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCByZXN1bHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIFxuICAgIGlmKHJlc3VsdCA9PSBcIlwiKVxuICAgIHtcbiAgICAgICAgcmVzdWx0ID0gXCIwXCJcbiAgICB9XG4gICAgXG4gICAgdmFsdWUudmFsdWUgPSByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoYXIoY2hhcilcbntcbiAgICBsZXQgcmVzdWx0ID0gdmFsdWUudmFsdWU7XG4gICAgXG4gICAgaWYoY2hhciAhPSBcIiBcIilcbiAgICB7XG4gICAgICAgIGlmKHJlc3VsdCA9PSBcIjBcIilcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgIH1cbiAgICBcbiAgICBsZXQgbnVtYmVyID0gTnVtYmVyKHJlc3VsdCk7IFxuICAgIFxuICAgIGlmKG51bWJlciA8PSAyNDApXG4gICAge1xuICAgICAgICB2YWx1ZS52YWx1ZSA9IHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGtleVByZXNzZWQoa2V5KVxueyAgICBcbiAgICBpZihrZXkgPT0gXCJEZWxcIilcbiAgICB7XG4gICAgICAgIHJlbW92ZUNoYXIoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXBwZW5kQ2hhcihrZXkpO1xuICAgIH1cbn1cblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgICA8RGlhbG9nIDpzaG93PVwidHJ1ZVwiIDp0aXRsZT1cInByb3BlcnRpZXMudGl0bGVcIiBAY2xvc2U9XCJjbG9zZVwiPlxuICAgICAgICA8dGVtcGxhdGUgI2NvbnRlbnQ+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwia2V5Ym9hcmQtaW5wdXRcIj5cblx0ICAgICAgICAgICAgPGRpdiBjbGFzcz1cIkRpc3BsYXlcIj5cblx0ICAgICAgICAgICAgICAgIDxhPnt7IHZhbHVlIH19PC9hPlxuXHQgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiS2V5XCJcblx0XHRcdFx0XHR2LWZvcj1cImtleSBpbiBrZXlib2FyZERhdGFcIiBcblx0XHRcdFx0XHQ6Z3JpZC1yb3c9XCJrZXkucm93XCJcblx0XHRcdFx0XHQ6Z3JpZC1jb2x1bW49XCJrZXkuY29sXCJcblx0XHRcdFx0XHQgQGNsaWNrPVwia2V5UHJlc3NlZChrZXkubGFiZWwpXCI+XG5cdFx0XHRcdFx0IHt7IGtleS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PiAgIFxuXHRcdFx0PC9kaXY+ICAgICAgIFxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgIDwvRGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLmtleWJvYXJkLWlucHV0XG57XG5cdGp1c3RpZnktc2VsZjogY2VudGVyO1xuXHRcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0bztcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjsgXG5cdFxuXHRtYXgtd2lkdGg6IDE2ZW07XG59XG5cdFxuLkRpc3BsYXlcbntcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZWxlbWVudC1iYWNrZ3JvdW5kKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1lbGVtZW50LXJhZGl1cyk7IFxuICAgIFxuICAgIG1hcmdpbjogMC4yNWVtO1xuICAgIHBhZGRpbmc6IDAuNWVtO1xuXHRcblx0Z3JpZC1yb3c6IDE7XG5cdGdyaWQtY29sdW1uLXN0YXJ0OiAxO1xuXHRncmlkLWNvbHVtbi1lbmQ6IDQ7XG59XG5cbi5LZXlcbntcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1lbGVtZW50LWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWVsZW1lbnQtcmFkaXVzKTtcbiAgICBcbiAgICBtYXJnaW46IDAuMjVlbTtcbiAgICBwYWRkaW5nOiAwLjVlbTtcbiAgICBcbiAgICBtaW4td2lkdGg6IDRlbTtcbn1cblxuLlB1bmt0ZSA+IGEsIC5EZWxCdXR0b24gPiBhXG57XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uUHVua3RlXG57XG4gICAgd2lkdGg6IDJlbTtcbiAgICBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG48L3N0eWxlPiIsIjxzY3JpcHQgc2V0dXA+XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG4gICAgbmFtZTogU3RyaW5nLFxuICAgIHJlOiBOdW1iZXJcbn0pO1xuXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWydjbGlja2VkJ10pO1xuXG48L3NjcmlwdD5cbjx0ZW1wbGF0ZT5cblx0PGRpdiBjbGFzcz1cIlNwaWVsZXJOYW1lXCI+e3sgIHByb3BlcnRpZXMubmFtZSB9fTo8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiUGFydGVpXCIgQGNsaWNrPVwiJGVtaXQoJ2NsaWNrZWQnKVwiIDpjbGFzcz0nXCJpbWctY2hlY2tib3gtXCIgKyAocHJvcGVydGllcy5yZSA/IFwiMVwiIDogXCIwXCIpJz57eyBwcm9wZXJ0aWVzLnJlID8gXCJSZVwiIDogXCJDb250cmFcIiB9fTwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cblxuLlNwaWVsZXJOYW1lXG57XG5cdHBhZGRpbmc6IDAuMjVlbTtcbn1cblxuLlBhcnRlaVxue1xuXHR3aWR0aDogMS41ZW07XG5cdGhlaWdodDogMS41ZW07XG5cdFxuXHRwYWRkaW5nOiAwLjI1ZW07XG5cdFxuXHRqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbn1cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCBEaWFsb2cgZnJvbSAnLi8uLi9EaWFsb2cudnVlJztcbmltcG9ydCBQYXJ0ZWlSb3cgZnJvbSAnLi9QYXJ0ZWlSb3cudnVlJztcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcbiAgICBzcGllbGVyOiBPYmplY3QsXG4gICAgc2hvdzogQm9vbGVhblxufSk7XG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3BhcnRlaUNoYW5nZWQnXSk7XG5cbmZ1bmN0aW9uIHRvZ2dsZVNwaWVsZXIoaW5kZXgpXG57XG4gICAgcHJvcGVydGllcy5zcGllbGVyW2luZGV4XS5yZSA9ICFwcm9wZXJ0aWVzLnNwaWVsZXJbaW5kZXhdLnJlO1xuICAgIFxuICAgIGVtaXQoJ3BhcnRlaUNoYW5nZWQnLCBwcm9wZXJ0aWVzLnNwaWVsZXJbaW5kZXhdLmxhYmVsLCBwcm9wZXJ0aWVzLnNwaWVsZXJbaW5kZXhdLnJlKTsgICAgXG59XG5cbmZ1bmN0aW9uIGZpbmRTcGllbGVyKG5hbWUpXG57XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc3BpZWxlci5sZW5ndGg7IGkrKylcbiAgICB7XG4gICAgICAgIGlmKHByb3BlcnRpZXMuc3BpZWxlcltpXS5uYW1lID09IG5hbWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgICAgICBcbiAgICByZXR1cm4gLTE7ICAgIFxufVxuXG5mdW5jdGlvbiB0b2dnbGUobmFtZSlcbntcbiAgICBsZXQgaW5kZXggPSBmaW5kU3BpZWxlcihuYW1lKTtcbiAgICAgXG4gICAgaWYoaW5kZXggPj0gMClcbiAgICB7XG4gICAgICAgIHRvZ2dsZVNwaWVsZXIoaW5kZXgpO1xuICAgIH0gICAgXG59XG5cbmZ1bmN0aW9uIGNsaWNrZWQobmFtZSlcbntcbiAgICB0b2dnbGUobmFtZSk7XG59XG5cblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgICA8RGlhbG9nIDpzaG93PVwicHJvcGVydGllcy5zaG93XCIgdGl0bGU9XCJTcGllbGVyXCI+XG4gICAgICAgIDx0ZW1wbGF0ZSAjY29udGVudD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJQYXJ0ZWlUYWJsZVwiPlxuXHRcdFx0XHQ8ZGl2PjwvZGl2PjxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+UmU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8UGFydGVpUm93IHYtZm9yPVwic3BpZWxlciBpbiBwcm9wZXJ0aWVzLnNwaWVsZXJcIiA6bmFtZT1cInNwaWVsZXIubmFtZVwiIDpyZT0nc3BpZWxlci5yZScgQGNsaWNrZWQ9XCJjbGlja2VkKHNwaWVsZXIubmFtZSlcIj48L1BhcnRlaVJvdz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgIDwvRGlhbG9nPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuXG4uUGFydGVpVGFibGVcbntcdFxuXHRkaXNwbGF5OiBncmlkO1xuXHRncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG87XG5cdGdyaWQtdGVtcGxhdGUtY29sdW1uczogMmZyIDFmcjtcblx0XG5cdGp1c3RpZnktc2VsZjogY2VudGVyO1xufVxuXG48L3N0eWxlPiIsIjxzY3JpcHQgc2V0dXA+XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG4gICAgdGV4dDogU3RyaW5nXG59KVxuXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWyd0b3VjaGVkJ10pO1xuXG5mdW5jdGlvbiBjbGlja2VkKClcbntcbiAgICBlbWl0KCd0b3VjaGVkJyk7XG59XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIlRvdWNoQXJlYVwiIEBjbGljaz1cImNsaWNrZWRcIj5cbiAgICAgICAgPGEgY2xhc3M9XCJUZXh0QXJlYVRleHRcIj57eyAgcHJvcGVydGllcy50ZXh0IH19PC9hPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLlRvdWNoQXJlYVxue1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBcbiAgICBtaW4td2lkdGg6IDEuNWVtO1xuICAgIG1pbi1oZWlnaHQ6IDEuNWVtO1xufVxuXG4uVGV4dEFyZWFUZXh0XG57XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIlRha2VuSW5wdXRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRha2VuVHlwZVwiPjxhPnt7IHByb3BlcnRpZXMubGFiZWwgfX08L2E+PC9kaXY+XG4gICAgICAgIDxUb3VjaEFyZWEgdGV4dD1cIi1cIiBAdG91Y2hlZD1cIm1pbnVzXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlRha2VuVmFsdWVcIj48YT57eyB2YWx1ZSB9fTwvYT48L2Rpdj5cbiAgICAgICAgPFRvdWNoQXJlYSB0ZXh0PVwiK1wiIEB0b3VjaGVkPVwicGx1c1wiIC8+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwPlxuICAgIGltcG9ydCB7IG9uTW91bnRlZCwgb25CZWZvcmVVcGRhdGUsIHJlZiB9IGZyb20gJ3Z1ZSdcbiAgICBpbXBvcnQgVG91Y2hBcmVhIGZyb20gJy4vLi4vLi4vVG91Y2hBcmVhLnZ1ZSdcbiAgICBcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuICAgICAgICBpZDogU3RyaW5nLFxuICAgICAgICB2YWx1ZTogTnVtYmVyLFxuICAgICAgICBsYWJlbDogU3RyaW5nLFxuICAgICAgICBtYXg6IE51bWJlclxuICAgIH0pO1xuICAgIFxuICAgIGNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ3ZhbHVlQ2hhbmdlZCddKTtcbiAgICBcbiAgICBjb25zdCB2YWx1ZSA9IHJlZigwKVxuICAgICAgICAgICAgXG4gICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgdmFsdWUudmFsdWUgPSBwcm9wZXJ0aWVzLnZhbHVlO1xuICAgIH0pO1xuICAgIFxuICAgIG9uQmVmb3JlVXBkYXRlKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJUYWtlbklucHV0OiBcIiArIHByb3BlcnRpZXMuaWQgKyBcbiAgICAgICAgICAgIFwiIHZhbHVlOlwiICsgdmFsdWUudmFsdWUgKyBcbiAgICAgICAgICAgIFwiIGxhYmVsOlwiICsgcHJvcGVydGllcy5sYWJlbCArIFxuICAgICAgICAgICAgXCIgbWF4OlwiICsgcHJvcGVydGllcy5tYXgpO1xuICAgIH0pXG4gICAgXG4gICAgZnVuY3Rpb24gdmFsdWVDaGFuZ2VkKClcbiAgICB7XG4gICAgICAgIGVtaXQoJ3ZhbHVlQ2hhbmdlZCcsIHByb3BlcnRpZXMuaWQsIHZhbHVlLnZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gcGx1cygpXG4gICAge1xuICAgICAgICBpZih2YWx1ZS52YWx1ZSA8IHByb3BlcnRpZXMubWF4KVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZS52YWx1ZSsrO1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gbWludXMoKVxuICAgIHtcbiAgICAgICAgaWYodmFsdWUudmFsdWUgPiAwKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZS52YWx1ZS0tO1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5UYWtlbklucHV0XG57XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgbWFyZ2luOiAwcHg7XG4gICAgcGFkZGluZzogMC4yNWVtO1xuICAgIFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWVsZW1lbnQtYmFja2dyb3VuZCk7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIFxuICAgIGZsZXgtZ3JvdzogMTtcbn1cblxuLlRha2VuVHlwZVxue1xuICAgIGZsZXgtZ3JvdzogMTtcblx0XG5cdGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsgXG59XG5cbi5UYWtlblZhbHVlXG57XG5cdHdpZHRoOiAyZW07XG5cdFxuXHRhbGlnbi1jb250ZW50OiBjZW50ZXI7XG59XG5cblxuPC9zdHlsZT4iLCI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmLCBvbkJlZm9yZU1vdW50IH0gZnJvbSAndnVlJztcbmltcG9ydCBEaWFsb2cgZnJvbSAnLi4vRGlhbG9nLnZ1ZSc7XG5cbmNvbnN0IGRhdGEgPSByZWYoW10pO1xuY29uc3Qgc2VsZWN0ZWQgPSByZWYoLTEpO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHR0eXBlOiBPYmplY3RcdFxufSk7XG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2Nsb3NlJ10pO1xuXG5vbkJlZm9yZU1vdW50KCgpID0+IHtcblx0XG5cdGZvcihsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLnR5cGUuZW50cmllcy5sZW5ndGg7IGkrKylcblx0e1xuXHRcdGRhdGEudmFsdWVbaV0gPSBwcm9wZXJ0aWVzLnR5cGUuZW50cmllc1tpXTtcblx0XHRpZihpID09IHByb3BlcnRpZXMudHlwZS5zZWxlY3RlZClcblx0XHR7XG5cdFx0XHRkYXRhLnZhbHVlW2ldW1wic2VsZWN0ZWRcIl0gPSB0cnVlO1xuXHRcdFx0c2VsZWN0ZWQudmFsdWUgPSBpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0ZGF0YS52YWx1ZVtpXVtcInNlbGVjdGVkXCJdID0gZmFsc2U7XG5cdFx0fVxuXHR9XG59KTtcdFxuXG5mdW5jdGlvbiB0eXBlQ2xpY2tlZChsYWJlbClcbntcblx0Zm9yKGxldCBpID0gMDsgaSA8IGRhdGEudmFsdWUubGVuZ3RoOyBpKyspXG5cdHtcblx0XHRpZihkYXRhLnZhbHVlW2ldLmxhYmVsID09IGxhYmVsKVxuXHRcdHtcblx0XHRcdGRhdGEudmFsdWVbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0c2VsZWN0ZWQudmFsdWUgPSBpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0ZGF0YS52YWx1ZVtpXS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdH0gXG5cdH1cbn1cblxuZnVuY3Rpb24gY2xvc2UoKVxue1xuXHRlbWl0KCdjbG9zZScsIHNlbGVjdGVkLnZhbHVlKTtcbn1cblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cblx0PERpYWxvZyA6c2hvdz0ncHJvcGVydGllcy5zaG93JyB0aXRsZT1cIlR5cGVcIiBAY2xvc2U9XCJjbG9zZVwiPlxuXHRcdDx0ZW1wbGF0ZSAjY29udGVudD5cblx0XHRcdDxkaXYgY2xhc3M9XCJTcGllbFR5cGVcIiB2LWZvcj1cInR5cGUgaW4gZGF0YVwiIEBjbGljaz1cInR5cGVDbGlja2VkKHR5cGUubGFiZWwpXCI+XG5cdFx0XHRcdDxkaXYgOmNsYXNzPSd0eXBlLnNlbGVjdGVkID8gXCJUeXBlU2VsZWN0ZWRcIiA6IFwiVHlwZVwiJz57eyB0eXBlLmxhYmVsIH19PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L3RlbXBsYXRlPlxuXHQ8L0RpYWxvZz5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cblxuLlR5cGUsIC5UeXBlU2VsZWN0ZWRcbntcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZWxlbWVudC1iYWNrZ3JvdW5kKTtcbn1cblxuLlR5cGVTZWxlY3RlZFxue1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtcdFxufVxuXG48L3N0eWxlPiIsIjxzY3JpcHQgc2V0dXA+XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG5cdG5hbWU6IFN0cmluZyxcblx0Y2FuY2xlX2xpbms6IFN0cmluZyxcblx0YWN0aW9uOiBTdHJpbmdcbn0pO1xuXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8ZGl2PlxuXHRcdDxmb3JtIGNsYXNzPVwiZm9ybVwiIDpuYW1lPVwicHJvcGVydGllcy5uYW1lXCIgOmFjdGlvbj1cInByb3BlcnRpZXMuYWN0aW9uXCIgbWV0aG9kPVwicG9zdFwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxuXHRcdFx0XHQ8c2xvdCBuYW1lPVwiY29udGVudFwiPkRlZmF1bHQgQ29udGVudDwvc2xvdD5cblx0XHRcdFx0XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWJ1dHRvblwiIGlkPVwiZm9ybV9jYW5jbGVcIj48YSA6aHJlZj1cInByb3BlcnRpZXMuY2FuY2xlX2xpbmtcIj5BYmJyZWNoZW48L2E+PC9kaXY+XG5cdFx0XHRcdDxidXR0b24gY2xhc3M9XCJmb3JtLWJ1dHRvblwiIHR5cGU9XCJzdWJtaXRcIiBpZD1cImZvcm1fc2F2ZVwiIG5hbWU9XCJmb3JtW3NhdmVdXCI+U3BlaWNoZXJuPC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdDwvZm9ybT5cblx0XHRcblx0PC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGU+XG5cbi5mb3JtLWdyaWRcbntcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuXHRncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG87XG59XG5cbi5mb3JtXG57XG5cdGFsaWduLXNlbGY6IGNlbnRlcjtcblx0XHRcblx0ZGlzcGxheTogZmxleDtcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5mb3JtLWxhYmVsXG57XG5cdHRleHQtYWxpZ246IHJpZ2h0O1xuXHRcblx0cGFkZGluZy10b3A6IDAuNWVtO1xuXHRcblx0ZmxleC1ncm93OiAxO1xuXHR3aWR0aDogMTAwJTtcblx0XG5cdGdyaWQtY29sdW1uOiAxO1xufVxuXG4uZm9ybS1yb3dcbntcblx0Z3JpZC1jb2x1bW4tc3RhcnQ6IDE7XG5cdGdyaWQtY29sdW1uLWVuZDogMztcbn1cblxuLmZvcm0tZGF0YSwgXG4uZm9ybS1idXR0b24tZGF0YVxue1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFxuXHRtYXJnaW4tYm90dG9tOiAwLjI1ZW07XHRcblx0XG5cdGdyaWQtY29sdW1uOiAyO1xufVxuXG4uZm9ybS1idXR0b24tZGF0YVxue1xuXHRtYXJnaW4tdG9wOiAwLjZlbTtcdFxufVxuXG4uZm9ybS1jb250ZW50XG57XG5cdHdpZHRoOiAxMDAlO1xuXHRtaW4td2lkdGg6IDEyZW07XG5cdFxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cdFxuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFxuXHRiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1lbGVtZW50LWJhY2tncm91bmQpO1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1lbGVtZW50LXJhZGl1cyk7XG5cdFxuXHRtYXJnaW4tbGVmdDogMC41ZW07XG5cdFxuXHRwYWRkaW5nLXRvcDogMC4zZW07XG5cdHBhZGRpbmctYm90dG9tOiAwLjNlbTtcbn1cblxuLmZvcm0tY29udGVudC1jb2xcbntcblx0bWluLXdpZHRoOiA1MCU7XG5cdG1pbi1oZWlnaHQ6IDFlbTtcbn1cblxuLmZvcm0tc3BhY2VyXG57XHRcbiAgXHR3aWR0aDogMjAlO1xuXHRcdFxuXHRtYXJnaW4tbGVmdDogMC41ZW07XG5cdFx0XG5cdHBhZGRpbmctdG9wOiAwLjVlbTtcbn1cblxuLmZvcm0tdGl0bGUtcm93XG57XG5cdHdpZHRoOiAxMDAlO1xuXHRkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdFx0XG5cdG1hcmdpbi1sZWZ0OiAwLjVlbTtcblx0cGFkZGluZy10b3A6IDAuNWVtO1xufVxuXG4uZm9ybS10aXRsZS1yb3cgPiBkaXZcbntcblx0XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmZvcm0tYnV0dG9uXG57XG5cdGJvcmRlcjogMHB4O1xuXHRib3JkZXItcmFkaXVzOiB2YXIoLS1lbGVtZW50LXJhZGl1cyk7XG5cdFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XG5cdHdpZHRoOiAxMDAlO1xufVxuXG4uZm9ybS1idXR0b25baWQ9XCJmb3JtX3NhdmVcIl1cbntcblx0bWFyZ2luLWxlZnQ6IDAuNWVtO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWFwcC1jb2xvci1ncmVlbik7XG59XG5cbi5mb3JtLWJ1dHRvbltpZD1cImZvcm1fY2FuY2xlXCJdXG57XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYXBwLWNvbG9yLXJlZCk7XG59XG5cbi5mb3JtLWVycm9yXG57XG5cdGJvcmRlcjogMC4xNGVtIHNvbGlkIHJlZDtcbn1cblxuPC9zdHlsZT5cbiIsIigpPHNjcmlwdCBzZXR1cD5cbmltcG9ydCBEaWFsb2cgZnJvbSAnLi8uLi9EaWFsb2cvRGlhbG9nLnZ1ZSc7XG5pbXBvcnQgRm9ybSBmcm9tICcuLi9Gb3Jtcy9Gb3JtLnZ1ZSc7XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG5cdHRpdGxlOiBTdHJpbmcsXG5cdGFjdGlvbjogU3RyaW5nLFxuXHRuYW1lOiBTdHJpbmcsXG5cdHNob3c6IEJvb2xlYW4sXG5cdGNhbmNsZV9saW5rOiBTdHJpbmdcbn0pXG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2Nsb3NlJ10pO1xuXG5mdW5jdGlvbiBjbG9zZURpYWxvZygpXG57XG5cdGVtaXQoJ2Nsb3NlJyk7XG59XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxEaWFsb2cgOnNob3c9XCJwcm9wZXJ0aWVzLnNob3dcIiA6dGl0bGU9XCJwcm9wZXJ0aWVzLnRpdGxlXCIgQGNsb3NlPVwiY2xvc2VEaWFsb2dcIj5cblx0XHQ8dGVtcGxhdGUgI2NvbnRlbnQ+XG5cdFx0XHQ8Rm9ybSA6bmFtZT1cInByb3BlcnRpZXMubmFtZVwiIDphY3Rpb249XCJwcm9wZXJ0aWVzLmFjdGlvblwiIDpjYW5jbGVfbGluaz1cInByb3BlcnRpZXMuY2FuY2xlX2xpbmtcIiBtZXRob2Q9XCJwb3N0XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZSAjY29udGVudD5cblx0XHRcdFx0XHQ8c2xvdCBuYW1lPVwiY29udGVudFwiPkRlZmF1bHQgQ29udGVudDwvc2xvdD5cblx0XHRcdFx0PC90ZW1wbGF0ZT5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG5cdFx0XHRcdFx0PGJ1dHRvbiBjbGFzcz1cImZvcm0tYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiIDppZD1cInByb3BlcnRpZXMubmFtZSArICdfY2xvc2UnXCIgbmFtZT1cInByb3BlcnRpZXMubmFtZSArICdbY2xvc2VdJ1wiPkNsb3NlPC9idXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Gb3JtPlxuXHRcdDwvdGVtcGxhdGU+XG5cdFx0PHRlbXBsYXRlICNkaWFsb2ctYnV0dG9uPjxicj48L3RlbXBsYXRlPlxuXHQ8L0RpYWxvZz5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cblxuLnNldHRpbmdcbntcblx0YWxpZ24tc2VsZjogY2VudGVyO1xuXHR3aWR0aDogMTAwJTtcblx0XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWVsZW1lbnQtYmFja2dyb3VuZCk7XG5cdFx0XG5cdHBhZGRpbmc6IDAuNWVtO1xuXHRtYXJnaW46IDAuMjVlbTtcbn1cblxuLnNldHRpbmctc2VsZWN0ZWRcbntcblx0YmFja2dyb3VuZC1jb2xvcjogZ3JlZW47XG59XG5cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiwgY29tcHV0ZWQsIG9uQmVmb3JlTW91bnQgfSBmcm9tICd2dWUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHRyb3dDb3VudDogTnVtYmVyLFxuXHRjb2x1bW5Db3VudDogTnVtYmVyLFxuXHR2YWx1ZTogTnVtYmVyLFxuXHRrZXlzOiBBcnJheSxcblx0cG9zdGZpeDogU3RyaW5nXHRcbn0pO1xuXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWydjaGFuZ2VkJ10pO1xuY29uc3QgdmFsdWUgPSByZWYoMCk7XG5jb25zdCBncmlkVGVtcGxhdGVSb3dzID0gcmVmKFwiZnIgYXV0b1wiKTtcbmNvbnN0IGdyaWRUZW1wbGF0ZUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFxuXHRsZXQgcmVzdWx0ID0gXCJcIjtcblx0XG5cdGxldCBjb3VudCA9IDA7XG5cdFxuXHR3aGlsZShjb3VudCA8IHByb3BlcnRpZXMuY29sdW1uQ291bnQpXG5cdHtcblx0XHRpZihjb3VudCA+IDApXG5cdFx0e1xuXHRcdFx0cmVzdWx0ICs9IFwiIFwiO1xuXHRcdH1cblx0XHRcblx0XHRyZXN1bHQgKz0gXCJmclwiO1xuXHRcdGNvdW50Kys7XG5cdH1cbn0pXG5cbm9uQmVmb3JlTW91bnQoKCkgPT4ge1xuXHR2YWx1ZS52YWx1ZSA9IHByb3BlcnRpZXMudmFsdWU7XG59KTtcblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcigpXG57XG4gICAgbGV0IHJlc3VsdCA9IFN0cmluZyh2YWx1ZS52YWx1ZSk7XG4gICAgXG4gICAgcmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCByZXN1bHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIFxuICAgIGlmKHJlc3VsdCA9PSBcIlwiKVxuICAgIHtcbiAgICAgICAgcmVzdWx0ID0gXCIwXCJcbiAgICB9XG4gICAgXG4gICAgdmFsdWUudmFsdWUgPSByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENoYXIoY2hhcilcbntcbiAgICBsZXQgcmVzdWx0ID0gdmFsdWUudmFsdWU7XG4gICAgXG4gICAgaWYoY2hhciAhPSBcIiBcIilcbiAgICB7XG4gICAgICAgIGlmKHJlc3VsdCA9PSBcIjBcIilcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzdWx0ID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgIH1cbiAgICBcbiAgICBsZXQgbnVtYmVyID0gTnVtYmVyKHJlc3VsdCk7IFxuICAgIFxuICAgIGlmKG51bWJlciA8PSAyNDApXG4gICAge1xuICAgICAgICB2YWx1ZS52YWx1ZSA9IHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGtleVByZXNzZWQoa2V5KVxueyAgICBcbiAgICBpZihrZXkgPT0gXCJEZWxcIilcbiAgICB7XG4gICAgICAgIHJlbW92ZUNoYXIoKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgYXBwZW5kQ2hhcihrZXkpO1xuICAgIH1cblx0XG5cdGVtaXQoJ2NoYW5nZWQnLCB2YWx1ZS52YWx1ZSk7XG59XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxkaXYgY2xhc3M9XCJrZXlib2FyZFwiXG5cdFx0OmdyaWQtdGVtcGxhdGUtcm93PVwiZ3JpZFRlbXBsYXRlUm93c1wiXG5cdFx0OmdyaWQtdGVtcGxhdGUtY29sdW1uPVwiZ3JpZFRlbXBsYXRlQ29sdW1uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwia2V5Ym9hcmQtZGlzcGxheVwiXG5cdFx0XHRncmlkLXJvdz1cIjFcIlxuXHRcdFx0Z3JpZC1jb2x1bW4tc3RhcnQ9XCIxXCJcblx0XHRcdDpncmlkLWNvdW1uLWVuZD1cInByb3BlcnRpZXMuY29sdW1uQ291bnQgKyAxXCI+XG4gICAgICAgICAgICA8YT57eyB2YWx1ZSB9fSB7eyBwcm9wZXJ0aWVzLnBvc3RmaXggfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwia2V5Ym9hcmQta2V5XCJcblx0XHRcdHYtZm9yPVwia2V5IGluIGtleXNcIiBcblx0XHRcdCBAY2xpY2s9XCJrZXlQcmVzc2VkKGtleSlcIj5cblx0XHRcdCB7eyBrZXkgfX1cbiAgICAgICAgPC9kaXY+ICAgXG5cdDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLmtleWJvYXJkXG57XG5cdGp1c3RpZnktc2VsZjogY2VudGVyO1xuXHRcblx0ZGlzcGxheTogZ3JpZDtcblx0Z3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgYXV0bztcblx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyIDFmcjsgXG5cdFxuXHRtYXgtd2lkdGg6IDE2ZW07XG59XG5cdFxuLmtleWJvYXJkLWRpc3BsYXlcbntcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZWxlbWVudC1iYWNrZ3JvdW5kKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1lbGVtZW50LXJhZGl1cyk7IFxuICAgIFxuICAgIG1hcmdpbjogMC4yNWVtO1xuICAgIHBhZGRpbmc6IDAuNWVtO1xuXHRcblx0Z3JpZC1yb3c6IDE7XG5cdGdyaWQtY29sdW1uLXN0YXJ0OiAxO1xuXHRncmlkLWNvbHVtbi1lbmQ6IDQ7XG59XG5cbi5rZXlib2FyZC1rZXlcbntcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1lbGVtZW50LWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWVsZW1lbnQtcmFkaXVzKTtcbiAgICBcbiAgICBtYXJnaW46IDAuMjVlbTtcbiAgICBwYWRkaW5nOiAwLjVlbTtcbiAgICBcbiAgICBtaW4td2lkdGg6IDRlbTtcblx0XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuPC9zdHlsZT5pbXBvcnQgeyBvbkJlZm9yZU1vdW50IH0gZnJvbSAndnVlJztcbiIsIjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYsIG9uQmVmb3JlTW91bnQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IEZvcm1EaWFsb2cgZnJvbSAnLi9Gb3JtRGlhbG9nLnZ1ZSc7XG5pbXBvcnQgS2V5Ym9hcmQgZnJvbSAnLi4vY29tcG9uZW50cy9LZXlib2FyZC52dWUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHRzZXR0aW5nOiBPYmplY3QsXG5cdHNob3c6IEJvb2xlYW4sXG5cdGNhbmNsZV9saW5rOiBTdHJpbmdcbn0pXG5cbmNvbnN0IHZhbHVlID0gcmVmKHByb3BlcnRpZXMuc2V0dGluZy52YWx1ZSk7XG5jb25zdCBrZXlzID0gcmVmKFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiLCBcIiBcIiwgXCIwXCIsIFwiRGVsXCJdKTtcblxuZnVuY3Rpb24gdmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKVxue1xuXHR2YWx1ZS52YWx1ZSA9IG5ld1ZhbHVlO1xufVxuXG48L3NjcmlwdD5cbjx0ZW1wbGF0ZT5cblx0PEZvcm1EaWFsb2cgOnNob3c9XCJwcm9wZXJ0aWVzLnNob3dcIiB0aXRsZT1cIkFicmVjaG51bmdzZmFrdG9yXCIgbmFtZT1cImZvcm1cIiA6YWN0aW9uPVwicHJvcGVydGllcy5zZXR0aW5nLmFjdGlvblwiIDpjYW5jbGVfbGluaz1cInByb3BlcnRpZXMuY2FuY2xlX2xpbmtcIiBAY2xvc2U9XCIkZW1pdCgnY2xvc2UnKVwiPlxuXHRcdDx0ZW1wbGF0ZSAjY29udGVudD5cblx0XHRcdDxLZXlib2FyZCBwb3N0Zml4PVwiQ2VudC9QdW5rdFwiIDpyb3dDb3VudD1cIjRcIiA6Y29sdW1uQ291bnQ9XCIzXCIgOnZhbHVlPVwicHJvcGVydGllcy5zZXR0aW5nLnZhbHVlXCIgOmtleXM9XCJrZXlzXCIgQGNoYW5nZWQ9XCJ2YWx1ZUNoYW5nZWRcIj5cblx0XHRcdDwvS2V5Ym9hcmQ+XG5cdFx0XHQ8aW5wdXQgdHlwZT1cImhpZGRlblwiIDppZD1cIidmb3JtXycgKyBwcm9wZXJ0aWVzLnNldHRpbmcubmFtZVwiIDpuYW1lPVwiJ2Zvcm1bJyArIHByb3BlcnRpZXMuc2V0dGluZy5uYW1lICsgJ10nXCIgOnZhbHVlPVwidmFsdWVcIj48L2lucHV0PlxuXHRcdDwvdGVtcGxhdGU+XG5cdDwvRm9ybURpYWxvZz5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cbi5rZXlib2FyZFxue1xuXHRncmlkLWNvbHVtbi1zdGFydDogMTtcblx0Z3JpZC1jb2x1bW4tZW5kOiAzO1xufVxuPC9zdHlsZT4iLCI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmLCBvbkJlZm9yZU1vdW50IH0gZnJvbSAndnVlJztcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcblx0cm93OiBBcnJheVxufSk7XG5cbmNvbnN0IGRhdGEgPSByZWYoW10pO1xuXG5jb25zdCBlbWl0ID0gZGVmaW5lRW1pdHMoWydjaGFuZ2VkJ10pO1xuXG5kZWZpbmVFeHBvc2Uoe1xuXHRkYXRhXG59KVxuXG5vbkJlZm9yZU1vdW50KCgpID0+IHtcblx0ZGF0YS52YWx1ZVtcImlkXCJdID0gcHJvcGVydGllcy5yb3dbXCJpZFwiXTtcblx0ZGF0YS52YWx1ZVtcInZhbHVlXCJdID0gcHJvcGVydGllcy5yb3dbXCJ2YWx1ZVwiXTtcblx0ZGF0YS52YWx1ZVtcImZ1bGxOYW1lXCJdID0gcHJvcGVydGllcy5yb3dbXCJmdWxsTmFtZVwiXTtcblx0ZGF0YS52YWx1ZVtcInR5cGVcIl0gPSBwcm9wZXJ0aWVzLnJvd1tcInR5cGVcIl07XG5cdGRhdGEudmFsdWVbXCJsYWJlbFwiXSA9IHByb3BlcnRpZXMucm93W1wibGFiZWxcIl07XG59KVxuXG5mdW5jdGlvbiB2YWx1ZUNoYW5nZWQoZXZlbnQpXG57XG5cdGRhdGEudmFsdWVbXCJ2YWx1ZVwiXSA9IGV2ZW50LnNyY0VsZW1lbnQudmFsdWU7XG5cdGVtaXQoJ2NoYW5nZWQnLCBkYXRhLnZhbHVlW1wibGFiZWxcIl0sIGV2ZW50LnNyY0VsZW1lbnQudmFsdWUpO1xufVxuXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7IGRhdGEubGFiZWwgfX08L2Rpdj5cblx0PGRpdiBjbGFzcz1cImZvcm0tZGF0YVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRlbnRcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRlbnQtY29sXCIgQGNsaWNrPVwiYWRkXCI+XG5cdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdHYtaWY9XCJkYXRhLnR5cGUgPT0gJ1RleHQnXCJcdFxuXHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCIgXHRcblx0XHRcdFx0XHQ6aWQ9XCJkYXRhLmlkXCJcblx0XHRcdFx0XHQ6bmFtZT1cImRhdGEuZnVsbE5hbWVcIiBcblx0XHRcdFx0XHQ6dmFsdWU9XCJkYXRhLnZhbHVlXCJcblx0XHRcdFx0XHRAY2hhbmdlPVwidmFsdWVDaGFuZ2VkXCIgLz5cblx0XHRcdFx0XHRcblx0XHRcdFx0PHRleHRhcmVhIFx0XG5cdFx0XHRcdFx0di1pZj1cImRhdGEudHlwZSA9PSAnTG9uZ1RleHQnXCIgXHRcdFx0XHRcblx0XHRcdFx0XHQ6aWQ9XCJkYXRhLmlkXCIgXG5cdFx0XHRcdFx0Om5hbWU9XCJkYXRhLmZ1bGxOYW1lXCIgXG5cdFx0XHRcdFx0OnZhbHVlPVwiZGF0YS52YWx1ZVwiIC8+XG5cdFx0XHRcdFx0XG5cdFx0XHRcdDxpbnB1dFx0XHRcblx0XHRcdFx0XHR2LWlmPVwiZGF0YS50eXBlID09ICdOdW1iZXInXCIgXHRcblx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCIgXHRcblx0XHRcdFx0XHQ6aWQ9XCJkYXRhLmlkXCIgXG5cdFx0XHRcdFx0Om5hbWU9XCJkYXRhLmZ1bGxOYW1lXCIgXG5cdFx0XHRcdFx0OnZhbHVlPVwiZGF0YS52YWx1ZVwiIC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHRcblx0PC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuXG4uZm9ybS1jb250ZW50LWNvbCA+IGlucHV0W3R5cGU9J251bWJlciddIHtcbiAgICAtbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkO1xufVxuXG4uZm9ybS1jb250ZW50LWNvbCA+IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxuLmZvcm0tY29udGVudC1jb2wgPiBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuPC9zdHlsZT4iLCI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmLCBvbkJlZm9yZU1vdW50LCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgUGFydGVpRGlhbG9nIGZyb20gJy4vLi4vLi4vRGlhbG9nL1BhcnRlaS9QYXJ0ZWlEaWFsb2cudnVlJztcblxuY29uc3QgaW5wdXRzID0gcmVmKFtdKTtcbmNvbnN0IHNob3dEaWFsb2cgPSByZWYoZmFsc2UpO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuICAgc3BpZWxlcjogT2JqZWN0LFxuICAgZXJyb3I6IEJvb2xlYW5cbn0pOyBcblxuY29uc3QgcmVTcGllbGVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRsZXQgc3BpZWxlciA9IFtdO1xuXHRcblx0Zm9yKGxldCBpID0gMDsgaSA8IGlucHV0cy52YWx1ZS5sZW5ndGg7IGkrKylcblx0e1xuXHRcdGlmKGlucHV0cy52YWx1ZVtpXS5yZSlcblx0XHR7XG5cdFx0XHRzcGllbGVyW3NwaWVsZXIubGVuZ3RoXSA9IGlucHV0cy52YWx1ZVtpXS5uYW1lO1xuXHRcdH1cblx0fVxuXHRcblx0cmV0dXJuIHNwaWVsZXI7XG59KTtcblxuZGVmaW5lRXhwb3NlKHtcblx0cmVTcGllbGVyXG59KVxuXG5mdW5jdGlvbiBpbml0SW5wdXRzKClcbntcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zcGllbGVyLmxlbmd0aDsgaSsrKVxuICAgIHtcbiAgICAgICAgbGV0IG5hbWUgPSBcImZvcm1bc3BpZWxlcl1bXCIgKyBpICsgXCJdXCI7XG4gICAgICAgIGxldCBpZCAgID0gXCJmb3JtX3NwaWVsZXJfXCIgKyBpO1xuICAgICAgICBcbiAgICAgICAgaW5wdXRzLnZhbHVlW2ldID0gcHJvcGVydGllcy5zcGllbGVyW2ldO1xuICAgICAgICBpbnB1dHMudmFsdWVbaV1bXCJpZFwiXSA9IGlkO1xuICAgICAgICBpbnB1dHMudmFsdWVbaV1bXCJmdWxsTmFtZVwiXSA9IG5hbWU7XG4gICAgfVxufVxuIFxub25CZWZvcmVNb3VudCgoKSA9PiB7XG4gICBpbml0SW5wdXRzKCk7IFxufSk7XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50XCIgQGNsaWNrPVwic2hvd0RpYWxvZyA9IHRydWVcIiA6Y2xhc3M9XCJwcm9wZXJ0aWVzLmVycm9yID8gJ2Zvcm0tZXJyb3InIDogJydcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRlbnQtY29sXCI+XG5cdCAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0ZWktc3BpZWxlclwiIHYtZm9yPVwiaW5wdXQgaW4gaW5wdXRzXCIgID5cblx0ICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImlucHV0LnJlXCI+e3sgaW5wdXQubmFtZSB9fTwvZGl2PlxuXHQgICAgICAgICAgICA8L2Rpdj5cblx0XHRcdDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblx0XHRcblx0XHQ8UGFydGVpRGlhbG9nIDpzcGllbGVyPVwiaW5wdXRzXCIgOnNob3c9XCJzaG93RGlhbG9nXCIgQGNsb3NlPVwic2hvd0RpYWxvZyA9IGZhbHNlXCIvPlxuXG5cdCAgICA8ZGl2IGNsYXNzPVwiSW5wdXRDb250YWluZXJcIj5cblx0ICAgICAgICA8aW5wdXQgdi1mb3I9XCJpbnB1dCBpbiBpbnB1dHNcIiA6aWQ9J2lucHV0LmlkICsgXCJfcmVcIicgOm5hbWU9J2lucHV0LmZ1bGxOYW1lICsgXCJbcmVdXCInIHR5cGU9XCJoaWRkZW5cIiA6dmFsdWU9XCJpbnB1dC5yZVwiIC8+XG5cdCAgICAgICAgPGlucHV0IHYtZm9yPVwiaW5wdXQgaW4gaW5wdXRzXCIgOmlkPSdpbnB1dC5pZCArIFwiX25hbWVcIicgOm5hbWU9J2lucHV0LmZ1bGxOYW1lICsgXCJbbmFtZV1cIicgdHlwZT1cImhpZGRlblwiIDp2YWx1ZT1cImlucHV0Lm5hbWVcIiAvPlxuXHQgICAgPC9kaXY+XG4gICAgPC9kaXY+ICAgIFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuXG4ucGFydGVpLXNwaWVsZXJcbntcbiAgICBmbGV4LWdyb3c6IDE7XG59XG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWRhdGFcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50XCIgOmNsYXNzPVwicHJvcGVydGllcy5lcnJvciA/ICdmb3JtLWVycm9yJyA6ICcnXCI+XG5cdCAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGVudC1jb2xcIj5cblx0ICAgICAgICAgICAgPGlucHV0IFxuXHQgICAgICAgICAgICAgICAgaWQ9XCJmb3JtX3B1bmt0ZV9yZVwiIFxuXHQgICAgICAgICAgICAgICAgdi1tb2RlbD1cInB1bmt0ZVJlXCIgXG5cdCAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCIgXG5cdCAgICAgICAgICAgICAgICBuYW1lPVwiZm9ybVtwdW5rdGVdW3JlXVwiXG5cdCAgICAgICAgICAgICAgICAgQGNoYW5nZT1cInB1bmt0ZVJlQ2hhbmdlZFwiXG5cdCAgICAgICAgICAgICAvPiBcblx0ICAgICAgICAgICAgPGEgQGNsaWNrPVwic2hvd0RpYWxvZ1JlID0gdHJ1ZVwiPnt7IHB1bmt0ZVJlIH19PC9hPlxuXHQgICAgICAgIDwvZGl2PlxuICAgICAgICAgICBcblx0ICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50LWNvbFwiPlxuXHQgICAgICAgICAgICA8aW5wdXQgXG5cdCAgICAgICAgICAgICAgICBpZD1cImZvcm1fcHVua3RlX2NvbnRyYVwiIFxuXHQgICAgICAgICAgICAgICAgdi1tb2RlbD1cInB1bmt0ZUNvbnRyYVwiIFxuXHQgICAgICAgICAgICAgICAgdHlwZT1cImhpZGRlblwiIFxuXHQgICAgICAgICAgICAgICAgbmFtZT1cImZvcm1bcHVua3RlXVtjb250cmFdXCIgXG5cdCAgICAgICAgICAgICAgICBAY2hhbmdlPVwicHVua3RlQ29udHJhQ2hhbmdlZFwiXG5cdCAgICAgICAgICAgIC8+XG5cdCAgICAgICAgICAgIDxhIEBjbGljaz1cInNob3dEaWFsb2dDb250cmEgPSB0cnVlXCI+e3sgcHVua3RlQ29udHJhIH19PC9hPlxuXHQgICAgICAgIDwvZGl2PlxuXHQgICAgICAgIFxuXHQgICAgICAgIDxOdW1iZXJJbnB1dERpYWxvZyA6c2hvdz1cInNob3dEaWFsb2dSZVwiIHRpdGxlPVwiUHVua3RlIFJlXCIgOnZhbHVlPVwicHVua3RlUmVcIiBAY2xvc2U9XCJwdW5rdGVSZUNoYW5nZWRcIiAvPlxuXHQgICAgICAgIDxOdW1iZXJJbnB1dERpYWxvZyA6c2hvdz1cInNob3dEaWFsb2dDb250cmFcIiB0aXRsZT1cIlB1bmt0ZSBDb250cmFcIiA6dmFsdWU9XCJwdW5rdGVDb250cmFcIiBAY2xvc2U9XCJwdW5rdGVDb250cmFDaGFuZ2VkXCIgLz5cblx0XHQ8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYsIG9uQmVmb3JlTW91bnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgTnVtYmVySW5wdXREaWFsb2cgZnJvbSAnLi4vLi4vRGlhbG9nL051bWJlci9OdW1iZXJJbnB1dERpYWxvZy52dWUnO1xuXG5jb25zdCBwdW5rdGVSZSA9IHJlZigwKVxuY29uc3QgcHVua3RlQ29udHJhID0gcmVmKDApXG5cbmNvbnN0IHNob3dEaWFsb2dSZSA9IHJlZihmYWxzZSk7XG5jb25zdCBzaG93RGlhbG9nQ29udHJhID0gcmVmKGZhbHNlKTtcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcbiAgICBwdW5rdGU6IE9iamVjdCxcblx0ZXJyb3I6IEJvb2xlYW5cbn0pO1xuXG5kZWZpbmVFeHBvc2Uoe1xuXHRwdW5rdGVSZSxcblx0cHVua3RlQ29udHJhXG59KVxuXG5mdW5jdGlvbiBwdW5rdGVSZUNoYW5nZWQocHVua3RlKVxue1xuICAgIGlmKHB1bmt0ZSlcbiAgICB7XG4gICAgICAgIHNob3dEaWFsb2dSZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICBwdW5rdGVSZS52YWx1ZSA9IHB1bmt0ZTtcbiAgICB9XG4gICAgXG4gICAgcHVua3RlQ29udHJhLnZhbHVlID0gMjQwIC0gcHVua3RlUmUudmFsdWU7IFxufVxuXG5mdW5jdGlvbiBwdW5rdGVDb250cmFDaGFuZ2VkKHB1bmt0ZSlcbntcbiAgICBpZihwdW5rdGUpXG4gICAge1xuICAgICAgICBzaG93RGlhbG9nQ29udHJhLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHB1bmt0ZUNvbnRyYS52YWx1ZSA9IHB1bmt0ZTtcbiAgICB9XG4gICAgXG4gICAgcHVua3RlUmUudmFsdWUgPSAyNDAgLSBwdW5rdGVDb250cmEudmFsdWU7XG59XG5cbm9uQmVmb3JlTW91bnQoKCkgPT4ge1xuICAgIHB1bmt0ZVJlLnZhbHVlICAgICA9IHByb3BlcnRpZXMucHVua3RlLnJlO1xuICAgIHB1bmt0ZUNvbnRyYS52YWx1ZSA9IHByb3BlcnRpZXMucHVua3RlLmNvbnRyYTtcbn0pO1xuICAgIFxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG5cblxuLlB1bmt0ZUlucHV0XG57XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xufVxuXG4uUHVua3RlUmUgPiBhLCAuUHVua3RlQ29udHJhID4gYVxue1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi5QdW5rdGVSZSwgLlB1bmt0ZUNvbnRyYVxue1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1lbGVtZW50LWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWVsZW1lbnQtcmFkaXVzKTtcblxuICAgIG1hcmdpbjogMHB4O1xuICAgIHBhZGRpbmctdG9wOiAwLjVlbTtcblx0cGFkZGluZy1ib3R0b206IDAuNWVtOyBcbiAgICBcbiAgICBmbGV4LWdyb3c6IDE7ICBcbiAgICBcbiAgICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uUHVua3RlTGFiZWxcbntcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4vKiBDaHJvbWUsIFNhZmFyaSwgRWRnZSwgT3BlcmEgKi9cbmlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxuaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIG1hcmdpbjogMDtcbn1cblxuLyogRmlyZWZveCAqL1xuaW5wdXRbdHlwZT1udW1iZXJdIHtcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG59XG5cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiwgdXNlVGVtcGxhdGVSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IEZvcm0gZnJvbSAnLi4vRm9ybS52dWUnO1xuXG5pbXBvcnQgQm9ja1JvdyBmcm9tICcuL0JvY2tSb3cudnVlJ1xuaW1wb3J0IFR5cGVSb3cgZnJvbSAnLi9UeXBlUm93LnZ1ZSdcbmltcG9ydCBQYXJ0ZWlSb3cgZnJvbSAnLi9QYXJ0ZWlSb3cudnVlJ1xuaW1wb3J0IEFuc2FnZW5Sb3cgZnJvbSAnLi9BbnNhZ2VuUm93LnZ1ZSdcbmltcG9ydCBUYWtlblJvdyBmcm9tICcuL1Rha2VuUm93LnZ1ZSdcbmltcG9ydCBQdW5rdGVSb3cgZnJvbSAnLi9QdW5rdGVSb3cudnVlJ1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHRzcGllbDogT2JqZWN0LFxuXHRjYW5jbGVfbGluazogU3RyaW5nXG59KTtcblx0XG5jb25zdCBwdW5rdGUgPSB1c2VUZW1wbGF0ZVJlZigncHVua3RlLXJvdycpO1xuY29uc3QgcHVua3RlRXJyb3IgPSByZWYoZmFsc2UpO1xuY29uc3QgdHlwZSA9IHVzZVRlbXBsYXRlUmVmKCd0eXBlLXJvdycpO1xuY29uc3Qgc3BpZWxlciA9IHVzZVRlbXBsYXRlUmVmKCdzcGllbGVyLXJvdycpO1xuY29uc3Qgc3BpZWxlckVycm9yID0gcmVmKGZhbHNlKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQdW5rdGUoKVxue1xuXHRsZXQgcHVua3RlUmUgPSBOdW1iZXIocHVua3RlLnZhbHVlLnB1bmt0ZVJlKTtcblx0bGV0IHB1bmt0ZUNvbnRyYSA9IE51bWJlcihwdW5rdGUudmFsdWUucHVua3RlQ29udHJhKTtcblx0XG5cdHJldHVybiAocHVua3RlUmUgKyBwdW5rdGVDb250cmEpID09IDI0MDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTcGllbGVyKClcbntcblx0bGV0IG1pbiA9IDE7XG5cdGxldCBtYXggPSAyO1xuXHRcblx0aWYodHlwZS52YWx1ZS50eXBlID09IFwiU29sb1wiKVxuXHR7XG5cdFx0bWF4ID0gMTtcblx0fVxuXHRcblx0bGV0IHNpemUgPSBzcGllbGVyLnZhbHVlLnJlU3BpZWxlci5sZW5ndGg7XG5cdFxuXHRyZXR1cm4gKChzaXplID49IG1pbikgJiYgKHNpemUgPD0gbWF4KSk7XHRcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGUoZXZlbnQpXG57XG5cdHB1bmt0ZUVycm9yLnZhbHVlID0gIXZhbGlkYXRlUHVua3RlKCk7XG5cdFxuXHRzcGllbGVyRXJyb3IudmFsdWUgPSAhdmFsaWRhdGVTcGllbGVyKCk7XG5cdFx0XG5cdGlmKHB1bmt0ZUVycm9yLnZhbHVlIHx8IHNwaWVsZXJFcnJvci52YWx1ZSlcblx0e1xuXHRcdHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9XG5cdFxuXHRyZXR1cm4gZmFsc2U7XG59XG5cblx0XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHRcblx0PEZvcm0gbmFtZT1cImZvcm1cIiA6Y2FuY2xlX2xpbms9XCJwcm9wZXJ0aWVzLmNhbmNsZV9saW5rXCIgQHN1Ym1pdD1cInZhbGlkYXRlXCI+XG5cdFx0PHRlbXBsYXRlICNjb250ZW50PlxuXHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Cb2NrOjwvZGl2PjxCb2NrUm93IDpib2NrPVwic3BpZWwuYm9ja1wiIC8+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPlR5cGU6PC9kaXY+PFR5cGVSb3cgcmVmPVwidHlwZS1yb3dcIiA6dHlwZT1cInNwaWVsLnR5cGVcIiAvPlxuXHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QYXJ0ZWk6PC9kaXY+PFBhcnRlaVJvdyByZWY9XCJzcGllbGVyLXJvd1wiIDpzcGllbGVyPVwicHJvcGVydGllcy5zcGllbC5zcGllbGVyXCIgOmVycm9yPVwic3BpZWxlckVycm9yXCIvPlxuXHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tbGFiZWxcIj48L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWRhdGFcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tdGl0bGUtcm93XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tY29udGVudC1jb2xcIj5SZTwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRlbnQtY29sXCI+Q29udHJhPC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPlB1bmt0ZTo8L2Rpdj48UHVua3RlUm93IHJlZj1cInB1bmt0ZS1yb3dcIiA6cHVua3RlPVwicHJvcGVydGllcy5zcGllbC5wdW5rdGVcIiA6ZXJyb3I9XCJwdW5rdGVFcnJvclwiLz5cblx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QW5zYWdlbjo8L2Rpdj48QW5zYWdlblJvdyA6YW5zYWdlbj1cInByb3BlcnRpZXMuc3BpZWwuYW5zYWdlblwiIC8+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPlRha2VuOjwvZGl2PjxUYWtlblJvdyA6dGFrZW49XCJwcm9wZXJ0aWVzLnNwaWVsLnRha2VuXCIgLz5cblx0XHQ8L3RlbXBsYXRlPlxuXHQ8L0Zvcm0+XG5cdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuXG4uZm9ybS1sYWJlbFxue1xuXHRncmlkLWNvbHVtbjogMTtcbn1cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcblx0bGFiZWw6IFN0cmluZyxcblx0dmFsdWU6IFN0cmluZ1xufSlcblxuY29uc3QgZW1pdCA9IGRlZmluZUVtaXRzKFsnY2xlYXInLCAnY2xpY2snXSk7XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCIgdi1pZj1cInByb3BlcnRpZXMudmFsdWUgIT0gJydcIiBAY2xpY2s9XCIkZW1pdCgnY2xpY2snLCBwcm9wZXJ0aWVzLmxhYmVsKVwiPnt7IHByb3BlcnRpZXMubGFiZWwgfX06PC9kaXY+XG5cdFxuXHQ8ZGl2IGNsYXNzPVwiZm9ybS1kYXRhXCIgdi1pZj1cInByb3BlcnRpZXMudmFsdWUgIT0gJydcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250ZW50LWNvbFwiIEBjbGljaz1cIiRlbWl0KCdjbGljaycsIHByb3BlcnRpZXMubGFiZWwpXCI+XG5cdFx0XHRcdHt7IHByb3BlcnRpZXMudmFsdWUgfX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImRlbC1idXR0b25cIiB2LWlmPVwicHJvcGVydGllcy52YWx1ZSAhPSAnJ1wiIEBjbGljaz1cIiRlbWl0KCdjbGVhcicsIHByb3BlcnRpZXMubGFiZWwpXCI+WDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cbi5kZWwtYnV0dG9uXG57XG5cdGFsaWduLXNlbGY6IGVuZDtcbn1cblxuLm1pdHNwaWVsZXItcm93XG57XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiByb3c7XG59XG5cbi5taXRzcGllbGVyLWxhYmVsLFxuLm1pdHNwaWVsZXItdmFsdWVcbntcblx0ZmxleC1ncm93OiAxO1xufVxuXG4ubWl0c3BpZWxlci1sYWJlbFxue1xuXHRtYXJnaW4tcmlnaHQ6IDFlbTtcbn1cblxuPC9zdHlsZT4iLCI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmLCBvbkJlZm9yZU1vdW50IH0gZnJvbSAndnVlJztcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcblx0b3BlbjogQm9vbGVhbixcblx0dGl0bGU6IFN0cmluZ1xufSk7XG5cbmNvbnN0IG9wZW4gPSByZWYoZmFsc2UpO1xuXG5vbkJlZm9yZU1vdW50KCgpID0+IHtcblx0b3Blbi52YWx1ZSA9IHByb3BlcnRpZXMub3Blbjtcbn0pXG48L3NjcmlwdD5cblxuXG48dGVtcGxhdGU+XG5cdDxkaXYgY2xhc3M9XCJoaWRlLWFyZWFcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiaGlkZS1hcmVhLXRpdGxlXCIgOmNsYXNzPVwib3BlbiA/ICdoaWRlLWFyZWEtb3BlbicgOiAnJ1wiIEBjbGljaz1cIm9wZW4gPSAhb3BlblwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImhpZGUtYXJlYS10ZXh0XCI+XG5cdFx0XHRcdHt7IHByb3BlcnRpZXMudGl0bGUgfX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cImhpZGUtYXJlYS1idXR0b25cIiA+XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiYXJyb3dcIiA6Y2xhc3M9XCJvcGVuID8gJ2FzYycgOiAnZHNjJ1wiPjwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgdi1pZj1cIm9wZW5cIiBjbGFzcz1cImhpZGUtYXJlYS1jb250ZW50XCI+XG5cdFx0XHQ8c2xvdCBuYW1lPVwiY29udGVudFwiPkRlZmF1bHQgY29udGVudDwvc2xvdD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L3RlbXBsYXRlPmltcG9ydCB7IG9uQmVmb3JlTW91bnQgfSBmcm9tICd2dWUnO1xuXG48c3R5bGU+XG5cbi5oaWRlLWFyZWFcbntcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWVsZW1lbnQtYmFja2dyb3VuZCk7XG5cdFxuXHRtYXJnaW46IDAuNWVtO1xufVxuXG4uaGlkZS1hcmVhLW9wZW5cbntcblx0Ym9yZGVyLWJvdHRvbTogMC4xZW0gc29saWQgYmxhY2s7XG59XG5cbi5oaWRlLWFyZWEtdGl0bGVcbntcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IHJvdztcbn1cblxuLmhpZGUtYXJlYS10ZXh0XG57XG5cdGZsZXgtZ3JvdzogMTtcblx0XG5cdG1hcmdpbjogMC41ZW07XG5cdG1hcmdpbi1sZWZ0OiAwLjRlbTtcbn1cblxuLmhpZGUtYXJlYS1idXR0b25cbntcblx0bWFyZ2luOiAwLjVlbTtcbn1cblxuPC9zdHlsZT4iLCJsPHNjcmlwdCBzZXR1cD5cbmltcG9ydCBIaWRlQXJlYSBmcm9tICcuL0hpZGVBcmVhLnZ1ZSc7XG5pbXBvcnQgU2V0dGluZ0Fuc2ljaHQgZnJvbSAnLi9HcnVwcGUvU2V0dGluZ0Fuc2ljaHQudnVlJztcbmltcG9ydCBTZXR0aW5nVGFrZW4gZnJvbSAnLi9HcnVwcGUvU2V0dGluZ1Rha2VuLnZ1ZSc7XG5pbXBvcnQgU2V0dGluZ0FicmVjaG51bmdzZmFrdG9yIGZyb20gJy4vR3J1cHBlL1NldHRpbmdBYnJlY2hudW5nc2Zha3Rvci52dWUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHRkYXRhOiBPYmplY3QsXG5cdG1pdGdsaWVkZXI6IEFycmF5LFxuXHRzZXR0aW5nczogT2JqZWN0LFxuXHRjYW5jbGVfbGluazogU3RyaW5nXG59KTtcblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cblx0PGRpdiBjbGFzcz1cImdydXBwZW5cIj5cblx0XG5cdFx0PGRpdiBjbGFzcz1cImdydXBwZS1uYW1lXCI+e3sgcHJvcGVydGllcy5kYXRhLm5hbWUgfX08L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiZ3J1cHBlLWRlc2NyaXB0aW9uXCI+e3sgcHJvcGVydGllcy5kYXRhLmRlc2NyaXB0aW9uIH19PC9kaXY+XG5cdFx0XG5cdFx0PEhpZGVBcmVhIHRpdGxlPVwiTWl0Z2xpZWRlclwiIDpvcGVuPVwiZmFsc2VcIj5cblx0XHRcdDx0ZW1wbGF0ZSAjY29udGVudD5cblx0XHRcdFx0PHRhYmxlIGNsYXNzPVwiZ3J1cHBlLXRhYmxlXCI+XG5cdFx0XHRcdFx0PHRoZWFkPlxuXHRcdFx0XHRcdFx0PHRyPjx0aD5OYW1lPC90aD48dGg+ZU1haWw8L3RoPjx0aD5BZG1pbjwvdGg+PC90cj5cblx0XHRcdFx0XHQ8L3RoZWFkPlx0XHRcdFx0XG5cdFx0XHRcdFx0PHRib2R5Plx0XG5cdFx0XHRcdFx0XHQ8dHIgdi1mb3I9XCJtaXRnbGllZCBpbiBwcm9wZXJ0aWVzLm1pdGdsaWVkZXJcIj5cblx0XHRcdFx0XHRcdFx0PHRkPnt7IG1pdGdsaWVkLm5hbWUgfX08L3RkPlxuXHRcdFx0XHRcdFx0XHQ8dGQgdi1pZj1cIm1pdGdsaWVkLmVtYWlsICE9ICcnXCI+e3sgbWl0Z2xpZWQuZW1haWwgfX08L3RkPlxuXHRcdFx0XHRcdFx0XHQ8dGQgdi1lbHNlPjxkaXY+PGEgOmhyZWY9XCJtaXRnbGllZC5saW5rXCI+RWlubGFkZW48L2E+PC9kaXY+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkPjxkaXYgc3R5bGU9XCJkaXNwbGF5OmdyaWQ7XCI+PGRpdiBjbGFzcz1cImFkbWluLWluZGljYXRvclwiIDpjbGFzcz0nbWl0Z2xpZWQuYWRtaW4gPyBcImltZy1vay1idXR0b25cIiA6IFwiXCInPjwvZGl2PjwvZGl2PjwvdGQ+XG5cdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdDwvdGFibGU+XG5cdFx0XHQ8L3RlbXBsYXRlPlxuXHRcdDwvSGlkZUFyZWE+XG5cdFx0XG5cdFx0PEhpZGVBcmVhIHRpdGxlPVwiRWluc3RlbGx1bmdlblwiIDpvcGVuPVwidHJ1ZVwiPlxuXHRcdFx0PHRlbXBsYXRlICNjb250ZW50PlxuXHRcdFx0XHQ8dGFibGUgY2xhc3M9XCJncnVwcGUtdGFibGVcIj5cblx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHQ8dHI+PHRkIGNvbHNwYW49XCIyXCI+XG5cdFx0XHRcdFx0XHRcdDxTZXR0aW5nQWJyZWNobnVuZ3NmYWt0b3IgOnNldHRpbmc9XCJwcm9wZXJ0aWVzLnNldHRpbmdzLkFicmVjaG51bmdzZmFrdG9yXCIgOmNhbmNsZV9saW5rPVwicHJvcGVydGllcy5jYW5jbGVfbGlua1wiIC8+XG5cdFx0XHRcdFx0XHQ8L3RkPjwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+PHRkIGNvbHNwYW49XCIyXCI+XG5cdFx0XHRcdFx0XHRcdDxTZXR0aW5nQW5zaWNodCA6c2V0dGluZz1cInByb3BlcnRpZXMuc2V0dGluZ3MuQW5zaWNodFwiIDpjYW5jbGVfbGluaz1cInByb3BlcnRpZXMuY2FuY2xlX2xpbmtcIiAvPlxuXHRcdFx0XHRcdFx0PC90ZD48L3RyPlxuXHRcdFx0XHRcdFx0PHRyPjx0ZCBjb2xzcGFuPVwiMlwiPlxuXHRcdFx0XHRcdFx0XHQ8U2V0dGluZ1Rha2VuIDpzZXR0aW5nPVwicHJvcGVydGllcy5zZXR0aW5ncy5UYWtlblwiIDpjYW5jbGVfbGluaz1cInByb3BlcnRpZXMuY2FuY2xlX2xpbmtcIiAvPlxuXHRcdFx0XHRcdFx0PC90ZD48L3RyPlxuXHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdDwvdGFibGU+XG5cdFx0XHQ8L3RlbXBsYXRlPlxuXHRcdDwvSGlkZUFyZWE+XG5cdFx0XG5cdDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLmdydXBwZVxue1xuXHRkaXNwbGF5OiBmbGV4O1xufVxuXG4uZ3J1cHBlLW5hbWUsXG4uZ3J1cHBlLWRlc2NyaXB0aW9uXG57XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmdydXBwZS1kZXNjcmlwdGlvblxue1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbi5ncnVwcGUtdGFibGUgPiB0Ym9keSA+IHRyID4gdGQsXG4uZ3J1cHBlLXRhYmxlID4gdGhlYWQgPiB0ciA+IHRoXG57XG5cdHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5ncnVwcGVuLXNldHRpbmdcbntcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnNldHRpbmctdmFsdWVcbntcblx0bWFyZ2luLWxlZnQ6IDFlbTtcbn1cblxuLmFkbWluLWluZGljYXRvclxue1xuXHR3aWR0aDogMWVtO1xuXHRoZWlnaHQ6IDFlbTtcblx0XG5cdGp1c3RpZnktc2VsZjogY2VudGVyO1xufVxuXG48L3N0eWxlPiIsIlxuPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiwgY29tcHV0ZWQgfSBmcm9tICd2dWUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuXHRncnVwcGVuOiBBcnJheVxufSk7XG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2NsaWNrJ10pO1xuXG5jb25zdCBncnVwcGVuID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcblx0bGV0IGcgPSBbXTtcblx0XG5cdGZvcihsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmdydXBwZW4ubGVuZ3RoOyBpKyspXG5cdHtcblx0XHRnW2ldID0gW107XG5cdFx0Z1tpXVtcImxhYmVsXCJdID0gcHJvcGVydGllcy5ncnVwcGVuW2ldO1xuXHRcdGdbaV1bXCJpZFwiXSA9IFwiZm9ybV9ncnVwcGVfXCIgKyBpO1xuXHRcdGdbaV1bXCJmdWxsTmFtZVwiXSA9IFwiZm9ybVtncnVwcGVdW1wiICsgaSArIFwiXVwiO1x0XHRcblx0fVxuXHRcblx0cmV0dXJuIGc7XG59KTtcblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cblx0PGZvcm0gbmFtZT1cImZvcm1cIiBtZXRob2Q9XCJwb3N0XCI+XG5cdFx0PGRpdiBjbGFzcz1cIkdydXBwZW5TZWxlY3RcIj5cblx0XHRcdDxkaXYgdi1mb3I9XCJncnVwcGUgaW4gZ3J1cHBlblwiIGNsYXNzPVwiR3J1cHBlXCI+XG5cdFx0XHRcdDxidXR0b24gOmlkPVwiZ3J1cHBlLmlkXCIgOm5hbWU9XCJncnVwcGUuZnVsbE5hbWVcIiB0eXBlPVwic3VibWl0XCI+e3sgZ3J1cHBlLmxhYmVsIH19PC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9mb3JtPlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLkdydXBwZW5TZWxlY3Rcbntcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0XG5cdG1hcmdpbjogMWVtO1xuXHRcblx0d2lkdGg6IDEwMCU7XG59XG5cbi5HcnVwcGVcbntcblx0ZmxleC1ncm93OiAxO1xuXHRtYXJnaW46IDAuNWVtO1xuXHRcblx0d2lkdGg6IDEwMCU7XG59XG5cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcblx0c2hvdzogQm9vbGVhbixcblx0bWVudURhdGE6IE9iamVjdCxcblx0cG9zaXRpb246IFN0cmluZ1xufSk7XG5cbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0cyhbJ2Nsb3NlJ10pO1xuXG5jb25zdCBpbWFnZUNsYXNzID0gY29tcHV0ZWQoKCkgPT5cbntcblx0cmV0dXJuIFwiaW1nLWFycm93LVwiICsgcHJvcGVydGllcy5wb3NpdGlvbjtcbn0pO1xuXG5jb25zdCBtZW51Q2xhc3MgPSBjb21wdXRlZCgoKSA9Plxue1xuXHRyZXR1cm4gXCJtZW51LVwiICsgcHJvcGVydGllcy5wb3NpdGlvbjtcbn0pO1xuXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8VHJhbnNpdGlvbiBuYW1lPVwibWVudS1mYWRlXCI+XG5cdFx0PGRpdiB2LWlmPVwicHJvcGVydGllcy5zaG93XCIgY2xhc3M9XCJtZW51XCIgOmNsYXNzPVwibWVudUNsYXNzXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWVudS1oZWxwZXJcIj48L2Rpdj5cblx0XHRcdDxkaXYgIGNsYXNzPVwibWVudUJhclwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibWVudS1pY29uXCIgOmNsYXNzPVwiaW1hZ2VDbGFzc1wiIEBjbGljaz1cIiRlbWl0KCdjbG9zZScpXCI+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFxuXHRcdFx0XHQ8ZGl2IHYtZm9yPVwiZW50cnkgaW4gcHJvcGVydGllcy5tZW51RGF0YS51cHBlclwiIGNsYXNzPVwibWVudS1lbnRyeVwiPlxuXHRcdFx0XHRcdDxhIDpocmVmPVwiZW50cnkubGlua1wiPnt7IGVudHJ5LmxhYmVsIH19PC9hPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtZW51LXNwYWNlXCI+PC9kaXY+XG5cdFx0XHRcdFxuXHRcdFx0XHQ8ZGl2IHYtZm9yPVwiZW50cnkgaW4gcHJvcGVydGllcy5tZW51RGF0YS5sb3dlclwiIGNsYXNzPVwibWVudS1lbnRyeVwiPlxuXHRcdFx0XHRcdDxhIDpocmVmPVwiZW50cnkubGlua1wiPnt7IGVudHJ5LmxhYmVsIH19PC9hPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtZW51LXNwYWNlXCI+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cdFxuXHRcdDwvZGl2PlxuXHQ8L1RyYW5zaXRpb24+XG5cdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuXG4ubWVudVxue1xuXHRsZWZ0OiAwcHg7XG5cdHRvcDogMHB4O1xuXHRcblx0d2lkdGg6IDEwMCU7XG5cdGhlaWdodDogMTAwJTtcblx0XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0XHRcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IHJvdztcbn1cblxuLm1lbnUtcmlnaHRcbntcblx0ZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xufVxuXG4ubWVudUJhclxue1x0XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdFxuXHRiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjtcbn1cblxuLm1lbnUtc3BhY2Vcbntcblx0ZmxleC1ncm93OiAxO1xuXHRtaW4taGVpZ2h0OiAxZW07XG59XG5cbi5tZW51LWljb25cbntcblx0d2lkdGg6IHZhcigtLXRvcGJhci1oZWlnaHQpO1xuXHRoZWlnaHQ6IHZhcigtLXRvcGJhci1oZWlnaHQpO1xuXHRcblx0cGFkZGluZzogMC4yNWVtO1xuXHRcblx0YWxpZ24tc2VsZjogY2VudGVyO1xufVxuXG4ubWVudS1lbnRyeVxue1xuXHRtYXJnaW4tYm90dG9tOiAwLjI1ZW07XG5cdHBhZGRpbmc6IDAuNWVtO1xufVxuXG4ubWVudS1mYWRlLWVudGVyLWFjdGl2ZSxcbi5tZW51LWZhZGUtbGVhdmUtYWN0aXZlIFxue1xuXHRvcGFjaXR5OiBhbGwgMC4xcyBlYXNlO1xufVxuXG4ubWVudS1mYWRlLWVudGVyLWZyb20sXG4ubWVudS1mYWRlLWxlYXZlLXRvIFxue1xuXHRvcGFjaXR5OiAwZW07XG5cdHdpZHRoOiAwcHg7XG59XG48L3N0eWxlPiIsIjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYsIGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcblx0ZGF0YTogT2JqZWN0LFxuXHRjb2x1bW5zOiBBcnJheVxufSk7XG5cbmNvbnN0IHNvcnRLZXkgPSByZWYoJycpO1xuXG5jb25zdCBzb3J0T3JkZXJzID0gcmVmKFxuXHRwcm9wZXJ0aWVzLmNvbHVtbnMucmVkdWNlKChvLCBrZXkpID0+ICgob1trZXldID0gMSksIG8pLCB7fSlcbik7XG5cbmZ1bmN0aW9uIHNvcnRCeShrZXkpIFxue1xuXHRzb3J0S2V5LnZhbHVlID0ga2V5XG4gIFx0c29ydE9yZGVycy52YWx1ZVtrZXldICo9IC0xXG59XG5cbmZ1bmN0aW9uIHNvcnRUYWJsZUJ5U3RyaW5nKGEsIGIpXG57XG5cdGNvbnN0IGtleSA9IHNvcnRLZXkudmFsdWU7XG5cdGNvbnN0IG9yZGVyID0gc29ydE9yZGVycy52YWx1ZVtrZXldO1xuXHRcblx0bGV0IHZhbHVlQSA9IGFbMV1ba2V5XTtcblx0bGV0IHZhbHVlQiA9IGJbMV1ba2V5XTsgXG5cdFxuXHRsZXQgaW5kZXggPSAwO1xuXHRcdFxuXHR3aGlsZSgoaW5kZXggPCB2YWx1ZUEubGVuZ3RoKSAmJiAoaW5kZXggPCB2YWx1ZUIubGVuZ3RoKSlcblx0e1xuXHRcdGxldCB2QSA9IHZhbHVlQS5jaGFyQXQoaW5kZXgpO1xuXHRcdGxldCB2QiA9IHZhbHVlQi5jaGFyQXQoaW5kZXgpO1xuXHRcdFxuXHRcdGlmKHZBICE9IHZCKVxuXHRcdHtcblx0XHRcdHJldHVybiAoKHZBIDwgdkIpID8gMSA6IC0xKSAqIG9yZGVyO1xuXHRcdH1cblx0XHRcblx0XHRpbmRleCsrO1xuXHR9XG5cdFxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gc29ydFRhYmxlQnlOdW1iZXIoYSwgYilcbntcblx0Y29uc3Qga2V5ID0gc29ydEtleS52YWx1ZTtcblx0Y29uc3Qgb3JkZXIgPSBzb3J0T3JkZXJzLnZhbHVlW2tleV07XG5cdFxuXHRsZXQgdmFsdWVBID0gYVsxXVtrZXldO1xuXHRsZXQgdmFsdWVCID0gYlsxXVtrZXldOyBcblx0XG5cdHJldHVybiAodmFsdWVBIC0gdmFsdWVCKSAqIG9yZGVyO1xufVxuXG5mdW5jdGlvbiBzb3J0RGF0YSgpXG57XG5cdGxldCBkYXRhID0gT2JqZWN0LmtleXMocHJvcGVydGllcy5kYXRhKS5tYXAoKGtleSkgPT4gW2tleSwgcHJvcGVydGllcy5kYXRhW2tleV1dKTtcblx0XHRcblx0aWYgKHNvcnRLZXkudmFsdWUpIFxuXHR7XG5cdFx0aWYoc29ydEtleS52YWx1ZSA9PSBcIk5hbWVcIilcblx0XHR7XG5cdFx0XHRkYXRhID0gZGF0YS5zbGljZSgpLnNvcnQoc29ydFRhYmxlQnlTdHJpbmcpO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0ZGF0YSA9IGRhdGEuc2xpY2UoKS5zb3J0KHNvcnRUYWJsZUJ5TnVtYmVyKTtcblx0XHR9XG5cdFx0XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGRhdGEpO1xufVxuXG5jb25zdCBkb3VibGVIZWFkZXIgPSBjb21wdXRlZCgoKSA9Plxue1xuXHRsZXQgaGVhZGVyID0gW107XG5cdFxuXHRoZWFkZXJbMF0gPSBbXTtcblx0aGVhZGVyWzBdW1widG9wXCJdID0gXCJSZVwiO1xuXHRoZWFkZXJbMF1bXCJib3R0b21cIl0gPSBcIkNvbnRyYVwiO1xuXHRcblx0aGVhZGVyWzFdID0gW107XG5cdGhlYWRlclsxXVtcInRvcFwiXSA9IFwiR2V3b25uZW5cIjtcblx0aGVhZGVyWzFdW1wiYm90dG9tXCJdID0gXCJWZXJsb3JlblwiO1xuXHRcblx0cmV0dXJuIGhlYWRlcjtcbn0pO1xuXG5jb25zdCBmaWx0ZXJlZERhdGEgPSBjb21wdXRlZCgoKSA9PiBcbntcdFxuXHRyZXR1cm4gc29ydERhdGEoKTtcdFxufSlcblxuY29uc3QgY2xhc3NOYW1lID0gY29tcHV0ZWQoKCkgPT5cbntcblx0bGV0IGRhdGEgPSBbXTtcblx0XG5cdGZvcihsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmNvbHVtbnMubGVuZ3RoOyBpKyspXG5cdHtcblx0XHRsZXQgbmFtZSA9IHByb3BlcnRpZXMuY29sdW1uc1tpXTtcblx0XHQgXG5cdFx0aWYoKG5hbWUgPT0gXCJHZXdvbm5lblwiKSB8fFxuXHRcdFx0KG5hbWUgPT0gXCJWZXJsb3JlblwiKSB8fFxuXHRcdFx0KG5hbWUgPT0gXCJSZVwiKSB8fFxuXHRcdFx0KG5hbWUgPT0gXCJDb250cmFcIikpXG5cdFx0e1xuXHRcdFx0ZGF0YVtuYW1lXSA9IFwiZGF0YS1sb25nXCI7XHRcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGRhdGFbbmFtZV0gPSBcImRhdGEtbm9ybWFsXCI7XG5cdFx0fVxuXHR9XG5cdFxuXHRyZXR1cm4gZGF0YTtcbn0pO1xuXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8dGFibGUgY2xhc3M9XCJzdGF0aXN0aWMtdGFibGVcIj5cblx0XHQ8dGhlYWQ+XG5cdCAgICBcdDx0cj5cblx0ICAgICAgICBcdDx0aCB2LWZvcj1cImtleSBpbiBwcm9wZXJ0aWVzLmNvbHVtbnNcIiA6Y2xhc3M9XCJjbGFzc05hbWVba2V5XVwiPlxuXHRcdFx0XHRcdDxkaXYgOmNsYXNzPVwieyBhY3RpdmU6IHNvcnRLZXkgPT0ga2V5IH1cIiBAY2xpY2s9XCJzb3J0Qnkoa2V5KVwiPlxuXHQgICAgICAgICAgICBcdFx0e3sga2V5IH19XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImFycm93XCIgOmNsYXNzPVwic29ydE9yZGVyc1trZXldID4gMCA/ICdhc2MnIDogJ2RzYydcIj48L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdCAgICAgICAgXHQ8L3RoPlxuXHRcdFx0XHQ8dGggY2xhc3M9XCJkYXRhLXNob3J0XCIgdi1mb3I9XCJoZWFkIGluIGRvdWJsZUhlYWRlclwiPlxuXHRcdFx0XHRcdDxkaXYgOmNsYXNzPVwieyBhY3RpdmU6IHNvcnRLZXkgPT0gaGVhZC50b3AgfVwiIEBjbGljaz1cInNvcnRCeShoZWFkLnRvcClcIj5cblx0XHRcdFx0XHRcdHt7IGhlYWQudG9wIH19XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImFycm93XCIgOmNsYXNzPVwic29ydE9yZGVyc1toZWFkLnRvcF0gPiAwID8gJ2FzYycgOiAnZHNjJ1wiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IDpjbGFzcz1cInsgYWN0aXZlOiBzb3J0S2V5ID09IGhlYWQuYm90dG9tIH1cIiBAY2xpY2s9XCJzb3J0QnkoaGVhZC5ib3R0b20pXCI+XG5cdFx0XHRcdFx0XHR7eyBoZWFkLmJvdHRvbSB9fVxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJhcnJvd1wiIDpjbGFzcz1cInNvcnRPcmRlcnNbaGVhZC5ib3R0b21dID4gMCA/ICdhc2MnIDogJ2RzYydcIj48L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvdGg+XG5cdCAgICBcdDwvdHI+XG5cdFx0PC90aGVhZD5cblx0XHRcblx0XHQ8dGJvZHk+XG5cdFx0ICAgIDx0ciB2LWZvcj1cInJvdyBpbiBmaWx0ZXJlZERhdGFcIj5cblx0XHQgICAgICAgIDx0ZCB2LWZvcj1cImtleSBpbiBwcm9wZXJ0aWVzLmNvbHVtbnNcIiA6Y2xhc3M9XCJjbGFzc05hbWVba2V5XVwiPlxuXHRcdCAgICAgICAgICAgIHt7IHJvd1trZXldIH19XG5cdFx0ICAgICAgICA8L3RkPlxuXHRcdFx0XHQ8dGQgY2xhc3M9XCJkYXRhLXNob3J0XCIgdi1mb3I9XCJoZWFkIGluIGRvdWJsZUhlYWRlclwiPlxuXHRcdFx0XHRcdHt7IHJvd1toZWFkLnRvcF0gfX0ve3sgcm93W2hlYWQuYm90dG9tXSB9fVxuXHRcdFx0XHQ8L3RkPlxuXHRcdCAgICA8L3RyPlxuXHRcdDwvdGJvZHk+XG5cblx0PC90YWJsZT5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXG57XG5cdC5kYXRhLXNob3J0XG5cdHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XHRcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdClcbntcblx0LmRhdGEtbG9uZ1xuXHR7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVx0XG59XG5cbi5zdGF0aXN0aWMtdGFibGVcbntcblx0Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cblxuLnN0YXRpc3RpYy10YWJsZSA+IHRoZWFkID4gdHIgPiB0aCxcbi5zdGF0aXN0aWMtdGFibGUgPiB0Ym9keSA+IHRyID4gdGRcbntcblx0cGFkZGluZy1sZWZ0OiAwLjVlbTtcblx0cGFkZGluZy1yaWdodDogMC41ZW07XG5cdFxuXHRib3JkZXItYm90dG9tOiAwLjFlbSBzb2xpZCBibGFjaztcblx0Ym9yZGVyLXJpZ2h0OiAwLjFlbSBzb2xpZCBibGFjaztcbn1cblxuLnN0YXRpc3RpYy10YWJsZSA+IHRoZWFkID4gdHIgPiB0aDpudGgtY2hpbGQoMSksXG4uc3RhdGlzdGljLXRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOm50aC1jaGlsZCgxKVxue1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uc3RhdGlzdGljLXRhYmxlID4gdGJvZHkgPiB0cjpudGgtbGFzdC1jaGlsZCgxKSA+IHRkXG57XG5cdGJvcmRlci1ib3R0b206IDBweCBzb2xpZCBibGFjaztcbn1cblxuLnN0YXRpc3RpYy10YWJsZSA+IHRoZWFkID4gdHIgPiB0aDpudGgtbGFzdC1jaGlsZCgxKSxcbi5zdGF0aXN0aWMtdGFibGUgPiB0Ym9keSA+IHRyID4gdGQ6bnRoLWxhc3QtY2hpbGQoMSlcbntcblx0Ym9yZGVyLXJpZ2h0OiAwcHggc29saWQgYmxhY2s7XG59XG5cbnRoLmFjdGl2ZSAuYXJyb3cuYXNjLFxuZGl2LmFjdGl2ZSAuYXJyb3cuYXNjXG57XG5cdGJvcmRlci1ib3R0b206IDAuNWVtIHNvbGlkIHJnYig1MSwgMjA5LCAxMjIpO1xufVxuXG50aC5hY3RpdmUgLmFycm93LmRzYyxcbmRpdi5hY3RpdmUgLmFycm93LmRzY1xue1xuICBib3JkZXItdG9wOiAwLjVlbSBzb2xpZCByZ2IoNTEsIDIwOSwgMTIyKTtcbn1cblxuLmFycm93IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogMC4yNWVtO1xuICBvcGFjaXR5OiAwLjY2O1xufVxuXG4uYXJyb3cuYXNjIHtcbiAgYm9yZGVyLWxlZnQ6IDAuNWVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDAuNWVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAwLjVlbSBzb2xpZCAjZmZmO1xufVxuXG4uYXJyb3cuZHNjIHtcbiAgYm9yZGVyLWxlZnQ6IDAuNWVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDAuNWVtIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItdG9wOiAwLjVlbSBzb2xpZCAjZmZmO1xufVxuXG48L3N0eWxlPmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcbiIsIjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi9NZW51LnZ1ZSc7XG5cbmNvbnN0IHNob3dNZW51ID0gcmVmKGZhbHNlKTtcbmNvbnN0IHNob3dTZXR0aW5ncyA9IHJlZihmYWxzZSk7XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG5cdG1lbnVEYXRhOiBPYmplY3QsXG5cdHNldHRpbmdzRGF0YTogT2JqZWN0XG59KTtcblxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cblx0PGRpdiBjbGFzcz1cInRvcGJhclwiPlxuXHQgICAgPGRpdiBjbGFzcz1cInRvcGJhci1pY29uIGltZy1zaG93LW1lbnVcIiBAY2xpY2s9XCJzaG93TWVudSA9IHRydWVcIj48L2Rpdj5cblx0XHQ8TWVudSA6c2hvdz1cInNob3dNZW51XCIgcG9zaXRpb249XCJsZWZ0XCIgOm1lbnVEYXRhPVwicHJvcGVydGllcy5tZW51RGF0YVwiIEBjbGljaz1cInNob3dNZW51ID0gZmFsc2VcIi8+XHRcblx0XHRcblx0XHQ8ZGl2IHN0eWxlPVwiZmxleC1ncm93OiAxO1wiPjwvZGl2PlxuXHRcdFxuXHRcdDxkaXYgY2xhc3M9XCJ0b3BiYXItaWNvbiBpbWctc2hvdy1zZXR0aW5nc1wiIEBjbGljaz1cInNob3dTZXR0aW5ncyA9IHRydWVcIj48L2Rpdj5cblx0XHQ8TWVudSA6c2hvdz1cInNob3dTZXR0aW5nc1wiIHBvc2l0aW9uPVwicmlnaHRcIiA6bWVudURhdGE9XCJwcm9wZXJ0aWVzLnNldHRpbmdzRGF0YVwiIEBjbGljaz1cInNob3dTZXR0aW5ncyA9IGZhbHNlXCIvPlxuXHQ8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cblxuLnRvcGJhclxue1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiB2YXIoLS10b3BiYXItaGVpZ2h0KTtcblx0XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFxuXHRiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcblx0XG5cdHBhZGRpbmctYm90dG9tOiAwLjVlbTtcbn1cblxuLnRvcGJhci1pY29uXG57XG5cdHdpZHRoOiB2YXIoLS10b3BiYXItaGVpZ2h0KTtcblx0aGVpZ2h0OiB2YXIoLS10b3BiYXItaGVpZ2h0KTtcblx0XG5cdHBhZGRpbmc6IDAuNGVtXG59XG5cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG5cdGxpbms6IFN0cmluZyxcblx0ZGF0dW06IFN0cmluZyxcblx0c3BpZWxlcjogU3RyaW5nXG59KVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cblx0PGRpdiBjbGFzcz1cInp1Zy1yb3dcIj5cblx0XHQ8ZGl2IGNsYXNzPVwienVnLWRhdHVtXCI+XG5cdFx0XHQ8YSA6aHJlZj1cInByb3BlcnRpZXMubGlua1wiPnt7IHByb3BlcnRpZXMuZGF0dW0gfX08L2E+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cInp1Zy1zcGllbGVyXCI+XG5cdFx0XHQ8YSA6aHJlZj1cInByb3BlcnRpZXMubGlua1wiPnt7IHByb3BlcnRpZXMuc3BpZWxlciB9fTwvYT5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L3RlbXBsYXRlPlxuXHRcbjxzdHlsZT5cbi56dWctcm93XG57XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdFxuXHRtYXJnaW46IDAuMjVlbTtcblx0cGFkZGluZzogMC41ZW07XG5cdCAgICBcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1lbGVtZW50LWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWVsZW1lbnQtcmFkaXVzKTtcbn1cblxuLnp1Zy1kYXR1bSAuenVnLXNwaWVsZXJcbntcblx0ZmxleC1ncm93OiAxO1xuXHRcblx0cGFkZGluZzogMC41ZW07XG5cdG1hcmdpbjogMC41ZW07XG59XG5cbi56dWctZGF0dW0gPiBhXG57XG5cdG1hcmdpbi1yaWdodDogMWVtO1xufVxuPC9zdHlsZT4iLCI8c2NyaXB0IHNldHVwPlxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcbiAgZGF0YTogT2JqZWN0LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxkaXYgOmNsYXNzPVwicHJvcGVydGllcy5kYXRhLmdlYmVyID8gJ3p1Zy10YWJsZS1jZWxsLWdlYmVyJyA6ICd6dWctdGFibGUtY2VsbCdcIj5cblx0XHQ8ZGl2IHYtaWY9XCJwcm9wZXJ0aWVzLmRhdGEucmVcIiBjbGFzcz1cInJlLWluZGljYXRvclwiPjwvZGl2PlxuXHRcdDxhIDpocmVmPVwicHJvcGVydGllcy5kYXRhLmxpbmtcIj5cblx0XHRcdHt7IHByb3BlcnRpZXMuZGF0YS52YWx1ZSB9fVxuXHQgICAgPC9hPlxuXHQ8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZT5cblxuLnJlLWluZGljYXRvclxue1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFxuXHR3aWR0aDogMC40ZW07XG5cdGhlaWdodDogMC40ZW07XG5cdFxuXHRtYXJnaW46IDAuMmVtO1xuXHRcblx0Ym9yZGVyLXJhZGl1czogMC4yZW07XG5cdFxuXHRiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcbn1cblxuLnp1Zy10YWJsZS1jZWxsLFxuLnp1Zy10YWJsZS1jZWxsLWdlYmVyXG57XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGhlaWdodDogMTAwJTtcbn1cblxuLnp1Zy10YWJsZS1jZWxsID4gYSxcbi56dWctdGFibGUtY2VsbC1nZWJlciA+IGFcbntcblx0ZmxleC1ncm93OiAxO1xufVxuXG4uenVnLXRhYmxlLWNlbGwtZ2ViZXJcbntcblx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZWxlbWVudC1iYWNrZ3JvdW5kKTtcbn1cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cblxuY29uc3QgcHJvcGVydGllcyA9IGRlZmluZVByb3BzKHtcbiAgZGF0YTogT2JqZWN0LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxkaXYgY2xhc3M9XCJ6dWctdGFibGUtY2VsbC1ib2NrXCI+XG5cdFx0PGEgY2xhc3M9XCJjZWxsLWJvY2tcIiA6aHJlZj1cInByb3BlcnRpZXMuZGF0YS5saW5rXCIgOmNsYXNzPVwiJ2ltZy1ib2NrLScgKyBwcm9wZXJ0aWVzLmRhdGEudmFsdWVcIj5cblx0XHRcdHt7IHByb3BlcnRpZXMuZGF0YS52YWx1ZSB9fVxuXHQgICAgPC9hPiAgXG5cdDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlPlxuLmNlbGwtYm9ja1xue1xuXHR3aWR0aDogMS4yNWVtO1xuXHRtYXJnaW4tdG9wOiAwLjI1ZW07XG5cdFxuXHRkaXNwbGF5OiBpbmxpbmU7XG59XG48L3N0eWxlPiIsIjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ3Z1ZSc7XG5cbmNvbnN0IHByb3BlcnRpZXMgPSBkZWZpbmVQcm9wcyh7XG4gIGhlYWRlcjogQXJyYXksXG4gIHJvdzogT2JqZWN0LFxufSk7XG5cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG5cdDxkaXYgY2xhc3M9XCJsYXN0XCIgdi1mb3I9XCJrZXkgaW4gcHJvcGVydGllcy5oZWFkZXJcIj5cblx0XHQ8ZGl2IHYtaWY9XCJwcm9wZXJ0aWVzLnJvdy5kYXRhID09IGtleVwiIGNsYXNzPVwiY2VsbC1uZXh0LWdlYmVyXCI+XG5cdFx0XHQ8YSA6aHJlZj1cInByb3BlcnRpZXMucm93LmxpbmtcIj5HZWJlcjwvYT5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IHYtZWxzZSBjbGFzcz1cImNlbGwtbmV4dFwiPlxuXHRcdFx0PGEgOmhyZWY9XCJwcm9wZXJ0aWVzLnJvdy5saW5rXCI+IDwvYT5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGU+XG5cbi5jZWxsLW5leHQsXG4uY2VsbC1uZXh0LWdlYmVyXG57XG5cdHdpZHRoOiAxMDAlO1xuXHRcblx0ZGlzcGxheTogZmxleDtcbn1cblxuLmNlbGwtbmV4dCA+IGEsXG4uY2VsbC1uZXh0LWdlYmVyID4gYVxue1xuXHRmbGV4LWdyb3c6IDE7XG5cdG1pbi1oZWlnaHQ6IDFlbTtcdFxufVxuXG4uY2VsbC1uZXh0LWdlYmVyXG57XG5cdGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbjwvc3R5bGU+IiwiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJztcblxuaW1wb3J0IFp1Z1RhYmxlUm93IGZyb20gJy4vWnVnVGFibGUvWnVnVGFibGVSb3cudnVlJztcbmltcG9ydCBadWdUYWJsZVJvd1N1bW1lIGZyb20gJy4vWnVnVGFibGUvWnVnVGFibGVSb3dTdW1tZS52dWUnO1xuaW1wb3J0IFp1Z1RhYmxlUm93TmV4dCBmcm9tICcuL1p1Z1RhYmxlL1p1Z1RhYmxlUm93TmV4dC52dWUnO1xuXG5jb25zdCBwcm9wZXJ0aWVzID0gZGVmaW5lUHJvcHMoe1xuICBkYXRhOiBBcnJheSxcbiAgY29sdW1uczogQXJyYXksXG4gIHN1bW1lbjogT2JqZWN0LFxuICBuZXh0OiBPYmplY3Rcbn0pXG5cbmNvbnN0IHN0eWxlVGVtcGxhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdGxldCB0ZW1wbGF0ZSA9IFwiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBcIjtcblx0XG5cdGZvcihsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmNvbHVtbnMubGVuZ3RoIC0gMTsgaSsrKVxuXHR7XG5cdFx0aWYoaSA+IDApXG5cdFx0e1xuXHRcdFx0dGVtcGxhdGUgKz0gXCIgXCI7XG5cdFx0fVxuXHRcdFxuXHRcdHRlbXBsYXRlICs9IFwiMi41ZnJcIjtcblx0fVxuXHRcblx0cmV0dXJuIHRlbXBsYXRlICsgXCIgMWZyXCI7XG59KVxuXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuXHQ8ZGl2IFxuXHRcdGNsYXNzPVwienVnLXRhYmxlXCJcblx0XHQ6c3R5bGVcdD1cInN0eWxlVGVtcGxhdGVcIj5cbiAgICBcdDxkaXYgdi1mb3I9XCJrZXkgaW4gcHJvcGVydGllcy5jb2x1bW5zXCIgOmNsYXNzPSdrZXkgPT0gXCJCXCIgPyBcImxhc3RcIiA6IFwiXCInPlxuXHRcdFx0PGRpdiBjbGFzcz1cInp1Zy1oZWFkXCI+IFxuICAgICAgXHRcdFx0e3sga2V5IH19XG5cdFx0XHQ8L2Rpdj5cbiAgICBcdDwvZGl2PlxuXG5cdFx0PFp1Z1RhYmxlUm93IHYtZm9yPVwicm93IGluIHByb3BlcnRpZXMuZGF0YVwiIDpoZWFkZXI9XCJwcm9wZXJ0aWVzLmNvbHVtbnNcIiA6cm93PVwicm93XCIvPlxuXHRcdDxadWdUYWJsZVJvd05leHQgIDpoZWFkZXI9XCJwcm9wZXJ0aWVzLmNvbHVtbnNcIiA6cm93PVwicHJvcGVydGllcy5uZXh0XCIgLz5cblx0XHQ8WnVnVGFibGVSb3dTdW1tZSA6aGVhZGVyPVwicHJvcGVydGllcy5jb2x1bW5zXCIgOnJvdz1cInByb3BlcnRpZXMuc3VtbWVuXCIgLz5cblx0PC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGU+XG4uenVnLXRhYmxlIFxue1xuXHRkaXNwbGF5OiBncmlkO1xuXHRcblx0dGV4dC1hbGlnbjogY2VudGVyO1x0XHRcbn1cblxuLnp1Zy1oZWFkXG57XG5cdG1pbi13aWR0aDogMmVtOyBcdFxufVxuXG4uenVnLXRhYmxlID4gZGl2XG57XHRcblx0Ym9yZGVyLXJpZ2h0OiAwLjFlbSBzb2xpZCBibGFjaztcblx0Ym9yZGVyLWJvdHRvbTogIDAuMWVtIHNvbGlkIGJsYWNrO1xufVxuXG4uenVnLXRhYmxlID4gLmxhc3RcbntcdFxuXHRib3JkZXItcmlnaHQ6IDBweCBzb2xpZCBibGFjaztcbn1cblxuLnp1Zy10YWJsZSA+IHRib2R5ID4gdHI6bnRoLWxhc3QtY2hpbGQoMikgPiB0ZFxue1xuXHRib3JkZXItYm90dG9tOiAwLjJlbSBkb3VibGUgYmxhY2s7XG59XG5cdFxuLnp1Zy10YWJsZSA+IHRib2R5ID4gdHI6bnRoLWxhc3QtY2hpbGQoMSkgPiB0ZFxue1xuXHRwYWRkaW5nLXRvcDogMC40ZW07XG5cdGJvcmRlci1ib3R0b206IDBlbSBzb2xpZCBibGFjaztcbn1cblxuPC9zdHlsZT4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/