{"id":15995,"date":"2026-07-09T17:07:46","date_gmt":"2026-07-09T15:07:46","guid":{"rendered":"https:\/\/migflug.com\/?page_id=15995"},"modified":"2026-07-11T23:17:05","modified_gmt":"2026-07-11T21:17:05","slug":"fighter-jet-combat-statistics","status":"publish","type":"page","link":"https:\/\/migflug.com\/cn\/fighter-jet-combat-statistics\/","title":{"rendered":"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service"},"content":{"rendered":"<div id=\"mfcs\">\n<style> #mfcs{ --ink:#0a0a0a; --txt:#141414; --muted:#6a7078; --faint:#9aa0a8; --line:#e3e3e6; --line2:#ededf0; --bg:#ffffff; --bg2:#fafafa; --card:#ffffff; --green:#127a3f;--blue:#2f6fdb; --greenbg:#e7f4ec; --grey:#eeeeef; --greytx:#5a6069; } #mfcs *{box-sizing:border-box;margin:0;padding:0} #mfcs{font-family:'Gilroy regular',system-ui,sans-serif;background:var(--bg);color:var(--txt);line-height:1.5;-webkit-font-smoothing:antialiased} #mfcs a{color:var(--ink);text-decoration:none} #mfcs .wrap{max-width:1180px;margin:0 auto;padding:0 20px} #mfcs .hero{background:#fff;border-bottom:2px solid var(--ink);padding:44px 0 28px;position:relative} #mfcs .kicker{color:var(--muted);font-weight:700;letter-spacing:.16em;text-transform:uppercase;font-size:12px;margin-bottom:12px} #mfcs .hero h1{font-size:clamp(28px,5vw,46px);font-weight:900;line-height:1.03;letter-spacing:-.6px;max-width:820px;color:var(--ink)} #mfcs .hero p.sub{color:var(--greytx);max-width:660px;margin-top:16px;font-size:16px} #mfcs .hero .meta{margin-top:22px;display:flex;gap:26px;flex-wrap:wrap;font-size:13px;color:var(--muted)} #mfcs .hero .meta b{color:var(--ink);font-weight:800} #mfcs .conceptnav{position:sticky;top:0;z-index:40;background:rgba(255,255,255,.94);backdrop-filter:blur(10px);border-bottom:1px solid var(--ink)} #mfcs .conceptnav .wrap{display:flex;gap:0;overflow-x:auto;padding:0 20px} #mfcs .cbtn{flex:0 0 auto;background:none;border:none;color:var(--muted);font-family:inherit;font-weight:700;font-size:14px;padding:15px 18px 12px;border-bottom:3px solid transparent;cursor:pointer;white-space:nowrap;transition:.15s} #mfcs .cbtn:hover{color:var(--ink)} #mfcs .cbtn.active{color:var(--ink);border-bottom-color:var(--ink)} #mfcs .cbtn .n{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;background:var(--grey);font-size:11px;margin-right:7px;color:var(--greytx)} #mfcs .cbtn.active .n{background:var(--ink);color:#fff} #mfcs section.concept{display:none;padding:34px 0 60px;animation:fade .3s ease} #mfcs section.concept.active{display:block} @keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}} #mfcs .chead{margin-bottom:22px} #mfcs .chead .tag{display:inline-block;background:var(--ink);color:#fff;font-weight:700;font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:5px 11px;margin-bottom:12px} #mfcs .chead h2{font-size:26px;font-weight:800;letter-spacing:-.3px;color:var(--ink)} #mfcs .chead p{color:var(--greytx);max-width:730px;margin-top:8px;font-size:15px} #mfcs .controls{display:flex;gap:9px;flex-wrap:wrap;align-items:center;margin-bottom:18px} #mfcs .controls input[type=text],#mfcs .controls select{background:#fff;border:1px solid var(--ink);color:var(--txt);font-family:inherit;font-size:14px;padding:9px 12px;outline:none} #mfcs .controls input[type=text]{min-width:210px} #mfcs .controls input:focus,#mfcs .controls select:focus{outline:2px solid var(--ink);outline-offset:-1px} #mfcs .chip{background:#fff;border:1px solid var(--line);color:var(--greytx);font-family:inherit;font-size:13px;font-weight:600;padding:8px 13px;cursor:pointer;transition:.12s} #mfcs .chip:hover{border-color:var(--ink);color:var(--ink)} #mfcs .chip.on{background:var(--ink);border-color:var(--ink);color:#fff} #mfcs .tablewrap{background:#fff;border:1px solid var(--ink);overflow:hidden} #mfcs .scroll{overflow-x:auto} #mfcs table{width:auto;border-collapse:collapse;font-size:14px;min-width:0} #mfcs thead th{background:var(--ink);color:#fff;text-align:left;font-weight:700;font-size:13.8px;letter-spacing:.03em;text-transform:uppercase;padding:8px 8px;cursor:pointer;user-select:none;white-space:nowrap} #mfcs thead th:hover{background:#222} #mfcs thead th.nosort{cursor:default}#mfcs thead th.nosort:hover{background:var(--ink)} #mfcs thead th .ar{opacity:.45;font-size:10px;margin-left:4px} #mfcs thead th.sorted .ar{opacity:1} #mfcs tbody td{padding:7px 8px;border-bottom:1px solid var(--line);white-space:nowrap;vertical-align:middle;font-size:16.8px} #mfcs tbody tr:last-child td{border-bottom:none} #mfcs tbody tr:hover{background:var(--bg2)} #mfcs .tthumb{width:188px;height:116px;object-fit:cover;object-position:center;display:block;max-width:none} #mfcs .jetname{font-weight:700;color:var(--ink);white-space:normal;line-height:1.2;margin-bottom:7px} #mfcs .jetsub{color:var(--muted);font-size:14.4px;font-weight:500;white-space:normal;line-height:1.25} #mfcs .num{font-variant-numeric:tabular-nums;font-weight:700} #mfcs .k{color:var(--ink);font-weight:800} #mfcs .l{color:var(--faint)} #mfcs .badge{display:inline-block;font-size:13.2px;font-weight:700;padding:3px 9px;border:1px solid} #mfcs .b-proven{background:#fff;color:var(--ink);border-color:var(--ink)} #mfcs .b-strike{background:#fff;color:var(--greytx);border-color:var(--line)} #mfcs .b-untested{background:var(--grey);color:var(--faint);border-color:var(--grey)}#mfcs .b-no{background:#fff;color:var(--faint);border-color:var(--line)}#mfcs .estar{color:var(--muted);font-weight:700;font-size:13.2px;margin-left:1px} #mfcs .gen{font-weight:800;font-size:16.8px;color:var(--ink)} #mfcs .flag{font-size:15px;margin-right:6px} #mfcs .av{display:inline-flex;align-items:center;justify-content:center;gap:5px;font-size:13.2px;font-weight:800;padding:4px 9px;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap;width:142px;box-sizing:border-box;text-align:center} #mfcs .av-go{background:var(--blue);color:#fff} #mfcs .av-go:hover{background:#1f56b8} #mfcs .av-soon{background:#fff;color:var(--blue);border:1px solid var(--blue)} #mfcs .av-past{background:var(--grey);color:var(--greytx)} #mfcs .av-na{color:var(--faint);font-weight:600} #mfcs .chartgrid{display:grid;grid-template-columns:1fr 1fr;gap:18px} #mfcs .chartcard{background:#fff;border:1px solid var(--ink);padding:18px 18px 10px} #mfcs .chartcard h3{font-size:15px;font-weight:800;margin-bottom:4px;color:var(--ink)} #mfcs .chartcard p{color:var(--muted);font-size:12.5px;margin-bottom:14px} #mfcs .chartcard.full{grid-column:1\/-1} #mfcs .canvas-holder{position:relative;height:300px} #mfcs .canvas-holder.tall{height:440px} #mfcs .cardgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:16px} #mfcs .jetcard{background:#fff;border:1px solid var(--ink);overflow:hidden;cursor:pointer;transition:.14s;position:relative;display:flex;flex-direction:column} #mfcs .jetcard:hover{transform:translateY(-3px);box-shadow:6px 6px 0 var(--ink)} #mfcs .photo{position:relative;aspect-ratio:16\/10;background:#f0f0f2;overflow:hidden;border-bottom:1px solid var(--ink)} #mfcs .photo img{width:100%;height:100%;object-fit:cover;display:block;position:relative;z-index:2} #mfcs .photo .silbg{position:absolute;inset:0;margin:auto;width:60%;opacity:.16;z-index:1} #mfcs .photo .gtag{position:absolute;left:0;bottom:0;z-index:3;background:var(--ink);color:#fff;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:4px 9px} #mfcs .cbody{padding:13px 15px 14px;display:flex;flex-direction:column;flex:1} #mfcs .cbody h3{font-size:18px;font-weight:800;margin:0 0 2px;color:var(--ink)} #mfcs .cbody .org{font-size:12px;color:var(--muted)} #mfcs .jetcard .stats{display:flex;margin:12px -15px 0;border-top:1px solid var(--line)} #mfcs .jetcard .stat{flex:1;text-align:center;border-right:1px solid var(--line);padding:9px 0 2px} #mfcs .jetcard .stat:last-child{border-right:none} #mfcs .jetcard .stat .v{font-size:19px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--ink)} #mfcs .jetcard .stat .lb{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-top:1px} #mfcs .cavail{margin-top:12px;display:flex;align-items:center;gap:8px;font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-weight:700} #mfcs .modal{position:fixed;inset:0;background:rgba(10,10,10,.55);z-index:100;display:none;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto} #mfcs .modal.open{display:flex} #mfcs .mbox{background:#fff;border:2px solid var(--ink);max-width:640px;width:100%;overflow:hidden;animation:pop .22s ease} @keyframes pop{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}} #mfcs .mphoto{position:relative;aspect-ratio:16\/8;background:#f0f0f2;overflow:hidden;border-bottom:2px solid var(--ink)} #mfcs .mphoto img{width:100%;height:100%;object-fit:cover;display:block;position:relative;z-index:2} #mfcs .mphoto .silbg{position:absolute;inset:0;margin:auto;width:44%;opacity:.16;z-index:1} #mfcs .mhead{padding:18px 24px;border-bottom:1px solid var(--line);position:relative} #mfcs .mhead .gtag{font-size:11px;font-weight:800;letter-spacing:.06em;color:var(--muted);text-transform:uppercase} #mfcs .mhead h3{font-size:24px;font-weight:900;margin:4px 0 3px;color:var(--ink)} #mfcs .mhead .org{color:var(--muted);font-size:13px} #mfcs .mclose{position:absolute;top:14px;right:16px;z-index:5;background:#fff;border:1px solid var(--ink);color:var(--ink);width:34px;height:34px;font-size:18px;cursor:pointer;line-height:1} #mfcs .mclose:hover{background:var(--ink);color:#fff} #mfcs .mavail{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 24px;background:var(--bg2);border-bottom:1px solid var(--line)} #mfcs .mavail-l{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--greytx)} #mfcs .mstats{display:flex;padding:16px 24px;gap:8px;border-bottom:1px solid var(--line)} #mfcs .mstats .s{flex:1;background:var(--bg2);border:1px solid var(--line);padding:11px 8px;text-align:center} #mfcs .mstats .s .v{font-size:23px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--ink)} #mfcs .mstats .s .lb{font-size:10px;color:var(--muted);text-transform:uppercase;margin-top:3px;letter-spacing:.04em} #mfcs .mbody{padding:20px 24px 26px} #mfcs .mbody .note{background:var(--bg2);border-left:3px solid var(--ink);padding:11px 14px;font-size:13.5px;color:var(--txt);margin-bottom:18px;font-weight:600} #mfcs .mbody h4{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:10px} #mfcs .conflict{display:flex;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)} #mfcs .conflict:last-child{border-bottom:none} #mfcs .conflict .yr{flex:0 0 84px;font-size:12px;color:var(--greytx);font-weight:800} #mfcs .conflict .cw{flex:1} #mfcs .conflict .cn{font-weight:700;font-size:14px;color:var(--ink)} #mfcs .conflict .cd{font-size:12.5px;color:var(--muted);margin-top:2px} #mfcs .conflict .ck{flex:0 0 auto;text-align:right;font-size:13px;font-weight:800;font-variant-numeric:tabular-nums} #mfcs .cmp-pick{display:grid;grid-template-columns:1fr 44px 1fr;gap:12px;align-items:center;margin-bottom:24px} #mfcs .cmp-pick select{width:100%;background:#fff;border:1px solid var(--ink);color:var(--ink);font-family:inherit;font-weight:700;font-size:15px;padding:13px}#mfcs .cmp-pick p{display:contents} #mfcs .cmp-vs{text-align:center;font-weight:900;color:var(--ink);font-size:15px} #mfcs .cmp-board{background:#fff;border:1px solid var(--ink);overflow:hidden} #mfcs .cmp-top{display:grid;grid-template-columns:1fr 1fr} #mfcs .cmp-side{padding:0 0 18px;text-align:center} #mfcs .cmp-side:first-child{border-right:1px solid var(--line)} #mfcs .cmp-photo{aspect-ratio:16\/9;background:#f0f0f2;overflow:hidden;border-bottom:1px solid var(--ink);position:relative;margin-bottom:14px} #mfcs .cmp-photo img{width:100%;height:100%;object-fit:cover;position:relative;z-index:2} #mfcs .cmp-photo .silbg{position:absolute;inset:0;margin:auto;width:46%;opacity:.16;z-index:1} #mfcs .cmp-side .gtag{font-size:10px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.06em} #mfcs .cmp-side h3{font-size:20px;font-weight:800;margin:4px 0 2px;color:var(--ink)} #mfcs .cmp-side .org{font-size:12px;color:var(--muted)} #mfcs .cmp-side .cav{margin-top:9px} #mfcs .cmp-row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px;padding:13px 20px;border-top:1px solid var(--line)} #mfcs .cmp-bar{height:26px;display:flex;align-items:center;position:relative;background:var(--line2)} #mfcs .cmp-bar.left{justify-content:flex-end} #mfcs .cmp-bar .fill{height:100%;position:absolute;top:0;background:var(--ink)} #mfcs .cmp-bar.left .fill{right:0} #mfcs .cmp-bar.right .fill{left:0} #mfcs .cmp-bar .bv{position:relative;z-index:2;font-size:13px;font-weight:800;padding:0 10px;font-variant-numeric:tabular-nums;color:var(--ink)} #mfcs .cmp-bar .bv.inbar{color:#fff} #mfcs .cmp-lb{text-align:center;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:700;min-width:80px} #mfcs .win{color:var(--green)!important} #mfcs .engage{border-top:2px solid var(--ink);background:var(--bg2);padding:20px 20px 22px} #mfcs .engage .eh{display:flex;align-items:center;gap:9px;justify-content:center;font-size:15.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--ink);margin-bottom:6px} #mfcs .engage .ec{text-align:center;font-size:17.5px;color:var(--muted);margin-bottom:16px} #mfcs .engage .disp{display:inline-block;background:var(--ink);color:#fff;font-size:10px;font-weight:800;letter-spacing:.05em;padding:2px 8px;margin-left:6px;vertical-align:middle} #mfcs .score{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px;max-width:440px;margin:0 auto 14px} #mfcs .score .sv{font-size:30px;font-weight:900;font-variant-numeric:tabular-nums;text-align:center;color:var(--ink)} #mfcs .score .sv.sL{text-align:right}#mfcs .score .sv.sR{text-align:left} #mfcs .score .dash{color:var(--faint);font-weight:700;font-size:20px} #mfcs .score .win2{color:var(--green)} #mfcs .engage .esum{text-align:center;font-size:18.5px;color:var(--txt);max-width:600px;margin:0 auto;line-height:1.5} #mfcs .engage.none{background:var(--bg2);padding:22px 20px} #mfcs .engage.none .em{text-align:center;color:var(--muted);font-size:18.5px} #mfcs .disclaimer{background:var(--bg2);border:1px solid var(--line);padding:16px 18px;margin-top:26px;font-size:12.5px;color:var(--greytx)} #mfcs .disclaimer b{color:var(--ink)} #mfcs .legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:14px;font-size:12.5px;color:var(--muted)} #mfcs .legend span{display:inline-flex;align-items:center;gap:6px} #mfcs .dot{width:11px;height:11px;display:inline-block;border:1px solid var(--ink)} #mfcs footer{border-top:1px solid var(--line);padding:30px 0 50px;color:var(--muted);font-size:13px;text-align:center} #mfcs .count{color:var(--muted);font-size:13px;margin-left:auto;font-weight:600} @media(max-width:720px){ #mfcs .chartgrid{grid-template-columns:1fr} #mfcs .cmp-pick{grid-template-columns:1fr;gap:8px} #mfcs .cmp-vs{padding:2px} #mfcs .controls .count{width:100%;margin:4px 0 0} } #mfcs h1,#mfcs h2,#mfcs h3,#mfcs h4,#mfcs th,#mfcs .jetname,#mfcs .num,#mfcs .cbtn,#mfcs .gen,#mfcs .badge,#mfcs .av,#mfcs .kicker,#mfcs .chead .tag,#mfcs .score .sv,#mfcs .bv,#mfcs .cmp-side h3,#mfcs .cbody h3,#mfcs .mhead h3,#mfcs strong,#mfcs b{font-family:'Gilroy semiBold',sans-serif} html{overflow-x:hidden} body.page-id-15995{overflow-x:hidden} body.page-id-15995 h1.entry-title.main_title{display:none} body.page-id-15995 #sidebar{display:none} body.page-id-15995 #left-area{width:100%!important;float:none;padding:0} body.page-id-15995 #main-content .container::before{display:none!important;background:none!important} body.page-id-15995 #main-content .container{padding-top:0} #mfcs{width:100vw;margin-left:calc(50% - 50vw);overflow:hidden} #mfcs .modal{z-index:999999} #mfcs .conceptnav{z-index:9999}#mfcs .namecell{white-space:normal}#mfcs .namecell{max-width:210px}#mfcs .jetname{white-space:normal;line-height:1.2;margin-bottom:7px}#mfcs .mfr{font-size:15.8px;color:var(--muted);font-weight:600;line-height:1.2;white-space:normal;max-width:190px;margin-bottom:7px}#mfcs .photocell{width:189px;padding:6px 0 6px 8px;vertical-align:middle}#mfcs .tthumb{cursor:zoom-in;transition:opacity .12s}#mfcs .tthumb:hover{opacity:.82}#mfcs #jtable th:nth-child(4),#mfcs #jtable td:nth-child(4),#mfcs #jtable th:nth-child(6),#mfcs #jtable td:nth-child(6),#mfcs #jtable th:nth-child(7),#mfcs #jtable td:nth-child(7),#mfcs #jtable th:nth-child(8),#mfcs #jtable td:nth-child(8){width:72px;white-space:normal} #mfcs .rng{font-size:.82em;white-space:nowrap} #mfcs .stats .v .rng,#mfcs .mstats .v .rng{font-size:.6em;line-height:1.15;display:inline-block;padding-top:.3em} #mfcs td.k,#mfcs td.l,#mfcs td.rt{cursor:help} #mfcs td .rng{border-bottom:1px dotted var(--faint)} #mfcs #jtable tbody td{font-size:13.8px;vertical-align:top} #mfcs #jtable tbody td.namecell .jetname{font-size:16.8px} #mfcs #jtable tbody td.namecell .jetsub{font-size:14.4px} #mfcs #jtable tbody td .rng{font-size:1em} #mfcs #jtable tbody .mfr{font-size:1em} #mfcs #jtable tbody .gen{font-size:1em} #mfcs #jtable tbody .badge{font-size:1em} #mfcs #jtable tbody td:last-child *{font-size:13.8px}#mfcs .swipehint{display:none;font-size:13px;color:#454e5e;margin:0 0 10px;font-family:'Gilroy semiBold',sans-serif}\/*mobfix1*\/@media(max-width:767px){#mfcs .conceptnav .wrap{flex-wrap:wrap;padding:0 12px}#mfcs .conceptnav .cbtn{flex:1 1 40%;padding:12px 8px 10px;font-size:13px}#mfcs .photocell{width:96px;padding:6px 0 6px 6px}#mfcs .photocell img{width:92px!important;height:auto!important}#mfcs .namecell{max-width:150px}#mfcs .jetname{font-size:15px}#mfcs .mfr{font-size:13px;max-width:150px}#mfcs .swipehint{display:block}#mfcs .scroll{background:linear-gradient(to left,rgba(13,17,23,.12),rgba(13,17,23,0) 28px) right\/28px 100% no-repeat local}}<\/style>\n<div class=\"hero\">\n<div class=\"wrap\">\n<div class=\"kicker\">MiGFlug \u00b7 Fighter Jet Combat Records<\/div>\n<h1>Combat Statistics for Every Fighter Jet in Service<\/h1>\n<p class=\"sub\">The air-to-air record of 42 fighter jets, from the MiG-15 to the F-35 and Su-57 \u2014 every confirmed kill and loss, cross-checked and sourced. Sort the full table, explore the charts, open a detail card for any aircraft, or put two jets head to head. And for each one: whether you can still fly it with MiGFlug. Want the whole story back to the Fokkers and Mustangs? See the <a href=\"https:\/\/migflug.com\/fighter-aircraft-combat-statistics\/\" style=\"color:var(--ink);font-weight:700\">combat statistics for every fighter aircraft in history<\/a>.<\/p>\n<div class=\"meta\">\n<div><b>42<\/b> aircraft<\/div>\n<div><b>Sort<\/b> \u00b7 chart \u00b7 compare<\/div>\n<div><b>Confirmed<\/b> air-to-air data only<\/div>\n<div>Updated <b>July 2026<\/b><\/div>\n<\/div>\n<\/div>\n<\/div>\n<nav class=\"conceptnav\">\n<div class=\"wrap\"><button class=\"cbtn active\" data-c=\"table\"><span class=\"n\">1<\/span>Sortable Table<\/button><button class=\"cbtn\" data-c=\"charts\"><span class=\"n\">2<\/span>Visual Charts<\/button><button class=\"cbtn\" data-c=\"cards\"><span class=\"n\">3<\/span>Jet Cards<\/button><button class=\"cbtn\" data-c=\"compare\"><span class=\"n\">4<\/span>Head-to-Head<\/button><\/div>\n<\/nav>\n<p><!-- CONCEPT 1: TABLE --><\/p>\n<section class=\"concept active\" id=\"c-table\">\n<div class=\"wrap\">\n<div class=\"chead\">\n<h2>Every fighter jet, sorted your way<\/h2>\n<p>All 42 aircraft in one place. Sort by air-to-air kills, losses, kill ratio or first-flight year, filter by country of origin and combat status, or search for any jet by name.<\/p>\n<\/div>\n<div class=\"controls\"><input type=\"text\" id=\"tsearch\" placeholder=\"Search a jet\"><select id=\"torigin\"><option value=\"\">All origins<\/option><\/select><button class=\"chip on\" data-status=\"all\">All<\/button><button class=\"chip\" data-status=\"proven\">Combat-proven<\/button><button class=\"chip\" data-status=\"strike\">Strike \/ no A2A kill<\/button><button class=\"chip\" data-status=\"untested\">A2A-untested<\/button><span class=\"count\" id=\"tcount\"><\/span><\/div>\n<div class=\"swipehint\">Swipe the table sideways for kills, losses and kill ratio<\/div>\n<div class=\"tablewrap\">\n<div class=\"scroll\">\n<table id=\"jtable\">\n<thead>\n<tr>\n<th class=\"nosort\"><\/th>\n<th data-k=\"name\">Aircraft \/<br \/>Role <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"origin\">Manufacturer \/<br \/>Origin <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"firstFlight\">First flight <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"gen\">Gen <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"kills\">A2A kills <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"losses\">A2A losses <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"ratio\">Kill ratio <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th data-k=\"status\">Combat-<br \/>proven <span class=\"ar\">\u25b2\u25bc<\/span><\/th>\n<th class=\"nosort\">Fly it with<br \/>MiGFlug<\/th>\n<\/tr>\n<\/thead>\n<tbody id=\"tbody\"><\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"legend\"><span><span class=\"dot\" style=\"background:var(--green)\"><\/span>Combat-proven (air-to-air kills)<\/span><span><span class=\"dot\" style=\"background:var(--amber)\"><\/span>Combat-proven strike \/ no confirmed A2A kill<\/span><span><span class=\"dot\" style=\"background:var(--grey)\"><\/span>Air-to-air untested<\/span><\/div>\n<\/div>\n<\/section>\n<p><!-- CONCEPT 2: CHARTS --><\/p>\n<section class=\"concept\" id=\"c-charts\">\n<div class=\"wrap\">\n<div class=\"chead\">\n<h2>The combat record in charts<\/h2>\n<p>Which fighters scored the most air-to-air kills, which stayed undefeated, and how the whole fleet stacks up on a single kills-versus-losses chart.<\/p>\n<\/div>\n<div class=\"chartgrid\">\n<div class=\"chartcard\">\n<h3>Most air-to-air kills<\/h3>\n<p>Confirmed manned-aircraft victories, all operators combined.<\/p>\n<div class=\"canvas-holder\"><canvas id=\"chKills\"><\/canvas><\/div>\n<\/div>\n<div class=\"chartcard\">\n<h3>Highest kill-to-loss ratio<\/h3>\n<p>Undefeated types shown at the top; only jets with 5+ kills.<\/p>\n<div class=\"canvas-holder\"><canvas id=\"chRatio\"><\/canvas><\/div>\n<\/div>\n<div class=\"chartcard full\">\n<h3>Kills vs. losses \u2014 the whole fleet at a glance<\/h3>\n<p>Up and to the left is elite (many kills, few losses). Bubble size = total combat engagements. Hover any dot.<\/p>\n<div class=\"canvas-holder tall\"><canvas id=\"chScatter\"><\/canvas><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<p><!-- CONCEPT 3: CARDS --><\/p>\n<section class=\"concept\" id=\"c-cards\">\n<div class=\"wrap\">\n<div class=\"chead\">\n<h2>Explore each jet in detail<\/h2>\n<p>Tap any aircraft for its full combat history \u2014 a conflict-by-conflict breakdown, its most famous engagement, the caveats behind the numbers, and whether you can fly it with MiGFlug.<\/p>\n<\/div>\n<div class=\"controls\"><input type=\"text\" id=\"csearch\" placeholder=\"Filter cards\u2026\"><select id=\"corigin\"><option value=\"\">All origins<\/option><\/select><span class=\"count\" id=\"ccount\"><\/span><\/div>\n<div class=\"cardgrid\" id=\"cardgrid\"><\/div>\n<\/div>\n<\/section>\n<p><!-- CONCEPT 4: COMPARE --><\/p>\n<section class=\"concept\" id=\"c-compare\">\n<div class=\"wrap\">\n<div class=\"chead\">\n<h2>Head-to-head<\/h2>\n<p>Pick any two fighters and put their combat records side by side \u2014 including what happened on the occasions they actually met in the air.<\/p>\n<\/div>\n<div class=\"cmp-pick\"><select id=\"cmpA\"><\/select><\/p>\n<div class=\"cmp-vs\">VS<\/div>\n<p><select id=\"cmpB\"><\/select><\/div>\n<div class=\"cmp-board\" id=\"cmpBoard\"><\/div>\n<\/div>\n<\/section>\n<div class=\"wrap\">\n<div class=\"disclaimer\" id=\"disclaimer\"><b>On the numbers.<\/b> Air-to-air figures count confirmed victories against manned aircraft, credited by the operating air force and cross-checked across sources. An asterisk (*) marks figures that are best-available estimates \u2014 older wartime tallies from Korea, Vietnam and the Arab\u2013Israeli and Indo-Pakistani wars that sources dispute by wide margins, plus recent 2022\u20132025 results from Ukraine and the India\u2013Pakistan clash that are credited but not independently confirmed. The higher contested claims are explained in each jet&#8217;s detail card. Drone and cruise-missile intercepts are noted but not counted as kills. Where serious sources genuinely disagree \u2014 Korea, Vietnam, the Middle East and Indo-Pakistani wars \u2014 the kills and losses columns show the credible range instead of a single number; each jet\u2019s detail card explains who counts what \u2014 or simply hover over a kills, losses or ratio figure to see the story behind the numbers. The combat-proven column distinguishes jets with a real air-to-air record from those blooded only in strike or reconnaissance operations. Ground\/SAM losses are tracked separately from air-to-air losses. <\/div>\n<\/div>\n<footer>\n<div class=\"wrap\">MiGFlug \u00b7 Combat statistics updated <span id=\"fdate\"><\/span> \u00b7 Air-to-air figures are confirmed victories against manned aircraft, cross-checked across sources. Spotted an error? Let us know in the comments.<\/div>\n<\/footer>\n<p><!-- MODAL --><\/p>\n<div class=\"modal\" id=\"modal\">\n<div class=\"mbox\" id=\"mbox\"><\/div>\n<\/div>\n<p><script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/4.4.1\/chart.umd.min.js\"><\/script><div id=\"mfcs-data\" data-js=\"Ci8qIC0tLS0tLS0tLS0gREFUQVNFVCAoMzggYWlyY3JhZnQsIGNvbmZpcm1lZCBBMkEgZGF0YSkgLS0tLS0tLS0tLSAqLwpjb25zdCBGTEFHPXsiVW5pdGVkIFN0YXRlcyI6IvCfh7rwn4e4IiwiRnJhbmNlIjoi8J+Hq\/Cfh7ciLCJVbml0ZWQgS2luZ2RvbSI6IvCfh6zwn4enIiwiSXNyYWVsIjoi8J+HrvCfh7EiLCJTd2VkZW4iOiLwn4e48J+HqiIsIlVTU1IiOiLwn4e38J+HuiIsIlVTU1IgLyBSdXNzaWEiOiLwn4e38J+HuiIsIlJ1c3NpYSI6IvCfh7fwn4e6IiwiQ2hpbmEiOiLwn4eo8J+HsyIsIlBha2lzdGFuIC8gQ2hpbmEiOiLwn4e18J+HsCIsIk11bHRpbmF0aW9uYWwiOiLwn4eq8J+HuiJ9Owpjb25zdCBEPVsKe25hbWU6IkYtMTUgRWFnbGUiLGZ1bGw6Ik1jRG9ubmVsbCBEb3VnbGFzIC8gQm9laW5nIEYtMTUgKEEvQi9DL0QpIixvcmlnaW46IlVuaXRlZCBTdGF0ZXMiLGdlbjoiNHRoIixmaXJzdEZsaWdodDoxOTcyLHJvbGU6IkFpciBzdXBlcmlvcml0eSIsa2lsbHM6MTA0LGtyOiI5MOKAkzEwNiIsbG9zc2VzOjAsZ3JvdW5kOjAsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IlRoZSBtb3N0LWNpdGVkIGFpci1jb21iYXQgcmVjb3JkIGluIHRoZSBqZXQgYWdlOiB+MTA0IGNyZWRpdGVkIHZpY3RvcmllcyBmb3IgemVybyBhaXItdG8tYWlyIGxvc3NlcyBhY3Jvc3MgYWxsIG9wZXJhdG9ycy4gU3RyaWN0IHBlci1vcGVyYXRvciBjb3VudHMgZ2l2ZSB+OTA7IGdlbmVyb3VzIElzcmFlbGkgMTk4MiB0YWxsaWVzIHJlYWNoIDEwNiDigJQgdGhlIGZhbW91cyAxMDQgZmlndXJlIG9yaWdpbmF0ZWQgd2l0aCB0aGUgbWFudWZhY3R1cmVyLiIsY29uZmxpY3RzOlt7eXI6IjE5NznigJM4MiIsbjoiSXNyYWVsaSBvcHMgKEJla2FhIFZhbGxleSkiLG5hdGlvbjoiSXNyYWVsIixrOjU2LGw6MCxkOiJPdmVyIGhhbGYgb2YgYWxsIEYtMTUga2lsbHMg4oCUIG1vc3RseSBTeXJpYW4gTWlHczsgcGVhayBkdXJpbmcgT3BlcmF0aW9uIE1vbGUgQ3JpY2tldCAxOSAoMTk4MikuIn0se3lyOiIxOTkxIixuOiJHdWxmIFdhciIsbmF0aW9uOiJVU0FGIixrOjM0LGw6MCxkOiJUaGUgYnVsayBvZiBjb2FsaXRpb24gYWlyLXRvLWFpciB2aWN0b3JpZXMgaW4gRGVzZXJ0IFN0b3JtLiJ9LHt5cjoiMTk4NOKAkzk5IixuOiJPdGhlciBVU0FGIC8gU2F1ZGkiLG5hdGlvbjoiVVNBIC8gU2F1ZGkiLGs6MTQsbDowLGQ6IkluY2x1ZGVzIFNhdWRpIEYtMTVzIGRvd25pbmcgMiBJcmFuaWFuIEYtNEVzICgxOTg0KSBhbmQgQmFsa2Fucy9uby1mbHktem9uZSBraWxscy4ifV0sZmFtb3VzOiJEdXJpbmcgT3BlcmF0aW9uIE1vbGUgQ3JpY2tldCAxOSAoSnVuZSAxOTgyKSwgSXNyYWVsaSBGLTE1cyBhbmQgRi0xNnMgZGVzdHJveWVkIGRvemVucyBvZiBTeXJpYW4gYWlyY3JhZnQgb3ZlciB0aGUgQmVrYWEgVmFsbGV5IHdpdGhvdXQgbG9zcy4ifSwKe25hbWU6IkYtNCBQaGFudG9tIElJIixmdWxsOiJNY0Rvbm5lbGwgRG91Z2xhcyBGLTQgUGhhbnRvbSBJSSIsb3JpZ2luOiJVbml0ZWQgU3RhdGVzIixnZW46IjNyZCIsZmlyc3RGbGlnaHQ6MTk1OCxyb2xlOiJJbnRlcmNlcHRvciAvIGZpZ2h0ZXItYm9tYmVyIixraWxsczoxNTAsbG9zc2VzOjQyLGdyb3VuZDo3MTksc3RhdHVzOiJwcm92ZW4iLG5vdGU6Ik92ZXIgVmlldG5hbSwgVVMgTmF2eSwgQWlyIEZvcmNlIGFuZCBNYXJpbmUgRi00cyB3ZXJlIGNyZWRpdGVkIHdpdGggYWJvdXQgMTUwIE1pRyBraWxscyBmb3IgNDIgUGhhbnRvbXMgbG9zdCBpbiBhaXIgY29tYmF0IOKAlCByb3VnaGx5IDMuNiB0byAxIHBlciBVUyByZWNvcmRzOyBOb3J0aCBWaWV0bmFtZXNlIGNsYWltcyBkaWZmZXIgb24gYm90aCBjb3VudHMuIENvdW50aW5nIGV2ZXJ5IG9wZXJhdG9yIHdvcmxkd2lkZSAoSXNyYWVsLCBJcmFuIGFuZCBvdGhlcnMpIHRoZSBraWxsIHRvdGFsIGlzIGZhciBoaWdoZXIsIGJ1dCB0aGVpciBhaXItdG8tYWlyIGxvc3NlcyBhcmUgbm90IGNvbnNpc3RlbnRseSByZWNvcmRlZCwgc28gYSBsaWtlLWZvci1saWtlIGdsb2JhbCByYXRpbyBpcyB1bnJlbGlhYmxlLiIsY29uZmxpY3RzOlt7eXI6IjE5NjXigJM3MyIsbjoiVmlldG5hbSBXYXIiLG5hdGlvbjoiVVNBIixrOjE1MCxsOjQyLGQ6IjE1MC41IE1pRyBraWxscyBmb3IgNDIgUGhhbnRvbXMgbG9zdCBpbiBhaXIgY29tYmF0OyB+NzE5IGxvc3QgdG8gYWxsIGNhdXNlcywgbW9zdGx5IGdyb3VuZCBmaXJlLiJ9LHt5cjoiMTk2OeKAkzgyIixuOiJBcmFi4oCTSXNyYWVsaSB3YXJzIixuYXRpb246IklzcmFlbCIsazoxMTYsbDowLGQ6IklzcmFlbGkgRi00RSAnS3VybmFzcycgc2NvcmVkIDExNi41IGFlcmlhbCB2aWN0b3JpZXM7IG1vc3QgbG9zc2VzIHdlcmUgdG8gU0FNcywgbm90IGFpcmNyYWZ0LiJ9LHt5cjoiMTk4MOKAkzg4IixuOiJJcmFu4oCTSXJhcSBXYXIiLG5hdGlvbjoiSXJhbiIsazowLGw6MCxkOiJJcmFuaWFuIFBoYW50b21zIGNsYWltZWQgZG96ZW5zIG1vcmUga2lsbHM7IHRvdGFscyBkaXNwdXRlZCBhbmQgZXhjbHVkZWQgZnJvbSB0aGUgaGVhZGxpbmUuIn1dLGZhbW91czoiRi00IGNyZXdzIGRlc3Ryb3llZCAxNTAuNSBNaUdzIG92ZXIgVmlldG5hbSDigJQgdGhlIGhpZ2hlc3QgYWlyLXRvLWFpciB0YWxseSBvZiBhbnkgV2VzdGVybiBmaWdodGVyIG9mIGl0cyBnZW5lcmF0aW9uLiJ9LAp7bmFtZToiRi0xNiBGaWdodGluZyBGYWxjb24iLGZ1bGw6IkdlbmVyYWwgRHluYW1pY3MgLyBMb2NraGVlZCBNYXJ0aW4gRi0xNiIsb3JpZ2luOiJVbml0ZWQgU3RhdGVzIixnZW46IjR0aCIsZmlyc3RGbGlnaHQ6MTk3NCxyb2xlOiJNdWx0aXJvbGUiLGtpbGxzOjc2LGtyOiI3MuKAkzgwIixsb3NzZXM6MSxscjoiMeKAkzIiLGdyb3VuZDo1LHN0YXR1czoicHJvdmVuIixub3RlOiJ+NzYgaXMgdGhlIGNvbW1vbmx5IGNpdGVkIGNyb3NzLW9wZXJhdG9yIHRvdGFsOyBpbmRlcGVuZGVudCBjb3VudHMgcnVuIDcy4oCTODAgYW5kIG5vIHNpbmdsZSBhdXRob3JpdHkgdGFsbGllcyBldmVyeSB2aWN0b3J5IGlkZW50aWNhbGx5LiBUaGUgc2luZ2xlIGFpci1jb21iYXQgbG9zcyBpcyB0aGUgMTk5NiBBZWdlYW4gc2hvb3Rkb3duIGJ5IGEgR3JlZWsgTWlyYWdlIDIwMDAg4oCUIGFkZGluZyB0aGUgMTk4NyBQYWtpc3RhbmkgZnJpZW5kbHktZmlyZSBsb3NzIHdvdWxkIG1ha2UgaXQgMi4gVGhlIDIwMTkgUGFraXN0YW7igJNJbmRpYSBGLTE2IGNsYWltcyBhcmUgY29udGVzdGVkIGFuZCBleGNsdWRlZC4iLGNvbmZsaWN0czpbe3lyOiIxOTgyIixuOiJMZWJhbm9uIFdhciIsbmF0aW9uOiJJc3JhZWwiLGs6NDQsbDowLGQ6IkJ1bGsgb2YgRi0xNiB2aWN0b3JpZXMg4oCUIG1vc3RseSBTeXJpYW4gTWlHLTIxcyBhbmQgTWlHLTIzcyDigJQgZm9yIHplcm8gYWlyLXRvLWFpciBsb3NzZXMuIn0se3lyOiIxOTkx4oCTOTkiLG46Ikd1bGYgV2FyIC8gQmFsa2FucyIsbmF0aW9uOiJVU0EgLyBOTCIsazo2LGw6MCxkOiJVU0FGIGtpbGxzIG92ZXIgSXJhcTsgYSBEdXRjaCBGLTE2IGRvd25lZCBhIFl1Z29zbGF2IE1pRy0yOSBpbiAxOTk5LiJ9LHt5cjoiMTk5MuKAkzIwMTkiLG46Ik90aGVyIGVuZ2FnZW1lbnRzIixuYXRpb246IlZhcmlvdXMiLGs6MjYsbDoxLGQ6Ik9uZSBkb2N1bWVudGVkIEEyQSBsb3NzOiBhIFR1cmtpc2ggRi0xNkQgZG93bmVkIGJ5IGEgR3JlZWsgTWlyYWdlIDIwMDAgKDE5OTYpLiJ9XSxmYW1vdXM6IklzcmFlbGkgRi0xNnMgZG93bmVkIHJvdWdobHkgNDQgU3lyaWFuIGFpcmNyYWZ0IGR1cmluZyB0aGUgMTk4MiBMZWJhbm9uIFdhciB3aXRob3V0IGFuIGFpci10by1haXIgbG9zcy4ifSwKe25hbWU6IkYtMTQgVG9tY2F0IixmdWxsOiJHcnVtbWFuIEYtMTQgVG9tY2F0IixvcmlnaW46IlVuaXRlZCBTdGF0ZXMiLGdlbjoiNHRoIixmaXJzdEZsaWdodDoxOTcwLHJvbGU6IkZsZWV0LWRlZmVuc2UgaW50ZXJjZXB0b3IiLGtpbGxzOjUsbG9zc2VzOjAsZ3JvdW5kOjEsc3RhdHVzOiJwcm92ZW4iLG5vdGU6Ik9ubHkgd2VsbC1kb2N1bWVudGVkIFVTIE5hdnkgdmljdG9yaWVzIGFyZSBjb3VudGVkOiB0d28gTGlieWFuIFN1LTIycyAoMTk4MSksIHR3byBMaWJ5YW4gTWlHLTIzcyAoMTk4OSkgYW5kIGFuIElyYXFpIE1pLTggKDE5OTEpLiBJcmFuIGNsYWltcyAzNeKAkzEzMCsgVG9tY2F0IGtpbGxzIGluIHRoZSBJcmFu4oCTSXJhcSBXYXI7IGluZGVwZW5kZW50IGNvbmZpcm1hdGlvbiBjb3ZlcnMgb25seSBhIGZyYWN0aW9uLCBzbyB0aG9zZSBhcmUgZXhjbHVkZWQuIixjb25mbGljdHM6W3t5cjoiMTk4MS84OSIsbjoiR3VsZiBvZiBTaWRyYSIsbmF0aW9uOiJVUyBOYXZ5IixrOjQsbDowLGQ6IlR3byBMaWJ5YW4gU3UtMjJzICgxOTgxKSBhbmQgdHdvIE1pRy0yM3MgKDE5ODkpLiJ9LHt5cjoiMTk5MSIsbjoiR3VsZiBXYXIiLG5hdGlvbjoiVVMgTmF2eSIsazoxLGw6MSxkOiJEb3duZWQgYW4gSXJhcWkgTWktODsgb25lIEYtMTQgbG9zdCB0byBhbiBTQS0yIFNBTSAoYSBncm91bmQgbG9zcywgbm90IEEyQSkuIn0se3lyOiIxOTgw4oCTODgiLG46IklyYW7igJNJcmFxIFdhciIsbmF0aW9uOiJJcmFuIixrOjAsbDowLGQ6IkFjZSBKYWxpbCBaYW5kaSBjcmVkaXRlZCB3aXRoIDggdmljdG9yaWVzOyBJcmFuaWFuIHRvdGFscyB1bnZlcmlmaWFibGUgYW5kIGV4Y2x1ZGVkLiJ9XSxmYW1vdXM6Ik9uIDE5IEF1Z3VzdCAxOTgxIHR3byBWRi00MSBUb21jYXRzIGRvd25lZCB0d28gTGlieWFuIFN1LTIycyBvdmVyIHRoZSBHdWxmIG9mIFNpZHJhIOKAlCB0aGUgdHlwZSdzIGZpcnN0IGtpbGxzLiJ9LAp7bmFtZToiRi0xNUUgU3RyaWtlIEVhZ2xlIixmdWxsOiJNY0Rvbm5lbGwgRG91Z2xhcyAvIEJvZWluZyBGLTE1RSIsb3JpZ2luOiJVbml0ZWQgU3RhdGVzIixnZW46IjQuNSIsZmlyc3RGbGlnaHQ6MTk4Nixyb2xlOiJTdHJpa2UgLyBtdWx0aXJvbGUiLGtpbGxzOjEsbG9zc2VzOjAsZ3JvdW5kOjIsc3RhdHVzOiJwcm92ZW4iLG5vdGU6Ikl0cyBvbmx5IGFpci10by1haXIga2lsbCB3YXMgc2NvcmVkIHdpdGggYSBib21iIOKAlCBvbiBhIGhlbGljb3B0ZXIgd2hvc2UgZXhhY3QgdHlwZSAoTWktMjQgb3IgSHVnaGVzIDUwMCkgc291cmNlcyBzdGlsbCBkaXNwdXRlLiBJbiAyMDI0IEYtMTVFcyBzaG90IGRvd24gZG96ZW5zIG9mIElyYW5pYW4gZHJvbmVzIOKAlCBjb3VudGVkIGFzIGRyb25lIGludGVyY2VwdHMsIG5vdCBhaXJjcmFmdCBraWxscy4iLGNvbmZsaWN0czpbe3lyOiIxOTkxIixuOiJHdWxmIFdhciIsbmF0aW9uOiJVU0FGIixrOjEsbDowLGQ6IkRlc3Ryb3llZCBhIGhvdmVyaW5nIElyYXFpIE1pLTI0IHdpdGggYSBsYXNlci1ndWlkZWQgYm9tYjsgMiBGLTE1RXMgbG9zdCB0byBncm91bmQgZmlyZS4ifSx7eXI6IjIwMjQiLG46IkRlZmVuc2Ugb2YgSXNyYWVsIixuYXRpb246IlVTQUYiLGs6MCxsOjAsZDoiRG93bmVkIGRvemVucyBvZiBJcmFuaWFuIFNoYWhlZCBkcm9uZXMg4oCUIG5vdCBjb3VudGVkIGFzIGFpcmNyYWZ0IGtpbGxzLiJ9XSxmYW1vdXM6IkFuIEYtMTVFIHNjb3JlZCB0aGUgdHlwZSdzIG9ubHkgYWlyLXRvLWFpciBraWxsIGJ5IGRyb3BwaW5nIGEgbGFzZXItZ3VpZGVkIGJvbWIgb24gYSBob3ZlcmluZyBJcmFxaSBNaS0yNCBpbiAxOTkxLiJ9LAp7bmFtZToiRi9BLTE4IEhvcm5ldCIsZnVsbDoiTWNEb25uZWxsIERvdWdsYXMgLyBCb2VpbmcgRi9BLTE4IChB4oCTRCkiLG9yaWdpbjoiVW5pdGVkIFN0YXRlcyIsZ2VuOiI0dGgiLGZpcnN0RmxpZ2h0OjE5Nzgscm9sZToiQ2FycmllciBtdWx0aXJvbGUiLGtpbGxzOjIsbG9zc2VzOjEsZ3JvdW5kOjAsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IkJvdGgga2lsbHMgY2FtZSBvbiB0aGUgc2FtZSBuaWdodCBvZiB0aGUgR3VsZiBXYXI7IHRoZSB0eXBlJ3Mgc29sZSBhaXItdG8tYWlyIGxvc3MgKFNwZWljaGVyKSBpcyB3aWRlbHkgYXR0cmlidXRlZCB0byBhbiBJcmFxaSBNaUctMjUuIixjb25mbGljdHM6W3t5cjoiMTk5MSIsbjoiR3VsZiBXYXIiLG5hdGlvbjoiVVMgTmF2eSIsazoyLGw6MSxkOiJUd28gVkZBLTgxIEhvcm5ldHMgZWFjaCBkb3duZWQgYSBNaUctMjEgb24gMTcgSmFuIDE5OTE7IG9uZSBIb3JuZXQgbG9zdCB0aGUgc2FtZSBuaWdodC4ifV0sZmFtb3VzOiJPbiAxNyBKYW51YXJ5IDE5OTEgYSBWRkEtODEgSG9ybmV0IHNob3QgZG93biBhIE1pRy0yMSBhbmQgdGhlbiBjb250aW51ZWQgaXRzIGJvbWJpbmcgcnVuIG9uIHRoZSBzYW1lIG1pc3Npb24uIn0sCntuYW1lOiJGL0EtMThFL0YgU3VwZXIgSG9ybmV0IixmdWxsOiJCb2VpbmcgRi9BLTE4RS9GIFN1cGVyIEhvcm5ldCIsb3JpZ2luOiJVbml0ZWQgU3RhdGVzIixnZW46IjQuNSIsZmlyc3RGbGlnaHQ6MTk5NSxyb2xlOiJDYXJyaWVyIG11bHRpcm9sZSIsa2lsbHM6MSxsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InByb3ZlbiIsbm90ZToiSXRzIDIwMTcgU3UtMjIga2lsbCB3YXMgdGhlIGZpcnN0IFVTIGFpci10by1haXIgdmljdG9yeSBpbiB+MTggeWVhcnMuIEEgMjAyNCBTdXBlciBIb3JuZXQgbG9zcyB3YXMgZnJpZW5kbHkgZmlyZSwgbm90IGFuIGVuZW15IGtpbGwuIixjb25mbGljdHM6W3t5cjoiMjAxNyIsbjoiU3lyaWEgKGFudGktSVNJUykiLG5hdGlvbjoiVVMgTmF2eSIsazoxLGw6MCxkOiJEb3duZWQgYSBTeXJpYW4gU3UtMjIgbmVhciBSYXFxYSDigJQgZmlyc3QgVVMgYWlyLXRvLWFpciBraWxsIHNpbmNlIDE5OTkuIn0se3lyOiIyMDIz4oCTMjQiLG46IlJlZCBTZWEgLyBIb3V0aGkiLG5hdGlvbjoiVVMgTmF2eSIsazowLGw6MCxkOiJTaG90IGRvd24gbWFueSBkcm9uZXMgYW5kIG1pc3NpbGVzIOKAlCBjb3VudGVkIGFzIG11bml0aW9uIGludGVyY2VwdHMsIG5vdCBraWxscy4ifV0sZmFtb3VzOiJPbiAxOCBKdW5lIDIwMTcgYSBVUyBOYXZ5IFN1cGVyIEhvcm5ldCBzaG90IGRvd24gYSBTeXJpYW4gU3UtMjIsIHRoZSBmaXJzdCBBbWVyaWNhbiBhaXItdG8tYWlyIGtpbGwgc2luY2UgMTk5OS4ifSwKe25hbWU6IkYtMjIgUmFwdG9yIixmdWxsOiJMb2NraGVlZCBNYXJ0aW4gLyBCb2VpbmcgRi0yMiBSYXB0b3IiLG9yaWdpbjoiVW5pdGVkIFN0YXRlcyIsZ2VuOiI1dGgiLGZpcnN0RmxpZ2h0OjE5OTcscm9sZToiU3RlYWx0aCBhaXIgc3VwZXJpb3JpdHkiLGtpbGxzOjAsbG9zc2VzOjAsZ3JvdW5kOjAsc3RhdHVzOiJzdHJpa2UiLG5vdGU6Ik5ldmVyIGVuZ2FnZWQgYW4gZW5lbXkgYWlyY3JhZnQsIHRob3VnaCBpdCBoYXMgZmxvd24gc3RyaWtlIG1pc3Npb25zIG92ZXIgU3lyaWEgc2luY2UgMjAxNC4gSXRzIG9ubHkgYWlyLXRvLWFpciB3ZWFwb24gZW1wbG95bWVudHMgd2VyZSBhIENoaW5lc2Ugc3B5IGJhbGxvb24gYW5kIHRocmVlIHVuaWRlbnRpZmllZCBvYmplY3RzLCBhbGwgaW4gMjAyMy4iLGNvbmZsaWN0czpbe3lyOiIyMDIzIixuOiJOLiBBbWVyaWNhbiBhaXJzcGFjZSIsbmF0aW9uOiJVU0FGIixrOjAsbDowLGQ6IkRvd25lZCBhIENoaW5lc2Ugc3VydmVpbGxhbmNlIGJhbGxvb24gYW5kIHRocmVlIHVuaWRlbnRpZmllZCBvYmplY3RzIHdpdGggQUlNLTlYIOKAlCBubyBhaXJjcmFmdC4ifV0sZmFtb3VzOiJPbiA0IEZlYnJ1YXJ5IDIwMjMgYW4gRi0yMiBkZXN0cm95ZWQgYSBDaGluZXNlIHNweSBiYWxsb29uIHdpdGggYSBzaW5nbGUgQUlNLTlYIOKAlCB0aGUgdHlwZSdzIGZpcnN0IGFpci10by1haXIgd2VhcG9uIGVtcGxveW1lbnQuIn0sCntuYW1lOiJGLTM1IExpZ2h0bmluZyBJSSIsZnVsbDoiTG9ja2hlZWQgTWFydGluIEYtMzUgTGlnaHRuaW5nIElJIixvcmlnaW46IlVuaXRlZCBTdGF0ZXMiLGdlbjoiNXRoIixmaXJzdEZsaWdodDoyMDA2LHJvbGU6IlN0ZWFsdGggbXVsdGlyb2xlIixraWxsczoxLGxvc3NlczowLGdyb3VuZDowLHN0YXR1czoicHJvdmVuIixub3RlOiJGaXJzdCBraWxsIG9mIGEgbWFubmVkIGFpcmNyYWZ0IGNhbWUgaW4gMjAyNi4gRWFybGllciBJc3JhZWxpIEYtMzUga2lsbHMgKDIwMjEgZHJvbmVzLCAyMDI0IGNydWlzZSBtaXNzaWxlcykgYXJlIHJlYWwgYnV0IG5vdCBtYW5uZWQtYWlyY3JhZnQga2lsbHMuIixjb25mbGljdHM6W3t5cjoiMjAyMeKAkzI2IixuOiJJc3JhZWxpIGFpciBkZWZlbnNlIixuYXRpb246IklzcmFlbCIsazoxLGw6MCxkOiJEb3duZWQgdHdvIElyYW5pYW4gVUFWcyAoMjAyMSksIGludGVyY2VwdGVkIG1pc3NpbGVzL2Ryb25lcyAoMjAyNCksIGFuZCBzaG90IGRvd24gYW4gSXJhbmlhbiBZYWstMTMwIG9uIDQgTWFyIDIwMjYg4oCUIHRoZSBmaXJzdCBGLTM1IGtpbGwgb2YgYSBtYW5uZWQgYWlyY3JhZnQuIn1dLGZhbW91czoiT24gNCBNYXJjaCAyMDI2IGFuIElzcmFlbGkgRi0zNUkgc2hvdCBkb3duIGFuIElyYW5pYW4gWWFrLTEzMCDigJQgdGhlIGZpcnN0IGFpci10by1haXIga2lsbCBvZiBhIG1hbm5lZCBhaXJjcmFmdCBieSBhbnkgRi0zNS4ifSwKe25hbWU6IkEtMTAgVGh1bmRlcmJvbHQgSUkiLGZ1bGw6IkZhaXJjaGlsZCBSZXB1YmxpYyBBLTEwIChXYXJ0aG9nKSIsb3JpZ2luOiJVbml0ZWQgU3RhdGVzIixnZW46IkNBUyIsZmlyc3RGbGlnaHQ6MTk3Mixyb2xlOiJDbG9zZSBhaXIgc3VwcG9ydCIsa2lsbHM6Mixsb3NzZXM6MCxncm91bmQ6NixzdGF0dXM6InByb3ZlbiIsbm90ZToiQm90aCBraWxscyB3ZXJlIGhlbGljb3B0ZXJzIGRlc3Ryb3llZCB3aXRoIHRoZSAzMCBtbSBHQVUtOCBjYW5ub24uIFJvdWdobHkgc2l4IEEtMTBzIHdlcmUgbG9zdCB0byBJcmFxaSBncm91bmQgZmlyZSDigJQgbm9uZSB0byBlbmVteSBhaXJjcmFmdC4iLGNvbmZsaWN0czpbe3lyOiIxOTkxIixuOiJHdWxmIFdhciIsbmF0aW9uOiJVU0FGIixrOjIsbDowLGQ6IlR3byBJcmFxaSBoZWxpY29wdGVycyBzaG90IGRvd24gd2l0aCB0aGUgZ3VuOyB+NiBBLTEwcyBsb3N0IHRvIFNBTXMvZ3JvdW5kIGZpcmUuIn1dLGZhbW91czoiT24gNiBGZWJydWFyeSAxOTkxIGFuIEEtMTAgYmVjYW1lIHRoZSAnQ2hvcHBlciBQb3BwZXInLCBkb3duaW5nIGFuIElyYXFpIGhlbGljb3B0ZXIgd2l0aCBpdHMgMzAgbW0gZ3VuLiJ9LAp7bmFtZToiRi01IEZyZWVkb20gRmlnaHRlciIsZnVsbDoiTm9ydGhyb3AgRi01QS9CICYgRi01RS9GIFRpZ2VyIElJIixvcmlnaW46IlVuaXRlZCBTdGF0ZXMiLGdlbjoiM3JkIixmaXJzdEZsaWdodDoxOTU5LHJvbGU6IkxpZ2h0IGZpZ2h0ZXIiLGtpbGxzOjI1LGtyOiIxNeKAkzMwIixsb3NzZXM6MTUsbHI6IjEw4oCTMjUiLGdyb3VuZDozLHN0YXR1czoicHJvdmVuIixub3RlOiJLaWxsczogfjI1IGlzIEV0aGlvcGlh4oCZcyBPZ2FkZW4td2FyIGNyZWRpdDsgZG9jdW1lbnRlZCByZWNvbnN0cnVjdGlvbnMgZ2l2ZSAxNeKAkzMwIGluY2x1ZGluZyBhIGhhbmRmdWwgb2YgSXJhbmlhbiB2aWN0b3JpZXMuIExvc3NlcyB3ZXJlIGxvbmcgdW5kZXItcmVwb3J0ZWQ6IElyYW5pYW4gRi01cyBsb3N0IHJvdWdobHkgMTDigJMyNSBpbiBhaXIgY29tYmF0IHRvIElyYXFpIE1pRy0yMXMsIE1pRy0yM3MgYW5kIE1pcmFnZSBGMXMuIEEgZGlzcHV0ZWQgSXJhbmlhbiBNaUctMjUgY2xhaW0gKDE5ODMpIGlzIGV4Y2x1ZGVkLiIsY29uZmxpY3RzOlt7eXI6IjE5NzfigJM3OCIsbjoiT2dhZGVuIFdhciIsbmF0aW9uOiJFdGhpb3BpYSIsazoyMCxsOjAsZDoiRXRoaW9waWFuIEYtNXMgY3JlZGl0ZWQgd2l0aCB+MjUgU29tYWxpIE1pRy0xN3MgYW5kIE1pRy0yMXMgKGFib3V0IDEx4oCTMjEgdmVyaWZpYWJsZSk7IGF0IGxlYXN0IDMgRi01cyBsb3N0IHRvIGdyb3VuZCBmaXJlLiJ9LHt5cjoiMTk4MOKAkzg4IixuOiJJcmFu4oCTSXJhcSBXYXIiLG5hdGlvbjoiSXJhbiIsazo1LGw6MTUsZDoiSVJJQUYgRi01RXMgc2NvcmVkIH404oCTNiBraWxscyBidXQgbG9zdCByb3VnaGx5IDEw4oCTMjUgdG8gSXJhcWkgZmlnaHRlcnMg4oCUIHRoZSB0eXBl4oCZcyBoZWF2aWVzdCBhaXItY29tYmF0IGxvc3Nlcy4gQSBkaXNwdXRlZCBNaUctMjUgY2xhaW0gaXMgZXhjbHVkZWQuIn1dLGZhbW91czoiRXRoaW9waWFuIEYtNUVzIHNob3QgZG93biByb3VnaGx5IDI1IFNvbWFsaSBNaUctMTdzIGFuZCBNaUctMjFzIGR1cmluZyB0aGUgMTk3N+KAkzc4IE9nYWRlbiBXYXIuIn0sCntuYW1lOiJGLTEwNCBTdGFyZmlnaHRlciIsZnVsbDoiTG9ja2hlZWQgRi0xMDQgU3RhcmZpZ2h0ZXIiLG9yaWdpbjoiVW5pdGVkIFN0YXRlcyIsZ2VuOiIybmQiLGZpcnN0RmxpZ2h0OjE5NTQscm9sZToiSW50ZXJjZXB0b3IiLGtpbGxzOjYsbG9zc2VzOjQsbHI6IjTigJM4Iixncm91bmQ6MCxzdGF0dXM6InByb3ZlbiIscmV0aXJlZDp0cnVlLG5vdGU6IktpbGxzIHNwcmVhZCBhY3Jvc3MgUGFraXN0YW5pIGFuZCBUYWl3YW5lc2Ugc2VydmljZTsgc2V2ZXJhbCAxOTY1LXdhciBjbGFpbXMgYXJlIGRlbmllZCBieSB0aGUgb3RoZXIgc2lkZS4gQWlyLWNvbWJhdCBsb3NzZXMgcnVuIDTigJM4IGRlcGVuZGluZyBvbiB3aG9zZSBjbGFpbXMgeW91IGFjY2VwdCDigJQgaW5jbHVkaW5nIGEgVVNBRiBGLTEwNEMgZG93bmVkIGJ5IGEgQ2hpbmVzZSBNaUctMTkgbmVhciBIYWluYW4gaW4gMTk2NS4iLGNvbmZsaWN0czpbe3lyOiIxOTY1IixuOiJJbmRvLVBha2lzdGFuaSBXYXIiLG5hdGlvbjoiUGFraXN0YW4iLGs6MixsOjAsZDoiQ2xhaW1lZCBhIE15c3TDqHJlIElWIGFuZCBDYW5iZXJyYXM7IHNvbWUgY2xhaW1zIGRlbmllZCBieSBJbmRpYS4ifSx7eXI6IjE5NjUiLG46IlZpZXRuYW0gV2FyIChIYWluYW4pIixuYXRpb246IlVTQSIsazowLGw6MSxkOiJBIFVTQUYgRi0xMDRDIHN0cmF5ZWQgb3ZlciBDaGluZXNlIEhhaW5hbiBhbmQgd2FzIGRvd25lZCBieSBhIFBMQUFGIE1pRy0xOTsgQ2FwdC4gUGhpbGlwIFNtaXRoIHNwZW50IG92ZXIgc2V2ZW4geWVhcnMgYXMgYSBQT1cuIn0se3lyOiIxOTY3IixuOiJUYWl3YW4gU3RyYWl0IGNsYXNoIixuYXRpb246IlRhaXdhbiIsazoyLGw6MSxkOiJUd28gUk9DQUYgRi0xMDRHcyBlYWNoIGRvd25lZCBhIFBMQUFGIE1pRy0xOTsgb25lIEYtMTA0IHBpbG90IGxvc3QuIn0se3lyOiIxOTcxIixuOiJJbmRvLVBha2lzdGFuaSBXYXIiLG5hdGlvbjoiUGFraXN0YW4iLGs6MixsOjIsZDoiTWl4ZWQgY2xhaW1zOyAyIEYtMTA0cyBsb3N0IHRvIEluZGlhbiBNaUctMjFzLiJ9XSxmYW1vdXM6IlRhaXdhbmVzZSBGLTEwNEdzIGRvd25lZCB0d28gQ2hpbmVzZSBNaUctMTlzIGluIHRoZSBKYW51YXJ5IDE5NjcgY2xhc2ggb3ZlciB0aGUgVGFpd2FuIFN0cmFpdC4ifSwKe25hbWU6Ik1pcmFnZSBJSUkgLyA1IixmdWxsOiJEYXNzYXVsdCBNaXJhZ2UgSUlJIC8gTWlyYWdlIDUiLG9yaWdpbjoiRnJhbmNlIixnZW46IjJuZC8zcmQiLGZpcnN0RmxpZ2h0OjE5NTYscm9sZToiSW50ZXJjZXB0b3IgLyBtdWx0aXJvbGUiLGtpbGxzOjEwMCxrcjoiMTAw4oCTMjIwIixsb3NzZXM6MTUsbHI6IjjigJMzNSIsZ3JvdW5kOjAsc3RhdHVzOiJwcm92ZW4iLHJldGlyZWQ6dHJ1ZSxub3RlOiJ+MTAwIGlzIHRoZSBjb25zZXJ2YXRpdmUgY29uc2Vuc3VzIGZvciB0aGUgSXNyYWVsaSBNaXJhZ2UgSUlJQ0ogYWxvbmU7IGNvbXBpbGVkIElzcmFlbGkgY3JlZGl0IGxpc3RzIHJ1biB0byB+MjIwLCBidXQgbWFueSBraWxscyBjYW5ub3QgYmUgc3BsaXQgZnJvbSB0aGUgSXNyYWVsaS1idWlsdCBOZXNoZXIgZGVyaXZhdGl2ZSwgd2hpY2ggaXMgY291bnRlZCBzZXBhcmF0ZWx5LiBMb3NzZXMgcmFuZ2UgZnJvbSBJc3JhZWwncyBvZmZpY2lhbCBhY2NvdW50aW5nICh+OOKAkzEyKSB0byB+MzUgaW4gb3Bwb3NpbmcgY2xhaW1zLiIsY29uZmxpY3RzOlt7eXI6IjE5NjciLG46IlNpeC1EYXkgV2FyIixuYXRpb246IklzcmFlbCIsazo0OCxsOjAsZDoiSXNyYWVsaSBNaXJhZ2UgSUlJQ0ogY2xhaW1lZCB+NDggb2YgNTggQXJhYiBhaXJjcmFmdCBkb3duZWQgaW4gYWlyIGNvbWJhdC4ifSx7eXI6IjE5NzEiLG46IkluZG8tUGFraXN0YW5pIFdhciIsbmF0aW9uOiJQYWtpc3RhbiIsazozLGw6MCxkOiJQQUYgTWlyYWdlcyBjbGFpbWVkIENhbmJlcnJhcywgYSBTdS03IGFuZCBhIEh1bnRlciB3aXRoIG5vIGxvc3NlcyByZXBvcnRlZC4ifSx7eXI6IjE5ODIiLG46IkZhbGtsYW5kcyBXYXIiLG5hdGlvbjoiQXJnZW50aW5hIixrOjAsbDoxMixkOiJBcmdlbnRpbmUgTWlyYWdlIElJSSAvIERhZ2dlciBsb3NzZXMsIG1vc3RseSB0byBTZWEgSGFycmllciBTaWRld2luZGVycy4ifV0sZmFtb3VzOiJJc3JhZWxpIE1pcmFnZSBJSUlDSnMgY2xhaW1lZCB0aGUgYnVsayBvZiBBcmFiIGFpcmNyYWZ0IGRlc3Ryb3llZCBpbiB0aGUgMTk2NyBTaXgtRGF5IFdhci4ifSwKe25hbWU6Ik1pcmFnZSBGMSIsZnVsbDoiRGFzc2F1bHQgTWlyYWdlIEYxIixvcmlnaW46IkZyYW5jZSIsZ2VuOiIzcmQiLGZpcnN0RmxpZ2h0OjE5NjYscm9sZToiSW50ZXJjZXB0b3IgLyBtdWx0aXJvbGUiLGtpbGxzOjM5LGtyOiIzNeKAkzU4Iixsb3NzZXM6MzUsbHI6IjI14oCTNDQiLGdyb3VuZDowLHN0YXR1czoicHJvdmVuIixyZXRpcmVkOnRydWUsbm90ZToiSXJhcWkgRjFzIHdlcmUgYm90aCBwcm9saWZpYyBraWxsZXJzIGFuZCBoZWF2eSBsb3NlcnMgaW4gdGhlIElyYW7igJNJcmFxIFdhciDigJQgdGhlIGNsb3Nlc3QgdGhpbmcgdG8gYSAnYnJlYWstZXZlbicgcmVjb3JkIGFtb25nIG1ham9yIHR5cGVzLiBDbGFpbWVkLXZzLWNvbmZpcm1lZCBnYXBzIGFyZSB3aWRlIG9uIGJvdGggc2lkZXM6IDM14oCTNTgga2lsbHMgY2xhaW1lZCAod2VsbCB1bmRlciAzMCBpbmRlcGVuZGVudGx5IGNvbmZpcm1lZCkgYWdhaW5zdCAyNeKAkzQ0IGxvc3Nlcy4iLGNvbmZsaWN0czpbe3lyOiIxOTgw4oCTODgiLG46IklyYW7igJNJcmFxIFdhciIsbmF0aW9uOiJJcmFxIixrOjM1LGw6MzUsZDoiQ2xhaW1lZCB+MzUgSXJhbmlhbiBhaXJjcmFmdCBpbmNsLiBGLTE0czsgMzMgSXJhcWkgRjFzIGRvd25lZCBieSBJcmFuaWFuIEYtMTRzICsgMiBieSBGLTRzLiJ9LHt5cjoiMTk4MeKAkzg4IixuOiJTLiBBZnJpY2FuIEJvcmRlciBXYXIiLG5hdGlvbjoiUy4gQWZyaWNhIixrOjIsbDowLGQ6IlNBQUYgTWlyYWdlIEYxQ1ogZG93bmVkIHR3byBBbmdvbGFuIE1pRy0yMXMuIn0se3lyOiIxOTkxIixuOiJHdWxmIFdhciIsbmF0aW9uOiJJcmFxIixrOjAsbDo5LGQ6In45IElyYXFpIEYxcyBkb3duZWQgaW4gYWlyIGNvbWJhdCwgbW9zdGx5IGJ5IFVTQUYgRi0xNXMuIn1dLGZhbW91czoiSXJhcWkgTWlyYWdlIEYxcyBkb3duZWQgc2V2ZXJhbCBJcmFuaWFuIEYtMTQgVG9tY2F0cyBkdXJpbmcgdGhlIGxvdy1hbHRpdHVkZSAnR2lyYWZmZScgbWlzc2lvbnMgb2YgdGhlIElyYW7igJNJcmFxIFdhci4ifSwKe25hbWU6Ik1pcmFnZSAyMDAwIixmdWxsOiJEYXNzYXVsdCBNaXJhZ2UgMjAwMCIsb3JpZ2luOiJGcmFuY2UiLGdlbjoiNHRoIixmaXJzdEZsaWdodDoxOTc4LHJvbGU6Ik11bHRpcm9sZSIsa2lsbHM6MSxsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InByb3ZlbiIsbm90ZToiQSBHcmVlayBNaXJhZ2UgMjAwMCBzaG90IGRvd24gYSBUdXJraXNoIEYtMTYgb3ZlciB0aGUgQWVnZWFuIGluIDE5OTYg4oCUIHRoZSB0eXBlJ3MgZmlyc3QgYWlyLXRvLWFpciBraWxsLiBUdXJrZXkgY29uZmlybWVkIHRoZSBsb3NzIGluIDIwMTI7IEdyZWVjZSBoYXMgbmV2ZXIgb2ZmaWNpYWxseSBhY2tub3dsZWRnZWQgaXQuIEluZGlhbiBNaXJhZ2UgMjAwMHMgZmxldyBzdHJpa2UgbWlzc2lvbnMgaW4gdGhlIE1heSAyMDI1IGNsYXNoIHdpdGggUGFraXN0YW47IGEgbG9zcyB3YXMgYWxsZWdlZCBidXQgbmV2ZXIgY29uZmlybWVkLiIsY29uZmxpY3RzOlt7eXI6IjE5OTkiLG46IkthcmdpbCBXYXIiLG5hdGlvbjoiSW5kaWEiLGs6MCxsOjAsZDoifjI0MCBzdHJpa2Ugc29ydGllczsgbm8gYWlyLXRvLWFpciBjb21iYXQuIn0se3lyOiIyMDI1IixuOiJSdXNzby1Va3JhaW5pYW4gV2FyIixuYXRpb246IlVrcmFpbmUiLGs6MCxsOjAsZDoiQSBVa3JhaW5pYW4gTWlyYWdlIDIwMDAgZGVzdHJveWVkIGEgS2gtMTAxIGNydWlzZSBtaXNzaWxlIGluIDIwMjUg4oCUIG5vdCBhIG1hbm5lZCBhaXJjcmFmdC4ifV0sZmFtb3VzOiJObyBjb25maXJtZWQgYWlyLXRvLWFpciBraWxsIGFnYWluc3QgYSBtYW5uZWQgYWlyY3JhZnQ7IGEgMTk5NiBHcmVlayBjbGFpbSBvdmVyIGEgVHVya2lzaCBGLTE2IHJlbWFpbnMgZGlzcHV0ZWQuIn0sCntuYW1lOiJSYWZhbGUiLGZ1bGw6IkRhc3NhdWx0IFJhZmFsZSIsb3JpZ2luOiJGcmFuY2UiLGdlbjoiNC41IixmaXJzdEZsaWdodDoxOTg2LHJvbGU6Ik9tbmlyb2xlIixraWxsczowLGxvc3NlczoxLGdyb3VuZDowLHN0YXR1czoicHJvdmVuIixub3RlOiJJbiBNYXkgMjAyNSBhdCBsZWFzdCBvbmUgSW5kaWFuIFJhZmFsZSB3YXMgc2hvdCBkb3duIGR1cmluZyB0aGUgSW5kaWHigJNQYWtpc3RhbiBhaXIgYmF0dGxlLCBpbmRlcGVuZGVudGx5IGNvbmZpcm1lZCBieSBVUyBhbmQgRnJlbmNoIG9mZmljaWFscy4gUGFraXN0YW4gY2xhaW1lZCB1cCB0byB0aHJlZTsgb25seSBvbmUgaXMgdmVyaWZpZWQuIFRoZSBSYWZhbGUgaGFzIHlldCB0byBzY29yZSBhbiBhaXItdG8tYWlyIGtpbGwuIixjb25mbGljdHM6W3t5cjoiMjAxMeKAkzI1IixuOiJMaWJ5YS9NYWxpL0lyYXEvU3lyaWEiLG5hdGlvbjoiRnJhbmNlIixrOjAsbDowLGQ6IkV4dGVuc2l2ZSBhaXItdG8tZ3JvdW5kIGFuZCBzdHJpa2Ugb3BlcmF0aW9uczsgbm8gY29uZmlybWVkIGFpci10by1haXIgdmljdG9yeS4ifSx7eXI6IjIwMjUiLG46IkluZGlh4oCTUGFraXN0YW4gKFNpbmRvb3IpIixuYXRpb246IkluZGlhIixrOjAsbDowLGQ6IlBha2lzdGFuIGNsYWltZWQgUmFmYWxlIGxvc3NlczsgY29udGVzdGVkLCBubyBvZmZpY2lhbCBjb25maXJtYXRpb24g4oCUIGV4Y2x1ZGVkLiJ9XSxmYW1vdXM6IkNvbWJhdC1wcm92ZW4gaW4gc3RyaWtlIGNhbXBhaWducyBzaW5jZSBMaWJ5YSAyMDExOyBubyBhaXItdG8tYWlyIGtpbGwgY3JlZGl0ZWQsIGFuZCB0aGUgMjAyNSBsb3NzIGNsYWltcyByZW1haW4gdW52ZXJpZmllZC4ifSwKe25hbWU6IlNlYSBIYXJyaWVyIixmdWxsOiJCcml0aXNoIEFlcm9zcGFjZSBTZWEgSGFycmllciIsb3JpZ2luOiJVbml0ZWQgS2luZ2RvbSIsZ2VuOiIzcmQiLGZpcnN0RmxpZ2h0OjE5Nzgscm9sZToiVi9TVE9MIGNhcnJpZXIgZmlnaHRlciIsa2lsbHM6MjAsa3I6IjIw4oCTMjMiLGxvc3NlczowLGdyb3VuZDoyLHN0YXR1czoicHJvdmVuIixyZXRpcmVkOnRydWUsbm90ZToiQSAyMC10by0wIGFpci1jb21iYXQgcmVjb3JkIGluIHRoZSBGYWxrbGFuZHMuIDIwIGNvbmZpcm1lZCBwbHVzIDMgcHJvYmFibGVzIOKAlCB3aGljaCBpcyB3aGVyZSB0aGUgMjPigJMyNCBpbiBwb3B1bGFyIHNvdXJjZXMgY29tZXMgZnJvbTsgMjAgaXMgdGhlIGNvbnNlcnZhdGl2ZSwgYnJvYWRseSBhZ3JlZWQgZmlndXJlLiIsY29uZmxpY3RzOlt7eXI6IjE5ODIiLG46IkZhbGtsYW5kcyBXYXIiLG5hdGlvbjoiVUsiLGs6MjAsbDowLGQ6IjIwIEFyZ2VudGluZSBhaXJjcmFmdCBkb3duZWQgd2l0aCB6ZXJvIGFpci10by1haXIgbG9zc2VzOyB0aGUgQUlNLTlMIFNpZGV3aW5kZXIgd2FzIGRlY2lzaXZlLiAyIGxvc3QgdG8gZ3JvdW5kIGZpcmUsIDQgdG8gYWNjaWRlbnRzLiJ9XSxmYW1vdXM6IkluIHRoZSBGYWxrbGFuZHMgdGhlIFNlYSBIYXJyaWVyIGFjaGlldmVkIGEgMjAtdG8tMCBhaXItY29tYmF0IHJlY29yZCBhZ2FpbnN0IHRoZSBBcmdlbnRpbmUgQWlyIEZvcmNlIGFuZCBOYXZ5LiJ9LAp7bmFtZToiSUFJIEtmaXIiLGZ1bGw6IklzcmFlbCBBZXJvc3BhY2UgSW5kdXN0cmllcyBLZmlyIixvcmlnaW46IklzcmFlbCIsZ2VuOiIzcmQvNHRoIixmaXJzdEZsaWdodDoxOTczLHJvbGU6Ik11bHRpcm9sZSIsa2lsbHM6Mixsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InByb3ZlbiIsbm90ZToiVHdvIGtpbGxzIGFyZSBmaXJtbHkgY29uZmlybWFibGUg4oCUIGEgU3lyaWFuIE1pRy0yMSAoMTk3OSkgYW5kIGEgUGVydXZpYW4gQS0zN0IgKDE5OTUpIOKAlCBhbmQgbm8gS2ZpciBoYXMgZXZlciBiZWVuIGxvc3QgaW4gYWlyLXRvLWFpciBjb21iYXQuIFRoZSB0eXBlIHNoaWZ0ZWQgbW9zdGx5IHRvIGdyb3VuZCBhdHRhY2sgb25jZSB0aGUgRi0xNSBhbmQgRi0xNiBhcnJpdmVkLiIsY29uZmxpY3RzOlt7eXI6IjE5NzkiLG46IkZpcnN0IEtmaXIga2lsbCIsbmF0aW9uOiJJc3JhZWwiLGs6MSxsOjAsZDoiQSBLZmlyIEMuMiBkb3duZWQgYSBTeXJpYW4gTWlHLTIxIOKAlCB0aGUgdHlwZSdzIGZpcnN0IHZpY3RvcnkuIn0se3lyOiIxOTk1IixuOiJDZW5lcGEgV2FyIixuYXRpb246IkVjdWFkb3IiLGs6MSxsOjAsZDoiQW4gRWN1YWRvcmlhbiBLZmlyIEMuMiBkb3duZWQgYSBQZXJ1dmlhbiBBLTM3QiB3aXRoIGEgU2hhZnJpciAyIG1pc3NpbGUg4oCUIHRoZSB0eXBl4oCZcyBvbmx5IGtpbGwgb3V0c2lkZSBJc3JhZWxpIHNlcnZpY2UuIFRoZSBvZnRlbi1jaXRlZCAxOTgyIExlYmFub24ga2lsbCBpcyBwb29ybHkgc291cmNlZCBhbmQgZXhjbHVkZWQuIn1dLGZhbW91czoiQSBLZmlyIEMuMiBzY29yZWQgdGhlIHR5cGUncyBmaXJzdCBhaXItdG8tYWlyIGtpbGwgYWdhaW5zdCBhIFN5cmlhbiBNaUctMjEgb24gMjcgSnVuZSAxOTc5LiJ9LAp7bmFtZToiRXVyb2ZpZ2h0ZXIgVHlwaG9vbiIsZnVsbDoiRXVyb2ZpZ2h0ZXIgVHlwaG9vbiIsb3JpZ2luOiJNdWx0aW5hdGlvbmFsIixnZW46IjQuNSIsZmlyc3RGbGlnaHQ6MTk5NCxyb2xlOiJNdWx0aXJvbGUgLyBhaXIgc3VwZXJpb3JpdHkiLGtpbGxzOjAsbG9zc2VzOjAsZ3JvdW5kOjAsc3RhdHVzOiJzdHJpa2UiLG5vdGU6IkNvbWJhdC1wcm92ZW4gYWlyLXRvLWdyb3VuZCwgYnV0IGl0cyBhaXItdG8tYWlyIHJlY29yZCBpcyBsaW1pdGVkIHRvIGRyb25lL1VBViBpbnRlcmNlcHRzIChkZWZlbmRpbmcgSXNyYWVsIDIwMjQsIE1pZGRsZSBFYXN0IDIwMjTigJMyNikg4oCUIG5vdCBtYW5uZWQgYWlyY3JhZnQuIixjb25mbGljdHM6W3t5cjoiMjAxMSIsbjoiTGlieWEiLG5hdGlvbjoiVUsgLyBJdGFseSIsazowLGw6MCxkOiJDb21iYXQgZGVidXQ7IGFpci10by1ncm91bmQgc3RyaWtlIGFuZCByZWNvbm5haXNzYW5jZSBvbmx5LiJ9LHt5cjoiMjAxNeKAkzE5IixuOiJBbnRpLUlTSVMgKFNoYWRlcikiLG5hdGlvbjoiVUsiLGs6MCxsOjAsZDoiUHJlY2lzaW9uIGFpci10by1ncm91bmQgc3RyaWtlczsgbm8gYWlyLXRvLWFpciBjb21iYXQuIn0se3lyOiIyMDI04oCTMjYiLG46IkRyb25lIGRlZmVuc2UiLG5hdGlvbjoiVUsiLGs6MCxsOjAsZDoiRGVzdHJveWVkIHNldmVyYWwgSXJhbmlhbi9Ib3V0aGkgZHJvbmVzIOKAlCBkcm9uZSBraWxscywgbm90IG1hbm5lZC1haXJjcmFmdCBraWxscy4ifV0sZmFtb3VzOiJObyBhaXItdG8tYWlyIGNvbWJhdCBhZ2FpbnN0IG1hbm5lZCBhaXJjcmFmdCB0byBkYXRlOyBoYXMgc2hvdCBkb3duIHNldmVyYWwgaG9zdGlsZSBkcm9uZXMgKDIwMjTigJMyNikuIn0sCntuYW1lOiJTYWFiIEpBUy0zOSBHcmlwZW4iLGZ1bGw6IlNhYWIgSkFTIDM5IEdyaXBlbiIsb3JpZ2luOiJTd2VkZW4iLGdlbjoiNC41IixmaXJzdEZsaWdodDoxOTg4LHJvbGU6Ik11bHRpcm9sZSIsa2lsbHM6MCxsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InN0cmlrZSIsbm90ZToiRmlyc3QgbGl2ZSBjb21iYXQ6IFJveWFsIFRoYWkgQWlyIEZvcmNlIEdyaXBlbnMgZmxldyBwcmVjaXNpb24gc3RyaWtlcyBpbiB0aGUgSnVseSAyMDI1IGJvcmRlciBjbGFzaCB3aXRoIENhbWJvZGlhLiBFYXJsaWVyIHVzZSB3YXMgcmVjb25uYWlzc2FuY2UgKFN3ZWRlbiBvdmVyIExpYnlhLCAyMDExKSBhbmQgTkFUTyBCYWx0aWMgYWlyIHBvbGljaW5nLiBObyBhaXItdG8tYWlyIGNvbWJhdC4iLGNvbmZsaWN0czpbe3lyOiIyMDExIixuOiJMaWJ5YSIsbmF0aW9uOiJTd2VkZW4iLGs6MCxsOjAsZDoifjY1MCByZWNvbm5haXNzYW5jZSBhbmQgYWlyc3BhY2UtbW9uaXRvcmluZyBtaXNzaW9uczsgbm8gd2VhcG9ucyByZWxlYXNlZC4ifSx7eXI6IjIwMjUiLG46IlRoYWnigJNDYW1ib2RpYW4gY2xhc2hlcyIsbmF0aW9uOiJUaGFpbGFuZCIsazowLGw6MCxkOiJSZXBvcnRlZCBhaXItdG8tZ3JvdW5kIHN0cmlrZXMg4oCUIHJlY2VudCwgbGVzcy1zZXR0bGVkIHJlcG9ydGluZy4ifV0sZmFtb3VzOiJObyBhaXItdG8tYWlyIGNvbWJhdCB0byBkYXRlOyBpdHMgY29tYmF0IHVzZSBpcyBsaW1pdGVkIHRvIHJlY29ubmFpc3NhbmNlIGFuZCByZXBvcnRlZCBhaXItdG8tZ3JvdW5kIHN0cmlrZXMuIn0sCntuYW1lOiJUb3JuYWRvIEFEViAoRi4zKSIsZnVsbDoiUGFuYXZpYSBUb3JuYWRvIEFpciBEZWZlbmNlIFZhcmlhbnQiLG9yaWdpbjoiTXVsdGluYXRpb25hbCIsZ2VuOiI0dGgiLGZpcnN0RmxpZ2h0OjE5Nzkscm9sZToiTG9uZy1yYW5nZSBpbnRlcmNlcHRvciIsa2lsbHM6MCxsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InVudGVzdGVkIixyZXRpcmVkOnRydWUsbm90ZToiRGVwbG95ZWQgcmVwZWF0ZWRseSAoR3VsZiAxOTkxLCBCb3NuaWEsIEtvc292bywgSXJhcSAyMDAzKSBidXQgbmV2ZXIgZW5nYWdlZCBhbiBlbmVteSBhaXJjcmFmdC4gTm93IHJldGlyZWQuIixjb25mbGljdHM6W3t5cjoiMTk5MSIsbjoiR3VsZiBXYXIiLG5hdGlvbjoiVUsgLyBTYXVkaSIsazowLGw6MCxkOiIyLDAwMCsgY29tYmF0IGFpciBwYXRyb2wgc29ydGllcyBidXQgaGVsZCBiYWNrIGZyb20gSXJhcWkgYWlyc3BhY2UuIn0se3lyOiIxOTkz4oCTMjAwMyIsbjoiQmFsa2FucyAvIElyYXEiLG5hdGlvbjoiVUsiLGs6MCxsOjAsZDoiRXNjb3J0IGFuZCBDQVAgZHV0eTsgbm8gYWlyLXRvLWFpciBraWxscywgbm8gbG9zc2VzLiJ9XSxmYW1vdXM6IlRoZSBpbnRlcmNlcHRvciB2YXJpYW50IG5ldmVyIGVuZ2FnZWQgYW4gZW5lbXkgYWlyY3JhZnQgZGVzcGl0ZSBtdWx0aXBsZSBkZXBsb3ltZW50cyBiZWZvcmUgcmV0aXJlbWVudC4ifSwKe25hbWU6IlRvcm5hZG8gSURTIixmdWxsOiJQYW5hdmlhIFRvcm5hZG8gSW50ZXJkaWN0b3IvU3RyaWtlIixvcmlnaW46Ik11bHRpbmF0aW9uYWwiLGdlbjoiNHRoIixmaXJzdEZsaWdodDoxOTc0LHJvbGU6IkludGVyZGljdG9yIC8gc3RyaWtlIixraWxsczowLGxvc3NlczowLGdyb3VuZDo4LHN0YXR1czoic3RyaWtlIixub3RlOiJIZWF2aWx5IGNvbWJhdC1wcm92ZW4gaW4gdGhlIHN0cmlrZSByb2xlLiBJdHMgbW9zdCBzaWduaWZpY2FudCBjb21iYXQgbG9zc2VzIOKAlCB+OCBhaXJmcmFtZXMg4oCUIGFsbCBjYW1lIGZyb20gSXJhcWkgZ3JvdW5kIGZpcmUgaW4gdGhlIDE5OTEgR3VsZiBXYXIsIG5vbmUgdG8gYWlyY3JhZnQuIixjb25mbGljdHM6W3t5cjoiMTk5MSIsbjoiR3VsZiBXYXIiLG5hdGlvbjoiVUsgLyBJdGFseSAvIFNhdWRpIixrOjAsbDo4LGQ6In44IGNvYWxpdGlvbiBUb3JuYWRvIElEUyBsb3N0IHRvIElyYXFpIFNBTXMgYW5kIEFBQSBkdXJpbmcgbG93LWxldmVsIHN0cmlrZXMuIn0se3lyOiIyMDExIixuOiJMaWJ5YSIsbmF0aW9uOiJVSyAvIEl0YWx5IixrOjAsbDowLGQ6IkxvbmctcmFuZ2UgcHJlY2lzaW9uIHN0cmlrZXM7IG5vIGxvc3NlcyB0byBlbmVteSBhY3Rpb24uIn0se3lyOiIyMDE04oCTMTkiLG46IkFudGktSVNJUyIsbmF0aW9uOiJVSyIsazowLGw6MCxkOiJTdXN0YWluZWQgcHJlY2lzaW9uIHN0cmlrZSBjYW1wYWlnbjsgUkFGIEdSNCByZXRpcmVkIDIwMTkuIn1dLGZhbW91czoiTm8gYWlyLXRvLWFpciBjb21iYXQ7IGxvc3QgYWJvdXQgZWlnaHQgYWlyZnJhbWVzIHRvIElyYXFpIGdyb3VuZCBmaXJlIGluIHRoZSAxOTkxIEd1bGYgV2FyIOKAlCBpdHMgbW9zdCBzaWduaWZpY2FudCBsb3NzZXMuIn0sCntuYW1lOiJNaUctMjEgRmlzaGJlZCIsZnVsbDoiTWlrb3lhbi1HdXJldmljaCBNaUctMjEiLG9yaWdpbjoiVVNTUiIsZ2VuOiIybmQiLGZpcnN0RmxpZ2h0OjE5NTUscm9sZToiRmlnaHRlciAvIGludGVyY2VwdG9yIixraWxsczoxNTAsa3I6IjEwMOKAkzE4MCIsbG9zc2VzOjI1MCxscjoiMjAw4oCTNTAwIixncm91bmQ6MjAwLHN0YXR1czoicHJvdmVuIixub3RlOiJUaGUgc29mdGVzdCBudW1iZXJzIG9uIHRoZSBwYWdlOiB+MTEsNTAwIGJ1aWx0IGFuZCBjb21iYXQgYWNyb3NzIGZvdXIgY29udGluZW50cywgd2l0aCBubyByZWNvbmNpbGVkIGdsb2JhbCBsZWRnZXIuIFRvdGFscyBhcmUgcm91bmRlZCBhZ2dyZWdhdGUgZXN0aW1hdGVzIHNob3duIGFzIHJhbmdlcyDigJQgY29uZmlybWVkIGtpbGxzIH4xMDDigJMxODAgKGNsYWltcyBydW4gZmFyIGhpZ2hlcikgYWdhaW5zdCB+MjAw4oCTNTAwIGFpci1jb21iYXQgbG9zc2VzIGRlcGVuZGluZyBvbiB3aG9zZSBjcmVkaXRzIHlvdSBhY2NlcHQ7IHRoZSBWaWV0bmFtIGtpbGwtcmF0aW8gcmVtYWlucyBhIGRlY2FkZXMtbG9uZyBkaXNwdXRlLiIsY29uZmxpY3RzOlt7eXI6IjE5NjXigJM3MyIsbjoiVmlldG5hbSBXYXIiLG5hdGlvbjoiTi4gVmlldG5hbSIsazo2NyxsOjY1LGQ6IlZQQUYtY3JlZGl0ZWQgZmlndXJlczsgVVMgYWNjb3VudGluZyBkaWZmZXJzIHNoYXJwbHkg4oCUIGFuIHVucmVzb2x2ZWQgZGlzcHV0ZS4ifSx7eXI6IjE5NzEiLG46IkluZG8tUGFraXN0YW5pIFdhciIsbmF0aW9uOiJJbmRpYSIsazo4LGw6NCxkOiJEb3duZWQgRi0xMDRzLCBGLTZzLCBhIFNhYnJlIGFuZCBhIEMtMTMwIOKAlCB3ZWxsIGRvY3VtZW50ZWQuIn0se3lyOiIxOTgw4oCTODgiLG46IklyYW7igJNJcmFxIFdhciIsbmF0aW9uOiJJcmFxIixrOjQzLGw6NTIsZDoiQm90aCBzaWRlcycgY2xhaW1zIGluZmxhdGVkOyBoZWF2eSBsb3NzZXMgdG8gSXJhbmlhbiBGLTE0cyBhbmQgRi00cy4ifSx7eXI6IjE5ODIiLG46IkxlYmFub24gV2FyIixuYXRpb246IlN5cmlhIixrOjAsbDo0MCxkOiJ+MzfigJM0NSBTeXJpYW4gTWlHLTIxcyBkb3duZWQgYnkgSXNyYWVsOyBubyBjb25maXJtZWQgU3lyaWFuIGtpbGxzLiJ9XSxmYW1vdXM6Ik9uZSBvZiB0aGUgbW9zdC1wcm9kdWNlZCBhbmQgY29tYmF0LWFjdGl2ZSBqZXRzIGV2ZXIgYnVpbHQg4oCUIGZhc3QsIGNoZWFwIGFuZCBmbG93biBieSBkb3plbnMgb2YgYWlyIGZvcmNlcyBhY3Jvc3MgZm91ciBjb250aW5lbnRzLiJ9LAp7bmFtZToiTWlHLTIzIEZsb2dnZXIiLGZ1bGw6Ik1pa295YW4tR3VyZXZpY2ggTWlHLTIzIixvcmlnaW46IlVTU1IiLGdlbjoiM3JkIixmaXJzdEZsaWdodDoxOTY3LHJvbGU6IlN3aW5nLXdpbmcgZmlnaHRlciIsa2lsbHM6MTIsa3I6IjjigJMyMCIsbG9zc2VzOjM1LGxyOiIyNeKAkzYwIixncm91bmQ6NDAsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IkFib3V0IDIwIGtpbGxzIHdlcmUgY2xhaW1lZDsgfjEyIGFyZSBjb25maXJtYWJsZS4gTG9zcyB0YWxsaWVzIGRpdmVyZ2UganVzdCBhcyB3aWRlbHk6IH4yNSBjb25maXJtZWQsIDYwKyBpZiBJcmFuaWFuIGFuZCBJc3JhZWxpIGNsYWltcyBhcmUgY3JlZGl0ZWQuIE5vdGFibHksIGFuIElyYXFpIE1pRy0yM01MIHR3aWNlIGJlc3RlZCB0aGUgZmFyIG1vcmUgY2FwYWJsZSBGLTE0IFRvbWNhdC4iLGNvbmZsaWN0czpbe3lyOiIxOTgw4oCTODgiLG46IklyYW7igJNJcmFxIFdhciIsbmF0aW9uOiJJcmFxIixrOjcsbDo1LGQ6Ik1pRy0yM01MIGRvd25lZCBJcmFuaWFuIEYtMTQgVG9tY2F0cyBpbiAxOTg0IGFuZCAxOTg2LiJ9LHt5cjoiMTk4MeKAkzg1IixuOiJMZWJhbm9uIC8gU3lyaWEiLG5hdGlvbjoiU3lyaWEiLGs6MCxsOjEyLGQ6IjEx4oCTMTMgU3lyaWFuIE1pRy0yM3MgbG9zdCBpbiBhaXIgY29tYmF0IHdpdGggSXNyYWVsLiJ9LHt5cjoiMTk5MSIsbjoiR3VsZiBXYXIiLG5hdGlvbjoiSXJhcSIsazowLGw6OCxkOiJVU0FGIEYtMTVzIGRvd25lZCA4IElyYXFpIE1pRy0yM3M7IG5vIE1pRy0yMyBraWxscy4ifV0sZmFtb3VzOiJBbiBJcmFxaSBNaUctMjNNTCBzaG90IGRvd24gYW4gSXJhbmlhbiBGLTE0IFRvbWNhdCBvbiAxMSBBdWd1c3QgMTk4NCDigJQgYSByYXJlIG9jY2FzaW9uIGEgRmxvZ2dlciBiZXN0ZWQgdGhlIFRvbWNhdC4ifSwKe25hbWU6Ik1pRy0yNSBGb3hiYXQiLGZ1bGw6Ik1pa295YW4tR3VyZXZpY2ggTWlHLTI1IixvcmlnaW46IlVTU1IiLGdlbjoiM3JkIixmaXJzdEZsaWdodDoxOTY0LHJvbGU6IkhpZ2gtc3BlZWQgaW50ZXJjZXB0b3IiLGtpbGxzOjEwLGtyOiI14oCTMTUiLGxvc3Nlczo3LGxyOiI24oCTMTYiLGdyb3VuZDoxLHN0YXR1czoicHJvdmVuIixyZXRpcmVkOnRydWUsbm90ZToiQ2FyZWVyIGZpZ3VyZXMgc3BhbiB0aGUgSXJhbuKAk0lyYXEgV2FyLCBTeXJpYW4gbG9zc2VzIG92ZXIgTGViYW5vbiwgRGVzZXJ0IFN0b3JtIGFuZCB0aGUgbm8tZmx5IHpvbmVzIOKAlCBzb3VyY2VzIGRpdmVyZ2Ugd2lkZWx5LCBzbyByYW5nZXMgYXJlIHNob3duLiBTY29yZWQgdGhlIG9ubHkgY29uZmlybWVkIElyYXFpIGFpci10by1haXIga2lsbCBvZiBEZXNlcnQgU3Rvcm0sIGFuZCBsYXRlciB0aGUgZmlyc3QgYWlyY3JhZnQtdnMtZHJvbmUga2lsbCBpbiBoaXN0b3J5ICgyMDAyLCBub3QgY291bnRlZCBpbiB0aGUgdG90YWwpLiIsY29uZmxpY3RzOlt7eXI6IjE5ODDigJM4OCIsbjoiSXJhbuKAk0lyYXEgV2FyIixuYXRpb246IklyYXEiLGs6OSxsOjIsZDoiSXJhcWkgRm94YmF0cyDigJQgQ29sLiBNb2hhbW1lZCBSYXl5YW4gYWxvbmUgd2FzIGNyZWRpdGVkIHdpdGggfjgg4oCUIGRvd25lZCBJcmFuaWFuIEYtNHMsIEYtNXMsIGEgQy0xMzAsIGFuIEYtMTQgYW5kIHRoZSBGb2trZXIgRi0yNyBhaXJsaW5lciBzaG9vdGRvd24gb2YgMTk4Ni4gSXJhbiBjbGFpbXMgdXAgdG8gMTAgRm94YmF0cyBpbiByZXR1cm47IG9ubHkgYSBjb3VwbGUgYXJlIGNvbmZpcm1lZC4ifSx7eXI6IjE5ODEiLG46IkxlYmFub24gLyBTeXJpYSIsbmF0aW9uOiJTeXJpYSIsazowLGw6MixkOiJUd28gU3lyaWFuIE1pRy0yNXMgZmVsbCB0byBJc3JhZWxpIEYtMTVzIGluIDE5ODE7IGEgcmVjb25uYWlzc2FuY2UgTWlHLTI1UkIgbG9zdCBpbiAxOTgyIGlzIHNvbWV0aW1lcyBhZGRlZC4ifSx7eXI6IjE5OTEiLG46Ikd1bGYgV2FyIixuYXRpb246IklyYXEiLGs6MSxsOjIsZDoiRG93bmVkIGEgVVMgTmF2eSBGL0EtMTggKFNwZWljaGVyKSDigJQgSXJhceKAmXMgb25seSBjb25maXJtZWQgQTJBIGtpbGwgb2YgdGhlIHdhcjsgdHdvIE1pRy0yNXMgbG9zdCB0byBGLTE1cy4ifSx7eXI6IjE5OTIvMjAwMiIsbjoiTm8tZmx5IHpvbmVzIixuYXRpb246IklyYXEiLGs6MCxsOjEsZDoiT25lIE1pRy0yNSBmZWxsIHRvIGEgVVNBRiBGLTE2IGluIERlY2VtYmVyIDE5OTIg4oCUIHRoZSBmaXJzdCBjb21iYXQgQU1SQUFNIGtpbGwuIEluIDIwMDIgYSBGb3hiYXQgZG93bmVkIGFuIE1RLTEgUHJlZGF0b3I6IHRoZSBmaXJzdCBhaXJjcmFmdC12cy1kcm9uZSBraWxsLCBub3RlZCBidXQgbm90IGNvdW50ZWQuIn1dLGZhbW91czoiT24gMTcgSmFudWFyeSAxOTkxIGFuIElyYXFpIE1pRy0yNSBkb3duZWQgYSBVUyBOYXZ5IEYvQS0xOCDigJQgdGhlIHNvbGUgY29uZmlybWVkIGFpci10by1haXIga2lsbCBzY29yZWQgYnkgSXJhcSBkdXJpbmcgRGVzZXJ0IFN0b3JtLiJ9LAp7bmFtZToiTWlHLTI5IEZ1bGNydW0iLGZ1bGw6Ik1pa295YW4gTWlHLTI5IixvcmlnaW46IlVTU1IiLGdlbjoiNHRoIixmaXJzdEZsaWdodDoxOTc3LHJvbGU6IkFpciBzdXBlcmlvcml0eSIsa2lsbHM6MCxsb3NzZXM6MTUsZ3JvdW5kOjMwLHN0YXR1czoicHJvdmVuIixub3RlOiJEZXNwaXRlIGhlYXZ5IGNvbWJhdCBleHBvc3VyZSB0aGVyZSBpcyBubyBicm9hZGx5IGFjY2VwdGVkIE1pRy0yOSBraWxsIGFnYWluc3QgYSBmaXhlZC13aW5nIG1hbm5lZCBhaXJjcmFmdCDigJQgYW5kIGEgbG9uZyBsaXN0IG9mIGxvc3NlcyB0byBGLTE1cywgRi0xNnMgYW5kIGV2ZW4gdGhlIFN1LTI3LiBJdHMgb25seSBjb25maXJtZWQgc2hvb3Rkb3ducyDigJQgdHdvIHVuYXJtZWQgY2l2aWxpYW4gQ2Vzc25hcyBkZXN0cm95ZWQgYnkgYSBDdWJhbiBNaUctMjkgaW4gMTk5NiDigJQgZmFsbCBvdXRzaWRlIHRoZSBtaWxpdGFyeS1haXJjcmFmdCBjb252ZW50aW9uIGFuZCBhcmUgbm90IGNvdW50ZWQuIixjb25mbGljdHM6W3t5cjoiMTk5MSIsbjoiR3VsZiBXYXIiLG5hdGlvbjoiSXJhcSIsazowLGw6NSxkOiJGaXZlIElyYXFpIE1pRy0yOXMgZG93bmVkIGJ5IEYtMTVzIChvbmUgdmlhIGZyYXRyaWNpZGUpOyBubyBraWxscy4ifSx7eXI6IjE5OTkiLG46Iktvc292byBXYXIiLG5hdGlvbjoiWXVnb3NsYXZpYSIsazowLGw6NixkOiJTaXggWXVnb3NsYXYgTWlHLTI5cyBkb3duZWQgYnkgTkFUTyBGLTE1cy9GLTE2cy4ifSx7eXI6IjE5OTnigJMyMDAwIixuOiJFcml0cmVh4oCTRXRoaW9waWEiLG5hdGlvbjoiRXJpdHJlYSIsazowLGw6MixkOiJUaGUgb25seSBNaUctMjktdnMtU3UtMjcgZHVlbHMgZXZlciDigJQgdHdvIEVyaXRyZWFuIEZ1bGNydW1zIGRvd25lZCBieSBFdGhpb3BpYW4gRmxhbmtlcnMuIn0se3lyOiIyMDIy4oCTMjUiLG46IlJ1c3NvLVVrcmFpbmlhbiBXYXIiLG5hdGlvbjoiVWtyYWluZSIsazowLGw6MjksZDoifjI5IFVrcmFpbmlhbiBNaUctMjlzIHZpc3VhbGx5IGNvbmZpcm1lZCBsb3N0IHRvIG1peGVkIGNhdXNlczsgdXNlZCBmb3IgSEFSTS9KREFNIHN0cmlrZXMuIn1dLGZhbW91czoiSW4gRmVicnVhcnkgMTk5OSB0aGUgTWlHLTI5IG1ldCBpdHMgc3RhYmxlbWF0ZSB0aGUgU3UtMjcgaW4gY29tYmF0IGZvciB0aGUgb25seSB0aW1lIGluIGhpc3Rvcnkg4oCUIGFuZCBsb3N0IGRlY2lzaXZlbHkuIn0sCntuYW1lOiJNaUctMzEgRm94aG91bmQiLGZ1bGw6Ik1pa295YW4gTWlHLTMxIixvcmlnaW46IlVTU1IgLyBSdXNzaWEiLGdlbjoiNHRoIixmaXJzdEZsaWdodDoxOTc1LHJvbGU6IkxvbmctcmFuZ2UgaW50ZXJjZXB0b3IiLGtpbGxzOjIsbG9zc2VzOjAsZ3JvdW5kOjMsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IlJ1c3NpYSdzIGxvbmctcmFuZ2UgaW50ZXJjZXB0b3IgaGFzIGJlZW4gY3JlZGl0ZWQgd2l0aCBzZXZlcmFsIGtpbGxzIG9mIFVrcmFpbmlhbiBhaXJjcmFmdCB1c2luZyB0aGUgUi0zN00gbWlzc2lsZSBzaW5jZSAyMDIyLCB0aG91Z2ggY3JlZGl0IGlzIGJsdXJyZWQgd2l0aCB0aGUgU3UtMzUsIHdoaWNoIGZpcmVzIHRoZSBzYW1lIHdlYXBvbi4gTm8gTWlHLTMxIGhhcyBiZWVuIGxvc3QgaW4gYWlyIGNvbWJhdC4iLGNvbmZsaWN0czpbe3lyOiIyMDIy4oCTMjUiLG46IlJ1c3NvLVVrcmFpbmlhbiBXYXIiLG5hdGlvbjoiUnVzc2lhIixrOjAsbDowLGQ6IlJlcG9ydGVkIFItMzdNIGtpbGxzIGFyZSB1bnZlcmlmaWVkOyBNaUctMzFLIGxhdW5jaGVzIEtpbnpoYWwgbWlzc2lsZXMuIH4zIGxvc3Qgb24gdGhlIGdyb3VuZCAvIHRvIGFjY2lkZW50cywgbm9uZSB0byBlbmVteSBhaXJjcmFmdC4ifV0sZmFtb3VzOiJUaGUgTWlHLTMxJ3MgY29tYmF0IGNvbnRyaWJ1dGlvbiBoYXMgYmVlbiBhcyBhIHN0YW5kLW9mZiBtaXNzaWxlIHRydWNrIOKAlCBsYXVuY2hpbmcgUi0zN00gYW5kIEtpbnpoYWwgc2hvdHMg4oCUIHJhdGhlciB0aGFuIGFzIGEgZG9nZmlnaHRlci4ifSwKe25hbWU6IlN1LTI3IEZsYW5rZXIiLGZ1bGw6IlN1a2hvaSBTdS0yNyIsb3JpZ2luOiJVU1NSIC8gUnVzc2lhIixnZW46IjR0aCIsZmlyc3RGbGlnaHQ6MTk3Nyxyb2xlOiJBaXIgc3VwZXJpb3JpdHkiLGtpbGxzOjMsbG9zc2VzOjEsZ3JvdW5kOjE5LHN0YXR1czoicHJvdmVuIixub3RlOiJVbmRlZmVhdGVkIGluIGFpci10by1haXIgY29tYmF0IOKAlCBpdHMgb25seSBhaXItY29tYmF0IGFjdGlvbiB3YXMgYmVhdGluZyB0aGUgTWlHLTI5IG92ZXIgdGhlIEhvcm4gb2YgQWZyaWNhLiBHcm91bmQgbG9zc2VzIGFyZSBhbG1vc3QgYWxsIGZyb20gdGhlIFVrcmFpbmUgd2FyIChib3RoIG9wZXJhdG9ycykuIixjb25mbGljdHM6W3t5cjoiMTk5OOKAkzIwMDAiLG46IkVyaXRyZWHigJNFdGhpb3BpYSIsbmF0aW9uOiJFdGhpb3BpYSIsazozLGw6MCxkOiJEb3duZWQgMuKAkzMgRXJpdHJlYW4gTWlHLTI5cyAodXAgdG8gNSBjbGFpbWVkKSBpbiB0aGUgb25seSBGbGFua2VyLXZzLUZ1bGNydW0gY29tYmF0IGluIGhpc3RvcnkuIn0se3lyOiIyMDAwIixuOiJBbmdvbGFuIENpdmlsIFdhciIsbmF0aW9uOiJBbmdvbGEiLGs6MCxsOjAsZDoiT25lIFN1LTI3IGxvc3QgdG8gYSBNQU5QQURTIG9uIGxhbmRpbmcg4oCUIG5vdCBhaXItdG8tYWlyLiJ9LHt5cjoiMjAyMuKAkzI1IixuOiJSdXNzby1Va3JhaW5pYW4gV2FyIixuYXRpb246IlVrcmFpbmUgLyBSdXNzaWEiLGs6MCxsOjAsZDoifjE5IFVrcmFpbmlhbiBTdS0yN3MgdmlzdWFsbHkgY29uZmlybWVkIGxvc3QgdG8gU0FNcy9ncm91bmQgc3RyaWtlczsgbm8gY29uZmlybWVkIEEyQSBraWxscyBlaXRoZXIgc2lkZS4ifV0sZmFtb3VzOiJPbiAyNeKAkzI2IEZlYnJ1YXJ5IDE5OTkgYW4gRXRoaW9waWFuIFN1LTI3IGRvd25lZCB0d28gRXJpdHJlYW4gTWlHLTI5cyBpbiB0aGUgb25seSBGbGFua2VyLXZzLUZ1bGNydW0gZG9nZmlnaHRzIGV2ZXIgZm91Z2h0LiJ9LAp7bmFtZToiU3UtMzAiLGZ1bGw6IlN1a2hvaSBTdS0zMCAoaW5jbC4gTUtJL1NNKSIsb3JpZ2luOiJSdXNzaWEiLGdlbjoiNC41IixmaXJzdEZsaWdodDoxOTg5LHJvbGU6IlN1cGVybWFuZXV2ZXJhYmxlIG11bHRpcm9sZSIsa2lsbHM6MSxsb3NzZXM6MCxncm91bmQ6MTUsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IkEgUnVzc2lhbiBTdS0zMCBzaG90IGRvd24gYSBVa3JhaW5pYW4gTWlHLTI5IGluIEF1Z3VzdCAyMDI0LiBUd28gU3UtMzBzIHdlcmUgbGF0ZXIgZGVzdHJveWVkIGJ5IEFJTS05IG1pc3NpbGVzIGZpcmVkIGZyb20gVWtyYWluaWFuIHNlYSBkcm9uZXMg4oCUIG5hdmFsLWRyb25lIGtpbGxzLCBub3QgYWlyLXRvLWFpciBsb3NzZXMuIixjb25mbGljdHM6W3t5cjoiMjAyMuKAkzI1IixuOiJSdXNzby1Va3JhaW5pYW4gV2FyIixuYXRpb246IlJ1c3NpYSIsazowLGw6MCxkOiJ+MTUgU3UtMzBzIGxvc3QgdG8gU0FNcywgZHJvbmUgcmFpZHMgYW5kIHNhYm90YWdlIOKAlCBub25lIHRvIGVuZW15IGZpZ2h0ZXJzLiBSLTM3TSBraWxsIGNsYWltcyB1bnZlcmlmaWVkLiJ9LHt5cjoiMjAxOS8yMDI1IixuOiJJbmRpYeKAk1Bha2lzdGFuIixuYXRpb246IkluZGlhIixrOjAsbDowLGQ6IlN1LTMwTUtJcyBlbmdhZ2VkIGluIDIwMTkgYW5kIHJlcG9ydGVkbHkgZmlyZWQgQnJhaE1vcyBpbiAyMDI1OyBQYWtpc3Rhbmkgc2hvb3Rkb3duIGNsYWltIGV4Y2x1ZGVkLiJ9XSxmYW1vdXM6IkluIE1heSAyMDI1J3MgT3BlcmF0aW9uIFNpbmRvb3IsIElBRiBTdS0zME1LSXMgcmVwb3J0ZWRseSBmaXJlZCBCcmFoTW9zIGNydWlzZSBtaXNzaWxlcyBhdCBQYWtpc3RhbmkgYWlyYmFzZXMuIn0sCntuYW1lOiJTdS0zMyIsZnVsbDoiU3VraG9pIFN1LTMzIChGbGFua2VyLUQpIixvcmlnaW46IlJ1c3NpYSIsZ2VuOiI0dGgiLGZpcnN0RmxpZ2h0OjE5ODcscm9sZToiQ2FycmllciBhaXIgc3VwZXJpb3JpdHkiLGtpbGxzOjAsbG9zc2VzOjAsZ3JvdW5kOjEsc3RhdHVzOiJzdHJpa2UiLG5vdGU6Ikl0cyBvbmx5IGNvbWJhdCBkZXBsb3ltZW50IChTeXJpYSAyMDE24oCTMTcpIHdhcyBncm91bmQtc3RyaWtlIHNvcnRpZXMgd2l0aCBubyBhaXItdG8tYWlyIGFjdGlvbjsgbG9zc2VzIHRvIGRhdGUgYXJlIGNhcnJpZXItbGFuZGluZyBhY2NpZGVudHMuIixjb25mbGljdHM6W3t5cjoiMjAxNuKAkzE3IixuOiJTeXJpYSAoS3V6bmV0c292KSIsbmF0aW9uOiJSdXNzaWEiLGs6MCxsOjAsZDoiR3JvdW5kLXN0cmlrZSBzb3J0aWVzIG9ubHk7IG9uZSBhaXJjcmFmdCBsb3N0IHRvIGFuIGFycmVzdG9yLWNhYmxlIGZhaWx1cmUsIG5vdCBlbmVteSBhY3Rpb24uIn1dLGZhbW91czoiVGhlIFN1LTMzJ3Mgc29sZSBjb21iYXQgZGVwbG95bWVudCBwcm9kdWNlZCBncm91bmQtc3RyaWtlIHNvcnRpZXMgYW5kIGEgY2Fycmllci1sYW5kaW5nIGFjY2lkZW50LCBidXQgbm8gYWlyLXRvLWFpciBlbmdhZ2VtZW50cy4ifSwKe25hbWU6IlN1LTM0IEZ1bGxiYWNrIixmdWxsOiJTdWtob2kgU3UtMzQiLG9yaWdpbjoiUnVzc2lhIixnZW46IjQuNSIsZmlyc3RGbGlnaHQ6MTk5MCxyb2xlOiJUYWN0aWNhbCBzdHJpa2UiLGtpbGxzOjAsbG9zc2VzOjAsZ3JvdW5kOjM3LHN0YXR1czoic3RyaWtlIixub3RlOiJSdXNzaWEncyBwcmltYXJ5IHRhY3RpY2FsIHN0cmlrZXIgYW5kIGl0cyBtb3N0LWxvc3QgbW9kZXJuIHR5cGU6IH4zNyBkZXN0cm95ZWQgaW4gVWtyYWluZSwgbGFyZ2VseSB0byBTQU0gYW5kIFBhdHJpb3QgYW1idXNoZXMg4oCUIG5vbmUgdG8gZW5lbXkgYWlyY3JhZnQuIixjb25mbGljdHM6W3t5cjoiMjAyMuKAkzI1IixuOiJSdXNzby1Va3JhaW5pYW4gV2FyIixuYXRpb246IlJ1c3NpYSIsazowLGw6MCxkOiJ+MzcgZGVzdHJveWVkIC8gfjUgZGFtYWdlZCAodmlzdWFsbHkgY29uZmlybWVkKSB0byBncm91bmQtYmFzZWQgYWlyIGRlZmVuc2U7IGhlYXZ5IGdsaWRlLWJvbWIgdXNlci4ifSx7eXI6IjIwMTXigJMiLG46IlN5cmlhbiBDaXZpbCBXYXIiLG5hdGlvbjoiUnVzc2lhIixrOjAsbDowLGQ6IlByZWNpc2lvbiBhbmQgYXJlYSBib21iaW5nOyBubyBsb3NzZXMgdG8gZW5lbXkgYWN0aW9uLiJ9XSxmYW1vdXM6IlRoZSBTdS0zNCBoYXMgc3VzdGFpbmVkIHRoZSBoaWdoZXN0IGNvbmZpcm1lZCBjb21iYXQgYXR0cml0aW9uIG9mIGFueSBSdXNzaWFuIGZpeGVkLXdpbmcgdHlwZSDigJQgbmVhcmx5IGFsbCB0byBncm91bmQtYmFzZWQgYWlyIGRlZmVuc2UuIn0sCntuYW1lOiJTdS0zNSIsZnVsbDoiU3VraG9pIFN1LTM1UyAoRmxhbmtlci1FKSIsb3JpZ2luOiJSdXNzaWEiLGdlbjoiNC41IixmaXJzdEZsaWdodDoyMDA4LHJvbGU6IkFpciBzdXBlcmlvcml0eSIsa2lsbHM6Nyxsb3NzZXM6MCxncm91bmQ6OCxzdGF0dXM6InByb3ZlbiIsbm90ZToiUnVzc2lhJ3MgcHJlbWllciBhaXItc3VwZXJpb3JpdHkgZmlnaHRlciBoYXMgY2xhaW1lZCByb3VnaGx5IHNldmVuIGFpci10by1haXIga2lsbHMgb3ZlciBVa3JhaW5pYW4gYWlyY3JhZnQgc2luY2UgMjAyMiwgbW9zdGx5IHdpdGggbG9uZy1yYW5nZSBSLTM3TSBtaXNzaWxlcy4gU2V2ZXJhbCBTdS0zNXMgaGF2ZSBiZWVuIGxvc3QsIGJ1dCB0byBncm91bmQtYmFzZWQgYWlyIGRlZmVuY2VzIHJhdGhlciB0aGFuIHRvIGVuZW15IGZpZ2h0ZXJzLiIsY29uZmxpY3RzOlt7eXI6IjIwMjLigJMyNSIsbjoiUnVzc28tVWtyYWluaWFuIFdhciIsbmF0aW9uOiJSdXNzaWEiLGs6MCxsOjAsZDoiUnVzc2lhIGNsYWltZWQgNysgdmljdG9yaWVzICh1bnZlcmlmaWVkKS4gOCBsb3N0LCBpbmNsdWRpbmcgb25lIHRvIGEgZnJpZW5kbHkgUy0zMDAgaW4gMjAyMy4ifV0sZmFtb3VzOiJObyBjb25maXJtZWQgYWlyLXRvLWFpciBraWxsczsgb25lIFN1LTM1IHdhcyBkb3duZWQgYnkgYSBmcmllbmRseSBSdXNzaWFuIFMtMzAwIG5lYXIgS2FkaWl2a2EgaW4gU2VwdGVtYmVyIDIwMjMuIn0sCntuYW1lOiJTdS01NyBGZWxvbiIsZnVsbDoiU3VraG9pIFN1LTU3IChQQUsgRkEpIixvcmlnaW46IlJ1c3NpYSIsZ2VuOiI1dGgiLGZpcnN0RmxpZ2h0OjIwMTAscm9sZToiU3RlYWx0aCBtdWx0aXJvbGUiLGtpbGxzOjAsbG9zc2VzOjAsZ3JvdW5kOjEsc3RhdHVzOiJzdHJpa2UiLG5vdGU6IlVzZWQgY2F1dGlvdXNseSBhcyBhIHN0YW5kLW9mZiBjcnVpc2UtbWlzc2lsZSBzaG9vdGVyIGZyb20gUnVzc2lhbiBhaXJzcGFjZS4gT25lIGFpcmZyYW1lIHdhcyBkYW1hZ2VkIG9uIHRoZSBncm91bmQg4oCUIHRoZSBmaXJzdCBjb25maXJtZWQgY29tYmF0IGRhbWFnZSB0byBhIFN1LTU3LiIsY29uZmxpY3RzOlt7eXI6IjIwMjLigJMyNSIsbjoiUnVzc28tVWtyYWluaWFuIFdhciIsbmF0aW9uOiJSdXNzaWEiLGs6MCxsOjAsZDoiTGF1bmNoZXMgS2gtNTkvS2gtNjkgZnJvbSBzYWZlIGFpcnNwYWNlOyBuZXZlciBwZW5ldHJhdGVzIFVrcmFpbmlhbiBhaXJzcGFjZS4gT25lIGRhbWFnZWQgb24gdGhlIGdyb3VuZCBhdCBBa2h0dWJpbnNrICgyMDI0KS4ifV0sZmFtb3VzOiJPbiA5IEp1bmUgMjAyNCBVa3JhaW5lIHN0cnVjayBhIFN1LTU3IG9uIHRoZSBncm91bmQgYXQgQWtodHViaW5zayDigJQgdGhlIGZpcnN0IHNhdGVsbGl0ZS1jb25maXJtZWQgZGFtYWdlIHRvIFJ1c3NpYSdzIHN0ZWFsdGggZmlnaHRlci4ifSwKe25hbWU6IkNoZW5nZHUgSi03IixmdWxsOiJDaGVuZ2R1IEotNyAvIEYtNyAoTWlHLTIxIGRlcml2YXRpdmUpIixvcmlnaW46IkNoaW5hIixnZW46IjJuZCIsZmlyc3RGbGlnaHQ6MTk2Nixyb2xlOiJMaWdodHdlaWdodCBpbnRlcmNlcHRvciIsa2lsbHM6MSxsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InByb3ZlbiIsbm90ZToiQSBzdHJpa2luZ2x5IHRoaW4gYWlyLXRvLWFpciByZWNvcmQgZm9yIHN1Y2ggYSB3aWRlbHkgZXhwb3J0ZWQgdHlwZTogb25lIGNpdGVkIGtpbGwsIGFuZCB0aGF0IGFnYWluc3QgYSBsaWdodCBhaXJjcmFmdC4iLGNvbmZsaWN0czpbe3lyOiIyMDA4IixuOiJTcmkgTGFua2FuIENpdmlsIFdhciIsbmF0aW9uOiJTcmkgTGFua2EiLGs6MSxsOjAsZDoiQW4gU0xBRiBGLTdHIHNob3QgZG93biBhbiBMVFRFICdBaXIgVGlnZXInIGxpZ2h0IGFpcmNyYWZ0IOKAlCB0aGUgdHlwZSdzIHNpbmdsZSBtb3N0LWNpdGVkIGtpbGwuIn0se3lyOiIyMDIx4oCTIixuOiJNeWFubWFyIGNpdmlsIHdhciIsbmF0aW9uOiJNeWFubWFyIixrOjAsbDowLGQ6Ikdyb3VuZC1hdHRhY2sgdXNlOyBvbmUgRi03TSByZXBvcnRlZGx5IGRvd25lZCBieSByZXNpc3RhbmNlIGdyb3VuZCBmaXJlICgyMDI1KS4ifV0sZmFtb3VzOiJPbiA5IFNlcHRlbWJlciAyMDA4IGEgU3JpIExhbmthbiBGLTdHIHNob3QgZG93biBhbiBMVFRFICdBaXIgVGlnZXInIGxpZ2h0IGFpcmNyYWZ0IOKAlCB0aGUgdHlwZSdzIHNpbmdsZSBtb3N0LWNpdGVkIGtpbGwuIn0sCntuYW1lOiJDaGVuZ2R1IEotMTAiLGZ1bGw6IkNoZW5nZHUgSi0xMCAoRmlyZWJpcmQpIixvcmlnaW46IkNoaW5hIixnZW46IjQuNSIsZmlyc3RGbGlnaHQ6MTk5OCxyb2xlOiJNdWx0aXJvbGUiLGtpbGxzOjEsbG9zc2VzOjAsZ3JvdW5kOjAsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IkluIE1heSAyMDI1IGEgUGFraXN0YW5pIEotMTBDIHJlcG9ydGVkbHkgZG93bmVkIGF0IGxlYXN0IG9uZSBJbmRpYW4gUmFmYWxlIHdpdGggYSBQTC0xNSBtaXNzaWxlIOKAlCB0aGUgdHlwZSdzIGNvbWJhdCBkZWJ1dCBhbmQgZmlyc3QgYWlyLXRvLWFpciBraWxsLiBVUyBvZmZpY2lhbHMgY29ycm9ib3JhdGVkIGF0IGxlYXN0IG9uZSBraWxsOyBQYWtpc3RhbidzIGhpZ2hlciBjbGFpbXMgYXJlIHVuY29uZmlybWVkLiIsY29uZmxpY3RzOlt7eXI6IjIwMjUiLG46IkluZGlh4oCTUGFraXN0YW4gKFNpbmRvb3IpIixuYXRpb246IlBha2lzdGFuIixrOjAsbDowLGQ6IkNvbWJhdCBkZWJ1dDsgUGFraXN0YW4gY2xhaW1lZCBtdWx0aXBsZSBJQUYga2lsbHMgaW5jbC4gUmFmYWxlcyB3aXRoIFBMLTE1IEJWUiBtaXNzaWxlcyDigJQgY29udGVzdGVkLCBleGNsdWRlZC4ifV0sZmFtb3VzOiJUaGUgTWF5IDIwMjUgSW5kaWHigJNQYWtpc3RhbiBhaXIgYmF0dGxlIHdhcyB0aGUgSi0xMEMncyBjb21iYXQgZGVidXQgYW5kIHByb2R1Y2VkIHdpZGVseSBwdWJsaWNpemVkIGJ1dCB1bmNvbmZpcm1lZCBraWxsIGNsYWltcy4ifSwKe25hbWU6IlNoZW55YW5nIEotMTEiLGZ1bGw6IlNoZW55YW5nIEotMTEgKFN1LTI3IGRlcml2YXRpdmUpIixvcmlnaW46IkNoaW5hIixnZW46IjR0aCIsZmlyc3RGbGlnaHQ6MTk5OCxyb2xlOiJBaXIgc3VwZXJpb3JpdHkiLGtpbGxzOjAsbG9zc2VzOjAsZ3JvdW5kOjAsc3RhdHVzOiJ1bnRlc3RlZCIsbm90ZToiTm8gYWlyLXRvLWFpciBjb21iYXQgcmVjb3JkOyBrbm93biBtYWlubHkgZm9yIGFnZ3Jlc3NpdmUgcGVhY2V0aW1lIGludGVyY2VwdHMgb2YgZm9yZWlnbiBhaXJjcmFmdC4iLGNvbmZsaWN0czpbe3lyOiIyMDE0IixuOiJTLiBDaGluYSBTZWEgaW50ZXJjZXB0IixuYXRpb246IkNoaW5hIixrOjAsbDowLGQ6IkEgUExBTiBKLTExQiBjb25kdWN0ZWQgYSBkYW5nZXJvdXNseSBjbG9zZSBiYXJyZWwtcm9sbCBpbnRlcmNlcHQgb2YgYSBVUyBOYXZ5IFAtOC4ifV0sZmFtb3VzOiJBIFBMQU4gSi0xMUIgY29uZHVjdGVkIGEgZGFuZ2Vyb3VzbHkgY2xvc2UgaW50ZXJjZXB0IG9mIGEgVVMgTmF2eSBQLTggb3ZlciB0aGUgU291dGggQ2hpbmEgU2VhIGluIEF1Z3VzdCAyMDE0LiJ9LAp7bmFtZToiQ2hlbmdkdSBKLTIwIixmdWxsOiJDaGVuZ2R1IEotMjAgJ01pZ2h0eSBEcmFnb24nIixvcmlnaW46IkNoaW5hIixnZW46IjV0aCIsZmlyc3RGbGlnaHQ6MjAxMSxyb2xlOiJTdGVhbHRoIGFpciBzdXBlcmlvcml0eSIsa2lsbHM6MCxsb3NzZXM6MCxncm91bmQ6MCxzdGF0dXM6InVudGVzdGVkIixub3RlOiJObyBjb21iYXQgcmVjb3JkOyBkZXBsb3llZCBmb3IgYWlyLXN1cGVyaW9yaXR5IHBhdHJvbHMgYW5kIGRldGVycmVuY2UsIHdpdGggMzAwKyBhaXJmcmFtZXMgbm93IGluIHNlcnZpY2UuIixjb25mbGljdHM6W3t5cjoi4oCUIixuOiJQZWFjZXRpbWUgZW5jb3VudGVycyIsbmF0aW9uOiJDaGluYSIsazowLGw6MCxkOiJOb24tY29tYmF0IGNsb3NlIGVuY291bnRlcnMgd2l0aCBVU0FGL1VTTUMgRi0zNXMgb3ZlciB0aGUgRWFzdCBDaGluYSBTZWEuIn1dLGZhbW91czoiUExBQUYgcGlsb3RzIGRlc2NyaWJlIHByb2Zlc3Npb25hbCwgbm9uLWNvbWJhdCBjbG9zZSBlbmNvdW50ZXJzIHdpdGggVVMgRi0zNXMgb3ZlciB0aGUgRWFzdCBDaGluYSBTZWEuIn0sCntuYW1lOiJKRi0xNyBUaHVuZGVyIixmdWxsOiJDQUMvUEFDIEpGLTE3IFRodW5kZXIiLG9yaWdpbjoiUGFraXN0YW4gLyBDaGluYSIsZ2VuOiI0LjUiLGZpcnN0RmxpZ2h0OjIwMDMscm9sZToiTGlnaHR3ZWlnaHQgbXVsdGlyb2xlIixraWxsczowLGxvc3NlczowLGdyb3VuZDowLHN0YXR1czoicHJvdmVuIixub3RlOiJQYWtpc3RhbidzIGxpZ2h0d2VpZ2h0IG11bHRpcm9sZSBmaWdodGVyIGZsZXcgYWlyLXRvLWFpciBtaXNzaW9ucyB3aXRoIFBMLTE1IG1pc3NpbGVzIGluIHRoZSBNYXkgMjAyNSBjbGFzaCB3aXRoIEluZGlhLiBCb3RoIHNpZGVzIG1hZGUgY2xhaW1zLCBidXQgbm8gSkYtMTcga2lsbCBvciBsb3NzIGlzIGluZGVwZW5kZW50bHkgY29uZmlybWVkLiIsY29uZmxpY3RzOlt7eXI6IjIwMTTigJMxNyIsbjoiQ291bnRlci10ZXJyb3Igb3BzIixuYXRpb246IlBha2lzdGFuIixrOjAsbDowLGQ6Ikdyb3VuZC1hdHRhY2sgc3RyaWtlcyBvbiBtaWxpdGFudCBwb3NpdGlvbnMgaW4gTm9ydGggV2F6aXJpc3Rhbi4ifSx7eXI6IjIwMjUiLG46IkluZGlh4oCTUGFraXN0YW4gKFNpbmRvb3IpIixuYXRpb246IlBha2lzdGFuIixrOjAsbDowLGQ6IkZsZXcgQTJBIGFuZCBzdHJpa2Ugc29ydGllczsgY2xhaW1lZCBhbiBTLTQwMCBraWxsIHdpdGggYSBDTS00MDBBS0cgbWlzc2lsZSDigJQgZGlzcHV0ZWQsIGV4Y2x1ZGVkLiJ9XSxmYW1vdXM6IkluIE1heSAyMDI1IFBha2lzdGFuIGNsYWltZWQgYSBKRi0xNyBkZXN0cm95ZWQgYW4gSW5kaWFuIFMtNDAwIHN5c3RlbSB3aXRoIGEgc3RhbmQtb2ZmIG1pc3NpbGUg4oCUIGEgY2xhaW0gSW5kaWEgZGlzcHV0ZXMuIn0sCntuYW1lOiJNaUctMTUgRmFnb3QiLGZ1bGw6Ik1pa295YW4tR3VyZXZpY2ggTWlHLTE1IixvcmlnaW46IlVTU1IiLGdlbjoiMXN0IixmaXJzdEZsaWdodDoxOTQ3LHJvbGU6IlRyYW5zb25pYyBqZXQgZmlnaHRlciAvIGludGVyY2VwdG9yIixraWxsczoxNTAsa3I6IjE1MOKAkzI1MCIsbG9zc2VzOjU1MCxscjoiMjAw4oCTNzkyIixncm91bmQ6NDAsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IktvcmVhbiBXYXIgdGFsbGllcyBhcmUgdGhlIHNpbmdsZSBtb3N0IGRpc3B1dGVkIGZpZ3VyZSBpbiBqZXQtYWdlIGFpciBjb21iYXQuIFNvdmlldCBmb3JjZXMgY2xhaW1lZCBvdmVyIDEsMTAwIGtpbGxzOyBVTi1jb25maXJtZWQgbG9zc2VzIHRvIE1pR3MgYXJlIH4xNTDigJMyNTAuIE1pRyBsb3NzZXMgc3BhbiBSQU5E4oCZcyBtYXRjaGVkLXJlY29yZHMgcmVhbmFseXNpcyAofjIwMCBhY3R1YWxseSBzaG90IGRvd24gaW4gYWlyIGNvbWJhdCkgdG8gdGhlIFVTQUbigJlzIDc5MiBjcmVkaXRlZCwgd2l0aCB+NjYwIGFkbWl0dGVkIGxvc3QgdG8gYWxsIGNhdXNlcy4gVGhhdCBzYW1lIFJBTkQgd29yayBwdXRzIHRoZSByZWFsIEYtODYgZXhjaGFuZ2UgcmF0aW8gbmVhciAxLjPigJMxLjg6MSwgbm90IHRoZSBwcm9wYWdhbmRhIDEwOjEuIENoaW5lc2UtIGFuZCBLb3JlYW4tZmxvd24gTWlHcyBhcmUgZm9sZGVkIGluLiIsY29uZmxpY3RzOlt7eXI6IjE5NTDigJM1MyIsbjoiS29yZWFuIFdhciIsbmF0aW9uOiJVU1NSIC8gQ2hpbmEgLyBOLiBLb3JlYSIsazoxNDgsbDo1NDUsZDoiRm91Z2h0IEYtODYgU2FicmVzIGluICdNaUcgQWxsZXknIGFuZCBtYXVsZWQgZGF5bGlnaHQgQi0yOSBmb3JtYXRpb25zLCBmb3JjaW5nIFVTQUYgYm9tYmVycyBvbnRvIG5pZ2h0IHJhaWRzLiJ9LHt5cjoiMTk1NiIsbjoiU3VleiBDcmlzaXMiLG5hdGlvbjoiRWd5cHQiLGs6MixsOjQsZDoiRWd5cHRpYW4gTWlHLTE1YmlzIGRvd25lZCB0d28gSXNyYWVsaSBhaXJjcmFmdCBidXQgd2VyZSBsYXJnZWx5IG91dGNsYXNzZWQgYW5kIGNhdWdodCBvbiB0aGUgZ3JvdW5kLiJ9XSxmYW1vdXM6Ik92ZXIgJ01pRyBBbGxleScgdGhlIHN3ZXB0LXdpbmcgTWlHLTE1IHNocmVkZGVkIEItMjkgU3VwZXJmb3J0cmVzcyBmb3JtYXRpb25zIHNvIGJhZGx5IHRoZSBVU0FGIGFiYW5kb25lZCBkYXlsaWdodCBzdHJhdGVnaWMgYm9tYmluZyBvZiBOb3J0aCBLb3JlYS4ifSwKe25hbWU6Ik1pRy0xNyBGcmVzY28iLGZ1bGw6Ik1pa295YW4tR3VyZXZpY2ggTWlHLTE3IixvcmlnaW46IlVTU1IiLGdlbjoiMXN0IixmaXJzdEZsaWdodDoxOTUwLHJvbGU6IlRyYW5zb25pYyBkYXkgZmlnaHRlciIsa2lsbHM6NzEsbG9zc2VzOjYzLGxyOiI2M+KAkzEwMCIsZ3JvdW5kOjYwLHN0YXR1czoicHJvdmVuIixub3RlOiJUaGUgYmVzdC1kb2N1bWVudGVkIGZpZ3VyZXMgY29tZSBmcm9tIFZpZXRuYW06IE5vcnRoIFZpZXRuYW1lc2UgTWlHLTE3cyBhcmUgY3JlZGl0ZWQgd2l0aCA3MSB2aWN0b3JpZXMgb3ZlciBVUyBhaXJjcmFmdCAoYWJvdXQgMzIgRi00cywgMTYgRi0xMDVzLCAxMSBGLThzKSBmb3IgfjYzIGNvbWJhdCBsb3NzZXMg4oCUIHRoZSBWUEFG4oCZcyBvd24gYWRtaXNzaW9uOyBVUyBjcmVkaXQgbGlzdHMgY291bnQgY2xvc2VyIHRvIDEwMC4gRWd5cHRpYW4vU3lyaWFuIE1pRy0xN3MgYWRkZWQgYSBmZXcga2lsbHMgYnV0IHdlcmUgbW9zdGx5IGRlc3Ryb3llZCBvbiB0aGUgZ3JvdW5kIGluIDE5Njcg4oCUIHdoaWNoIGRvbWluYXRlcyB0aGUgJ2dyb3VuZCcgZmlndXJlLiIsY29uZmxpY3RzOlt7eXI6IjE5NjXigJM3MiIsbjoiVmlldG5hbSBXYXIiLG5hdGlvbjoiTm9ydGggVmlldG5hbSIsazo3MSxsOjYzLGQ6IkNhbm5vbi1hcm1lZCBhbmQgYWdpbGUsIE1pRy0xN3MgZHJhZ2dlZCBzdXBlcnNvbmljIEYtNHMgYW5kIEYtMTA1cyBpbnRvIGxvdy1zcGVlZCB0dXJuaW5nIGZpZ2h0cyBhbmQgc2NvcmVkIE5vcnRoIFZpZXRuYW0ncyBmaXJzdCBqZXQgdmljdG9yaWVzLiJ9LHt5cjoiMTk2NyIsbjoiU2l4LURheSBXYXIiLG5hdGlvbjoiRWd5cHQgLyBTeXJpYSIsazozLGw6OCxkOiJGb3JtZWQgdGhlIGJ1bGsgb2YgQXJhYiBhaXIgc3RyZW5ndGggYnV0IHdlcmUgb3ZlcndoZWxtaW5nbHkgY2F1Z2h0IGFuZCBkZXN0cm95ZWQgb24gdGhlIGdyb3VuZCBvbiB0aGUgb3BlbmluZyBtb3JuaW5nLiJ9XSxmYW1vdXM6IkluIHR1cm5pbmcgZG9nZmlnaHRzIG92ZXIgTm9ydGggVmlldG5hbSB0aGUgc3Vic29uaWMgTWlHLTE3IHJlcGVhdGVkbHkgaHVtYmxlZCB0aGUgZmFyIG1vcmUgYWR2YW5jZWQgRi00IFBoYW50b20sIGV4cG9zaW5nIHRoZSBmb2xseSBvZiBidWlsZGluZyBmaWdodGVycyB3aXRob3V0IGEgZ3VuLiJ9LAp7bmFtZToiSGF3a2VyIEh1bnRlciIsZnVsbDoiSGF3a2VyIEFpcmNyYWZ0IEh1bnRlciIsb3JpZ2luOiJVbml0ZWQgS2luZ2RvbSIsZ2VuOiIxc3QiLGZpcnN0RmxpZ2h0OjE5NTEscm9sZToiVHJhbnNvbmljIGZpZ2h0ZXIgLyBncm91bmQtYXR0YWNrIixraWxsczo3LGtyOiI34oCTMjAiLGxvc3NlczoxOCxscjoiOOKAkzMwIixncm91bmQ6MzAsc3RhdHVzOiJwcm92ZW4iLG5vdGU6IlRoZSBIdW50ZXIgaGFzIGdlbnVpbmUgY29uZmlybWVkIGtpbGxzIGFuZCBsb3NzZXMsIGJ1dCBwZXItY29uZmxpY3QgdGFsbGllcyBhcmUgY29udGVzdGVkIGFuZCBtaXhlZCB3aXRoIGdyb3VuZCBsb3NzZXMsIHNvIHRvdGFscyBoZXJlIGFyZSBkZWxpYmVyYXRlbHkgY29uc2VydmF0aXZlLiBUaGUgYmVzdC1hdHRlc3RlZCBraWxscyBhcmUgUGFraXN0YW5pIGFjZSBTYWlmdWwgQXphbSdzIHRocmVlIElzcmFlbGkgYWlyY3JhZnQgaW4gSnVuZSAxOTY3IChmbHlpbmcgSm9yZGFuaWFuIGFuZCBJcmFxaSBIdW50ZXJzKSwgcGx1cyBJbmRpYW4gdmljdG9yaWVzIGluIDE5NjUvMTk3MSDigJQgSW5kaWFuIGNyZWRpdHMgYWxvbmUgcmVhY2ggfjE2LCB0YWtpbmcgb3BlcmF0b3IgdGFsbGllcyB0byB+MjAuIERvY3VtZW50ZWQgYWlyLWNvbWJhdCBsb3NzZXMgcnVuIDjigJMxMDsgUGFraXN0YW5pIGNsYWltcyBnbyBmYXIgaGlnaGVyLiBNLk0uIEFsYW0ncyBkaXNwdXRlZCAnZml2ZSBpbiBhIG1pbnV0ZScgKDE5NjUpIGlzIGV4Y2x1ZGVkLiIsY29uZmxpY3RzOlt7eXI6IjE5NjUiLG46IkluZG8tUGFraXN0YW5pIFdhciIsbmF0aW9uOiJJbmRpYSIsazoyLGw6NyxkOiJJbmRpYSdzIGZyb250bGluZSBmaWdodGVyIGR1ZWxlZCBQQUYgU2FicmVzIGFuZCBGLTEwNHM7IGJvdGggc2lkZXMnIGNsYWltcyBhcmUgd2lsZGx5IGluZmxhdGVkLiJ9LHt5cjoiMTk3MSIsbjoiSW5kby1QYWtpc3RhbmkgV2FyIixuYXRpb246IkluZGlhIixrOjIsbDo4LGQ6IlNpeCBJQUYgSHVudGVyIHNxdWFkcm9ucyBmbGV3IGdyb3VuZC1hdHRhY2sgYW5kIGludGVyZGljdGlvbiwgc2NvcmluZyBzb21lIGFpci10by1haXIga2lsbHMgYW1pZCBjb250ZXN0ZWQgbG9zcyBjbGFpbXMuIn0se3lyOiIxOTY3IixuOiJTaXgtRGF5IFdhciIsbmF0aW9uOiJJcmFxIC8gSm9yZGFuIixrOjMsbDozLGQ6IklyYXFpIGFjZSBTYWlmdWwgQXphbSBkb3duZWQgdGhyZWUgSXNyYWVsaSBqZXRzIGluIGEgSHVudGVyOyBtb3N0IEpvcmRhbmlhbiBIdW50ZXJzIHdlcmUgZGVzdHJveWVkIG9uIHRoZSBncm91bmQgb24gZGF5IG9uZS4ifV0sZmFtb3VzOiJGbHlpbmcgYW4gSXJhcWkgSHVudGVyIGluIHRoZSAxOTY3IFNpeC1EYXkgV2FyLCBTYWlmdWwgQXphbSBzaG90IGRvd24gdGhyZWUgSXNyYWVsaSBhaXJjcmFmdCBpbiB0d28gZGF5cyDigJQgb25lIG9mIHRoZSBmZXcgcGlsb3RzIHRvIG1ha2UgYWNlIGFnYWluc3QgdGhlIElzcmFlbGkgQWlyIEZvcmNlLiJ9LAp7bmFtZToiRW5nbGlzaCBFbGVjdHJpYyBMaWdodG5pbmciLGZ1bGw6IkVuZ2xpc2ggRWxlY3RyaWMgKEJBQykgTGlnaHRuaW5nIixvcmlnaW46IlVuaXRlZCBLaW5nZG9tIixnZW46IjJuZCIsZmlyc3RGbGlnaHQ6MTk1Nyxyb2xlOiJTdXBlcnNvbmljIGludGVyY2VwdG9yIixraWxsczowLGxvc3NlczowLGdyb3VuZDoxLHN0YXR1czoic3RyaWtlIixub3RlOiJEZXNwaXRlIGEgbG9uZyBSQUYsIFNhdWRpIGFuZCBLdXdhaXRpIGNhcmVlciB0aGUgTGlnaHRuaW5nIGlzIGNyZWRpdGVkIHdpdGggTk8gY29uZmlybWVkIGFpci10by1haXIga2lsbHMgYnkgYW55IG9wZXJhdG9yLiBJdHMgb25seSBjb21iYXQgdXNlIHdhcyBSb3lhbCBTYXVkaSBncm91bmQtYXR0YWNrIGluIHRoZSAxOTY54oCTNzAgQWwtV2FkaWFoIGJvcmRlciB3YXIsIHdoZXJlIG9uZSBhaXJjcmFmdCB3YXMgbG9zdCB0byBZZW1lbmkgZ3JvdW5kIGZpcmUuIEJsaXN0ZXJpbmdseSBmYXN0LCBidXQgaXQgbmV2ZXIgZmlyZWQgYSBzaG90IGluIGFuZ2VyIGFpci10by1haXIuIixjb25mbGljdHM6W3t5cjoiMTk2OeKAkzcwIixuOiJBbC1XYWRpYWggV2FyIixuYXRpb246IlNhdWRpIEFyYWJpYSIsazowLGw6MSxkOiJSU0FGIExpZ2h0bmluZ3MgZmxldyByb2NrZXQtYW5kLWJvbWIgc3RyaWtlcyBvbiBZZW1lbmkgZm9yY2VzLCBsb3Npbmcgb25lIGFpcmNyYWZ0IHRvIGdyb3VuZCBmaXJlIGFuZCBzY29yaW5nIG5vIGFpci10by1haXIga2lsbHMuIn1dLGZhbW91czoiVGhlIExpZ2h0bmluZyBuZXZlciBkb3duZWQgYW4gZW5lbXkgYWlyY3JhZnQgaW4gYW5nZXIg4oCUIGl0cyBtb3N0IHN0b3JpZWQgbW9tZW50IHdhcyBhbiB1bmFybWVkIDE5NjYgZ3JvdW5kLXJ1biB0aGF0IGFjY2lkZW50YWxseSBiZWNhbWUgYSBmdWxsIHN1cGVyc29uaWMgZmxpZ2h0IGJ5IGFuIGVuZ2luZWVyIHdpdGggbm8gZmx5aW5nIHRyYWluaW5nLiJ9Cl07Ci8qIFBob3RvcyAoV2lraW1lZGlhIENvbW1vbnMsIH41MDBweCwgUEQvQ0MpICovCmNvbnN0IElNRz17CiJGLTE1IEVhZ2xlIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9hL2E2L0YtMTVDX0VhZ2xlX2Zyb21fdGhlXzQ0dGhfRmlnaHRlcl9TcXVhZHJvbl9mbGllc19kdXJpbmdfYV9yb3V0aW5lX3RyYWluaW5nX2V4ZXJjaXNlX0FwcmlsXzE1JTJDXzIwMTkuanBnLzUwMHB4LUYtMTVDX0VhZ2xlX2Zyb21fdGhlXzQ0dGhfRmlnaHRlcl9TcXVhZHJvbl9mbGllc19kdXJpbmdfYV9yb3V0aW5lX3RyYWluaW5nX2V4ZXJjaXNlX0FwcmlsXzE1JTJDXzIwMTkuanBnIiwKIkYtNCBQaGFudG9tIElJIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi8yLzJiL1FGLTRfSG9sbG9tYW5fQUZCLmpwZy81MDBweC1RRi00X0hvbGxvbWFuX0FGQi5qcGciLAoiRi0xNiBGaWdodGluZyBGYWxjb24iOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2MvYzkvRi0xNl9KdW5lXzIwMDguanBnLzUwMHB4LUYtMTZfSnVuZV8yMDA4LmpwZyIsCiJGLTE0IFRvbWNhdCI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvZi9mNy9VU19OYXZ5XzA1MTEwNS1GLTU0ODBULTAwNV9Bbl9GLTE0RF9Ub21jYXRfY29uZHVjdHNfYV9taXNzaW9uX292ZXJfdGhlX1BlcnNpYW5fR3VsZi1yZWdpb24uanBnLzUwMHB4LVVTX05hdnlfMDUxMTA1LUYtNTQ4MFQtMDA1X0FuX0YtMTREX1RvbWNhdF9jb25kdWN0c19hX21pc3Npb25fb3Zlcl90aGVfUGVyc2lhbl9HdWxmLXJlZ2lvbi5qcGciLAoiRi0xNUUgU3RyaWtlIEVhZ2xlIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9lL2U2L0YtMTVFX3Rha2VzX29uX2Z1ZWxfZnJvbV9LQy0xMC5qcGcvNTAwcHgtRi0xNUVfdGFrZXNfb25fZnVlbF9mcm9tX0tDLTEwLmpwZyIsCiJGL0EtMTggSG9ybmV0IjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi80LzQ0L0ZBLTE4Q19kZXNlcnRfcmVmdWVsaW5nLmpwZy81MDBweC1GQS0xOENfZGVzZXJ0X3JlZnVlbGluZy5qcGciLAoiRi9BLTE4RS9GIFN1cGVyIEhvcm5ldCI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvZC9kZS9VU19OYXZ5XzA3MTIwMy1OLTg5MjNNLTA3NF9Bbl9GLUEtMThGX1N1cGVyX0hvcm5ldCUyQ19mcm9tX3RoZV9SZWRfUmlwcGVyc19vZl9TdHJpa2VfRmlnaHRlcl9TcXVhZHJvbl8lMjhWRkElMjlfMTElMkNfbWFrZXNfYV9zaGFycF90dXJuX2Fib3ZlX3RoZV9mbGlnaHRfZGVja19hYm9hcmRfdGhlX05pbWl0ei1jbGFzc19udWNsZWFyLXBvd2VyZWRfYWlyY3JhZnRfY2Fycmllcl9VU1NfSGFycnlfUy5fVHJ1bWFuLmpwZy81MDBweC10aHVtYm5haWwuanBnIiwKIkYtMjIgUmFwdG9yIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi8xLzFlL0YtMjJfUmFwdG9yX2VkaXQxXyUyOGNyb3BwZWQlMjkuanBnLzUwMHB4LUYtMjJfUmFwdG9yX2VkaXQxXyUyOGNyb3BwZWQlMjkuanBnIiwKIkYtMzUgTGlnaHRuaW5nIElJIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi82LzYxL0YtMzVBX2ZsaWdodF8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1GLTM1QV9mbGlnaHRfJTI4Y3JvcHBlZCUyOS5qcGciLAoiQS0xMCBUaHVuZGVyYm9sdCBJSSI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvOC84MC9GYWlyY2hpbGRfUmVwdWJsaWNfQS0xMF9UaHVuZGVyYm9sdF9JSV8tXzMyMTU2MTU5MTUxLmpwZy81MDBweC1GYWlyY2hpbGRfUmVwdWJsaWNfQS0xMF9UaHVuZGVyYm9sdF9JSV8tXzMyMTU2MTU5MTUxLmpwZyIsCiJGLTUgRnJlZWRvbSBGaWdodGVyIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi84LzhkL0otMzAwNS5qcGcvNTAwcHgtSi0zMDA1LmpwZyIsCiJGLTEwNCBTdGFyZmlnaHRlciI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvOC84Ni9Mb2NraGVlZF9GLTEwNEdfU3RhcmZpZ2h0ZXJfRC04MTE0XyUyODkxNzk1NDI1NDIlMjkuanBnLzUwMHB4LUxvY2toZWVkX0YtMTA0R19TdGFyZmlnaHRlcl9ELTgxMTRfJTI4OTE3OTU0MjU0MiUyOS5qcGciLAoiTWlyYWdlIElJSSAvIDUiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2UvZTYvVHdvX01pcmFnZV9JSUlfb2ZfdGhlX1JveWFsX0F1c3RyYWxpYW5fQWlyX0ZvcmNlXzEuSlBFRy81MDBweC1Ud29fTWlyYWdlX0lJSV9vZl90aGVfUm95YWxfQXVzdHJhbGlhbl9BaXJfRm9yY2VfMS5KUEVHIiwKIk1pcmFnZSBGMSI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvNy83OS9GcmVuY2hfQWlyX0ZvcmNlX01pcmFnZV9GMV9yZXR1cm5zX3RvX2l0JTI3c19taXNzaW9uX2FmdGVyX3JlY2VpdmluZ19mdWVsX2Zyb21fYV9LQy0xMF9FeHRlbmRlci5qcGcvNTAwcHgtRnJlbmNoX0Fpcl9Gb3JjZV9NaXJhZ2VfRjFfcmV0dXJuc190b19pdCUyN3NfbWlzc2lvbl9hZnRlcl9yZWNlaXZpbmdfZnVlbF9mcm9tX2FfS0MtMTBfRXh0ZW5kZXIuanBnIiwKIk1pcmFnZSAyMDAwIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9jL2M1L01pcmFnZV8yMDAwQ19pbi1mbGlnaHRfMl8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1NaXJhZ2VfMjAwMENfaW4tZmxpZ2h0XzJfJTI4Y3JvcHBlZCUyOS5qcGciLAoiUmFmYWxlIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi82LzY0L1JhZmFsZV8tX1JJQVRfMjAwOV8lMjgzNzUxNDE2NDIxJTI5LmpwZy81MDBweC1SYWZhbGVfLV9SSUFUXzIwMDlfJTI4Mzc1MTQxNjQyMSUyOS5qcGciLAoiU2VhIEhhcnJpZXIiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzkvOWUvU2VhSGFycmllcl8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1TZWFIYXJyaWVyXyUyOGNyb3BwZWQlMjkuanBnIiwKIklBSSBLZmlyIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi8zLzMwL0NvbG9tYmlhbl9BaXJfRm9yY2VfS2Zpcl8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1Db2xvbWJpYW5fQWlyX0ZvcmNlX0tmaXJfJTI4Y3JvcHBlZCUyOS5qcGciLAoiRXVyb2ZpZ2h0ZXIgVHlwaG9vbiI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvMy8zYy9SQUZfRXVyb2ZpZ2h0ZXJfRUYtMjAwMF9UeXBob29uX0YyX0xvZnRpbmctMS5qcGcvNTAwcHgtUkFGX0V1cm9maWdodGVyX0VGLTIwMDBfVHlwaG9vbl9GMl9Mb2Z0aW5nLTEuanBnIiwKIlNhYWIgSkFTLTM5IEdyaXBlbiI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvZS9lMy9TYWFiX0pBU18zOV9HcmlwZW5fYXRfS2Fpdm9wdWlzdG9fQWlyX1Nob3clMkNfSnVuZV8yMDE3XyUyOGFsdGVyZWQlMjlfY29weS5qcGcvNTAwcHgtU2FhYl9KQVNfMzlfR3JpcGVuX2F0X0thaXZvcHVpc3RvX0Fpcl9TaG93JTJDX0p1bmVfMjAxN18lMjhhbHRlcmVkJTI5X2NvcHkuanBnIiwKIlRvcm5hZG8gQURWIChGLjMpIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9iL2I5L1JveWFsX0Fpcl9Gb3JjZV9QYW5hdmlhX1Rvcm5hZG9fRjNfTG9mdGluZy0zLmpwZy81MDBweC1Sb3lhbF9BaXJfRm9yY2VfUGFuYXZpYV9Ub3JuYWRvX0YzX0xvZnRpbmctMy5qcGciLAoiVG9ybmFkbyBJRFMiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzIvMjUvUkFGX1Rvcm5hZG9fR1I0X01PRF80NTE1NTIzMy5qcGcvNTAwcHgtUkFGX1Rvcm5hZG9fR1I0X01PRF80NTE1NTIzMy5qcGciLAoiTWlHLTIxIEZpc2hiZWQiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2YvZmEvQ3JvYXRpYW5fTWlHLTIxXyUyOGNyb3BwZWQlMjkuanBnLzUwMHB4LUNyb2F0aWFuX01pRy0yMV8lMjhjcm9wcGVkJTI5LmpwZyIsCiJNaUctMjMgRmxvZ2dlciI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvNi82Zi9NaWctMjMtRE5TVDg5MDg0MzFfSlBHLmpwZy81MDBweC1NaWctMjMtRE5TVDg5MDg0MzFfSlBHLmpwZyIsCiJNaUctMjUgRm94YmF0IjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9hL2E0L1J1c3NpYW5fQWlyX0ZvcmNlX01pRy0yNS5qcGcvNTAwcHgtUnVzc2lhbl9BaXJfRm9yY2VfTWlHLTI1LmpwZyIsCiJNaUctMjkgRnVsY3J1bSI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvYS9hZi9WVlNfMTAwdGhfSU1HXzA2OTFfJTI4NzcyNzQ2NDI5MCUyOV8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1WVlNfMTAwdGhfSU1HXzA2OTFfJTI4NzcyNzQ2NDI5MCUyOV8lMjhjcm9wcGVkJTI5LmpwZyIsCiJNaUctMzEgRm94aG91bmQiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzMvMzgvUnVzc2lhbl9BaXJfRm9yY2VfTWlrb3lhbi1HdXJldmljaF9NaUctMzFQLmpwZy81MDBweC1SdXNzaWFuX0Fpcl9Gb3JjZV9NaWtveWFuLUd1cmV2aWNoX01pRy0zMVAuanBnIiwKIlN1LTI3IEZsYW5rZXIiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzAvMDQvU3VraG9pX1N1LTI3U0tNX2F0X01BS1MtMjAwNV9haXJzaG93LmpwZy81MDBweC1TdWtob2lfU3UtMjdTS01fYXRfTUFLUy0yMDA1X2FpcnNob3cuanBnIiwKIlN1LTMwIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi83Lzc2L1N1a2hvaV9TdS0zMFNNX2luX2ZsaWdodF8yMDE0LmpwZy81MDBweC1TdWtob2lfU3UtMzBTTV9pbl9mbGlnaHRfMjAxNC5qcGciLAoiU3UtMzMiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2MvY2IvU3VraG9pX1N1LTMzXzc3X1JFRF8lMjgzMDI2ODExNzQ3NiUyOS5qcGcvNTAwcHgtU3VraG9pX1N1LTMzXzc3X1JFRF8lMjgzMDI2ODExNzQ3NiUyOS5qcGciLAoiU3UtMzQgRnVsbGJhY2siOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzcvNzYvTUFLUzIwMTVwYXJ0MS0xMF8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1NQUtTMjAxNXBhcnQxLTEwXyUyOGNyb3BwZWQlMjkuanBnIiwKIlN1LTM1IjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi9lL2VjL1J1c3NpYW5fQWlyX0ZvcmNlJTJDX1JGLTgxNzE5JTJDX1N1a2hvaV9TdS0zNVNfJTI4NDk1ODE3NDAxNTclMjkuanBnLzUwMHB4LVJ1c3NpYW5fQWlyX0ZvcmNlJTJDX1JGLTgxNzE5JTJDX1N1a2hvaV9TdS0zNVNfJTI4NDk1ODE3NDAxNTclMjkuanBnIiwKIlN1LTU3IEZlbG9uIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi8wLzBlL1N1a2hvaV9EZXNpZ25fQnVyZWF1JTJDXzA1NCUyQ19TdWtob2lfVC01MF8lMjhTdS01N19wcm90b3R5cGUlMjlfJTI4NDk1ODEzMDM5NzclMjkuanBnLzUwMHB4LVN1a2hvaV9EZXNpZ25fQnVyZWF1JTJDXzA1NCUyQ19TdWtob2lfVC01MF8lMjhTdS01N19wcm90b3R5cGUlMjlfJTI4NDk1ODEzMDM5NzclMjkuanBnIiwKIkNoZW5nZHUgSi03IjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi81LzU5L0JhbmdsYWRlc2hfQWlyX0ZvcmNlX0YtN0JHSV9pbmZsaWdodC5wbmcvNTAwcHgtQmFuZ2xhZGVzaF9BaXJfRm9yY2VfRi03QkdJX2luZmxpZ2h0LnBuZyIsCiJDaGVuZ2R1IEotMTAiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzcvNzcvSi0xMEJfd2l0aF9QTC0xMF9hbmRfUEwtMTIuanBnLzUwMHB4LUotMTBCX3dpdGhfUEwtMTBfYW5kX1BMLTEyLmpwZyIsCiJTaGVueWFuZyBKLTExIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi8xLzEyL0otMTFCQ2hlbC5qcGcvNTAwcHgtSi0xMUJDaGVsLmpwZyIsCiJDaGVuZ2R1IEotMjAiOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iLzcvNzMvSi0yMF9hdF9DQ0FTMjAyMl8lMjgyMDIyMDgyNzEwMzQyNCUyOS5qcGcvNTAwcHgtSi0yMF9hdF9DQ0FTMjAyMl8lMjgyMDIyMDgyNzEwMzQyNCUyOS5qcGciLAoiSkYtMTcgVGh1bmRlciI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvMS8xYi9QYWtpc3Rhbl9BaXJfRm9yY2VfQ2hlbmdkdV9KRi0xN19HdS5qcGcvNTAwcHgtUGFraXN0YW5fQWlyX0ZvcmNlX0NoZW5nZHVfSkYtMTdfR3UuanBnIiwKIk1pRy0xNSBGYWdvdCI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvYy9jZi9NaUctMTVfJTI4NTI1NDQwNzQzNjYlMjkuanBnLzUwMHB4LU1pRy0xNV8lMjg1MjU0NDA3NDM2NiUyOS5qcGciLAoiTWlHLTE3IEZyZXNjbyI6Imh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvZC9kZi9NaUctMTdfVGFrZXNfdG9fdGhlX1NreV8lMjhjcm9wcGVkJTI5LmpwZy81MDBweC1NaUctMTdfVGFrZXNfdG9fdGhlX1NreV8lMjhjcm9wcGVkJTI5LmpwZyIsCiJIYXdrZXIgSHVudGVyIjoiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi84Lzg3L0h1bnRlcl8tX1NodXR0bGV3b3J0aF9NaWxpdGFyeV9QYWdlYW50X0p1bmVfMjAxM18lMjg5MTg3NzEzNTE2JTI5LmpwZy81MDBweC1IdW50ZXJfLV9TaHV0dGxld29ydGhfTWlsaXRhcnlfUGFnZWFudF9KdW5lXzIwMTNfJTI4OTE4NzcxMzUxNiUyOS5qcGciLAoiRW5nbGlzaCBFbGVjdHJpYyBMaWdodG5pbmciOiJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL3RodW1iL2IvYjEvRW5nbGlzaF9FbGVjdHJpY19MaWdodG5pbmdfRjYlMkNfVUtfLV9BaXJfRm9yY2VfQU4yMjYwMTkyLmpwZy81MDBweC1FbmdsaXNoX0VsZWN0cmljX0xpZ2h0bmluZ19GNiUyQ19VS18tX0Fpcl9Gb3JjZV9BTjIyNjAxOTIuanBnIgp9OwovKiBNaUdGbHVnIGF2YWlsYWJpbGl0eTogc3RhdGUgPSBhdmFpbGFibGUgfCBjb21pbmcgfCB1bnRpbCB8IG5hICovCmNvbnN0IEFWQUlMPXsKIkYtMTA0IFN0YXJmaWdodGVyIjp7c3RhdGU6ImF2YWlsYWJsZSIsdXJsOiJodHRwczovL21pZ2ZsdWcuY29tL2ZsaWdodHMtcHJpY2VzL2YxMDQtc3RhcmZpZ2h0ZXItZmxpZ2h0LyJ9LAoiTWlHLTE1IEZhZ290Ijp7c3RhdGU6ImF2YWlsYWJsZSIsdXJsOiJodHRwczovL21pZ2ZsdWcuY29tL2ZsaWdodHMtcHJpY2VzL21pZy0xNS1mYWdvdC1jemVjaC1yZXB1YmxpYy8ifSwKIk1pRy0yMSBGaXNoYmVkIjp7c3RhdGU6ImF2YWlsYWJsZSIsdXJsOiJodHRwczovL21pZ2ZsdWcuY29tL21pZy0yMS1sYXVuY2gvIn0sCiJNaUctMTcgRnJlc2NvIjp7c3RhdGU6ImNvbWluZyJ9LAoiTWlyYWdlIElJSSAvIDUiOntzdGF0ZToidW50aWwiLHllYXI6MjAyM30sCiJNaUctMjMgRmxvZ2dlciI6e3N0YXRlOiJ1bnRpbCIseWVhcjoyMDA2fSwKIk1pRy0yNSBGb3hiYXQiOntzdGF0ZToidW50aWwiLHllYXI6MjAwNn0sCiJNaUctMjkgRnVsY3J1bSI6e3N0YXRlOiJ1bnRpbCIseWVhcjoyMDE3fSwKIk1pRy0zMSBGb3hob3VuZCI6e3N0YXRlOiJ1bnRpbCIseWVhcjoyMDEwfSwKIlN1LTI3IEZsYW5rZXIiOntzdGF0ZToidW50aWwiLHllYXI6MjAwNn0sCiJTdS0zMCI6e3N0YXRlOiJ1bnRpbCIseWVhcjoyMDA2fSwKIkhhd2tlciBIdW50ZXIiOntzdGF0ZToidW50aWwiLHllYXI6MjAyMn0sCiJFbmdsaXNoIEVsZWN0cmljIExpZ2h0bmluZyI6e3N0YXRlOiJ1bnRpbCIseWVhcjoyMDEwfQp9Owpjb25zdCBNRlI9eyJGLTE1IEVhZ2xlIjoiTWNEb25uZWxsIERvdWdsYXMgLyBCb2VpbmciLCJGLTQgUGhhbnRvbSBJSSI6Ik1jRG9ubmVsbCBEb3VnbGFzIiwiRi0xNiBGaWdodGluZyBGYWxjb24iOiJHZW5lcmFsIER5bmFtaWNzIC8gTG9ja2hlZWQgTWFydGluIiwiRi0xNCBUb21jYXQiOiJHcnVtbWFuIiwiRi0xNUUgU3RyaWtlIEVhZ2xlIjoiTWNEb25uZWxsIERvdWdsYXMgLyBCb2VpbmciLCJGL0EtMTggSG9ybmV0IjoiTWNEb25uZWxsIERvdWdsYXMgLyBCb2VpbmciLCJGL0EtMThFL0YgU3VwZXIgSG9ybmV0IjoiQm9laW5nIiwiRi0yMiBSYXB0b3IiOiJMb2NraGVlZCBNYXJ0aW4gLyBCb2VpbmciLCJGLTM1IExpZ2h0bmluZyBJSSI6IkxvY2toZWVkIE1hcnRpbiIsIkEtMTAgVGh1bmRlcmJvbHQgSUkiOiJGYWlyY2hpbGQgUmVwdWJsaWMiLCJGLTUgRnJlZWRvbSBGaWdodGVyIjoiTm9ydGhyb3AiLCJGLTEwNCBTdGFyZmlnaHRlciI6IkxvY2toZWVkIiwiTWlyYWdlIElJSSAvIDUiOiJEYXNzYXVsdCIsIk1pcmFnZSBGMSI6IkRhc3NhdWx0IiwiTWlyYWdlIDIwMDAiOiJEYXNzYXVsdCIsIlJhZmFsZSI6IkRhc3NhdWx0IiwiU2VhIEhhcnJpZXIiOiJCcml0aXNoIEFlcm9zcGFjZSIsIklBSSBLZmlyIjoiSXNyYWVsIEFlcm9zcGFjZSBJbmR1c3RyaWVzIiwiRXVyb2ZpZ2h0ZXIgVHlwaG9vbiI6IkV1cm9maWdodGVyIiwiU2FhYiBKQVMtMzkgR3JpcGVuIjoiU2FhYiIsIlRvcm5hZG8gQURWIChGLjMpIjoiUGFuYXZpYSIsIlRvcm5hZG8gSURTIjoiUGFuYXZpYSIsIk1pRy0yMSBGaXNoYmVkIjoiTWlrb3lhbi1HdXJldmljaCIsIk1pRy0yMyBGbG9nZ2VyIjoiTWlrb3lhbi1HdXJldmljaCIsIk1pRy0yNSBGb3hiYXQiOiJNaWtveWFuLUd1cmV2aWNoIiwiTWlHLTI5IEZ1bGNydW0iOiJNaWtveWFuIiwiTWlHLTMxIEZveGhvdW5kIjoiTWlrb3lhbiIsIlN1LTI3IEZsYW5rZXIiOiJTdWtob2kiLCJTdS0zMCI6IlN1a2hvaSIsIlN1LTMzIjoiU3VraG9pIiwiU3UtMzQgRnVsbGJhY2siOiJTdWtob2kiLCJTdS0zNSI6IlN1a2hvaSIsIlN1LTU3IEZlbG9uIjoiU3VraG9pIiwiQ2hlbmdkdSBKLTciOiJDaGVuZ2R1IiwiQ2hlbmdkdSBKLTEwIjoiQ2hlbmdkdSIsIlNoZW55YW5nIEotMTEiOiJTaGVueWFuZyIsIkNoZW5nZHUgSi0yMCI6IkNoZW5nZHUiLCJKRi0xNyBUaHVuZGVyIjoiUEFDIC8gQ0FDIiwiTWlHLTE1IEZhZ290IjoiTWlrb3lhbi1HdXJldmljaCIsIk1pRy0xNyBGcmVzY28iOiJNaWtveWFuLUd1cmV2aWNoIiwiSGF3a2VyIEh1bnRlciI6Ikhhd2tlciIsIkVuZ2xpc2ggRWxlY3RyaWMgTGlnaHRuaW5nIjoiRW5nbGlzaCBFbGVjdHJpYyAvIEJBQyJ9O2NvbnN0IEVTVD1uZXcgU2V0KFsiTWlHLTE1IEZhZ290IiwiTWlHLTE3IEZyZXNjbyIsIk1pRy0yMSBGaXNoYmVkIiwiTWlHLTIzIEZsb2dnZXIiLCJNaXJhZ2UgSUlJIC8gNSIsIk1pcmFnZSBGMSIsIkYtNSBGcmVlZG9tIEZpZ2h0ZXIiLCJGLTEwNCBTdGFyZmlnaHRlciIsIkYtNCBQaGFudG9tIElJIiwiSGF3a2VyIEh1bnRlciIsIk1pRy0yNSBGb3hiYXQiLCJTdS0zNSIsIk1pRy0zMSBGb3hob3VuZCIsIlN1LTI3IEZsYW5rZXIiLCJTdS0zMCIsIkNoZW5nZHUgSi0xMCIsIlJhZmFsZSIsIk1pcmFnZSAyMDAwIiwiSkYtMTcgVGh1bmRlciJdKTsKRC5mb3JFYWNoKChqLGkpPT57ai5pZD1pO2oudG90YWw9ai5raWxscytqLmxvc3NlcytqLmdyb3VuZDtqLnJhdGlvPWoubG9zc2VzPjA\/ai5raWxscy9qLmxvc3Nlczooai5raWxscz4wP0luZmluaXR5OjApO2ouaW1nPUlNR1tqLm5hbWVdfHwiIjtqLmF2YWlsPUFWQUlMW2oubmFtZV18fHtzdGF0ZToibmEifTtqLm1mcj1NRlJbai5uYW1lXXx8IiI7ai5lc3Q9RVNULmhhcyhqLm5hbWUpO30pOwoKLyogLS0tLS0tLS0tLSBESVJFQ1QgVFlQRS12cy1UWVBFIEVOR0FHRU1FTlRTIChkb2N1bWVudGVkKSAtLS0tLS0tLS0tCiAgIHggZG93bmVkIGB4U2NvcmVgIG9mIHR5cGUgeTsgeSBkb3duZWQgYHlTY29yZWAgb2YgdHlwZSB4LiBTY29yZXMga2VwdCBhcwogICBzdHJpbmdzIHRvIGF2b2lkIGZhbHNlIHByZWNpc2lvbi4gYGRpc3B1dGVkOnRydWVgIGZsYWdzIGNvbnRlc3RlZCB0YWxsaWVzLiAqLwpjb25zdCBNQVRDSFVQUz1bCnt4OiJGLTE1IEVhZ2xlIix5OiJNaUctMjkgRnVsY3J1bSIsY29uZmxpY3Q6Ikd1bGYgV2FyICYgS29zb3ZvIix5ZWFyczoiMTk5MSAmIDE5OTkiLHhTY29yZToiNisiLHlTY29yZToiMCIsZGlzcHV0ZWQ6ZmFsc2Usc3VtbWFyeToiRi0xNXMgZG93bmVkIGF0IGxlYXN0IHNpeCBNaUctMjlzIGFjcm9zcyBEZXNlcnQgU3Rvcm0gYW5kIE9wZXJhdGlvbiBBbGxpZWQgRm9yY2Ugd2l0aG91dCBhIHNpbmdsZSBsb3NzIOKAlCB0aGUgRnVsY3J1bSdzIHRvdWdoZXN0IG1hdGNodXAuIn0sCnt4OiJGLTE2IEZpZ2h0aW5nIEZhbGNvbiIseToiTWlHLTI5IEZ1bGNydW0iLGNvbmZsaWN0OiJLb3Nvdm8gV2FyIChBbGxpZWQgRm9yY2UpIix5ZWFyczoiMTk5OSIseFNjb3JlOiIyIix5U2NvcmU6IjAiLGRpc3B1dGVkOmZhbHNlLHN1bW1hcnk6IkEgVVNBRiBhbmQgYSBSb3lhbCBOZXRoZXJsYW5kcyBBaXIgRm9yY2UgRi0xNiBlYWNoIGRvd25lZCBhIFl1Z29zbGF2IE1pRy0yOTsgbm8gRi0xNiB3YXMgbG9zdC4ifSwKe3g6IlN1LTI3IEZsYW5rZXIiLHk6Ik1pRy0yOSBGdWxjcnVtIixjb25mbGljdDoiRXJpdHJlYW7igJNFdGhpb3BpYW4gV2FyIix5ZWFyczoiMTk5OSIseFNjb3JlOiIy4oCTMyIseVNjb3JlOiIwIixkaXNwdXRlZDpmYWxzZSxzdW1tYXJ5OiJUaGUgb25seSBGbGFua2VyLXZzLUZ1bGNydW0gY29tYmF0IGluIGhpc3RvcnkuIEV0aGlvcGlhbiBTdS0yN3MgZG93bmVkIHR3byB0byB0aHJlZSBFcml0cmVhbiBNaUctMjlzIGFuZCBsb3N0IG5vbmUg4oCUIHRoZSBzaWJsaW5nIHJpdmFscnkgc2V0dGxlZCBkZWNpc2l2ZWx5LiJ9LAp7eDoiRi0xNSBFYWdsZSIseToiTWlHLTI1IEZveGJhdCIsY29uZmxpY3Q6Ikd1bGYgV2FyICYgSXNyYWVsaSBvcHMiLHllYXJzOiIxOTgx4oCTMTk5MSIseFNjb3JlOiIzKyIseVNjb3JlOiIwIixkaXNwdXRlZDpmYWxzZSxzdW1tYXJ5OiJGLTE1cyBkb3duZWQgbXVsdGlwbGUgRm94YmF0cyDigJQgaW5jbHVkaW5nIHR3byBpbiBhIHNpbmdsZSBEZXNlcnQgU3Rvcm0gZW5nYWdlbWVudCBvbiAxOSBKYW4gMTk5MSDigJQgZm9yIG5vIGxvc3MuIn0sCnt4OiJGLTE1IEVhZ2xlIix5OiJNaUctMjMgRmxvZ2dlciIsY29uZmxpY3Q6IkJla2FhIFZhbGxleSAmIEd1bGYgV2FyIix5ZWFyczoiMTk4MuKAkzE5OTEiLHhTY29yZToiOCsiLHlTY29yZToiMCIsZGlzcHV0ZWQ6ZmFsc2Usc3VtbWFyeToiVVNBRiBGLTE1cyBhbG9uZSBkb3duZWQgZWlnaHQgSXJhcWkgTWlHLTIzcyBpbiBEZXNlcnQgU3Rvcm0sIG9uIHRvcCBvZiBJc3JhZWxpIGtpbGxzIG92ZXIgTGViYW5vbjsgbm8gRi0xNSB3YXMgbG9zdCB0byBhIEZsb2dnZXIuIn0sCnt4OiJGLTE2IEZpZ2h0aW5nIEZhbGNvbiIseToiTWlHLTIzIEZsb2dnZXIiLGNvbmZsaWN0OiJMZWJhbm9uIFdhciAoQmVrYWEgVmFsbGV5KSIseWVhcnM6IjE5ODIiLHhTY29yZToic2V2ZXJhbCIseVNjb3JlOiIwIixkaXNwdXRlZDpmYWxzZSxzdW1tYXJ5OiJJc3JhZWxpIEYtMTZzIGRvd25lZCBTeXJpYW4gTWlHLTIzcyBkdXJpbmcgdGhlIG9uZS1zaWRlZCBCZWthYSBWYWxsZXkgYWlyIGJhdHRsZXMuIn0sCnt4OiJGLTE1IEVhZ2xlIix5OiJGLTQgUGhhbnRvbSBJSSIsY29uZmxpY3Q6IlNhdWRp4oCTSXJhbiBib3JkZXIgY2xhc2giLHllYXJzOiIxOTg0Iix4U2NvcmU6IjIiLHlTY29yZToiMCIsZGlzcHV0ZWQ6ZmFsc2Usc3VtbWFyeToiVHdvIFJveWFsIFNhdWRpIEYtMTVzIGRvd25lZCB0d28gSXJhbmlhbiBGLTRFIFBoYW50b21zIG5lYXIgdGhlIEd1bGYgaW4gSnVuZSAxOTg0IOKAlCBhIHJhcmUgRi0xNSBlbmdhZ2VtZW50IG91dHNpZGUgSXNyYWVsaSBhbmQgVVMgc2VydmljZS4ifSwKe3g6IkYvQS0xOCBIb3JuZXQiLHk6Ik1pRy0yMSBGaXNoYmVkIixjb25mbGljdDoiR3VsZiBXYXIiLHllYXJzOiIxOTkxIix4U2NvcmU6IjIiLHlTY29yZToiMCIsZGlzcHV0ZWQ6ZmFsc2Usc3VtbWFyeToiT24gdGhlIHdhcidzIG9wZW5pbmcgbmlnaHQgdHdvIFZGQS04MSBIb3JuZXRzIGVhY2ggZG93bmVkIGFuIElyYXFpIE1pRy0yMSDigJQgdGhlbiBjb21wbGV0ZWQgdGhlaXIgYm9tYmluZyBydW5zLiJ9LAp7eDoiRi9BLTE4IEhvcm5ldCIseToiTWlHLTI1IEZveGJhdCIsY29uZmxpY3Q6Ikd1bGYgV2FyIix5ZWFyczoiMTk5MSIseFNjb3JlOiIwIix5U2NvcmU6IjEiLGRpc3B1dGVkOmZhbHNlLHN1bW1hcnk6IlRoZSBIb3JuZXQncyBvbmx5IGFpci10by1haXIgbG9zcyDigJQgTHQgQ2RyIFNjb3R0IFNwZWljaGVyJ3MgamV0IG9uIDE3IEphbiAxOTkxIOKAlCBpcyB3aWRlbHkgYXR0cmlidXRlZCB0byBhbiBJcmFxaSBNaUctMjUuIn0sCnt4OiJTZWEgSGFycmllciIseToiTWlyYWdlIElJSSAvIDUiLGNvbmZsaWN0OiJGYWxrbGFuZHMgV2FyIix5ZWFyczoiMTk4MiIseFNjb3JlOiJzZXZlcmFsIix5U2NvcmU6IjAiLGRpc3B1dGVkOmZhbHNlLHN1bW1hcnk6IlNlYSBIYXJyaWVycyBkb3duZWQgQXJnZW50aW5lIE1pcmFnZXMgYW5kIERhZ2dlcnMgd2l0aCB0aGUgQUlNLTlMIFNpZGV3aW5kZXI7IG5vbmUgd2VyZSBsb3N0IGluIGFpciBjb21iYXQuIn0sCnt4OiJNaUctMjEgRmlzaGJlZCIseToiRi0xMDQgU3RhcmZpZ2h0ZXIiLGNvbmZsaWN0OiJJbmRvLVBha2lzdGFuaSBXYXIiLHllYXJzOiIxOTcxIix4U2NvcmU6IjIrIix5U2NvcmU6IjDigJMxIixkaXNwdXRlZDpmYWxzZSxzdW1tYXJ5OiJJbmRpYW4gTWlHLTIxcyBkb3duZWQgUGFraXN0YW5pIEYtMTA0cyBpbiBzb21lIG9mIHRoZSBmaXJzdCBzdXBlcnNvbmljLXZzLXN1cGVyc29uaWMga2lsbHMgb3ZlciB0aGUgc3ViY29udGluZW50LiJ9LAp7eDoiTWlyYWdlIElJSSAvIDUiLHk6Ik1pRy0yMSBGaXNoYmVkIixjb25mbGljdDoiU2l4LURheSBXYXIgJiBXYXIgb2YgQXR0cml0aW9uIix5ZWFyczoiMTk2N+KAkzE5NzAiLHhTY29yZToibWFueSIseVNjb3JlOiJzb21lIixkaXNwdXRlZDpmYWxzZSxzdW1tYXJ5OiJUaGUgZGVmaW5pbmcgZG9nZmlnaHQgcml2YWxyeSBvZiB0aGUgZWFybHkgQXJhYuKAk0lzcmFlbGkgd2FycyDigJQgSXNyYWVsaSBNaXJhZ2VzIGFnYWluc3QgRWd5cHRpYW4gYW5kIFN5cmlhbiBNaUctMjFzLCB3aXRoIHRoZSBNaXJhZ2UgZ2VuZXJhbGx5IG9uIHRvcC4ifSwKe3g6IkYtNSBGcmVlZG9tIEZpZ2h0ZXIiLHk6Ik1pRy0yMSBGaXNoYmVkIixjb25mbGljdDoiT2dhZGVuIFdhciIseWVhcnM6IjE5NzfigJMxOTc4Iix4U2NvcmU6In4xMiIseVNjb3JlOiIwIixkaXNwdXRlZDpmYWxzZSxzdW1tYXJ5OiJFdGhpb3BpYW4gRi01RXMgZG93bmVkIGFyb3VuZCBhIGRvemVuIFNvbWFsaSBNaUctMjFzIGR1cmluZyB0aGUgT2dhZGVuIFdhci4ifSwKe3g6Ik1pRy0yMSBGaXNoYmVkIix5OiJGLTQgUGhhbnRvbSBJSSIsY29uZmxpY3Q6IlZpZXRuYW0gV2FyIix5ZWFyczoiMTk2NeKAkzE5NzMiLHhTY29yZToiZG96ZW5zIix5U2NvcmU6ImRvemVucyIsZGlzcHV0ZWQ6dHJ1ZSxzdW1tYXJ5OiJUaGUgZGVmaW5pdGl2ZSBDb2xkIFdhciBkb2dmaWdodCByaXZhbHJ5LiBCb3RoIHNpZGVzIHNjb3JlZCBkb3plbnMgb2Yga2lsbHMsIGFuZCB0aGUgZXhhY3QgZXhjaGFuZ2UgcmF0aW8gaXMgZGlzcHV0ZWQgYmV0d2VlbiBVUyBhbmQgVmlldG5hbWVzZSBhY2NvdW50aW5nIHRvIHRoaXMgZGF5LiJ9LAp7eDoiRi0xNCBUb21jYXQiLHk6Ik1pcmFnZSBGMSIsY29uZmxpY3Q6IklyYW7igJNJcmFxIFdhciIseWVhcnM6IjE5ODDigJMxOTg4Iix4U2NvcmU6ImNsYWltZWQiLHlTY29yZToiY2xhaW1lZCIsZGlzcHV0ZWQ6dHJ1ZSxzdW1tYXJ5OiJJcmFuaWFuIEYtMTRzIGFuZCBJcmFxaSBNaXJhZ2UgRjFzIGNsYXNoZWQgcmVwZWF0ZWRseSBpbiB0aGUgbG93LWxldmVsICdHaXJhZmZlJyBtaXNzaW9ucy4gQm90aCBzaWRlcyBjbGFpbWVkIG11bHRpcGxlIGtpbGxzLCBidXQgSXJhbmlhbiBhbmQgSXJhcWkgdGFsbGllcyBkaXZlcmdlIHNoYXJwbHkgYW5kIHJlbWFpbiB1bnZlcmlmaWFibGUuIn0sCnt4OiJGLTE0IFRvbWNhdCIseToiTWlHLTIzIEZsb2dnZXIiLGNvbmZsaWN0OiJJcmFu4oCTSXJhcSBXYXIiLHllYXJzOiIxOTg0ICYgMTk4NiIseFNjb3JlOiIwIix5U2NvcmU6IjIgY2xhaW1lZCIsZGlzcHV0ZWQ6dHJ1ZSxzdW1tYXJ5OiJJcmFxaSBNaUctMjNNTHMgYXJlIGNyZWRpdGVkIHdpdGggZG93bmluZyBJcmFuaWFuIEYtMTRzIGluIDE5ODQgYW5kIDE5ODYg4oCUIHJhcmUgVG9tY2F0IGxvc3NlcywgdGhvdWdoIHRoZSBkZXRhaWxzIGFyZSBkaXNwdXRlZCBieSBJcmFuaWFuIHNvdXJjZXMuIn0sCnt4OiJNaUctMTcgRnJlc2NvIix5OiJGLTQgUGhhbnRvbSBJSSIsY29uZmxpY3Q6IlZpZXRuYW0gV2FyIix5ZWFyczoiMTk2NeKAkzE5NzIiLHhTY29yZToifjMyIix5U2NvcmU6Im1hbnkiLGRpc3B1dGVkOnRydWUsc3VtbWFyeToiVGhlIHN1YnNvbmljIE1pRy0xNyBpcyBjcmVkaXRlZCB3aXRoIGRvd25pbmcgYXJvdW5kIDMyIEYtNCBQaGFudG9tcyBpbiBsb3ctc3BlZWQga25pZmUtZmlnaHRzIG92ZXIgTm9ydGggVmlldG5hbSwgd2hpbGUgUGhhbnRvbXMgZG93bmVkIE1pRy0xN3MgaW4gcmV0dXJuIOKAlCBhIGxvcHNpZGVkLXRlY2hub2xvZ3kgbWF0Y2h1cCB0aGUgbGl0dGxlIGd1bmZpZ2h0ZXIgcmVmdXNlZCB0byBsb3NlIGNsZWFubHkuIn0KXTsKZnVuY3Rpb24gZmluZE1hdGNodXAoYSxiKXsKICBmb3IoY29uc3QgbSBvZiBNQVRDSFVQUyl7CiAgICBpZihtLng9PT1hLm5hbWUmJm0ueT09PWIubmFtZSlyZXR1cm57Y29uZmxpY3Q6bS5jb25mbGljdCx5ZWFyczptLnllYXJzLGFTY29yZTptLnhTY29yZSxiU2NvcmU6bS55U2NvcmUsZGlzcHV0ZWQ6bS5kaXNwdXRlZCxzdW1tYXJ5Om0uc3VtbWFyeX07CiAgICBpZihtLng9PT1iLm5hbWUmJm0ueT09PWEubmFtZSlyZXR1cm57Y29uZmxpY3Q6bS5jb25mbGljdCx5ZWFyczptLnllYXJzLGFTY29yZTptLnlTY29yZSxiU2NvcmU6bS54U2NvcmUsZGlzcHV0ZWQ6bS5kaXNwdXRlZCxzdW1tYXJ5Om0uc3VtbWFyeX07CiAgfQogIHJldHVybiBudWxsOwp9Cgo7CgovKiAtLS0tLS0tLS0tIFNIQVJFRCBIRUxQRVJTIC0tLS0tLS0tLS0gKi8KY29uc3QgJD1zPT5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpLCAkJD1zPT5bLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzKV07CmNvbnN0IGZsYWc9bz0+RkxBR1tvXXx8IvCfj7PvuI8iOwpjb25zdCBTVExBQkVMPXtwcm92ZW46JzxzcGFuIGNsYXNzPSJiYWRnZSBiLXByb3ZlbiI+YWlyLXRvLWFpcjwvc3Bhbj4nLHN0cmlrZTonPHNwYW4gY2xhc3M9ImJhZGdlIGItc3RyaWtlIj5zdHJpa2VzIG9ubHk8L3NwYW4+Jyx1bnRlc3RlZDonPHNwYW4gY2xhc3M9ImJhZGdlIGItdW50ZXN0ZWQiPm5vPC9zcGFuPid9Owpjb25zdCByYXRpb1R4dD1qPT5qLnJhdGlvPT09SW5maW5pdHk\/JzxzcGFuIHN0eWxlPSJmb250LXNpemU6MS4zNWVtO3ZlcnRpY2FsLWFsaWduOi0xcHgiPuKInjwvc3Bhbj4nOihqLnJhdGlvPT09MD8n4oCUJzpqLnJhdGlvLnRvRml4ZWQoMSkrJyA6IDEnKTsKY29uc3QgU0lMUD1gPHN2ZyBjbGFzcz0ic2lsYmciIHZpZXdCb3g9IjAgMCAxMDAgNDAiPjxwYXRoIGZpbGw9IiM3YTgwOGEiIGQ9Ik0yIDIwIEw0MCAxNyBMNDUgNCBMNDkgNCBMNDggMTYgTDcwIDE0IEw3NCAzIEw3OCAzIEw3NyAxMyBMOTYgMTIgQzk5IDEyIDk5IDE0IDk2IDE1IEw3NyAyMCBMNzggMzQgTDc0IDM0IEw2OSAyMSBMNDggMjIgTDQ5IDM3IEw0NSAzNyBMNDAgMjIgTDIgMjIgWiIvPjwvc3ZnPmA7CmZ1bmN0aW9uIHBob3RvQmxvY2soaixjbHMsZXh0cmEpe3JldHVybiBgPGRpdiBjbGFzcz0iJHtjbHN9Ij4ke1NJTFB9JHtqLmltZz9gPGltZyBzcmM9IiR7ai5pbWd9IiBhbHQ9IiR7ai5uYW1lfSIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5yZW1vdmUoKSI+YDonJ30ke2V4dHJhfHwnJ308L2Rpdj5gO30KZnVuY3Rpb24gYXZhaWxIVE1MKGopewogIGNvbnN0IGE9ai5hdmFpbHx8e3N0YXRlOiduYSd9OwogIGlmKGEuc3RhdGU9PT0nYXZhaWxhYmxlJylyZXR1cm4gYDxhIGNsYXNzPSJhdiBhdi1nbyIgaHJlZj0iJHthLnVybH0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5GbHkgJHsoL15GLS9pLnRlc3Qoai5uYW1lKXx8L15bQUVJT1VdL2kudGVzdChqLm5hbWUpKT8nYW4nOidhJ30gJHtqLm5hbWUuc3BsaXQoJyAnKVswXX08L2E+YDsKICBpZihhLnN0YXRlPT09J2NvbWluZycpcmV0dXJuIGEudXJsP2A8YSBjbGFzcz0iYXYgYXYtc29vbiIgaHJlZj0iJHthLnVybH0iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Db21pbmcgc29vbjwvYT5gOmA8c3BhbiBjbGFzcz0iYXYgYXYtc29vbiI+Q29taW5nIHNvb248L3NwYW4+YDsKICBpZihhLnN0YXRlPT09J3VudGlsJylyZXR1cm4gYDxzcGFuIGNsYXNzPSJhdiBhdi1wYXN0Ij5VbnRpbCAke2EueWVhcn08L3NwYW4+YDsKICByZXR1cm4gYDxzcGFuIGNsYXNzPSJhdiBhdi1uYSI+Tm90IG9mZmVyZWQ8L3NwYW4+YDsKfQpjb25zdCBvcmlnaW5zPVsuLi5uZXcgU2V0KEQubWFwKGo9Pmoub3JpZ2luKSldLnNvcnQoKTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZkYXRlJykudGV4dENvbnRlbnQ9bmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUdCJyx7ZGF5OidudW1lcmljJyxtb250aDonbG9uZycseWVhcjonbnVtZXJpYyd9KTsKCi8qIGNvbmNlcHQgc3dpdGNoaW5nICovCiQkKCcuY2J0bicpLmZvckVhY2goYj0+Yi5vbmNsaWNrPSgpPT57CiAgJCQoJy5jYnRuJykuZm9yRWFjaCh4PT54LmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpKTtiLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICQkKCcuY29uY2VwdCcpLmZvckVhY2gocz0+cy5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2MtJytiLmRhdGFzZXQuYykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7CiAgaWYoYi5kYXRhc2V0LmM9PT0nY2hhcnRzJylzZXRUaW1lb3V0KGRyYXdDaGFydHMsNjApOwogIHdpbmRvdy5zY3JvbGxUbyh7dG9wOjAsYmVoYXZpb3I6J3Ntb290aCd9KTsKfSk7CgovKiAtLS0tLS0tLS0tIENPTkNFUFQgMTogVEFCTEUgLS0tLS0tLS0tLSAqLwpsZXQgdFNvcnQ9e2s6J2tpbGxzJyxkaXI6LTF9LCB0U3RhdHVzPSdhbGwnLCB0T3JpZ2luPScnLCB0UXVlcnk9Jyc7CmNvbnN0IG9TZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcmlnaW4nKTsKb3JpZ2lucy5mb3JFYWNoKG89Pm9TZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLGA8b3B0aW9uIHZhbHVlPSIke299Ij4ke299PC9vcHRpb24+YCkpOwpmdW5jdGlvbiB0Um93cygpewogIGxldCByPUQuZmlsdGVyKGo9Pih0U3RhdHVzPT09J2FsbCd8fGouc3RhdHVzPT09dFN0YXR1cykmJighdE9yaWdpbnx8ai5vcmlnaW49PT10T3JpZ2luKSYmKCF0UXVlcnl8fChqLm5hbWUrai5mdWxsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRRdWVyeSkpKTsKICByLnNvcnQoKGEsYik9PntsZXQgaz10U29ydC5rLHZhPWFba10sdmI9YltrXTtpZihrPT09J25hbWUnfHxrPT09J29yaWdpbid8fGs9PT0nc3RhdHVzJ3x8az09PSdnZW4nKXt2YT0oJycrdmEpO3ZiPSgnJyt2Yik7cmV0dXJuIHZhLmxvY2FsZUNvbXBhcmUodmIpKnRTb3J0LmRpcjt9aWYodmE9PT1JbmZpbml0eSl2YT05OTk5OTtpZih2Yj09PUluZmluaXR5KXZiPTk5OTk5O3JldHVybiAodmEtdmIpKnRTb3J0LmRpcjt9KTsKICByZXR1cm4gcjsKfQpmdW5jdGlvbiByZW5kZXJUYWJsZSgpewogIGNvbnN0IHI9dFJvd3MoKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJvZHknKS5pbm5lckhUTUw9ci5tYXAoaj0+YDx0ciBkYXRhLWppZD0iJHtqLmlkfSI+CiAgICA8dGQgY2xhc3M9InBob3RvY2VsbCI+JHtqLmltZz9gPGltZyBjbGFzcz0idHRodW1iIiBzcmM9IiR7ai5pbWd9IiBhbHQ9IiIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nIj5gOic8c3BhbiBjbGFzcz0idHRodW1iIj48L3NwYW4+J308L3RkPjx0ZCBjbGFzcz0ibmFtZWNlbGwiPjxkaXYgY2xhc3M9ImpldG5hbWUiPiR7ai5uYW1lfTwvZGl2PjxkaXYgY2xhc3M9ImpldHN1YiI+JHtqLnJvbGUucmVwbGFjZSgvIFwvIC9nLCcgLzxicj4nKX08L2Rpdj48L3RkPgogICAgPHRkPjxkaXYgY2xhc3M9Im1mciI+JHtqLm1mci5yZXBsYWNlKC8gXC8gL2csJyAvPGJyPicpfTwvZGl2PiR7ai5vcmlnaW59PC90ZD48dGQgY2xhc3M9Im51bSI+JHtqLmZpcnN0RmxpZ2h0fTwvdGQ+PHRkPjxzcGFuIGNsYXNzPSJnZW4iPiR7ai5nZW59PC9zcGFuPjwvdGQ+CiAgICA8dGQgY2xhc3M9Im51bSBrIj4ke2oua3I\/YDxzcGFuIGNsYXNzPSJybmciPiR7ai5rcn08L3NwYW4+YDpqLmtpbGxzfTwvdGQ+PHRkIGNsYXNzPSJudW0gbCI+JHtqLmxyP2A8c3BhbiBjbGFzcz0icm5nIj4ke2oubHJ9PC9zcGFuPmA6ai5sb3NzZXN9PC90ZD4KICAgIDx0ZCBjbGFzcz0ibnVtIHJ0Ij4ke3JhdGlvVHh0KGopfSR7ai5lc3Q\/JzxzdXAgY2xhc3M9ImVzdGFyIj4qPC9zdXA+JzonJ308L3RkPjx0ZD4ke1NUTEFCRUxbai5zdGF0dXNdfTwvdGQ+CiAgICA8dGQ+JHthdmFpbEhUTUwoail9PC90ZD48L3RyPmApLmpvaW4oJycpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0Y291bnQnKS50ZXh0Q29udGVudD1yLmxlbmd0aCsnIG9mICcrRC5sZW5ndGgrJyBhaXJjcmFmdCc7CiAgJCQoJyNqdGFibGUgdGhlYWQgdGgnKS5mb3JFYWNoKHRoPT57dGguY2xhc3NMaXN0LnRvZ2dsZSgnc29ydGVkJyx0aC5kYXRhc2V0LmsmJnRoLmRhdGFzZXQuaz09PXRTb3J0LmspO30pOwp9CiQkKCcjanRhYmxlIHRoZWFkIHRoJykuZm9yRWFjaCh0aD0+dGgub25jbGljaz0oKT0+e2NvbnN0IGs9dGguZGF0YXNldC5rO2lmKCFrKXJldHVybjtpZih0U29ydC5rPT09ayl0U29ydC5kaXIqPS0xO2Vsc2V7dFNvcnQuaz1rO3RTb3J0LmRpcj0oaz09PSduYW1lJ3x8az09PSdvcmlnaW4nKT8xOi0xO31yZW5kZXJUYWJsZSgpO30pOwpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHNlYXJjaCcpLm9uaW5wdXQ9ZT0+e3RRdWVyeT1lLnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO3JlbmRlclRhYmxlKCk7fTsKb1NlbC5vbmNoYW5nZT1lPT57dE9yaWdpbj1lLnRhcmdldC52YWx1ZTtyZW5kZXJUYWJsZSgpO307CiQkKCcjYy10YWJsZSAuY2hpcCcpLmZvckVhY2goYz0+Yy5vbmNsaWNrPSgpPT57JCQoJyNjLXRhYmxlIC5jaGlwJykuZm9yRWFjaCh4PT54LmNsYXNzTGlzdC5yZW1vdmUoJ29uJykpO2MuY2xhc3NMaXN0LmFkZCgnb24nKTt0U3RhdHVzPWMuZGF0YXNldC5zdGF0dXM7cmVuZGVyVGFibGUoKTt9KTsKcmVuZGVyVGFibGUoKTsKCi8qIC0tLS0tLS0tLS0gQ09OQ0VQVCAyOiBDSEFSVFMgLS0tLS0tLS0tLSAqLwpsZXQgY2hhcnRGaWx0ZXI9J3Byb3ZlbicsIGNoYXJ0cz17fSwgY2hhcnREZWZhdWx0c1NldD1mYWxzZTsKZnVuY3Rpb24gY0RhdGEoKXtyZXR1cm4gY2hhcnRGaWx0ZXI9PT0ncHJvdmVuJz9ELmZpbHRlcihqPT5qLmtpbGxzPjB8fGoubG9zc2VzPjApOkQuc2xpY2UoKTt9CmZ1bmN0aW9uIGRyYXdDaGFydHMoKXsKICBpZih0eXBlb2YgQ2hhcnQ9PT0ndW5kZWZpbmVkJyl7CiAgICBpZigoZHJhd0NoYXJ0cy5fdD0oZHJhd0NoYXJ0cy5fdHx8MCkrMSk8NjApe3NldFRpbWVvdXQoZHJhd0NoYXJ0cywyMDApO3JldHVybjt9CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjYy1jaGFydHMgLmNhbnZhcy1ob2xkZXInKS5mb3JFYWNoKGg9PntpZighaC5xdWVyeVNlbGVjdG9yKCcuY2VycicpKWguaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCc8ZGl2IGNsYXNzPSJjZXJyIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZToxM3B4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjBweCI+Q2hhcnQgbGlicmFyeSBzdGlsbCBsb2FkaW5nIOKAlCBjaGVjayB5b3VyIGNvbm5lY3Rpb24gYW5kIHJlb3BlbiB0aGlzIHRhYi48L2Rpdj4nKTt9KTsKICAgIHJldHVybjsKICB9CiAgZHJhd0NoYXJ0cy5fdD0wOwogIGlmKCFjaGFydERlZmF1bHRzU2V0KXtDaGFydC5kZWZhdWx0cy5jb2xvcj0nIzVhNjA2OSc7Q2hhcnQuZGVmYXVsdHMuZm9udC5mYW1pbHk9IidHaWxyb3kgcmVndWxhcicsc2Fucy1zZXJpZiI7Q2hhcnQuZGVmYXVsdHMuYm9yZGVyQ29sb3I9JyNlZGVkZjAnO2NoYXJ0RGVmYXVsdHNTZXQ9dHJ1ZTt9CiAgT2JqZWN0LnZhbHVlcyhjaGFydHMpLmZvckVhY2goYz0+YyYmYy5kZXN0cm95KCkpOwogIGNvbnN0IGJhc2U9Y0RhdGEoKTsKICAvLyBLaWxscwogIGNvbnN0IGJ5Sz1bLi4uYmFzZV0uc29ydCgoYSxiKT0+Yi5raWxscy1hLmtpbGxzKS5zbGljZSgwLDE1KTsKICBjaGFydHMuaz1uZXcgQ2hhcnQoJCgnI2NoS2lsbHMnKSx7dHlwZTonYmFyJyxkYXRhOntsYWJlbHM6YnlLLm1hcChqPT5qLm5hbWUpLGRhdGFzZXRzOlt7ZGF0YTpieUsubWFwKGo9Pmoua2lsbHMpLGJhY2tncm91bmRDb2xvcjonIzE0MTQxNCcsYm9yZGVyUmFkaXVzOjB9XX0sb3B0aW9uczp7aW5kZXhBeGlzOid5JyxwbHVnaW5zOntsZWdlbmQ6e2Rpc3BsYXk6ZmFsc2V9fSxzY2FsZXM6e3g6e2dyaWQ6e2NvbG9yOicjZWRlZGYwJ319LHk6e2dyaWQ6e2Rpc3BsYXk6ZmFsc2V9fX0sbWFpbnRhaW5Bc3BlY3RSYXRpbzpmYWxzZX19KTsKICAvLyBSYXRpbyAoa2lsbHM+PTUsIGxvc3NlcyBjb25zaWRlcmVkKQogIGNvbnN0IGJ5Uj1ELmZpbHRlcihqPT5qLmtpbGxzPj01KS5tYXAoaj0+KHtuOmoubmFtZSxyOmoucmF0aW89PT1JbmZpbml0eT9qLmtpbGxzOmoucmF0aW8saW5mOmoucmF0aW89PT1JbmZpbml0eX0pKS5zb3J0KChhLGIpPT5iLnItYS5yKS5zbGljZSgwLDEyKTsKICBjaGFydHMucj1uZXcgQ2hhcnQoJCgnI2NoUmF0aW8nKSx7dHlwZTonYmFyJyxkYXRhOntsYWJlbHM6YnlSLm1hcCh4PT54Lm4pLGRhdGFzZXRzOlt7ZGF0YTpieVIubWFwKHg9PnguciksYmFja2dyb3VuZENvbG9yOmJ5Ui5tYXAoeD0+eC5pbmY\/JyMxMjdhM2YnOicjMTQxNDE0JyksYm9yZGVyUmFkaXVzOjB9XX0sb3B0aW9uczp7aW5kZXhBeGlzOid5JyxwbHVnaW5zOntsZWdlbmQ6e2Rpc3BsYXk6ZmFsc2V9LHRvb2x0aXA6e2NhbGxiYWNrczp7bGFiZWw6Yz0+e2NvbnN0IHg9YnlSW2MuZGF0YUluZGV4XTtyZXR1cm4geC5pbmY\/J1VuZGVmZWF0ZWQgKCcreC5yKycga2lsbHMsIDAgbG9zc2VzKSc6eC5yLnRvRml4ZWQoMSkrJzoxJzt9fX19LHNjYWxlczp7eDp7Z3JpZDp7Y29sb3I6JyNlZGVkZjAnfX0seTp7Z3JpZDp7ZGlzcGxheTpmYWxzZX19fSxtYWludGFpbkFzcGVjdFJhdGlvOmZhbHNlfX0pOwogIC8vIFNjYXR0ZXIKICBjaGFydHMucz1uZXcgQ2hhcnQoJCgnI2NoU2NhdHRlcicpLHt0eXBlOididWJibGUnLGRhdGE6e2RhdGFzZXRzOmJhc2UubWFwKGo9Pih7bGFiZWw6ai5uYW1lLGRhdGE6W3t4Omoua2lsbHMseTpqLmxvc3NlcyxyOk1hdGgubWF4KDUsTWF0aC5zcXJ0KGoudG90YWwpKjEuNil9XSxiYWNrZ3JvdW5kQ29sb3I6ai5zdGF0dXM9PT0ncHJvdmVuJz8ncmdiYSgyMCwyMCwyMCwuNzIpJzooai5zdGF0dXM9PT0nc3RyaWtlJz8ncmdiYSgxMjAsMTI2LDEzNCwuNiknOidyZ2JhKDE5MCwxOTQsMjAwLC43NSknKSxib3JkZXJDb2xvcjonI2ZmZid9KSl9LG9wdGlvbnM6e3BsdWdpbnM6e2xlZ2VuZDp7ZGlzcGxheTpmYWxzZX0sdG9vbHRpcDp7Y2FsbGJhY2tzOntsYWJlbDpjPT57Y29uc3Qgaj1iYXNlW2MuZGF0YXNldEluZGV4XTtyZXR1cm4gYCR7ai5uYW1lfTogJHtqLmtpbGxzfSBraWxscywgJHtqLmxvc3Nlc30gbG9zc2VzYDt9fX19LHNjYWxlczp7eDp7dGl0bGU6e2Rpc3BsYXk6dHJ1ZSx0ZXh0OidBaXItdG8tYWlyIGtpbGxzJ30sZ3JpZDp7Y29sb3I6JyNlZGVkZjAnfX0seTp7dGl0bGU6e2Rpc3BsYXk6dHJ1ZSx0ZXh0OidBaXItdG8tYWlyIGxvc3Nlcyd9LGdyaWQ6e2NvbG9yOicjZWRlZGYwJ319fSxtYWludGFpbkFzcGVjdFJhdGlvOmZhbHNlfX0pOwp9CiQkKCcjYy1jaGFydHMgLmNoaXAnKS5mb3JFYWNoKGM9PmMub25jbGljaz0oKT0+eyQkKCcjYy1jaGFydHMgLmNoaXAnKS5mb3JFYWNoKHg9PnguY2xhc3NMaXN0LnJlbW92ZSgnb24nKSk7Yy5jbGFzc0xpc3QuYWRkKCdvbicpO2NoYXJ0RmlsdGVyPWMuZGF0YXNldC5jZjtkcmF3Q2hhcnRzKCk7fSk7CgovKiAtLS0tLS0tLS0tIENPTkNFUFQgMzogQ0FSRFMgLS0tLS0tLS0tLSAqLwpjb25zdCBjT1NlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29yaWdpbicpOwpvcmlnaW5zLmZvckVhY2gobz0+Y09TZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLGA8b3B0aW9uIHZhbHVlPSIke299Ij4ke299PC9vcHRpb24+YCkpOwpsZXQgY1F1ZXJ5PScnLGNPcmlnaW49Jyc7CmZ1bmN0aW9uIHJlbmRlckNhcmRzKCl7CiAgY29uc3Qgcj1ELmZpbHRlcihqPT4oIWNPcmlnaW58fGoub3JpZ2luPT09Y09yaWdpbikmJighY1F1ZXJ5fHwoai5uYW1lK2ouZnVsbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjUXVlcnkpKSkKICAgIC5zb3J0KChhLGIpPT5iLmtpbGxzLWEua2lsbHMpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXJkZ3JpZCcpLmlubmVySFRNTD1yLm1hcChqPT5gPGRpdiBjbGFzcz0iamV0Y2FyZCIgZGF0YS1pZD0iJHtqLmlkfSI+CiAgICAke3Bob3RvQmxvY2soaiwncGhvdG8nLGA8c3BhbiBjbGFzcz0iZ3RhZyI+JHtqLmdlbn0gZ2VuIMK3ICR7ZmxhZyhqLm9yaWdpbil9ICR7ai5vcmlnaW59PC9zcGFuPmApfQogICAgPGRpdiBjbGFzcz0iY2JvZHkiPgogICAgICA8aDM+JHtqLm5hbWV9PC9oMz48ZGl2IGNsYXNzPSJvcmciPiR7ai5yb2xlfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RhdCI+PGRpdiBjbGFzcz0idiBrIj4ke2oua3I\/YDxzcGFuIGNsYXNzPSJybmciPiR7ai5rcn08L3NwYW4+YDpqLmtpbGxzfTwvZGl2PjxkaXYgY2xhc3M9ImxiIj5LaWxsczwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0YXQiPjxkaXYgY2xhc3M9InYgbCI+JHtqLmxyP2A8c3BhbiBjbGFzcz0icm5nIj4ke2oubHJ9PC9zcGFuPmA6ai5sb3NzZXN9PC9kaXY+PGRpdiBjbGFzcz0ibGIiPkxvc3NlczwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0YXQiPjxkaXYgY2xhc3M9InYiPiR7cmF0aW9UeHQoail9PC9kaXY+PGRpdiBjbGFzcz0ibGIiPlJhdGlvPC9kaXY+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjYXZhaWwiPjxzcGFuPk1pR0ZsdWc8L3NwYW4+JHthdmFpbEhUTUwoail9PC9kaXY+CiAgICA8L2Rpdj48L2Rpdj5gKS5qb2luKCcnKTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2NvdW50JykudGV4dENvbnRlbnQ9ci5sZW5ndGgrJyBhaXJjcmFmdCc7CiAgJCQoJy5qZXRjYXJkJykuZm9yRWFjaChjPT5jLm9uY2xpY2s9ZT0+e2lmKGUudGFyZ2V0LmNsb3Nlc3QoJy5hdicpKXJldHVybjtvcGVuTW9kYWwoK2MuZGF0YXNldC5pZCk7fSk7Cn0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NzZWFyY2gnKS5vbmlucHV0PWU9PntjUXVlcnk9ZS50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTtyZW5kZXJDYXJkcygpO307CmNPU2VsLm9uY2hhbmdlPWU9PntjT3JpZ2luPWUudGFyZ2V0LnZhbHVlO3JlbmRlckNhcmRzKCk7fTsKcmVuZGVyQ2FyZHMoKTsKCmZ1bmN0aW9uIG9wZW5Nb2RhbChpZCl7CiAgY29uc3Qgaj1EW2lkXTsKICAkKCcjbWJveCcpLmlubmVySFRNTD1gJHtwaG90b0Jsb2NrKGosJ21waG90bycsYDxidXR0b24gY2xhc3M9Im1jbG9zZSIgb25jbGljaz0iY2xvc2VNb2RhbCgpIj7DlzwvYnV0dG9uPmApfQogICAgPGRpdiBjbGFzcz0ibWhlYWQiPgogICAgPGRpdiBjbGFzcz0iZ3RhZyI+JHtqLmdlbn0gZ2VuIMK3ICR7ZmxhZyhqLm9yaWdpbil9ICR7ai5vcmlnaW59IMK3IGZpcnN0IGZsaWdodCAke2ouZmlyc3RGbGlnaHR9JHtqLnJldGlyZWQ\/JyDCtyByZXRpcmVkJzonJ308L2Rpdj4KICAgIDxoMz4ke2oubmFtZX08L2gzPjxkaXYgY2xhc3M9Im9yZyI+JHtqLmZ1bGx9IOKAlCAke2oucm9sZX08L2Rpdj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1hdmFpbCI+PHNwYW4gY2xhc3M9Im1hdmFpbC1sIj5BdmFpbGFibGUgd2l0aCBNaUdGbHVnPC9zcGFuPiR7YXZhaWxIVE1MKGopfTwvZGl2PgogICAgPGRpdiBjbGFzcz0ibXN0YXRzIj4KICAgICAgPGRpdiBjbGFzcz0icyI+PGRpdiBjbGFzcz0idiBrIj4ke2oua3I\/YDxzcGFuIGNsYXNzPSJybmciPiR7ai5rcn08L3NwYW4+YDpqLmtpbGxzfTwvZGl2PjxkaXYgY2xhc3M9ImxiIj5BMkEga2lsbHM8L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icyI+PGRpdiBjbGFzcz0idiBsIj4ke2oubHI\/YDxzcGFuIGNsYXNzPSJybmciPiR7ai5scn08L3NwYW4+YDpqLmxvc3Nlc308L2Rpdj48ZGl2IGNsYXNzPSJsYiI+QTJBIGxvc3NlczwvZGl2PjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzIj48ZGl2IGNsYXNzPSJ2Ij4ke3JhdGlvVHh0KGopfTwvZGl2PjxkaXYgY2xhc3M9ImxiIj5LaWxsIHJhdGlvPC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InMiPjxkaXYgY2xhc3M9InYiIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmV5dHgpIj4ke2ouZ3JvdW5kfTwvZGl2PjxkaXYgY2xhc3M9ImxiIj5Hcm91bmQgbG9zc2VzPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Im1ib2R5Ij4KICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+PGI+JHtqLmZhbW91c308L2I+PC9kaXY+CiAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLW11dGVkKTttYXJnaW4tYm90dG9tOjE4cHgiPiR7ai5ub3RlfTwvcD4KICAgICAgPGg0PkNvbWJhdCBoaXN0b3J5IGJ5IGNvbmZsaWN0PC9oND4KICAgICAgJHtqLmNvbmZsaWN0cy5tYXAoYz0+YDxkaXYgY2xhc3M9ImNvbmZsaWN0Ij48ZGl2IGNsYXNzPSJ5ciI+JHtjLnlyfTwvZGl2PjxkaXYgY2xhc3M9ImN3Ij48ZGl2IGNsYXNzPSJjbiI+JHtjLm59IDxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC13ZWlnaHQ6NTAwIj7CtyAke2MubmF0aW9ufTwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJjZCI+JHtjLmR9PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY2siPjxzcGFuIGNsYXNzPSJrIj4ke2Mua308L3NwYW4+IC8gPHNwYW4gY2xhc3M9ImwiPiR7Yy5sfTwvc3Bhbj48L2Rpdj48L2Rpdj5gKS5qb2luKCcnKX0KICAgIDwvZGl2PmA7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsJykuY2xhc3NMaXN0LmFkZCgnb3BlbicpOwp9CmZ1bmN0aW9uIGNsb3NlTW9kYWwoKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwnKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7fQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwnKS5vbmNsaWNrPWU9PntpZihlLnRhcmdldC5pZD09PSdtb2RhbCcpY2xvc2VNb2RhbCgpO307CmZ1bmN0aW9uIG9wZW5JbWcoc3JjLG5hbWUpe3ZhciBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZmNzLWxiJyk7aWYoIW8pe289ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7by5pZD0nbWZjcy1sYic7by5zdHlsZS5jc3NUZXh0PSdwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuOTIpO2Rpc3BsYXk6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDo5OTk5OTtjdXJzb3I6em9vbS1vdXQ7cGFkZGluZzoyNHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveCc7by5vbmNsaWNrPWNsb3NlSW1nO3ZhciBpbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtpbS5pZD0nbWZjcy1sYi1pbWcnO2ltLnN0eWxlLmNzc1RleHQ9J21heC13aWR0aDo5MnZ3O21heC1oZWlnaHQ6ODR2aDtvYmplY3QtZml0OmNvbnRhaW47ZGlzcGxheTpibG9jayc7dmFyIGNwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2NwLmlkPSdtZmNzLWxiLWNhcCc7Y3Auc3R5bGUuY3NzVGV4dD0nY29sb3I6I2ZmZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAyZW07bWFyZ2luLXRvcDoxNnB4O3RleHQtYWxpZ246Y2VudGVyJztvLmFwcGVuZENoaWxkKGltKTtvLmFwcGVuZENoaWxkKGNwKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pO31vLnF1ZXJ5U2VsZWN0b3IoJyNtZmNzLWxiLWltZycpLnNyYz1zcmM7by5xdWVyeVNlbGVjdG9yKCcjbWZjcy1sYi1jYXAnKS50ZXh0Q29udGVudD1uYW1lO28uc3R5bGUuZGlzcGxheT0nZmxleCc7fQpmdW5jdGlvbiBjbG9zZUltZygpe3ZhciBvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZmNzLWxiJyk7aWYobylvLnN0eWxlLmRpc3BsYXk9J25vbmUnO30KZnVuY3Rpb24gYmlnU3JjKHUpe3ZhciBpPXUubGFzdEluZGV4T2YoJ3B4LScpO2lmKGk8MSlyZXR1cm4gdTt2YXIgcz11Lmxhc3RJbmRleE9mKCcvJyxpKTtpZihzPDApcmV0dXJuIHU7cmV0dXJuIHUuc2xpY2UoMCxzKzEpKycxMjgwJyt1LnNsaWNlKGkpO30KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rib2R5JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LmNsb3Nlc3QoJy50dGh1bWInKTtpZighdHx8IXQuZ2V0QXR0cmlidXRlKCdzcmMnKSlyZXR1cm47dmFyIHRyPXQuY2xvc2VzdCgndHInKTt2YXIgbm09dHImJnRyLnF1ZXJ5U2VsZWN0b3IoJy5qZXRuYW1lJyk7dmFyIHJsPXRyJiZ0ci5xdWVyeVNlbGVjdG9yKCcuamV0c3ViJyk7b3BlbkltZyhiaWdTcmModC5zcmMpLChubT9ubS50ZXh0Q29udGVudC50cmltKCk6JycpKyhybD8nIOKAlCAnK3JsLnRleHRDb250ZW50LnRyaW0oKTonJykpO30pOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxlPT57aWYoZS5rZXk9PT0nRXNjYXBlJyl7Y2xvc2VNb2RhbCgpO2Nsb3NlSW1nKCk7fX0pOwoKLyogLS0tLS0tLS0tLSBDT05DRVBUIDQ6IENPTVBBUkUgLS0tLS0tLS0tLSAqLwpjb25zdCBzZWxBPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbXBBJyksc2VsQj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY21wQicpOwpELnNsaWNlKCkuc29ydCgoYSxiKT0+YS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkuZm9yRWFjaChqPT57CiAgc2VsQS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsYDxvcHRpb24gdmFsdWU9IiR7ai5pZH0iPiR7ZmxhZyhqLm9yaWdpbil9ICR7ai5uYW1lfTwvb3B0aW9uPmApOwogIHNlbEIuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLGA8b3B0aW9uIHZhbHVlPSIke2ouaWR9Ij4ke2ZsYWcoai5vcmlnaW4pfSAke2oubmFtZX08L29wdGlvbj5gKTsKfSk7CnNlbEEudmFsdWU9RC5maW5kSW5kZXgoaj0+ai5uYW1lPT09J0YtMTUgRWFnbGUnKTsKc2VsQi52YWx1ZT1ELmZpbmRJbmRleChqPT5qLm5hbWU9PT0nTWlHLTI5IEZ1bGNydW0nKTsKZnVuY3Rpb24gY21wUm93KGxhYmVsLGEsYixmbXQsbG93ZXJCZXR0ZXIpewogIGNvbnN0IG14PU1hdGgubWF4KGEsYiwxKTsKICBjb25zdCBmPWZtdHx8KHg9PngpOwogIGNvbnN0IGF3PWxvd2VyQmV0dGVyPyhhPGIpOihhPmIpLCBidz1sb3dlckJldHRlcj8oYjxhKTooYj5hKTsKICByZXR1cm4gYDxkaXYgY2xhc3M9ImNtcC1yb3ciPgogICAgPGRpdiBjbGFzcz0iY21wLWJhciBsZWZ0Ij48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JHsoYS9teCo4Nil9JSI+PC9kaXY+PHNwYW4gY2xhc3M9ImJ2ICR7YXc\/J3dpbic6Jyd9IiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4Ij4ke2YoYSl9PC9zcGFuPjwvZGl2PgogICAgPGRpdiBjbGFzcz0iY21wLWxiIj4ke2xhYmVsfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iY21wLWJhciByaWdodCI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOiR7KGIvbXgqODYpfSUiPjwvZGl2PjxzcGFuIGNsYXNzPSJidiAke2J3Pyd3aW4nOicnfSIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHgiPiR7ZihiKX08L3NwYW4+PC9kaXY+CiAgPC9kaXY+YDsKfQpmdW5jdGlvbiByZW5kZXJDb21wYXJlKCl7CiAgY29uc3QgYT1EWytzZWxBLnZhbHVlXSxiPURbK3NlbEIudmFsdWVdOwogIGNvbnN0IHJyPWo9PmoucmF0aW89PT1JbmZpbml0eT85OTpqLnJhdGlvOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbXBCb2FyZCcpLmlubmVySFRNTD1gCiAgICA8ZGl2IGNsYXNzPSJjbXAtdG9wIj4KICAgICAgPGRpdiBjbGFzcz0iY21wLXNpZGUiPiR7cGhvdG9CbG9jayhhLCdjbXAtcGhvdG8nKX08ZGl2IGNsYXNzPSJndGFnIj4ke2ZsYWcoYS5vcmlnaW4pfSAke2Eub3JpZ2lufSDCtyAke2EuZ2VufSBnZW48L2Rpdj48aDM+JHthLm5hbWV9PC9oMz48ZGl2IGNsYXNzPSJvcmciPiR7YS5yb2xlfSDCtyBmaXJzdCBmbGlnaHQgJHthLmZpcnN0RmxpZ2h0fTwvZGl2PjxkaXYgY2xhc3M9ImNhdiI+JHthdmFpbEhUTUwoYSl9PC9kaXY+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNtcC1zaWRlIj4ke3Bob3RvQmxvY2soYiwnY21wLXBob3RvJyl9PGRpdiBjbGFzcz0iZ3RhZyI+JHtmbGFnKGIub3JpZ2luKX0gJHtiLm9yaWdpbn0gwrcgJHtiLmdlbn0gZ2VuPC9kaXY+PGgzPiR7Yi5uYW1lfTwvaDM+PGRpdiBjbGFzcz0ib3JnIj4ke2Iucm9sZX0gwrcgZmlyc3QgZmxpZ2h0ICR7Yi5maXJzdEZsaWdodH08L2Rpdj48ZGl2IGNsYXNzPSJjYXYiPiR7YXZhaWxIVE1MKGIpfTwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAgICAke2NtcFJvdygnQTJBIEtpbGxzJyxhLmtpbGxzLGIua2lsbHMpfQogICAgJHtjbXBSb3coJ0EyQSBMb3NzZXMnLGEubG9zc2VzLGIubG9zc2VzLG51bGwsdHJ1ZSl9CiAgICAke2NtcFJvdygnS2lsbCByYXRpbycscnIoYSkscnIoYikseD0+eD09PTk5PyfiiJ4nOih4PT09MD8n4oCUJzp4LnRvRml4ZWQoMSkpKX0KICAgICR7Y21wUm93KCdHcm91bmQgbG9zc2VzJyxhLmdyb3VuZCxiLmdyb3VuZCxudWxsLHRydWUpfQogICAgJHtjbXBSb3coJ1RvdGFsIGVuZ2FnZW1lbnRzJyxhLnRvdGFsLGIudG90YWwpfQogICAgJHtlbmdhZ2VIVE1MKGEsYil9CiAgICA8ZGl2IGNsYXNzPSJjbXAtcm93IiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjE3LjVweDtsaW5lLWhlaWdodDoxLjUiPgogICAgICA8ZGl2PiR7YS5uYW1lfTogJHthLmZhbW91c308YnI+PGJyPiR7Yi5uYW1lfTogJHtiLmZhbW91c308L2Rpdj4KICAgIDwvZGl2PmA7Cn0KZnVuY3Rpb24gZW5nYWdlSFRNTChhLGIpewogIGlmKGEuaWQ9PT1iLmlkKXJldHVybicnOwogIGNvbnN0IG09ZmluZE1hdGNodXAoYSxiKTsKICBpZighbSlyZXR1cm4gYDxkaXYgY2xhc3M9ImVuZ2FnZSBub25lIj48ZGl2IGNsYXNzPSJlbSI+Tm8gZG9jdW1lbnRlZCBhaXItdG8tYWlyIGVuZ2FnZW1lbnRzIGJldHdlZW4gdGhlIDxiPiR7YS5uYW1lfTwvYj4gYW5kIHRoZSA8Yj4ke2IubmFtZX08L2I+LjwvZGl2PjwvZGl2PmA7CiAgY29uc3QgYXc9KG0uYVNjb3JlPT09JzAnJiZtLmJTY29yZSE9PScwJyksIGJ3PShtLmJTY29yZT09PScwJyYmbS5hU2NvcmUhPT0nMCcpOwogIHJldHVybiBgPGRpdiBjbGFzcz0iZW5nYWdlIj4KICAgIDxkaXYgY2xhc3M9ImVoIj7impQgV2hlbiB0aGV5IGFjdHVhbGx5IG1ldCAke20uZGlzcHV0ZWQ\/JzxzcGFuIGNsYXNzPSJkaXNwIj5jb250ZXN0ZWQ8L3NwYW4+JzonJ308L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImVjIj4ke20uY29uZmxpY3R9IMK3ICR7bS55ZWFyc308L2Rpdj4KICAgIDxkaXYgY2xhc3M9InNjb3JlIj4KICAgICAgPGRpdiBjbGFzcz0ic3Ygc0wgJHtidz8nd2luMic6Jyd9Ij4ke20uYVNjb3JlfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkYXNoIj7igJM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3Ygc1IgJHthdz8nd2luMic6Jyd9Ij4ke20uYlNjb3JlfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJlc3VtIj4ke20uc3VtbWFyeX08L2Rpdj4KICA8L2Rpdj5gOwp9CnNlbEEub25jaGFuZ2U9cmVuZGVyQ29tcGFyZTtzZWxCLm9uY2hhbmdlPXJlbmRlckNvbXBhcmU7CnJlbmRlckNvbXBhcmUoKTsKCi8qIC0tLS0tLS0tLS0gU1RBVCBUT09MVElQIChob3ZlciBzdG9yeSkgLS0tLS0tLS0tLSAqLwooZnVuY3Rpb24oKXsKICB2YXIgdGlwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3RpcC5pZD0nbWZjcy10aXAnOwogIHRpcC5zdHlsZS5jc3NUZXh0PSdwb3NpdGlvbjpmaXhlZDtkaXNwbGF5Om5vbmU7ei1pbmRleDo5OTk5ODtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzBkMTExNztib3JkZXI6MXB4IHNvbGlkICMwZDExMTc7cGFkZGluZzoxMHB4IDEycHg7bWF4LXdpZHRoOjM0MHB4O2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS40NTtib3gtc2hhZG93OjAgNHB4IDE4cHggcmdiYSgxMywxNywyMywuMTQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Zm9udC1mYW1pbHk6aW5oZXJpdCc7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aXApOwogIHZhciB0Yj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGJvZHknKTsKICBpZighdGIpcmV0dXJuOwogIGZ1bmN0aW9uIG1vdmUoZSl7dmFyIHg9TWF0aC5taW4oZS5jbGllbnRYKzE2LHdpbmRvdy5pbm5lcldpZHRoLTM2NCk7dmFyIHk9ZS5jbGllbnRZKzE4O2lmKHkrdGlwLm9mZnNldEhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQtMTApe3k9ZS5jbGllbnRZLXRpcC5vZmZzZXRIZWlnaHQtMTQ7fXRpcC5zdHlsZS5sZWZ0PU1hdGgubWF4KDgseCkrJ3B4Jzt0aXAuc3R5bGUudG9wPU1hdGgubWF4KDgseSkrJ3B4Jzt9CiAgdGIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJyxmdW5jdGlvbihlKXsKICAgIHZhciB0ZD1lLnRhcmdldC5jbG9zZXN0KCd0ZC5rLHRkLmwsdGQucnQnKTsKICAgIGlmKCF0ZCl7dGlwLnN0eWxlLmRpc3BsYXk9J25vbmUnO3JldHVybjt9CiAgICB2YXIgdHI9ZS50YXJnZXQuY2xvc2VzdCgndHJbZGF0YS1qaWRdJyk7aWYoIXRyKXJldHVybjsKICAgIHZhciBqPURbK3RyLmdldEF0dHJpYnV0ZSgnZGF0YS1qaWQnKV07aWYoIWp8fCFqLm5vdGUpcmV0dXJuOwogICAgdGlwLmlubmVySFRNTD0nPGIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo0cHgiPicrai5uYW1lKycg4oCUIHRoZSBzdG9yeSBiZWhpbmQgdGhlIG51bWJlcnM8L2I+JytqLm5vdGU7CiAgICB0aXAuc3R5bGUuZGlzcGxheT0nYmxvY2snO21vdmUoZSk7CiAgfSk7CiAgdGIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxmdW5jdGlvbihlKXtpZih0aXAuc3R5bGUuZGlzcGxheT09PSdibG9jaycpbW92ZShlKTt9KTsKICB0Yi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJyxmdW5jdGlvbigpe3RpcC5zdHlsZS5kaXNwbGF5PSdub25lJzt9KTsKfSkoKTs=\"><\/div>\n<p><script>(function(){var el=document.getElementById(\"mfcs-data\");var js=decodeURIComponent(escape(atob(el.getAttribute(\"data-js\"))));var sc=document.createElement(\"script\");sc.text=\"(function(){\"+js+\";window.closeModal=closeModal;window.openModal=openModal;})();\";document.body.appendChild(sc);})();<\/script><\/div>\n","protected":false},"excerpt":{"rendered":"<p>MiGFlug \u00b7 Fighter Jet Combat Records Combat Statistics for Every Fighter Jet in Service The air-to-air record of 42 fighter jets, from the MiG-15 to the F-35 and Su-57 \u2014 every confirmed kill and loss, cross-checked and sourced. Sort the full table, explore the charts, open a detail card for any aircraft, or put two [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"editor_notices":[],"footnotes":""},"class_list":["post-15995","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fighter Jet Combat Statistics \u2013 Every Aircraft in Service | MiGFlug<\/title>\n<meta name=\"description\" content=\"Air-to-air kills, losses and kill ratios for 42 fighter jets from the MiG-15 to the F-35 and Su-57 \u2014 sortable, charted and cross-checked against official records.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/migflug.com\/cn\/fighter-jet-combat-statistics\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service | MiGFlug\" \/>\n<meta property=\"og:description\" content=\"Air-to-air kills, losses and kill ratios for 42 fighter jets from the MiG-15 to the F-35 and Su-57 \u2014 sortable, charted and cross-checked against official records.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/migflug.com\/cn\/fighter-jet-combat-statistics\/\" \/>\n<meta property=\"og:site_name\" content=\"MiGFlug\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MiGFlug\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-11T21:17:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ml5psubhxdln.i.optimole.com\/cb:78--.b845\/w:auto\/h:auto\/q:96\/f:best\/https:\/\/migflug.com\/wp-content\/uploads\/2026\/06\/migflug-share-1200x630-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@migflug\" \/>\n<meta name=\"twitter:label1\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/migflug.com\\\/fighter-jet-combat-statistics\\\/\",\"url\":\"https:\\\/\\\/migflug.com\\\/fighter-jet-combat-statistics\\\/\",\"name\":\"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service | MiGFlug\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/migflug.com\\\/#website\"},\"datePublished\":\"2026-07-09T15:07:46+00:00\",\"dateModified\":\"2026-07-11T21:17:05+00:00\",\"description\":\"Air-to-air kills, losses and kill ratios for 42 fighter jets from the MiG-15 to the F-35 and Su-57 \u2014 sortable, charted and cross-checked against official records.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/migflug.com\\\/fighter-jet-combat-statistics\\\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/migflug.com\\\/fighter-jet-combat-statistics\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/migflug.com\\\/fighter-jet-combat-statistics\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/migflug.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/migflug.com\\\/#website\",\"url\":\"https:\\\/\\\/migflug.com\\\/\",\"name\":\"MiGFlug\",\"description\":\"Fly a Jet Fighter Yourself\",\"publisher\":{\"@id\":\"https:\\\/\\\/migflug.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/migflug.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/migflug.com\\\/#organization\",\"name\":\"MiGFlug GmbH\",\"url\":\"https:\\\/\\\/migflug.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\\\/\\\/migflug.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\/\\/migflug.com\\/wp-content\\/uploads\\/2018\\/10\\/logo-migflug-blue.png\",\"contentUrl\":\"https:\\/\\/migflug.com\\/wp-content\\/uploads\\/2018\\/10\\/logo-migflug-blue.png\",\"width\":200,\"height\":100,\"caption\":\"MiGFlug GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/migflug.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/MiGFlug\\\/\",\"https:\\\/\\\/x.com\\\/migflug\",\"https:\\\/\\\/www.instagram.com\\\/migflug\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/MiGFlug\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/migflug.com\\\/\",\"https:\\\/\\\/www.pinterest.ch\\\/migflug\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service | MiGFlug","description":"Air-to-air kills, losses and kill ratios for 42 fighter jets from the MiG-15 to the F-35 and Su-57 \u2014 sortable, charted and cross-checked against official records.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/migflug.com\/cn\/fighter-jet-combat-statistics\/","og_locale":"zh_CN","og_type":"article","og_title":"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service | MiGFlug","og_description":"Air-to-air kills, losses and kill ratios for 42 fighter jets from the MiG-15 to the F-35 and Su-57 \u2014 sortable, charted and cross-checked against official records.","og_url":"https:\/\/migflug.com\/cn\/fighter-jet-combat-statistics\/","og_site_name":"MiGFlug","article_publisher":"https:\/\/www.facebook.com\/MiGFlug\/","article_modified_time":"2026-07-11T21:17:05+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/ml5psubhxdln.i.optimole.com\/cb:78--.b845\/w:auto\/h:auto\/q:96\/f:best\/https:\/\/migflug.com\/wp-content\/uploads\/2026\/06\/migflug-share-1200x630-1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_site":"@migflug","twitter_misc":{"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/migflug.com\/fighter-jet-combat-statistics\/","url":"https:\/\/migflug.com\/fighter-jet-combat-statistics\/","name":"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service | MiGFlug","isPartOf":{"@id":"https:\/\/migflug.com\/#website"},"datePublished":"2026-07-09T15:07:46+00:00","dateModified":"2026-07-11T21:17:05+00:00","description":"Air-to-air kills, losses and kill ratios for 42 fighter jets from the MiG-15 to the F-35 and Su-57 \u2014 sortable, charted and cross-checked against official records.","breadcrumb":{"@id":"https:\/\/migflug.com\/fighter-jet-combat-statistics\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/migflug.com\/fighter-jet-combat-statistics\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/migflug.com\/fighter-jet-combat-statistics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/migflug.com\/"},{"@type":"ListItem","position":2,"name":"Fighter Jet Combat Statistics \u2013 Every Aircraft in Service"}]},{"@type":"WebSite","@id":"https:\/\/migflug.com\/#website","url":"https:\/\/migflug.com\/","name":"\u7c73\u683c-\u5f17\u62c9\u683c","description":"\u4eb2\u81ea\u9a7e\u9a76\u55b7\u6c14\u5f0f\u6218\u6597\u673a","publisher":{"@id":"https:\/\/migflug.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/migflug.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":"Organization","@id":"https:\/\/migflug.com\/#organization","name":"MiGFlug\u6709\u9650\u516c\u53f8","url":"https:\/\/migflug.com\/","logo":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/migflug.com\/#\/schema\/logo\/image\/","url":"https:\/\/migflug.com\/wp-content\/uploads\/2018\/10\/logo-migflug-blue.png","contentUrl":"https:\/\/migflug.com\/wp-content\/uploads\/2018\/10\/logo-migflug-blue.png","width":200,"height":100,"caption":"MiGFlug GmbH"},"image":{"@id":"https:\/\/migflug.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/MiGFlug\/","https:\/\/x.com\/migflug","https:\/\/www.instagram.com\/migflug\/","https:\/\/www.youtube.com\/user\/MiGFlug","https:\/\/www.linkedin.com\/company\/migflug.com\/","https:\/\/www.pinterest.ch\/migflug\/"]}]}},"_links":{"self":[{"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/pages\/15995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/comments?post=15995"}],"version-history":[{"count":24,"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/pages\/15995\/revisions"}],"predecessor-version":[{"id":16681,"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/pages\/15995\/revisions\/16681"}],"wp:attachment":[{"href":"https:\/\/migflug.com\/cn\/wp-json\/wp\/v2\/media?parent=15995"}],"curies":[{"name":"\u53ef\u6e7f\u6027\u7c89\u5242","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}