UNPKG

@tricoteuses/assemblee

Version:

Retrieve, clean up & handle French Assemblée nationale's open data

630 lines (627 loc) 70.5 kB
"use strict"; require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.symbol.iterator.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.object.define-property.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Decision = exports.Convert = void 0; require("core-js/modules/es.symbol.to-primitive.js"); require("core-js/modules/es.array.concat.js"); require("core-js/modules/es.array.for-each.js"); require("core-js/modules/es.array.index-of.js"); require("core-js/modules/es.array.is-array.js"); require("core-js/modules/es.array.join.js"); require("core-js/modules/es.array.map.js"); require("core-js/modules/es.date.to-json.js"); require("core-js/modules/es.date.to-primitive.js"); require("core-js/modules/es.date.to-string.js"); require("core-js/modules/es.number.constructor.js"); require("core-js/modules/es.object.get-own-property-names.js"); require("core-js/modules/es.object.keys.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/web.dom-collections.for-each.js"); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // To parse this data: // // import { Convert, ComptesRendus, CompteRenduWrapper } from "./file"; // // const compteRendu = Convert.toCompteRendu(json); // const compteRenduWrapper = Convert.toCompteRenduWrapper(json); // // These functions will throw an error if the JSON doesn't // match the expected interface, even if the JSON is valid. var Decision = exports.Decision = /*#__PURE__*/function (Decision) { Decision["AdoptionAmendementMainLev\xE9eAdt"] = "ADOPTION amendement (main lev\xE9e) adt"; Decision["AdoptionDUnArticleVote\xC0MainLev\xE9e"] = "ADOPTION d\u2019un article (vote \xE0 main lev\xE9e)"; Decision["AdoptionDUnSousAmendementMainLev\xE9eSsAdt"] = "ADOPTION d\u2019un sous-amendement (main lev\xE9e) ss-adt"; Decision["AdoptionDePlusieursAmendementsMainLev\xE9eAdts"] = "ADOPTION de plusieurs amendements (main lev\xE9e) adts"; Decision["AdoptionDePlusieursSousAmendementsMainLev\xE9eSsAdts"] = "ADOPTION de plusieurs sous-amendements (main lev\xE9e) ss-adts"; Decision["Empty"] = ""; Decision["RejetDUnAmendementMainLev\xE9eAdt"] = "REJET d\u2019un amendement (main lev\xE9e) adt"; Decision["RejetDUnArticleVote\xC0MainLev\xE9e"] = "REJET d\u2019un article (vote \xE0 main lev\xE9e)"; Decision["RejetDUnSousAmendementMainLev\xE9eSsAdt"] = "REJET d\u2019un sous-amendement (main lev\xE9e) ss-adt"; Decision["RejetDePlusieursAmendementsMainLev\xE9eAdts"] = "REJET de plusieurs amendements (main lev\xE9e) adts"; Decision["RejetDePlusieursSousAmendementsMainLev\xE9eSsAdts"] = "REJET de plusieurs sous-amendements (main lev\xE9e) ss-adts"; Decision["RejetMotionDeRejetPr\xE9alableMainLev\xE9e"] = "REJET motion de rejet pr\xE9alable (main lev\xE9e)"; return Decision; }({}); // Converts JSON strings to/from your types // and asserts the results of JSON.parse at runtime var Convert = exports.Convert = /*#__PURE__*/function () { function Convert() { _classCallCheck(this, Convert); } return _createClass(Convert, null, [{ key: "toComptesRendus", value: function toComptesRendus(json) { return cast(JSON.parse(json), r("ComptesRendus")); } }, { key: "comptesRendusToJson", value: function comptesRendusToJson(value) { return JSON.stringify(uncast(value, r("ComptesRendus")), null, 2); } }, { key: "toCompteRenduWrapper", value: function toCompteRenduWrapper(json) { return cast(JSON.parse(json), r("CompteRenduWrapper")); } }, { key: "compteRenduWrapperToJson", value: function compteRenduWrapperToJson(value) { return JSON.stringify(uncast(value, r("CompteRenduWrapper")), null, 2); } }]); }(); function invalidValue(typ, val, key) { var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; var prettyTyp = prettyTypeName(typ); var parentText = parent ? " on ".concat(parent) : ''; var keyText = key ? " for key \"".concat(key, "\"") : ''; throw Error("Invalid value".concat(keyText).concat(parentText, ". Expected ").concat(prettyTyp, " but got ").concat(JSON.stringify(val))); } function prettyTypeName(typ) { if (Array.isArray(typ)) { if (typ.length === 2 && typ[0] === undefined) { return "an optional ".concat(prettyTypeName(typ[1])); } else { return "one of [".concat(typ.map(function (a) { return prettyTypeName(a); }).join(", "), "]"); } } else if (_typeof(typ) === "object" && typ.literal !== undefined) { return typ.literal; } else { return _typeof(typ); } } function jsonToJSProps(typ) { if (typ.jsonToJS === undefined) { var map = {}; typ.props.forEach(function (p) { return map[p.json] = { key: p.js, typ: p.typ }; }); typ.jsonToJS = map; } return typ.jsonToJS; } function jsToJSONProps(typ) { if (typ.jsToJSON === undefined) { var map = {}; typ.props.forEach(function (p) { return map[p.js] = { key: p.json, typ: p.typ }; }); typ.jsToJSON = map; } return typ.jsToJSON; } function transform(val, typ, getProps) { var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; var parent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; function transformPrimitive(typ, val) { if (_typeof(typ) === _typeof(val)) return val; return invalidValue(typ, val, key, parent); } function transformUnion(typs, val) { // val must validate against one typ in typs var l = typs.length; for (var i = 0; i < l; i++) { var _typ = typs[i]; try { return transform(val, _typ, getProps); } catch (_) {} } return invalidValue(typs, val, key, parent); } function transformEnum(cases, val) { if (cases.indexOf(val) !== -1) return val; return invalidValue(cases.map(function (a) { return l(a); }), val, key, parent); } function transformArray(typ, val) { // val must be an array with no invalid elements if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent); return val.map(function (el) { return transform(el, typ, getProps); }); } function transformDate(val) { if (val === null) { return null; } var d = new Date(val); if (isNaN(d.valueOf())) { return invalidValue(l("Date"), val, key, parent); } return d; } function transformObject(props, additional, val) { if (val === null || _typeof(val) !== "object" || Array.isArray(val)) { return invalidValue(l(ref || "object"), val, key, parent); } var result = {}; Object.getOwnPropertyNames(props).forEach(function (key) { var prop = props[key]; var v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; result[prop.key] = transform(v, prop.typ, getProps, key, ref); }); Object.getOwnPropertyNames(val).forEach(function (key) { if (!Object.prototype.hasOwnProperty.call(props, key)) { result[key] = transform(val[key], additional, getProps, key, ref); } }); return result; } if (typ === "any") return val; if (typ === null) { if (val === null) return val; return invalidValue(typ, val, key, parent); } if (typ === false) return invalidValue(typ, val, key, parent); var ref = undefined; while (_typeof(typ) === "object" && typ.ref !== undefined) { ref = typ.ref; typ = typeMap[typ.ref]; } if (Array.isArray(typ)) return transformEnum(typ, val); if (_typeof(typ) === "object") { return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) : invalidValue(typ, val, key, parent); } // Numbers can be parsed by Date but shouldn't be. if (typ === Date && typeof val !== "number") return transformDate(val); return transformPrimitive(typ, val); } function cast(val, typ) { return transform(val, typ, jsonToJSProps); } function uncast(val, typ) { return transform(val, typ, jsToJSONProps); } function l(typ) { return { literal: typ }; } function a(typ) { return { arrayItems: typ }; } function u() { for (var _len = arguments.length, typs = new Array(_len), _key = 0; _key < _len; _key++) { typs[_key] = arguments[_key]; } return { unionMembers: typs }; } function o(props, additional) { return { props: props, additional: additional }; } // function m(additional: any) { // return { props: [], additional }; // } function r(name) { return { ref: name }; } var typeMap = { "ComptesRendus": o([{ json: "comptesRendus", js: "comptesRendus", typ: r("CompteRenduClass") }], false), "CompteRenduClass": o([{ json: "compteRendu", js: "compteRendu", typ: a(r("CompteRendu")) }], false), "CompteRenduWrapper": o([{ json: "compteRendu", js: "compteRendu", typ: r("CompteRendu") }], false), "CompteRendu": o([{ json: "xmlns", js: "xmlns", typ: "" }, { json: "uid", js: "uid", typ: "" }, { json: "seanceRef", js: "seanceRef", typ: "" }, { json: "sessionRef", js: "sessionRef", typ: "" }, { json: "metadonnees", js: "metadonnees", typ: r("Metadonnees") }, { json: "contenu", js: "contenu", typ: r("Contenu") }], false), "Contenu": o([{ json: "quantiemes", js: "quantiemes", typ: r("Quantiemes") }, { json: "ouvertureSeance", js: "ouvertureSeance", typ: u(a(r("Point")), r("Point")) }, { json: "point", js: "point", typ: u(a(r("Point")), r("Point")) }, { json: "finSeance", js: "finSeance", typ: u(undefined, r("FinSeance")) }, { json: "paragraphe", js: "paragraphe", typ: u(undefined, a(r("Point"))) }], false), "FinSeance": o([{ json: "point", js: "point", typ: r("Point") }], false), "Orateurs": o([{ json: "orateur", js: "orateur", typ: u(a(r("OrateurElement")), r("OrateurElement")) }], false), "OrateurElement": o([{ json: "nom", js: "nom", typ: u(undefined, "") }, { json: "id", js: "id", typ: u(undefined, "") }, { json: "qualite", js: "qualite", typ: u(undefined, "") }], false), "Texte": o([{ json: "_", js: "_", typ: u(undefined, "") }, { json: "id_syceron", js: "id_syceron", typ: u(undefined, "") }, { json: "stime", js: "stime", typ: u(undefined, "") }, { json: "sup", js: "sup", typ: u(undefined, "") }, { json: "lienAdt", js: "lienAdt", typ: u(undefined, u(a(r("Texte")), r("Texte"))) }], false), "Point": o([{ json: "nivpoint", js: "nivpoint", typ: u(undefined, "") }, { json: "valeur_ptsodj", js: "valeur_ptsodj", typ: u(undefined, "") }, { json: "ordinal_prise", js: "ordinal_prise", typ: u(undefined, "") }, { json: "id_preparation", js: "id_preparation", typ: u(undefined, "") }, { json: "ordre_absolu_seance", js: "ordre_absolu_seance", typ: u(undefined, "") }, { json: "code_grammaire", js: "code_grammaire", typ: u(undefined, "") }, { json: "code_style", js: "code_style", typ: u(undefined, "") }, { json: "code_parole", js: "code_parole", typ: u(undefined, "") }, { json: "sommaire", js: "sommaire", typ: u(undefined, "") }, { json: "id_syceron", js: "id_syceron", typ: u(undefined, "") }, { json: "valeur", js: "valeur", typ: u(undefined, "") }, { json: "orateurs", js: "orateurs", typ: u(r("Orateurs"), u("", undefined)) }, { json: "texte", js: "texte", typ: u(r("Texte"), u("", undefined)) }, { json: "paragraphe", js: "paragraphe", typ: u(undefined, u(a(r("Point")), r("Point"))) }, { json: "interExtraction", js: "interExtraction", typ: u(undefined, u(a(r("Point")), r("Point"))) }, { json: "point", js: "point", typ: u(undefined, u(a(r("Point")), r("Point"))) }, { json: "structure", js: "structure", typ: u(undefined, "") }, { json: "id_acteur", js: "id_acteur", typ: u(undefined, "") }, { json: "id_mandat", js: "id_mandat", typ: u(undefined, "") }, { json: "id_nomination_oe", js: "id_nomination_oe", typ: u(undefined, "") }, { json: "id_nomination_op", js: "id_nomination_op", typ: u(undefined, "") }, { json: "orateur", js: "orateur", typ: u(undefined, "") }, { json: "bibard", js: "bibard", typ: u(undefined, "") }, { json: "art", js: "art", typ: u(undefined, "") }, { json: "adt", js: "adt", typ: u(undefined, "") }, { json: "ssadt", js: "ssadt", typ: u(undefined, "") }, { json: "roledebat", js: "roledebat", typ: u(undefined, "") }, { json: "type_debat", js: "type_debat", typ: u(undefined, "") }, { json: "changementPresidence", js: "changementPresidence", typ: u(undefined, r("Point")) }, { json: "decision", js: "decision", typ: u(undefined, r("Decision")) }, { json: "ouvertureSeance", js: "ouvertureSeance", typ: u(undefined, r("Point")) }, { json: "nom_orateur", js: "nom_orateur", typ: u(undefined, "") }, { json: "qualite", js: "qualite", typ: u(undefined, "") }], false), "Quantiemes": o([{ json: "journee", js: "journee", typ: "" }, { json: "session", js: "session", typ: "" }], false), "Metadonnees": o([{ json: "dateSeance", js: "dateSeance", typ: "" }, { json: "dateSeanceJour", js: "dateSeanceJour", typ: "" }, { json: "numSeanceJour", js: "numSeanceJour", typ: "" }, { json: "numSeance", js: "numSeance", typ: "" }, { json: "typeAssemblee", js: "typeAssemblee", typ: "" }, { json: "legislature", js: "legislature", typ: "" }, { json: "session", js: "session", typ: "" }, { json: "nomFichierJo", js: "nomFichierJo", typ: "" }, { json: "validite", js: "validite", typ: "" }, { json: "etat", js: "etat", typ: "" }, { json: "diffusion", js: "diffusion", typ: "" }, { json: "version", js: "version", typ: "" }, { json: "environnement", js: "environnement", typ: "" }, { json: "heureGeneration", js: "heureGeneration", typ: Date }, { json: "sommaire", js: "sommaire", typ: r("Sommaire") }], false), "Sommaire": o([{ json: "presidentSeance", js: "presidentSeance", typ: r("Texte") }, { json: "sommaire1", js: "sommaire1", typ: u(a(r("SommaireElement")), r("SommaireElement")) }, { json: "sommaire3", js: "sommaire3", typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement"))) }, { json: "sommaire2", js: "sommaire2", typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement"))) }, { json: "para", js: "para", typ: u(undefined, u(a(r("Texte")), r("Texte"))) }], false), "SommaireElement": o([{ json: "valeur_pts_odj", js: "valeur_pts_odj", typ: u(undefined, "") }, { json: "titreStruct", js: "titreStruct", typ: u(undefined, r("TitreStruct")) }, { json: "para", js: "para", typ: u(undefined, u(a(u(r("Texte"), "")), r("Texte"))) }, { json: "sommaire2", js: "sommaire2", typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement"))) }, { json: "sommaire3", js: "sommaire3", typ: u(undefined, u(a(r("SommaireElement")), r("SommaireElement"))) }, { json: "presidentSeance", js: "presidentSeance", typ: u(undefined, u(a(r("Texte")), r("Texte"))) }, { json: "type_debat", js: "type_debat", typ: u(undefined, "") }], false), "TitreStruct": o([{ json: "id_syceron", js: "id_syceron", typ: "" }, { json: "intitule", js: "intitule", typ: u(undefined, "") }, { json: "sousIntitule", js: "sousIntitule", typ: u(undefined, "") }, { json: "type_debat", js: "type_debat", typ: u(undefined, "") }], false), "Decision": ["ADOPTION amendement (main levée) adt", "ADOPTION d’un article (vote à main levée)", "ADOPTION d’un sous-amendement (main levée) ss-adt", "ADOPTION de plusieurs amendements (main levée) adts", "ADOPTION de plusieurs sous-amendements (main levée) ss-adts", "", "REJET d’un amendement (main levée) adt", "REJET d’un article (vote à main levée)", "REJET d’un sous-amendement (main levée) ss-adt", "REJET de plusieurs amendements (main levée) adts", "REJET de plusieurs sous-amendements (main levée) ss-adts", "REJET motion de rejet préalable (main levée)"] }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNpc2lvbiIsImV4cG9ydHMiLCJDb252ZXJ0IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwidmFsdWUiLCJ0b0NvbXB0ZXNSZW5kdXMiLCJqc29uIiwiY2FzdCIsIkpTT04iLCJwYXJzZSIsInIiLCJjb21wdGVzUmVuZHVzVG9Kc29uIiwic3RyaW5naWZ5IiwidW5jYXN0IiwidG9Db21wdGVSZW5kdVdyYXBwZXIiLCJjb21wdGVSZW5kdVdyYXBwZXJUb0pzb24iLCJpbnZhbGlkVmFsdWUiLCJ0eXAiLCJ2YWwiLCJwYXJlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJwcmV0dHlUeXAiLCJwcmV0dHlUeXBlTmFtZSIsInBhcmVudFRleHQiLCJjb25jYXQiLCJrZXlUZXh0IiwiRXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJhIiwiam9pbiIsIl90eXBlb2YiLCJsaXRlcmFsIiwianNvblRvSlNQcm9wcyIsImpzb25Ub0pTIiwicHJvcHMiLCJmb3JFYWNoIiwicCIsImpzIiwianNUb0pTT05Qcm9wcyIsImpzVG9KU09OIiwidHJhbnNmb3JtIiwiZ2V0UHJvcHMiLCJ0cmFuc2Zvcm1QcmltaXRpdmUiLCJ0cmFuc2Zvcm1VbmlvbiIsInR5cHMiLCJsIiwiaSIsIl8iLCJ0cmFuc2Zvcm1FbnVtIiwiY2FzZXMiLCJpbmRleE9mIiwidHJhbnNmb3JtQXJyYXkiLCJlbCIsInRyYW5zZm9ybURhdGUiLCJkIiwiRGF0ZSIsImlzTmFOIiwidmFsdWVPZiIsInRyYW5zZm9ybU9iamVjdCIsImFkZGl0aW9uYWwiLCJyZWYiLCJyZXN1bHQiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvcCIsInYiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlTWFwIiwidW5pb25NZW1iZXJzIiwiYXJyYXlJdGVtcyIsInUiLCJfbGVuIiwiX2tleSIsIm8iLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhd190eXBlcy9kZWJhdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVG8gcGFyc2UgdGhpcyBkYXRhOlxuLy9cbi8vICAgaW1wb3J0IHsgQ29udmVydCwgQ29tcHRlc1JlbmR1cywgQ29tcHRlUmVuZHVXcmFwcGVyIH0gZnJvbSBcIi4vZmlsZVwiO1xuLy9cbi8vICAgY29uc3QgY29tcHRlUmVuZHUgPSBDb252ZXJ0LnRvQ29tcHRlUmVuZHUoanNvbik7XG4vLyAgIGNvbnN0IGNvbXB0ZVJlbmR1V3JhcHBlciA9IENvbnZlcnQudG9Db21wdGVSZW5kdVdyYXBwZXIoanNvbik7XG4vL1xuLy8gVGhlc2UgZnVuY3Rpb25zIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIEpTT04gZG9lc24ndFxuLy8gbWF0Y2ggdGhlIGV4cGVjdGVkIGludGVyZmFjZSwgZXZlbiBpZiB0aGUgSlNPTiBpcyB2YWxpZC5cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVzUmVuZHVzIHtcbiAgICBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHVDbGFzcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVSZW5kdUNsYXNzIHtcbiAgICBjb21wdGVSZW5kdTogQ29tcHRlUmVuZHVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVSZW5kdVdyYXBwZXIge1xuICAgIGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wdGVSZW5kdSB7XG4gICAgeG1sbnM6IHN0cmluZztcbiAgICB1aWQ6IHN0cmluZztcbiAgICBzZWFuY2VSZWY6IHN0cmluZztcbiAgICBzZXNzaW9uUmVmOiBzdHJpbmc7XG4gICAgbWV0YWRvbm5lZXM6IE1ldGFkb25uZWVzO1xuICAgIGNvbnRlbnU6IENvbnRlbnU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGVudSB7XG4gICAgcXVhbnRpZW1lczogUXVhbnRpZW1lcztcbiAgICBvdXZlcnR1cmVTZWFuY2U6IFBvaW50W10gfCBQb2ludDtcbiAgICBwb2ludDogUG9pbnRbXSB8IFBvaW50O1xuICAgIGZpblNlYW5jZT86IEZpblNlYW5jZTtcbiAgICBwYXJhZ3JhcGhlPzogUG9pbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaW5TZWFuY2Uge1xuICAgIHBvaW50OiBQb2ludDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmF0ZXVycyB7XG4gICAgb3JhdGV1cjogT3JhdGV1ckVsZW1lbnRbXSB8IE9yYXRldXJFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yYXRldXJFbGVtZW50IHtcbiAgICBub206IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHF1YWxpdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUZXh0ZSB7XG4gICAgXz86IHN0cmluZ1xuICAgIGlkX3N5Y2Vyb24/OiBzdHJpbmdcbiAgICBzdGltZT86IHN0cmluZ1xuICAgIHN1cD86IHN0cmluZ1xuICAgIGxpZW5BZHQ/OiBUZXh0ZVtdIHwgVGV4dGVcbn1cblxuZXhwb3J0IGVudW0gRGVjaXNpb24ge1xuICAgIEFkb3B0aW9uQW1lbmRlbWVudE1haW5MZXbDqWVBZHQgPSBcIkFET1BUSU9OIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgICBBZG9wdGlvbkRVbkFydGljbGVWb3Rlw4BNYWluTGV2w6llID0gXCJBRE9QVElPTiBk4oCZdW4gYXJ0aWNsZSAodm90ZSDDoCBtYWluIGxldsOpZSlcIixcbiAgICBBZG9wdGlvbkRVblNvdXNBbWVuZGVtZW50TWFpbkxldsOpZVNzQWR0ID0gXCJBRE9QVElPTiBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgQWRvcHRpb25EZVBsdXNpZXVyc0FtZW5kZW1lbnRzTWFpbkxldsOpZUFkdHMgPSBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgICBBZG9wdGlvbkRlUGx1c2lldXJzU291c0FtZW5kZW1lbnRzTWFpbkxldsOpZVNzQWR0cyA9IFwiQURPUFRJT04gZGUgcGx1c2lldXJzIHNvdXMtYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBzcy1hZHRzXCIsXG4gICAgRW1wdHkgPSBcIlwiLFxuICAgIFJlamV0RFVuQW1lbmRlbWVudE1haW5MZXbDqWVBZHQgPSBcIlJFSkVUIGTigJl1biBhbWVuZGVtZW50IChtYWluIGxldsOpZSkgYWR0XCIsXG4gICAgUmVqZXREVW5BcnRpY2xlVm90ZcOATWFpbkxldsOpZSA9IFwiUkVKRVQgZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gICAgUmVqZXREVW5Tb3VzQW1lbmRlbWVudE1haW5MZXbDqWVTc0FkdCA9IFwiUkVKRVQgZOKAmXVuIHNvdXMtYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIHNzLWFkdFwiLFxuICAgIFJlamV0RGVQbHVzaWV1cnNBbWVuZGVtZW50c01haW5MZXbDqWVBZHRzID0gXCJSRUpFVCBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gICAgUmVqZXREZVBsdXNpZXVyc1NvdXNBbWVuZGVtZW50c01haW5MZXbDqWVTc0FkdHMgPSBcIlJFSkVUIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICAgIFJlamV0TW90aW9uRGVSZWpldFByw6lhbGFibGVNYWluTGV2w6llID0gXCJSRUpFVCBtb3Rpb24gZGUgcmVqZXQgcHLDqWFsYWJsZSAobWFpbiBsZXbDqWUpXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9pbnQge1xuICAgIGlkX3ByZXBhcmF0aW9uPzogc3RyaW5nO1xuICAgIG9yZHJlX2Fic29sdV9zZWFuY2U/OiBzdHJpbmc7XG4gICAgY29kZV9ncmFtbWFpcmU/OiBzdHJpbmc7XG4gICAgc29tbWFpcmU/OiBzdHJpbmc7XG4gICAgaWRfc3ljZXJvbj86IHN0cmluZztcbiAgICB2YWxldXJfcHRzb2RqPzogc3RyaW5nO1xuICAgIG5pdnBvaW50Pzogc3RyaW5nO1xuICAgIG9yZGluYWxfcHJpc2U/OiBzdHJpbmc7XG4gICAgY29kZV9zdHlsZT86IHN0cmluZztcbiAgICBjb2RlX3Bhcm9sZT86IHN0cmluZztcbiAgICB2YWxldXI/OiBzdHJpbmc7XG4gICAgb3JhdGV1cnM/OiBPcmF0ZXVycyB8IHN0cmluZztcbiAgICB0ZXh0ZT86IFRleHRlIHwgc3RyaW5nO1xuICAgIHBhcmFncmFwaGU/OiBQb2ludFtdIHwgUG9pbnQ7XG4gICAgaW50ZXJFeHRyYWN0aW9uPzogUG9pbnRbXSB8IFBvaW50O1xuICAgIHBvaW50PzogUG9pbnRbXSB8IFBvaW50O1xuICAgIHN0cnVjdHVyZT86IHN0cmluZztcbiAgICBpZF9hY3RldXI/OiBzdHJpbmc7XG4gICAgaWRfbWFuZGF0Pzogc3RyaW5nO1xuICAgIGlkX25vbWluYXRpb25fb2U/OiBzdHJpbmc7XG4gICAgaWRfbm9taW5hdGlvbl9vcD86IHN0cmluZztcbiAgICBvcmF0ZXVyPzogc3RyaW5nO1xuICAgIGJpYmFyZD86IHN0cmluZztcbiAgICBhcnQ/OiBzdHJpbmc7XG4gICAgYWR0Pzogc3RyaW5nO1xuICAgIHNzYWR0Pzogc3RyaW5nO1xuICAgIHJvbGVkZWJhdD86IHN0cmluZztcbiAgICBjaGFuZ2VtZW50UHJlc2lkZW5jZT86IFBvaW50O1xuICAgIHR5cGVfZGViYXQ/OiBzdHJpbmc7XG4gICAgZGVjaXNpb24/OiBEZWNpc2lvbjtcbiAgICBvdXZlcnR1cmVTZWFuY2U/OiBQb2ludDtcbiAgICBxdWFsaXRlPzogc3RyaW5nO1xuICAgIG5vbV9vcmF0ZXVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1YW50aWVtZXMge1xuICAgIGpvdXJuZWU6IHN0cmluZztcbiAgICBzZXNzaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRvbm5lZXMge1xuICAgIGRhdGVTZWFuY2U6IHN0cmluZztcbiAgICBkYXRlU2VhbmNlSm91cjogc3RyaW5nO1xuICAgIG51bVNlYW5jZUpvdXI6IHN0cmluZztcbiAgICBudW1TZWFuY2U6IHN0cmluZztcbiAgICB0eXBlQXNzZW1ibGVlOiBzdHJpbmc7XG4gICAgbGVnaXNsYXR1cmU6IHN0cmluZztcbiAgICBzZXNzaW9uOiBzdHJpbmc7XG4gICAgbm9tRmljaGllckpvOiBzdHJpbmc7XG4gICAgdmFsaWRpdGU6IHN0cmluZztcbiAgICBldGF0OiBzdHJpbmc7XG4gICAgZGlmZnVzaW9uOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGVudmlyb25uZW1lbnQ6IHN0cmluZztcbiAgICBoZXVyZUdlbmVyYXRpb246IERhdGU7XG4gICAgc29tbWFpcmU6IFNvbW1haXJlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvbW1haXJlIHtcbiAgICBwcmVzaWRlbnRTZWFuY2U6IFRleHRlO1xuICAgIHNvbW1haXJlMTogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnQ7XG4gICAgc29tbWFpcmUzPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnQ7XG4gICAgc29tbWFpcmUyPzogU29tbWFpcmVFbGVtZW50W10gfCBTb21tYWlyZUVsZW1lbnQ7XG4gICAgcGFyYT86IFRleHRlW10gfCBUZXh0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb21tYWlyZUVsZW1lbnQge1xuICAgIHZhbGV1cl9wdHNfb2RqOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdGl0cmVTdHJ1Y3Q6IFRpdHJlU3RydWN0O1xuICAgIHBhcmE/OiBBcnJheTxUZXh0ZSB8IHN0cmluZz4gfCBUZXh0ZTtcbiAgICBzb21tYWlyZTI/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudDtcbiAgICBzb21tYWlyZTM/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudDtcbiAgICBwcmVzaWRlbnRTZWFuY2U/OiBUZXh0ZVtdIHwgVGV4dGU7XG4gICAgdHlwZV9kZWJhdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaXRyZVN0cnVjdCB7XG4gICAgaWRfc3ljZXJvbjogc3RyaW5nO1xuICAgIGludGl0dWxlPzogc3RyaW5nO1xuICAgIHNvdXNJbnRpdHVsZT86IHN0cmluZztcbiAgICB0eXBlX2RlYmF0Pzogc3RyaW5nO1xufVxuXG4vLyBDb252ZXJ0cyBKU09OIHN0cmluZ3MgdG8vZnJvbSB5b3VyIHR5cGVzXG4vLyBhbmQgYXNzZXJ0cyB0aGUgcmVzdWx0cyBvZiBKU09OLnBhcnNlIGF0IHJ1bnRpbWVcbmV4cG9ydCBjbGFzcyBDb252ZXJ0IHtcbiAgICBwdWJsaWMgc3RhdGljIHRvQ29tcHRlc1JlbmR1cyhqc29uOiBzdHJpbmcpOiBDb21wdGVzUmVuZHVzIHtcbiAgICAgICAgcmV0dXJuIGNhc3QoSlNPTi5wYXJzZShqc29uKSwgcihcIkNvbXB0ZXNSZW5kdXNcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY29tcHRlc1JlbmR1c1RvSnNvbih2YWx1ZTogQ29tcHRlc1JlbmR1cyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh1bmNhc3QodmFsdWUsIHIoXCJDb21wdGVzUmVuZHVzXCIpKSwgbnVsbCwgMik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0b0NvbXB0ZVJlbmR1V3JhcHBlcihqc29uOiBzdHJpbmcpOiBDb21wdGVSZW5kdVdyYXBwZXIge1xuICAgICAgICByZXR1cm4gY2FzdChKU09OLnBhcnNlKGpzb24pLCByKFwiQ29tcHRlUmVuZHVXcmFwcGVyXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNvbXB0ZVJlbmR1V3JhcHBlclRvSnNvbih2YWx1ZTogQ29tcHRlUmVuZHVXcmFwcGVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHVuY2FzdCh2YWx1ZSwgcihcIkNvbXB0ZVJlbmR1V3JhcHBlclwiKSksIG51bGwsIDIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZFZhbHVlKHR5cDogYW55LCB2YWw6IGFueSwga2V5OiBhbnksIHBhcmVudDogYW55ID0gJycpOiBuZXZlciB7XG4gICAgY29uc3QgcHJldHR5VHlwID0gcHJldHR5VHlwZU5hbWUodHlwKTtcbiAgICBjb25zdCBwYXJlbnRUZXh0ID0gcGFyZW50ID8gYCBvbiAke3BhcmVudH1gIDogJyc7XG4gICAgY29uc3Qga2V5VGV4dCA9IGtleSA/IGAgZm9yIGtleSBcIiR7a2V5fVwiYCA6ICcnO1xuICAgIHRocm93IEVycm9yKGBJbnZhbGlkIHZhbHVlJHtrZXlUZXh0fSR7cGFyZW50VGV4dH0uIEV4cGVjdGVkICR7cHJldHR5VHlwfSBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkodmFsKX1gKTtcbn1cblxuZnVuY3Rpb24gcHJldHR5VHlwZU5hbWUodHlwOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cCkpIHtcbiAgICAgICAgaWYgKHR5cC5sZW5ndGggPT09IDIgJiYgdHlwWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgYW4gb3B0aW9uYWwgJHtwcmV0dHlUeXBlTmFtZSh0eXBbMV0pfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYG9uZSBvZiBbJHt0eXAubWFwKGEgPT4geyByZXR1cm4gcHJldHR5VHlwZU5hbWUoYSk7IH0pLmpvaW4oXCIsIFwiKX1dYDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cCA9PT0gXCJvYmplY3RcIiAmJiB0eXAubGl0ZXJhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0eXAubGl0ZXJhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHR5cDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGpzb25Ub0pTUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXAuanNvblRvSlMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBtYXA6IGFueSA9IHt9O1xuICAgICAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiBtYXBbcC5qc29uXSA9IHsga2V5OiBwLmpzLCB0eXA6IHAudHlwIH0pO1xuICAgICAgICB0eXAuanNvblRvSlMgPSBtYXA7XG4gICAgfVxuICAgIHJldHVybiB0eXAuanNvblRvSlM7XG59XG5cbmZ1bmN0aW9uIGpzVG9KU09OUHJvcHModHlwOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXAuanNUb0pTT04gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBtYXA6IGFueSA9IHt9O1xuICAgICAgICB0eXAucHJvcHMuZm9yRWFjaCgocDogYW55KSA9PiBtYXBbcC5qc10gPSB7IGtleTogcC5qc29uLCB0eXA6IHAudHlwIH0pO1xuICAgICAgICB0eXAuanNUb0pTT04gPSBtYXA7XG4gICAgfVxuICAgIHJldHVybiB0eXAuanNUb0pTT047XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybSh2YWw6IGFueSwgdHlwOiBhbnksIGdldFByb3BzOiBhbnksIGtleTogYW55ID0gJycsIHBhcmVudDogYW55ID0gJycpOiBhbnkge1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXA6IHN0cmluZywgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZW9mIHR5cCA9PT0gdHlwZW9mIHZhbCkgcmV0dXJuIHZhbDtcbiAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVVuaW9uKHR5cHM6IGFueVtdLCB2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIC8vIHZhbCBtdXN0IHZhbGlkYXRlIGFnYWluc3Qgb25lIHR5cCBpbiB0eXBzXG4gICAgICAgIGNvbnN0IGwgPSB0eXBzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cCA9IHR5cHNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGdldFByb3BzKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwcywgdmFsLCBrZXksIHBhcmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtRW51bShjYXNlczogc3RyaW5nW10sIHZhbDogYW55KTogYW55IHtcbiAgICAgICAgaWYgKGNhc2VzLmluZGV4T2YodmFsKSAhPT0gLTEpIHJldHVybiB2YWw7XG4gICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUoY2FzZXMubWFwKGEgPT4geyByZXR1cm4gbChhKTsgfSksIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUFycmF5KHR5cDogYW55LCB2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIC8vIHZhbCBtdXN0IGJlIGFuIGFycmF5IHdpdGggbm8gaW52YWxpZCBlbGVtZW50c1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGludmFsaWRWYWx1ZShsKFwiYXJyYXlcIiksIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgICAgICByZXR1cm4gdmFsLm1hcChlbCA9PiB0cmFuc2Zvcm0oZWwsIHR5cCwgZ2V0UHJvcHMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRlKHZhbDogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbCk7XG4gICAgICAgIGlmIChpc05hTihkLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUobChcIkRhdGVcIiksIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybU9iamVjdChwcm9wczogeyBbazogc3RyaW5nXTogYW55IH0sIGFkZGl0aW9uYWw6IGFueSwgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbHVlKGwocmVmIHx8IFwib2JqZWN0XCIpLCB2YWwsIGtleSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzW2tleV07XG4gICAgICAgICAgICBjb25zdCB2ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbCwga2V5KSA/IHZhbFtrZXldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzdWx0W3Byb3Aua2V5XSA9IHRyYW5zZm9ybSh2LCBwcm9wLnR5cCwgZ2V0UHJvcHMsIGtleSwgcmVmKTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZm9ybSh2YWxba2V5XSwgYWRkaXRpb25hbCwgZ2V0UHJvcHMsIGtleSwgcmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cCA9PT0gXCJhbnlcIikgcmV0dXJuIHZhbDtcbiAgICBpZiAodHlwID09PSBudWxsKSB7XG4gICAgICAgIGlmICh2YWwgPT09IG51bGwpIHJldHVybiB2YWw7XG4gICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KTtcbiAgICB9XG4gICAgaWYgKHR5cCA9PT0gZmFsc2UpIHJldHVybiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KTtcbiAgICBsZXQgcmVmOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKHR5cGVvZiB0eXAgPT09IFwib2JqZWN0XCIgJiYgdHlwLnJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlZiA9IHR5cC5yZWY7XG4gICAgICAgIHR5cCA9IHR5cGVNYXBbdHlwLnJlZl07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cCkpIHJldHVybiB0cmFuc2Zvcm1FbnVtKHR5cCwgdmFsKTtcbiAgICBpZiAodHlwZW9mIHR5cCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICByZXR1cm4gdHlwLmhhc093blByb3BlcnR5KFwidW5pb25NZW1iZXJzXCIpID8gdHJhbnNmb3JtVW5pb24odHlwLnVuaW9uTWVtYmVycywgdmFsKVxuICAgICAgICAgICAgOiB0eXAuaGFzT3duUHJvcGVydHkoXCJhcnJheUl0ZW1zXCIpID8gdHJhbnNmb3JtQXJyYXkodHlwLmFycmF5SXRlbXMsIHZhbClcbiAgICAgICAgICAgICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcInByb3BzXCIpID8gdHJhbnNmb3JtT2JqZWN0KGdldFByb3BzKHR5cCksIHR5cC5hZGRpdGlvbmFsLCB2YWwpXG4gICAgICAgICAgICAgICAgICAgIDogaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXksIHBhcmVudCk7XG4gICAgfVxuICAgIC8vIE51bWJlcnMgY2FuIGJlIHBhcnNlZCBieSBEYXRlIGJ1dCBzaG91bGRuJ3QgYmUuXG4gICAgaWYgKHR5cCA9PT0gRGF0ZSAmJiB0eXBlb2YgdmFsICE9PSBcIm51bWJlclwiKSByZXR1cm4gdHJhbnNmb3JtRGF0ZSh2YWwpO1xuICAgIHJldHVybiB0cmFuc2Zvcm1QcmltaXRpdmUodHlwLCB2YWwpO1xufVxuXG5mdW5jdGlvbiBjYXN0PFQ+KHZhbDogYW55LCB0eXA6IGFueSk6IFQge1xuICAgIHJldHVybiB0cmFuc2Zvcm0odmFsLCB0eXAsIGpzb25Ub0pTUHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1bmNhc3Q8VD4odmFsOiBULCB0eXA6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNUb0pTT05Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIGwodHlwOiBhbnkpIHtcbiAgICByZXR1cm4geyBsaXRlcmFsOiB0eXAgfTtcbn1cblxuZnVuY3Rpb24gYSh0eXA6IGFueSkge1xuICAgIHJldHVybiB7IGFycmF5SXRlbXM6IHR5cCB9O1xufVxuXG5mdW5jdGlvbiB1KC4uLnR5cHM6IGFueVtdKSB7XG4gICAgcmV0dXJuIHsgdW5pb25NZW1iZXJzOiB0eXBzIH07XG59XG5cbmZ1bmN0aW9uIG8ocHJvcHM6IGFueVtdLCBhZGRpdGlvbmFsOiBhbnkpIHtcbiAgICByZXR1cm4geyBwcm9wcywgYWRkaXRpb25hbCB9O1xufVxuXG4vLyBmdW5jdGlvbiBtKGFkZGl0aW9uYWw6IGFueSkge1xuLy8gICAgIHJldHVybiB7IHByb3BzOiBbXSwgYWRkaXRpb25hbCB9O1xuLy8gfVxuXG5mdW5jdGlvbiByKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB7IHJlZjogbmFtZSB9O1xufVxuXG5jb25zdCB0eXBlTWFwOiBhbnkgPSB7XG4gICAgXCJDb21wdGVzUmVuZHVzXCI6IG8oW1xuICAgICAgICB7IGpzb246IFwiY29tcHRlc1JlbmR1c1wiLCBqczogXCJjb21wdGVzUmVuZHVzXCIsIHR5cDogcihcIkNvbXB0ZVJlbmR1Q2xhc3NcIikgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJDb21wdGVSZW5kdUNsYXNzXCI6IG8oW1xuICAgICAgICB7IGpzb246IFwiY29tcHRlUmVuZHVcIiwganM6IFwiY29tcHRlUmVuZHVcIiwgdHlwOiBhKHIoXCJDb21wdGVSZW5kdVwiKSkgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJDb21wdGVSZW5kdVdyYXBwZXJcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJjb21wdGVSZW5kdVwiLCBqczogXCJjb21wdGVSZW5kdVwiLCB0eXA6IHIoXCJDb21wdGVSZW5kdVwiKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIkNvbXB0ZVJlbmR1XCI6IG8oW1xuICAgICAgICB7IGpzb246IFwieG1sbnNcIiwganM6IFwieG1sbnNcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJ1aWRcIiwganM6IFwidWlkXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwic2VhbmNlUmVmXCIsIGpzOiBcInNlYW5jZVJlZlwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcInNlc3Npb25SZWZcIiwganM6IFwic2Vzc2lvblJlZlwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcIm1ldGFkb25uZWVzXCIsIGpzOiBcIm1ldGFkb25uZWVzXCIsIHR5cDogcihcIk1ldGFkb25uZWVzXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJjb250ZW51XCIsIGpzOiBcImNvbnRlbnVcIiwgdHlwOiByKFwiQ29udGVudVwiKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIkNvbnRlbnVcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJxdWFudGllbWVzXCIsIGpzOiBcInF1YW50aWVtZXNcIiwgdHlwOiByKFwiUXVhbnRpZW1lc1wiKSB9LFxuICAgICAgICB7IGpzb246IFwib3V2ZXJ0dXJlU2VhbmNlXCIsIGpzOiBcIm91dmVydHVyZVNlYW5jZVwiLCB0eXA6IHUoYShyKFwiUG9pbnRcIikpLCByKFwiUG9pbnRcIikpIH0sXG4gICAgICAgIHsganNvbjogXCJwb2ludFwiLCBqczogXCJwb2ludFwiLCB0eXA6IHUoYShyKFwiUG9pbnRcIikpLCByKFwiUG9pbnRcIikpIH0sXG4gICAgICAgIHsganNvbjogXCJmaW5TZWFuY2VcIiwganM6IFwiZmluU2VhbmNlXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJGaW5TZWFuY2VcIikpIH0sXG4gICAgICAgIHsganNvbjogXCJwYXJhZ3JhcGhlXCIsIGpzOiBcInBhcmFncmFwaGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgYShyKFwiUG9pbnRcIikpKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIkZpblNlYW5jZVwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcInBvaW50XCIsIGpzOiBcInBvaW50XCIsIHR5cDogcihcIlBvaW50XCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiT3JhdGV1cnNcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJvcmF0ZXVyXCIsIGpzOiBcIm9yYXRldXJcIiwgdHlwOiB1KGEocihcIk9yYXRldXJFbGVtZW50XCIpKSwgcihcIk9yYXRldXJFbGVtZW50XCIpKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIk9yYXRldXJFbGVtZW50XCI6IG8oW1xuICAgICAgICB7IGpzb246IFwibm9tXCIsIGpzOiBcIm5vbVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwiaWRcIiwganM6IFwiaWRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInF1YWxpdGVcIiwganM6IFwicXVhbGl0ZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIlRleHRlXCI6IG8oW1xuICAgICAgICB7IGpzb246IFwiX1wiLCBqczogXCJfXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJpZF9zeWNlcm9uXCIsIGpzOiBcImlkX3N5Y2Vyb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInN0aW1lXCIsIGpzOiBcInN0aW1lXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJzdXBcIiwganM6IFwic3VwXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJsaWVuQWR0XCIsIGpzOiBcImxpZW5BZHRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJUZXh0ZVwiKSksIHIoXCJUZXh0ZVwiKSkpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiUG9pbnRcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJuaXZwb2ludFwiLCBqczogXCJuaXZwb2ludFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwidmFsZXVyX3B0c29kalwiLCBqczogXCJ2YWxldXJfcHRzb2RqXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJvcmRpbmFsX3ByaXNlXCIsIGpzOiBcIm9yZGluYWxfcHJpc2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImlkX3ByZXBhcmF0aW9uXCIsIGpzOiBcImlkX3ByZXBhcmF0aW9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJvcmRyZV9hYnNvbHVfc2VhbmNlXCIsIGpzOiBcIm9yZHJlX2Fic29sdV9zZWFuY2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImNvZGVfZ3JhbW1haXJlXCIsIGpzOiBcImNvZGVfZ3JhbW1haXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJjb2RlX3N0eWxlXCIsIGpzOiBcImNvZGVfc3R5bGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImNvZGVfcGFyb2xlXCIsIGpzOiBcImNvZGVfcGFyb2xlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJzb21tYWlyZVwiLCBqczogXCJzb21tYWlyZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwiaWRfc3ljZXJvblwiLCBqczogXCJpZF9zeWNlcm9uXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJ2YWxldXJcIiwganM6IFwidmFsZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJvcmF0ZXVyc1wiLCBqczogXCJvcmF0ZXVyc1wiLCB0eXA6IHUocihcIk9yYXRldXJzXCIpLCB1KFwiXCIsIHVuZGVmaW5lZCkpIH0sXG4gICAgICAgIHsganNvbjogXCJ0ZXh0ZVwiLCBqczogXCJ0ZXh0ZVwiLCB0eXA6IHUocihcIlRleHRlXCIpLCB1KFwiXCIsIHVuZGVmaW5lZCkpIH0sXG4gICAgICAgIHsganNvbjogXCJwYXJhZ3JhcGhlXCIsIGpzOiBcInBhcmFncmFwaGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJpbnRlckV4dHJhY3Rpb25cIiwganM6IFwiaW50ZXJFeHRyYWN0aW9uXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiUG9pbnRcIikpLCByKFwiUG9pbnRcIikpKSB9LFxuICAgICAgICB7IGpzb246IFwicG9pbnRcIiwganM6IFwicG9pbnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJzdHJ1Y3R1cmVcIiwganM6IFwic3RydWN0dXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJpZF9hY3RldXJcIiwganM6IFwiaWRfYWN0ZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJpZF9tYW5kYXRcIiwganM6IFwiaWRfbWFuZGF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJpZF9ub21pbmF0aW9uX29lXCIsIGpzOiBcImlkX25vbWluYXRpb25fb2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImlkX25vbWluYXRpb25fb3BcIiwganM6IFwiaWRfbm9taW5hdGlvbl9vcFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwib3JhdGV1clwiLCBqczogXCJvcmF0ZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJiaWJhcmRcIiwganM6IFwiYmliYXJkXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJhcnRcIiwganM6IFwiYXJ0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJhZHRcIiwganM6IFwiYWR0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJzc2FkdFwiLCBqczogXCJzc2FkdFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwicm9sZWRlYmF0XCIsIGpzOiBcInJvbGVkZWJhdFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJjaGFuZ2VtZW50UHJlc2lkZW5jZVwiLCBqczogXCJjaGFuZ2VtZW50UHJlc2lkZW5jZVwiLCB0eXA6IHUodW5kZWZpbmVkLCByKFwiUG9pbnRcIikpIH0sXG4gICAgICAgIHsganNvbjogXCJkZWNpc2lvblwiLCBqczogXCJkZWNpc2lvblwiLCB0eXA6IHUodW5kZWZpbmVkLCByKFwiRGVjaXNpb25cIikpIH0sXG4gICAgICAgIHsganNvbjogXCJvdXZlcnR1cmVTZWFuY2VcIiwganM6IFwib3V2ZXJ0dXJlU2VhbmNlXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJQb2ludFwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcIm5vbV9vcmF0ZXVyXCIsIGpzOiBcIm5vbV9vcmF0ZXVyXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJxdWFsaXRlXCIsIGpzOiBcInF1YWxpdGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJRdWFudGllbWVzXCI6IG8oW1xuICAgICAgICB7IGpzb246IFwiam91cm5lZVwiLCBqczogXCJqb3VybmVlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwic2Vzc2lvblwiLCBqczogXCJzZXNzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIk1ldGFkb25uZWVzXCI6IG8oW1xuICAgICAgICB7IGpzb246IFwiZGF0ZVNlYW5jZVwiLCBqczogXCJkYXRlU2VhbmNlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwiZGF0ZVNlYW5jZUpvdXJcIiwganM6IFwiZGF0ZVNlYW5jZUpvdXJcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJudW1TZWFuY2VKb3VyXCIsIGpzOiBcIm51bVNlYW5jZUpvdXJcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJudW1TZWFuY2VcIiwganM6IFwibnVtU2VhbmNlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwidHlwZUFzc2VtYmxlZVwiLCBqczogXCJ0eXBlQXNzZW1ibGVlXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwibGVnaXNsYXR1cmVcIiwganM6IFwibGVnaXNsYXR1cmVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJzZXNzaW9uXCIsIGpzOiBcInNlc3Npb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJub21GaWNoaWVySm9cIiwganM6IFwibm9tRmljaGllckpvXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwidmFsaWRpdGVcIiwganM6IFwidmFsaWRpdGVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJldGF0XCIsIGpzOiBcImV0YXRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJkaWZmdXNpb25cIiwganM6IFwiZGlmZnVzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwidmVyc2lvblwiLCBqczogXCJ2ZXJzaW9uXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwiZW52aXJvbm5lbWVudFwiLCBqczogXCJlbnZpcm9ubmVtZW50XCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwiaGV1cmVHZW5lcmF0aW9uXCIsIGpzOiBcImhldXJlR2VuZXJhdGlvblwiLCB0eXA6IERhdGUgfSxcbiAgICAgICAgeyBqc29uOiBcInNvbW1haXJlXCIsIGpzOiBcInNvbW1haXJlXCIsIHR5cDogcihcIlNvbW1haXJlXCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiU29tbWFpcmVcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJwcmVzaWRlbnRTZWFuY2VcIiwganM6IFwicHJlc2lkZW50U2VhbmNlXCIsIHR5cDogcihcIlRleHRlXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJzb21tYWlyZTFcIiwganM6IFwic29tbWFpcmUxXCIsIHR5cDogdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSB9LFxuICAgICAgICB7IGpzb246IFwic29tbWFpcmUzXCIsIGpzOiBcInNvbW1haXJlM1wiLCB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlNvbW1haXJlRWxlbWVudFwiKSksIHIoXCJTb21tYWlyZUVsZW1lbnRcIikpKSB9LFxuICAgICAgICB7IGpzb246IFwic29tbWFpcmUyXCIsIGpzOiBcInNvbW1haXJlMlwiLCB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlNvbW1haXJlRWxlbWVudFwiKSksIHIoXCJTb21tYWlyZUVsZW1lbnRcIikpKSB9LFxuICAgICAgICB7IGpzb246IFwicGFyYVwiLCBqczogXCJwYXJhXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiVGV4dGVcIikpLCByKFwiVGV4dGVcIikpKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIlNvbW1haXJlRWxlbWVudFwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcInZhbGV1cl9wdHNfb2RqXCIsIGpzOiBcInZhbGV1cl9wdHNfb2RqXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJ0aXRyZVN0cnVjdFwiLCBqczogXCJ0aXRyZVN0cnVjdFwiLCB0eXA6IHUodW5kZWZpbmVkLCByKFwiVGl0cmVTdHJ1Y3RcIikpIH0sXG4gICAgICAgIHsganNvbjogXCJwYXJhXCIsIGpzOiBcInBhcmFcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHUocihcIlRleHRlXCIpLCBcIlwiKSksIHIoXCJUZXh0ZVwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJzb21tYWlyZTJcIiwganM6IFwic29tbWFpcmUyXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJzb21tYWlyZTNcIiwganM6IFwic29tbWFpcmUzXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJwcmVzaWRlbnRTZWFuY2VcIiwganM6IFwicHJlc2lkZW50U2VhbmNlXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiVGV4dGVcIikpLCByKFwiVGV4dGVcIikpKSB9LFxuICAgICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiVGl0cmVTdHJ1Y3RcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJpZF9zeWNlcm9uXCIsIGpzOiBcImlkX3N5Y2Vyb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJpbnRpdHVsZVwiLCBqczogXCJpbnRpdHVsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwic291c0ludGl0dWxlXCIsIGpzOiBcInNvdXNJbnRpdHVsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwidHlwZV9kZWJhdFwiLCBqczogXCJ0eXBlX2RlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiRGVjaXNpb25cIjogW1xuICAgICAgICBcIkFET1BUSU9OIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgICAgICAgXCJBRE9QVElPTiBk4oCZdW4gYXJ0aWNsZSAodm90ZSDDoCBtYWluIGxldsOpZSlcIixcbiAgICAgICAgXCJBRE9QVElPTiBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgICAgIFwiQURPUFRJT04gZGUgcGx1c2lldXJzIGFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgYWR0c1wiLFxuICAgICAgICBcIkFET1BUSU9OIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIlJFSkVUIGTigJl1biBhbWVuZGVtZW50IChtYWluIGxldsOpZSkgYWR0XCIsXG4gICAgICAgIFwiUkVKRVQgZOKAmXVuIGFydGljbGUgKHZvdGUgw6AgbWFpbiBsZXbDqWUpXCIsXG4gICAgICAgIFwiUkVKRVQgZOKAmXVuIHNvdXMtYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIHNzLWFkdFwiLFxuICAgICAgICBcIlJFSkVUIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgICAgICAgXCJSRUpFVCBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgICAgICAgXCJSRUpFVCBtb3Rpb24gZGUgcmVqZXQgcHLDqWFsYWJsZSAobWFpbiBsZXbDqWUpXCIsXG4gICAgXSxcbn07Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEsSUFxRFlBLFFBQVEsR0FBQUMsT0FBQSxDQUFBRCxRQUFBLDBCQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQUEsT0FBUkEsUUFBUTtBQUFBO0FBbUdwQjtBQUNBO0FBQUEsSUFDYUUsT0FBTyxHQUFBRCxP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