UNPKG

@tricoteuses/assemblee

Version:

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

573 lines (570 loc) 65.8 kB
// 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. export let 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 export class Convert { static toComptesRendus(json) { return cast(JSON.parse(json), r("ComptesRendus")); } static comptesRendusToJson(value) { return JSON.stringify(uncast(value, r("ComptesRendus")), null, 2); } static toCompteRenduWrapper(json) { return cast(JSON.parse(json), r("CompteRenduWrapper")); } static compteRenduWrapperToJson(value) { return JSON.stringify(uncast(value, r("CompteRenduWrapper")), null, 2); } } function invalidValue(typ, val, key, parent = '') { const prettyTyp = prettyTypeName(typ); const parentText = parent ? ` on ${parent}` : ''; const keyText = key ? ` for key "${key}"` : ''; throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`); } function prettyTypeName(typ) { if (Array.isArray(typ)) { if (typ.length === 2 && typ[0] === undefined) { return `an optional ${prettyTypeName(typ[1])}`; } else { return `one of [${typ.map(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) { const map = {}; typ.props.forEach(p => map[p.json] = { key: p.js, typ: p.typ }); typ.jsonToJS = map; } return typ.jsonToJS; } function jsToJSONProps(typ) { if (typ.jsToJSON === undefined) { const map = {}; typ.props.forEach(p => map[p.js] = { key: p.json, typ: p.typ }); typ.jsToJSON = map; } return typ.jsToJSON; } function transform(val, typ, getProps, key = '', parent = '') { 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 const l = typs.length; for (let i = 0; i < l; i++) { const 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(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(el => transform(el, typ, getProps)); } function transformDate(val) { if (val === null) { return null; } const 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); } const result = {}; Object.getOwnPropertyNames(props).forEach(key => { const prop = props[key]; const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; result[prop.key] = transform(v, prop.typ, getProps, key, ref); }); Object.getOwnPropertyNames(val).forEach(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); let 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(...typs) { return { unionMembers: typs }; } function o(props, additional) { return { props, additional }; } // function m(additional: any) { // return { props: [], additional }; // } function r(name) { return { ref: name }; } const 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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNpc2lvbiIsIkNvbnZlcnQiLCJ0b0NvbXB0ZXNSZW5kdXMiLCJqc29uIiwiY2FzdCIsIkpTT04iLCJwYXJzZSIsInIiLCJjb21wdGVzUmVuZHVzVG9Kc29uIiwidmFsdWUiLCJzdHJpbmdpZnkiLCJ1bmNhc3QiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1V3JhcHBlclRvSnNvbiIsImludmFsaWRWYWx1ZSIsInR5cCIsInZhbCIsImtleSIsInBhcmVudCIsInByZXR0eVR5cCIsInByZXR0eVR5cGVOYW1lIiwicGFyZW50VGV4dCIsImtleVRleHQiLCJFcnJvciIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1hcCIsImEiLCJqb2luIiwibGl0ZXJhbCIsImpzb25Ub0pTUHJvcHMiLCJqc29uVG9KUyIsInByb3BzIiwiZm9yRWFjaCIsInAiLCJqcyIsImpzVG9KU09OUHJvcHMiLCJqc1RvSlNPTiIsInRyYW5zZm9ybSIsImdldFByb3BzIiwidHJhbnNmb3JtUHJpbWl0aXZlIiwidHJhbnNmb3JtVW5pb24iLCJ0eXBzIiwibCIsImkiLCJfIiwidHJhbnNmb3JtRW51bSIsImNhc2VzIiwiaW5kZXhPZiIsInRyYW5zZm9ybUFycmF5IiwiZWwiLCJ0cmFuc2Zvcm1EYXRlIiwiZCIsIkRhdGUiLCJpc05hTiIsInZhbHVlT2YiLCJ0cmFuc2Zvcm1PYmplY3QiLCJhZGRpdGlvbmFsIiwicmVmIiwicmVzdWx0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJ2IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidHlwZU1hcCIsInVuaW9uTWVtYmVycyIsImFycmF5SXRlbXMiLCJ1IiwibyIsIm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcmF3X3R5cGVzL2RlYmF0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUbyBwYXJzZSB0aGlzIGRhdGE6XG4vL1xuLy8gICBpbXBvcnQgeyBDb252ZXJ0LCBDb21wdGVzUmVuZHVzLCBDb21wdGVSZW5kdVdyYXBwZXIgfSBmcm9tIFwiLi9maWxlXCI7XG4vL1xuLy8gICBjb25zdCBjb21wdGVSZW5kdSA9IENvbnZlcnQudG9Db21wdGVSZW5kdShqc29uKTtcbi8vICAgY29uc3QgY29tcHRlUmVuZHVXcmFwcGVyID0gQ29udmVydC50b0NvbXB0ZVJlbmR1V3JhcHBlcihqc29uKTtcbi8vXG4vLyBUaGVzZSBmdW5jdGlvbnMgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgSlNPTiBkb2Vzbid0XG4vLyBtYXRjaCB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlLCBldmVuIGlmIHRoZSBKU09OIGlzIHZhbGlkLlxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB0ZXNSZW5kdXMge1xuICAgIGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdUNsYXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB0ZVJlbmR1Q2xhc3Mge1xuICAgIGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB0ZVJlbmR1V3JhcHBlciB7XG4gICAgY29tcHRlUmVuZHU6IENvbXB0ZVJlbmR1O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXB0ZVJlbmR1IHtcbiAgICB4bWxuczogc3RyaW5nO1xuICAgIHVpZDogc3RyaW5nO1xuICAgIHNlYW5jZVJlZjogc3RyaW5nO1xuICAgIHNlc3Npb25SZWY6IHN0cmluZztcbiAgICBtZXRhZG9ubmVlczogTWV0YWRvbm5lZXM7XG4gICAgY29udGVudTogQ29udGVudTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW51IHtcbiAgICBxdWFudGllbWVzOiBRdWFudGllbWVzO1xuICAgIG91dmVydHVyZVNlYW5jZTogUG9pbnRbXSB8IFBvaW50O1xuICAgIHBvaW50OiBQb2ludFtdIHwgUG9pbnQ7XG4gICAgZmluU2VhbmNlPzogRmluU2VhbmNlO1xuICAgIHBhcmFncmFwaGU/OiBQb2ludFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpblNlYW5jZSB7XG4gICAgcG9pbnQ6IFBvaW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yYXRldXJzIHtcbiAgICBvcmF0ZXVyOiBPcmF0ZXVyRWxlbWVudFtdIHwgT3JhdGV1ckVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JhdGV1ckVsZW1lbnQge1xuICAgIG5vbTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcXVhbGl0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRlIHtcbiAgICBfPzogc3RyaW5nXG4gICAgaWRfc3ljZXJvbj86IHN0cmluZ1xuICAgIHN0aW1lPzogc3RyaW5nXG4gICAgc3VwPzogc3RyaW5nXG4gICAgbGllbkFkdD86IFRleHRlW10gfCBUZXh0ZVxufVxuXG5leHBvcnQgZW51bSBEZWNpc2lvbiB7XG4gICAgQWRvcHRpb25BbWVuZGVtZW50TWFpbkxldsOpZUFkdCA9IFwiQURPUFRJT04gYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIGFkdFwiLFxuICAgIEFkb3B0aW9uRFVuQXJ0aWNsZVZvdGXDgE1haW5MZXbDqWUgPSBcIkFET1BUSU9OIGTigJl1biBhcnRpY2xlICh2b3RlIMOgIG1haW4gbGV2w6llKVwiLFxuICAgIEFkb3B0aW9uRFVuU291c0FtZW5kZW1lbnRNYWluTGV2w6llU3NBZHQgPSBcIkFET1BUSU9OIGTigJl1biBzb3VzLWFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBzcy1hZHRcIixcbiAgICBBZG9wdGlvbkRlUGx1c2lldXJzQW1lbmRlbWVudHNNYWluTGV2w6llQWR0cyA9IFwiQURPUFRJT04gZGUgcGx1c2lldXJzIGFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgYWR0c1wiLFxuICAgIEFkb3B0aW9uRGVQbHVzaWV1cnNTb3VzQW1lbmRlbWVudHNNYWluTGV2w6llU3NBZHRzID0gXCJBRE9QVElPTiBkZSBwbHVzaWV1cnMgc291cy1hbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIHNzLWFkdHNcIixcbiAgICBFbXB0eSA9IFwiXCIsXG4gICAgUmVqZXREVW5BbWVuZGVtZW50TWFpbkxldsOpZUFkdCA9IFwiUkVKRVQgZOKAmXVuIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgICBSZWpldERVbkFydGljbGVWb3Rlw4BNYWluTGV2w6llID0gXCJSRUpFVCBk4oCZdW4gYXJ0aWNsZSAodm90ZSDDoCBtYWluIGxldsOpZSlcIixcbiAgICBSZWpldERVblNvdXNBbWVuZGVtZW50TWFpbkxldsOpZVNzQWR0ID0gXCJSRUpFVCBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgUmVqZXREZVBsdXNpZXVyc0FtZW5kZW1lbnRzTWFpbkxldsOpZUFkdHMgPSBcIlJFSkVUIGRlIHBsdXNpZXVycyBhbWVuZGVtZW50cyAobWFpbiBsZXbDqWUpIGFkdHNcIixcbiAgICBSZWpldERlUGx1c2lldXJzU291c0FtZW5kZW1lbnRzTWFpbkxldsOpZVNzQWR0cyA9IFwiUkVKRVQgZGUgcGx1c2lldXJzIHNvdXMtYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBzcy1hZHRzXCIsXG4gICAgUmVqZXRNb3Rpb25EZVJlamV0UHLDqWFsYWJsZU1haW5MZXbDqWUgPSBcIlJFSkVUIG1vdGlvbiBkZSByZWpldCBwcsOpYWxhYmxlIChtYWluIGxldsOpZSlcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb2ludCB7XG4gICAgaWRfcHJlcGFyYXRpb24/OiBzdHJpbmc7XG4gICAgb3JkcmVfYWJzb2x1X3NlYW5jZT86IHN0cmluZztcbiAgICBjb2RlX2dyYW1tYWlyZT86IHN0cmluZztcbiAgICBzb21tYWlyZT86IHN0cmluZztcbiAgICBpZF9zeWNlcm9uPzogc3RyaW5nO1xuICAgIHZhbGV1cl9wdHNvZGo/OiBzdHJpbmc7XG4gICAgbml2cG9pbnQ/OiBzdHJpbmc7XG4gICAgb3JkaW5hbF9wcmlzZT86IHN0cmluZztcbiAgICBjb2RlX3N0eWxlPzogc3RyaW5nO1xuICAgIGNvZGVfcGFyb2xlPzogc3RyaW5nO1xuICAgIHZhbGV1cj86IHN0cmluZztcbiAgICBvcmF0ZXVycz86IE9yYXRldXJzIHwgc3RyaW5nO1xuICAgIHRleHRlPzogVGV4dGUgfCBzdHJpbmc7XG4gICAgcGFyYWdyYXBoZT86IFBvaW50W10gfCBQb2ludDtcbiAgICBpbnRlckV4dHJhY3Rpb24/OiBQb2ludFtdIHwgUG9pbnQ7XG4gICAgcG9pbnQ/OiBQb2ludFtdIHwgUG9pbnQ7XG4gICAgc3RydWN0dXJlPzogc3RyaW5nO1xuICAgIGlkX2FjdGV1cj86IHN0cmluZztcbiAgICBpZF9tYW5kYXQ/OiBzdHJpbmc7XG4gICAgaWRfbm9taW5hdGlvbl9vZT86IHN0cmluZztcbiAgICBpZF9ub21pbmF0aW9uX29wPzogc3RyaW5nO1xuICAgIG9yYXRldXI/OiBzdHJpbmc7XG4gICAgYmliYXJkPzogc3RyaW5nO1xuICAgIGFydD86IHN0cmluZztcbiAgICBhZHQ/OiBzdHJpbmc7XG4gICAgc3NhZHQ/OiBzdHJpbmc7XG4gICAgcm9sZWRlYmF0Pzogc3RyaW5nO1xuICAgIGNoYW5nZW1lbnRQcmVzaWRlbmNlPzogUG9pbnQ7XG4gICAgdHlwZV9kZWJhdD86IHN0cmluZztcbiAgICBkZWNpc2lvbj86IERlY2lzaW9uO1xuICAgIG91dmVydHVyZVNlYW5jZT86IFBvaW50O1xuICAgIHF1YWxpdGU/OiBzdHJpbmc7XG4gICAgbm9tX29yYXRldXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbnRpZW1lcyB7XG4gICAgam91cm5lZTogc3RyaW5nO1xuICAgIHNlc3Npb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhZG9ubmVlcyB7XG4gICAgZGF0ZVNlYW5jZTogc3RyaW5nO1xuICAgIGRhdGVTZWFuY2VKb3VyOiBzdHJpbmc7XG4gICAgbnVtU2VhbmNlSm91cjogc3RyaW5nO1xuICAgIG51bVNlYW5jZTogc3RyaW5nO1xuICAgIHR5cGVBc3NlbWJsZWU6IHN0cmluZztcbiAgICBsZWdpc2xhdHVyZTogc3RyaW5nO1xuICAgIHNlc3Npb246IHN0cmluZztcbiAgICBub21GaWNoaWVySm86IHN0cmluZztcbiAgICB2YWxpZGl0ZTogc3RyaW5nO1xuICAgIGV0YXQ6IHN0cmluZztcbiAgICBkaWZmdXNpb246IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZW52aXJvbm5lbWVudDogc3RyaW5nO1xuICAgIGhldXJlR2VuZXJhdGlvbjogRGF0ZTtcbiAgICBzb21tYWlyZTogU29tbWFpcmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29tbWFpcmUge1xuICAgIHByZXNpZGVudFNlYW5jZTogVGV4dGU7XG4gICAgc29tbWFpcmUxOiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudDtcbiAgICBzb21tYWlyZTM/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudDtcbiAgICBzb21tYWlyZTI/OiBTb21tYWlyZUVsZW1lbnRbXSB8IFNvbW1haXJlRWxlbWVudDtcbiAgICBwYXJhPzogVGV4dGVbXSB8IFRleHRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvbW1haXJlRWxlbWVudCB7XG4gICAgdmFsZXVyX3B0c19vZGo6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0aXRyZVN0cnVjdDogVGl0cmVTdHJ1Y3Q7XG4gICAgcGFyYT86IEFycmF5PFRleHRlIHwgc3RyaW5nPiB8IFRleHRlO1xuICAgIHNvbW1haXJlMj86IFNvbW1haXJlRWxlbWVudFtdIHwgU29tbWFpcmVFbGVtZW50O1xuICAgIHNvbW1haXJlMz86IFNvbW1haXJlRWxlbWVudFtdIHwgU29tbWFpcmVFbGVtZW50O1xuICAgIHByZXNpZGVudFNlYW5jZT86IFRleHRlW10gfCBUZXh0ZTtcbiAgICB0eXBlX2RlYmF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpdHJlU3RydWN0IHtcbiAgICBpZF9zeWNlcm9uOiBzdHJpbmc7XG4gICAgaW50aXR1bGU/OiBzdHJpbmc7XG4gICAgc291c0ludGl0dWxlPzogc3RyaW5nO1xuICAgIHR5cGVfZGViYXQ/OiBzdHJpbmc7XG59XG5cbi8vIENvbnZlcnRzIEpTT04gc3RyaW5ncyB0by9mcm9tIHlvdXIgdHlwZXNcbi8vIGFuZCBhc3NlcnRzIHRoZSByZXN1bHRzIG9mIEpTT04ucGFyc2UgYXQgcnVudGltZVxuZXhwb3J0IGNsYXNzIENvbnZlcnQge1xuICAgIHB1YmxpYyBzdGF0aWMgdG9Db21wdGVzUmVuZHVzKGpzb246IHN0cmluZyk6IENvbXB0ZXNSZW5kdXMge1xuICAgICAgICByZXR1cm4gY2FzdChKU09OLnBhcnNlKGpzb24pLCByKFwiQ29tcHRlc1JlbmR1c1wiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjb21wdGVzUmVuZHVzVG9Kc29uKHZhbHVlOiBDb21wdGVzUmVuZHVzKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHVuY2FzdCh2YWx1ZSwgcihcIkNvbXB0ZXNSZW5kdXNcIikpLCBudWxsLCAyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvQ29tcHRlUmVuZHVXcmFwcGVyKGpzb246IHN0cmluZyk6IENvbXB0ZVJlbmR1V3JhcHBlciB7XG4gICAgICAgIHJldHVybiBjYXN0KEpTT04ucGFyc2UoanNvbiksIHIoXCJDb21wdGVSZW5kdVdyYXBwZXJcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY29tcHRlUmVuZHVXcmFwcGVyVG9Kc29uKHZhbHVlOiBDb21wdGVSZW5kdVdyYXBwZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodW5jYXN0KHZhbHVlLCByKFwiQ29tcHRlUmVuZHVXcmFwcGVyXCIpKSwgbnVsbCwgMik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkVmFsdWUodHlwOiBhbnksIHZhbDogYW55LCBrZXk6IGFueSwgcGFyZW50OiBhbnkgPSAnJyk6IG5ldmVyIHtcbiAgICBjb25zdCBwcmV0dHlUeXAgPSBwcmV0dHlUeXBlTmFtZSh0eXApO1xuICAgIGNvbnN0IHBhcmVudFRleHQgPSBwYXJlbnQgPyBgIG9uICR7cGFyZW50fWAgOiAnJztcbiAgICBjb25zdCBrZXlUZXh0ID0ga2V5ID8gYCBmb3Iga2V5IFwiJHtrZXl9XCJgIDogJyc7XG4gICAgdGhyb3cgRXJyb3IoYEludmFsaWQgdmFsdWUke2tleVRleHR9JHtwYXJlbnRUZXh0fS4gRXhwZWN0ZWQgJHtwcmV0dHlUeXB9IGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWwpfWApO1xufVxuXG5mdW5jdGlvbiBwcmV0dHlUeXBlTmFtZSh0eXA6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkge1xuICAgICAgICBpZiAodHlwLmxlbmd0aCA9PT0gMiAmJiB0eXBbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGBhbiBvcHRpb25hbCAke3ByZXR0eVR5cGVOYW1lKHR5cFsxXSl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgb25lIG9mIFske3R5cC5tYXAoYSA9PiB7IHJldHVybiBwcmV0dHlUeXBlTmFtZShhKTsgfSkuam9pbihcIiwgXCIpfV1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiICYmIHR5cC5saXRlcmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHR5cC5saXRlcmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdHlwO1xuICAgIH1cbn1cblxuZnVuY3Rpb24ganNvblRvSlNQcm9wcyh0eXA6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cC5qc29uVG9KUyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG1hcDogYW55ID0ge307XG4gICAgICAgIHR5cC5wcm9wcy5mb3JFYWNoKChwOiBhbnkpID0+IG1hcFtwLmpzb25dID0geyBrZXk6IHAuanMsIHR5cDogcC50eXAgfSk7XG4gICAgICAgIHR5cC5qc29uVG9KUyA9IG1hcDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cC5qc29uVG9KUztcbn1cblxuZnVuY3Rpb24ganNUb0pTT05Qcm9wcyh0eXA6IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cC5qc1RvSlNPTiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG1hcDogYW55ID0ge307XG4gICAgICAgIHR5cC5wcm9wcy5mb3JFYWNoKChwOiBhbnkpID0+IG1hcFtwLmpzXSA9IHsga2V5OiBwLmpzb24sIHR5cDogcC50eXAgfSk7XG4gICAgICAgIHR5cC5qc1RvSlNPTiA9IG1hcDtcbiAgICB9XG4gICAgcmV0dXJuIHR5cC5qc1RvSlNPTjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbDogYW55LCB0eXA6IGFueSwgZ2V0UHJvcHM6IGFueSwga2V5OiBhbnkgPSAnJywgcGFyZW50OiBhbnkgPSAnJyk6IGFueSB7XG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtUHJpbWl0aXZlKHR5cDogc3RyaW5nLCB2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0eXBlb2YgdHlwID09PSB0eXBlb2YgdmFsKSByZXR1cm4gdmFsO1xuICAgICAgICByZXR1cm4gaW52YWxpZFZhbHVlKHR5cCwgdmFsLCBrZXksIHBhcmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtVW5pb24odHlwczogYW55W10sIHZhbDogYW55KTogYW55IHtcbiAgICAgICAgLy8gdmFsIG11c3QgdmFsaWRhdGUgYWdhaW5zdCBvbmUgdHlwIGluIHR5cHNcbiAgICAgICAgY29uc3QgbCA9IHR5cHMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdHlwID0gdHlwc1tpXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwgZ2V0UHJvcHMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykgeyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXBzLCB2YWwsIGtleSwgcGFyZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1FbnVtKGNhc2VzOiBzdHJpbmdbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoY2FzZXMuaW5kZXhPZih2YWwpICE9PSAtMSkgcmV0dXJuIHZhbDtcbiAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZShjYXNlcy5tYXAoYSA9PiB7IHJldHVybiBsKGEpOyB9KSwgdmFsLCBrZXksIHBhcmVudCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtQXJyYXkodHlwOiBhbnksIHZhbDogYW55KTogYW55IHtcbiAgICAgICAgLy8gdmFsIG11c3QgYmUgYW4gYXJyYXkgd2l0aCBubyBpbnZhbGlkIGVsZW1lbnRzXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gaW52YWxpZFZhbHVlKGwoXCJhcnJheVwiKSwgdmFsLCBrZXksIHBhcmVudCk7XG4gICAgICAgIHJldHVybiB2YWwubWFwKGVsID0+IHRyYW5zZm9ybShlbCwgdHlwLCBnZXRQcm9wcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybURhdGUodmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsKTtcbiAgICAgICAgaWYgKGlzTmFOKGQudmFsdWVPZigpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZShsKFwiRGF0ZVwiKSwgdmFsLCBrZXksIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJhbnNmb3JtT2JqZWN0KHByb3BzOiB7IFtrOiBzdHJpbmddOiBhbnkgfSwgYWRkaXRpb25hbDogYW55LCB2YWw6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsdWUobChyZWYgfHwgXCJvYmplY3RcIiksIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsLCBrZXkpID8gdmFsW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXN1bHRbcHJvcC5rZXldID0gdHJhbnNmb3JtKHYsIHByb3AudHlwLCBnZXRQcm9wcywga2V5LCByZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywga2V5KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNmb3JtKHZhbFtrZXldLCBhZGRpdGlvbmFsLCBnZXRQcm9wcywga2V5LCByZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAodHlwID09PSBcImFueVwiKSByZXR1cm4gdmFsO1xuICAgIGlmICh0eXAgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuIHZhbDtcbiAgICAgICAgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgIH1cbiAgICBpZiAodHlwID09PSBmYWxzZSkgcmV0dXJuIGludmFsaWRWYWx1ZSh0eXAsIHZhbCwga2V5LCBwYXJlbnQpO1xuICAgIGxldCByZWY6IGFueSA9IHVuZGVmaW5lZDtcbiAgICB3aGlsZSAodHlwZW9mIHR5cCA9PT0gXCJvYmplY3RcIiAmJiB0eXAucmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVmID0gdHlwLnJlZjtcbiAgICAgICAgdHlwID0gdHlwZU1hcFt0eXAucmVmXTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHlwKSkgcmV0dXJuIHRyYW5zZm9ybUVudW0odHlwLCB2YWwpO1xuICAgIGlmICh0eXBlb2YgdHlwID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJldHVybiB0eXAuaGFzT3duUHJvcGVydHkoXCJ1bmlvbk1lbWJlcnNcIikgPyB0cmFuc2Zvcm1Vbmlvbih0eXAudW5pb25NZW1iZXJzLCB2YWwpXG4gICAgICAgICAgICA6IHR5cC5oYXNPd25Qcm9wZXJ0eShcImFycmF5SXRlbXNcIikgPyB0cmFuc2Zvcm1BcnJheSh0eXAuYXJyYXlJdGVtcywgdmFsKVxuICAgICAgICAgICAgICAgIDogdHlwLmhhc093blByb3BlcnR5KFwicHJvcHNcIikgPyB0cmFuc2Zvcm1PYmplY3QoZ2V0UHJvcHModHlwKSwgdHlwLmFkZGl0aW9uYWwsIHZhbClcbiAgICAgICAgICAgICAgICAgICAgOiBpbnZhbGlkVmFsdWUodHlwLCB2YWwsIGtleSwgcGFyZW50KTtcbiAgICB9XG4gICAgLy8gTnVtYmVycyBjYW4gYmUgcGFyc2VkIGJ5IERhdGUgYnV0IHNob3VsZG4ndCBiZS5cbiAgICBpZiAodHlwID09PSBEYXRlICYmIHR5cGVvZiB2YWwgIT09IFwibnVtYmVyXCIpIHJldHVybiB0cmFuc2Zvcm1EYXRlKHZhbCk7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVByaW1pdGl2ZSh0eXAsIHZhbCk7XG59XG5cbmZ1bmN0aW9uIGNhc3Q8VD4odmFsOiBhbnksIHR5cDogYW55KTogVCB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybSh2YWwsIHR5cCwganNvblRvSlNQcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVuY2FzdDxUPih2YWw6IFQsIHR5cDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdHJhbnNmb3JtKHZhbCwgdHlwLCBqc1RvSlNPTlByb3BzKTtcbn1cblxuZnVuY3Rpb24gbCh0eXA6IGFueSkge1xuICAgIHJldHVybiB7IGxpdGVyYWw6IHR5cCB9O1xufVxuXG5mdW5jdGlvbiBhKHR5cDogYW55KSB7XG4gICAgcmV0dXJuIHsgYXJyYXlJdGVtczogdHlwIH07XG59XG5cbmZ1bmN0aW9uIHUoLi4udHlwczogYW55W10pIHtcbiAgICByZXR1cm4geyB1bmlvbk1lbWJlcnM6IHR5cHMgfTtcbn1cblxuZnVuY3Rpb24gbyhwcm9wczogYW55W10sIGFkZGl0aW9uYWw6IGFueSkge1xuICAgIHJldHVybiB7IHByb3BzLCBhZGRpdGlvbmFsIH07XG59XG5cbi8vIGZ1bmN0aW9uIG0oYWRkaXRpb25hbDogYW55KSB7XG4vLyAgICAgcmV0dXJuIHsgcHJvcHM6IFtdLCBhZGRpdGlvbmFsIH07XG4vLyB9XG5cbmZ1bmN0aW9uIHIobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHsgcmVmOiBuYW1lIH07XG59XG5cbmNvbnN0IHR5cGVNYXA6IGFueSA9IHtcbiAgICBcIkNvbXB0ZXNSZW5kdXNcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJjb21wdGVzUmVuZHVzXCIsIGpzOiBcImNvbXB0ZXNSZW5kdXNcIiwgdHlwOiByKFwiQ29tcHRlUmVuZHVDbGFzc1wiKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIkNvbXB0ZVJlbmR1Q2xhc3NcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJjb21wdGVSZW5kdVwiLCBqczogXCJjb21wdGVSZW5kdVwiLCB0eXA6IGEocihcIkNvbXB0ZVJlbmR1XCIpKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIkNvbXB0ZVJlbmR1V3JhcHBlclwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcImNvbXB0ZVJlbmR1XCIsIGpzOiBcImNvbXB0ZVJlbmR1XCIsIHR5cDogcihcIkNvbXB0ZVJlbmR1XCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiQ29tcHRlUmVuZHVcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJ4bWxuc1wiLCBqczogXCJ4bWxuc1wiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcInVpZFwiLCBqczogXCJ1aWRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJzZWFuY2VSZWZcIiwganM6IFwic2VhbmNlUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwic2Vzc2lvblJlZlwiLCBqczogXCJzZXNzaW9uUmVmXCIsIHR5cDogXCJcIiB9LFxuICAgICAgICB7IGpzb246IFwibWV0YWRvbm5lZXNcIiwganM6IFwibWV0YWRvbm5lZXNcIiwgdHlwOiByKFwiTWV0YWRvbm5lZXNcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImNvbnRlbnVcIiwganM6IFwiY29udGVudVwiLCB0eXA6IHIoXCJDb250ZW51XCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiQ29udGVudVwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcInF1YW50aWVtZXNcIiwganM6IFwicXVhbnRpZW1lc1wiLCB0eXA6IHIoXCJRdWFudGllbWVzXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJvdXZlcnR1cmVTZWFuY2VcIiwganM6IFwib3V2ZXJ0dXJlU2VhbmNlXCIsIHR5cDogdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInBvaW50XCIsIGpzOiBcInBvaW50XCIsIHR5cDogdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcImZpblNlYW5jZVwiLCBqczogXCJmaW5TZWFuY2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIkZpblNlYW5jZVwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInBhcmFncmFwaGVcIiwganM6IFwicGFyYWdyYXBoZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBhKHIoXCJQb2ludFwiKSkpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiRmluU2VhbmNlXCI6IG8oW1xuICAgICAgICB7IGpzb246IFwicG9pbnRcIiwganM6IFwicG9pbnRcIiwgdHlwOiByKFwiUG9pbnRcIikgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJPcmF0ZXVyc1wiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcIm9yYXRldXJcIiwganM6IFwib3JhdGV1clwiLCB0eXA6IHUoYShyKFwiT3JhdGV1ckVsZW1lbnRcIikpLCByKFwiT3JhdGV1ckVsZW1lbnRcIikpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiT3JhdGV1ckVsZW1lbnRcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJub21cIiwganM6IFwibm9tXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJpZFwiLCBqczogXCJpZFwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwicXVhbGl0ZVwiLCBqczogXCJxdWFsaXRlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiVGV4dGVcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJfXCIsIGpzOiBcIl9cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImlkX3N5Y2Vyb25cIiwganM6IFwiaWRfc3ljZXJvblwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwic3RpbWVcIiwganM6IFwic3RpbWVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInN1cFwiLCBqczogXCJzdXBcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImxpZW5BZHRcIiwganM6IFwibGllbkFkdFwiLCB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlRleHRlXCIpKSwgcihcIlRleHRlXCIpKSkgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJQb2ludFwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcIm5pdnBvaW50XCIsIGpzOiBcIm5pdnBvaW50XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJ2YWxldXJfcHRzb2RqXCIsIGpzOiBcInZhbGV1cl9wdHNvZGpcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcIm9yZGluYWxfcHJpc2VcIiwganM6IFwib3JkaW5hbF9wcmlzZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwiaWRfcHJlcGFyYXRpb25cIiwganM6IFwiaWRfcHJlcGFyYXRpb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcIm9yZHJlX2Fic29sdV9zZWFuY2VcIiwganM6IFwib3JkcmVfYWJzb2x1X3NlYW5jZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwiY29kZV9ncmFtbWFpcmVcIiwganM6IFwiY29kZV9ncmFtbWFpcmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImNvZGVfc3R5bGVcIiwganM6IFwiY29kZV9zdHlsZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwiY29kZV9wYXJvbGVcIiwganM6IFwiY29kZV9wYXJvbGVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInNvbW1haXJlXCIsIGpzOiBcInNvbW1haXJlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJpZF9zeWNlcm9uXCIsIGpzOiBcImlkX3N5Y2Vyb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInZhbGV1clwiLCBqczogXCJ2YWxldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcIm9yYXRldXJzXCIsIGpzOiBcIm9yYXRldXJzXCIsIHR5cDogdShyKFwiT3JhdGV1cnNcIiksIHUoXCJcIiwgdW5kZWZpbmVkKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInRleHRlXCIsIGpzOiBcInRleHRlXCIsIHR5cDogdShyKFwiVGV4dGVcIiksIHUoXCJcIiwgdW5kZWZpbmVkKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInBhcmFncmFwaGVcIiwganM6IFwicGFyYWdyYXBoZVwiLCB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlBvaW50XCIpKSwgcihcIlBvaW50XCIpKSkgfSxcbiAgICAgICAgeyBqc29uOiBcImludGVyRXh0cmFjdGlvblwiLCBqczogXCJpbnRlckV4dHJhY3Rpb25cIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJQb2ludFwiKSksIHIoXCJQb2ludFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJwb2ludFwiLCBqczogXCJwb2ludFwiLCB0eXA6IHUodW5kZWZpbmVkLCB1KGEocihcIlBvaW50XCIpKSwgcihcIlBvaW50XCIpKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInN0cnVjdHVyZVwiLCBqczogXCJzdHJ1Y3R1cmVcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImlkX2FjdGV1clwiLCBqczogXCJpZF9hY3RldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImlkX21hbmRhdFwiLCBqczogXCJpZF9tYW5kYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImlkX25vbWluYXRpb25fb2VcIiwganM6IFwiaWRfbm9taW5hdGlvbl9vZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgICAgICB7IGpzb246IFwiaWRfbm9taW5hdGlvbl9vcFwiLCBqczogXCJpZF9ub21pbmF0aW9uX29wXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJvcmF0ZXVyXCIsIGpzOiBcIm9yYXRldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImJpYmFyZFwiLCBqczogXCJiaWJhcmRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImFydFwiLCBqczogXCJhcnRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImFkdFwiLCBqczogXCJhZHRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInNzYWR0XCIsIGpzOiBcInNzYWR0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJyb2xlZGViYXRcIiwganM6IFwicm9sZWRlYmF0XCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcImNoYW5nZW1lbnRQcmVzaWRlbmNlXCIsIGpzOiBcImNoYW5nZW1lbnRQcmVzaWRlbmNlXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJQb2ludFwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcImRlY2lzaW9uXCIsIGpzOiBcImRlY2lzaW9uXCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJEZWNpc2lvblwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcIm91dmVydHVyZVNlYW5jZVwiLCBqczogXCJvdXZlcnR1cmVTZWFuY2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgcihcIlBvaW50XCIpKSB9LFxuICAgICAgICB7IGpzb246IFwibm9tX29yYXRldXJcIiwganM6IFwibm9tX29yYXRldXJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInF1YWxpdGVcIiwganM6IFwicXVhbGl0ZVwiLCB0eXA6IHUodW5kZWZpbmVkLCBcIlwiKSB9LFxuICAgIF0sIGZhbHNlKSxcbiAgICBcIlF1YW50aWVtZXNcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJqb3VybmVlXCIsIGpzOiBcImpvdXJuZWVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJzZXNzaW9uXCIsIGpzOiBcInNlc3Npb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiTWV0YWRvbm5lZXNcIjogbyhbXG4gICAgICAgIHsganNvbjogXCJkYXRlU2VhbmNlXCIsIGpzOiBcImRhdGVTZWFuY2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJkYXRlU2VhbmNlSm91clwiLCBqczogXCJkYXRlU2VhbmNlSm91clwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcIm51bVNlYW5jZUpvdXJcIiwganM6IFwibnVtU2VhbmNlSm91clwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcIm51bVNlYW5jZVwiLCBqczogXCJudW1TZWFuY2VcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJ0eXBlQXNzZW1ibGVlXCIsIGpzOiBcInR5cGVBc3NlbWJsZWVcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJsZWdpc2xhdHVyZVwiLCBqczogXCJsZWdpc2xhdHVyZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcInNlc3Npb25cIiwganM6IFwic2Vzc2lvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcIm5vbUZpY2hpZXJKb1wiLCBqczogXCJub21GaWNoaWVySm9cIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJ2YWxpZGl0ZVwiLCBqczogXCJ2YWxpZGl0ZVwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcImV0YXRcIiwganM6IFwiZXRhdFwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcImRpZmZ1c2lvblwiLCBqczogXCJkaWZmdXNpb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJ2ZXJzaW9uXCIsIGpzOiBcInZlcnNpb25cIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJlbnZpcm9ubmVtZW50XCIsIGpzOiBcImVudmlyb25uZW1lbnRcIiwgdHlwOiBcIlwiIH0sXG4gICAgICAgIHsganNvbjogXCJoZXVyZUdlbmVyYXRpb25cIiwganM6IFwiaGV1cmVHZW5lcmF0aW9uXCIsIHR5cDogRGF0ZSB9LFxuICAgICAgICB7IGpzb246IFwic29tbWFpcmVcIiwganM6IFwic29tbWFpcmVcIiwgdHlwOiByKFwiU29tbWFpcmVcIikgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJTb21tYWlyZVwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcInByZXNpZGVudFNlYW5jZVwiLCBqczogXCJwcmVzaWRlbnRTZWFuY2VcIiwgdHlwOiByKFwiVGV4dGVcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInNvbW1haXJlMVwiLCBqczogXCJzb21tYWlyZTFcIiwgdHlwOiB1KGEocihcIlNvbW1haXJlRWxlbWVudFwiKSksIHIoXCJTb21tYWlyZUVsZW1lbnRcIikpIH0sXG4gICAgICAgIHsganNvbjogXCJzb21tYWlyZTNcIiwganM6IFwic29tbWFpcmUzXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJzb21tYWlyZTJcIiwganM6IFwic29tbWFpcmUyXCIsIHR5cDogdSh1bmRlZmluZWQsIHUoYShyKFwiU29tbWFpcmVFbGVtZW50XCIpKSwgcihcIlNvbW1haXJlRWxlbWVudFwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJwYXJhXCIsIGpzOiBcInBhcmFcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJUZXh0ZVwiKSksIHIoXCJUZXh0ZVwiKSkpIH0sXG4gICAgXSwgZmFsc2UpLFxuICAgIFwiU29tbWFpcmVFbGVtZW50XCI6IG8oW1xuICAgICAgICB7IGpzb246IFwidmFsZXVyX3B0c19vZGpcIiwganM6IFwidmFsZXVyX3B0c19vZGpcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICAgICAgeyBqc29uOiBcInRpdHJlU3RydWN0XCIsIGpzOiBcInRpdHJlU3RydWN0XCIsIHR5cDogdSh1bmRlZmluZWQsIHIoXCJUaXRyZVN0cnVjdFwiKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInBhcmFcIiwganM6IFwicGFyYVwiLCB0eXA6IHUodW5kZWZpbmVkLCB1KGEodShyKFwiVGV4dGVcIiksIFwiXCIpKSwgcihcIlRleHRlXCIpKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInNvbW1haXJlMlwiLCBqczogXCJzb21tYWlyZTJcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInNvbW1haXJlM1wiLCBqczogXCJzb21tYWlyZTNcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJTb21tYWlyZUVsZW1lbnRcIikpLCByKFwiU29tbWFpcmVFbGVtZW50XCIpKSkgfSxcbiAgICAgICAgeyBqc29uOiBcInByZXNpZGVudFNlYW5jZVwiLCBqczogXCJwcmVzaWRlbnRTZWFuY2VcIiwgdHlwOiB1KHVuZGVmaW5lZCwgdShhKHIoXCJUZXh0ZVwiKSksIHIoXCJUZXh0ZVwiKSkpIH0sXG4gICAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJUaXRyZVN0cnVjdFwiOiBvKFtcbiAgICAgICAgeyBqc29uOiBcImlkX3N5Y2Vyb25cIiwganM6IFwiaWRfc3ljZXJvblwiLCB0eXA6IFwiXCIgfSxcbiAgICAgICAgeyBqc29uOiBcImludGl0dWxlXCIsIGpzOiBcImludGl0dWxlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJzb3VzSW50aXR1bGVcIiwganM6IFwic291c0ludGl0dWxlXCIsIHR5cDogdSh1bmRlZmluZWQsIFwiXCIpIH0sXG4gICAgICAgIHsganNvbjogXCJ0eXBlX2RlYmF0XCIsIGpzOiBcInR5cGVfZGViYXRcIiwgdHlwOiB1KHVuZGVmaW5lZCwgXCJcIikgfSxcbiAgICBdLCBmYWxzZSksXG4gICAgXCJEZWNpc2lvblwiOiBbXG4gICAgICAgIFwiQURPUFRJT04gYW1lbmRlbWVudCAobWFpbiBsZXbDqWUpIGFkdFwiLFxuICAgICAgICBcIkFET1BUSU9OIGTigJl1biBhcnRpY2xlICh2b3RlIMOgIG1haW4gbGV2w6llKVwiLFxuICAgICAgICBcIkFET1BUSU9OIGTigJl1biBzb3VzLWFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBzcy1hZHRcIixcbiAgICAgICAgXCJBRE9QVElPTiBkZSBwbHVzaWV1cnMgYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBhZHRzXCIsXG4gICAgICAgIFwiQURPUFRJT04gZGUgcGx1c2lldXJzIHNvdXMtYW1lbmRlbWVudHMgKG1haW4gbGV2w6llKSBzcy1hZHRzXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiUkVKRVQgZOKAmXVuIGFtZW5kZW1lbnQgKG1haW4gbGV2w6llKSBhZHRcIixcbiAgICAgICAgXCJSRUpFVCBk4oCZdW4gYXJ0aWNsZSAodm90ZSDDoCBtYWluIGxldsOpZSlcIixcbiAgICAgICAgXCJSRUpFVCBk4oCZdW4gc291cy1hbWVuZGVtZW50IChtYWluIGxldsOpZSkgc3MtYWR0XCIsXG4gICAgICAgIFwiUkVKRVQgZGUgcGx1c2lldXJzIGFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgYWR0c1wiLFxuICAgICAgICBcIlJFSkVUIGRlIHBsdXNpZXVycyBzb3VzLWFtZW5kZW1lbnRzIChtYWluIGxldsOpZSkgc3MtYWR0c1wiLFxuICAgICAgICBcIlJFSkVUIG1vdGlvbiBkZSByZWpldCBwcsOpYWxhYmxlIChtYWluIGxldsOpZSlcIixcbiAgICBdLFxufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFxREEsV0FBWUEsUUFBUSwwQkFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFSQSxRQUFRO0VBQVJBLFFBQVE7RUFBUkEsUUFBUTtFQUFBLE9BQVJBLFFBQVE7QUFBQTtBQW1HcEI7QUFDQTtBQUNBLE9BQU8sTUFBTUMsT0FBTyxDQUFDO0VBQ2pCLE9BQWNDLGVBQWVBLENBQUNDLElBQVksRUFBaUI7SUFDdkQsT0FBT0MsSUFBSSxDQUFDQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsSUFBSSxDQUFDLEVBQUVJLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztFQUNyRDtFQUVBLE9BQWNDLG1C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