Source: clients/mobile_app/platforms/ios/mobileapp/app/0.js

(global["webpackJsonp"] = global["webpackJsonp"] || []).push([[0],{

/***/ "../node_modules/moment/locale sync recursive ^\\.\\/.*$":
/***/ (function(module, exports, __webpack_require__) {

var map = {
	"./af": "../node_modules/moment/locale/af.js",
	"./af.js": "../node_modules/moment/locale/af.js",
	"./ar": "../node_modules/moment/locale/ar.js",
	"./ar-dz": "../node_modules/moment/locale/ar-dz.js",
	"./ar-dz.js": "../node_modules/moment/locale/ar-dz.js",
	"./ar-kw": "../node_modules/moment/locale/ar-kw.js",
	"./ar-kw.js": "../node_modules/moment/locale/ar-kw.js",
	"./ar-ly": "../node_modules/moment/locale/ar-ly.js",
	"./ar-ly.js": "../node_modules/moment/locale/ar-ly.js",
	"./ar-ma": "../node_modules/moment/locale/ar-ma.js",
	"./ar-ma.js": "../node_modules/moment/locale/ar-ma.js",
	"./ar-sa": "../node_modules/moment/locale/ar-sa.js",
	"./ar-sa.js": "../node_modules/moment/locale/ar-sa.js",
	"./ar-tn": "../node_modules/moment/locale/ar-tn.js",
	"./ar-tn.js": "../node_modules/moment/locale/ar-tn.js",
	"./ar.js": "../node_modules/moment/locale/ar.js",
	"./az": "../node_modules/moment/locale/az.js",
	"./az.js": "../node_modules/moment/locale/az.js",
	"./be": "../node_modules/moment/locale/be.js",
	"./be.js": "../node_modules/moment/locale/be.js",
	"./bg": "../node_modules/moment/locale/bg.js",
	"./bg.js": "../node_modules/moment/locale/bg.js",
	"./bm": "../node_modules/moment/locale/bm.js",
	"./bm.js": "../node_modules/moment/locale/bm.js",
	"./bn": "../node_modules/moment/locale/bn.js",
	"./bn.js": "../node_modules/moment/locale/bn.js",
	"./bo": "../node_modules/moment/locale/bo.js",
	"./bo.js": "../node_modules/moment/locale/bo.js",
	"./br": "../node_modules/moment/locale/br.js",
	"./br.js": "../node_modules/moment/locale/br.js",
	"./bs": "../node_modules/moment/locale/bs.js",
	"./bs.js": "../node_modules/moment/locale/bs.js",
	"./ca": "../node_modules/moment/locale/ca.js",
	"./ca.js": "../node_modules/moment/locale/ca.js",
	"./cs": "../node_modules/moment/locale/cs.js",
	"./cs.js": "../node_modules/moment/locale/cs.js",
	"./cv": "../node_modules/moment/locale/cv.js",
	"./cv.js": "../node_modules/moment/locale/cv.js",
	"./cy": "../node_modules/moment/locale/cy.js",
	"./cy.js": "../node_modules/moment/locale/cy.js",
	"./da": "../node_modules/moment/locale/da.js",
	"./da.js": "../node_modules/moment/locale/da.js",
	"./de": "../node_modules/moment/locale/de.js",
	"./de-at": "../node_modules/moment/locale/de-at.js",
	"./de-at.js": "../node_modules/moment/locale/de-at.js",
	"./de-ch": "../node_modules/moment/locale/de-ch.js",
	"./de-ch.js": "../node_modules/moment/locale/de-ch.js",
	"./de.js": "../node_modules/moment/locale/de.js",
	"./dv": "../node_modules/moment/locale/dv.js",
	"./dv.js": "../node_modules/moment/locale/dv.js",
	"./el": "../node_modules/moment/locale/el.js",
	"./el.js": "../node_modules/moment/locale/el.js",
	"./en-au": "../node_modules/moment/locale/en-au.js",
	"./en-au.js": "../node_modules/moment/locale/en-au.js",
	"./en-ca": "../node_modules/moment/locale/en-ca.js",
	"./en-ca.js": "../node_modules/moment/locale/en-ca.js",
	"./en-gb": "../node_modules/moment/locale/en-gb.js",
	"./en-gb.js": "../node_modules/moment/locale/en-gb.js",
	"./en-ie": "../node_modules/moment/locale/en-ie.js",
	"./en-ie.js": "../node_modules/moment/locale/en-ie.js",
	"./en-il": "../node_modules/moment/locale/en-il.js",
	"./en-il.js": "../node_modules/moment/locale/en-il.js",
	"./en-in": "../node_modules/moment/locale/en-in.js",
	"./en-in.js": "../node_modules/moment/locale/en-in.js",
	"./en-nz": "../node_modules/moment/locale/en-nz.js",
	"./en-nz.js": "../node_modules/moment/locale/en-nz.js",
	"./en-sg": "../node_modules/moment/locale/en-sg.js",
	"./en-sg.js": "../node_modules/moment/locale/en-sg.js",
	"./eo": "../node_modules/moment/locale/eo.js",
	"./eo.js": "../node_modules/moment/locale/eo.js",
	"./es": "../node_modules/moment/locale/es.js",
	"./es-do": "../node_modules/moment/locale/es-do.js",
	"./es-do.js": "../node_modules/moment/locale/es-do.js",
	"./es-us": "../node_modules/moment/locale/es-us.js",
	"./es-us.js": "../node_modules/moment/locale/es-us.js",
	"./es.js": "../node_modules/moment/locale/es.js",
	"./et": "../node_modules/moment/locale/et.js",
	"./et.js": "../node_modules/moment/locale/et.js",
	"./eu": "../node_modules/moment/locale/eu.js",
	"./eu.js": "../node_modules/moment/locale/eu.js",
	"./fa": "../node_modules/moment/locale/fa.js",
	"./fa.js": "../node_modules/moment/locale/fa.js",
	"./fi": "../node_modules/moment/locale/fi.js",
	"./fi.js": "../node_modules/moment/locale/fi.js",
	"./fil": "../node_modules/moment/locale/fil.js",
	"./fil.js": "../node_modules/moment/locale/fil.js",
	"./fo": "../node_modules/moment/locale/fo.js",
	"./fo.js": "../node_modules/moment/locale/fo.js",
	"./fr": "../node_modules/moment/locale/fr.js",
	"./fr-ca": "../node_modules/moment/locale/fr-ca.js",
	"./fr-ca.js": "../node_modules/moment/locale/fr-ca.js",
	"./fr-ch": "../node_modules/moment/locale/fr-ch.js",
	"./fr-ch.js": "../node_modules/moment/locale/fr-ch.js",
	"./fr.js": "../node_modules/moment/locale/fr.js",
	"./fy": "../node_modules/moment/locale/fy.js",
	"./fy.js": "../node_modules/moment/locale/fy.js",
	"./ga": "../node_modules/moment/locale/ga.js",
	"./ga.js": "../node_modules/moment/locale/ga.js",
	"./gd": "../node_modules/moment/locale/gd.js",
	"./gd.js": "../node_modules/moment/locale/gd.js",
	"./gl": "../node_modules/moment/locale/gl.js",
	"./gl.js": "../node_modules/moment/locale/gl.js",
	"./gom-deva": "../node_modules/moment/locale/gom-deva.js",
	"./gom-deva.js": "../node_modules/moment/locale/gom-deva.js",
	"./gom-latn": "../node_modules/moment/locale/gom-latn.js",
	"./gom-latn.js": "../node_modules/moment/locale/gom-latn.js",
	"./gu": "../node_modules/moment/locale/gu.js",
	"./gu.js": "../node_modules/moment/locale/gu.js",
	"./he": "../node_modules/moment/locale/he.js",
	"./he.js": "../node_modules/moment/locale/he.js",
	"./hi": "../node_modules/moment/locale/hi.js",
	"./hi.js": "../node_modules/moment/locale/hi.js",
	"./hr": "../node_modules/moment/locale/hr.js",
	"./hr.js": "../node_modules/moment/locale/hr.js",
	"./hu": "../node_modules/moment/locale/hu.js",
	"./hu.js": "../node_modules/moment/locale/hu.js",
	"./hy-am": "../node_modules/moment/locale/hy-am.js",
	"./hy-am.js": "../node_modules/moment/locale/hy-am.js",
	"./id": "../node_modules/moment/locale/id.js",
	"./id.js": "../node_modules/moment/locale/id.js",
	"./is": "../node_modules/moment/locale/is.js",
	"./is.js": "../node_modules/moment/locale/is.js",
	"./it": "../node_modules/moment/locale/it.js",
	"./it-ch": "../node_modules/moment/locale/it-ch.js",
	"./it-ch.js": "../node_modules/moment/locale/it-ch.js",
	"./it.js": "../node_modules/moment/locale/it.js",
	"./ja": "../node_modules/moment/locale/ja.js",
	"./ja.js": "../node_modules/moment/locale/ja.js",
	"./jv": "../node_modules/moment/locale/jv.js",
	"./jv.js": "../node_modules/moment/locale/jv.js",
	"./ka": "../node_modules/moment/locale/ka.js",
	"./ka.js": "../node_modules/moment/locale/ka.js",
	"./kk": "../node_modules/moment/locale/kk.js",
	"./kk.js": "../node_modules/moment/locale/kk.js",
	"./km": "../node_modules/moment/locale/km.js",
	"./km.js": "../node_modules/moment/locale/km.js",
	"./kn": "../node_modules/moment/locale/kn.js",
	"./kn.js": "../node_modules/moment/locale/kn.js",
	"./ko": "../node_modules/moment/locale/ko.js",
	"./ko.js": "../node_modules/moment/locale/ko.js",
	"./ku": "../node_modules/moment/locale/ku.js",
	"./ku.js": "../node_modules/moment/locale/ku.js",
	"./ky": "../node_modules/moment/locale/ky.js",
	"./ky.js": "../node_modules/moment/locale/ky.js",
	"./lb": "../node_modules/moment/locale/lb.js",
	"./lb.js": "../node_modules/moment/locale/lb.js",
	"./lo": "../node_modules/moment/locale/lo.js",
	"./lo.js": "../node_modules/moment/locale/lo.js",
	"./lt": "../node_modules/moment/locale/lt.js",
	"./lt.js": "../node_modules/moment/locale/lt.js",
	"./lv": "../node_modules/moment/locale/lv.js",
	"./lv.js": "../node_modules/moment/locale/lv.js",
	"./me": "../node_modules/moment/locale/me.js",
	"./me.js": "../node_modules/moment/locale/me.js",
	"./mi": "../node_modules/moment/locale/mi.js",
	"./mi.js": "../node_modules/moment/locale/mi.js",
	"./mk": "../node_modules/moment/locale/mk.js",
	"./mk.js": "../node_modules/moment/locale/mk.js",
	"./ml": "../node_modules/moment/locale/ml.js",
	"./ml.js": "../node_modules/moment/locale/ml.js",
	"./mn": "../node_modules/moment/locale/mn.js",
	"./mn.js": "../node_modules/moment/locale/mn.js",
	"./mr": "../node_modules/moment/locale/mr.js",
	"./mr.js": "../node_modules/moment/locale/mr.js",
	"./ms": "../node_modules/moment/locale/ms.js",
	"./ms-my": "../node_modules/moment/locale/ms-my.js",
	"./ms-my.js": "../node_modules/moment/locale/ms-my.js",
	"./ms.js": "../node_modules/moment/locale/ms.js",
	"./mt": "../node_modules/moment/locale/mt.js",
	"./mt.js": "../node_modules/moment/locale/mt.js",
	"./my": "../node_modules/moment/locale/my.js",
	"./my.js": "../node_modules/moment/locale/my.js",
	"./nb": "../node_modules/moment/locale/nb.js",
	"./nb.js": "../node_modules/moment/locale/nb.js",
	"./ne": "../node_modules/moment/locale/ne.js",
	"./ne.js": "../node_modules/moment/locale/ne.js",
	"./nl": "../node_modules/moment/locale/nl.js",
	"./nl-be": "../node_modules/moment/locale/nl-be.js",
	"./nl-be.js": "../node_modules/moment/locale/nl-be.js",
	"./nl.js": "../node_modules/moment/locale/nl.js",
	"./nn": "../node_modules/moment/locale/nn.js",
	"./nn.js": "../node_modules/moment/locale/nn.js",
	"./oc-lnc": "../node_modules/moment/locale/oc-lnc.js",
	"./oc-lnc.js": "../node_modules/moment/locale/oc-lnc.js",
	"./pa-in": "../node_modules/moment/locale/pa-in.js",
	"./pa-in.js": "../node_modules/moment/locale/pa-in.js",
	"./pl": "../node_modules/moment/locale/pl.js",
	"./pl.js": "../node_modules/moment/locale/pl.js",
	"./pt": "../node_modules/moment/locale/pt.js",
	"./pt-br": "../node_modules/moment/locale/pt-br.js",
	"./pt-br.js": "../node_modules/moment/locale/pt-br.js",
	"./pt.js": "../node_modules/moment/locale/pt.js",
	"./ro": "../node_modules/moment/locale/ro.js",
	"./ro.js": "../node_modules/moment/locale/ro.js",
	"./ru": "../node_modules/moment/locale/ru.js",
	"./ru.js": "../node_modules/moment/locale/ru.js",
	"./sd": "../node_modules/moment/locale/sd.js",
	"./sd.js": "../node_modules/moment/locale/sd.js",
	"./se": "../node_modules/moment/locale/se.js",
	"./se.js": "../node_modules/moment/locale/se.js",
	"./si": "../node_modules/moment/locale/si.js",
	"./si.js": "../node_modules/moment/locale/si.js",
	"./sk": "../node_modules/moment/locale/sk.js",
	"./sk.js": "../node_modules/moment/locale/sk.js",
	"./sl": "../node_modules/moment/locale/sl.js",
	"./sl.js": "../node_modules/moment/locale/sl.js",
	"./sq": "../node_modules/moment/locale/sq.js",
	"./sq.js": "../node_modules/moment/locale/sq.js",
	"./sr": "../node_modules/moment/locale/sr.js",
	"./sr-cyrl": "../node_modules/moment/locale/sr-cyrl.js",
	"./sr-cyrl.js": "../node_modules/moment/locale/sr-cyrl.js",
	"./sr.js": "../node_modules/moment/locale/sr.js",
	"./ss": "../node_modules/moment/locale/ss.js",
	"./ss.js": "../node_modules/moment/locale/ss.js",
	"./sv": "../node_modules/moment/locale/sv.js",
	"./sv.js": "../node_modules/moment/locale/sv.js",
	"./sw": "../node_modules/moment/locale/sw.js",
	"./sw.js": "../node_modules/moment/locale/sw.js",
	"./ta": "../node_modules/moment/locale/ta.js",
	"./ta.js": "../node_modules/moment/locale/ta.js",
	"./te": "../node_modules/moment/locale/te.js",
	"./te.js": "../node_modules/moment/locale/te.js",
	"./tet": "../node_modules/moment/locale/tet.js",
	"./tet.js": "../node_modules/moment/locale/tet.js",
	"./tg": "../node_modules/moment/locale/tg.js",
	"./tg.js": "../node_modules/moment/locale/tg.js",
	"./th": "../node_modules/moment/locale/th.js",
	"./th.js": "../node_modules/moment/locale/th.js",
	"./tk": "../node_modules/moment/locale/tk.js",
	"./tk.js": "../node_modules/moment/locale/tk.js",
	"./tl-ph": "../node_modules/moment/locale/tl-ph.js",
	"./tl-ph.js": "../node_modules/moment/locale/tl-ph.js",
	"./tlh": "../node_modules/moment/locale/tlh.js",
	"./tlh.js": "../node_modules/moment/locale/tlh.js",
	"./tr": "../node_modules/moment/locale/tr.js",
	"./tr.js": "../node_modules/moment/locale/tr.js",
	"./tzl": "../node_modules/moment/locale/tzl.js",
	"./tzl.js": "../node_modules/moment/locale/tzl.js",
	"./tzm": "../node_modules/moment/locale/tzm.js",
	"./tzm-latn": "../node_modules/moment/locale/tzm-latn.js",
	"./tzm-latn.js": "../node_modules/moment/locale/tzm-latn.js",
	"./tzm.js": "../node_modules/moment/locale/tzm.js",
	"./ug-cn": "../node_modules/moment/locale/ug-cn.js",
	"./ug-cn.js": "../node_modules/moment/locale/ug-cn.js",
	"./uk": "../node_modules/moment/locale/uk.js",
	"./uk.js": "../node_modules/moment/locale/uk.js",
	"./ur": "../node_modules/moment/locale/ur.js",
	"./ur.js": "../node_modules/moment/locale/ur.js",
	"./uz": "../node_modules/moment/locale/uz.js",
	"./uz-latn": "../node_modules/moment/locale/uz-latn.js",
	"./uz-latn.js": "../node_modules/moment/locale/uz-latn.js",
	"./uz.js": "../node_modules/moment/locale/uz.js",
	"./vi": "../node_modules/moment/locale/vi.js",
	"./vi.js": "../node_modules/moment/locale/vi.js",
	"./x-pseudo": "../node_modules/moment/locale/x-pseudo.js",
	"./x-pseudo.js": "../node_modules/moment/locale/x-pseudo.js",
	"./yo": "../node_modules/moment/locale/yo.js",
	"./yo.js": "../node_modules/moment/locale/yo.js",
	"./zh-cn": "../node_modules/moment/locale/zh-cn.js",
	"./zh-cn.js": "../node_modules/moment/locale/zh-cn.js",
	"./zh-hk": "../node_modules/moment/locale/zh-hk.js",
	"./zh-hk.js": "../node_modules/moment/locale/zh-hk.js",
	"./zh-mo": "../node_modules/moment/locale/zh-mo.js",
	"./zh-mo.js": "../node_modules/moment/locale/zh-mo.js",
	"./zh-tw": "../node_modules/moment/locale/zh-tw.js",
	"./zh-tw.js": "../node_modules/moment/locale/zh-tw.js"
};


function webpackContext(req) {
	var id = webpackContextResolve(req);
	return __webpack_require__(id);
}
function webpackContextResolve(req) {
	var id = map[req];
	if(!(id + 1)) { // check for number or string
		var e = new Error("Cannot find module '" + req + "'");
		e.code = 'MODULE_NOT_FOUND';
		throw e;
	}
	return id;
}
webpackContext.keys = function webpackContextKeys() {
	return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../node_modules/moment/locale sync recursive ^\\.\\/.*$";

/***/ }),

/***/ "./app/operations/operation-detail/operation-detail.component.html":
/***/ (function(module, exports) {

module.exports = "<ActionBar>\n    <NavigationButton android.systemIcon=\"ic_menu_back\" (tap)=\"onBackButtonTap()\">\n    </NavigationButton>\n <!--   <Label [text]=\"operation._subject.value + ' - '+ operation._keywordName.value\" horizontalAlignment=\"center\" textWrap=\"true\"></Label> -->\n    <Label [text]=\"operation._alarmdate.value + ' ' + operation._alarmtime.value\" horizontalAlignment=\"center\" textWrap=\"true\"></Label>\n     \n     \n    <ActionItem ios.position=\"right\" android.position=\"right\" (tap)=\"onDirectionsButtonTap()\">\n        <Label class=\"fas t-20\" text=\"&#xf4d7;\"></Label> \n    </ActionItem>\n</ActionBar>\n<GridLayout>\n        <BottomNavigation selectedIndex=\"0\">\n\n            <!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->\n            <TabStrip>\n                <TabStripItem>\n                    <Label text=\"Info\"></Label>\n                    <Image src=\"font://&#xf0a1;\" class=\"fas t-36\"></Image>\n                </TabStripItem>\n                <TabStripItem class=\"special\">\n                    <Label text=\"Map\"></Label>\n                    <Image src=\"font://&#xf279;\" class=\"fas t-36\"></Image>\n                </TabStripItem>\n                <TabStripItem class=\"special\">\n                    <Label text=\"Sonstiges\"></Label>\n                    <Image src=\"font://&#xf129;\" class=\"fas t-36\"></Image>\n                </TabStripItem>\n            </TabStrip>\n        \n            <!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->\n            <TabContentItem>\n                <StackLayout>\n                        <ScrollView [height]=\"operation._feedback == 'true' && _userIsLoggedIn == true ? '85%' : '100%'\">\n                        <StackLayout orientation=\"vertical\" width=\"100%\">\n                            <GridLayout columns=\"auto, *, auto\" rows=\"*,*\" class=\"p-t-10\">\n                                <Label row=\"0\" rowspan=\"2\" *ngIf=\"operation._icon != undefined\" verticalAlignment=\"center\" col=\"0\" class=\"m-l-15 fas t-20\" [text]=\"operation._icon\"></Label>\n                                <Label row=\"0\" col=\"1\" horizontalAlignment=\"center\" verticalAlignment=\"center\" [text]=\"operation._subject.value + ' - ' + operation._keywordCategory.value\"  class=\"m-x-15 text-center t-20 operationKeyword\" textWrap=\"true\"></Label>\n                                <Label row=\"1\" col=\"1\" horizontalAlignment=\"center\" verticalAlignment=\"center\" [text]=\"operation._keywordName.value\"  class=\"m-x-15 text-center t-20 operationKeyword\" textWrap=\"true\"></Label>\n                                <Label row=\"0\" rowspan=\"2\" *ngIf=\"operation._icon != undefined\" verticalAlignment=\"center\" col=\"2\" class=\"m-r-15 fas t-20\" [text]=\"operation._icon\"></Label>  \n                            </GridLayout>\n                            <StackLayout class=\"hr m-10\"></StackLayout>\n                            <ng-container *ngIf=\"operation._message != undefined\">\n                                <Label class=\"p-l-15 p-r-15 p-b-10 operationsDetailText\" [text]= \"operation._message.value\" textWrap=\"true\"></Label>\n                                <StackLayout class=\"hr m-10\"></StackLayout>\n                            </ng-container>\n                            <GridLayout columns=\"auto, *\" rows=\"*,*,*,*,*,*,*\">\n                                <ng-container *ngIf=\"operation._street != undefined\">\n                                    <Label row=\"0\" col=\"0\" [text]=\"operation._street.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n                                    <Label row=\"0\" col=\"1\" [text]=\"operation._street.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                                </ng-container>\n                                <ng-container *ngIf=\"operation._floor != undefined\">\n                                    <Label row=\"1\" col=\"0\" [text]=\"operation._floor.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n                                    <Label row=\"1\" col=\"1\" [text]=\"operation._floor.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                                </ng-container>\n                                <ng-container *ngIf=\"operation._section != undefined\">\n                                    <Label row=\"2\" col=\"0\" [text]=\"operation._section.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n                                    <Label row=\"2\" col=\"1\" [text]=\"operation._section.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                                </ng-container>\n                                <ng-container *ngIf=\"operation._location != undefined\">\n                                    <Label row=\"3\" col=\"0\" [text]=\"operation._location.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n                                    <Label row=\"3\" col=\"1\" [text]=\"operation._location.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                                </ng-container>\n                                <ng-container *ngIf=\"operation._object != undefined\">\n                                    <Label row=\"4\" col=\"0\" [text]=\"operation._object.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n                                    <Label row=\"4\" col=\"1\" [text]=\"operation._object.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                                </ng-container>\n                                <ng-container *ngIf=\"operation._ils != undefined\">\n                                    <StackLayout row=\"5\" colspan=\"2\" class=\"hr m-10\"></StackLayout>\n                                    <Label row=\"6\" col=\"0\" [text]=\"operation._ils.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n                                    <Label row=\"6\" col=\"1\" [text]=\"operation._ils.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                                </ng-container>\n                            </GridLayout>\n                            <StackLayout class=\"hr m-10\"></StackLayout>\n                            <ng-container *ngIf=\"operation._gear != undefined\">\n                                <Label horizontalAlignment=\"center\" [text]=operation._gear.label class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" ></Label>\n                                <Label class=\"p-l-15  p-b-10 operationsDetailText\" [text]=\"operation._gear.value\" textWrap=\"true\"></Label>\n                            </ng-container>\n                        </StackLayout>\n                    </ScrollView>\n                    <FlexboxLayout height=\"15%\" *ngIf=\"operation._feedback == 'true' && _userIsLoggedIn == true\">\n                        <Button height=\"100%\" width=\"50%\" text=\"Komme\" [ngClass]=\"['operationFeedbackButton', currentOperationFeedback === 1 || currentOperationFeedback === 0 ? 'feedback-green' : 'feedback-gray']\" verticalAlignment=\"center\" (tap)=\"onTapsetFeedbackState1($event)\"></Button>\n                        <Button height=\"100%\" width=\"50%\" text=\"Komme nicht\" [ngClass]=\"['operationFeedbackButton', currentOperationFeedback === 2 || currentOperationFeedback === 0 ? 'feedback-red' : 'feedback-gray']\" verticalAlignment=\"center\" (tap)=\"onTapsetFeedbackState2($event)\"></Button>                        \n                    </FlexboxLayout>-->                         \n                </StackLayout>\n            </TabContentItem>\n            <TabContentItem>\n                <GridLayout>\n                    <MapView (mapReady)=\"onMapReady($event)\" iosOverflowSafeArea=\"true\" [latitude]=\"latitude\" [longitude]=\"longitude\" [zoom]=\"zoom\"></MapView>\n                </GridLayout>\n            </TabContentItem>\n            <TabContentItem>\n                  <ScrollView>\n                    <StackLayout orientation=\"vertical\" width=\"100%\">\n                        <ng-container *ngIf=\"operation._operationnumber != undefined\">\n                            <ng-container *ngIf=\"operation._operationnumber != undefined && operation._operationnumber.value != null\">\n                                <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._operationnumber.label\" textAlignment=\"center\"></Label>\n                                <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._operationnumber.value\" textWrap=\"true\"></Label>\n                                <StackLayout class=\"hr m-10\"></StackLayout>\n                            </ng-container>\n                        </ng-container>\n                        <ng-container *ngIf=\"operation._rawdata != undefined\">\n                            <ng-container *ngIf=\"operation._rawdata.value != undefined && operation._rawdata.value != null\">\n                                <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._rawdata.label\" textAlignment=\"center\"></Label>\n                                <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._rawdata.value\" textWrap=\"true\"></Label>\n                                <StackLayout class=\"hr m-10\"></StackLayout>\n                            </ng-container>\n                        </ng-container>  \n                        <ng-container *ngIf=\"operation._zveis != undefined\">\n                            <ng-container *ngIf=\"operation._zveis != undefined && operation._zveis.value != null\">\n                                <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._zveis.label\" textAlignment=\"center\"></Label>\n                                <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._zveis.value\" textWrap=\"true\"></Label>\n                                <StackLayout class=\"hr m-10\"></StackLayout>\n                            </ng-container>\n                        </ng-container>\n                        <Label class=\"m-x-15 operationsDetailText\" text=\"Zeitstempel\" textAlignment=\"center\"></Label>\n                        <GridLayout columns=\"auto, *\" rows=\"*,*,*\">\n                            <Label row=\"0\" col=\"0\" [text]=\"operation._alarmtime.label\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n                            <Label row=\"1\" col=\"0\" [text]=\"operation._createdAt.label\" *ngIf=\"operation._createdAt != undefined\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>\n                            <Label row=\"2\" col=\"0\" text=  \"App-Eingangs-Zeit\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\"></Label>            \n                            <Label row=\"0\" col=\"1\" [text]=\"operation._alarmtime.value\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                            <Label row=\"1\" col=\"1\" *ngIf=\"operation._createdAt != undefined\" [text]=\"createdAt\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                            <Label row=\"2\" col=\"1\" *ngIf=\"operation._incomingTimeStamp != undefined\" [text]=\"incomingTimeStamp\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>\n                            <Label row=\"2\" col=\"1\" *ngIf=\"operation._incomingTimeStamp == undefined\" text  =\"Nicht gesetzt\" class=\"p-l-15 p-b-10 m-r-20 operationsDetailText\" textWrap=\"true\"></Label>                   \n                        </GridLayout>\n                        <StackLayout class=\"hr m-10\"></StackLayout>\n                        <ng-container *ngIf=\"operation._uuid != undefined\">\n                            <ng-container *ngIf=\"operation._uuid != undefined && operation._uuid.value != null\">\n                                <Label class=\"m-x-15 operationsDetailText\" [text]=\"operation._uuid.label\" textAlignment=\"center\"></Label>\n                                <Label class=\"m-x-15 p-b-10 operationsDetailText\" [text]=\"operation._uuid.value\" textWrap=\"true\"></Label>\n                                <StackLayout class=\"hr m-10\"></StackLayout>\n                            </ng-container>\n                        </ng-container>\n                    </StackLayout>\n                </ScrollView>        \n            </TabContentItem>      \n        </BottomNavigation>\n</GridLayout>"

/***/ }),

/***/ "./app/operations/operation-detail/operation-detail.component.scss":
/***/ (function(module, exports) {

module.exports = "@keyframes empty {}/* Forms */\n/*\n$base-theme:Material;\n$skin-name: alarmiator-mat;\n$swatch-name:Material;\n$border-radius: 2px;\n$primary-palette-name: red;\n$secondary-palette-name: red;\n$theme-type: dark;\n */\nActionBar {\n  background-color: #E6153D; }\n\n.tabStripIconText {\n  font-size: 18; }\n\n.fas {\n  font-family: \"Font Awesome 5 Free\", \"fa-solid-900\";\n  font-weight: 900; }\n\n.t-36 {\n  font-size: 36; }\n\n.operationsDetailText {\n  font-size: 15; }\n\n.trenn-element {\n  border-bottom: 1px solid white; }\n\n.text-center {\n  text-align: center; }\n\n.operationKeyword {\n  font-weight: 900; }\n\n.operationFeedbackButton {\n  android-elevation: 4;\n  border-color: #1b1b1b;\n  border-radius: 2;\n  border-width: 1;\n  color: whitesmoke;\n  font-size: 15;\n  font-weight: bold; }\n\n.operationFeedbackButton:active {\n  android-elevation: 8;\n  border-color: white;\n  border-radius: 2;\n  border-width: 1;\n  color: whitesmoke;\n  font-size: 15;\n  font-weight: bold; }\n\n.feedback-green {\n  background-color: green; }\n\n.feedback-red {\n  background-color: red; }\n\n.feedback-gray {\n  background-color: gray; }\n"

/***/ }),

/***/ "./app/operations/operation-detail/operation-detail.component.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationDetailComponent", function() { return OperationDetailComponent; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/rxjs/_esm5/operators/index.js");
/* harmony import */ var _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./app/operations/shared/operation.service.ts");
/* harmony import */ var nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/@nativescript/angular/element-registry.js");
/* harmony import */ var nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/nativescript-google-maps-sdk/map-view.js");
/* harmony import */ var nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../node_modules/nativescript-feedback/feedback.js");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var nativescript_directions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/nativescript-directions/directions.js");
/* harmony import */ var nativescript_directions__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(nativescript_directions__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _app_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./app/services/feedback.service.ts");
/* harmony import */ var _app_services_user_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("./app/services/user.service.ts");











Object(nativescript_angular_element_registry__WEBPACK_IMPORTED_MODULE_4__["registerElement"])("MapView", function () { return __webpack_require__("../node_modules/nativescript-google-maps-sdk/map-view.js").MapView; });
var moment = __webpack_require__("../node_modules/moment/moment.js");
/* ***********************************************************
* This is the item details component in the master-detail structure.
* This component retrieves the passed parameter from the master list component,
* finds the data item by this parameter and displays the detailed data item information.
*************************************************************/
var OperationDetailComponent = /** @class */ (function () {
    function OperationDetailComponent(_operationService, _feedbackService, _userService, _pageRoute, _routerExtensions) {
        var _this = this;
        this._operationService = _operationService;
        this._feedbackService = _feedbackService;
        this._userService = _userService;
        this._pageRoute = _pageRoute;
        this._routerExtensions = _routerExtensions;
        this._userIsLoggedIn = false;
        this.currentOperationFeedback = 0;
        //Map events
        this.onMapReady = function (event) {
            console.log("Map Ready");
            _this.mapView2 = event.object;
            _this.addMarker();
            _this.mapView2.latitude = _this.latitude;
            _this.mapView2.longitude = _this.longitude;
        };
        this.zoom = 17;
    }
    OperationDetailComponent.prototype.addMarker = function () {
        var marker = new nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__["Marker"]();
        marker.position = nativescript_google_maps_sdk__WEBPACK_IMPORTED_MODULE_5__["Position"].positionFromLatLng(this.latitude, this.longitude);
        marker.title = "Einsatzort";
        marker.userData = { index: 1 };
        this.mapView2.addMarker(marker);
    };
    /* ***********************************************************
    * Use the "ngOnInit" handler to get the data item id parameter passed through navigation.
    * Get the data item details from the data service using this id and assign it to the
    * private property that holds it inside the component.
    *************************************************************/
    OperationDetailComponent.prototype.ngOnInit = function () {
        var _this = this;
        /* ***********************************************************
        * Learn more about how to get navigation parameters in this documentation article:
        * http://docs.nativescript.org/angular/core-concepts/angular-navigation.html#passing-parameter
        *************************************************************/
        this._pageRoute.activatedRoute
            .pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_2__["switchMap"])(function (activatedRoute) { return activatedRoute.params; }))
            .forEach(function (params) {
            var operationId = parseFloat(params.id);
            _this._operation = _this._operationService.getOperationById(operationId);
            _this.currentOpFeedback = _this._feedbackService.getFeedbackForOperationUUID(_this.operation._uuid['value']);
            _this.currentOperationFeedback = 0;
            if (_this.currentOpFeedback != null) {
                _this.currentOperationFeedback = _this.currentOpFeedback["state"];
                _this.feedbackTimestamp = _this.currentOpFeedback["timestamp"];
            }
            if (_this._operation._lat != undefined) {
                _this.latitude = parseFloat(_this._operation._lat.value);
            }
            else {
                _this.latitude = 0;
            }
            if (_this._operation._lon != undefined) {
                _this.longitude = parseFloat(_this._operation._lon.value);
            }
            else {
                _this.longitude = 0;
            }
            if (_this._operation._createdAt != undefined) {
                _this.createdAt = moment(_this._operation._createdAt.value).format("HH:mm:ss");
            }
            if (_this._operation._incomingTimeStamp != undefined) {
                if (moment(_this._operation._incomingTimeStamp).isValid()) {
                    _this.incomingTimeStamp = moment(_this._operation._incomingTimeStamp).format("HH:mm:ss");
                }
                else {
                    _this.incomingTimeStamp = _this._operation._incomingTimeStamp;
                }
            }
        });
        this.directions = new nativescript_directions__WEBPACK_IMPORTED_MODULE_7__["Directions"]();
        this.feedback = new nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__["Feedback"]();
        // GET USER
        if (this.operation['_serverUUID'] != undefined) {
            var user = this._userService.getUserForServerUUID(this.operation['_serverUUID']);
            if (user != null) {
                this._serveradress = user['_serveradress'];
                this._username = user['_username'];
                this._passwordhash = user['_passwordHash'];
                if (user['_basedata']['_uuid'] != undefined) {
                    this._basedataUUID = user['_basedata']['_uuid'];
                    console.log(this._basedataUUID);
                }
                else {
                    console.log("basedataUUID undefined");
                    this.feedback.warning({
                        title: "Achtung",
                        message: "Profil nicht aktuell! Bitte logge dich erneut ein!"
                    });
                    this._basedataUUID = null;
                }
                if (this._basedataUUID != null) {
                    this._userIsLoggedIn = true;
                }
                else {
                    this._userIsLoggedIn = false;
                }
            }
            else {
                this._userIsLoggedIn = false;
                ;
            }
        }
        else {
            this._userIsLoggedIn = false;
        }
    };
    Object.defineProperty(OperationDetailComponent.prototype, "operation", {
        get: function () {
            return this._operation;
        },
        enumerable: true,
        configurable: true
    });
    /* ***********************************************************
    * The back button is essential for a master-detail feature.
    *************************************************************/
    OperationDetailComponent.prototype.onBackButtonTap = function () {
        this._routerExtensions.backToPreviousPage();
    };
    /* ***********************************************************
    * The master-detail template comes with an example of an item edit page.
    * Check out the edit page in the /cars/car-detail-edit folder.
    *************************************************************/
    OperationDetailComponent.prototype.onEditButtonTap = function () {
        this._routerExtensions.navigate(["/cars/car-detail-edit", this._operation.id], {
            animated: true,
            transition: {
                name: "slideTop",
                duration: 200,
                curve: "ease"
            }
        });
    };
    OperationDetailComponent.prototype.onDirectionsButtonTap = function () {
        this.directions.navigate({
            to: {
                lat: this.latitude,
                lng: this.longitude
            },
            type: "driving",
            ios: {
                preferGoogleMaps: true,
                allowGoogleMapsWeb: true // If waypoints are passed in and Google Maps is not installed, you can either open Apple Maps and the first waypoint is used as the to-address (the rest is ignored), or you can open Google Maps on web so all waypoints are shown (set this property to true). Default false.
            },
            android: {
                newTask: true // Start as new task. This means it will start a new history stack instead of using the current app. Default true.
            }
        }).then(function () {
            console.log("Maps app launched.");
        }, function (error) {
            console.log(error);
        });
    };
    OperationDetailComponent.prototype.onTapsetFeedbackState1 = function (event) {
        var _this = this;
        if (this.operation._uuid != undefined && this._userIsLoggedIn && this.currentOperationFeedback !== 1) {
            console.log("KOMME");
            this._feedbackService.setFeedback(this._serveradress, this._username, this._passwordhash, this.operation._uuid['value'], this._basedataUUID, 1)
                .then(function (result) {
                _this._feedbackService.persistFeedback(_this.operation._uuid['value'], moment().format(), 1);
                _this.currentOpFeedback = _this._feedbackService.getFeedbackForOperationUUID(_this.operation._uuid['value']);
                _this.currentOperationFeedback = _this.currentOpFeedback["state"];
                _this.feedbackTimestamp = _this.currentOpFeedback["timestamp"];
            });
            console.log(this.currentOperationFeedback);
        }
    };
    OperationDetailComponent.prototype.onTapsetFeedbackState2 = function (event) {
        var _this = this;
        if (this.operation._uuid != undefined && this._userIsLoggedIn && this.currentOperationFeedback !== 2) {
            console.log("KOMME NICHT");
            this._feedbackService.setFeedback(this._serveradress, this._username, this._passwordhash, this.operation._uuid['value'], this._basedataUUID, 2)
                .then(function (result) {
                _this._feedbackService.persistFeedback(_this.operation._uuid['value'], moment().format(), 2);
                _this.currentOpFeedback = _this._feedbackService.getFeedbackForOperationUUID(_this.operation._uuid['value']);
                _this.currentOperationFeedback = _this.currentOpFeedback["state"];
                _this.feedbackTimestamp = _this.currentOpFeedback["timestamp"];
            });
        }
    };
    OperationDetailComponent.ctorParameters = function () { return [
        { type: _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"] },
        { type: _app_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"] },
        { type: _app_services_user_service__WEBPACK_IMPORTED_MODULE_9__["UserService"] },
        { type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["PageRoute"] },
        { type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"] }
    ]; };
    __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])("MapView", { static: false }),
        __metadata("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"])
    ], OperationDetailComponent.prototype, "mapView", void 0);
    OperationDetailComponent = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({
            selector: "OperationDetail",
            template: __webpack_require__("./app/operations/operation-detail/operation-detail.component.html"),
            styles: [__webpack_require__("./app/operations/operation-detail/operation-detail.component.scss")]
        }),
        __metadata("design:paramtypes", [_shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"],
            _app_services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"],
            _app_services_user_service__WEBPACK_IMPORTED_MODULE_9__["UserService"],
            nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["PageRoute"],
            nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"]])
    ], OperationDetailComponent);
    return OperationDetailComponent;
}());



/***/ }),

/***/ "./app/operations/operation-list.component.html":
/***/ (function(module, exports) {

module.exports = "<ActionBar class=\"header primary\" >\n    <!-- Should remove the navigation button -->\n    <NavigationButton ios:visibility=\"collapsed\"></NavigationButton>\n    <Label text=\"ALARMiator\" horizontalAlignment=\"center\" class=\"t-18\"></Label>\n    <ActionItem ios.position=\"right\" android.position=\"right\" (tap)=\"onProfileButtonTap()\">\n        <Label class=\"fas t-20\" text=\"&#xf0c0;\"></Label> \n    </ActionItem>\n</ActionBar>\n<BottomNavigation selectedIndex=\"0\">\n\n    <!-- The bottom tab UI is created via TabStrip (the containier) and TabStripItem (for each tab)-->\n    <TabStrip>\n        <TabStripItem (tap)=\"onOperationsItemTapped($event)\">\n            <Label class=\"tabStripIconText\" text=\"Einsätze\"></Label>\n            <Image src=\"font://&#xf0f3;\" class=\"fas t-36\"></Image>\n        </TabStripItem>\n        <TabStripItem class=\"special\">\n            <Label class=\"tabStripIconText\" text=\"Einstellungen\"></Label>\n            <Image src=\"font://&#xf013;\" class=\"fas t-36\"></Image>\n        </TabStripItem>\n    </TabStrip>\n\n    <!-- The number of TabContentItem components should corespond to the number of TabStripItem components -->\n    <TabContentItem>\n        <GridLayout>\n            <RadListView #listview [items]=\"operations\" (itemTap)=\"onOperationItemTap($event)\" class=\"operations-list\" swipeActions=\"true\" \n            (itemSwipeProgressEnded)=\"onSwipeCellFinished($event)\"\n            (itemSwipeProgressStarted)=\"onSwipeCellStarted($event)\" (itemSwipeProgressChanged)=\"onCellSwiping($event)\"\n            >\n                <!--\n            RadListView is a UI component part of the Progress NativeScript UI set of components.\n            Learn more about the RadListView UI component and how it can be customized in this documentation article:\n            https://docs.nativescript.org/angular/ui/professional-ui-components/ng-ListView/getting-started\n            This component is used to display the master list in the master-detail structure.\n            -->\n                <ng-template tkListItemTemplate let-operation=\"item\">\n                    <StackLayout class=\"operations-list__item\">\n                        <GridLayout rows=\"*, *, *\" columns=\"auto, *, auto\" class=\"operations-list__item-content t-18\">\n                            <Label col=\"0\" text=\"&#xf017;\" class=\"fas operations-list__item-icon\"></Label>\n                            <Label col=\"1\" [text]=\"operation._alarmdate.value + ' ' + operation._alarmtime.value\"></Label>\n                            <Label *ngIf=\"operation._icon != undefined\" col=\"2\" horizontalAlignment=\"right\"\n                                class=\"m-r-5 fas t-36 operations-list__item-icon\" [text]=\"operation._icon\"></Label>\n                            <StackLayout row=\"1\" class=\"hr m-y-5\" colspan=\"3\"></StackLayout>\n                            <GridLayout row=\"2\" col=\"0\" colspan=\"3\" rows=\"*, *, *, *\" columns=\"auto, *, auto\"\n                                verticalAlignment=\"center\" class=\"p-b-10 t-18\">\n                                <Label row=\"0\" rowspan=\"2\" col=\"0\" text=\"&#xf0f3;\"\n                                    class=\"fas operations-list__item-icon\"> </Label>\n                                <Label row=\"0\" col=\"1\"\n                                    [text]=\"operation._subject.value + ' - ' + operation._keywordCategory.value\"\n                                    textWrap=\"true\"></Label>\n                                <Label row=\"1\" col=\"1\" [text]=\"operation._keywordName.value\" textWrap=\"true\"></Label>\n                                <ng-container *ngIf=\"operation._uuid != undefined\">\n                                    <Label row=\"0\" col=\"2\" rowspan =\"2\" *ngIf=\"getFeedbackForOperation(operation._uuid.value) != null\"\n                                    [text] =\"getFeedbackForOperation(operation._uuid.value)\" class=\"fas operations-list__item-feedback-icon t-25\"\n                                ></Label>\n                                </ng-container>\n\n                                <StackLayout row=\"2\" class=\"hr m-y-5\" colspan=\"3\"></StackLayout>\n                                <Label row=\"3\" col=\"0\" text=\"&#xf276;\" class=\"fas operations-list__item-icon\"> </Label>\n                                <Label *ngIf=\"operation._locationCalc == undefined && operation._location != undefined\" row=\"3\" col=\"1\" [text]=\"operation._location.value\" textWrap=\"true\"></Label>\n                                <Label *ngIf=\"operation._locationCalc == undefined && operation._location == undefined\" row=\"3\" col=\"1\" text=\"--\" textWrap=\"true\"></Label>\n                                <Label *ngIf=\"operation._locationCalc != undefined\" row=\"3\" col=\"1\" [text]=\"operation._locationCalc.value\" textWrap=\"true\"></Label>\n                            </GridLayout>\n                        </GridLayout>\n                    </StackLayout>\n                </ng-template>\n                <GridLayout *tkListItemSwipeTemplate columns=\"auto, *, auto\">\n                    <!-- LEFT SWIPING CURRENTLY NOT USED-->\n                    <GridLayout columns=\"*, *, *\" col=\"0\" id=\"left-stack\">\n                        <GridLayout col=\"0\" class=\"markGridLayout\" (tap)=\"onLeftSwipeClick($event)\" id=\"btnMark\">\n                            <Label text=\"mark\" class=\"swipeTemplateLabel\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n                        </GridLayout>\n                        <GridLayout col=\"1\" class=\"archiveGridLayout\" (tap)=\"onLeftSwipeClick($event)\" id=\"btnArchive\">\n                            <Label text=\"archive\" class=\"swipeTemplateLabel\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n                        </GridLayout>\n                        <GridLayout col=\"2\" class=\"unreadGridLayout\" (tap)=\"onLeftSwipeClick($event)\" id=\"btnUnread\">\n                            <Label text=\"unread\" class=\"swipeTemplateLabel\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n                        </GridLayout>\n                    </GridLayout>\n                    <GridLayout columns=\"*\" col=\"2\" id=\"right-stack\" class=\"m-10\">\n                        <GridLayout col=\"0\" class=\"deleteGridLayout\" (tap)=\"onRightSwipeClick($event)\" id=\"btnDelete\" backgroundColor=\"red\">\n                            <Label text=\"&#xf1f8;\" class=\"swipeTemplateLabel fas t-20\" verticalAlignment=\"center\" horizontalAlignment=\"center\"></Label>\n                        </GridLayout>\n                    </GridLayout>\n                </GridLayout>\n            </RadListView>\n            <ActivityIndicator [busy]=\"isLoading\"></ActivityIndicator>\n        </GridLayout>\n    </TabContentItem>\n    <TabContentItem>\n        <ScrollView>\n            <ns-settings></ns-settings>\n        </ScrollView>\n    </TabContentItem>\n\n</BottomNavigation>"

/***/ }),

/***/ "./app/operations/operation-list.component.scss":
/***/ (function(module, exports) {

module.exports = "@keyframes empty {}/* Forms */\n/*\n$base-theme:Material;\n$skin-name: alarmiator-mat;\n$swatch-name:Material;\n$border-radius: 2px;\n$primary-palette-name: red;\n$secondary-palette-name: red;\n$theme-type: dark;\n */\nActionBar {\n  background-color: #E6153D; }\n\n.tabStripIconText {\n  font-size: 18; }\n\n.fas {\n  font-family: \"Font Awesome 5 Free\", \"fa-solid-900\";\n  font-weight: 900; }\n\n.t-36 {\n  font-size: 36; }\n\n.operationsDetailText, .operations-list__item {\n  font-size: 14; }\n\n.operations-list__item {\n  margin-top: 4px;\n  margin-left: 4px;\n  margin-right: 4px; }\n  .operations-list__item-content {\n    background-color: #e4e7eb;\n    border-radius: 40px; }\n  .operations-list__item-name, .operations-list__item-icon {\n    color: red; }\n\n:host-context(.ns-dark) .operations-list__item {\n  margin-top: 4px;\n  margin-left: 4px;\n  margin-right: 4px; }\n  :host-context(.ns-dark) .operations-list__item-content {\n    background-color: black;\n    border-radius: 40px; }\n  :host-context(.ns-dark) .operations-list__item-name, :host-context(.ns-dark) .operations-list__item-icon {\n    color: red; }\n\n.deleteGridLayout {\n  border-radius: 50px; }\n\n.operations-list__item {\n  margin-top: 20px;\n  margin-left: 20px;\n  margin-right: 20px;\n  padding: 20px; }\n  .operations-list__item-content {\n    background-color: #e4e7eb;\n    border-radius: 40px;\n    margin-top: 20px;\n    margin-left: 20px;\n    margin-right: 20px;\n    padding: 20px; }\n  .operations-list__item-name, .operations-list__item-icon {\n    color: red; }\n\n:host-context(.ns-dark) .operations-list__item {\n  margin-top: 4px;\n  margin-left: 4px;\n  margin-right: 4px; }\n  :host-context(.ns-dark) .operations-list__item-content {\n    background-color: black;\n    border-radius: 40px; }\n  :host-context(.ns-dark) .operations-list__item-name, :host-context(.ns-dark) .operations-list__item-icon {\n    color: red; }\n\n.deleteGridLayout {\n  border-radius: 50px;\n  margin-top: 20px;\n  padding-top: 20px; }\n"

/***/ }),

/***/ "./app/operations/operation-list.component.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationListComponent", function() { return OperationListComponent; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/@nativescript/core/data/observable-array/observable-array.js");
/* harmony import */ var tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./app/operations/shared/operation.service.ts");
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/nativescript-ui-listview/angular/listview-directives.js");
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/@nativescript/core/ui/page/page.js");
/* harmony import */ var tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../node_modules/nativescript-feedback/feedback.js");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var _nativescript_theme__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/@nativescript/theme/index.js");
/* harmony import */ var _nativescript_theme__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_nativescript_theme__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var _services_feedback_service__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("./app/services/feedback.service.ts");









/* ***********************************************************
* This is the master list component in the master-detail structure.
* This component gets the data, passes it to the master view and displays it in a list.
* It also handles the navigation to the details page for each item.
*************************************************************/
var OperationListComponent = /** @class */ (function () {
    function OperationListComponent(_routerExtensions, _operationService, _feedbackService) {
        this._routerExtensions = _routerExtensions;
        this._operationService = _operationService;
        this._feedbackService = _feedbackService;
        this._isLoading = false;
        this.selectedIndex = 1;
    }
    /* ***********************************************************
    * Use the "ngOnInit" handler to get the data and assign it to the
    * private property that holds it inside the component.
    *************************************************************/
    OperationListComponent.prototype.ngOnInit = function () {
        var _this = this;
        this._isLoading = false;
        this.feedback = new nativescript_feedback__WEBPACK_IMPORTED_MODULE_6__["Feedback"]();
        this._operationService.getAllOp().subscribe(function (operation) {
            if (operation == null) {
                _this._operations.splice(0);
            }
            else {
                var reveresedOperation = operation.slice(0);
                _this._operations = new tns_core_modules_data_observable_array__WEBPACK_IMPORTED_MODULE_2__["ObservableArray"](reveresedOperation.reverse());
            }
        });
        this.operationSortingFunction = function (item, otherItem) {
            // TODO: Add filtering criteria
            //    const res = item.id < otherItem.id ? -1 : item.id > otherItem.id ? 1 : 0;
            var res = 0;
            return res;
        };
    };
    OperationListComponent.prototype.ngOnChanges = function () {
        // get archive from storage
        alert("hi");
        //  this._operations = new ObservableArray(this._operationService.getAllOperations());
    };
    Object.defineProperty(OperationListComponent.prototype, "operations", {
        get: function () {
            return this._operations;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(OperationListComponent.prototype, "isLoading", {
        get: function () {
            return this._isLoading;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(OperationListComponent.prototype, "operationSortingFunction", {
        get: function () {
            return this._operationSortingFunction;
        },
        set: function (value) {
            this._operationSortingFunction = value;
        },
        enumerable: true,
        configurable: true
    });
    /* ***********************************************************
    * Use the "itemTap" event handler of the <RadListView> to navigate to the
    * item details page. Retrieve a reference for the data item (the id) and pass it
    * to the item details page, so that it can identify which data item to display.
    * Learn more about navigating with a parameter in this documentation article:
    * http://docs.nativescript.org/angular/core-concepts/angular-navigation.html#passing-parameter
    *************************************************************/
    OperationListComponent.prototype.onOperationItemTap = function (args) {
        var tappedOperationItem = args.view.bindingContext;
        this._operationService.redirectToOperationDetails(tappedOperationItem.id);
    };
    OperationListComponent.prototype.onPullToRefreshInitiated = function (args) {
        var listView = args.object;
        listView.refresh();
        listView.notifyPullToRefreshFinished();
    };
    OperationListComponent.prototype.onOperationsItemTapped = function (event) {
        this.radListView.listView.refresh();
    };
    OperationListComponent.prototype.onProfileButtonTap = function (event) {
        this._routerExtensions.navigate(["/profiles"], {
            animated: true,
            transition: {
                name: "slide",
                duration: 200,
                curve: "ease"
            }
        });
    };
    OperationListComponent.prototype.onSwipeCellStarted = function (args) {
        var swipeLimits = args.data.swipeLimits;
        swipeLimits.threshold = args['mainView'].getMeasuredWidth() * 0.3; // 30% of whole width
        //     swipeLimits.left = args['mainView'].getMeasuredWidth() * 0.65; // 65% of whole width
        swipeLimits.left = 0; // turn off left swiping
        swipeLimits.right = args['mainView'].getMeasuredWidth() * 0.30; // 35% of whole width
    };
    OperationListComponent.prototype.onLeftSwipeClick = function (args) {
        console.log("Left swipe click");
    };
    OperationListComponent.prototype.onRightSwipeClick = function (args) {
        //  console.log("Right swipe click");
        // console.log(args.view.bindingContext);
        if (args.object.id == "btnDelete") {
            //    console.log("DELETE OPERATION");
            //    console.log(args.view.bindingContext['_uuid']['value']);
            if (args.view.bindingContext['_uuid'] != undefined) {
                if (args.view.bindingContext['_uuid']['value'] != undefined) {
                    var deleteResult = this._operationService.deleteOperationForUUID(args.view.bindingContext['_uuid']['value']);
                    if (deleteResult) {
                        this.feedback.success({
                            title: "Erfolgreich",
                            message: "Einsatz wurde gelöscht!"
                        });
                        this.radListView.listView.refresh();
                    }
                }
                else {
                    console.log("ERROR WHILE DELETING: No UUID VALUE FOUND");
                }
            }
            else {
                console.log("ERROR WHILE DELETING: No UUID FOUND");
            }
        }
    };
    OperationListComponent.prototype.onSwipeCellFinished = function (args) {
        // console.log("cell swiping finished")
    };
    OperationListComponent.prototype.onCellSwiping = function (args) {
        var swipeLimits = args.data.swipeLimits;
        var swipeView = args['swipeView'];
        this.mainView = args['mainView'];
        // Check if referencing item does not exist anymore
        if (swipeView != undefined) {
            this.leftItem = swipeView.getViewById('left-stack');
            this.rightItem = swipeView.getViewById('right-stack');
            if (args.data.x > 0) {
                var leftDimensions = tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].measureChild(this.leftItem.parent, this.leftItem, tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(Math.abs(args.data.x), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(this.mainView.getMeasuredHeight(), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY));
                tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.leftItem.parent, this.leftItem, 0, 0, leftDimensions.measuredWidth, leftDimensions.measuredHeight);
                this.hideOtherSwipeTemplateView("left");
            }
            else {
                var rightDimensions = tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].measureChild(this.rightItem.parent, this.rightItem, tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(Math.abs(args.data.x), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].makeMeasureSpec(this.mainView.getMeasuredHeight(), tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["layout"].EXACTLY));
                tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.rightItem.parent, this.rightItem, this.mainView.getMeasuredWidth() - rightDimensions.measuredWidth, 0, this.mainView.getMeasuredWidth(), rightDimensions.measuredHeight);
                this.hideOtherSwipeTemplateView("right");
            }
        }
        else {
            //    console.log("WARNING: EXCEPTION CAUGHT!");
        }
    };
    OperationListComponent.prototype.hideOtherSwipeTemplateView = function (currentSwipeView) {
        switch (currentSwipeView) {
            case "left":
                if (this.rightItem.getActualSize().width !== 0) {
                    tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.rightItem.parent, this.rightItem, this.mainView.getMeasuredWidth(), 0, this.mainView.getMeasuredWidth(), 0);
                }
                break;
            case "right":
                if (this.leftItem.getActualSize().width !== 0) {
                    tns_core_modules_ui_page__WEBPACK_IMPORTED_MODULE_5__["View"].layoutChild(this.leftItem.parent, this.leftItem, 0, 0, 0, 0);
                }
                break;
            default:
                break;
        }
    };
    OperationListComponent.prototype.onDarkButtonTap = function () {
        _nativescript_theme__WEBPACK_IMPORTED_MODULE_7___default.a.toggleMode(); // to toggle between the modes
    };
    OperationListComponent.prototype.getFeedbackForOperation = function (uuid) {
        var result = this._feedbackService.getFeedbackForOperationUUID(uuid);
        if (result != null) {
            return this.getIconForFeedbackState(result['state']);
        }
        else {
            return null;
        }
    };
    OperationListComponent.prototype.getIconForFeedbackState = function (state) {
        var icon = "";
        switch (state) {
            case 1:
                icon = String.fromCharCode(0xf058);
                break;
            case 2:
                icon = String.fromCharCode(0xf057);
                break;
            default:
                icon = null;
                break;
        }
        return icon;
    };
    OperationListComponent.ctorParameters = function () { return [
        { type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"] },
        { type: _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"] },
        { type: _services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"] }
    ]; };
    __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewChild"])('listview', { static: false }),
        __metadata("design:type", nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_4__["RadListViewComponent"])
    ], OperationListComponent.prototype, "radListView", void 0);
    OperationListComponent = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({
            selector: "OperationsList",
            template: __webpack_require__("./app/operations/operation-list.component.html"),
            styles: [__webpack_require__("./app/operations/operation-list.component.scss")]
        }),
        __metadata("design:paramtypes", [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"],
            _shared_operation_service__WEBPACK_IMPORTED_MODULE_3__["OperationService"],
            _services_feedback_service__WEBPACK_IMPORTED_MODULE_8__["FeedbackService"]])
    ], OperationListComponent);
    return OperationListComponent;
}());



/***/ }),

/***/ "./app/operations/operation.module.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationsModule", function() { return OperationsModule; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/common.js");
/* harmony import */ var nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/@nativescript/angular/forms/index.js");
/* harmony import */ var nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/nativescript-ui-listview/angular/listview-directives.js");
/* harmony import */ var nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("./app/operations/operation-detail/operation-detail.component.ts");
/* harmony import */ var _operation_list_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("./app/operations/operation-list.component.ts");
/* harmony import */ var _operations_routing_module__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./app/operations/operations-routing.module.ts");
/* harmony import */ var _settings_settings_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("./app/settings/settings.component.ts");








var OperationsModule = /** @class */ (function () {
    function OperationsModule() {
    }
    OperationsModule = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({
            imports: [
                _operations_routing_module__WEBPACK_IMPORTED_MODULE_6__["OperationsRoutingModule"],
                nativescript_angular_common__WEBPACK_IMPORTED_MODULE_1__["NativeScriptCommonModule"],
                nativescript_angular_forms__WEBPACK_IMPORTED_MODULE_2__["NativeScriptFormsModule"],
                nativescript_ui_listview_angular__WEBPACK_IMPORTED_MODULE_3__["NativeScriptUIListViewModule"]
            ],
            declarations: [
                _operation_list_component__WEBPACK_IMPORTED_MODULE_5__["OperationListComponent"],
                _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_4__["OperationDetailComponent"],
                _settings_settings_component__WEBPACK_IMPORTED_MODULE_7__["SettingsComponent"]
            ],
            entryComponents: [],
            providers: [],
            schemas: [
                _angular_core__WEBPACK_IMPORTED_MODULE_0__["NO_ERRORS_SCHEMA"]
            ]
        })
    ], OperationsModule);
    return OperationsModule;
}());



/***/ }),

/***/ "./app/operations/operations-routing.module.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationsRoutingModule", function() { return OperationsRoutingModule; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./app/operations/operation-detail/operation-detail.component.ts");
/* harmony import */ var _operation_list_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("./app/operations/operation-list.component.ts");




var routes = [
    { path: "", component: _operation_list_component__WEBPACK_IMPORTED_MODULE_3__["OperationListComponent"] },
    { path: "operation-detail/:id", component: _operation_detail_operation_detail_component__WEBPACK_IMPORTED_MODULE_2__["OperationDetailComponent"] },
];
var OperationsRoutingModule = /** @class */ (function () {
    function OperationsRoutingModule() {
    }
    OperationsRoutingModule = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({
            imports: [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["NativeScriptRouterModule"].forChild(routes)],
            exports: [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["NativeScriptRouterModule"]]
        })
    ], OperationsRoutingModule);
    return OperationsRoutingModule;
}());



/***/ }),

/***/ "./app/operations/shared/operation.model.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Operation", function() { return Operation; });
var moment = __webpack_require__("../node_modules/moment/moment.js");
var Operation = /** @class */ (function () {
    function Operation() {
        this._subject = undefined;
        this._message = undefined;
        this._keywordId = undefined;
        this._keywordName = undefined;
        this._keywordRaw = undefined;
        this._zveis = undefined;
        this._alarmdate = undefined;
        this._alarmtime = undefined;
        this._lat = 0;
        this._lon = 0;
    }
    Operation.prototype.fillOperationFCM = function (payload) {
        Object.keys(payload).forEach(function (key) {
            this[key] = payload[key];
        }.bind(this));
        this.id = Math.random();
        this.assignIcon();
        this._incomingTimeStamp = moment().format();
    };
    Operation.prototype.fillOperationFCMWithOptions = function (payload, options) {
        var _this = this;
        Object.keys(payload).forEach(function (key) {
            _this[key] = payload[key];
        });
        this.id = Math.random();
        this.assignIcon();
        this._incomingTimeStamp = moment().format();
        Object.keys(options).forEach(function (key) {
            _this[key] = options[key];
        });
    };
    Operation.prototype.assignIcon = function () {
        var icon;
        switch (true) {
            case /Straße reinigen.*/.test(this._keywordName.value):
                icon = 0xf51a; // broom
                break;
            case /Abfall.*/.test(this._keywordName.value):
                icon = 0xf794; // dumpster-fire
                break;
            case /^Baum.*/.test(this._keywordName.value):
                icon = 0xf1bb; // tree
                break;
            case /Tier.*/.test(this._keywordCategory.value):
                icon = 0xf6be; // cat
                break;
            case /VU.*/.test(this._keywordCategory.value):
                icon = 0xf5e1; // car_crash
                break;
            case /^RD.*/.test(this._keywordCategory.value):
            case /^RD.*/.test(this._subject.value):
            case /FIRST RESPONDER.*/.test(this._subject.value):
                icon = 0xf0f9; // ambulance
                break;
            case /HUBSCHRAUBERLANDUNG.*/.test(this._subject.value):
                icon = 0xf533; // helicopter
                break;
            case /UNWETTER.*/.test(this._subject.value):
                icon = 0xf740; // cloud-showers-heavy
                break;
            case /^ABC ÖL.*/.test(this._subject.value):
            case /^ABC KRAFTSTOFF.*/.test(this._subject.value):
                icon = 0xf613; // oil-can
                break;
            case /^B BMA.*/.test(this._subject.value):
            case /^ABC GEFAHRSTOFFMELDEANLAGE.*/.test(this._subject.value):
                icon = 0xf566; // digital-tachograph
                break;
            case /^THL P EINGESCHLOSSEN.*/.test(this._subject.value):
                icon = 0xf084; // key
                break;
            case /^THL P.*/.test(this._subject.value):
                icon = 0xf728; // user-injured
                break;
            case /^THL BELEUCHTUNG.*/.test(this._subject.value):
                icon = 0xf0eb; // lightbulb
                break;
            case /^THL BOMBE.*/.test(this._subject.value):
                icon = 0xf1e2; // bomb
                break;
            case /^THL ERKUNDUNG.*/.test(this._subject.value):
                icon = 0xf1e5; // binoculars
                break;
            case /^THL GEBÄUDE.*/.test(this._subject.value):
                icon = 0xf6f1; // house-damage
                break;
            case /^PROBEALARM.*/.test(this._subject.value):
            case /^INF.*/.test(this._subject.value):
                icon = 0xf09e; // rss
                break;
            case /^B.*/.test(this._subject.value):
                icon = 0xf06d; // fire
                break;
            case /^THL.*/.test(this._subject.value):
                icon = 0xf7d9; // tools
                break;
            case /^ABC.*/.test(this._subject.value):
                icon = 0xf714; // skull-crossbones
                break;
            default:
                icon = 0xf0f3; // bell
                break;
        }
        this._icon = String.fromCharCode(icon);
    };
    return Operation;
}());



/***/ }),

/***/ "./app/operations/shared/operation.service.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OperationService", function() { return OperationService; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/@nativescript/angular/router/index.js");
/* harmony import */ var nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _operation_model__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./app/operations/shared/operation.model.ts");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/nativescript-plugin-firebase/firebase.js");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/rxjs/_esm5/index.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/@nativescript/core/application-settings/application-settings.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../node_modules/@nativescript/core/platform/platform.js");
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__);
/* harmony import */ var nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/nativescript-local-notifications/local-notifications.js");
/* harmony import */ var nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__);

// TODO: should be imported from kinvey-nativescript-sdk/angular but declaration file is currently missing







var OperationService = /** @class */ (function () {
    function OperationService(_routerExtensions, ngZone) {
        this._routerExtensions = _routerExtensions;
        this.ngZone = ngZone;
        this._behaviorSubjectOperations = new rxjs__WEBPACK_IMPORTED_MODULE_4__["BehaviorSubject"]([]);
        nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__["LocalNotifications"].hasPermission();
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getBoolean"]("settingAlertWhileMuted") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setBoolean"]("settingAlertWhileMuted", false);
        }
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getNumber"]("settingAlertDurationInSec") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setNumber"]("settingAlertDurationInSec", 1);
        }
        // For initial Loading
        this._behaviorSubjectOperations.next(this.getOperationsFromAppSettings());
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__["isIOS"]) {
            // Entrypoint when message is received for iOS
            nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__["addOnMessageReceivedCallback"](function (message) {
                var _this = this;
                // Extract message data
                var messageType = message.data["messageType"];
                // Start new alarm routine
                this.ngZone.run(function () {
                    if (messageType == "alarm") {
                        _this.incomingAlarm(message);
                    }
                });
            }.bind(this));
        }
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_6__["isAndroid"]) {
            // Entrypoint when notification is tapped for Android
            nativescript_local_notifications__WEBPACK_IMPORTED_MODULE_7__["LocalNotifications"].addOnMessageReceivedCallback(function (notification) {
                var _this = this;
                this.ngZone.run(function () {
                    var operationStore = [];
                    operationStore = _this.getOperationsFromAppSettings();
                    _this._behaviorSubjectOperations.next(operationStore);
                    // Redirect to operation details view
                    _this.redirectToOperationDetails(notification.id);
                });
            }.bind(this));
            // Entrypoint when message is received with app in foreground for Android
            nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_3__["addOnMessageReceivedCallback"](function (message) {
                var _this = this;
                // Extract message data
                var messageType = message.data["messageType"];
                //var messagePayload = JSON.parse(message);
                if (message.foreground == true) {
                    // Start new alarm routine
                    this.ngZone.run(function () {
                        if (messageType == "alarm") {
                            var operationStore = [];
                            operationStore = _this.getOperationsFromAppSettings();
                            _this._behaviorSubjectOperations.next(operationStore);
                            _this.redirectToOperationDetails(operationStore[operationStore.length - 1].id);
                        }
                    });
                }
            }.bind(this));
        }
    }
    // Returns all operations as observable
    OperationService.prototype.getAllOp = function () {
        return this._behaviorSubjectOperations.asObservable();
    };
    // Returns operation for specific id
    OperationService.prototype.getOperationById = function (id) {
        if (!id) {
            return;
        }
        return this.getOperationsFromAppSettings().filter(function (operation) {
            return operation.id === id;
        })[0];
    };
    // Checks for a given uuid value whether it already exists or not
    OperationService.prototype.checkIfOperationAlreadyExists = function (uuid) {
        if (!uuid) {
            return false;
        }
        var operations = this.getOperationsFromAppSettings().filter(function (operation) {
            if (operation._uuid != undefined) {
                if (operation._uuid.value != undefined) {
                    return operation._uuid.value === uuid;
                }
                else {
                    return false;
                }
            }
            else {
                return false;
            }
        });
        if (operations.length > 0) {
            return true;
        }
        else {
            return false;
        }
    };
    // Clears operation list
    OperationService.prototype.clearOperations = function () {
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify([]));
        this._behaviorSubjectOperations.next(null);
    };
    // Open specific operation for details view
    OperationService.prototype.redirectToOperationDetails = function (id) {
        if (this._routerExtensions !== null) {
            this._routerExtensions.navigate(["/operations/operation-detail", id], {
                animated: true,
                transition: {
                    name: "slide",
                    duration: 200,
                    curve: "ease"
                }
            });
        }
    };
    // Handles incoming alarm
    OperationService.prototype.incomingAlarm = function (_messagePayload) {
        var operation = new _operation_model__WEBPACK_IMPORTED_MODULE_2__["Operation"]();
        var payload = JSON.parse(_messagePayload.data["payload"]);
        var options = {};
        var feedback = _messagePayload.data["feedback"];
        var serverUUID = _messagePayload.data["serverUUID"];
        if (feedback != undefined) {
            options['_feedback'] = feedback;
        }
        if (serverUUID != undefined) {
            options['_serverUUID'] = serverUUID;
        }
        var keys = Object.keys(options);
        if (keys.length == 0) {
            operation.fillOperationFCM(payload.operation);
        }
        else {
            operation.fillOperationFCMWithOptions(payload.operation, options);
        }
        if (operation._uuid != undefined) {
            var opExists = this.checkIfOperationAlreadyExists(operation._uuid.value);
            if (!opExists) {
                console.log("NEUER EINSATZ");
                // Refresh operation list 
                this._behaviorSubjectOperations.next(this.persistOperation(operation));
                // Redirect to operation details view
                this.redirectToOperationDetails(operation.id);
                return;
            }
            else {
                console.log("EINSATZ EXISTIERT BEREITS");
                return;
            }
        }
        else {
            console.log("LEGACY SUPPORT");
            // Refresh operation list 
            this._behaviorSubjectOperations.next(this.persistOperation(operation));
            // Redirect to operation details view
            this.redirectToOperationDetails(operation.id);
        }
    };
    OperationService.prototype.persistOperation = function (operation) {
        var operationStore = [];
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations") !== undefined) {
            operationStore = JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations"));
        }
        operationStore.push(operation);
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify(operationStore));
        return operationStore;
    };
    OperationService.prototype.getOperationsFromAppSettings = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify([]));
        }
        return JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("allOperations"));
    };
    OperationService.prototype.deleteOperationForUUID = function (uuid) {
        console.log("DELETING OP with uuid: " + uuid);
        var resultFlag = false;
        var operationStore = this.getOperationsFromAppSettings().filter(function (operation) {
            if (operation._uuid == undefined) {
                return true;
            }
            var flag = operation._uuid.value !== uuid;
            if (!flag) {
                //    console.log("UUID FOUND");
                resultFlag = true;
                // Delete feedback as well
                var feedbackStore = JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["getString"]("operationFeedbackStore", JSON.stringify({})));
                delete feedbackStore[uuid];
                tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("operationFeedbackStore", JSON.stringify(feedbackStore));
            }
            return flag;
        });
        if (resultFlag) {
            if (operationStore.length != 0) {
                tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_5__["setString"]("allOperations", JSON.stringify(operationStore));
                this._behaviorSubjectOperations.next(operationStore);
            }
            else {
                this.clearOperations();
            }
        }
        return resultFlag;
    };
    OperationService.ctorParameters = function () { return [
        { type: nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"] },
        { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] }
    ]; };
    OperationService = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({
            providedIn: "root"
        }),
        __metadata("design:paramtypes", [nativescript_angular_router__WEBPACK_IMPORTED_MODULE_1__["RouterExtensions"], _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"]])
    ], OperationService);
    return OperationService;
}());



/***/ }),

/***/ "./app/services/feedback.service.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FeedbackService", function() { return FeedbackService; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_https__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/nativescript-https/https.js");
/* harmony import */ var nativescript_https__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_https__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _libary_helper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("./app/libary/helper.ts");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/nativescript-feedback/feedback.js");
/* harmony import */ var nativescript_feedback__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(nativescript_feedback__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/@nativescript/core/application-settings/application-settings.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__);





var FeedbackService = /** @class */ (function () {
    function FeedbackService() {
        this._helper = new _libary_helper__WEBPACK_IMPORTED_MODULE_2__["Helper"]();
        this._feedback = new nativescript_feedback__WEBPACK_IMPORTED_MODULE_3__["Feedback"]();
        this._operationFeedback = this.getFeedbackStore();
    }
    /**
       * Set feeback for specific operation method
       * @param {string} serveradress
       * @param {string} username
       * @param {string} password
       * @param {string} operationUUID
       * @param {string} basedataUUID
       * @param {number} state
       */
    FeedbackService.prototype.setFeedback = function (serveradress, username, passwordhash, operationUUID, basedataUUID, state) {
        var _this = this;
        var url = serveradress + "/feedback/set?"
            + "username=" + encodeURI(username)
            + "&passwordhash=" + encodeURI(passwordhash)
            + "&operationUUID=" + encodeURI(operationUUID)
            + "&basedataUUID=" + encodeURI(basedataUUID)
            + "&state=" + state;
        console.log(url);
        return nativescript_https__WEBPACK_IMPORTED_MODULE_1__["request"]({
            url: serveradress + "/feedback/set?"
                + "username=" + encodeURI(username)
                + "&passwordhash=" + encodeURI(passwordhash)
                + "&operationUUID=" + encodeURI(operationUUID)
                + "&basedataUUID=" + encodeURI(basedataUUID)
                + "&state=" + state,
            method: "GET"
        }).then(function (response) {
            // Argument (response) is HttpResponse
            console.log(response);
            var responseContent = _this._helper.prepareResponse(response['content']);
            if (responseContent['success'] == 1) {
                if (state == 1) {
                    _this._feedback.success({
                        title: "Erfolgreich",
                        message: "Rückmeldung 'Komme' gesendet"
                    });
                }
                else {
                    if (state == 2) {
                        _this._feedback.success({
                            title: "Erfolgreich",
                            message: "Rückmeldung 'Komme nicht' gesendet"
                        });
                    }
                }
                return true;
            }
            else {
                throw "ERROR: " + responseContent['description'];
            }
        }, function (e) {
            console.log(e);
            _this._feedback.error({
                title: "Fehler",
                message: e.toString()
            });
            throw e;
        });
    };
    FeedbackService.prototype.getFeedbackStore = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["getString"]("operationFeedbackStore") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["setString"]("operationFeedbackStore", JSON.stringify({}));
        }
        return JSON.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["getString"]("operationFeedbackStore"));
    };
    FeedbackService.prototype.createFeedbackObjectForOperation = function (timeStamp, state) {
        var feedback = {};
        feedback['timeStamp'] = timeStamp;
        feedback['state'] = state;
        return feedback;
    };
    FeedbackService.prototype.getFeedbackForOperationUUID = function (operationUUID) {
        var feedbackStore = this.getFeedbackStore();
        return feedbackStore[operationUUID] != undefined ? feedbackStore[operationUUID] : null;
    };
    FeedbackService.prototype.persistFeedback = function (operationUUID, timeStamp, state) {
        var feedbackStore = this.getFeedbackStore();
        feedbackStore[operationUUID] = this.createFeedbackObjectForOperation(timeStamp, state);
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["setString"]("operationFeedbackStore", JSON.stringify(feedbackStore));
    };
    FeedbackService.prototype.deleteFeedbackFromStore = function (operationUUID) {
        var feedbackStore = this.getFeedbackStore();
        delete feedbackStore[operationUUID];
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_4__["setString"]("operationFeedbackStore", JSON.stringify(feedbackStore));
    };
    FeedbackService = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])({
            providedIn: 'root'
        }),
        __metadata("design:paramtypes", [])
    ], FeedbackService);
    return FeedbackService;
}());



/***/ }),

/***/ "./app/settings/settings.component.html":
/***/ (function(module, exports) {

module.exports = "<StackLayout>\n    \n    <Label class=\"settingsHeaderLabel p-10\" text=\"Toneinstellungen\" textAlignment=\"center\"></Label>\n    <StackLayout class=\"hr m-10\"></StackLayout>\n\n    <GridLayout *ngIf=\"isAndroid\" columns=\"*, auto\" rows=\"*\" class=\"p-10\">\n        <Label  row=\"0\" col=\"0\" text=\"Lautlos bei Alarm aufheben\" class=\"settingsLabel\" verticalAlignment=\"center\"></Label>\n        <Switch row=\"0\" col=\"1\" [checked]=\"alertWhileMuted\" (checkedChange)=\"onCheckedAlertWhileMutedChange($event)\"></Switch>\n    </GridLayout>\n    <GridLayout *ngIf=\"isAndroid\" columns=\"*, auto\" rows=\"auto,auto,auto\" class=\"p-10\">\n        <Label row=\"0\" col=\"0\" text=\"Alarmierungsdauer\" class=\"settingsLabel\"></Label>\n        <Label row=\"0\" col=\"1\" [text]=\"alertDurationInSec + ' s'\" class=\"settingsLabel\"></Label>\n        <Slider row=\"1\" col=\"0\" colspan=\"2\" [value]=\"alertDurationInSec\" minValue=\"1\" maxValue=\"10\" (valueChange)=\"onSliderValueChange($event)\"></Slider>\n    </GridLayout>\n    <GridLayout *ngIf=\"isAndroid\" columns=\"*, *\" rows=\"*,*\" class=\"p-10\">\n        <Label row=\"0\" col=\"0\" text=\"Alarmierungston\" class=\"settingsLabel\"></Label>\n        <Label row=\"0\" col=\"1\" [text]=\"androidRingtoneTitle\" class=\"settingsLabel\" textWrap=\"true\" textAlignment=\"right\"></Label>\n        <Button row=\"1\" col=\"0\" colspan=\"2\" (tap)=\"onTapOpenRingTone($event)\" class=\"settingsButton\" text=\"Alarmierungston ändern\"></Button>\n    </GridLayout>\n    \n    <Label *ngIf=\"isIOS\" text=\"Lautlos durchbrechen\" class=\"settingsLabel p-10\"></Label>\n    <Switch *ngIf=\"isIOS\" [checked]=\"criticalAlert\" (checkedChange)=\"onCheckedCriticalAlertChange($event)\" class=\"settingsSwitch m-r-10\"></Switch>\n    \n    <StackLayout class=\"hr m-10\"></StackLayout>\n    \n    <GridLayout *ngIf=\"isIOS\" columns=\"auto, *\" rows=\"*\" class=\"p-10\">\n        <Label row=\"0\" col=\"0\" text=\"Alarmierungston\" class=\"settingsLabel p-r-10\" verticalAlignment=\"center\"></Label>\n        <!--<Button row=\"0\" col=\"1\" (tap)=\"onTapOpenRingToneIOS($event)\" class=\"settingsButton\" text=\"Alarmierungston ändern\"></Button>-->\n        <!--<ListPicker row=\"0\" col=\"1\" [items]=\"_iOSRingtones\" [selectedIndex]=\"iOSSelectedRingtone\" (selectedIndexChange)=\"onSelectedRingToneIOSChanged($event)\"></ListPicker> -->\n        <Button row=\"0\" col=\"1\" (tap)=\"onTapOpenIOSRingetoneManager($event)\" class=\"settingsButton\" text=\"Alarmierungston ändern\"></Button>\n    </GridLayout>\n\n    <StackLayout *ngIf=\"isIOS\" class=\"hr m-10\"></StackLayout>\n\n    <GridLayout columns=\"*, auto\" rows=\"auto,auto,auto\" class=\"p-10\">\n        <Label row=\"0\" col=\"0\" text=\"Lautstärke\" class=\"settingsLabel\"></Label>\n        <Label row=\"0\" col=\"1\" [text]=\"alertVolume * 10 + ' %'\" class=\"settingsLabel\"></Label>\n        <Slider row=\"1\" col=\"0\" colspan=\"2\" [value]=\"alertVolume\" minValue=\"0\" maxValue=\"10\" (valueChange)=\"onVolumeSliderValueChange($event)\"></Slider>\n    </GridLayout>\n    <Button *ngIf=\"isIOS\" text=\"Ton testen\" class=\"settingsButton\" (tap)=\"onTapTestAudio($event)\"></Button>\n\n    <StackLayout class=\"hr m-10\"></StackLayout>\n    <GridLayout *ngIf=\"isAndroid\" columns=\"*, auto\" rows=\"*,*\" class=\"p-10\">\n        <Label  row=\"0\" col=\"0\" colspan = \"2\" text=\"Hinweis: Diese Funktion ist nur verfügbar, falls 'Lautlos bei Alarm aufheben' aktiv ist. Die Nachricht wird nach dem Ton in der Medienlautstärke vorgelesen!\" class=\"settingsLabel\" verticalAlignment=\"center\" textWrap=\"true\"></Label>\n        <Label  row=\"1\" col=\"0\" text=\"Alarmstichwort vorlesen\" class=\"settingsLabel\" verticalAlignment=\"center\"></Label>\n        <Switch row=\"1\" col=\"1\" [checked]=\"alarmTextToSpeech\" (checkedChange)=\"onCheckedAlarmTextToSpeechChange($event)\"></Switch>\n    </GridLayout>\n\n    <Label *ngIf=\"isIOS\" text=\"Hinweis: Diese Funktion ist nur verfügbar, falls 'Lautlos durchbrechen' aktiv ist.\" class=\"settingsLabel\" verticalAlignment=\"center\" textWrap=\"true\"></Label>\n    <Label *ngIf=\"isIOS\" text=\"Alarmstichwort vorlesen\" class=\"settingsLabel p-10\"></Label>\n    <Switch *ngIf=\"isIOS\" [checked]=\"alarmTextToSpeech\" (checkedChange)=\"onCheckedAlarmTextToSpeechChange($event)\" class=\"settingsSwitch m-r-10\"></Switch>\n    <StackLayout class=\"hr m-10\"></StackLayout>\n\n    <Label class=\"p-10 settingsHeaderLabel\" text=\"Geräteinformation\" textAlignment=\"center\"></Label>\n    <GridLayout class=\"p-10 deviceSettings\" columns=\"*, auto\" rows=\"auto, auto, auto, auto, auto, *, auto\"> \n        <label row=\"0\" col=\"0\" text=\"Hersteller\"></label>\n        <label row=\"0\" col=\"1\" [text]=\"deviceManufacturer\" textAlignment=\"right\"></label>\n        <label row=\"1\" col=\"0\" text=\"Modell\"></label>\n        <label row=\"1\" col=\"1\" [text]=\"deviceModel\" textAlignment=\"right\"></label>\n        <label row=\"2\" col=\"0\" text=\"Plattform\"></label>\n        <label row=\"2\" col=\"1\" [text]=\"deviceOS\" textAlignment=\"right\"></label>\n        <label row=\"3\" col=\"0\" text=\"Plattformversion\"></label>\n        <label row=\"3\" col=\"1\" [text]=\"deviceOSVersion\" textAlignment=\"right\"></label>\n        <label row=\"4\" col=\"0\" text=\"Geräteklasse\"></label>\n        <label row=\"4\" col=\"1\" [text]=\"deviceType\" textAlignment=\"right\"></label>\n        <label row=\"5\" col=\"0\" text=\"Geräte-UUID\"></label>\n        <label row=\"5\" col=\"1\" [text]=\"deviceUuid\" textWrap=\"true\" textAlignment=\"right\"></label>\n        <label row=\"6\" col=\"0\" text=\"Geräte-Name\"></label>\n        <label row=\"6\" col=\"1\" [text]=\"deviceName\" textWrap=\"true\" textAlignment=\"right\"></label>\n    </GridLayout>\n\n    <StackLayout class=\"hr m-10\"></StackLayout>\n\n    <Label class=\"p-10 settingsHeaderLabel\" text=\"Sonstige Funktionen\" textAlignment=\"center\"></Label>\n    <Button text=\"Einsatzliste leeren\" class=\"settingsButton\" (tap)=\"onTapToClearOps($event)\"></Button>\n\n    <Label class=\"settingsLabel p-10\" text=\"Token dieses Gerätes:\" textAlignment=\"center\"></Label>\n    <TextView [text]=fcm_token editable=\"false\"></TextView>\n    <Button (tap)=\"onTapToShareFCMKey($event)\" class=\"settingsButton\" text=\"Token versenden\"></Button>\n\n    <StackLayout class=\"hr m-10\"></StackLayout>\n    <Label class=\"p-10 settingsHeaderLabel\" text=\"App Infos\" textAlignment=\"center\"></Label>\n    <GridLayout class=\"p-10 appSettings\" columns=\"*, auto\" rows=\"*,*\"> \n        <label row=\"0\" col=\"0\" text=\"App Name\"></label>\n        <label row=\"0\" col=\"1\" [text]=\"appName\" textAlignment=\"right\"></label>\n        <label row=\"1\" col=\"0\" text=\"App Version\"></label>\n        <label row=\"1\" col=\"1\" [text]=\"appVersion\" textAlignment=\"right\"></label>\n    </GridLayout>\n</StackLayout>"

/***/ }),

/***/ "./app/settings/settings.component.scss":
/***/ (function(module, exports) {

module.exports = "/* Add mobile styles for the component here.  */\n.settingsHeaderLabel {\n  font-size: 18; }\n\n.settingsLabel {\n  font-size: 15; }\n\n.settingsButton {\n  android-elevation: 4;\n  background-color: #ff3d00;\n  border-color: #c30000;\n  border-radius: 4;\n  border-width: 1;\n  color: whitesmoke;\n  font-size: 15;\n  font-weight: bold; }\n\n.settingsButton:active {\n  android-elevation: 8;\n  background-color: #c30000;\n  border-color: #ff3d00;\n  border-radius: 4;\n  border-width: 1;\n  color: whitesmoke;\n  font-size: 15;\n  font-weight: bold; }\n\n.cancelButton {\n  android-elevation: 4;\n  background-color: #c9c9c9;\n  border-color: #000000;\n  border-radius: 4;\n  border-width: 1;\n  color: whitesmoke;\n  font-size: 15;\n  font-weight: bold; }\n\n.cancelButton:active {\n  android-elevation: 8;\n  background-color: #000000;\n  border-color: #c9c9c9;\n  border-radius: 4;\n  border-width: 1;\n  color: whitesmoke;\n  font-size: 15;\n  font-weight: bold; }\n"

/***/ }),

/***/ "./app/settings/settings.component.ts":
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SettingsComponent", function() { return SettingsComponent; });
/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../node_modules/@angular/core/fesm5/core.js");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../node_modules/nativescript-plugin-firebase/firebase.js");
/* harmony import */ var nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var nativescript_social_share__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../node_modules/nativescript-social-share/social-share.js");
/* harmony import */ var nativescript_social_share__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(nativescript_social_share__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../node_modules/@nativescript/core/application-settings/application-settings.js");
/* harmony import */ var tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../node_modules/@nativescript/core/application/application.js");
/* harmony import */ var tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../node_modules/@nativescript/core/platform/platform.js");
/* harmony import */ var tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _operations_shared_operation_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("./app/operations/shared/operation.service.ts");
/* harmony import */ var nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../node_modules/nativescript-dna-deviceinfo/deviceinfo.js");
/* harmony import */ var nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__);
/* harmony import */ var tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("../node_modules/@nativescript/core/ui/dialogs/dialogs.js");
/* harmony import */ var tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8__);
/* harmony import */ var nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("../node_modules/nativescript-audio-player/audio.js");
/* harmony import */ var nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9__);
/* harmony import */ var nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("../node_modules/@nativescript/angular/modal-dialog.js");
/* harmony import */ var nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__);
/* harmony import */ var _modal_ringtone_modal_ringtone_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("./app/settings/modal-ringtone/modal-ringtone.component.ts");









// Audio player for testing sound settings



var SettingsComponent = /** @class */ (function () {
    function SettingsComponent(_operationService, ngZone, _modalService, _vcRef) {
        this._operationService = _operationService;
        this.ngZone = ngZone;
        this._modalService = _modalService;
        this._vcRef = _vcRef;
        this._iOSRingtones = ["default", "bbaabbaa.wav"];
    }
    SettingsComponent.prototype.ngOnInit = function () {
        var _this = this;
        this._alertWhileMuted = this.getAlertWhileMuted();
        this._criticalAlert = this.getCriticalAlert();
        this._iOSSelectedRingtone = this.getiOSSelectedRingtoneIndex();
        this._alertDurationInSec = this.getAlertDurationInSec();
        this._alertVolume = this.getAlertVolume();
        this._androidRingtoneURI = this.getAndroidRingtoneURI();
        this._alarmTextToSpeech = this.getAlarmTextToSpeech();
        // Get FCM Token
        nativescript_plugin_firebase__WEBPACK_IMPORTED_MODULE_1__["getCurrentPushToken"]().then(function (token) {
            // may be null if not known yet
            console.log("Current push token: " + token);
            _this._fcmtoken = token;
        });
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"]) {
            tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].on(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["AndroidApplication"].activityResultEvent, function (args) {
                var _this = this;
                if (args.requestCode == 111) {
                    // RingtonePicker
                    // console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", requestCode: " + args.requestCode + ", resultCode: " + args.resultCode + ", Intent: " + args.intent);
                    var intentResult = args.intent;
                    if (intentResult != null) {
                        var ringtone_URI = intentResult.getParcelableExtra(android.media.RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                        if (ringtone_URI != null) {
                            this.ngZone.run(function () {
                                tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("androidRingTone", ringtone_URI.toString());
                                _this.getAndroidRingtoneURI();
                            });
                        }
                    }
                }
            }.bind(this));
        }
    };
    Object.defineProperty(SettingsComponent.prototype, "fcm_token", {
        get: function () {
            return this._fcmtoken;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "alertWhileMuted", {
        get: function () {
            return this._alertWhileMuted;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "criticalAlert", {
        get: function () {
            return this._criticalAlert;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "alertDurationInSec", {
        get: function () {
            return this._alertDurationInSec;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "alertVolume", {
        get: function () {
            return Math.round(this._alertVolume);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "alarmTextToSpeech", {
        get: function () {
            return this._alarmTextToSpeech;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "androidRingtoneURI", {
        get: function () {
            return this._androidRingtoneURI;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "androidRingtoneTitle", {
        get: function () {
            return this._androidRingtoneTitle;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "iOSSelectedRingtone", {
        get: function () {
            return this._iOSSelectedRingtone;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "androidRingToneTitle", {
        set: function (androidRingtoneTitle) {
            this._androidRingtoneTitle = androidRingtoneTitle;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceModel", {
        /**
           * Device-Information getters
           */
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].model;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceManufacturer", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].manufacturer;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceOS", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].os;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceOSVersion", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].osVersion;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceUuid", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].uuid;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceType", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["device"].deviceType;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "deviceName", {
        get: function () {
            return nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__["DeviceInfo"].deviceName();
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "appName", {
        get: function () {
            return nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__["DeviceInfo"].appName();
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "appVersion", {
        get: function () {
            return nativescript_dna_deviceinfo__WEBPACK_IMPORTED_MODULE_7__["DeviceInfo"].appVersion();
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "isAndroid", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"];
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(SettingsComponent.prototype, "isIOS", {
        get: function () {
            return tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"];
        },
        enumerable: true,
        configurable: true
    });
    SettingsComponent.prototype.getAlertWhileMuted = function () {
        return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingAlertWhileMuted");
    };
    SettingsComponent.prototype.getCriticalAlert = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingCriticalAlert") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingCriticalAlert", true);
            if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
                var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
                userDefaults.setBoolForKey(true, "settingCriticalAlert");
            }
        }
        return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingCriticalAlert", true);
    };
    SettingsComponent.prototype.getAlarmTextToSpeech = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingAlarmTextToSpeech") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingAlarmTextToSpeech", false);
            if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
                var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
                userDefaults.setBoolForKey(false, "settingAlarmTextToSpeech");
            }
        }
        return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getBoolean"]("settingAlarmTextToSpeech", false);
    };
    SettingsComponent.prototype.getiOSSelectedRingtoneIndex = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("settingIOSRingtone") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("settingIOSRingtone", "default");
            if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
                var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
                userDefaults.setObjectForKey("default", "iOSRingTone");
            }
        }
        return this._iOSRingtones.indexOf(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("settingIOSRingtone", "default"));
    };
    SettingsComponent.prototype.getAlertDurationInSec = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertDurationInSec") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertDurationInSec", 1);
        }
        return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertDurationInSec");
    };
    SettingsComponent.prototype.getAlertVolume = function () {
        if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertVolume") === undefined) {
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertVolume", 10);
        }
        return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getNumber"]("settingAlertVolume");
    };
    SettingsComponent.prototype.getAndroidRingtoneURI = function () {
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"]) {
            if (tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("androidRingTone") === undefined) {
                var uri = android.media.RingtoneManager.getDefaultUri(android.media.RingtoneManager.TYPE_NOTIFICATION);
                if (uri != null) {
                    tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("androidRingTone", uri.toString());
                }
                else {
                    uri = android.media.RingtoneManager.getDefaultUri(android.media.RingtoneManager.TYPE_ALARM);
                    tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("androidRingTone", uri.toString());
                }
            }
            var ringtone = android.media.RingtoneManager.getRingtone(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].context, android.net.Uri.parse(tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("androidRingTone").toString()));
            var ringtoneTitle = ringtone.getTitle(tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].context);
            this.androidRingToneTitle = ringtoneTitle;
            return tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["getString"]("androidRingTone");
        }
        else {
            return "";
        }
    };
    SettingsComponent.prototype.onCheckedAlertWhileMutedChange = function (slider) {
        this._alertWhileMuted = slider.value;
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingAlertWhileMuted", slider.value);
    };
    SettingsComponent.prototype.onCheckedCriticalAlertChange = function (slider) {
        this._criticalAlert = slider.value;
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingCriticalAlert", slider.value);
        var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
        userDefaults.setBoolForKey(slider.value, "settingCriticalAlert");
    };
    SettingsComponent.prototype.onCheckedAlarmTextToSpeechChange = function (slider) {
        this._alarmTextToSpeech = slider.value;
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setBoolean"]("settingAlarmTextToSpeech", slider.value);
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
            var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
            userDefaults.setBoolForKey(slider.value, "settingAlarmTextToSpeech");
        }
    };
    SettingsComponent.prototype.onTapToShareFCMKey = function (event) {
        nativescript_social_share__WEBPACK_IMPORTED_MODULE_2__["shareText"](this.fcm_token);
    };
    SettingsComponent.prototype.onSliderValueChange = function (slider) {
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertDurationInSec", slider.value);
        this._alertDurationInSec = this.getAlertDurationInSec();
    };
    SettingsComponent.prototype.onTapOpenRingTone = function (event) {
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isAndroid"]) {
            var currentURI = this.getAndroidRingtoneURI();
            //console.log("CurrentURI:" + currentURI);
            var intent = new android.content.Intent(android.media.RingtoneManager.ACTION_RINGTONE_PICKER);
            intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_TITLE, "Wähle Ton für ALARMiator");
            intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
            intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
            intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_TYPE, android.media.RingtoneManager.TYPE_NOTIFICATION);
            intent.putExtra(android.media.RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, android.net.Uri.parse(currentURI));
            tns_core_modules_application__WEBPACK_IMPORTED_MODULE_4__["android"].foregroundActivity.startActivityForResult(intent, 111);
            // TODO: Refresh settings view
        }
    };
    /**
     * plays selectd Soundfile as alarming sound for testing purposes
     * @param event
     */
    SettingsComponent.prototype.onTapTestAudio = function (event) {
        var _this = this;
        if (this._iOSRingtones[this._iOSSelectedRingtone] != 'default') {
            // play selected RingTone
            var ringToneToPlay = this._iOSRingtones[this._iOSSelectedRingtone];
            console.log('Testing Sound Settings with ringtone: ' + ringToneToPlay);
            this._player = new nativescript_audio_player__WEBPACK_IMPORTED_MODULE_9__["TNSPlayer"]();
            this._player.debug = true; // set true to enable TNSPlayer console logs for debugging.
            this._player
                .initFromFile({
                audioFile: '~/../' + ringToneToPlay,
                loop: false,
                completeCallback: this._trackComplete.bind(this),
                errorCallback: this._trackError.bind(this)
            })
                .then(function () {
                _this._player.getAudioTrackDuration().then(function (duration) {
                    // iOS: duration is in seconds
                    // Android: duration is in milliseconds
                    console.log("Dauer des Klingeltons:", duration);
                });
            }).then(function () {
                console.log('Playing with Volume: ' + _this._alertVolume);
                _this._player.volume = (_this._alertVolume / 10);
                _this._player.play();
            });
        }
        else {
            // default selected, not playing anything
            console.log('default selected, not playing anything');
        }
    };
    /**
     * called after selected Soundfile has been played successfully
     * @param args
     */
    SettingsComponent.prototype._trackComplete = function (args) {
        console.log('Referenz zur Player Instanz:', args.player);
        console.log('Konnte Klingelton abgespielt werden:', args.flag);
    };
    /**
     * called if theres been an error playing soundfile
     * @param args
     */
    SettingsComponent.prototype._trackError = function (args) {
        console.log('ERROR: Referenz zur Player Instanz:', args.player);
        console.log('ERROR: Fehlermeldung:', args.error);
        // Android only: extra detail on error
        console.log('ERROR: Mehr Informationen zum Player:', args.extra);
    };
    SettingsComponent.prototype.onTapOpenRingToneIOS = function (event) {
        var actionOptions = {
            title: "Tonauswahl",
            message: "Wähle deinen Ton",
            cancelButtonText: "Abbrechen",
            actions: ["default", "bbaabbaa.wav"],
            cancelable: true // Android only
        };
        Object(tns_core_modules_ui_dialogs__WEBPACK_IMPORTED_MODULE_8__["action"])(actionOptions).then(function (result) {
            console.log('action: ' + result);
            tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("iOSRingTone", result);
            var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
            userDefaults.setObjectForKey(result, "iOSRingTone");
        });
    };
    SettingsComponent.prototype.onSelectedRingToneIOSChanged = function (args) {
        var picker = args.object;
        console.log("" + this._iOSRingtones[picker.selectedIndex]);
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setString"]("settingIOSRingtone", this._iOSRingtones[picker.selectedIndex]);
        this._iOSSelectedRingtone = picker.selectedIndex;
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
            var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
            userDefaults.setObjectForKey(this._iOSRingtones[picker.selectedIndex], "iOSRingTone");
        }
    };
    SettingsComponent.prototype.onVolumeSliderValueChange = function (slider) {
        tns_core_modules_application_settings__WEBPACK_IMPORTED_MODULE_3__["setNumber"]("settingAlertVolume", slider.value);
        this._alertVolume = this.getAlertVolume();
        if (tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"]) {
            var userDefaults = tns_core_modules_platform__WEBPACK_IMPORTED_MODULE_5__["isIOS"] ? NSUserDefaults.alloc().initWithSuiteName('group.de.alarmiator.ios') : undefined;
            userDefaults.setFloatForKey(slider.value, "settingAlertVolume");
        }
    };
    SettingsComponent.prototype.onTapToClearOps = function (args) {
        this._operationService.clearOperations();
    };
    SettingsComponent.prototype.onTapOpenIOSRingetoneManager = function (event) {
        var options = {
            viewContainerRef: this._vcRef,
            context: {},
            fullscreen: true
        };
        this._modalService.showModal(_modal_ringtone_modal_ringtone_component__WEBPACK_IMPORTED_MODULE_11__["ModalRingtoneComponent"], options)
            .then(function (result) {
            if (result != undefined && result != null) {
                console.log("MODAL CLOSED");
                console.log(result);
            }
            else {
                console.log("Modal cancelled");
            }
        });
    };
    SettingsComponent.ctorParameters = function () { return [
        { type: _operations_shared_operation_service__WEBPACK_IMPORTED_MODULE_6__["OperationService"] },
        { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"] },
        { type: nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__["ModalDialogService"] },
        { type: _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"] }
    ]; };
    SettingsComponent = __decorate([
        Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Component"])({
            selector: 'ns-settings',
            template: __webpack_require__("./app/settings/settings.component.html"),
            styles: [__webpack_require__("./app/settings/settings.component.scss")]
        }),
        __metadata("design:paramtypes", [_operations_shared_operation_service__WEBPACK_IMPORTED_MODULE_6__["OperationService"],
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["NgZone"],
            nativescript_angular_modal_dialog__WEBPACK_IMPORTED_MODULE_10__["ModalDialogService"],
            _angular_core__WEBPACK_IMPORTED_MODULE_0__["ViewContainerRef"]])
    ], SettingsComponent);
    return SettingsComponent;
}());



/***/ })

}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUgc3luYyBeXFwuXFwvLiokIiwid2VicGFjazovLy8uL2FwcC9vcGVyYXRpb25zL29wZXJhdGlvbi1kZXRhaWwvb3BlcmF0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tZGV0YWlsL29wZXJhdGlvbi1kZXRhaWwuY29tcG9uZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYXBwL29wZXJhdGlvbnMvb3BlcmF0aW9uLWRldGFpbC9vcGVyYXRpb24tZGV0YWlsLmNvbXBvbmVudC50cyIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tbGlzdC5jb21wb25lbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCJ3ZWJwYWNrOi8vLy4vYXBwL29wZXJhdGlvbnMvb3BlcmF0aW9uLm1vZHVsZS50cyIsIndlYnBhY2s6Ly8vLi9hcHAvb3BlcmF0aW9ucy9vcGVyYXRpb25zLXJvdXRpbmcubW9kdWxlLnRzIiwid2VicGFjazovLy8uL2FwcC9vcGVyYXRpb25zL3NoYXJlZC9vcGVyYXRpb24ubW9kZWwudHMiLCJ3ZWJwYWNrOi8vLy4vYXBwL29wZXJhdGlvbnMvc2hhcmVkL29wZXJhdGlvbi5zZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL2FwcC9zZXJ2aWNlcy9mZWVkYmFjay5zZXJ2aWNlLnRzIiwid2VicGFjazovLy8uL2FwcC9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCIsIndlYnBhY2s6Ly8vLi9hcHAvc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYXBwL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFNLENBQUMsS0FBSyxFQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRUQsMkNBQWUsR0FBZixVQUFnQixJQUF1QjtRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELHdEQUE0QixHQUE1QixVQUE2QixLQUFLO1FBQ2hDLElBQU0sT0FBTyxHQUF1QjtZQUNoQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUM3QixPQUFPLEVBQUUsRUFBRTtZQUNYLFVBQVUsRUFBRSxJQUFJO1NBQ25CLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxnR0FBc0IsRUFBRSxPQUFPLENBQUM7YUFDeEQsSUFBSSxDQUFDLFVBQUMsTUFBYztZQUNuQixJQUFJLE1BQU0sSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7O2dCQWpYOEIscUZBQWdCO2dCQUMzQixvREFBTTtnQkFDQyxxRkFBa0I7Z0JBQ3pCLDhEQUFnQjs7SUFyQnZCLGlCQUFpQjtRQUw3QiwrREFBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGFBQWE7WUFDdkIsdUVBQXdDOztTQUV6QyxDQUFDO3lDQW1CNkIscUZBQWdCO1lBQzNCLG9EQUFNO1lBQ0MscUZBQWtCO1lBQ3pCLDhEQUFnQjtPQXJCdkIsaUJBQWlCLENBb1k3QjtJQUFELHdCQUFDO0NBQUE7QUFwWTZCIiwiZmlsZSI6IjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbWFwID0ge1xuXHRcIi4vYWZcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYWYuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qc1wiLFxuXHRcIi4vYXJcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXItZHpcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXItZHouanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1kei5qc1wiLFxuXHRcIi4vYXIta3dcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXIta3cuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1rdy5qc1wiLFxuXHRcIi4vYXItbHlcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qc1wiLFxuXHRcIi4vYXItbHkuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qc1wiLFxuXHRcIi4vYXItbWFcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItbWEuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1tYS5qc1wiLFxuXHRcIi4vYXItc2FcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItc2EuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qc1wiLFxuXHRcIi4vYXItdG5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qc1wiLFxuXHRcIi4vYXItdG4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci10bi5qc1wiLFxuXHRcIi4vYXIuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci5qc1wiLFxuXHRcIi4vYXpcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qc1wiLFxuXHRcIi4vYXouanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qc1wiLFxuXHRcIi4vYmVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZS5qc1wiLFxuXHRcIi4vYmdcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYmcuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iZy5qc1wiLFxuXHRcIi4vYm1cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qc1wiLFxuXHRcIi4vYm0uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qc1wiLFxuXHRcIi4vYm5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibi5qc1wiLFxuXHRcIi4vYm9cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYm8uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qc1wiLFxuXHRcIi4vYnJcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qc1wiLFxuXHRcIi4vYnIuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ici5qc1wiLFxuXHRcIi4vYnNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vYnMuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9icy5qc1wiLFxuXHRcIi4vY2FcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY2EuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qc1wiLFxuXHRcIi4vY3NcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qc1wiLFxuXHRcIi4vY3MuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jcy5qc1wiLFxuXHRcIi4vY3ZcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3YuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jdi5qc1wiLFxuXHRcIi4vY3lcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vY3kuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qc1wiLFxuXHRcIi4vZGFcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qc1wiLFxuXHRcIi4vZGEuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kYS5qc1wiLFxuXHRcIi4vZGVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZGUtYXRcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qc1wiLFxuXHRcIi4vZGUtYXQuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1hdC5qc1wiLFxuXHRcIi4vZGUtY2hcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUtY2guanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qc1wiLFxuXHRcIi4vZGUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS5qc1wiLFxuXHRcIi4vZHZcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZHYuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kdi5qc1wiLFxuXHRcIi4vZWxcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZWwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qc1wiLFxuXHRcIi4vZW4tYXVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tYXUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1hdS5qc1wiLFxuXHRcIi4vZW4tY2FcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tY2EuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1jYS5qc1wiLFxuXHRcIi4vZW4tZ2JcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qc1wiLFxuXHRcIi4vZW4tZ2IuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qc1wiLFxuXHRcIi4vZW4taWVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pZS5qc1wiLFxuXHRcIi4vZW4taWxcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4taWwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbC5qc1wiLFxuXHRcIi4vZW4taW5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qc1wiLFxuXHRcIi4vZW4taW4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qc1wiLFxuXHRcIi4vZW4tbnpcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qc1wiLFxuXHRcIi4vZW4tbnouanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1uei5qc1wiLFxuXHRcIi4vZW4tc2dcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qc1wiLFxuXHRcIi4vZW4tc2cuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1zZy5qc1wiLFxuXHRcIi4vZW9cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZW8uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qc1wiLFxuXHRcIi4vZXNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qc1wiLFxuXHRcIi4vZXMtZG9cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtZG8uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy1kby5qc1wiLFxuXHRcIi4vZXMtdXNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMtdXMuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qc1wiLFxuXHRcIi4vZXMuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy5qc1wiLFxuXHRcIi4vZXRcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXQuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldC5qc1wiLFxuXHRcIi4vZXVcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qc1wiLFxuXHRcIi4vZXUuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qc1wiLFxuXHRcIi4vZmFcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmEuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mYS5qc1wiLFxuXHRcIi4vZmlcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZmkuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maS5qc1wiLFxuXHRcIi4vZmlsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmlsLmpzXCIsXG5cdFwiLi9maWwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maWwuanNcIixcblx0XCIuL2ZvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZm8uanNcIixcblx0XCIuL2ZyXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2ZyLWNhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2EuanNcIixcblx0XCIuL2ZyLWNoXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanNcIixcblx0XCIuL2ZyLWNoLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanNcIixcblx0XCIuL2ZyLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnIuanNcIixcblx0XCIuL2Z5XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanNcIixcblx0XCIuL2Z5LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnkuanNcIixcblx0XCIuL2dhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanNcIixcblx0XCIuL2dkXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dkLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2QuanNcIixcblx0XCIuL2dsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanNcIixcblx0XCIuL2dsLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2wuanNcIixcblx0XCIuL2dvbS1kZXZhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanNcIixcblx0XCIuL2dvbS1kZXZhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanNcIixcblx0XCIuL2dvbS1sYXRuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2dvbS1sYXRuLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWxhdG4uanNcIixcblx0XCIuL2d1XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2d1LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ3UuanNcIixcblx0XCIuL2hlXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanNcIixcblx0XCIuL2hlLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanNcIixcblx0XCIuL2hpXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hpLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGkuanNcIixcblx0XCIuL2hyXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2hyLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHIuanNcIixcblx0XCIuL2h1XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanNcIixcblx0XCIuL2h1LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanNcIixcblx0XCIuL2h5LWFtXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2h5LWFtLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHktYW0uanNcIixcblx0XCIuL2lkXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lkLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaWQuanNcIixcblx0XCIuL2lzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanNcIixcblx0XCIuL2lzLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanNcIixcblx0XCIuL2l0XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2l0LWNoXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanNcIixcblx0XCIuL2l0LWNoLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQtY2guanNcIixcblx0XCIuL2l0LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXQuanNcIixcblx0XCIuL2phXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanNcIixcblx0XCIuL2phLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanNcIixcblx0XCIuL2p2XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2p2LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvanYuanNcIixcblx0XCIuL2thXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2thLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2EuanNcIixcblx0XCIuL2trXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanNcIixcblx0XCIuL2trLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanNcIixcblx0XCIuL2ttXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2ttLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva20uanNcIixcblx0XCIuL2tuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tuLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva24uanNcIixcblx0XCIuL2tvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanNcIixcblx0XCIuL2tvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanNcIixcblx0XCIuL2t1XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t1LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3UuanNcIixcblx0XCIuL2t5XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2t5LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva3kuanNcIixcblx0XCIuL2xiXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanNcIixcblx0XCIuL2xiLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanNcIixcblx0XCIuL2xvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2xvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanNcIixcblx0XCIuL2x0XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x0LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanNcIixcblx0XCIuL2x2XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanNcIixcblx0XCIuL2x2LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanNcIixcblx0XCIuL21lXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21lLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanNcIixcblx0XCIuL21pXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21pLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanNcIixcblx0XCIuL21rXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanNcIixcblx0XCIuL21rLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanNcIixcblx0XCIuL21sXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21sLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanNcIixcblx0XCIuL21uXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21uLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanNcIixcblx0XCIuL21yXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanNcIixcblx0XCIuL21yLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanNcIixcblx0XCIuL21zXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL21zLW15XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanNcIixcblx0XCIuL21zLW15LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanNcIixcblx0XCIuL21zLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanNcIixcblx0XCIuL210XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanNcIixcblx0XCIuL210LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanNcIixcblx0XCIuL215XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL215LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanNcIixcblx0XCIuL25iXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25iLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanNcIixcblx0XCIuL25lXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanNcIixcblx0XCIuL25lLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanNcIixcblx0XCIuL25sXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25sLWJlXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanNcIixcblx0XCIuL25sLWJlLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanNcIixcblx0XCIuL25sLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanNcIixcblx0XCIuL25uXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanNcIixcblx0XCIuL25uLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanNcIixcblx0XCIuL29jLWxuY1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL29jLWxuYy5qc1wiLFxuXHRcIi4vb2MtbG5jLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzXCIsXG5cdFwiLi9wYS1pblwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzXCIsXG5cdFwiLi9wYS1pbi5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BhLWluLmpzXCIsXG5cdFwiLi9wbFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wbC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzXCIsXG5cdFwiLi9wdFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzXCIsXG5cdFwiLi9wdC1iclwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC1ici5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzXCIsXG5cdFwiLi9wdC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzXCIsXG5cdFwiLi9yb1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9yby5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzXCIsXG5cdFwiLi9ydVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9ydS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3J1LmpzXCIsXG5cdFwiLi9zZFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzXCIsXG5cdFwiLi9zZC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NkLmpzXCIsXG5cdFwiLi9zZVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zZS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzXCIsXG5cdFwiLi9zaVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9zaS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NpLmpzXCIsXG5cdFwiLi9za1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzXCIsXG5cdFwiLi9zay5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NrLmpzXCIsXG5cdFwiLi9zbFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zbC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzXCIsXG5cdFwiLi9zcVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zcS5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzXCIsXG5cdFwiLi9zclwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLmpzXCIsXG5cdFwiLi9zci1jeXJsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qc1wiLFxuXHRcIi4vc3ItY3lybC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanNcIixcblx0XCIuL3NyLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanNcIixcblx0XCIuL3NzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3NzLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanNcIixcblx0XCIuL3N2XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanNcIixcblx0XCIuL3N2LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanNcIixcblx0XCIuL3N3XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3N3LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanNcIixcblx0XCIuL3RhXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RhLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanNcIixcblx0XCIuL3RlXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanNcIixcblx0XCIuL3RlLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanNcIixcblx0XCIuL3RldFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RldC5qc1wiLFxuXHRcIi4vdGV0LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzXCIsXG5cdFwiLi90Z1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90Zy5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RnLmpzXCIsXG5cdFwiLi90aFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzXCIsXG5cdFwiLi90aC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzXCIsXG5cdFwiLi90a1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzXCIsXG5cdFwiLi90ay5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzXCIsXG5cdFwiLi90bC1waFwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bC1waC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzXCIsXG5cdFwiLi90bGhcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanNcIixcblx0XCIuL3RsaC5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsaC5qc1wiLFxuXHRcIi4vdHJcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qc1wiLFxuXHRcIi4vdHIuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qc1wiLFxuXHRcIi4vdHpsXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzXCIsXG5cdFwiLi90emwuanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90emwuanNcIixcblx0XCIuL3R6bVwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS5qc1wiLFxuXHRcIi4vdHptLWxhdG5cIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLWxhdG4uanNcIjogXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qc1wiLFxuXHRcIi4vdHptLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzXCIsXG5cdFwiLi91Zy1jblwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91Zy1jbi5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VnLWNuLmpzXCIsXG5cdFwiLi91a1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91ay5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VrLmpzXCIsXG5cdFwiLi91clwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzXCIsXG5cdFwiLi91ci5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzXCIsXG5cdFwiLi91elwiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzXCIsXG5cdFwiLi91ei1sYXRuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qc1wiLFxuXHRcIi4vdXotbGF0bi5qc1wiOiBcIi4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LWxhdG4uanNcIixcblx0XCIuL3V6LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXouanNcIixcblx0XCIuL3ZpXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanNcIixcblx0XCIuL3ZpLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanNcIixcblx0XCIuL3gtcHNldWRvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3gtcHNldWRvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanNcIixcblx0XCIuL3lvXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3lvLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanNcIixcblx0XCIuL3poLWNuXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanNcIixcblx0XCIuL3poLWNuLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanNcIixcblx0XCIuL3poLWhrXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLWhrLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanNcIixcblx0XCIuL3poLW1vXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanNcIixcblx0XCIuL3poLW1vLmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanNcIixcblx0XCIuL3poLXR3XCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIixcblx0XCIuL3poLXR3LmpzXCI6IFwiLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0dmFyIGlkID0gbWFwW3JlcV07XG5cdGlmKCEoaWQgKyAxKSkgeyAvLyBjaGVjayBmb3IgbnVtYmVyIG9yIHN0cmluZ1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gaWQ7XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZSBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qJFwiOyIsIm1vZHVsZS5leHBvcnRzID0gXCI8QWN0aW9uQmFyPlxcbiAgICA8TmF2aWdhdGlvbkJ1dHRvbiBhbmRyb2lkLnN5c3RlbUljb249XFxcImljX21lbnVfYmFja1xcXCIgKHRhcCk9XFxcIm9uQmFja0J1dHRvblRhcCgpXFxcIj5cXG4gICAgPC9OYXZpZ2F0aW9uQnV0dG9uPlxcbiA8IS0tICAgPExhYmVsIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9zdWJqZWN0LnZhbHVlICsgJyAtICcrIG9wZXJhdGlvbi5fa2V5d29yZE5hbWUudmFsdWVcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+IC0tPlxcbiAgICA8TGFiZWwgW3RleHRdPVxcXCJvcGVyYXRpb24uX2FsYXJtZGF0ZS52YWx1ZSArICcgJyArIG9wZXJhdGlvbi5fYWxhcm10aW1lLnZhbHVlXFxcIiBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgXFxuICAgICBcXG4gICAgPEFjdGlvbkl0ZW0gaW9zLnBvc2l0aW9uPVxcXCJyaWdodFxcXCIgYW5kcm9pZC5wb3NpdGlvbj1cXFwicmlnaHRcXFwiICh0YXApPVxcXCJvbkRpcmVjdGlvbnNCdXR0b25UYXAoKVxcXCI+XFxuICAgICAgICA8TGFiZWwgY2xhc3M9XFxcImZhcyB0LTIwXFxcIiB0ZXh0PVxcXCImI3hmNGQ3O1xcXCI+PC9MYWJlbD4gXFxuICAgIDwvQWN0aW9uSXRlbT5cXG48L0FjdGlvbkJhcj5cXG48R3JpZExheW91dD5cXG4gICAgICAgIDxCb3R0b21OYXZpZ2F0aW9uIHNlbGVjdGVkSW5kZXg9XFxcIjBcXFwiPlxcblxcbiAgICAgICAgICAgIDwhLS0gVGhlIGJvdHRvbSB0YWIgVUkgaXMgY3JlYXRlZCB2aWEgVGFiU3RyaXAgKHRoZSBjb250YWluaWVyKSBhbmQgVGFiU3RyaXBJdGVtIChmb3IgZWFjaCB0YWIpLS0+XFxuICAgICAgICAgICAgPFRhYlN0cmlwPlxcbiAgICAgICAgICAgICAgICA8VGFiU3RyaXBJdGVtPlxcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcIkluZm9cXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8SW1hZ2Ugc3JjPVxcXCJmb250Oi8vJiN4ZjBhMTtcXFwiIGNsYXNzPVxcXCJmYXMgdC0zNlxcXCI+PC9JbWFnZT5cXG4gICAgICAgICAgICAgICAgPC9UYWJTdHJpcEl0ZW0+XFxuICAgICAgICAgICAgICAgIDxUYWJTdHJpcEl0ZW0gY2xhc3M9XFxcInNwZWNpYWxcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcIk1hcFxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxJbWFnZSBzcmM9XFxcImZvbnQ6Ly8mI3hmMjc5O1xcXCIgY2xhc3M9XFxcImZhcyB0LTM2XFxcIj48L0ltYWdlPlxcbiAgICAgICAgICAgICAgICA8L1RhYlN0cmlwSXRlbT5cXG4gICAgICAgICAgICAgICAgPFRhYlN0cmlwSXRlbSBjbGFzcz1cXFwic3BlY2lhbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgdGV4dD1cXFwiU29uc3RpZ2VzXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEltYWdlIHNyYz1cXFwiZm9udDovLyYjeGYxMjk7XFxcIiBjbGFzcz1cXFwiZmFzIHQtMzZcXFwiPjwvSW1hZ2U+XFxuICAgICAgICAgICAgICAgIDwvVGFiU3RyaXBJdGVtPlxcbiAgICAgICAgICAgIDwvVGFiU3RyaXA+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8IS0tIFRoZSBudW1iZXIgb2YgVGFiQ29udGVudEl0ZW0gY29tcG9uZW50cyBzaG91bGQgY29yZXNwb25kIHRvIHRoZSBudW1iZXIgb2YgVGFiU3RyaXBJdGVtIGNvbXBvbmVudHMgLS0+XFxuICAgICAgICAgICAgPFRhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNjcm9sbFZpZXcgW2hlaWdodF09XFxcIm9wZXJhdGlvbi5fZmVlZGJhY2sgPT0gJ3RydWUnICYmIF91c2VySXNMb2dnZWRJbiA9PSB0cnVlID8gJzg1JScgOiAnMTAwJSdcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBvcmllbnRhdGlvbj1cXFwidmVydGljYWxcXFwiIHdpZHRoPVxcXCIxMDAlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiYXV0bywgKiwgYXV0b1xcXCIgcm93cz1cXFwiKiwqXFxcIiBjbGFzcz1cXFwicC10LTEwXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIHJvd3NwYW49XFxcIjJcXFwiICpuZ0lmPVxcXCJvcGVyYXRpb24uX2ljb24gIT0gdW5kZWZpbmVkXFxcIiB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBjb2w9XFxcIjBcXFwiIGNsYXNzPVxcXCJtLWwtMTUgZmFzIHQtMjBcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9pY29uXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIxXFxcIiBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9zdWJqZWN0LnZhbHVlICsgJyAtICcgKyBvcGVyYXRpb24uX2tleXdvcmRDYXRlZ29yeS52YWx1ZVxcXCIgIGNsYXNzPVxcXCJtLXgtMTUgdGV4dC1jZW50ZXIgdC0yMCBvcGVyYXRpb25LZXl3b3JkXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMVxcXCIgaG9yaXpvbnRhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fa2V5d29yZE5hbWUudmFsdWVcXFwiICBjbGFzcz1cXFwibS14LTE1IHRleHQtY2VudGVyIHQtMjAgb3BlcmF0aW9uS2V5d29yZFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiByb3dzcGFuPVxcXCIyXFxcIiAqbmdJZj1cXFwib3BlcmF0aW9uLl9pY29uICE9IHVuZGVmaW5lZFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgY29sPVxcXCIyXFxcIiBjbGFzcz1cXFwibS1yLTE1IGZhcyB0LTIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5faWNvblxcXCI+PC9MYWJlbD4gIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9tZXNzYWdlICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcInAtbC0xNSBwLXItMTUgcC1iLTEwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09IFxcXCJvcGVyYXRpb24uX21lc3NhZ2UudmFsdWVcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiYXV0bywgKlxcXCIgcm93cz1cXFwiKiwqLCosKiwqLCosKlxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3N0cmVldCAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3N0cmVldC5sYWJlbFxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3N0cmVldC52YWx1ZVxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9mbG9vciAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX2Zsb29yLmxhYmVsXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fZmxvb3IudmFsdWVcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fc2VjdGlvbiAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3NlY3Rpb24ubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIyXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9zZWN0aW9uLnZhbHVlXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX2xvY2F0aW9uICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiM1xcXCIgY29sPVxcXCIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fbG9jYXRpb24ubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiM1xcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fbG9jYXRpb24udmFsdWVcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fb2JqZWN0ICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiNFxcXCIgY29sPVxcXCIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fb2JqZWN0LmxhYmVsXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiID48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjRcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX29iamVjdC52YWx1ZVxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9pbHMgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQgcm93PVxcXCI1XFxcIiBjb2xzcGFuPVxcXCIyXFxcIiBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCI2XFxcIiBjb2w9XFxcIjBcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9pbHMubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiNlxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5faWxzLnZhbHVlXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX2dlYXIgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIFt0ZXh0XT1vcGVyYXRpb24uX2dlYXIubGFiZWwgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiA+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwicC1sLTE1ICBwLWItMTAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9nZWFyLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgIDwvU2Nyb2xsVmlldz5cXG4gICAgICAgICAgICAgICAgICAgIDxGbGV4Ym94TGF5b3V0IGhlaWdodD1cXFwiMTUlXFxcIiAqbmdJZj1cXFwib3BlcmF0aW9uLl9mZWVkYmFjayA9PSAndHJ1ZScgJiYgX3VzZXJJc0xvZ2dlZEluID09IHRydWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gaGVpZ2h0PVxcXCIxMDAlXFxcIiB3aWR0aD1cXFwiNTAlXFxcIiB0ZXh0PVxcXCJLb21tZVxcXCIgW25nQ2xhc3NdPVxcXCJbJ29wZXJhdGlvbkZlZWRiYWNrQnV0dG9uJywgY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrID09PSAxIHx8IGN1cnJlbnRPcGVyYXRpb25GZWVkYmFjayA9PT0gMCA/ICdmZWVkYmFjay1ncmVlbicgOiAnZmVlZGJhY2stZ3JheSddXFxcIiB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiAodGFwKT1cXFwib25UYXBzZXRGZWVkYmFja1N0YXRlMSgkZXZlbnQpXFxcIj48L0J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGhlaWdodD1cXFwiMTAwJVxcXCIgd2lkdGg9XFxcIjUwJVxcXCIgdGV4dD1cXFwiS29tbWUgbmljaHRcXFwiIFtuZ0NsYXNzXT1cXFwiWydvcGVyYXRpb25GZWVkYmFja0J1dHRvbicsIGN1cnJlbnRPcGVyYXRpb25GZWVkYmFjayA9PT0gMiB8fCBjdXJyZW50T3BlcmF0aW9uRmVlZGJhY2sgPT09IDAgPyAnZmVlZGJhY2stcmVkJyA6ICdmZWVkYmFjay1ncmF5J11cXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiICh0YXApPVxcXCJvblRhcHNldEZlZWRiYWNrU3RhdGUyKCRldmVudClcXFwiPjwvQnV0dG9uPiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgPC9GbGV4Ym94TGF5b3V0Pi0tPiAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICA8L1RhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgICAgIDxUYWJDb250ZW50SXRlbT5cXG4gICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICA8TWFwVmlldyAobWFwUmVhZHkpPVxcXCJvbk1hcFJlYWR5KCRldmVudClcXFwiIGlvc092ZXJmbG93U2FmZUFyZWE9XFxcInRydWVcXFwiIFtsYXRpdHVkZV09XFxcImxhdGl0dWRlXFxcIiBbbG9uZ2l0dWRlXT1cXFwibG9uZ2l0dWRlXFxcIiBbem9vbV09XFxcInpvb21cXFwiPjwvTWFwVmlldz5cXG4gICAgICAgICAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICAgICAgICAgIDwvVGFiQ29udGVudEl0ZW0+XFxuICAgICAgICAgICAgPFRhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgICAgICAgICAgIDxTY3JvbGxWaWV3PlxcbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IG9yaWVudGF0aW9uPVxcXCJ2ZXJ0aWNhbFxcXCIgd2lkdGg9XFxcIjEwMCVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fb3BlcmF0aW9ubnVtYmVyICE9IHVuZGVmaW5lZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fb3BlcmF0aW9ubnVtYmVyICE9IHVuZGVmaW5lZCAmJiBvcGVyYXRpb24uX29wZXJhdGlvbm51bWJlci52YWx1ZSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fb3BlcmF0aW9ubnVtYmVyLmxhYmVsXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcIm0teC0xNSBwLWItMTAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9vcGVyYXRpb25udW1iZXIudmFsdWVcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3Jhd2RhdGEgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl9yYXdkYXRhLnZhbHVlICE9IHVuZGVmaW5lZCAmJiBvcGVyYXRpb24uX3Jhd2RhdGEudmFsdWUgIT0gbnVsbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcIm0teC0xNSBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3Jhd2RhdGEubGFiZWxcXFwiIHRleHRBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IHAtYi0xMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3Jhd2RhdGEudmFsdWVcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fenZlaXMgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cXFwib3BlcmF0aW9uLl96dmVpcyAhPSB1bmRlZmluZWQgJiYgb3BlcmF0aW9uLl96dmVpcy52YWx1ZSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fenZlaXMubGFiZWxcXFwiIHRleHRBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IHAtYi0xMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX3p2ZWlzLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzPVxcXCJtLXgtMTUgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHQ9XFxcIlplaXRzdGVtcGVsXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiYXV0bywgKlxcXCIgcm93cz1cXFwiKiwqLCpcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9hbGFybXRpbWUubGFiZWxcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fY3JlYXRlZEF0LmxhYmVsXFxcIiAqbmdJZj1cXFwib3BlcmF0aW9uLl9jcmVhdGVkQXQgIT0gdW5kZWZpbmVkXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD0gIFxcXCJBcHAtRWluZ2FuZ3MtWmVpdFxcXCIgY2xhc3M9XFxcInAtbC0xNSBwLWItMTAgbS1yLTIwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIj48L0xhYmVsPiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9hbGFybXRpbWUudmFsdWVcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMVxcXCIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fY3JlYXRlZEF0ICE9IHVuZGVmaW5lZFxcXCIgW3RleHRdPVxcXCJjcmVhdGVkQXRcXFwiIGNsYXNzPVxcXCJwLWwtMTUgcC1iLTEwIG0tci0yMCBvcGVyYXRpb25zRGV0YWlsVGV4dFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMVxcXCIgKm5nSWY9XFxcIm9wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXAgIT0gdW5kZWZpbmVkXFxcIiBbdGV4dF09XFxcImluY29taW5nVGltZVN0YW1wXFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIyXFxcIiBjb2w9XFxcIjFcXFwiICpuZ0lmPVxcXCJvcGVyYXRpb24uX2luY29taW5nVGltZVN0YW1wID09IHVuZGVmaW5lZFxcXCIgdGV4dCAgPVxcXCJOaWNodCBnZXNldHp0XFxcIiBjbGFzcz1cXFwicC1sLTE1IHAtYi0xMCBtLXItMjAgb3BlcmF0aW9uc0RldGFpbFRleHRcXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPiAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XFxcIm9wZXJhdGlvbi5fdXVpZCAhPSB1bmRlZmluZWRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkICYmIG9wZXJhdGlvbi5fdXVpZC52YWx1ZSAhPSBudWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzcz1cXFwibS14LTE1IG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fdXVpZC5sYWJlbFxcXCIgdGV4dEFsaWdubWVudD1cXFwiY2VudGVyXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzPVxcXCJtLXgtMTUgcC1iLTEwIG9wZXJhdGlvbnNEZXRhaWxUZXh0XFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fdXVpZC52YWx1ZVxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxcbiAgICAgICAgICAgICAgICAgICAgPC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgPC9TY3JvbGxWaWV3PiAgICAgICAgXFxuICAgICAgICAgICAgPC9UYWJDb250ZW50SXRlbT4gICAgICBcXG4gICAgICAgIDwvQm90dG9tTmF2aWdhdGlvbj5cXG48L0dyaWRMYXlvdXQ+XCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiQGtleWZyYW1lcyBlbXB0eSB7fS8qIEZvcm1zICovXFxuLypcXG4kYmFzZS10aGVtZTpNYXRlcmlhbDtcXG4kc2tpbi1uYW1lOiBhbGFybWlhdG9yLW1hdDtcXG4kc3dhdGNoLW5hbWU6TWF0ZXJpYWw7XFxuJGJvcmRlci1yYWRpdXM6IDJweDtcXG4kcHJpbWFyeS1wYWxldHRlLW5hbWU6IHJlZDtcXG4kc2Vjb25kYXJ5LXBhbGV0dGUtbmFtZTogcmVkO1xcbiR0aGVtZS10eXBlOiBkYXJrO1xcbiAqL1xcbkFjdGlvbkJhciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTYxNTNEOyB9XFxuXFxuLnRhYlN0cmlwSWNvblRleHQge1xcbiAgZm9udC1zaXplOiAxODsgfVxcblxcbi5mYXMge1xcbiAgZm9udC1mYW1pbHk6IFxcXCJGb250IEF3ZXNvbWUgNSBGcmVlXFxcIiwgXFxcImZhLXNvbGlkLTkwMFxcXCI7XFxuICBmb250LXdlaWdodDogOTAwOyB9XFxuXFxuLnQtMzYge1xcbiAgZm9udC1zaXplOiAzNjsgfVxcblxcbi5vcGVyYXRpb25zRGV0YWlsVGV4dCB7XFxuICBmb250LXNpemU6IDE1OyB9XFxuXFxuLnRyZW5uLWVsZW1lbnQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHdoaXRlOyB9XFxuXFxuLnRleHQtY2VudGVyIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjsgfVxcblxcbi5vcGVyYXRpb25LZXl3b3JkIHtcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7IH1cXG5cXG4ub3BlcmF0aW9uRmVlZGJhY2tCdXR0b24ge1xcbiAgYW5kcm9pZC1lbGV2YXRpb246IDQ7XFxuICBib3JkZXItY29sb3I6ICMxYjFiMWI7XFxuICBib3JkZXItcmFkaXVzOiAyO1xcbiAgYm9yZGVyLXdpZHRoOiAxO1xcbiAgY29sb3I6IHdoaXRlc21va2U7XFxuICBmb250LXNpemU6IDE1O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4ub3BlcmF0aW9uRmVlZGJhY2tCdXR0b246YWN0aXZlIHtcXG4gIGFuZHJvaWQtZWxldmF0aW9uOiA4O1xcbiAgYm9yZGVyLWNvbG9yOiB3aGl0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDI7XFxuICBib3JkZXItd2lkdGg6IDE7XFxuICBjb2xvcjogd2hpdGVzbW9rZTtcXG4gIGZvbnQtc2l6ZTogMTU7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi5mZWVkYmFjay1ncmVlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgfVxcblxcbi5mZWVkYmFjay1yZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOyB9XFxuXFxuLmZlZWRiYWNrLWdyYXkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogZ3JheTsgfVxcblwiIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUGFnZVJvdXRlLCBSb3V0ZXJFeHRlbnNpb25zIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1hbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2hhcmVkL29wZXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBPcGVyYXRpb24gfSBmcm9tIFwiLi4vc2hhcmVkL29wZXJhdGlvbi5tb2RlbFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVnaXN0ZXJFbGVtZW50IH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1hbmd1bGFyL2VsZW1lbnQtcmVnaXN0cnlcIjtcbmltcG9ydCB7IE1hcFZpZXcsIFBvc2l0aW9uLCBNYXJrZXIgfSBmcm9tICduYXRpdmVzY3JpcHQtZ29vZ2xlLW1hcHMtc2RrJztcblxuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICduYXRpdmVzY3JpcHQtZmVlZGJhY2snO1xuXG5pbXBvcnQgeyBEaXJlY3Rpb25zIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1kaXJlY3Rpb25zXCI7XG5pbXBvcnQgeyBGZWVkYmFja1NlcnZpY2UgfSBmcm9tIFwifi9hcHAvc2VydmljZXMvZmVlZGJhY2suc2VydmljZVwiO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tIFwifi9hcHAvc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XG5yZWdpc3RlckVsZW1lbnQoXCJNYXBWaWV3XCIsICgpID0+IHJlcXVpcmUoXCJuYXRpdmVzY3JpcHQtZ29vZ2xlLW1hcHMtc2RrXCIpLk1hcFZpZXcpO1xuXG5jb25zdCBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xuXG5cbi8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4qIFRoaXMgaXMgdGhlIGl0ZW0gZGV0YWlscyBjb21wb25lbnQgaW4gdGhlIG1hc3Rlci1kZXRhaWwgc3RydWN0dXJlLlxuKiBUaGlzIGNvbXBvbmVudCByZXRyaWV2ZXMgdGhlIHBhc3NlZCBwYXJhbWV0ZXIgZnJvbSB0aGUgbWFzdGVyIGxpc3QgY29tcG9uZW50LFxuKiBmaW5kcyB0aGUgZGF0YSBpdGVtIGJ5IHRoaXMgcGFyYW1ldGVyIGFuZCBkaXNwbGF5cyB0aGUgZGV0YWlsZWQgZGF0YSBpdGVtIGluZm9ybWF0aW9uLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIk9wZXJhdGlvbkRldGFpbFwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vb3BlcmF0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1wiLi9vcGVyYXRpb24tZGV0YWlsLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbkRldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfb3BlcmF0aW9uOiBPcGVyYXRpb247XG4gICAgcHJpdmF0ZSBfdXNlcklzTG9nZ2VkSW46IEJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zZXJ2ZXJhZHJlc3M6c3RyaW5nO1xuICAgIHByaXZhdGUgX3VzZXJuYW1lOnN0cmluZztcbiAgICBwcml2YXRlIF9wYXNzd29yZGhhc2g6c3RyaW5nO1xuICAgIHByaXZhdGUgX2Jhc2VkYXRhVVVJRDpzdHJpbmc7XG4gICAgcHJpdmF0ZSBmZWVkYmFjazogRmVlZGJhY2s7XG4gICAgcHJpdmF0ZSBjdXJyZW50T3BlcmF0aW9uRmVlZGJhY2s6bnVtYmVyID0gMDtcbiAgICBwcml2YXRlIGZlZWRiYWNrVGltZXN0YW1wOiBEYXRlO1xuICAgIHByaXZhdGUgY3VycmVudE9wRmVlZGJhY2s6SlNPTjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9vcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mZWVkYmFja1NlcnZpY2U6IEZlZWRiYWNrU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLCAgICBcbiAgICAgICAgcHJpdmF0ZSBfcGFnZVJvdXRlOiBQYWdlUm91dGUsXG4gICAgICAgIHByaXZhdGUgX3JvdXRlckV4dGVuc2lvbnM6IFJvdXRlckV4dGVuc2lvbnNcbiAgICApIHsgfVxuXG4gICAgQFZpZXdDaGlsZChcIk1hcFZpZXdcIiwge3N0YXRpYzogZmFsc2V9KSBtYXBWaWV3OiBFbGVtZW50UmVmO1xuICAgIHByaXZhdGUgbWFwVmlldzI6IE1hcFZpZXc7XG5cbiAgICAvL01hcCBldmVudHNcbiAgICBvbk1hcFJlYWR5ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwIFJlYWR5XCIpO1xuICAgICAgICB0aGlzLm1hcFZpZXcyID0gZXZlbnQub2JqZWN0XG4gICAgICAgIHRoaXMuYWRkTWFya2VyKCk7XG4gICAgICAgIHRoaXMubWFwVmlldzIubGF0aXR1ZGUgPSB0aGlzLmxhdGl0dWRlO1xuICAgICAgICB0aGlzLm1hcFZpZXcyLmxvbmdpdHVkZSA9IHRoaXMubG9uZ2l0dWRlO1xuICAgIH07XG5cbiAgICBsYXRpdHVkZTpudW1iZXI7XG4gICAgbG9uZ2l0dWRlOiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyID0gMTc7XG4gICAgZGlyZWN0aW9uczogRGlyZWN0aW9ucztcbiAgICBjcmVhdGVkQXQ6IGFueTtcbiAgICBpbmNvbWluZ1RpbWVTdGFtcDogYW55O1xuXG4gICAgcHJpdmF0ZSBhZGRNYXJrZXIoKTogdm9pZCB7XG4gICAgICAgdmFyIG1hcmtlciA9IG5ldyBNYXJrZXIoKTtcbiAgICAgICBtYXJrZXIucG9zaXRpb24gPSBQb3NpdGlvbi5wb3NpdGlvbkZyb21MYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpO1xuICAgICAgIG1hcmtlci50aXRsZSA9IFwiRWluc2F0em9ydFwiO1xuICAgICAgIG1hcmtlci51c2VyRGF0YSA9IHsgaW5kZXggOiAxfTtcbiAgICAgICB0aGlzLm1hcFZpZXcyLmFkZE1hcmtlcihtYXJrZXIpO1xuICAgfVxuICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgKiBVc2UgdGhlIFwibmdPbkluaXRcIiBoYW5kbGVyIHRvIGdldCB0aGUgZGF0YSBpdGVtIGlkIHBhcmFtZXRlciBwYXNzZWQgdGhyb3VnaCBuYXZpZ2F0aW9uLlxuICAgICogR2V0IHRoZSBkYXRhIGl0ZW0gZGV0YWlscyBmcm9tIHRoZSBkYXRhIHNlcnZpY2UgdXNpbmcgdGhpcyBpZCBhbmQgYXNzaWduIGl0IHRvIHRoZVxuICAgICogcHJpdmF0ZSBwcm9wZXJ0eSB0aGF0IGhvbGRzIGl0IGluc2lkZSB0aGUgY29tcG9uZW50LlxuICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICogTGVhcm4gbW9yZSBhYm91dCBob3cgdG8gZ2V0IG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGlzIGRvY3VtZW50YXRpb24gYXJ0aWNsZTpcbiAgICAgICAgKiBodHRwOi8vZG9jcy5uYXRpdmVzY3JpcHQub3JnL2FuZ3VsYXIvY29yZS1jb25jZXB0cy9hbmd1bGFyLW5hdmlnYXRpb24uaHRtbCNwYXNzaW5nLXBhcmFtZXRlclxuICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgICAgICB0aGlzLl9wYWdlUm91dGUuYWN0aXZhdGVkUm91dGVcbiAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcCgoYWN0aXZhdGVkUm91dGUpID0+IGFjdGl2YXRlZFJvdXRlLnBhcmFtcykpXG4gICAgICAgICAgICAuZm9yRWFjaCgocGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBwYXJzZUZsb2F0KHBhcmFtcy5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9uID0gdGhpcy5fb3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25CeUlkKG9wZXJhdGlvbklkKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wRmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja1NlcnZpY2UuZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb25VVUlEKHRoaXMub3BlcmF0aW9uLl91dWlkWyd2YWx1ZSddKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrID0gMDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50T3BGZWVkYmFjayAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrID0gdGhpcy5jdXJyZW50T3BGZWVkYmFja1tcInN0YXRlXCJdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlZWRiYWNrVGltZXN0YW1wICA9IHRoaXMuY3VycmVudE9wRmVlZGJhY2tbXCJ0aW1lc3RhbXBcIl07XG4gICAgICAgICAgICAgICAgfSAgXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX29wZXJhdGlvbi5fbGF0ICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwYXJzZUZsb2F0KHRoaXMuX29wZXJhdGlvbi5fbGF0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmF0aW9uLl9sb24gIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwYXJzZUZsb2F0KHRoaXMuX29wZXJhdGlvbi5fbG9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmF0aW9uLl9jcmVhdGVkQXQgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVkQXQgPSBtb21lbnQodGhpcy5fb3BlcmF0aW9uLl9jcmVhdGVkQXQudmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmF0aW9uLl9pbmNvbWluZ1RpbWVTdGFtcCAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9tZW50KHRoaXMuX29wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXApLmlzVmFsaWQoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nVGltZVN0YW1wID0gbW9tZW50KHRoaXMuX29wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXApLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ1RpbWVTdGFtcCA9IHRoaXMuX29wZXJhdGlvbi5faW5jb21pbmdUaW1lU3RhbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpcmVjdGlvbnM9IG5ldyBEaXJlY3Rpb25zKCk7XG4gICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgRmVlZGJhY2soKTtcblxuICAgICAgICAvLyBHRVQgVVNFUlxuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25bJ19zZXJ2ZXJVVUlEJ10gIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHZhciB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlckZvclNlcnZlclVVSUQodGhpcy5vcGVyYXRpb25bJ19zZXJ2ZXJVVUlEJ10pO1xuXG4gICAgICAgICAgICBpZiAodXNlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VydmVyYWRyZXNzID0gdXNlclsnX3NlcnZlcmFkcmVzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gdXNlclsnX3VzZXJuYW1lJ107XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmRoYXNoID0gdXNlclsnX3Bhc3N3b3JkSGFzaCddO1xuICAgICAgICAgICAgICAgIGlmICh1c2VyWydfYmFzZWRhdGEnXVsnX3V1aWQnXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFzZWRhdGFVVUlEID0gdXNlclsnX2Jhc2VkYXRhJ11bJ191dWlkJ107XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuX2Jhc2VkYXRhVVVJRCk7XG4gICAgICAgICAgICAgICAgfSAgIFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImJhc2VkYXRhVVVJRCB1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWVkYmFjay53YXJuaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkFjaHR1bmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiUHJvZmlsIG5pY2h0IGFrdHVlbGwhIEJpdHRlIGxvZ2dlIGRpY2ggZXJuZXV0IGVpbiFcIlxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYXNlZGF0YVVVSUQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fYmFzZWRhdGFVVUlEICE9IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VySXNMb2dnZWRJbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VySXNMb2dnZWRJbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJJc0xvZ2dlZEluID0gZmFsc2U7O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXNlcklzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgZ2V0IG9wZXJhdGlvbigpOiBPcGVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlcmF0aW9uO1xuICAgIH1cblxuICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgKiBUaGUgYmFjayBidXR0b24gaXMgZXNzZW50aWFsIGZvciBhIG1hc3Rlci1kZXRhaWwgZmVhdHVyZS5cbiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgIG9uQmFja0J1dHRvblRhcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcm91dGVyRXh0ZW5zaW9ucy5iYWNrVG9QcmV2aW91c1BhZ2UoKTtcbiAgICB9XG5cbiAgICAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICogVGhlIG1hc3Rlci1kZXRhaWwgdGVtcGxhdGUgY29tZXMgd2l0aCBhbiBleGFtcGxlIG9mIGFuIGl0ZW0gZWRpdCBwYWdlLlxuICAgICogQ2hlY2sgb3V0IHRoZSBlZGl0IHBhZ2UgaW4gdGhlIC9jYXJzL2Nhci1kZXRhaWwtZWRpdCBmb2xkZXIuXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBvbkVkaXRCdXR0b25UYXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JvdXRlckV4dGVuc2lvbnMubmF2aWdhdGUoW1wiL2NhcnMvY2FyLWRldGFpbC1lZGl0XCIsIHRoaXMuX29wZXJhdGlvbi5pZF0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNsaWRlVG9wXCIsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlOiBcImVhc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRGlyZWN0aW9uc0J1dHRvblRhcCgpOnZvaWQge1xuICAgICAgICB0aGlzLmRpcmVjdGlvbnMubmF2aWdhdGUoe1xuICAgICAgICAgICAgdG86IHsgLy8gb3B0aW9uYWwsIGRlZmF1bHQgJ2N1cnJlbnQgbG9jYXRpb24nXG4gICAgICAgICAgICBsYXQ6IHRoaXMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAgIHR5cGU6IFwiZHJpdmluZ1wiLCAvLyBvcHRpb25hbCwgY2FuIGJlOiBkcml2aW5nLCB0cmFuc2l0LCBiaWN5Y2xpbmcgb3Igd2Fsa2luZ1xuICAgICAgICAgICAgaW9zOiB7XG4gICAgICAgICAgICAgIHByZWZlckdvb2dsZU1hcHM6IHRydWUsIC8vIElmIHRoZSBHb29nbGUgTWFwcyBhcHAgaXMgaW5zdGFsbGVkLCB1c2UgdGhhdCBvbmUgaW5zdGVhZCBvZiBBcHBsZSBNYXBzLCBiZWNhdXNlIGl0IHN1cHBvcnRzIHdheXBvaW50cy4gRGVmYXVsdCB0cnVlLlxuICAgICAgICAgICAgICBhbGxvd0dvb2dsZU1hcHNXZWI6IHRydWUgLy8gSWYgd2F5cG9pbnRzIGFyZSBwYXNzZWQgaW4gYW5kIEdvb2dsZSBNYXBzIGlzIG5vdCBpbnN0YWxsZWQsIHlvdSBjYW4gZWl0aGVyIG9wZW4gQXBwbGUgTWFwcyBhbmQgdGhlIGZpcnN0IHdheXBvaW50IGlzIHVzZWQgYXMgdGhlIHRvLWFkZHJlc3MgKHRoZSByZXN0IGlzIGlnbm9yZWQpLCBvciB5b3UgY2FuIG9wZW4gR29vZ2xlIE1hcHMgb24gd2ViIHNvIGFsbCB3YXlwb2ludHMgYXJlIHNob3duIChzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlKS4gRGVmYXVsdCBmYWxzZS5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhbmRyb2lkOiB7XG4gICAgICAgICAgICAgIG5ld1Rhc2s6IHRydWUgLy8gU3RhcnQgYXMgbmV3IHRhc2suIFRoaXMgbWVhbnMgaXQgd2lsbCBzdGFydCBhIG5ldyBoaXN0b3J5IHN0YWNrIGluc3RlYWQgb2YgdXNpbmcgdGhlIGN1cnJlbnQgYXBwLiBEZWZhdWx0IHRydWUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcyBhcHAgbGF1bmNoZWQuXCIpO1xuICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVGFwc2V0RmVlZGJhY2tTdGF0ZTEoZXZlbnQpe1xuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuX3VzZXJJc0xvZ2dlZEluICYmIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrICE9PSAxKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIktPTU1FXCIpO1xuICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLnNldEZlZWRiYWNrKHRoaXMuX3NlcnZlcmFkcmVzcywgdGhpcy5fdXNlcm5hbWUsIHRoaXMuX3Bhc3N3b3JkaGFzaCwgdGhpcy5vcGVyYXRpb24uX3V1aWRbJ3ZhbHVlJ10sIHRoaXMuX2Jhc2VkYXRhVVVJRCwgMSlcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mZWVkYmFja1NlcnZpY2UucGVyc2lzdEZlZWRiYWNrKHRoaXMub3BlcmF0aW9uLl91dWlkWyd2YWx1ZSddLG1vbWVudCgpLmZvcm1hdCgpLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcEZlZWRiYWNrID0gdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLmdldEZlZWRiYWNrRm9yT3BlcmF0aW9uVVVJRCh0aGlzLm9wZXJhdGlvbi5fdXVpZFsndmFsdWUnXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50T3BlcmF0aW9uRmVlZGJhY2sgPSB0aGlzLmN1cnJlbnRPcEZlZWRiYWNrW1wic3RhdGVcIl07XG4gICAgICAgICAgICAgICAgdGhpcy5mZWVkYmFja1RpbWVzdGFtcCAgPSB0aGlzLmN1cnJlbnRPcEZlZWRiYWNrW1widGltZXN0YW1wXCJdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVGFwc2V0RmVlZGJhY2tTdGF0ZTIoZXZlbnQpe1xuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuX3VzZXJJc0xvZ2dlZEluICYmIHRoaXMuY3VycmVudE9wZXJhdGlvbkZlZWRiYWNrICE9PSAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIktPTU1FIE5JQ0hUXCIpO1xuICAgICAgICAgICAgdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLnNldEZlZWRiYWNrKHRoaXMuX3NlcnZlcmFkcmVzcywgdGhpcy5fdXNlcm5hbWUsIHRoaXMuX3Bhc3N3b3JkaGFzaCwgdGhpcy5vcGVyYXRpb24uX3V1aWRbJ3ZhbHVlJ10sdGhpcy5fYmFzZWRhdGFVVUlELCAyKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrU2VydmljZS5wZXJzaXN0RmVlZGJhY2sodGhpcy5vcGVyYXRpb24uX3V1aWRbJ3ZhbHVlJ10sbW9tZW50KCkuZm9ybWF0KCksIDIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE9wRmVlZGJhY2sgPSB0aGlzLl9mZWVkYmFja1NlcnZpY2UuZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb25VVUlEKHRoaXMub3BlcmF0aW9uLl91dWlkWyd2YWx1ZSddKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcGVyYXRpb25GZWVkYmFjayA9IHRoaXMuY3VycmVudE9wRmVlZGJhY2tbXCJzdGF0ZVwiXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZlZWRiYWNrVGltZXN0YW1wICA9IHRoaXMuY3VycmVudE9wRmVlZGJhY2tbXCJ0aW1lc3RhbXBcIl07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCJtb2R1bGUuZXhwb3J0cyA9IFwiPEFjdGlvbkJhciBjbGFzcz1cXFwiaGVhZGVyIHByaW1hcnlcXFwiID5cXG4gICAgPCEtLSBTaG91bGQgcmVtb3ZlIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbiAtLT5cXG4gICAgPE5hdmlnYXRpb25CdXR0b24gaW9zOnZpc2liaWxpdHk9XFxcImNvbGxhcHNlZFxcXCI+PC9OYXZpZ2F0aW9uQnV0dG9uPlxcbiAgICA8TGFiZWwgdGV4dD1cXFwiQUxBUk1pYXRvclxcXCIgaG9yaXpvbnRhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBjbGFzcz1cXFwidC0xOFxcXCI+PC9MYWJlbD5cXG4gICAgPEFjdGlvbkl0ZW0gaW9zLnBvc2l0aW9uPVxcXCJyaWdodFxcXCIgYW5kcm9pZC5wb3NpdGlvbj1cXFwicmlnaHRcXFwiICh0YXApPVxcXCJvblByb2ZpbGVCdXR0b25UYXAoKVxcXCI+XFxuICAgICAgICA8TGFiZWwgY2xhc3M9XFxcImZhcyB0LTIwXFxcIiB0ZXh0PVxcXCImI3hmMGMwO1xcXCI+PC9MYWJlbD4gXFxuICAgIDwvQWN0aW9uSXRlbT5cXG48L0FjdGlvbkJhcj5cXG48Qm90dG9tTmF2aWdhdGlvbiBzZWxlY3RlZEluZGV4PVxcXCIwXFxcIj5cXG5cXG4gICAgPCEtLSBUaGUgYm90dG9tIHRhYiBVSSBpcyBjcmVhdGVkIHZpYSBUYWJTdHJpcCAodGhlIGNvbnRhaW5pZXIpIGFuZCBUYWJTdHJpcEl0ZW0gKGZvciBlYWNoIHRhYiktLT5cXG4gICAgPFRhYlN0cmlwPlxcbiAgICAgICAgPFRhYlN0cmlwSXRlbSAodGFwKT1cXFwib25PcGVyYXRpb25zSXRlbVRhcHBlZCgkZXZlbnQpXFxcIj5cXG4gICAgICAgICAgICA8TGFiZWwgY2xhc3M9XFxcInRhYlN0cmlwSWNvblRleHRcXFwiIHRleHQ9XFxcIkVpbnPDpHR6ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICA8SW1hZ2Ugc3JjPVxcXCJmb250Oi8vJiN4ZjBmMztcXFwiIGNsYXNzPVxcXCJmYXMgdC0zNlxcXCI+PC9JbWFnZT5cXG4gICAgICAgIDwvVGFiU3RyaXBJdGVtPlxcbiAgICAgICAgPFRhYlN0cmlwSXRlbSBjbGFzcz1cXFwic3BlY2lhbFxcXCI+XFxuICAgICAgICAgICAgPExhYmVsIGNsYXNzPVxcXCJ0YWJTdHJpcEljb25UZXh0XFxcIiB0ZXh0PVxcXCJFaW5zdGVsbHVuZ2VuXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgIDxJbWFnZSBzcmM9XFxcImZvbnQ6Ly8mI3hmMDEzO1xcXCIgY2xhc3M9XFxcImZhcyB0LTM2XFxcIj48L0ltYWdlPlxcbiAgICAgICAgPC9UYWJTdHJpcEl0ZW0+XFxuICAgIDwvVGFiU3RyaXA+XFxuXFxuICAgIDwhLS0gVGhlIG51bWJlciBvZiBUYWJDb250ZW50SXRlbSBjb21wb25lbnRzIHNob3VsZCBjb3Jlc3BvbmQgdG8gdGhlIG51bWJlciBvZiBUYWJTdHJpcEl0ZW0gY29tcG9uZW50cyAtLT5cXG4gICAgPFRhYkNvbnRlbnRJdGVtPlxcbiAgICAgICAgPEdyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgPFJhZExpc3RWaWV3ICNsaXN0dmlldyBbaXRlbXNdPVxcXCJvcGVyYXRpb25zXFxcIiAoaXRlbVRhcCk9XFxcIm9uT3BlcmF0aW9uSXRlbVRhcCgkZXZlbnQpXFxcIiBjbGFzcz1cXFwib3BlcmF0aW9ucy1saXN0XFxcIiBzd2lwZUFjdGlvbnM9XFxcInRydWVcXFwiIFxcbiAgICAgICAgICAgIChpdGVtU3dpcGVQcm9ncmVzc0VuZGVkKT1cXFwib25Td2lwZUNlbGxGaW5pc2hlZCgkZXZlbnQpXFxcIlxcbiAgICAgICAgICAgIChpdGVtU3dpcGVQcm9ncmVzc1N0YXJ0ZWQpPVxcXCJvblN3aXBlQ2VsbFN0YXJ0ZWQoJGV2ZW50KVxcXCIgKGl0ZW1Td2lwZVByb2dyZXNzQ2hhbmdlZCk9XFxcIm9uQ2VsbFN3aXBpbmcoJGV2ZW50KVxcXCJcXG4gICAgICAgICAgICA+XFxuICAgICAgICAgICAgICAgIDwhLS1cXG4gICAgICAgICAgICBSYWRMaXN0VmlldyBpcyBhIFVJIGNvbXBvbmVudCBwYXJ0IG9mIHRoZSBQcm9ncmVzcyBOYXRpdmVTY3JpcHQgVUkgc2V0IG9mIGNvbXBvbmVudHMuXFxuICAgICAgICAgICAgTGVhcm4gbW9yZSBhYm91dCB0aGUgUmFkTGlzdFZpZXcgVUkgY29tcG9uZW50IGFuZCBob3cgaXQgY2FuIGJlIGN1c3RvbWl6ZWQgaW4gdGhpcyBkb2N1bWVudGF0aW9uIGFydGljbGU6XFxuICAgICAgICAgICAgaHR0cHM6Ly9kb2NzLm5hdGl2ZXNjcmlwdC5vcmcvYW5ndWxhci91aS9wcm9mZXNzaW9uYWwtdWktY29tcG9uZW50cy9uZy1MaXN0Vmlldy9nZXR0aW5nLXN0YXJ0ZWRcXG4gICAgICAgICAgICBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIG1hc3RlciBsaXN0IGluIHRoZSBtYXN0ZXItZGV0YWlsIHN0cnVjdHVyZS5cXG4gICAgICAgICAgICAtLT5cXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHRrTGlzdEl0ZW1UZW1wbGF0ZSBsZXQtb3BlcmF0aW9uPVxcXCJpdGVtXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwib3BlcmF0aW9ucy1saXN0X19pdGVtXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8R3JpZExheW91dCByb3dzPVxcXCIqLCAqLCAqXFxcIiBjb2x1bW5zPVxcXCJhdXRvLCAqLCBhdXRvXFxcIiBjbGFzcz1cXFwib3BlcmF0aW9ucy1saXN0X19pdGVtLWNvbnRlbnQgdC0xOFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIiYjeGYwMTc7XFxcIiBjbGFzcz1cXFwiZmFzIG9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fYWxhcm1kYXRlLnZhbHVlICsgJyAnICsgb3BlcmF0aW9uLl9hbGFybXRpbWUudmFsdWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCAqbmdJZj1cXFwib3BlcmF0aW9uLl9pY29uICE9IHVuZGVmaW5lZFxcXCIgY29sPVxcXCIyXFxcIiBob3Jpem9udGFsQWxpZ25tZW50PVxcXCJyaWdodFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJtLXItNSBmYXMgdC0zNiBvcGVyYXRpb25zLWxpc3RfX2l0ZW0taWNvblxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX2ljb25cXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja0xheW91dCByb3c9XFxcIjFcXFwiIGNsYXNzPVxcXCJociBtLXktNVxcXCIgY29sc3Bhbj1cXFwiM1xcXCI+PC9TdGFja0xheW91dD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgcm93PVxcXCIyXFxcIiBjb2w9XFxcIjBcXFwiIGNvbHNwYW49XFxcIjNcXFwiIHJvd3M9XFxcIiosICosICosICpcXFwiIGNvbHVtbnM9XFxcImF1dG8sICosIGF1dG9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIiBjbGFzcz1cXFwicC1iLTEwIHQtMThcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHJvdz1cXFwiMFxcXCIgcm93c3Bhbj1cXFwiMlxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCImI3hmMGYzO1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZmFzIG9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uXFxcIj4gPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XFxcIm9wZXJhdGlvbi5fc3ViamVjdC52YWx1ZSArICcgLSAnICsgb3BlcmF0aW9uLl9rZXl3b3JkQ2F0ZWdvcnkudmFsdWVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIxXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwib3BlcmF0aW9uLl9rZXl3b3JkTmFtZS52YWx1ZVxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVxcXCJvcGVyYXRpb24uX3V1aWQgIT0gdW5kZWZpbmVkXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjJcXFwiIHJvd3NwYW4gPVxcXCIyXFxcIiAqbmdJZj1cXFwiZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb24ob3BlcmF0aW9uLl91dWlkLnZhbHVlKSAhPSBudWxsXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XSA9XFxcImdldEZlZWRiYWNrRm9yT3BlcmF0aW9uKG9wZXJhdGlvbi5fdXVpZC52YWx1ZSlcXFwiIGNsYXNzPVxcXCJmYXMgb3BlcmF0aW9ucy1saXN0X19pdGVtLWZlZWRiYWNrLWljb24gdC0yNVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tMYXlvdXQgcm93PVxcXCIyXFxcIiBjbGFzcz1cXFwiaHIgbS15LTVcXFwiIGNvbHNwYW49XFxcIjNcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgcm93PVxcXCIzXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIiYjeGYyNzY7XFxcIiBjbGFzcz1cXFwiZmFzIG9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uXFxcIj4gPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCAqbmdJZj1cXFwib3BlcmF0aW9uLl9sb2NhdGlvbkNhbGMgPT0gdW5kZWZpbmVkICYmIG9wZXJhdGlvbi5fbG9jYXRpb24gIT0gdW5kZWZpbmVkXFxcIiByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJvcGVyYXRpb24uX2xvY2F0aW9uLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCAqbmdJZj1cXFwib3BlcmF0aW9uLl9sb2NhdGlvbkNhbGMgPT0gdW5kZWZpbmVkICYmIG9wZXJhdGlvbi5fbG9jYXRpb24gPT0gdW5kZWZpbmVkXFxcIiByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMVxcXCIgdGV4dD1cXFwiLS1cXFwiIHRleHRXcmFwPVxcXCJ0cnVlXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsICpuZ0lmPVxcXCJvcGVyYXRpb24uX2xvY2F0aW9uQ2FsYyAhPSB1bmRlZmluZWRcXFwiIHJvdz1cXFwiM1xcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcIm9wZXJhdGlvbi5fbG9jYXRpb25DYWxjLnZhbHVlXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tMYXlvdXQ+XFxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgIDxHcmlkTGF5b3V0ICp0a0xpc3RJdGVtU3dpcGVUZW1wbGF0ZSBjb2x1bW5zPVxcXCJhdXRvLCAqLCBhdXRvXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTEVGVCBTV0lQSU5HIENVUlJFTlRMWSBOT1QgVVNFRC0tPlxcbiAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sdW1ucz1cXFwiKiwgKiwgKlxcXCIgY29sPVxcXCIwXFxcIiBpZD1cXFwibGVmdC1zdGFja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sPVxcXCIwXFxcIiBjbGFzcz1cXFwibWFya0dyaWRMYXlvdXRcXFwiICh0YXApPVxcXCJvbkxlZnRTd2lwZUNsaWNrKCRldmVudClcXFwiIGlkPVxcXCJidG5NYXJrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcIm1hcmtcXFwiIGNsYXNzPVxcXCJzd2lwZVRlbXBsYXRlTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sPVxcXCIxXFxcIiBjbGFzcz1cXFwiYXJjaGl2ZUdyaWRMYXlvdXRcXFwiICh0YXApPVxcXCJvbkxlZnRTd2lwZUNsaWNrKCRldmVudClcXFwiIGlkPVxcXCJidG5BcmNoaXZlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRleHQ9XFxcImFyY2hpdmVcXFwiIGNsYXNzPVxcXCJzd2lwZVRlbXBsYXRlTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRMYXlvdXQgY29sPVxcXCIyXFxcIiBjbGFzcz1cXFwidW5yZWFkR3JpZExheW91dFxcXCIgKHRhcCk9XFxcIm9uTGVmdFN3aXBlQ2xpY2soJGV2ZW50KVxcXCIgaWQ9XFxcImJ0blVucmVhZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCB0ZXh0PVxcXCJ1bnJlYWRcXFwiIGNsYXNzPVxcXCJzd2lwZVRlbXBsYXRlTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiIGhvcml6b250YWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICA8L0dyaWRMYXlvdXQ+XFxuICAgICAgICAgICAgICAgICAgICA8R3JpZExheW91dCBjb2x1bW5zPVxcXCIqXFxcIiBjb2w9XFxcIjJcXFwiIGlkPVxcXCJyaWdodC1zdGFja1xcXCIgY2xhc3M9XFxcIm0tMTBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxHcmlkTGF5b3V0IGNvbD1cXFwiMFxcXCIgY2xhc3M9XFxcImRlbGV0ZUdyaWRMYXlvdXRcXFwiICh0YXApPVxcXCJvblJpZ2h0U3dpcGVDbGljaygkZXZlbnQpXFxcIiBpZD1cXFwiYnRuRGVsZXRlXFxcIiBiYWNrZ3JvdW5kQ29sb3I9XFxcInJlZFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCB0ZXh0PVxcXCImI3hmMWY4O1xcXCIgY2xhc3M9XFxcInN3aXBlVGVtcGxhdGVMYWJlbCBmYXMgdC0yMFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgaG9yaXpvbnRhbEFsaWdubWVudD1cXFwiY2VudGVyXFxcIj48L0xhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgICAgIDwvR3JpZExheW91dD5cXG4gICAgICAgICAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICAgICAgICAgIDwvUmFkTGlzdFZpZXc+XFxuICAgICAgICAgICAgPEFjdGl2aXR5SW5kaWNhdG9yIFtidXN5XT1cXFwiaXNMb2FkaW5nXFxcIj48L0FjdGl2aXR5SW5kaWNhdG9yPlxcbiAgICAgICAgPC9HcmlkTGF5b3V0PlxcbiAgICA8L1RhYkNvbnRlbnRJdGVtPlxcbiAgICA8VGFiQ29udGVudEl0ZW0+XFxuICAgICAgICA8U2Nyb2xsVmlldz5cXG4gICAgICAgICAgICA8bnMtc2V0dGluZ3M+PC9ucy1zZXR0aW5ncz5cXG4gICAgICAgIDwvU2Nyb2xsVmlldz5cXG4gICAgPC9UYWJDb250ZW50SXRlbT5cXG5cXG48L0JvdHRvbU5hdmlnYXRpb24+XCIiLCJtb2R1bGUuZXhwb3J0cyA9IFwiQGtleWZyYW1lcyBlbXB0eSB7fS8qIEZvcm1zICovXFxuLypcXG4kYmFzZS10aGVtZTpNYXRlcmlhbDtcXG4kc2tpbi1uYW1lOiBhbGFybWlhdG9yLW1hdDtcXG4kc3dhdGNoLW5hbWU6TWF0ZXJpYWw7XFxuJGJvcmRlci1yYWRpdXM6IDJweDtcXG4kcHJpbWFyeS1wYWxldHRlLW5hbWU6IHJlZDtcXG4kc2Vjb25kYXJ5LXBhbGV0dGUtbmFtZTogcmVkO1xcbiR0aGVtZS10eXBlOiBkYXJrO1xcbiAqL1xcbkFjdGlvbkJhciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTYxNTNEOyB9XFxuXFxuLnRhYlN0cmlwSWNvblRleHQge1xcbiAgZm9udC1zaXplOiAxODsgfVxcblxcbi5mYXMge1xcbiAgZm9udC1mYW1pbHk6IFxcXCJGb250IEF3ZXNvbWUgNSBGcmVlXFxcIiwgXFxcImZhLXNvbGlkLTkwMFxcXCI7XFxuICBmb250LXdlaWdodDogOTAwOyB9XFxuXFxuLnQtMzYge1xcbiAgZm9udC1zaXplOiAzNjsgfVxcblxcbi5vcGVyYXRpb25zRGV0YWlsVGV4dCwgLm9wZXJhdGlvbnMtbGlzdF9faXRlbSB7XFxuICBmb250LXNpemU6IDE0OyB9XFxuXFxuLm9wZXJhdGlvbnMtbGlzdF9faXRlbSB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7IH1cXG4gIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0tY29udGVudCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6ICNlNGU3ZWI7XFxuICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7IH1cXG4gIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0tbmFtZSwgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1pY29uIHtcXG4gICAgY29sb3I6IHJlZDsgfVxcblxcbjpob3N0LWNvbnRleHQoLm5zLWRhcmspIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0ge1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gIG1hcmdpbi1yaWdodDogNHB4OyB9XFxuICA6aG9zdC1jb250ZXh0KC5ucy1kYXJrKSAub3BlcmF0aW9ucy1saXN0X19pdGVtLWNvbnRlbnQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcXG4gICAgYm9yZGVyLXJhZGl1czogNDBweDsgfVxcbiAgOmhvc3QtY29udGV4dCgubnMtZGFyaykgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1uYW1lLCA6aG9zdC1jb250ZXh0KC5ucy1kYXJrKSAub3BlcmF0aW9ucy1saXN0X19pdGVtLWljb24ge1xcbiAgICBjb2xvcjogcmVkOyB9XFxuXFxuLmRlbGV0ZUdyaWRMYXlvdXQge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweDsgfVxcblxcbi5vcGVyYXRpb25zLWxpc3RfX2l0ZW0ge1xcbiAgbWFyZ2luLXRvcDogMjBweDtcXG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xcbiAgcGFkZGluZzogMjBweDsgfVxcbiAgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1jb250ZW50IHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTdlYjtcXG4gICAgYm9yZGVyLXJhZGl1czogNDBweDtcXG4gICAgbWFyZ2luLXRvcDogMjBweDtcXG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XFxuICAgIG1hcmdpbi1yaWdodDogMjBweDtcXG4gICAgcGFkZGluZzogMjBweDsgfVxcbiAgLm9wZXJhdGlvbnMtbGlzdF9faXRlbS1uYW1lLCAub3BlcmF0aW9ucy1saXN0X19pdGVtLWljb24ge1xcbiAgICBjb2xvcjogcmVkOyB9XFxuXFxuOmhvc3QtY29udGV4dCgubnMtZGFyaykgLm9wZXJhdGlvbnMtbGlzdF9faXRlbSB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiA0cHg7IH1cXG4gIDpob3N0LWNvbnRleHQoLm5zLWRhcmspIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0tY29udGVudCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xcbiAgICBib3JkZXItcmFkaXVzOiA0MHB4OyB9XFxuICA6aG9zdC1jb250ZXh0KC5ucy1kYXJrKSAub3BlcmF0aW9ucy1saXN0X19pdGVtLW5hbWUsIDpob3N0LWNvbnRleHQoLm5zLWRhcmspIC5vcGVyYXRpb25zLWxpc3RfX2l0ZW0taWNvbiB7XFxuICAgIGNvbG9yOiByZWQ7IH1cXG5cXG4uZGVsZXRlR3JpZExheW91dCB7XFxuICBib3JkZXItcmFkaXVzOiA1MHB4O1xcbiAgbWFyZ2luLXRvcDogMjBweDtcXG4gIHBhZGRpbmctdG9wOiAyMHB4OyB9XFxuXCIiLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVyRXh0ZW5zaW9ucyB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IExpc3RWaWV3RXZlbnREYXRhLCBSYWRMaXN0Vmlld30gZnJvbSBcIm5hdGl2ZXNjcmlwdC11aS1saXN0dmlld1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUFycmF5IH0gZnJvbSBcInRucy1jb3JlLW1vZHVsZXMvZGF0YS9vYnNlcnZhYmxlLWFycmF5XCI7XG5cbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9zaGFyZWQvb3BlcmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gXCIuL3NoYXJlZC9vcGVyYXRpb24ubW9kZWxcIjtcbmltcG9ydCB7IFJhZExpc3RWaWV3Q29tcG9uZW50IH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC11aS1saXN0dmlldy9hbmd1bGFyXCI7XG5pbXBvcnQgeyBWaWV3LCBsYXlvdXQgfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy91aS9wYWdlXCI7XG5pbXBvcnQgeyBGZWVkYmFjaywgRmVlZGJhY2tUeXBlLCBGZWVkYmFja1Bvc2l0aW9uIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1mZWVkYmFja1wiO1xuaW1wb3J0IFRoZW1lIGZyb20gXCJAbmF0aXZlc2NyaXB0L3RoZW1lXCI7XG5pbXBvcnQgeyBGZWVkYmFja1NlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZmVlZGJhY2suc2VydmljZVwiO1xuXG4vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuKiBUaGlzIGlzIHRoZSBtYXN0ZXIgbGlzdCBjb21wb25lbnQgaW4gdGhlIG1hc3Rlci1kZXRhaWwgc3RydWN0dXJlLlxuKiBUaGlzIGNvbXBvbmVudCBnZXRzIHRoZSBkYXRhLCBwYXNzZXMgaXQgdG8gdGhlIG1hc3RlciB2aWV3IGFuZCBkaXNwbGF5cyBpdCBpbiBhIGxpc3QuXG4qIEl0IGFsc28gaGFuZGxlcyB0aGUgbmF2aWdhdGlvbiB0byB0aGUgZGV0YWlscyBwYWdlIGZvciBlYWNoIGl0ZW0uXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwiT3BlcmF0aW9uc0xpc3RcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL29wZXJhdGlvbi1saXN0LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL29wZXJhdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgX2lzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX29wZXJhdGlvbnM6IE9ic2VydmFibGVBcnJheTxPcGVyYXRpb24+O1xuICAgIHB1YmxpYyBzZWxlY3RlZEluZGV4ID0gMTtcblxuICAgIHByaXZhdGUgbWFpblZpZXc7XG4gICAgcHJpdmF0ZSBsZWZ0SXRlbTtcbiAgICBwcml2YXRlIHJpZ2h0SXRlbTtcbiAgICBwcml2YXRlIF9vcGVyYXRpb25Tb3J0aW5nRnVuY3Rpb246IChpdGVtOiBhbnksIG90aGVySXRlbTogYW55KSA9PiBudW1iZXI7XG4gICAgcHJpdmF0ZSBmZWVkYmFjazogRmVlZGJhY2s7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyRXh0ZW5zaW9uczogUm91dGVyRXh0ZW5zaW9ucyxcbiAgICAgICAgcHJpdmF0ZSBfb3BlcmF0aW9uU2VydmljZTogT3BlcmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmVlZGJhY2tTZXJ2aWNlOiBGZWVkYmFja1NlcnZpY2UsXG4gICAgKSB7IFxuICAgIH1cbiAgICBcbiAgICBAVmlld0NoaWxkKCdsaXN0dmlldycse3N0YXRpYzogZmFsc2V9KSByYWRMaXN0VmlldzogUmFkTGlzdFZpZXdDb21wb25lbnQ7XG4gICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAqIFVzZSB0aGUgXCJuZ09uSW5pdFwiIGhhbmRsZXIgdG8gZ2V0IHRoZSBkYXRhIGFuZCBhc3NpZ24gaXQgdG8gdGhlXG4gICAgKiBwcml2YXRlIHByb3BlcnR5IHRoYXQgaG9sZHMgaXQgaW5zaWRlIHRoZSBjb21wb25lbnQuXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmVlZGJhY2sgPSBuZXcgRmVlZGJhY2soKTsgIFxuICAgICAgICBcbiAgICAgICAgdGhpcy5fb3BlcmF0aW9uU2VydmljZS5nZXRBbGxPcCgpLnN1YnNjcmliZSggKG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMuc3BsaWNlKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJldmVyZXNlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbi5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucyA9IG5ldyBPYnNlcnZhYmxlQXJyYXk8T3BlcmF0aW9uPihyZXZlcmVzZWRPcGVyYXRpb24ucmV2ZXJzZSgpKTtcbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3BlcmF0aW9uU29ydGluZ0Z1bmN0aW9uID0gKGl0ZW06IE9wZXJhdGlvbiwgb3RoZXJJdGVtOiBPcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIFRPRE86IEFkZCBmaWx0ZXJpbmcgY3JpdGVyaWFcbiAgICAgICAgLy8gICAgY29uc3QgcmVzID0gaXRlbS5pZCA8IG90aGVySXRlbS5pZCA/IC0xIDogaXRlbS5pZCA+IG90aGVySXRlbS5pZCA/IDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gMDtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKTp2b2lkIHtcbiAgICAgICAgICAgIC8vIGdldCBhcmNoaXZlIGZyb20gc3RvcmFnZVxuICAgICAgICAgICAgYWxlcnQoXCJoaVwiKTtcbiAgICAgICAgICAvLyAgdGhpcy5fb3BlcmF0aW9ucyA9IG5ldyBPYnNlcnZhYmxlQXJyYXkodGhpcy5fb3BlcmF0aW9uU2VydmljZS5nZXRBbGxPcGVyYXRpb25zKCkpO1xuICAgIH1cblxuICAgIGdldCBvcGVyYXRpb25zKCkgOiBPYnNlcnZhYmxlQXJyYXk8T3BlcmF0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRpb25zO1xuICAgIH1cblxuICAgIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmc7XG4gICAgfVxuICAgICAgXG4gICAgZ2V0IG9wZXJhdGlvblNvcnRpbmdGdW5jdGlvbigpOiAoaXRlbTogYW55LCBvdGhlckl0ZW06IGFueSkgPT4gbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvblNvcnRpbmdGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBzZXQgb3BlcmF0aW9uU29ydGluZ0Z1bmN0aW9uKHZhbHVlOiAoaXRlbTogYW55LCBvdGhlckl0ZW06IGFueSkgPT4gbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX29wZXJhdGlvblNvcnRpbmdGdW5jdGlvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgKiBVc2UgdGhlIFwiaXRlbVRhcFwiIGV2ZW50IGhhbmRsZXIgb2YgdGhlIDxSYWRMaXN0Vmlldz4gdG8gbmF2aWdhdGUgdG8gdGhlXG4gICAgKiBpdGVtIGRldGFpbHMgcGFnZS4gUmV0cmlldmUgYSByZWZlcmVuY2UgZm9yIHRoZSBkYXRhIGl0ZW0gKHRoZSBpZCkgYW5kIHBhc3MgaXRcbiAgICAqIHRvIHRoZSBpdGVtIGRldGFpbHMgcGFnZSwgc28gdGhhdCBpdCBjYW4gaWRlbnRpZnkgd2hpY2ggZGF0YSBpdGVtIHRvIGRpc3BsYXkuXG4gICAgKiBMZWFybiBtb3JlIGFib3V0IG5hdmlnYXRpbmcgd2l0aCBhIHBhcmFtZXRlciBpbiB0aGlzIGRvY3VtZW50YXRpb24gYXJ0aWNsZTpcbiAgICAqIGh0dHA6Ly9kb2NzLm5hdGl2ZXNjcmlwdC5vcmcvYW5ndWxhci9jb3JlLWNvbmNlcHRzL2FuZ3VsYXItbmF2aWdhdGlvbi5odG1sI3Bhc3NpbmctcGFyYW1ldGVyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICBvbk9wZXJhdGlvbkl0ZW1UYXAoYXJnczogTGlzdFZpZXdFdmVudERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFwcGVkT3BlcmF0aW9uSXRlbSA9IGFyZ3Mudmlldy5iaW5kaW5nQ29udGV4dDtcbiAgICAgICAgdGhpcy5fb3BlcmF0aW9uU2VydmljZS5yZWRpcmVjdFRvT3BlcmF0aW9uRGV0YWlscyh0YXBwZWRPcGVyYXRpb25JdGVtLmlkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25QdWxsVG9SZWZyZXNoSW5pdGlhdGVkKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKTp2b2lkIHtcbiAgICAgICAgY29uc3QgbGlzdFZpZXcgPSBhcmdzLm9iamVjdDtcbiAgICAgICAgbGlzdFZpZXcucmVmcmVzaCgpXG4gICAgICAgIGxpc3RWaWV3Lm5vdGlmeVB1bGxUb1JlZnJlc2hGaW5pc2hlZCgpO1xuICAgIH1cblxuICAgIG9uT3BlcmF0aW9uc0l0ZW1UYXBwZWQoZXZlbnQpe1xuICAgICAgICB0aGlzLnJhZExpc3RWaWV3Lmxpc3RWaWV3LnJlZnJlc2goKTtcbiAgICB9XG4gICAgb25Qcm9maWxlQnV0dG9uVGFwKGV2ZW50KXtcbiAgICAgICAgdGhpcy5fcm91dGVyRXh0ZW5zaW9ucy5uYXZpZ2F0ZShbXCIvcHJvZmlsZXNcIl0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2xpZGVcIixcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgICAgICAgICAgIGN1cnZlOiBcImVhc2VcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Td2lwZUNlbGxTdGFydGVkKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKSB7XG4gICAgICAgIGNvbnN0IHN3aXBlTGltaXRzID0gYXJncy5kYXRhLnN3aXBlTGltaXRzO1xuICAgICAgICBzd2lwZUxpbWl0cy50aHJlc2hvbGQgPSBhcmdzWydtYWluVmlldyddLmdldE1lYXN1cmVkV2lkdGgoKSAqIDAuMzsgLy8gMzAlIG9mIHdob2xlIHdpZHRoXG4gICAvLyAgICAgc3dpcGVMaW1pdHMubGVmdCA9IGFyZ3NbJ21haW5WaWV3J10uZ2V0TWVhc3VyZWRXaWR0aCgpICogMC42NTsgLy8gNjUlIG9mIHdob2xlIHdpZHRoXG4gICAgICAgIHN3aXBlTGltaXRzLmxlZnQgPSAwOyAvLyB0dXJuIG9mZiBsZWZ0IHN3aXBpbmdcbiAgICAgICAgc3dpcGVMaW1pdHMucmlnaHQgPSBhcmdzWydtYWluVmlldyddLmdldE1lYXN1cmVkV2lkdGgoKSAqIDAuMzA7IC8vIDM1JSBvZiB3aG9sZSB3aWR0aFxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgb25MZWZ0U3dpcGVDbGljayhhcmdzOiBMaXN0Vmlld0V2ZW50RGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxlZnQgc3dpcGUgY2xpY2tcIik7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBvblJpZ2h0U3dpcGVDbGljayhhcmdzOkxpc3RWaWV3RXZlbnREYXRhKSB7XG4gICAgICAvLyAgY29uc29sZS5sb2coXCJSaWdodCBzd2lwZSBjbGlja1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYXJncy52aWV3LmJpbmRpbmdDb250ZXh0KTtcbiAgICAgICAgaWYgKGFyZ3Mub2JqZWN0LmlkID09IFwiYnRuRGVsZXRlXCIpe1xuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyhcIkRFTEVURSBPUEVSQVRJT05cIik7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKGFyZ3Mudmlldy5iaW5kaW5nQ29udGV4dFsnX3V1aWQnXVsndmFsdWUnXSk7XG4gICAgICAgICAgICBpZiAoYXJncy52aWV3LmJpbmRpbmdDb250ZXh0WydfdXVpZCddICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3Mudmlldy5iaW5kaW5nQ29udGV4dFsnX3V1aWQnXVsndmFsdWUnXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGV0ZVJlc3VsdCA9IHRoaXMuX29wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uRm9yVVVJRChhcmdzLnZpZXcuYmluZGluZ0NvbnRleHRbJ191dWlkJ11bJ3ZhbHVlJ10pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRlUmVzdWx0KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmVlZGJhY2suc3VjY2Vzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRXJmb2xncmVpY2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkVpbnNhdHogd3VyZGUgZ2Vsw7ZzY2h0IVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYWRMaXN0Vmlldy5saXN0Vmlldy5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRVJST1IgV0hJTEUgREVMRVRJTkc6IE5vIFVVSUQgVkFMVUUgRk9VTkRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFUlJPUiBXSElMRSBERUxFVElORzogTm8gVVVJRCBGT1VORFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblN3aXBlQ2VsbEZpbmlzaGVkKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKSB7XG4gICAgICAgLy8gY29uc29sZS5sb2coXCJjZWxsIHN3aXBpbmcgZmluaXNoZWRcIilcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DZWxsU3dpcGluZyhhcmdzOiBMaXN0Vmlld0V2ZW50RGF0YSkge1xuICAgICAgICBjb25zdCBzd2lwZUxpbWl0cyA9IGFyZ3MuZGF0YS5zd2lwZUxpbWl0cztcbiAgICAgICAgY29uc3Qgc3dpcGVWaWV3ID0gYXJnc1snc3dpcGVWaWV3J107XG4gICAgICAgIHRoaXMubWFpblZpZXcgPSBhcmdzWydtYWluVmlldyddO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgcmVmZXJlbmNpbmcgaXRlbSBkb2VzIG5vdCBleGlzdCBhbnltb3JlXG4gICAgICAgIGlmIChzd2lwZVZpZXcgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHRoaXMubGVmdEl0ZW0gPSBzd2lwZVZpZXcuZ2V0Vmlld0J5SWQoJ2xlZnQtc3RhY2snKTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRJdGVtID0gc3dpcGVWaWV3LmdldFZpZXdCeUlkKCdyaWdodC1zdGFjaycpO1xuICAgICAgICBcbiAgICAgICAgICAgIGlmIChhcmdzLmRhdGEueCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0RGltZW5zaW9ucyA9IFZpZXcubWVhc3VyZUNoaWxkKFxuICAgICAgICAgICAgICAgICAgICA8Vmlldz50aGlzLmxlZnRJdGVtLnBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyhNYXRoLmFicyhhcmdzLmRhdGEueCksIGxheW91dC5FWEFDVExZKSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyh0aGlzLm1haW5WaWV3LmdldE1lYXN1cmVkSGVpZ2h0KCksIGxheW91dC5FWEFDVExZKSk7XG4gICAgICAgICAgICAgICAgVmlldy5sYXlvdXRDaGlsZCg8Vmlldz50aGlzLmxlZnRJdGVtLnBhcmVudCwgdGhpcy5sZWZ0SXRlbSwgMCwgMCwgbGVmdERpbWVuc2lvbnMubWVhc3VyZWRXaWR0aCwgbGVmdERpbWVuc2lvbnMubWVhc3VyZWRIZWlnaHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU90aGVyU3dpcGVUZW1wbGF0ZVZpZXcoXCJsZWZ0XCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodERpbWVuc2lvbnMgPSBWaWV3Lm1lYXN1cmVDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgPFZpZXc+dGhpcy5yaWdodEl0ZW0ucGFyZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyhNYXRoLmFicyhhcmdzLmRhdGEueCksIGxheW91dC5FWEFDVExZKSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0Lm1ha2VNZWFzdXJlU3BlYyh0aGlzLm1haW5WaWV3LmdldE1lYXN1cmVkSGVpZ2h0KCksIGxheW91dC5FWEFDVExZKSk7XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIFZpZXcubGF5b3V0Q2hpbGQoPFZpZXc+dGhpcy5yaWdodEl0ZW0ucGFyZW50LCB0aGlzLnJpZ2h0SXRlbSwgdGhpcy5tYWluVmlldy5nZXRNZWFzdXJlZFdpZHRoKCkgLSByaWdodERpbWVuc2lvbnMubWVhc3VyZWRXaWR0aCwgMCwgdGhpcy5tYWluVmlldy5nZXRNZWFzdXJlZFdpZHRoKCksIHJpZ2h0RGltZW5zaW9ucy5tZWFzdXJlZEhlaWdodCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlT3RoZXJTd2lwZVRlbXBsYXRlVmlldyhcInJpZ2h0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyhcIldBUk5JTkc6IEVYQ0VQVElPTiBDQVVHSFQhXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIGhpZGVPdGhlclN3aXBlVGVtcGxhdGVWaWV3KGN1cnJlbnRTd2lwZVZpZXc6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRTd2lwZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmlnaHRJdGVtLmdldEFjdHVhbFNpemUoKS53aWR0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBWaWV3LmxheW91dENoaWxkKDxWaWV3PnRoaXMucmlnaHRJdGVtLnBhcmVudCwgdGhpcy5yaWdodEl0ZW0sIHRoaXMubWFpblZpZXcuZ2V0TWVhc3VyZWRXaWR0aCgpLCAwLCB0aGlzLm1haW5WaWV3LmdldE1lYXN1cmVkV2lkdGgoKSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdEl0ZW0uZ2V0QWN0dWFsU2l6ZSgpLndpZHRoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIFZpZXcubGF5b3V0Q2hpbGQoPFZpZXc+dGhpcy5sZWZ0SXRlbS5wYXJlbnQsIHRoaXMubGVmdEl0ZW0sIDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25EYXJrQnV0dG9uVGFwKCl7XG4gICAgICAgIFRoZW1lLnRvZ2dsZU1vZGUoKTsgLy8gdG8gdG9nZ2xlIGJldHdlZW4gdGhlIG1vZGVzXG4gICAgfVxuXG4gICAgZ2V0RmVlZGJhY2tGb3JPcGVyYXRpb24odXVpZDogc3RyaW5nKTogc3RyaW5ne1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmVlZGJhY2tTZXJ2aWNlLmdldEZlZWRiYWNrRm9yT3BlcmF0aW9uVVVJRCh1dWlkKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJY29uRm9yRmVlZGJhY2tTdGF0ZShyZXN1bHRbJ3N0YXRlJ10pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJY29uRm9yRmVlZGJhY2tTdGF0ZShzdGF0ZSk6IHN0cmluZ3tcbiAgICAgICAgdmFyIGljb24gPVwiXCJcbiAgICAgICAgc3dpdGNoIChzdGF0ZSl7XG4gICAgICAgICAgICBjYXNlIDE6IFxuICAgICAgICAgICAgICAgIGljb24gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjA1OCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgaWNvbiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmMDU3KTtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpY29uID0gbnVsbFxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWNvbjtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSwgTk9fRVJST1JTX1NDSEVNQSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRDb21tb25Nb2R1bGUgfSBmcm9tIFwibmF0aXZlc2NyaXB0LWFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBOYXRpdmVTY3JpcHRGb3Jtc01vZHVsZSB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmF0aXZlU2NyaXB0VUlMaXN0Vmlld01vZHVsZSB9IGZyb20gXCJuYXRpdmVzY3JpcHQtdWktbGlzdHZpZXcvYW5ndWxhclwiO1xuXG5pbXBvcnQgeyBPcGVyYXRpb25EZXRhaWxDb21wb25lbnQgfSBmcm9tIFwiLi9vcGVyYXRpb24tZGV0YWlsL29wZXJhdGlvbi1kZXRhaWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25MaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vb3BlcmF0aW9uLWxpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25zUm91dGluZ01vZHVsZSB9IGZyb20gXCIuL29wZXJhdGlvbnMtcm91dGluZy5tb2R1bGVcIjtcbmltcG9ydCB7IFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSBcIi4vLi4vc2V0dGluZ3Mvc2V0dGluZ3MuY29tcG9uZW50XCJcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE9wZXJhdGlvbnNSb3V0aW5nTW9kdWxlLFxuICAgICAgICBOYXRpdmVTY3JpcHRDb21tb25Nb2R1bGUsXG4gICAgICAgIE5hdGl2ZVNjcmlwdEZvcm1zTW9kdWxlLFxuICAgICAgICBOYXRpdmVTY3JpcHRVSUxpc3RWaWV3TW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgT3BlcmF0aW9uTGlzdENvbXBvbmVudCxcbiAgICAgICAgT3BlcmF0aW9uRGV0YWlsQ29tcG9uZW50LFxuICAgICAgICBTZXR0aW5nc0NvbXBvbmVudFxuICAgIF0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXG5cbiAgICBdLFxuICAgIHByb3ZpZGVyczogW10sXG4gICAgc2NoZW1hczogW1xuICAgICAgICBOT19FUlJPUlNfU0NIRU1BXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25zTW9kdWxlIHsgfVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgUm91dGVzIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgTmF0aXZlU2NyaXB0Um91dGVyTW9kdWxlIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1hbmd1bGFyL3JvdXRlclwiO1xuXG5pbXBvcnQgeyBPcGVyYXRpb25EZXRhaWxDb21wb25lbnQgfSBmcm9tIFwiLi9vcGVyYXRpb24tZGV0YWlsL29wZXJhdGlvbi1kZXRhaWwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBPcGVyYXRpb25MaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4vb3BlcmF0aW9uLWxpc3QuY29tcG9uZW50XCI7XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgIHsgcGF0aDogXCJcIiwgY29tcG9uZW50OiBPcGVyYXRpb25MaXN0Q29tcG9uZW50IH0sXG4gICAgeyBwYXRoOiBcIm9wZXJhdGlvbi1kZXRhaWwvOmlkXCIsIGNvbXBvbmVudDogT3BlcmF0aW9uRGV0YWlsQ29tcG9uZW50IH0sXG5dO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtOYXRpdmVTY3JpcHRSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXG4gICAgZXhwb3J0czogW05hdGl2ZVNjcmlwdFJvdXRlck1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uc1JvdXRpbmdNb2R1bGUgeyB9XG4iLCJjb25zdCBtb21lbnQgPSByZXF1aXJlKFwibW9tZW50XCIpO1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbiB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBfc3ViamVjdCA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBfbWVzc2FnZSA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBfZ2VhciA6IGFueTtcbiAgICBfa2V5d29yZENhdGVnb3J5IDogYW55O1xuICAgIF9rZXl3b3JkSWQgOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgX2tleXdvcmROYW1lIDogYW55ID0gdW5kZWZpbmVkO1xuICAgIF9rZXl3b3JkUmF3IDogYW55ID0gdW5kZWZpbmVkO1xuICAgIF96dmVpcyA6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBfYWxhcm1kYXRlIDogYW55ID0gdW5kZWZpbmVkO1xuICAgIF9hbGFybXRpbWUgOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgX2xhdCA6IGFueSA9IDA7XG4gICAgX2xvbiA6IGFueSA9IDA7XG4gICAgX2ljb246IGFueTtcbiAgICBfdXVpZDogYW55O1xuICAgIF9pbmNvbWluZ1RpbWVTdGFtcDogYW55O1xuICAgIF9jcmVhdGVkQXQ6YW55O1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgZmlsbE9wZXJhdGlvbkZDTShwYXlsb2FkOiBKU09OKXtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKHBheWxvYWQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICB0aGlzW2tleV09IHBheWxvYWRba2V5XTtcbiAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuaWQgPSAgTWF0aC5yYW5kb20oKTtcbiAgICAgICAgdGhpcy5hc3NpZ25JY29uKCk7XG4gICAgICAgIHRoaXMuX2luY29taW5nVGltZVN0YW1wID0gbW9tZW50KCkuZm9ybWF0KCk7XG4gICAgfVxuXG4gICAgZmlsbE9wZXJhdGlvbkZDTVdpdGhPcHRpb25zKHBheWxvYWQ6IEpTT04sIG9wdGlvbnM6IEpTT04pe1xuICAgICAgICBcbiAgICAgICAgT2JqZWN0LmtleXMocGF5bG9hZCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICB0aGlzW2tleV09IHBheWxvYWRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgdGhpcy5pZCA9ICBNYXRoLnJhbmRvbSgpO1xuICAgICAgICB0aGlzLmFzc2lnbkljb24oKTtcbiAgICAgICAgdGhpcy5faW5jb21pbmdUaW1lU3RhbXAgPSBtb21lbnQoKS5mb3JtYXQoKTtcbiAgICAgICAgXG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGhpc1trZXldPSBvcHRpb25zW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgYXNzaWduSWNvbigpe1xuICAgICAgICB2YXIgaWNvbjtcblxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIGNhc2UgL1N0cmHDn2UgcmVpbmlnZW4uKi8udGVzdCh0aGlzLl9rZXl3b3JkTmFtZS52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjUxYTsgLy8gYnJvb21cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL0FiZmFsbC4qLy50ZXN0KHRoaXMuX2tleXdvcmROYW1lLnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmNzk0OyAvLyBkdW1wc3Rlci1maXJlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9eQmF1bS4qLy50ZXN0KHRoaXMuX2tleXdvcmROYW1lLnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMWJiOyAvLyB0cmVlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9UaWVyLiovLnRlc3QodGhpcy5fa2V5d29yZENhdGVnb3J5LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmNmJlOyAvLyBjYXRcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL1ZVLiovLnRlc3QodGhpcy5fa2V5d29yZENhdGVnb3J5LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmNWUxOyAvLyBjYXJfY3Jhc2hcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15SRC4qLy50ZXN0KHRoaXMuX2tleXdvcmRDYXRlZ29yeS52YWx1ZSk6XG4gICAgICAgICAgICBjYXNlIC9eUkQuKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgIGNhc2UgL0ZJUlNUIFJFU1BPTkRFUi4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGYwZjk7IC8vIGFtYnVsYW5jZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvSFVCU0NIUkFVQkVSTEFORFVORy4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY1MzM7IC8vIGhlbGljb3B0ZXJcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL1VOV0VUVEVSLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4Zjc0MDsgLy8gY2xvdWQtc2hvd2Vycy1oZWF2eVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXkFCQyDDlkwuKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgIGNhc2UgL15BQkMgS1JBRlRTVE9GRi4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY2MTM7IC8vIG9pbC1jYW5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15CIEJNQS4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgY2FzZSAvXkFCQyBHRUZBSFJTVE9GRk1FTERFQU5MQUdFLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjU2NjsgLy8gZGlnaXRhbC10YWNob2dyYXBoXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9eVEhMIFAgRUlOR0VTQ0hMT1NTRU4uKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMDg0OyAvLyBrZXlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15USEwgUC4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY3Mjg7IC8vIHVzZXItaW5qdXJlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITCBCRUxFVUNIVFVORy4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGYwZWI7IC8vIGxpZ2h0YnVsYlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITCBCT01CRS4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGYxZTI7IC8vIGJvbWJcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15USEwgRVJLVU5EVU5HLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjFlNTsgLy8gYmlub2N1bGFyc1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITCBHRULDhFVERS4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY2ZjE7IC8vIGhvdXNlLWRhbWFnZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlBST0JFQUxBUk0uKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgIGNhc2UgL15JTkYuKi8udGVzdCh0aGlzLl9zdWJqZWN0LnZhbHVlKTpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMDllOyAvLyByc3NcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgL15CLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjA2ZDsgLy8gZmlyZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAvXlRITC4qLy50ZXN0KHRoaXMuX3N1YmplY3QudmFsdWUpOlxuICAgICAgICAgICAgICAgIGljb24gPSAweGY3ZDk7IC8vIHRvb2xzXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIC9eQUJDLiovLnRlc3QodGhpcy5fc3ViamVjdC52YWx1ZSk6XG4gICAgICAgICAgICAgICAgaWNvbiA9IDB4ZjcxNDsgLy8gc2t1bGwtY3Jvc3Nib25lc1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpY29uID0gMHhmMGYzOyAvLyBiZWxsXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB0aGlzLl9pY29uID0gU3RyaW5nLmZyb21DaGFyQ29kZShpY29uKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuLy8gVE9ETzogc2hvdWxkIGJlIGltcG9ydGVkIGZyb20ga2ludmV5LW5hdGl2ZXNjcmlwdC1zZGsvYW5ndWxhciBidXQgZGVjbGFyYXRpb24gZmlsZSBpcyBjdXJyZW50bHkgbWlzc2luZ1xuaW1wb3J0IHsgUm91dGVyRXh0ZW5zaW9ucyB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gXCIuL29wZXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0ICogYXMgZmlyZWJhc2UgZnJvbVwibmF0aXZlc2NyaXB0LXBsdWdpbi1maXJlYmFzZVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCAqIGFzIGFwcFNldHRpbmdzIGZyb20gXCJ0bnMtY29yZS1tb2R1bGVzL2FwcGxpY2F0aW9uLXNldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBhcHBsaWNhdGlvbiBmcm9tICdAbmF0aXZlc2NyaXB0L2NvcmUvYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgaXNBbmRyb2lkLCBpc0lPUywgZGV2aWNlLCBzY3JlZW4gfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy9wbGF0Zm9ybVwiO1xuaW1wb3J0IHsgTG9jYWxOb3RpZmljYXRpb25zIH0gZnJvbSBcIm5hdGl2ZXNjcmlwdC1sb2NhbC1ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlQXJyYXkgfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy9kYXRhL29ic2VydmFibGUtYXJyYXlcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvblNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBfYmVoYXZpb3JTdWJqZWN0T3BlcmF0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcm91dGVyRXh0ZW5zaW9uczogUm91dGVyRXh0ZW5zaW9ucywgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSApIHtcbiAgICAgICAgTG9jYWxOb3RpZmljYXRpb25zLmhhc1Blcm1pc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIGlmIChhcHBTZXR0aW5ncy5nZXRCb29sZWFuKFwic2V0dGluZ0FsZXJ0V2hpbGVNdXRlZFwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRCb29sZWFuKFwic2V0dGluZ0FsZXJ0V2hpbGVNdXRlZFwiLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0TnVtYmVyKFwic2V0dGluZ0FsZXJ0RHVyYXRpb25JblNlY1wiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXROdW1iZXIoXCJzZXR0aW5nQWxlcnREdXJhdGlvbkluU2VjXCIsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGluaXRpYWwgTG9hZGluZ1xuICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3RPcGVyYXRpb25zLm5leHQodGhpcy5nZXRPcGVyYXRpb25zRnJvbUFwcFNldHRpbmdzKCkpO1xuXG4gICAgICAgIGlmIChpc0lPUyl7XG4gICAgICAgICAgICAvLyBFbnRyeXBvaW50IHdoZW4gbWVzc2FnZSBpcyByZWNlaXZlZCBmb3IgaU9TXG4gICAgICAgICAgICBmaXJlYmFzZS5hZGRPbk1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBtZXNzYWdlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2VUeXBlID0gbWVzc2FnZS5kYXRhW1wibWVzc2FnZVR5cGVcIl07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV3IGFsYXJtIHJvdXRpbmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gXCJhbGFybVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluY29taW5nQWxhcm0obWVzc2FnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKGlzQW5kcm9pZCl7XG4gICAgICAgICAgICAvLyBFbnRyeXBvaW50IHdoZW4gbm90aWZpY2F0aW9uIGlzIHRhcHBlZCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgTG9jYWxOb3RpZmljYXRpb25zLmFkZE9uTWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKG5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRpb25TdG9yZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uU3RvcmUgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tQXBwU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMubmV4dChvcGVyYXRpb25TdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBvcGVyYXRpb24gZGV0YWlscyB2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9PcGVyYXRpb25EZXRhaWxzKG5vdGlmaWNhdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRW50cnlwb2ludCB3aGVuIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgd2l0aCBhcHAgaW4gZm9yZWdyb3VuZCBmb3IgQW5kcm9pZFxuICAgICAgICAgICAgZmlyZWJhc2UuYWRkT25NZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhcbiAgICAgICAgICAgICAgICBmdW5jdGlvbihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgbWVzc2FnZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlVHlwZSA9IG1lc3NhZ2UuZGF0YVtcIm1lc3NhZ2VUeXBlXCJdO1xuICAgICAgICAgICAgICAgICAgICAvL3ZhciBtZXNzYWdlUGF5bG9hZCA9IEpTT04ucGFyc2UobWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZm9yZWdyb3VuZCA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG5ldyBhbGFybSByb3V0aW5lXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gXCJhbGFybVwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdGlvblN0b3JlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblN0b3JlID0gdGhpcy5nZXRPcGVyYXRpb25zRnJvbUFwcFNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMubmV4dChvcGVyYXRpb25TdG9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb09wZXJhdGlvbkRldGFpbHMob3BlcmF0aW9uU3RvcmVbb3BlcmF0aW9uU3RvcmUubGVuZ3RoLTFdLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfSAgICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gICAgXG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhbGwgb3BlcmF0aW9ucyBhcyBvYnNlcnZhYmxlXG4gICAgZ2V0QWxsT3AoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBvcGVyYXRpb24gZm9yIHNwZWNpZmljIGlkXG4gICAgZ2V0T3BlcmF0aW9uQnlJZChpZDogbnVtYmVyKTogT3BlcmF0aW9uIHtcbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdGlvbnNGcm9tQXBwU2V0dGluZ3MoKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi5pZCA9PT0gaWQ7XG4gICAgICAgIH0pWzBdO1xuICAgIH1cblxuICAgIC8vIENoZWNrcyBmb3IgYSBnaXZlbiB1dWlkIHZhbHVlIHdoZXRoZXIgaXQgYWxyZWFkeSBleGlzdHMgb3Igbm90XG4gICAgY2hlY2tJZk9wZXJhdGlvbkFscmVhZHlFeGlzdHModXVpZDogc3RyaW5nKTpib29sZWFuIHtcbiAgICAgICAgaWYgKCF1dWlkKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gdGhpcy5nZXRPcGVyYXRpb25zRnJvbUFwcFNldHRpbmdzKCkuZmlsdGVyKChvcGVyYXRpb24pID0+IHtcblxuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi5fdXVpZCAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24uX3V1aWQudmFsdWUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi5fdXVpZC52YWx1ZSA9PT0gdXVpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFycyBvcGVyYXRpb24gbGlzdFxuICAgIGNsZWFyT3BlcmF0aW9ucygpe1xuICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbGxPcGVyYXRpb25zXCIsIEpTT04uc3RyaW5naWZ5KFtdKSk7XG4gICAgICAgIHRoaXMuX2JlaGF2aW9yU3ViamVjdE9wZXJhdGlvbnMubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICAvLyBPcGVuIHNwZWNpZmljIG9wZXJhdGlvbiBmb3IgZGV0YWlscyB2aWV3XG4gICAgcmVkaXJlY3RUb09wZXJhdGlvbkRldGFpbHMoaWQ6bnVtYmVyKSB7XG4gICAgICAgIFxuICAgICAgICBpZih0aGlzLl9yb3V0ZXJFeHRlbnNpb25zICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXJFeHRlbnNpb25zLm5hdmlnYXRlKFtcIi9vcGVyYXRpb25zL29wZXJhdGlvbi1kZXRhaWxcIiwgaWRdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFuaW1hdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzbGlkZVwiLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZTogXCJlYXNlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSAgICAgXG4gICAgfVxuICAgIC8vIEhhbmRsZXMgaW5jb21pbmcgYWxhcm1cbiAgICBpbmNvbWluZ0FsYXJtKF9tZXNzYWdlUGF5bG9hZCl7XG4gICAgICAgIHZhciBvcGVyYXRpb24gPSBuZXcgT3BlcmF0aW9uKCk7XG5cbiAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKF9tZXNzYWdlUGF5bG9hZC5kYXRhW1wicGF5bG9hZFwiXSk7XG4gICAgICAgIHZhciBvcHRpb25zOkpTT04gPSA8SlNPTj57fTtcbiAgICAgICAgdmFyIGZlZWRiYWNrID0gX21lc3NhZ2VQYXlsb2FkLmRhdGFbXCJmZWVkYmFja1wiXTtcbiAgICAgICAgdmFyIHNlcnZlclVVSUQgPSBfbWVzc2FnZVBheWxvYWQuZGF0YVtcInNlcnZlclVVSURcIl07XG5cbiAgICAgICAgaWYgKGZlZWRiYWNrICE9IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICBvcHRpb25zWydfZmVlZGJhY2snXSA9IGZlZWRiYWNrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlcnZlclVVSUQgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIG9wdGlvbnNbJ19zZXJ2ZXJVVUlEJ10gPSBzZXJ2ZXJVVUlEO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcblxuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICBvcGVyYXRpb24uZmlsbE9wZXJhdGlvbkZDTShwYXlsb2FkLm9wZXJhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbi5maWxsT3BlcmF0aW9uRkNNV2l0aE9wdGlvbnMocGF5bG9hZC5vcGVyYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICBcbiAgICAgICAgaWYgKG9wZXJhdGlvbi5fdXVpZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBvcEV4aXN0cyA9IHRoaXMuY2hlY2tJZk9wZXJhdGlvbkFscmVhZHlFeGlzdHMob3BlcmF0aW9uLl91dWlkLnZhbHVlKVxuICAgICAgICAgICAgaWYgKCFvcEV4aXN0cyl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJORVVFUiBFSU5TQVRaXCIpXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggb3BlcmF0aW9uIGxpc3QgXG4gICAgICAgICAgICAgICAgdGhpcy5fYmVoYXZpb3JTdWJqZWN0T3BlcmF0aW9ucy5uZXh0KHRoaXMucGVyc2lzdE9wZXJhdGlvbihvcGVyYXRpb24pKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIG9wZXJhdGlvbiBkZXRhaWxzIHZpZXdcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9PcGVyYXRpb25EZXRhaWxzKG9wZXJhdGlvbi5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFSU5TQVRaIEVYSVNUSUVSVCBCRVJFSVRTXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMRUdBQ1kgU1VQUE9SVFwiKTtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggb3BlcmF0aW9uIGxpc3QgXG4gICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3RPcGVyYXRpb25zLm5leHQodGhpcy5wZXJzaXN0T3BlcmF0aW9uKG9wZXJhdGlvbikpO1xuXG4gICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBvcGVyYXRpb24gZGV0YWlscyB2aWV3XG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0VG9PcGVyYXRpb25EZXRhaWxzKG9wZXJhdGlvbi5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwZXJzaXN0T3BlcmF0aW9uKG9wZXJhdGlvbik6T3BlcmF0aW9uW117XG4gICAgICAgIHZhciBvcGVyYXRpb25TdG9yZSA9IFtdO1xuICAgICAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25TdG9yZSA9IEpTT04ucGFyc2UoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYXRpb25TdG9yZS5wdXNoKG9wZXJhdGlvbik7XG4gICAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcImFsbE9wZXJhdGlvbnNcIixKU09OLnN0cmluZ2lmeShvcGVyYXRpb25TdG9yZSkpO1xuICAgICAgICByZXR1cm4gb3BlcmF0aW9uU3RvcmU7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0aW9uc0Zyb21BcHBTZXR0aW5ncygpOk9wZXJhdGlvbltde1xuICAgICAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbGxPcGVyYXRpb25zXCIsIEpTT04uc3RyaW5naWZ5KFtdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYWxsT3BlcmF0aW9uc1wiKSk7XG4gICAgfVxuXG4gICAgZGVsZXRlT3BlcmF0aW9uRm9yVVVJRCh1dWlkOnN0cmluZyk6Ym9vbGVhbntcbiAgICAgICAgY29uc29sZS5sb2coXCJERUxFVElORyBPUCB3aXRoIHV1aWQ6IFwiK3V1aWQpO1xuICAgICAgICB2YXIgcmVzdWx0RmxhZyA9IGZhbHNlO1xuICAgICAgICB2YXIgb3BlcmF0aW9uU3RvcmUgPSB0aGlzLmdldE9wZXJhdGlvbnNGcm9tQXBwU2V0dGluZ3MoKS5maWx0ZXIoKG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi5fdXVpZCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgZmxhZyA9IG9wZXJhdGlvbi5fdXVpZC52YWx1ZSAhPT0gdXVpZDtcbiAgICAgICAgICAgIGlmKCFmbGFnKSB7XG4gICAgICAgICAgICAvLyAgICBjb25zb2xlLmxvZyhcIlVVSUQgRk9VTkRcIik7XG4gICAgICAgICAgICAgICAgcmVzdWx0RmxhZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRGVsZXRlIGZlZWRiYWNrIGFzIHdlbGxcbiAgICAgICAgICAgICAgICB2YXIgZmVlZGJhY2tTdG9yZTpKU09OID0gSlNPTi5wYXJzZShhcHBTZXR0aW5ncy5nZXRTdHJpbmcoXCJvcGVyYXRpb25GZWVkYmFja1N0b3JlXCIsIEpTT04uc3RyaW5naWZ5KDxKU09OPnt9KSkpO1xuXG4gICAgICAgICAgICAgICAgZGVsZXRlIGZlZWRiYWNrU3RvcmVbdXVpZF07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0U3RyaW5nKFwib3BlcmF0aW9uRmVlZGJhY2tTdG9yZVwiLCBKU09OLnN0cmluZ2lmeShmZWVkYmFja1N0b3JlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmxhZztcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAocmVzdWx0RmxhZykge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvblN0b3JlLmxlbmd0aCAhPSAwKXtcbiAgICAgICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbGxPcGVyYXRpb25zXCIsSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uU3RvcmUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9iZWhhdmlvclN1YmplY3RPcGVyYXRpb25zLm5leHQob3BlcmF0aW9uU3RvcmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhck9wZXJhdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0RmxhZztcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBIdHRwcyBmcm9tICduYXRpdmVzY3JpcHQtaHR0cHMnXG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9saWJhcnkvaGVscGVyJztcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWZlZWRiYWNrJztcbmltcG9ydCAqIGFzIGFwcFNldHRpbmdzIGZyb20gXCJ0bnMtY29yZS1tb2R1bGVzL2FwcGxpY2F0aW9uLXNldHRpbmdzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZlZWRiYWNrU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBfaGVscGVyOkhlbHBlcjtcbiAgcHJpdmF0ZSBfZmVlZGJhY2s6RmVlZGJhY2s7XG4gIHByaXZhdGUgX29wZXJhdGlvbkZlZWRiYWNrOkpTT047XG5cbiAgY29uc3RydWN0b3IoKSB7IFxuXG4gICAgdGhpcy5faGVscGVyID0gbmV3IEhlbHBlcigpO1xuICAgIHRoaXMuX2ZlZWRiYWNrID0gbmV3IEZlZWRiYWNrKCk7XG5cbiAgICB0aGlzLl9vcGVyYXRpb25GZWVkYmFjayA9IHRoaXMuZ2V0RmVlZGJhY2tTdG9yZSgpO1xuXG4gIH1cblxuXG5cbi8qKlxuICAgKiBTZXQgZmVlYmFjayBmb3Igc3BlY2lmaWMgb3BlcmF0aW9uIG1ldGhvZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VydmVyYWRyZXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvblVVSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IGJhc2VkYXRhVVVJRFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhdGVcbiAgICovXG4gIHB1YmxpYyBzZXRGZWVkYmFjayhzZXJ2ZXJhZHJlc3M6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmRoYXNoOiBzdHJpbmcsIG9wZXJhdGlvblVVSUQ6IHN0cmluZywgYmFzZWRhdGFVVUlEOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIpe1xuICAgIHZhciB1cmwgPSBzZXJ2ZXJhZHJlc3MrXCIvZmVlZGJhY2svc2V0P1wiXG4gICAgKyBcInVzZXJuYW1lPVwiICsgZW5jb2RlVVJJKHVzZXJuYW1lKVxuICAgICsgXCImcGFzc3dvcmRoYXNoPVwiICsgZW5jb2RlVVJJKHBhc3N3b3JkaGFzaClcbiAgICArIFwiJm9wZXJhdGlvblVVSUQ9XCIgKyBlbmNvZGVVUkkob3BlcmF0aW9uVVVJRClcbiAgICArIFwiJmJhc2VkYXRhVVVJRD1cIiArIGVuY29kZVVSSShiYXNlZGF0YVVVSUQpXG4gICAgKyBcIiZzdGF0ZT1cIiArIHN0YXRlO1xuICAgIGNvbnNvbGUubG9nKHVybCk7XG5cbiAgICByZXR1cm4gSHR0cHMucmVxdWVzdCh7XG4gICAgICB1cmw6IHNlcnZlcmFkcmVzcytcIi9mZWVkYmFjay9zZXQ/XCJcbiAgICAgICAgKyBcInVzZXJuYW1lPVwiICsgZW5jb2RlVVJJKHVzZXJuYW1lKVxuICAgICAgICArIFwiJnBhc3N3b3JkaGFzaD1cIiArIGVuY29kZVVSSShwYXNzd29yZGhhc2gpXG4gICAgICAgICsgXCImb3BlcmF0aW9uVVVJRD1cIiArIGVuY29kZVVSSShvcGVyYXRpb25VVUlEKVxuICAgICAgICArIFwiJmJhc2VkYXRhVVVJRD1cIiArIGVuY29kZVVSSShiYXNlZGF0YVVVSUQpXG4gICAgICAgICsgXCImc3RhdGU9XCIgKyBzdGF0ZSxcbiAgICAgIG1ldGhvZDogXCJHRVRcIlxuICAgIH0pLnRoZW4oKHJlc3BvbnNlOiBIdHRwcy5IdHRwc1Jlc3BvbnNlKSA9PiB7XG4gICAgICBcbiAgICAgICAgLy8gQXJndW1lbnQgKHJlc3BvbnNlKSBpcyBIdHRwUmVzcG9uc2VcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICB2YXIgcmVzcG9uc2VDb250ZW50ID0gdGhpcy5faGVscGVyLnByZXBhcmVSZXNwb25zZShyZXNwb25zZVsnY29udGVudCddKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlQ29udGVudFsnc3VjY2VzcyddID09IDEpe1xuICAgICAgICAgIGlmIChzdGF0ZSA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9mZWVkYmFjay5zdWNjZXNzKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiRXJmb2xncmVpY2hcIixcbiAgICAgICAgICAgICAgbWVzc2FnZTogXCJSw7xja21lbGR1bmcgJ0tvbW1lJyBnZXNlbmRldFwiXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZSA9PSAyKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2ZlZWRiYWNrLnN1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVyZm9sZ3JlaWNoXCIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJSw7xja21lbGR1bmcgJ0tvbW1lIG5pY2h0JyBnZXNlbmRldFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhyb3cgXCJFUlJPUjogXCIrIHJlc3BvbnNlQ29udGVudFsnZGVzY3JpcHRpb24nXTtcbiAgICAgICAgfVxuICAgIH0sIChlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHRoaXMuX2ZlZWRiYWNrLmVycm9yKHtcbiAgICAgICAgdGl0bGU6IFwiRmVobGVyXCIsXG4gICAgICAgIG1lc3NhZ2U6IGUudG9TdHJpbmcoKVxuICAgIH0pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEZlZWRiYWNrU3RvcmUoKTpKU09OIHtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwib3BlcmF0aW9uRmVlZGJhY2tTdG9yZVwiKSA9PT0gdW5kZWZpbmVkKSB7ICAgICAgXG4gICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJvcGVyYXRpb25GZWVkYmFja1N0b3JlXCIsIEpTT04uc3RyaW5naWZ5KDxKU09OPnt9KSk7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnBhcnNlKGFwcFNldHRpbmdzLmdldFN0cmluZyhcIm9wZXJhdGlvbkZlZWRiYWNrU3RvcmVcIikpO1xuICB9XG5cbiAgY3JlYXRlRmVlZGJhY2tPYmplY3RGb3JPcGVyYXRpb24odGltZVN0YW1wOiBEYXRlLCBzdGF0ZTogbnVtYmVyKTpKU09OIHtcbiAgICB2YXIgZmVlZGJhY2sgPSA8SlNPTj57fTtcbiAgICBmZWVkYmFja1sndGltZVN0YW1wJ10gPSB0aW1lU3RhbXA7XG4gICAgZmVlZGJhY2tbJ3N0YXRlJ10gPSBzdGF0ZTtcbiAgICByZXR1cm4gZmVlZGJhY2s7XG4gIH1cblxuICBnZXRGZWVkYmFja0Zvck9wZXJhdGlvblVVSUQob3BlcmF0aW9uVVVJRDogc3RyaW5nKTpKU09OIHtcbiAgICB2YXIgZmVlZGJhY2tTdG9yZTpKU09OID0gdGhpcy5nZXRGZWVkYmFja1N0b3JlKCk7XG5cbiAgICByZXR1cm4gZmVlZGJhY2tTdG9yZVtvcGVyYXRpb25VVUlEXSAhPSB1bmRlZmluZWQgPyBmZWVkYmFja1N0b3JlW29wZXJhdGlvblVVSURdIDogbnVsbDtcbiAgfVxuXG4gIHBlcnNpc3RGZWVkYmFjayhvcGVyYXRpb25VVUlEOiBzdHJpbmcsIHRpbWVTdGFtcDogRGF0ZSwgc3RhdGU6IG51bWJlcil7XG4gICAgdmFyIGZlZWRiYWNrU3RvcmU6SlNPTiA9IHRoaXMuZ2V0RmVlZGJhY2tTdG9yZSgpO1xuXG4gICAgZmVlZGJhY2tTdG9yZVtvcGVyYXRpb25VVUlEXSA9IHRoaXMuY3JlYXRlRmVlZGJhY2tPYmplY3RGb3JPcGVyYXRpb24odGltZVN0YW1wLCBzdGF0ZSk7XG5cbiAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJvcGVyYXRpb25GZWVkYmFja1N0b3JlXCIsIEpTT04uc3RyaW5naWZ5KGZlZWRiYWNrU3RvcmUpKTtcbiAgfVxuXG4gIGRlbGV0ZUZlZWRiYWNrRnJvbVN0b3JlKG9wZXJhdGlvblVVSUQ6IHN0cmluZykge1xuICAgIHZhciBmZWVkYmFja1N0b3JlOkpTT04gPSB0aGlzLmdldEZlZWRiYWNrU3RvcmUoKTtcblxuICAgIGRlbGV0ZSBmZWVkYmFja1N0b3JlW29wZXJhdGlvblVVSURdO1xuICAgIFxuICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcIm9wZXJhdGlvbkZlZWRiYWNrU3RvcmVcIiwgSlNPTi5zdHJpbmdpZnkoZmVlZGJhY2tTdG9yZSkpO1xuICB9XG5cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gXCI8U3RhY2tMYXlvdXQ+XFxuICAgIFxcbiAgICA8TGFiZWwgY2xhc3M9XFxcInNldHRpbmdzSGVhZGVyTGFiZWwgcC0xMFxcXCIgdGV4dD1cXFwiVG9uZWluc3RlbGx1bmdlblxcXCIgdGV4dEFsaWdubWVudD1cXFwiY2VudGVyXFxcIj48L0xhYmVsPlxcbiAgICA8U3RhY2tMYXlvdXQgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuXFxuICAgIDxHcmlkTGF5b3V0ICpuZ0lmPVxcXCJpc0FuZHJvaWRcXFwiIGNvbHVtbnM9XFxcIiosIGF1dG9cXFwiIHJvd3M9XFxcIipcXFwiIGNsYXNzPVxcXCJwLTEwXFxcIj5cXG4gICAgICAgIDxMYWJlbCAgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkxhdXRsb3MgYmVpIEFsYXJtIGF1ZmhlYmVuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgICAgIDxTd2l0Y2ggcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFtjaGVja2VkXT1cXFwiYWxlcnRXaGlsZU11dGVkXFxcIiAoY2hlY2tlZENoYW5nZSk9XFxcIm9uQ2hlY2tlZEFsZXJ0V2hpbGVNdXRlZENoYW5nZSgkZXZlbnQpXFxcIj48L1N3aXRjaD5cXG4gICAgPC9HcmlkTGF5b3V0PlxcbiAgICA8R3JpZExheW91dCAqbmdJZj1cXFwiaXNBbmRyb2lkXFxcIiBjb2x1bW5zPVxcXCIqLCBhdXRvXFxcIiByb3dzPVxcXCJhdXRvLGF1dG8sYXV0b1xcXCIgY2xhc3M9XFxcInAtMTBcXFwiPlxcbiAgICAgICAgPExhYmVsIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJBbGFybWllcnVuZ3NkYXVlclxcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiYWxlcnREdXJhdGlvbkluU2VjICsgJyBzJ1xcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8U2xpZGVyIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuPVxcXCIyXFxcIiBbdmFsdWVdPVxcXCJhbGVydER1cmF0aW9uSW5TZWNcXFwiIG1pblZhbHVlPVxcXCIxXFxcIiBtYXhWYWx1ZT1cXFwiMTBcXFwiICh2YWx1ZUNoYW5nZSk9XFxcIm9uU2xpZGVyVmFsdWVDaGFuZ2UoJGV2ZW50KVxcXCI+PC9TbGlkZXI+XFxuICAgIDwvR3JpZExheW91dD5cXG4gICAgPEdyaWRMYXlvdXQgKm5nSWY9XFxcImlzQW5kcm9pZFxcXCIgY29sdW1ucz1cXFwiKiwgKlxcXCIgcm93cz1cXFwiKiwqXFxcIiBjbGFzcz1cXFwicC0xMFxcXCI+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkFsYXJtaWVydW5nc3RvblxcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiYW5kcm9pZFJpbmd0b25lVGl0bGVcXFwiIGNsYXNzPVxcXCJzZXR0aW5nc0xhYmVsXFxcIiB0ZXh0V3JhcD1cXFwidHJ1ZVxcXCIgdGV4dEFsaWdubWVudD1cXFwicmlnaHRcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8QnV0dG9uIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuPVxcXCIyXFxcIiAodGFwKT1cXFwib25UYXBPcGVuUmluZ1RvbmUoJGV2ZW50KVxcXCIgY2xhc3M9XFxcInNldHRpbmdzQnV0dG9uXFxcIiB0ZXh0PVxcXCJBbGFybWllcnVuZ3N0b24gw6RuZGVyblxcXCI+PC9CdXR0b24+XFxuICAgIDwvR3JpZExheW91dD5cXG4gICAgXFxuICAgIDxMYWJlbCAqbmdJZj1cXFwiaXNJT1NcXFwiIHRleHQ9XFxcIkxhdXRsb3MgZHVyY2hicmVjaGVuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLTEwXFxcIj48L0xhYmVsPlxcbiAgICA8U3dpdGNoICpuZ0lmPVxcXCJpc0lPU1xcXCIgW2NoZWNrZWRdPVxcXCJjcml0aWNhbEFsZXJ0XFxcIiAoY2hlY2tlZENoYW5nZSk9XFxcIm9uQ2hlY2tlZENyaXRpY2FsQWxlcnRDaGFuZ2UoJGV2ZW50KVxcXCIgY2xhc3M9XFxcInNldHRpbmdzU3dpdGNoIG0tci0xMFxcXCI+PC9Td2l0Y2g+XFxuICAgIFxcbiAgICA8U3RhY2tMYXlvdXQgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuICAgIFxcbiAgICA8R3JpZExheW91dCAqbmdJZj1cXFwiaXNJT1NcXFwiIGNvbHVtbnM9XFxcImF1dG8sICpcXFwiIHJvd3M9XFxcIipcXFwiIGNsYXNzPVxcXCJwLTEwXFxcIj5cXG4gICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiQWxhcm1pZXJ1bmdzdG9uXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLXItMTBcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8IS0tPEJ1dHRvbiByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgKHRhcCk9XFxcIm9uVGFwT3BlblJpbmdUb25lSU9TKCRldmVudClcXFwiIGNsYXNzPVxcXCJzZXR0aW5nc0J1dHRvblxcXCIgdGV4dD1cXFwiQWxhcm1pZXJ1bmdzdG9uIMOkbmRlcm5cXFwiPjwvQnV0dG9uPi0tPlxcbiAgICAgICAgPCEtLTxMaXN0UGlja2VyIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIxXFxcIiBbaXRlbXNdPVxcXCJfaU9TUmluZ3RvbmVzXFxcIiBbc2VsZWN0ZWRJbmRleF09XFxcImlPU1NlbGVjdGVkUmluZ3RvbmVcXFwiIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cXFwib25TZWxlY3RlZFJpbmdUb25lSU9TQ2hhbmdlZCgkZXZlbnQpXFxcIj48L0xpc3RQaWNrZXI+IC0tPlxcbiAgICAgICAgPEJ1dHRvbiByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgKHRhcCk9XFxcIm9uVGFwT3BlbklPU1JpbmdldG9uZU1hbmFnZXIoJGV2ZW50KVxcXCIgY2xhc3M9XFxcInNldHRpbmdzQnV0dG9uXFxcIiB0ZXh0PVxcXCJBbGFybWllcnVuZ3N0b24gw6RuZGVyblxcXCI+PC9CdXR0b24+XFxuICAgIDwvR3JpZExheW91dD5cXG5cXG4gICAgPFN0YWNrTGF5b3V0ICpuZ0lmPVxcXCJpc0lPU1xcXCIgY2xhc3M9XFxcImhyIG0tMTBcXFwiPjwvU3RhY2tMYXlvdXQ+XFxuXFxuICAgIDxHcmlkTGF5b3V0IGNvbHVtbnM9XFxcIiosIGF1dG9cXFwiIHJvd3M9XFxcImF1dG8sYXV0byxhdXRvXFxcIiBjbGFzcz1cXFwicC0xMFxcXCI+XFxuICAgICAgICA8TGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkxhdXRzdMOkcmtlXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCI+PC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJhbGVydFZvbHVtZSAqIDEwICsgJyAlJ1xcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8U2xpZGVyIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuPVxcXCIyXFxcIiBbdmFsdWVdPVxcXCJhbGVydFZvbHVtZVxcXCIgbWluVmFsdWU9XFxcIjBcXFwiIG1heFZhbHVlPVxcXCIxMFxcXCIgKHZhbHVlQ2hhbmdlKT1cXFwib25Wb2x1bWVTbGlkZXJWYWx1ZUNoYW5nZSgkZXZlbnQpXFxcIj48L1NsaWRlcj5cXG4gICAgPC9HcmlkTGF5b3V0PlxcbiAgICA8QnV0dG9uICpuZ0lmPVxcXCJpc0lPU1xcXCIgdGV4dD1cXFwiVG9uIHRlc3RlblxcXCIgY2xhc3M9XFxcInNldHRpbmdzQnV0dG9uXFxcIiAodGFwKT1cXFwib25UYXBUZXN0QXVkaW8oJGV2ZW50KVxcXCI+PC9CdXR0b24+XFxuXFxuICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG4gICAgPEdyaWRMYXlvdXQgKm5nSWY9XFxcImlzQW5kcm9pZFxcXCIgY29sdW1ucz1cXFwiKiwgYXV0b1xcXCIgcm93cz1cXFwiKiwqXFxcIiBjbGFzcz1cXFwicC0xMFxcXCI+XFxuICAgICAgICA8TGFiZWwgIHJvdz1cXFwiMFxcXCIgY29sPVxcXCIwXFxcIiBjb2xzcGFuID0gXFxcIjJcXFwiIHRleHQ9XFxcIkhpbndlaXM6IERpZXNlIEZ1bmt0aW9uIGlzdCBudXIgdmVyZsO8Z2JhciwgZmFsbHMgJ0xhdXRsb3MgYmVpIEFsYXJtIGF1ZmhlYmVuJyBha3RpdiBpc3QuIERpZSBOYWNocmljaHQgd2lyZCBuYWNoIGRlbSBUb24gaW4gZGVyIE1lZGllbmxhdXRzdMOkcmtlIHZvcmdlbGVzZW4hXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJBbGFybXN0aWNod29ydCB2b3JsZXNlblxcXCIgY2xhc3M9XFxcInNldHRpbmdzTGFiZWxcXFwiIHZlcnRpY2FsQWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgICAgICA8U3dpdGNoIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbY2hlY2tlZF09XFxcImFsYXJtVGV4dFRvU3BlZWNoXFxcIiAoY2hlY2tlZENoYW5nZSk9XFxcIm9uQ2hlY2tlZEFsYXJtVGV4dFRvU3BlZWNoQ2hhbmdlKCRldmVudClcXFwiPjwvU3dpdGNoPlxcbiAgICA8L0dyaWRMYXlvdXQ+XFxuXFxuICAgIDxMYWJlbCAqbmdJZj1cXFwiaXNJT1NcXFwiIHRleHQ9XFxcIkhpbndlaXM6IERpZXNlIEZ1bmt0aW9uIGlzdCBudXIgdmVyZsO8Z2JhciwgZmFsbHMgJ0xhdXRsb3MgZHVyY2hicmVjaGVuJyBha3RpdiBpc3QuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbFxcXCIgdmVydGljYWxBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiPjwvTGFiZWw+XFxuICAgIDxMYWJlbCAqbmdJZj1cXFwiaXNJT1NcXFwiIHRleHQ9XFxcIkFsYXJtc3RpY2h3b3J0IHZvcmxlc2VuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLTEwXFxcIj48L0xhYmVsPlxcbiAgICA8U3dpdGNoICpuZ0lmPVxcXCJpc0lPU1xcXCIgW2NoZWNrZWRdPVxcXCJhbGFybVRleHRUb1NwZWVjaFxcXCIgKGNoZWNrZWRDaGFuZ2UpPVxcXCJvbkNoZWNrZWRBbGFybVRleHRUb1NwZWVjaENoYW5nZSgkZXZlbnQpXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NTd2l0Y2ggbS1yLTEwXFxcIj48L1N3aXRjaD5cXG4gICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcblxcbiAgICA8TGFiZWwgY2xhc3M9XFxcInAtMTAgc2V0dGluZ3NIZWFkZXJMYWJlbFxcXCIgdGV4dD1cXFwiR2Vyw6R0ZWluZm9ybWF0aW9uXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgIDxHcmlkTGF5b3V0IGNsYXNzPVxcXCJwLTEwIGRldmljZVNldHRpbmdzXFxcIiBjb2x1bW5zPVxcXCIqLCBhdXRvXFxcIiByb3dzPVxcXCJhdXRvLCBhdXRvLCBhdXRvLCBhdXRvLCBhdXRvLCAqLCBhdXRvXFxcIj4gXFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkhlcnN0ZWxsZXJcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiZGV2aWNlTWFudWZhY3R1cmVyXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJyaWdodFxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjFcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiTW9kZWxsXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImRldmljZU1vZGVsXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJyaWdodFxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjJcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiUGxhdHRmb3JtXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiMlxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImRldmljZU9TXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJyaWdodFxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiUGxhdHRmb3JtdmVyc2lvblxcXCI+PC9sYWJlbD5cXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjNcXFwiIGNvbD1cXFwiMVxcXCIgW3RleHRdPVxcXCJkZXZpY2VPU1ZlcnNpb25cXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNFxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJHZXLDpHRla2xhc3NlXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNFxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImRldmljZVR5cGVcXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNVxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJHZXLDpHRlLVVVSURcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCI1XFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiZGV2aWNlVXVpZFxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiNlxcXCIgY29sPVxcXCIwXFxcIiB0ZXh0PVxcXCJHZXLDpHRlLU5hbWVcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCI2XFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiZGV2aWNlTmFtZVxcXCIgdGV4dFdyYXA9XFxcInRydWVcXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICA8L0dyaWRMYXlvdXQ+XFxuXFxuICAgIDxTdGFja0xheW91dCBjbGFzcz1cXFwiaHIgbS0xMFxcXCI+PC9TdGFja0xheW91dD5cXG5cXG4gICAgPExhYmVsIGNsYXNzPVxcXCJwLTEwIHNldHRpbmdzSGVhZGVyTGFiZWxcXFwiIHRleHQ9XFxcIlNvbnN0aWdlIEZ1bmt0aW9uZW5cXFwiIHRleHRBbGlnbm1lbnQ9XFxcImNlbnRlclxcXCI+PC9MYWJlbD5cXG4gICAgPEJ1dHRvbiB0ZXh0PVxcXCJFaW5zYXR6bGlzdGUgbGVlcmVuXFxcIiBjbGFzcz1cXFwic2V0dGluZ3NCdXR0b25cXFwiICh0YXApPVxcXCJvblRhcFRvQ2xlYXJPcHMoJGV2ZW50KVxcXCI+PC9CdXR0b24+XFxuXFxuICAgIDxMYWJlbCBjbGFzcz1cXFwic2V0dGluZ3NMYWJlbCBwLTEwXFxcIiB0ZXh0PVxcXCJUb2tlbiBkaWVzZXMgR2Vyw6R0ZXM6XFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgIDxUZXh0VmlldyBbdGV4dF09ZmNtX3Rva2VuIGVkaXRhYmxlPVxcXCJmYWxzZVxcXCI+PC9UZXh0Vmlldz5cXG4gICAgPEJ1dHRvbiAodGFwKT1cXFwib25UYXBUb1NoYXJlRkNNS2V5KCRldmVudClcXFwiIGNsYXNzPVxcXCJzZXR0aW5nc0J1dHRvblxcXCIgdGV4dD1cXFwiVG9rZW4gdmVyc2VuZGVuXFxcIj48L0J1dHRvbj5cXG5cXG4gICAgPFN0YWNrTGF5b3V0IGNsYXNzPVxcXCJociBtLTEwXFxcIj48L1N0YWNrTGF5b3V0PlxcbiAgICA8TGFiZWwgY2xhc3M9XFxcInAtMTAgc2V0dGluZ3NIZWFkZXJMYWJlbFxcXCIgdGV4dD1cXFwiQXBwIEluZm9zXFxcIiB0ZXh0QWxpZ25tZW50PVxcXCJjZW50ZXJcXFwiPjwvTGFiZWw+XFxuICAgIDxHcmlkTGF5b3V0IGNsYXNzPVxcXCJwLTEwIGFwcFNldHRpbmdzXFxcIiBjb2x1bW5zPVxcXCIqLCBhdXRvXFxcIiByb3dzPVxcXCIqLCpcXFwiPiBcXG4gICAgICAgIDxsYWJlbCByb3c9XFxcIjBcXFwiIGNvbD1cXFwiMFxcXCIgdGV4dD1cXFwiQXBwIE5hbWVcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIwXFxcIiBjb2w9XFxcIjFcXFwiIFt0ZXh0XT1cXFwiYXBwTmFtZVxcXCIgdGV4dEFsaWdubWVudD1cXFwicmlnaHRcXFwiPjwvbGFiZWw+XFxuICAgICAgICA8bGFiZWwgcm93PVxcXCIxXFxcIiBjb2w9XFxcIjBcXFwiIHRleHQ9XFxcIkFwcCBWZXJzaW9uXFxcIj48L2xhYmVsPlxcbiAgICAgICAgPGxhYmVsIHJvdz1cXFwiMVxcXCIgY29sPVxcXCIxXFxcIiBbdGV4dF09XFxcImFwcFZlcnNpb25cXFwiIHRleHRBbGlnbm1lbnQ9XFxcInJpZ2h0XFxcIj48L2xhYmVsPlxcbiAgICA8L0dyaWRMYXlvdXQ+XFxuPC9TdGFja0xheW91dD5cIiIsIm1vZHVsZS5leHBvcnRzID0gXCIvKiBBZGQgbW9iaWxlIHN0eWxlcyBmb3IgdGhlIGNvbXBvbmVudCBoZXJlLiAgKi9cXG4uc2V0dGluZ3NIZWFkZXJMYWJlbCB7XFxuICBmb250LXNpemU6IDE4OyB9XFxuXFxuLnNldHRpbmdzTGFiZWwge1xcbiAgZm9udC1zaXplOiAxNTsgfVxcblxcbi5zZXR0aW5nc0J1dHRvbiB7XFxuICBhbmRyb2lkLWVsZXZhdGlvbjogNDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZjNkMDA7XFxuICBib3JkZXItY29sb3I6ICNjMzAwMDA7XFxuICBib3JkZXItcmFkaXVzOiA0O1xcbiAgYm9yZGVyLXdpZHRoOiAxO1xcbiAgY29sb3I6IHdoaXRlc21va2U7XFxuICBmb250LXNpemU6IDE1O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7IH1cXG5cXG4uc2V0dGluZ3NCdXR0b246YWN0aXZlIHtcXG4gIGFuZHJvaWQtZWxldmF0aW9uOiA4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2MzMDAwMDtcXG4gIGJvcmRlci1jb2xvcjogI2ZmM2QwMDtcXG4gIGJvcmRlci1yYWRpdXM6IDQ7XFxuICBib3JkZXItd2lkdGg6IDE7XFxuICBjb2xvcjogd2hpdGVzbW9rZTtcXG4gIGZvbnQtc2l6ZTogMTU7XFxuICBmb250LXdlaWdodDogYm9sZDsgfVxcblxcbi5jYW5jZWxCdXR0b24ge1xcbiAgYW5kcm9pZC1lbGV2YXRpb246IDQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzljOWM5O1xcbiAgYm9yZGVyLWNvbG9yOiAjMDAwMDAwO1xcbiAgYm9yZGVyLXJhZGl1czogNDtcXG4gIGJvcmRlci13aWR0aDogMTtcXG4gIGNvbG9yOiB3aGl0ZXNtb2tlO1xcbiAgZm9udC1zaXplOiAxNTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XFxuXFxuLmNhbmNlbEJ1dHRvbjphY3RpdmUge1xcbiAgYW5kcm9pZC1lbGV2YXRpb246IDg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO1xcbiAgYm9yZGVyLWNvbG9yOiAjYzljOWM5O1xcbiAgYm9yZGVyLXJhZGl1czogNDtcXG4gIGJvcmRlci13aWR0aDogMTtcXG4gIGNvbG9yOiB3aGl0ZXNtb2tlO1xcbiAgZm9udC1zaXplOiAxNTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkOyB9XFxuXCIiLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgTmdab25lLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIGZpcmViYXNlIGZyb21cIm5hdGl2ZXNjcmlwdC1wbHVnaW4tZmlyZWJhc2VcIjtcbmltcG9ydCAqIGFzIFNvY2lhbFNoYXJlIGZyb20gXCJuYXRpdmVzY3JpcHQtc29jaWFsLXNoYXJlXCI7XG5pbXBvcnQgKiBhcyBhcHBTZXR0aW5ncyBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy9hcHBsaWNhdGlvbi1zZXR0aW5nc1wiO1xuaW1wb3J0ICogYXMgYXBwbGljYXRpb24gZnJvbSBcInRucy1jb3JlLW1vZHVsZXMvYXBwbGljYXRpb25cIjtcbmltcG9ydCB7IGlzQW5kcm9pZCwgaXNJT1MsIGRldmljZSwgc2NyZWVuIH0gZnJvbSBcInRucy1jb3JlLW1vZHVsZXMvcGxhdGZvcm1cIjtcbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi8uLi9vcGVyYXRpb25zL3NoYXJlZC9vcGVyYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgTGlzdFZpZXdFdmVudERhdGEsIFJhZExpc3RWaWV3fSBmcm9tIFwibmF0aXZlc2NyaXB0LXVpLWxpc3R2aWV3XCI7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWRuYS1kZXZpY2VpbmZvJztcbmltcG9ydCB7IGFjdGlvbiwgQWN0aW9uT3B0aW9ucyB9IGZyb20gXCJ0bnMtY29yZS1tb2R1bGVzL3VpL2RpYWxvZ3NcIjtcbmltcG9ydCB7IExpc3RQaWNrZXIgfSBmcm9tIFwidG5zLWNvcmUtbW9kdWxlcy91aS9saXN0LXBpY2tlclwiO1xuaW1wb3J0IHsgRXZlbnREYXRhIH0gZnJvbSAndG5zLWNvcmUtbW9kdWxlcy91aS9wYWdlJztcbi8vIEF1ZGlvIHBsYXllciBmb3IgdGVzdGluZyBzb3VuZCBzZXR0aW5nc1xuaW1wb3J0IHsgVE5TUGxheWVyIH0gZnJvbSAnbmF0aXZlc2NyaXB0LWF1ZGlvLXBsYXllcic7XG5pbXBvcnQgeyBNb2RhbERpYWxvZ09wdGlvbnMsIE1vZGFsRGlhbG9nU2VydmljZSB9IGZyb20gXCJuYXRpdmVzY3JpcHQtYW5ndWxhci9tb2RhbC1kaWFsb2dcIjtcbmltcG9ydCB7IE1vZGFsUmluZ3RvbmVDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLXJpbmd0b25lL21vZGFsLXJpbmd0b25lLmNvbXBvbmVudCdcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25zLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZ3MuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIFxuICBwcml2YXRlIF9hbGVydER1cmF0aW9uSW5TZWM6bnVtYmVyO1xuICBwcml2YXRlIF9hbGVydFZvbHVtZTpudW1iZXI7XG4gIHByaXZhdGUgX2FuZHJvaWRSaW5ndG9uZVVSSTpzdHJpbmc7XG4gIHByaXZhdGUgX2FuZHJvaWRSaW5ndG9uZVRpdGxlOnN0cmluZztcbiAgcHJpdmF0ZSBfZmNtdG9rZW46c3RyaW5nO1xuICBwcml2YXRlIF9hbGVydFdoaWxlTXV0ZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NyaXRpY2FsQWxlcnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FsYXJtVGV4dFRvU3BlZWNoOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX2lPU1Jpbmd0b25lczogQXJyYXk8c3RyaW5nPiA9IFtcImRlZmF1bHRcIiwgXCJiYmFhYmJhYS53YXZcIl07XG4gIHByaXZhdGUgX2lPU1NlbGVjdGVkUmluZ3RvbmU6IG51bWJlcjtcblxuICBwcml2YXRlIF9wbGF5ZXI6IFROU1BsYXllcjtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX29wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsRGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIF92Y1JlZjogVmlld0NvbnRhaW5lclJlZixcblxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5fYWxlcnRXaGlsZU11dGVkID0gdGhpcy5nZXRBbGVydFdoaWxlTXV0ZWQoKTtcbiAgICB0aGlzLl9jcml0aWNhbEFsZXJ0ID0gdGhpcy5nZXRDcml0aWNhbEFsZXJ0KCk7XG4gICAgdGhpcy5faU9TU2VsZWN0ZWRSaW5ndG9uZSA9IHRoaXMuZ2V0aU9TU2VsZWN0ZWRSaW5ndG9uZUluZGV4KCk7XG5cbiAgICB0aGlzLl9hbGVydER1cmF0aW9uSW5TZWMgPSB0aGlzLmdldEFsZXJ0RHVyYXRpb25JblNlYygpO1xuICAgIHRoaXMuX2FsZXJ0Vm9sdW1lID0gdGhpcy5nZXRBbGVydFZvbHVtZSgpO1xuICAgIFxuICAgIHRoaXMuX2FuZHJvaWRSaW5ndG9uZVVSSSA9IHRoaXMuZ2V0QW5kcm9pZFJpbmd0b25lVVJJKCk7XG5cbiAgICB0aGlzLl9hbGFybVRleHRUb1NwZWVjaCA9IHRoaXMuZ2V0QWxhcm1UZXh0VG9TcGVlY2goKTtcblxuICAgIC8vIEdldCBGQ00gVG9rZW5cbiAgICBmaXJlYmFzZS5nZXRDdXJyZW50UHVzaFRva2VuKCkudGhlbigodG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgLy8gbWF5IGJlIG51bGwgaWYgbm90IGtub3duIHlldFxuICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgcHVzaCB0b2tlbjogJHt0b2tlbn1gKTtcbiAgICAgIHRoaXMuX2ZjbXRva2VuID0gdG9rZW47XG4gICAgfSk7XG5cbiAgICBpZiAoaXNBbmRyb2lkKXtcbiAgICAgIGFwcGxpY2F0aW9uLmFuZHJvaWQub24oYXBwbGljYXRpb24uQW5kcm9pZEFwcGxpY2F0aW9uLmFjdGl2aXR5UmVzdWx0RXZlbnQsIGZ1bmN0aW9uIChhcmdzOiBhcHBsaWNhdGlvbi5BbmRyb2lkQWN0aXZpdHlSZXN1bHRFdmVudERhdGEpIHtcbiAgICAgICAgaWYgKGFyZ3MucmVxdWVzdENvZGUgPT0gMTExKXtcbiAgICAgICAgICAvLyBSaW5ndG9uZVBpY2tlclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiRXZlbnQ6IFwiICsgYXJncy5ldmVudE5hbWUgKyBcIiwgQWN0aXZpdHk6IFwiICsgYXJncy5hY3Rpdml0eSArIFwiLCByZXF1ZXN0Q29kZTogXCIgKyBhcmdzLnJlcXVlc3RDb2RlICsgXCIsIHJlc3VsdENvZGU6IFwiICsgYXJncy5yZXN1bHRDb2RlICsgXCIsIEludGVudDogXCIgKyBhcmdzLmludGVudCk7XG4gICAgICAgICAgdmFyIGludGVudFJlc3VsdDogYW5kcm9pZC5jb250ZW50LkludGVudCA9IGFyZ3MuaW50ZW50O1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChpbnRlbnRSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHJpbmd0b25lX1VSSSA9IGludGVudFJlc3VsdC5nZXRQYXJjZWxhYmxlRXh0cmEoYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuRVhUUkFfUklOR1RPTkVfUElDS0VEX1VSSSk7XG4gICAgICAgICAgICBpZiAocmluZ3RvbmVfVVJJICE9IG51bGwpe1xuICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJhbmRyb2lkUmluZ1RvbmVcIixyaW5ndG9uZV9VUkkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmRyb2lkUmluZ3RvbmVVUkkoKTtcbiAgICAgICAgICAgICAgfSkgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmY21fdG9rZW4oKTpzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mY210b2tlbjtcbiAgfVxuICBnZXQgYWxlcnRXaGlsZU11dGVkKCk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsZXJ0V2hpbGVNdXRlZDtcbiAgfVxuXG4gIGdldCBjcml0aWNhbEFsZXJ0KCk6Ym9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyaXRpY2FsQWxlcnQ7XG4gIH1cblxuICBnZXQgYWxlcnREdXJhdGlvbkluU2VjKCk6bnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYWxlcnREdXJhdGlvbkluU2VjO1xuICB9XG5cbiAgZ2V0IGFsZXJ0Vm9sdW1lKCk6bnVtYmVyIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuX2FsZXJ0Vm9sdW1lKTtcbiAgfVxuXG4gIGdldCBhbGFybVRleHRUb1NwZWVjaCgpOmJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbGFybVRleHRUb1NwZWVjaDtcbiAgfVxuXG4gIGdldCBhbmRyb2lkUmluZ3RvbmVVUkkoKTpzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuX2FuZHJvaWRSaW5ndG9uZVVSSTtcbiAgfVxuXG4gIGdldCBhbmRyb2lkUmluZ3RvbmVUaXRsZSgpOnN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5fYW5kcm9pZFJpbmd0b25lVGl0bGU7XG4gIH1cbiAgZ2V0IGlPU1NlbGVjdGVkUmluZ3RvbmUoKTpudW1iZXJ7XG4gICAgcmV0dXJuIHRoaXMuX2lPU1NlbGVjdGVkUmluZ3RvbmU7XG4gIH1cblxuICBzZXQgYW5kcm9pZFJpbmdUb25lVGl0bGUoYW5kcm9pZFJpbmd0b25lVGl0bGUpe1xuICAgIHRoaXMuX2FuZHJvaWRSaW5ndG9uZVRpdGxlID0gYW5kcm9pZFJpbmd0b25lVGl0bGU7ICBcbiAgfVxuXG4gIC8qKlxuICAgICAqIERldmljZS1JbmZvcm1hdGlvbiBnZXR0ZXJzXG4gICAgICovXG4gIGdldCBkZXZpY2VNb2RlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZXZpY2UubW9kZWw7XG4gIH1cbiAgZ2V0IGRldmljZU1hbnVmYWN0dXJlcigpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGRldmljZS5tYW51ZmFjdHVyZXI7XG4gIH1cbiAgZ2V0IGRldmljZU9TKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gZGV2aWNlLm9zO1xuICB9XG4gIGdldCBkZXZpY2VPU1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBkZXZpY2Uub3NWZXJzaW9uO1xuICB9XG4gIGdldCBkZXZpY2VVdWlkKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gZGV2aWNlLnV1aWQ7XG4gIH1cbiAgZ2V0IGRldmljZVR5cGUoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBkZXZpY2UuZGV2aWNlVHlwZTtcbiAgfVxuICBnZXQgZGV2aWNlTmFtZSgpOiBzdHJpbmcgIHtcbiAgICAgcmV0dXJuIERldmljZUluZm8uZGV2aWNlTmFtZSgpO1xuICB9XG4gIGdldCBhcHBOYW1lKCk6IHN0cmluZyAge1xuICAgIHJldHVybiBEZXZpY2VJbmZvLmFwcE5hbWUoKTtcbiAgfVxuICBnZXQgYXBwVmVyc2lvbigpOiBzdHJpbmcgIHtcbiAgICByZXR1cm4gRGV2aWNlSW5mby5hcHBWZXJzaW9uKCk7XG4gIH1cblxuICBnZXQgaXNBbmRyb2lkKCk6Ym9vbGVhbiB7XG4gICAgICByZXR1cm4gaXNBbmRyb2lkO1xuICB9XG5cbiAgZ2V0IGlzSU9TKCk6Ym9vbGVhbiB7XG4gICAgICByZXR1cm4gaXNJT1M7XG4gIH1cbiAgXG4gIGdldEFsZXJ0V2hpbGVNdXRlZCgpe1xuICAgICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldEJvb2xlYW4oXCJzZXR0aW5nQWxlcnRXaGlsZU11dGVkXCIpO1xuICB9XG5cbiAgZ2V0Q3JpdGljYWxBbGVydCgpe1xuICAgIGlmIChhcHBTZXR0aW5ncy5nZXRCb29sZWFuKFwic2V0dGluZ0NyaXRpY2FsQWxlcnRcIikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdDcml0aWNhbEFsZXJ0XCIsIHRydWUpO1xuXG4gICAgICBpZiAoaXNJT1Mpe1xuICAgICAgICBjb25zdCB1c2VyRGVmYXVsdHMgPSBpc0lPUyA/IE5TVXNlckRlZmF1bHRzLmFsbG9jKCkuaW5pdFdpdGhTdWl0ZU5hbWUoJ2dyb3VwLmRlLmFsYXJtaWF0b3IuaW9zJykgOiB1bmRlZmluZWQ7XG4gICAgICAgIHVzZXJEZWZhdWx0cy5zZXRCb29sRm9yS2V5KHRydWUsXCJzZXR0aW5nQ3JpdGljYWxBbGVydFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldEJvb2xlYW4oXCJzZXR0aW5nQ3JpdGljYWxBbGVydFwiLHRydWUpO1xuICB9XG5cbiAgZ2V0QWxhcm1UZXh0VG9TcGVlY2goKXtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0Qm9vbGVhbihcInNldHRpbmdBbGFybVRleHRUb1NwZWVjaFwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcHBTZXR0aW5ncy5zZXRCb29sZWFuKFwic2V0dGluZ0FsYXJtVGV4dFRvU3BlZWNoXCIsIGZhbHNlKTtcblxuICAgICAgaWYgKGlzSU9TKXtcbiAgICAgICAgY29uc3QgdXNlckRlZmF1bHRzID0gaXNJT1MgPyBOU1VzZXJEZWZhdWx0cy5hbGxvYygpLmluaXRXaXRoU3VpdGVOYW1lKCdncm91cC5kZS5hbGFybWlhdG9yLmlvcycpIDogdW5kZWZpbmVkO1xuICAgICAgICB1c2VyRGVmYXVsdHMuc2V0Qm9vbEZvcktleShmYWxzZSxcInNldHRpbmdBbGFybVRleHRUb1NwZWVjaFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldEJvb2xlYW4oXCJzZXR0aW5nQWxhcm1UZXh0VG9TcGVlY2hcIixmYWxzZSk7XG4gIH1cblxuICBnZXRpT1NTZWxlY3RlZFJpbmd0b25lSW5kZXgoKXtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwic2V0dGluZ0lPU1Jpbmd0b25lXCIpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcInNldHRpbmdJT1NSaW5ndG9uZVwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgIGlmIChpc0lPUyl7XG4gICAgICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdXNlckRlZmF1bHRzLnNldE9iamVjdEZvcktleShcImRlZmF1bHRcIixcImlPU1JpbmdUb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pT1NSaW5ndG9uZXMuaW5kZXhPZihhcHBTZXR0aW5ncy5nZXRTdHJpbmcoXCJzZXR0aW5nSU9TUmluZ3RvbmVcIixcImRlZmF1bHRcIikpXG4gIH1cblxuICBnZXRBbGVydER1cmF0aW9uSW5TZWMoKXtcbiAgICBpZiAoYXBwU2V0dGluZ3MuZ2V0TnVtYmVyKFwic2V0dGluZ0FsZXJ0RHVyYXRpb25JblNlY1wiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFwcFNldHRpbmdzLnNldE51bWJlcihcInNldHRpbmdBbGVydER1cmF0aW9uSW5TZWNcIiwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldE51bWJlcihcInNldHRpbmdBbGVydER1cmF0aW9uSW5TZWNcIik7XG4gIH1cblxuICBnZXRBbGVydFZvbHVtZSgpe1xuICAgIGlmIChhcHBTZXR0aW5ncy5nZXROdW1iZXIoXCJzZXR0aW5nQWxlcnRWb2x1bWVcIikgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhcHBTZXR0aW5ncy5zZXROdW1iZXIoXCJzZXR0aW5nQWxlcnRWb2x1bWVcIiwgMTApO1xuICAgIH1cblxuICAgIHJldHVybiBhcHBTZXR0aW5ncy5nZXROdW1iZXIoXCJzZXR0aW5nQWxlcnRWb2x1bWVcIik7XG4gIH1cblxuICBnZXRBbmRyb2lkUmluZ3RvbmVVUkkoKXtcbiAgICBpZiAoaXNBbmRyb2lkKXtcbiAgICAgICAgaWYgKGFwcFNldHRpbmdzLmdldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgdXJpID0gYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuZ2V0RGVmYXVsdFVyaShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5UWVBFX05PVElGSUNBVElPTik7XG4gICAgICAgICAgICBpZiAodXJpICE9IG51bGwpe1xuICAgICAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiLCB1cmkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmkgPSBhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5nZXREZWZhdWx0VXJpKGFuZHJvaWQubWVkaWEuUmluZ3RvbmVNYW5hZ2VyLlRZUEVfQUxBUk0pO1xuICAgICAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiLCB1cmkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJpbmd0b25lID0gYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuZ2V0UmluZ3RvbmUoYXBwbGljYXRpb24uYW5kcm9pZC5jb250ZXh0LCBhbmRyb2lkLm5ldC5VcmkucGFyc2UoYXBwU2V0dGluZ3MuZ2V0U3RyaW5nKFwiYW5kcm9pZFJpbmdUb25lXCIpLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgdmFyIHJpbmd0b25lVGl0bGUgPSByaW5ndG9uZS5nZXRUaXRsZShhcHBsaWNhdGlvbi5hbmRyb2lkLmNvbnRleHQpO1xuICAgICAgICB0aGlzLmFuZHJvaWRSaW5nVG9uZVRpdGxlID0gcmluZ3RvbmVUaXRsZTtcbiAgICAgICAgcmV0dXJuIGFwcFNldHRpbmdzLmdldFN0cmluZyhcImFuZHJvaWRSaW5nVG9uZVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hlY2tlZEFsZXJ0V2hpbGVNdXRlZENoYW5nZShzbGlkZXIpe1xuICAgICAgdGhpcy5fYWxlcnRXaGlsZU11dGVkID0gc2xpZGVyLnZhbHVlO1xuICAgICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdBbGVydFdoaWxlTXV0ZWRcIixzbGlkZXIudmFsdWUpO1xuICB9XG5cbiAgb25DaGVja2VkQ3JpdGljYWxBbGVydENoYW5nZShzbGlkZXIpe1xuICAgIHRoaXMuX2NyaXRpY2FsQWxlcnQgPSBzbGlkZXIudmFsdWU7XG4gICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdDcml0aWNhbEFsZXJ0XCIsc2xpZGVyLnZhbHVlKTtcblxuICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICB1c2VyRGVmYXVsdHMuc2V0Qm9vbEZvcktleShzbGlkZXIudmFsdWUsXCJzZXR0aW5nQ3JpdGljYWxBbGVydFwiKTtcbiAgfVxuXG4gIG9uQ2hlY2tlZEFsYXJtVGV4dFRvU3BlZWNoQ2hhbmdlKHNsaWRlcil7XG4gICAgdGhpcy5fYWxhcm1UZXh0VG9TcGVlY2ggPSBzbGlkZXIudmFsdWU7XG4gICAgYXBwU2V0dGluZ3Muc2V0Qm9vbGVhbihcInNldHRpbmdBbGFybVRleHRUb1NwZWVjaFwiLHNsaWRlci52YWx1ZSk7XG5cbiAgICBpZiAoaXNJT1Mpe1xuICAgICAgY29uc3QgdXNlckRlZmF1bHRzID0gaXNJT1MgPyBOU1VzZXJEZWZhdWx0cy5hbGxvYygpLmluaXRXaXRoU3VpdGVOYW1lKCdncm91cC5kZS5hbGFybWlhdG9yLmlvcycpIDogdW5kZWZpbmVkO1xuICAgICAgdXNlckRlZmF1bHRzLnNldEJvb2xGb3JLZXkoc2xpZGVyLnZhbHVlLFwic2V0dGluZ0FsYXJtVGV4dFRvU3BlZWNoXCIpO1xuICAgIH1cbiAgfVxuXG4gIG9uVGFwVG9TaGFyZUZDTUtleShldmVudCl7XG4gICAgICBTb2NpYWxTaGFyZS5zaGFyZVRleHQodGhpcy5mY21fdG9rZW4pO1xuICB9XG5cbiAgb25TbGlkZXJWYWx1ZUNoYW5nZShzbGlkZXIpe1xuICAgIGFwcFNldHRpbmdzLnNldE51bWJlcihcInNldHRpbmdBbGVydER1cmF0aW9uSW5TZWNcIixzbGlkZXIudmFsdWUpO1xuICAgIHRoaXMuX2FsZXJ0RHVyYXRpb25JblNlYyA9IHRoaXMuZ2V0QWxlcnREdXJhdGlvbkluU2VjKCk7XG4gIH1cblxuICBvblRhcE9wZW5SaW5nVG9uZShldmVudCl7XG4gICAgaWYgKGlzQW5kcm9pZCl7XG4gICAgICAgIHZhciBjdXJyZW50VVJJID0gdGhpcy5nZXRBbmRyb2lkUmluZ3RvbmVVUkkoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIkN1cnJlbnRVUkk6XCIgKyBjdXJyZW50VVJJKTtcbiAgICAgICAgdmFyIGludGVudCA9IG5ldyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50KGFuZHJvaWQubWVkaWEuUmluZ3RvbmVNYW5hZ2VyLkFDVElPTl9SSU5HVE9ORV9QSUNLRVIpO1xuXG4gICAgICAgIGludGVudC5wdXRFeHRyYShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5FWFRSQV9SSU5HVE9ORV9USVRMRSwgXCJXw6RobGUgVG9uIGbDvHIgQUxBUk1pYXRvclwiKTtcbiAgICAgICAgaW50ZW50LnB1dEV4dHJhKGFuZHJvaWQubWVkaWEuUmluZ3RvbmVNYW5hZ2VyLkVYVFJBX1JJTkdUT05FX1NIT1dfU0lMRU5ULCBmYWxzZSk7XG4gICAgICAgIGludGVudC5wdXRFeHRyYShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5FWFRSQV9SSU5HVE9ORV9TSE9XX0RFRkFVTFQsIHRydWUpO1xuICAgICAgICBpbnRlbnQucHV0RXh0cmEoYW5kcm9pZC5tZWRpYS5SaW5ndG9uZU1hbmFnZXIuRVhUUkFfUklOR1RPTkVfVFlQRSxhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5UWVBFX05PVElGSUNBVElPTik7XG4gICAgICAgIGludGVudC5wdXRFeHRyYShhbmRyb2lkLm1lZGlhLlJpbmd0b25lTWFuYWdlci5FWFRSQV9SSU5HVE9ORV9FWElTVElOR19VUkksIGFuZHJvaWQubmV0LlVyaS5wYXJzZShjdXJyZW50VVJJKSk7XG5cbiAgICAgICAgYXBwbGljYXRpb24uYW5kcm9pZC5mb3JlZ3JvdW5kQWN0aXZpdHkuc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIDExMSk7XG5cbiAgICAgICAgLy8gVE9ETzogUmVmcmVzaCBzZXR0aW5ncyB2aWV3XG4gICAgfSBcbiAgfVxuXG4gIC8qKlxuICAgKiBwbGF5cyBzZWxlY3RkIFNvdW5kZmlsZSBhcyBhbGFybWluZyBzb3VuZCBmb3IgdGVzdGluZyBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gZXZlbnQgXG4gICAqL1xuICBvblRhcFRlc3RBdWRpbyhldmVudCkge1xuICAgIGlmICh0aGlzLl9pT1NSaW5ndG9uZXNbdGhpcy5faU9TU2VsZWN0ZWRSaW5ndG9uZV0gIT0gJ2RlZmF1bHQnKSB7XG4gICAgICAvLyBwbGF5IHNlbGVjdGVkIFJpbmdUb25lXG4gICAgICB2YXIgcmluZ1RvbmVUb1BsYXkgPSB0aGlzLl9pT1NSaW5ndG9uZXNbdGhpcy5faU9TU2VsZWN0ZWRSaW5ndG9uZV07XG4gICAgICBjb25zb2xlLmxvZygnVGVzdGluZyBTb3VuZCBTZXR0aW5ncyB3aXRoIHJpbmd0b25lOiAnICsgcmluZ1RvbmVUb1BsYXkpO1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFROU1BsYXllcigpO1xuICAgICAgdGhpcy5fcGxheWVyLmRlYnVnID0gdHJ1ZTsgLy8gc2V0IHRydWUgdG8gZW5hYmxlIFROU1BsYXllciBjb25zb2xlIGxvZ3MgZm9yIGRlYnVnZ2luZy5cbiAgICAgIHRoaXMuX3BsYXllclxuICAgICAgICAuaW5pdEZyb21GaWxlKHtcbiAgICAgICAgICBhdWRpb0ZpbGU6ICd+Ly4uLycgKyByaW5nVG9uZVRvUGxheSwgLy8gfiA9IGFwcCBkaXJlY3RvcnlcbiAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICBjb21wbGV0ZUNhbGxiYWNrOiB0aGlzLl90cmFja0NvbXBsZXRlLmJpbmQodGhpcyksXG4gICAgICAgICAgZXJyb3JDYWxsYmFjazogdGhpcy5fdHJhY2tFcnJvci5iaW5kKHRoaXMpXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9wbGF5ZXIuZ2V0QXVkaW9UcmFja0R1cmF0aW9uKCkudGhlbihkdXJhdGlvbiA9PiB7XG4gICAgICAgICAgICAvLyBpT1M6IGR1cmF0aW9uIGlzIGluIHNlY29uZHNcbiAgICAgICAgICAgIC8vIEFuZHJvaWQ6IGR1cmF0aW9uIGlzIGluIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uc29sZS5sb2coYERhdWVyIGRlcyBLbGluZ2VsdG9uczpgLCBkdXJhdGlvbik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdQbGF5aW5nIHdpdGggVm9sdW1lOiAnICsgdGhpcy5fYWxlcnRWb2x1bWUpO1xuICAgICAgICAgIHRoaXMuX3BsYXllci52b2x1bWUgPSAodGhpcy5fYWxlcnRWb2x1bWUgLyAxMCk7XG4gICAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgc2VsZWN0ZWQsIG5vdCBwbGF5aW5nIGFueXRoaW5nXG4gICAgICBjb25zb2xlLmxvZygnZGVmYXVsdCBzZWxlY3RlZCwgbm90IHBsYXlpbmcgYW55dGhpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2FsbGVkIGFmdGVyIHNlbGVjdGVkIFNvdW5kZmlsZSBoYXMgYmVlbiBwbGF5ZWQgc3VjY2Vzc2Z1bGx5XG4gICAqIEBwYXJhbSBhcmdzIFxuICAgKi9cbiAgcHJpdmF0ZSBfdHJhY2tDb21wbGV0ZShhcmdzOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnUmVmZXJlbnogenVyIFBsYXllciBJbnN0YW56OicsIGFyZ3MucGxheWVyKTtcbiAgICBjb25zb2xlLmxvZygnS29ubnRlIEtsaW5nZWx0b24gYWJnZXNwaWVsdCB3ZXJkZW46JywgYXJncy5mbGFnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxsZWQgaWYgdGhlcmVzIGJlZW4gYW4gZXJyb3IgcGxheWluZyBzb3VuZGZpbGVcbiAgICogQHBhcmFtIGFyZ3MgXG4gICAqL1xuICBwcml2YXRlIF90cmFja0Vycm9yKGFyZ3M6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdFUlJPUjogUmVmZXJlbnogenVyIFBsYXllciBJbnN0YW56OicsIGFyZ3MucGxheWVyKTtcbiAgICBjb25zb2xlLmxvZygnRVJST1I6IEZlaGxlcm1lbGR1bmc6JywgYXJncy5lcnJvcik7XG4gICAgLy8gQW5kcm9pZCBvbmx5OiBleHRyYSBkZXRhaWwgb24gZXJyb3JcbiAgICBjb25zb2xlLmxvZygnRVJST1I6IE1laHIgSW5mb3JtYXRpb25lbiB6dW0gUGxheWVyOicsIGFyZ3MuZXh0cmEpO1xuICB9XG5cblxuICBvblRhcE9wZW5SaW5nVG9uZUlPUyhldmVudCl7XG4gICAgY29uc3QgYWN0aW9uT3B0aW9uczogQWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgIHRpdGxlOiBcIlRvbmF1c3dhaGxcIixcbiAgICAgIG1lc3NhZ2U6IFwiV8OkaGxlIGRlaW5lbiBUb25cIixcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiQWJicmVjaGVuXCIsXG4gICAgICBhY3Rpb25zOiBbXCJkZWZhdWx0XCIsIFwiYmJhYWJiYWEud2F2XCJdLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSAvLyBBbmRyb2lkIG9ubHlcbiAgfTtcblxuICBhY3Rpb24oYWN0aW9uT3B0aW9ucykudGhlbigocmVzdWx0KSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2FjdGlvbjogJyArIHJlc3VsdCk7XG4gICAgYXBwU2V0dGluZ3Muc2V0U3RyaW5nKFwiaU9TUmluZ1RvbmVcIiwgcmVzdWx0KTtcbiAgICBcbiAgICBjb25zdCB1c2VyRGVmYXVsdHMgPSBpc0lPUyA/IE5TVXNlckRlZmF1bHRzLmFsbG9jKCkuaW5pdFdpdGhTdWl0ZU5hbWUoJ2dyb3VwLmRlLmFsYXJtaWF0b3IuaW9zJykgOiB1bmRlZmluZWQ7XG4gICAgdXNlckRlZmF1bHRzLnNldE9iamVjdEZvcktleShyZXN1bHQsXCJpT1NSaW5nVG9uZVwiKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWRSaW5nVG9uZUlPU0NoYW5nZWQoYXJnczogRXZlbnREYXRhKSB7XG4gICAgY29uc3QgcGlja2VyID0gPExpc3RQaWNrZXI+YXJncy5vYmplY3Q7XG4gICAgY29uc29sZS5sb2coYCR7dGhpcy5faU9TUmluZ3RvbmVzW3BpY2tlci5zZWxlY3RlZEluZGV4XX1gKTtcbiAgICBhcHBTZXR0aW5ncy5zZXRTdHJpbmcoXCJzZXR0aW5nSU9TUmluZ3RvbmVcIix0aGlzLl9pT1NSaW5ndG9uZXNbcGlja2VyLnNlbGVjdGVkSW5kZXhdKTtcbiAgICB0aGlzLl9pT1NTZWxlY3RlZFJpbmd0b25lID0gcGlja2VyLnNlbGVjdGVkSW5kZXg7XG4gICAgaWYgKGlzSU9TKXtcbiAgICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICAgIHVzZXJEZWZhdWx0cy5zZXRPYmplY3RGb3JLZXkodGhpcy5faU9TUmluZ3RvbmVzW3BpY2tlci5zZWxlY3RlZEluZGV4XSxcImlPU1JpbmdUb25lXCIpO1xuICAgIH1cbn1cblxuICBvblZvbHVtZVNsaWRlclZhbHVlQ2hhbmdlKHNsaWRlcil7XG4gICAgYXBwU2V0dGluZ3Muc2V0TnVtYmVyKFwic2V0dGluZ0FsZXJ0Vm9sdW1lXCIsc2xpZGVyLnZhbHVlKTtcbiAgICB0aGlzLl9hbGVydFZvbHVtZSA9IHRoaXMuZ2V0QWxlcnRWb2x1bWUoKTtcbiAgICBpZiAoaXNJT1MpIHtcbiAgICAgIGNvbnN0IHVzZXJEZWZhdWx0cyA9IGlzSU9TID8gTlNVc2VyRGVmYXVsdHMuYWxsb2MoKS5pbml0V2l0aFN1aXRlTmFtZSgnZ3JvdXAuZGUuYWxhcm1pYXRvci5pb3MnKSA6IHVuZGVmaW5lZDtcbiAgICAgIHVzZXJEZWZhdWx0cy5zZXRGbG9hdEZvcktleShzbGlkZXIudmFsdWUsXCJzZXR0aW5nQWxlcnRWb2x1bWVcIik7XG4gICAgfVxuICB9XG5cbiAgb25UYXBUb0NsZWFyT3BzKGFyZ3M6IExpc3RWaWV3RXZlbnREYXRhKXtcbiAgICB0aGlzLl9vcGVyYXRpb25TZXJ2aWNlLmNsZWFyT3BlcmF0aW9ucygpO1xuICB9XG5cbiAgb25UYXBPcGVuSU9TUmluZ2V0b25lTWFuYWdlcihldmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnM6IE1vZGFsRGlhbG9nT3B0aW9ucyA9IHtcbiAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy5fdmNSZWYsXG4gICAgICAgIGNvbnRleHQ6IHt9LFxuICAgICAgICBmdWxsc2NyZWVuOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuX21vZGFsU2VydmljZS5zaG93TW9kYWwoTW9kYWxSaW5ndG9uZUNvbXBvbmVudCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTU9EQUwgQ0xPU0VEXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk1vZGFsIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==